Quests

GET /v2/quests
GET /v2/quests/{id}

Quest definitions — title, description, prerequisite, rewards, objectives. The single-row endpoint inlines all referenced objectives and rewards into one response, so consumers can render a full quest panel in one fetch.

List

curl 'https://api.darkerdb.com/v2/quests?is_daily=true&limit=10'

Filters

NameModeDescription
id_likesubstringid substring; _ is literal
archetypeexactfamily slug, e.g. id.quest.alchemist_01
chapter_idexactid.quest.<prereq> (the chain pointer)
is_repeatablebooltrue / false
is_dailybool
rank_min, rank_maxrangeadventure rank gate
sortenumasc (default) / desc
limitintdefault 50, max 200
cursorstringfrom prior response's next
localestringen (default), de, es, fr, ja, ko, pt-BR, ru, zh-Hans, zh-Hant

LIST response

{
   "count":  643,
   "limit":  10,
   "sort":   "asc",
   "next":   "id.quest.alchemist_10",
   "rows": [
      {
         "id":                "id.quest.alchemist_01",
         "archetype":         "id.quest.alchemist_01",
         "title":             "Marks of Malice",
         "description":       "Recently, the number of patients has increased sharply…",
         "chapter_id":        "id.quest.tavern_master_01",
         "objectives": {
            "order":       105,
            "content_ids": [ "id.quest_content.fetch_bandages_01" ]
         },
         "reward_ids":        [ "id.reward.quest_alchemist_01" ],
         "is_repeatable":     false,
         "is_daily":          false
      }
   ]
}

LIST stays thin — objectives and reward_ids are just refs to keep paged browsing small. Click into a single quest for the inlined version.

Get

curl 'https://api.darkerdb.com/v2/quests/id.quest.alchemist_05'

The single-quest GET inlines:

  • objectives[] — fully resolved quest_content rows with content_type, content_count, target_kind, target_archetype
  • rewards[] — fully resolved reward rows with their entries[] array (one entry per reward grant)
{
   "id":                "id.quest.alchemist_05",
   "archetype":         "id.quest.alchemist_05",
   "title":             "Beasts of the Dark Forest",
   "description":       "Creatures able to survive in a near pitch black forest…",
   "chapter_id":        "id.quest.alchemist_04",
   "order":             109,
   "objectives": [
      {
         "id":               "id.quest_content.fetch_blue_eyeball_03",
         "content_type":     "fetch",
         "content_count":    1,
         "target_kind":      "item",
         "target_archetype": "id.item.blue_eyeballs",
         "target_tag":       "Id.Item.BlueEyeballs",
         "dungeon_tags":     []
      }
   ],
   "rewards": [
      {
         "id": "id.reward.quest_alchemist_05",
         "entries": [
            { "type": "item",       "count": 30, "item_id": "id.item.gold_coins" },
            { "type": "random",     "count": 1,  "random_reward_id": "id.random_reward.quest_armor_uncommon_01" },
            { "type": "experience", "count": 25 }
         ]
      }
   ],
   "min_adventure_rank": null,
   "is_repeatable":      false,
   "is_daily":           false
}

Objective shape

Eight content_type values: fetch, kill, explore, props, escape, hold, use_item, damage. The target_archetype field is the same shape as the archetype column on /items, /monsters, etc., so you can pivot directly:

# What items satisfy "fetch Bandage" objectives?
curl 'https://api.darkerdb.com/v2/items?archetype=id.item.bandage'

See Quest contents for the standalone endpoint.

Reward entries

Each entry has a type and a count, plus a type-specific reference field where applicable:

TypeReference fieldExample
itemitem_id{type:"item", count:30, item_id:"id.item.gold_coins"}
experience(none){type:"experience", count:25}
adventure_points(none){type:"adventure_points", count:5}
randomrandom_reward_id{type:"random", count:1, random_reward_id:"id.random_reward.x"}
affinitymerchant_id (optional){type:"affinity", count:50, merchant_id:"id.merchant.x"}
item_skinitem_skin_id
character_skincharacter_skin_id
armor_skinarmor_skin_id
nameplate_skinnameplate_skin_id
actionaction_skin_id
emoteemote_id
stash / none(none)placeholder rows