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
| Name | Mode | Description |
|---|---|---|
id_like | substring | id substring; _ is literal |
archetype | exact | family slug, e.g. id.quest.alchemist_01 |
chapter_id | exact | id.quest.<prereq> (the chain pointer) |
is_repeatable | bool | true / false |
is_daily | bool | |
rank_min, rank_max | range | adventure rank gate |
sort | enum | asc (default) / desc |
limit | int | default 50, max 200 |
cursor | string | from prior response's next |
locale | string | en (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 resolvedquest_contentrows withcontent_type,content_count,target_kind,target_archetyperewards[]— fully resolvedrewardrows with theirentries[]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:
| Type | Reference field | Example |
|---|---|---|
item | item_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} |
random | random_reward_id | {type:"random", count:1, random_reward_id:"id.random_reward.x"} |
affinity | merchant_id (optional) | {type:"affinity", count:50, merchant_id:"id.merchant.x"} |
item_skin | item_skin_id | |
character_skin | character_skin_id | |
armor_skin | armor_skin_id | |
nameplate_skin | nameplate_skin_id | |
action | action_skin_id | |
emote | emote_id | |
stash / none | (none) | placeholder rows |