Market

Live trade-market listings observed by the Ghost bot, plus pre-computed price history aggregates. Bot-fed, not patch-aware — listings carry the patch they were observed under in captured_patch_id but aren't time-travelable.

Endpoints

GET /v2/market                                                    paginated listing feed
GET /v2/market/{id}                                               single listing by surrogate id
GET /v2/market/analytics/{item_id}/prices/history                 price history for one item

List

curl 'https://api.darkerdb.com/v2/market?item_id=id.item.potion_health&has_sold=true&limit=50'

Query parameters

Identity / categorization:

NameModeDescription
idexactsurrogate listing id (integer)
item_idexactid.item.<slug>
itemexactraw upstream item key
archetypeexactitem archetype slug
rarityexactlisting rarity
loot_stateexactgame-side loot state at observation time
sellerexactseller display name

Price / quantity ranges:

NameDescription
min_price, max_pricetotal listing price
min_price_per_unit, max_price_per_unitnormalized per-unit price
min_quantity, max_quantitystack size

Time window / status:

NameDescription
from, toISO 8601 — restrict by created_at
has_sold, has_expired, has_cancelledbool — listing terminal state

Pagination: page (default 1), limit (default 25, max 250). Default order is created_at DESC.

Response

{
   "body": [
      {
         "id":             1005,
         "cursor":         5,
         "item_id":        "id.item.potion_health",
         "item":           "Health Potion",
         "archetype":      "potionhealth",
         "rarity":         "common",
         "price":          50,
         "price_per_unit": "25.00",
         "quantity":       2,
         "created_at":     "2026-05-18T04:41:02+00:00",
         "expires_at":     "2026-05-23T04:56:02+00:00",
         "has_sold":       false,
         "has_cancelled":  false,
         "seller":         "Trader2"
      }
   ]
}

Price history

curl 'https://api.darkerdb.com/v2/market/analytics/id.item.potion_health/prices/history?interval=15m&from=2026-05-01T00:00:00Z&to=2026-05-07T00:00:00Z'

Query parameters:

NameTypeDefaultDescription
intervalenum15mbucket size — see below
from, toISO 8601last 7dwindow bounds

Pre-computed buckets exist for: 1m, 3m, 5m, 10m, 15m, 30m, 45m, 1h, 2h, 4h, 1d, 1w, 2w, 4w. Other intervals fall through to a live time_bucket aggregate (TimescaleDB extension required).

Response:

{
   "body": {
      "item_id":  "id.item.potion_health",
      "interval": "15m",
      "from":     "2026-05-01T00:00:00Z",
      "to":       "2026-05-07T00:00:00Z",
      "series": [
         { "timestamp": "2026-05-01T00:00:00+00:00", "avg": 24.50, "min": 22, "max": 27, "volume": 41 }
      ]
   }
}

Capped at 250 buckets per response.