Arkona catalogue · REST API v1
API documentation
OpenAPI specificationNo API key or account is required. All endpoints use GET and return JSON, unless another format is selected.
Base URL
/api/v1Endpoints
GET/releases
Search releases with filters, pagination and optional RSS output.
Example request
curl 'https://arkona.dev/api/v1/releases?source=SCENE&srrdb=no&team=RUNE&limit=5'Response · 200 OK
{
"releases": [
{
"id": 123,
"name": "Example-RUNE",
"group": "RUNE",
"source": "SCENE",
"size_bytes": 1073741824,
"date": "2026-09-24T00:00:00Z",
"has_nfo": true,
"game_slug": "example",
"igdb_id": null,
"steam_appid": null,
"cover_url": null
}
],
"total": 1,
"page": 1,
"limit": 5
}GET/releases/{name}
Public metadata for an exact release name. URL-encode the path segment.
Example request
curl 'https://arkona.dev/api/v1/releases/Example-RUNE'Response · 200 OK
{
"id": 123,
"name": "Example-RUNE",
"source": "SCENE",
"has_nfo": true,
"game_slug": "example"
}GET/releases/nfo
The stored NFO as JSON. Use name and optionally source; no external lookup is triggered.
Example request
curl 'https://arkona.dev/api/v1/releases/nfo?name=Example-RUNE&source=SCENE'Response · 200 OK
{
"nfo": "NFO text"
}GET/releases/nfo/download
The same NFO as a UTF-8 text attachment. Maximum 1 MiB.
Example request
curl 'https://arkona.dev/api/v1/releases/nfo/download?name=Example-RUNE'Response · 200 OK
{
"Content-Type": "text/plain; charset=utf-8",
"Content-Disposition": "attachment; filename=release.nfo"
}GET/games
Games in the library, using the same search and release filters.
Example request
curl 'https://arkona.dev/api/v1/games?q=witcher&limit=5'Response · 200 OK
{
"games": [
{
"slug": "example",
"title": "Example",
"cover_url": null,
"release_year": 2026,
"rating": null,
"igdb_id": null,
"release_count": 3,
"last_posted": "2026-09-24T00:00:00Z"
}
],
"total": 1,
"page": 1,
"limit": 5
}GET/games/{slug}
Game metadata, genres and known IGDB, Steam, GOG, Epic and CS.RIN.RU IDs.
Example request
curl 'https://arkona.dev/api/v1/games/example'Response · 200 OK
{
"slug": "example",
"title": "Example",
"summary": null,
"genres": [],
"identifiers": {
"ids": {
"igdb": [
"1942"
],
"steam": [
"292030"
],
"gog": [],
"epic": [],
"csrin": [],
"online_fix": []
},
"csrin_urls": [],
"online_fix_urls": []
}
}GET/groups
Groups ordered by release count, with optional name search and pagination.
Example request
curl 'https://arkona.dev/api/v1/groups?q=RUNE&limit=5'Response · 200 OK
{
"groups": [
{
"name": "RUNE",
"releases": 10,
"games": 8,
"scene": 10,
"p2p": 0,
"latest": null
}
],
"total": 1,
"page": 1,
"limit": 5
}GET/groups/{name}
Release and game counts currently on Arkona, with source breakdown and latest release date.
Example request
curl 'https://arkona.dev/api/v1/groups/RUNE'Response · 200 OK
{
"name": "RUNE",
"releases": 10,
"games": 8,
"scene": 10,
"p2p": 0,
"latest": null
}GET/identifiers/{provider}/{id}
Find games by an exact provider ID. provider: igdb, steam, gog, epic, csrin or online_fix. Unknown IDs return an empty games array (up to 100 matches).
Example request
curl 'https://arkona.dev/api/v1/identifiers/steam/292030'Response · 200 OK
{
"games": [
{
"slug": "example",
"title": "Example",
"identifiers": {
"ids": {
"igdb": [
"1942"
],
"steam": [
"292030"
],
"gog": [],
"epic": [],
"csrin": [],
"online_fix": []
},
"csrin_urls": [],
"online_fix_urls": []
}
}
]
}GET/stats
Catalogue totals and yearly activity, cached for 60 seconds.
Example request
curl 'https://arkona.dev/api/v1/stats'Response · 200 OK
{
"stats": {
"releases": 100,
"games": 50,
"scene": 80,
"p2p": 20,
"full_game_count": 75,
"update_count": 25,
"windows_count": 92,
"linux_count": 6,
"macos_count": 4
},
"years": [
{
"year": "2026",
"count": 100
}
],
"updated_at": "2026-09-24T00:00:00Z"
}Query parameters
| Parameter | Type | Description |
|---|---|---|
| q | string | Words, exact:, re:, provider:identifier (see Search syntax), or a direct game URL. Maximum 512 bytes. |
| page | integer | 1-based page; default 1. |
| limit | integer | Default 50; between 1 and 100. |
| source | string | SCENE or P2P. |
| group / team | string | Exact group name; case-insensitive. team is an alias. |
| sort | string | Releases: date, added (site publication), name, size, group. Games: date, title, rating, most_releases. |
| order | string | Releases only: desc (default) or asc. Games use fixed ordering per sort. |
| size_min / size_max | number | Inclusive size bounds, in GiB (1 GiB = 1,073,741,824 bytes). |
| date_min / date_max | string | Inclusive UTC dates, YYYY-MM-DD. |
| nfo | string | yes or no. |
| srrdb | string | For /releases and /games: any (default, omitted or empty) does not filter; yes requires a stored, nonblank matched srrDB release name; no means no known confirmed link, including unchecked, pending, deferred or failed lookups. Combine with source=SCENE. This filter does not trigger a lookup. |
| scene_reference | string | For /releases and /games: yes requires a known release reference. Priority: srrDB > PreDB.net > xREL > Archive > PreDB.fr. PreDB.fr is accepted for an exact name match; an entry originating from Arkona is not independent Scene evidence. This filter does not concern game profile or store associations. no includes releases without a known reference, including pending or failed lookups. any, omitted or empty does not filter. A date or NFO alone is not a match. Supports RSS and source=SCENE without triggering an external lookup. The srrdb parameter remains srrDB-only. |
| cover | string | yes: with a cover; no: without a cover (including empty values); any: all. Takes precedence over with_cover. Also works in RSS. |
| game_platform | string | On /games: windows, macos or linux, from IGDB/Steam game metadata rather than release filenames. |
| game_date_min / game_date_max | string | On /games: inclusive game release dates, YYYY-MM-DD. Uses IGDB, then Steam, then a known year. Year-only dates match overlapping ranges; unknown dates are excluded. These are not upload dates. |
| metadata | string | yes: IGDB, Steam, GOG or Epic identity; no: none of these. Legacy igdb, steam and none remain supported. |
| with_cover | 0 / 1 | 1 to require a cover. |
| unknown_size | 0 / 1 | 1 to return only releases with unknown size. |
| format | string | Releases only: json (default), rss or xml. RSS uses the same filters and defaults to newest site publications. pubDate is the site publication date; the original date is in the description. Poll every 60 minutes and respect Retry-After. |
q searches group names (maximum 128 bytes); page and limit use the same pagination rules.
Pagination
page starts at 1; limit defaults to 50, maximum 100. A page beyond the results returns the last page. List responses include total, page and limit. Results can change as the catalogue is updated.
Search syntax
Words are combined. exact: matches a full release name; re: uses a bounded regular expression. Search by provider:identifier using the prefixes below, or paste a direct game URL. Steam, IGDB, GOG, CS.RIN, Online-Fix, MobyGames, HLTB and Can I Run It use numeric IDs. Other providers use the ID or slug from their game URL. Epic accepts stored IDs or store slugs; ScreamDB uses a namespace and EGData an offer ID. Only saved associations are searched, with no external request. appid: and steamdb: are aliases for steam:, gogdb: for gog:, ea: for origin:.
q=witcher
q=exact:Example-RUNE
q=re:-(RUNE|TENOKE)$
q=igdb%3A1942
q=steam%3A292030
q=gog%3A1207664643
q=epic%3AID
q=csrin%3A71813
q=online_fix%3A12345
q=origin%3Athe-sims%2Fthe-sims-4
q=screamdb%3ANAMESPACE
q=egdata%3AOFFER_ID
q=agru%3Athe-witcher-3-wild-hunt
q=riotpixels%3Athe-witcher-3-wild-hunt
q=mobygames%3A72808
q=pcgamingwiki%3AThe_Witcher_3%3A_Wild_Hunt
q=hltb%3A10270
q=itad%3Athe-witcher-3-wild-hunt
q=canirunit%3A12446
q=gamecopyworld%3Athe_witcher_3Request limits
The public API defaults to 60 requests per rolling minute per IP. Shared site/API limits also apply: by default 600 requests/hour, 2,000/day and 5,000 catalogue records/day. VPN/datacenter limits are lower. Repeated violations trigger temporary blocks of 15 minutes, 1 hour, then 24 hours. X-RateLimit-Limit describes the public API minute quota; always respect Retry-After.
A 429 response means the quota is exhausted. Wait for the number of seconds in Retry-After. A 503 response indicates temporary unavailability; retry with backoff.
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59
X-RateLimit-Reset: 1790208060
Retry-After: 60 (429 / 503)X-RateLimit-Reset: Next request allowance (Unix seconds)
API explorer
curl -i 'https://arkona.dev/api/v1/releases?limit=5'No response yet.
Errors
- 400
- Invalid parameter or unsupported value.
- 404
- Release, game, group or NFO not found.
- 405
- Writing is not allowed.
- 413
- The NFO exceeds 1 MiB.
- 429
- Quota exhausted; respect Retry-After.
- 503
- Temporarily busy or unavailable.
{ "error": "rate_limit_exceeded" }Data conventions
Dates are UTC ISO 8601; an unknown date stays null. Sizes are in bytes, while size filters use GiB. Provider IDs are arrays of strings: an empty array means no known ID. Missing resources return 404. Nothing is downloaded or prepared by these endpoints.
Only public catalogue metadata is returned. Original file URLs, passwords, source folders and worker details are excluded.