Merchant
Live NPC merchant inventory snapshots plus quest availability. Bot-fed: the Ghost bot observes MERCHANT_STOCK_BUY_ITEM_LIST_RES and MERCHANT_QUEST_LIST_INFO_RES broadcasts on a ~10 minute cadence. Not patch-aware.
Endpoints
GET /v2/merchant/stock most recent stock snapshot, all merchants
GET /v2/merchant/stock/{merchant} single merchant inventory
GET /v2/merchant/stock/history?item_id=... availability history for a specific item
GET /v2/merchant/quests currently available quests + reset windows
Stock
curl 'https://api.darkerdb.com/v2/merchant/stock/surgeon'
{
"body": {
"merchant": "id.merchant.surgeon",
"stock": [
{
"merchant_id": "id.merchant.surgeon",
"item_id": "id.item.potion_health",
"price": 50,
"currency": "Gold",
"stock": 20,
"rank_id": "gold",
"captured_at": "2026-05-16T01:03:43+00:00"
}
]
}
}
{merchant} accepts the canonical envelope (id.merchant.surgeon) or the raw slug (surgeon). Stock rotates on the game's internal schedule; captured_at is when the bot observed the snapshot, not when the rotation occurred on the game server — expect up to a 10-minute lag.
item_id and merchant_id are canonical envelopes — plug item_id straight into /v2/items/{id} to resolve the item row.
Stock history
curl 'https://api.darkerdb.com/v2/merchant/stock/history?item_id=id.item.potion_health'
item_id is required and accepts the canonical envelope or the raw slug. Returns every captured snapshot that included the item, newest first.
Quests
curl 'https://api.darkerdb.com/v2/merchant/quests'
{
"body": {
"quests": [
{
"merchant_id": "id.merchant.surgeon",
"quest_id": "id.quest.dailyhealer",
"reset_at": "2026-05-16T21:03:43+00:00",
"is_repeatable": true,
"rank_requirement": "iron",
"captured_at": "2026-05-16T01:03:43+00:00"
}
]
}
}
reset_at is when the daily quest rolls over. is_repeatable distinguishes daily/weekly quests from one-time story quests. Plug quest_id straight into /v2/quests/{id} for the static definition.