Explore the DarkerDB API documentation, your gateway to harnessing Dark and Darker game data. Use our APIs to track in-game market trends, analyze live player stats, and access detailed item data, including stats, descriptions, and market data. Download game assets like item icons to enhance your apps or generate interactive tooltips. Feel free to get in touch with us in our Discord for support or to request new features or data!

Items

Item definitions — over 2,400 rows from the game's design data. Every item carries a canonical envelope id (id.item.<slug>) and a wide column set (over 350 columns); null fields are stripped from each row so payloads stay compact. Always reflects the current patch.

GET /v2/items

&archetype = Archetype
Example: LightfootBoots
&archetypes = Collapse to one row per archetype (item family); each row gains a rarities array of the family's tiers. Artifacts split out as their own rows (rarities: [artifact])
Example: 1
&name = Item name
Example: Lightfoot Boots
&rarity = Item rarity
&item_type = Item type
&armor_type = Armor type
&hand_type = Hand type
&weapon_type = Weapon type
&slot_type = Slot type
&inventory_width = Range
&inventory_height = Range
&vendor_price = Range
&gear_score = Range
&adventure_points = Range
&required_class = Class bitmask (Fighter 1, Barbarian 2, … Sorcerer 512). Returns only items that explicitly require the class; unrestricted items are excluded
Example: 16
&required_knowledge = Range
&sort = `field:order` or `asc|desc` (default field per endpoint)
&primary = Attribute
Example: primary[effect_strength]=>=2
&secondary = Attribute
Example: secondary[effect_move_speed]=4:5
&locale = Localization
Default: en
&cursor = Opaque cursor from the previous response's `pagination.next`; omit for the first page.
&limit = Pagination
Options: 1 - 200
Default: 50

GET /v2/items/{id}

&id = Pick any item id from the list

Accepts either the canonical envelope (id.item.rondel_dagger_1001) or the raw upstream key (Rondel_Dagger_1001) for back-compat.

The detail shape adds primary_attributes and secondary_attributes (roll ranges, with enchanted bounds), and — for consumables and artifact gear with a passive — a plain effect line (plus effect_range where it scales). For the colour-coded HTML variant (ddb-c-* spans, same palette as the tooltip widget), call GET /v2/items/{id}/tooltip and read content.

GET/v2/items/{id}

GET /v2/items/{id}/icon

&id = Pick any item id from the list
&size = Icon transforms — resize to N (square) or WxH. 1–512 per axis.
Example: 64 or 64x96
&dpr = Icon transforms — pixel-density multiplier (1, 2, or 3). Combine with size for retina renders.
&format = Icon transforms — re-encode. Omit to keep the source format.
&trim = Icon transforms — auto-strip transparent margin (1% fuzz).
&bg = Icon transforms — background fill (#RRGGBB, #RRGGBBAA, or transparent).
Example: #000000 or transparent

GET /v2/items/{id}/sources

&id = Concrete variant id (rarity-suffixed)
&luck = Player luck stat, clamped to 0-500. Renormalizes the reverse loot draw exactly as the forward /monsters/{id}/loot endpoint does, so drops[] and containers[] drop_rate / rarities reflect that luck; 0 leaves the base rates untouched
Options: 0 - 500
Default: 0
&luck_terms = Attach the closed-form coefficients behind every rate, so a luck slider can re-rate the payload locally instead of refetching per value
Options: 0 | 1
Default: 0

Everything that answers "where do I get this, and what is it for": monsters that drop the item (drops), containers that drop it — chests, hoards, ore nodes (containers), merchants that sell / craft / buy it back, craft recipes that consume it as a material (used_in), and quests that reward (quests.rewarded_by) or require it (quests.required_byfetch turn-ins and use_item objectives, matched on the item's archetype). Names resolve through the active locale.

Each entry in drops[] represents one monster family (variant rows like summoned or elite are folded onto the archetype). Fields:

  • monster_id — canonical (base variant) id of the family.
  • drop_rate — best-case per-roll probability across all rarities and the dungeon tiers below. Always equal to the best of tiers[], so every rate here is one a tier filter can reproduce. Adventure and Adventure High Roller are excluded — they carry their own rate rows but no tier entry to attribute them to; read them from GET /v2/monsters/{id}/loot or GET /v2/containers/{id} with ?dungeon_grade=.
  • luck_grade — the loot-tier the best-case rarity draws from.
  • dungeon_grades — sorted list of dungeon tiers this family drops the item in.
  • rarities — array of { rarity, drop_rate } objects, one per rarity variant the family can drop, sorted poorest → rarest. Use this to know whether the family can drop an artifact copy, and at what rate.
  • badges — non-grade variant descriptors folded in (e.g. ["summoned"]) — empty array for plain families.

Each entry in containers[] is one container type — a chest, treasure hoard, or ore node — folded the same way GET /v2/containers folds its spawners by name. Rates share the loot graph with GET /v2/containers/{id}, so the two agree to the digit. Sorted hottest-first. Fields:

  • container_id — canonical id.container.<slug> the container page resolves.
  • slug — the name-slug (treasure_hoard).
  • name — resolved container name in the active locale.
  • icon / icon_url — the container's prop-mesh render (bare hash + absolute CDN url); null when it places no prop.
  • drop_rate — best-case per-roll probability across all rarities and the dungeon tiers below. Always equal to the best of tiers[], so every rate here is one a tier filter can reproduce. Adventure and Adventure High Roller are excluded — they carry their own rate rows but no tier entry to attribute them to; read them from GET /v2/monsters/{id}/loot or GET /v2/containers/{id} with ?dungeon_grade=.
  • rarities — array of { rarity, drop_rate } objects, one per rarity variant this container can yield, sorted poorest → rarest.

Both arrays carry a tiers[] breakdown — Normal, High Roller, Squire to Riches — on the row itself and on every rarities[] entry. active: false means the source cannot drop it at that tier at all, which is a different statement from a rate of 0. With a rarity pinned, read that rarity's own tiers: a family that drops at Normal via a common variant but whose artifact only rolls at High Roller is not a Normal source of the artifact. Tiers respect the subject's real spawn placement, so a chest that only stands in the Goblin Caves never reports an Ice Abyss rate.

?luck_terms=1 adds the closed-form coefficients behind every rate: a top-level luck.tables (deduped rate-table weight vectors, dense over grades 0-8) plus a terms array of [ tableIndex, grade, k ] triples on each rarities[].tiers[] entry. Evaluate k · mult[grade] / Σ(table · mult) per triple and take the largest, with mult read from GET /v2/luck at the luck you want. That re-rates the whole payload locally, so a luck slider never has to refetch.

&locale = Localization
Default: en

Want to embed live item cards on your own site? See the Tooltips page for the drop-in widget powered by GET /v2/items/{id}/tooltip.