Arkona

Arkona catalogue · REST API v1

API documentation

OpenAPI specification
GET · Read onlyPublic access

No API key or account is required. All endpoints use GET and return JSON, unless another format is selected.

Base URL

/api/v1

Endpoints

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

ParameterTypeDescription
qstringWords, exact:, re:, provider:identifier (see Search syntax), or a direct game URL. Maximum 512 bytes.
pageinteger1-based page; default 1.
limitintegerDefault 50; between 1 and 100.
sourcestringSCENE or P2P.
group / teamstringExact group name; case-insensitive. team is an alias.
sortstringReleases: date, added (site publication), name, size, group. Games: date, title, rating, most_releases.
orderstringReleases only: desc (default) or asc. Games use fixed ordering per sort.
size_min / size_maxnumberInclusive size bounds, in GiB (1 GiB = 1,073,741,824 bytes).
date_min / date_maxstringInclusive UTC dates, YYYY-MM-DD.
nfostringyes or no.
srrdbstringFor /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_referencestringFor /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.
coverstringyes: with a cover; no: without a cover (including empty values); any: all. Takes precedence over with_cover. Also works in RSS.
game_platformstringOn /games: windows, macos or linux, from IGDB/Steam game metadata rather than release filenames.
game_date_min / game_date_maxstringOn /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.
metadatastringyes: IGDB, Steam, GOG or Epic identity; no: none of these. Legacy igdb, steam and none remain supported.
with_cover0 / 11 to require a cover.
unknown_size0 / 11 to return only releases with unknown size.
formatstringReleases 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.

Request 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

Release match on srrDB, PreDB.net, xREL, in a verified archive or on PreDB.fr. A PreDB.fr entry originating from Arkona is not independent evidence of Scene membership. No known reference also includes pending or failed lookups.

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.