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.