itch APIitch.io ↗
Access itch.io game listings, creator profiles, game jams, comments, and tags via a structured JSON API. 8 endpoints covering search, browse, and detail data.
What is the itch API?
The itch.io API provides 8 endpoints for retrieving structured data from itch.io, covering game listings, creator profiles, game jams, comments, and tag taxonomies. browse_games returns paginated game objects with title, price, platforms, sale discount, and thumbnail across filter types like top-sellers, free, and on-sale. get_game_details expands any listing into its full description, file manifest, rating, and metadata. browse_game_jams exposes upcoming, in-progress, and past jams with participant counts and ranking status.
curl -X GET 'https://api.parse.bot/scraper/f384d396-3711-487f-b2b9-165792feabc5/browse_games?tag=horror&page=1&sort=new&filter_type=top-sellers' \ -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 itch-io-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: itch.io SDK — browse, search, drill into game details and comments."""
from parse_apis.itch_io_scraper_api import Itch, FilterType, JamStatus, ResourceNotFound
client = Itch()
# Browse free games with the FilterType enum
for game in client.gamesummaries.browse(filter_type=FilterType.FREE, limit=3):
print(game.title, game.price, game.creator.name)
# Search for games by keyword, take one result and drill into details
game = client.gamesummaries.search(query="horror", limit=1).first()
if game:
detail = game.details()
print(detail.title, detail.price, detail.rating.value, detail.tags)
# Walk comments on that game
for comment in game.comments.list(limit=3):
print(comment.user.name, comment.date, comment.text[:60])
# Browse upcoming game jams using the JamStatus enum
for jam in client.jams.browse(status=JamStatus.UPCOMING, limit=3):
print(jam.title, jam.host, jam.timing)
# Typed error handling: try to get a non-existent game
try:
client.games.get(url="https://nobody.itch.io/nonexistent-game-xyz")
except ResourceNotFound as exc:
print(f"Not found: {exc.url}")
# List all tags
for tag in client.tags.list(limit=5):
print(tag.name, tag.url)
print("exercised: gamesummaries.browse / gamesummaries.search / game.details / game.comments.list / jams.browse / games.get / tags.list")
Browse games on itch.io with various filters and sorting options. Returns paginated results with game metadata including title, creator, price, platforms, and thumbnails. The server returns an HTML fragment parsed into structured game objects. Pagination uses integer page numbers; an empty games array signals the end.
| Param | Type | Description |
|---|---|---|
| tag | string | Filter by tag slug (e.g. horror, roguelike, puzzle, 2d, 3d, pixel-art). |
| page | integer | Page number for pagination. |
| sort | string | Sort order for results. |
| filter_type | string | Filter type to narrow results by category. |
{
"type": "object",
"fields": {
"games": "array of GameSummary objects",
"has_more": "boolean indicating if more pages are available",
"total_items": "integer total number of matching items",
"current_page": "integer current page number"
},
"sample": {
"data": {
"games": [
{
"url": "https://bodinhe.itch.io/takecareofthedog",
"genre": "Adventure",
"price": "Free",
"title": "TAKE CARE OF THE DOG",
"creator": {
"url": "https://bodinhe.itch.io",
"name": "bodinhe"
},
"game_id": "4493268",
"platforms": [
"Windows"
],
"thumbnail": "https://img.itch.zone/aW1nLzI3MDYzNjM3LnBuZw==/315x250%23c/ofBc9%2F.png",
"sale_discount": null,
"description_short": "a very short story about DOG."
}
],
"has_more": true,
"total_items": 36,
"current_page": 1
},
"status": "success"
}
}About the itch API
Game Discovery and Search
browse_games accepts a tag slug (e.g. horror, roguelike, pixel-art), a sort value (new or popular), and a filter_type (top-sellers, free, on-sale, new-and-popular, most-recent), returning paginated arrays with game_id, title, url, creator, description_short, genre, platforms, price, sale_discount, and thumbnail. The response includes has_more, total_items, and current_page for pagination control. search_games takes a free-text query and page number, returning the same game object shape alongside the echoed query field.
Game Detail and Comments
get_game_details takes a full game URL and returns the complete description, a tags array, a files array (each with name, size, and platforms), a rating object with value (0–5 float) and count, a creator object with name and url, and a metadata key-value map covering fields like Status, Genre, and Platforms. get_game_comments retrieves comments in reverse chronological order; each comment carries user (name and URL), text, date, votes, and post_id. Pagination is cursor-based: pass the next_token from one response as the before parameter in the next call to walk backward through older comments.
Creators, Jams, and Taxonomy
get_creator_profile resolves a creator's itch.io page URL into name, bio, social_links (each with name and url), and a games array of their published titles. browse_game_jams filters by status (upcoming, in-progress, past, starting-this-week, starting-this-month), returning jam title, url, host, host_url, timing, participant count as joined, and a ranked boolean. get_all_tags returns the complete flat list of tag objects with name and url, useful for building tag-aware browse flows or validating slugs before passing them to browse_games. get_featured_games requires no parameters and returns the current front-page featured set.
The itch API is a managed, monitored endpoint for itch.io — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when itch.io 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 itch.io 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 (e.g.
roguelike) and sorted bypopular, surfacingprice,sale_discount, andplatformsfor each result. - Track active game jams using
browse_game_jamswithstatus=in-progress, showing participant count and whether the jam is ranked. - Aggregate creator portfolios by resolving
get_creator_profilefor a list of URLs, collectingbio,social_links, and publishedgames. - Monitor community sentiment on a game by polling
get_game_commentswith cursor-based pagination and recordingvotesanddateper comment. - Enumerate the full itch.io tag taxonomy via
get_all_tagsto power autocomplete or validate tag slugs forbrowse_gamesrequests. - Compile a dataset of free and on-sale games by combining
filter_type=freeandfilter_type=on-saleacrossbrowse_gamespages. - Extract file availability and supported platforms per game using the
filesarray fromget_game_detailsto compare download options.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does itch.io have an official developer API?+
How does pagination work for game comments?+
get_game_comments uses cursor-based pagination rather than page numbers. Each response includes a next_token string. Pass that value as the before parameter in your next request to retrieve the next batch of older comments. When next_token is null, you have reached the oldest available comments.What does the `metadata` object in `get_game_details` contain?+
metadata field is a key-value map of structured attributes from the game page — typically fields like Status, Platforms, Genre, Release Date, and similar. The exact keys vary by game; not every game populates every metadata field.Does the API return user library or purchase history data?+
Can I retrieve individual game jam details, such as submissions or rules?+
browse_game_jams returns high-level jam metadata: title, host, timing, participant count, and ranked status. Per-jam submission lists, rules text, or prize details are not currently covered. You can fork this API on Parse and revise it to add a dedicated jam detail endpoint.