CrazyGames APIcrazygames.com ↗
Search games, get game details, and list games by tag or category from CrazyGames. Returns ratings, tags, developer info, platform support, and more.
What is the CrazyGames API?
The CrazyGames API provides 3 endpoints for searching and browsing the CrazyGames catalog of free online games. The search_games endpoint returns a mixed list of matching games and tag/category results in a single call. Responses include game slugs, ratings on a 0–10 scale, category and tag assignments, upvote counts, and platform support details — all without pagination overhead on the search side.
curl -X GET 'https://api.parse.bot/scraper/9db852ce-19ab-4d8e-875e-794b6fd7492e/search_games?query=racing' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace crazygames-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: CrazyGames SDK — discover tags, browse games, fetch details."""
from parse_apis.crazygames_com_api import CrazyGames, InputNotFound
client = CrazyGames()
# Search for a keyword; results mix games and tags.
for result in client.search_results.search(query="racing", limit=5):
print(result.name, result.record_type)
# Find a tag result to browse its games.
tag_result = next(
(r for r in client.search_results.search(query="racing", limit=10)
if r.record_type == "tag"),
None,
)
if tag_result is not None:
# List games under that tag, capped at 3 items.
for game_summary in client.game_summaries.list_by_tag(
tag_slug=tag_result.slug, limit=3
):
print(game_summary.name, game_summary.total_plays)
# Drill into the first game's full details via the summary navigation.
first_game = client.game_summaries.list_by_tag(
tag_slug=tag_result.slug, limit=1
).first()
if first_game is not None:
detail = first_game.details()
print(detail.name, detail.rating, detail.developer)
print("Tags:", [t.name for t in detail.tags])
# Point lookup by slug with error handling.
try:
game = client.games.get(slug="racing-limits")
print(game.name, game.category.name, game.has_multiplayer)
except InputNotFound:
print("Game not found")
print("exercised: search / list_by_tag / details / get")
Search for games by keyword. Returns a mixed list of game results and matching tags/categories. Each game result includes its slug for use with get_game_details, and each tag result includes its slug for use with list_games_by_tag. One API call, no pagination — the upstream search returns up to `limit` results in a single response.
| Param | Type | Description |
|---|---|---|
| limit | integer | Maximum number of results to return (1–100). |
| queryrequired | string | Search keyword (e.g. 'racing', 'puzzle', 'multiplayer'). |
{
"type": "object",
"fields": {
"query": "The search query that was used",
"results": "Array of game and tag/category results",
"total_results": "Number of results returned"
},
"sample": {
"data": {
"query": "racing",
"results": [
{
"id": "72970258-da9f-4382-9c61-aa88b95685db",
"name": "Racing",
"slug": "racing",
"is_category": false,
"record_type": "tag",
"total_games": 128
},
{
"id": "22275",
"name": "Racing Limits",
"slug": "racing-limits",
"labels": [
"originals"
],
"cover_url": "https://imgs.crazygames.com/racing-limits_16x9/20250711091800/racing-limits_16x9-cover",
"record_type": "game",
"mobile_friendly": true
}
],
"total_results": 10
},
"status": "success"
}
}About the CrazyGames API
Endpoints and What They Return
The API covers three operations. search_games accepts a query string and an optional limit (1–100) and returns a flat array of results where each item carries a record_type — either a game or a tag/category. Game results include the slug field used to fetch full details; tag results include a slug used to paginate that tag's full game list. The endpoint returns all results in one call with no pagination.
get_game_details takes a slug and returns the full metadata for a single game: name, url, id, rating (0–10), upvotes, added_on date, the primary category object (name and slug), an array of tags (each with name, slug, and games_count), and labels such as originals or updated. This is the right endpoint when you need structured data about a specific title.
Browsing by Tag or Category
list_games_by_tag accepts a tag_slug and an optional page number, returning up to 60 game summaries per page. The response includes total_games, has_more, tag_name, and tag_slug alongside the games array. Tag slugs are discoverable from search_games results with record_type='tag' or from the tags and category fields returned by get_game_details.
Coverage Notes
All three endpoints reflect the CrazyGames public catalog. The added_on field provides a YYYY-MM-DD date for each game, which is useful for filtering recently added titles when combined with list_games_by_tag pagination. Fields like developer name and multiplayer info are returned by get_game_details but are not surfaced in the summary objects returned by list_games_by_tag or search_games — fetching full details requires a separate get_game_details call per game.
The CrazyGames API is a managed, monitored endpoint for crazygames.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when crazygames.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official crazygames.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a game discovery feed filtered by tag slug and sorted by rating.
- Aggregate upvote counts and ratings across a category to rank top-performing games.
- Monitor the
added_onfield across paginated tag results to surface recently added games. - Resolve a user's free-text query into a tag slug via
search_games, then paginate that tag withlist_games_by_tag. - Enrich a game database with category, tags, and label metadata using
get_game_details. - Identify which tags have the largest
games_countto understand catalog depth by genre. - Build a cross-reference between game slugs and their associated tags for a recommendation engine.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does CrazyGames have an official developer API?+
What does search_games return and how does it differ from list_games_by_tag?+
search_games returns a mixed array of game and tag/category results for a keyword in a single unpaginated call. Each result has a record_type field to distinguish the two. list_games_by_tag returns only game summaries for a specific tag slug and supports pagination (up to 60 games per page), with total_games and has_more fields to manage traversal.Can I retrieve player counts, comments, or user review text for a game?+
get_game_details covers rating score, upvote count, tags, labels, category, and publication date. It does not expose individual user reviews, comment threads, or concurrent player counts. You can fork this API on Parse and revise it to add an endpoint targeting that data.Are there any limitations when using list_games_by_tag for large categories?+
has_more field tells you whether additional pages exist. The total_games field gives the full count upfront. For categories with hundreds of games, you will need multiple sequential calls incrementing the page parameter to collect the full set.Does get_game_details return the game's embed URL or asset URLs (thumbnails, screenshots)?+
url field pointing to the game's CrazyGames page, along with metadata like name, slug, rating, and tags. Direct embed URLs or CDN-hosted thumbnail and screenshot assets are not currently included in the response. You can fork this API on Parse and revise it to expose those asset fields.