Patches
Game patches are the time axis every static game-data endpoint hangs off. Each game patch the API has imported is one row here; every item, monster, map, loot table, spawner, etc. carries the patch id it was captured under, so the same id (e.g. id.item.longsword_5001) resolves to whatever stat block was live on the patch you ask for.
Endpoints
GET /v2/patches list all imported patches
GET /v2/patches/current shorthand for the latest patch on the default branch
GET /v2/patches/{id} single patch by id, version, or "current"
List
curl 'https://api.darkerdb.com/v2/patches?branch=main'
Query parameters
| Name | Type | Default | Description |
|---|---|---|---|
branch | string | main | git-style branch label. Most consumers want main. |
version | string | — | exact-match filter on version (list endpoint only) |
parent_patch_id | int | — | list patches whose parent is this id |
page | int | 1 | 1-indexed |
limit | int | 25 | max 250 |
Response
{
"pagination": { "count": 4, "limit": 25, "page": 1, "num_pages": 1, "total": 4, "next": null },
"body": [
{
"id": 9,
"branch": "main",
"version": "0.16.138.8712-2711",
"version_raw": "0.16.138.8712-2711",
"display_name": "Hotfix #115",
"released_at": null,
"imported_at": "2026-05-15T22:51:34+00:00",
"parent_patch_id": 8,
"changelog_url": "/v2/patches/0.16.138.8712-2711/changelog",
"notes": null,
"is_current": true
}
]
}
is_current is computed against the most-recently-imported row on the same branch — at most one row per branch has is_current: true.
Get
# by numeric id
curl 'https://api.darkerdb.com/v2/patches/9'
# by version string
curl 'https://api.darkerdb.com/v2/patches/0.16.138.8712-2711'
# latest on the default branch
curl 'https://api.darkerdb.com/v2/patches/current'
{id} accepts three forms:
- numeric — the surrogate patch id (e.g.
9) - version — the canonical
versionstring orversion_raw(e.g.0.16.138.8712-2711) - the literal
current— resolves to the most-recently-imported row on the requestedbranch
Pass ?branch=<name> to scope the version-string and current lookups; numeric ids are global. 404 on unknown id.
Response
{
"body": {
"id": 9,
"branch": "main",
"version": "0.16.138.8712-2711",
"version_raw": "0.16.138.8712-2711",
"display_name": "Hotfix #115",
"released_at": null,
"imported_at": "2026-05-15T22:51:34+00:00",
"parent_patch_id": 8,
"changelog_url": "/v2/patches/0.16.138.8712-2711/changelog",
"notes": null,
"is_current": true
}
}
changelog_url is null for the very first imported patch on a branch (no parent to diff against). Null fields are stripped by default — pass ?condense=false to keep them.
Time-traveling other endpoints
Patch awareness is implicit across the static game-data surface. Two flavors:
Flat catalogs (items, maps, monsters, loot-tables, spawners)
Accept a ?patch= query parameter:
# items as they were on patch 7 (Hotfix #114)
curl 'https://api.darkerdb.com/v2/items?patch=7'
# same, by version string
curl 'https://api.darkerdb.com/v2/items?patch=0.16.135.8645-2663'
# explicit "current" (same as no parameter)
curl 'https://api.darkerdb.com/v2/items?patch=current'
?patch= accepts the numeric id, the version string, the version_raw string, or current. Omitting the parameter resolves to the current patch on main.
Versioned catalogs (classes, perks, spells, quests, skills, leaderboard ranks, ...)
Accept ?at_patch=<version> plus ?branch=<branch>:
# spell defs at the named version
curl 'https://api.darkerdb.com/v2/spells?at_patch=0.16.135.8645-2663'
# branch override (rare)
curl 'https://api.darkerdb.com/v2/spells?branch=staging'
Omitting ?at_patch= returns the latest resolved state on the chosen branch.
The two parameter names are intentional: ?patch= is a flat-table filter against a patch_id column; ?at_patch= is a time-travel against the versioned history. They aren't interchangeable on a given endpoint — see each endpoint's reference page for which it accepts.
Discovery flow
- Hit
/v2/patchesto enumerate what's imported. - Pick a
version(orid) from the response. - Replay any game-data call with the matching query parameter.