Price API
Programmatic access to live DonutSMP auction house prices — the same data behind the charts on Loot Seller. REST, JSON, read-only.
Overview
The API is available to subscribers. Sign in with Discord and generate a key below, then try a live request straight from this page — no setup required.
All endpoints share one base URL, return JSON, and accept only GET:
https://www.lootseller.io/api/v1
Why use a key at all? The public endpoints return one item per request.
An API key unlocks the bulk shape — /prices returns every tracked
item's current price in a single call, which is the difference between practical and not
if you're building something on top.
Your API key
Checking your account…
Try it
Send a real request against your own key and see exactly what comes back — no curl needed.
/api/v1/prices
Authentication
Send your key as a bearer token:
curl -H "Authorization: Bearer ls_live_YOUR_KEY" \ https://www.lootseller.io/api/v1/prices
Or with the X-API-Key header, if that suits your client better:
curl -H "X-API-Key: ls_live_YOUR_KEY" \ https://www.lootseller.io/api/v1/prices
Treat the key like a password — it identifies your subscription. Keep it server-side rather than in browser or client code. You can rotate or revoke it at any time from the Price Alerts panel; rotating invalidates the previous key immediately. A key stops working if the subscription lapses.
Rate limits
120 requests per minute per key, on a fixed one-minute window. Every response carries your current usage:
| Header | Meaning |
|---|---|
X-RateLimit-Limit | Requests allowed per minute. |
X-RateLimit-Remaining | Requests left in the current window. |
Retry-After | Seconds until the window resets. Sent on 429 only. |
Prices refresh roughly every 5–10 minutes, so polling faster than that
returns identical data. Read ageSeconds to see how fresh a row actually is
rather than polling harder.
Endpoints
Current price of every tracked item, across all three series, in one request.
Query parameters
| Name | Type | Description |
|---|---|---|
items | string | Optional. Comma-separated item names to limit the response, e.g.
Elytra,Mace. Max 200. Omit for everything. |
curl -H "Authorization: Bearer ls_live_YOUR_KEY" \ "https://www.lootseller.io/api/v1/prices?items=Elytra,Mace"
{
"count": 2,
"items": [
{
"item": "Elytra",
"single": 300000000,
"stack": null,
"order": 299000000,
"updated": 1787169000,
"ageSeconds": 92
},
{
"item": "Mace",
"single": 3200000,
"stack": null,
"order": 7600000,
"updated": 1787169000,
"ageSeconds": 92
}
],
"at": 1787169092000
}
OHLC candles for a single series, for charting or backtesting.
Query parameters
| Name | Type | Description |
|---|---|---|
item required | string | Exact item name, e.g. Elytra. See /items. |
kind | string | single (default), stack, or order. |
tf | string | 1h (default, ~14 days) or 1d (~13 months). |
curl -H "Authorization: Bearer ls_live_YOUR_KEY" \ "https://www.lootseller.io/api/v1/history?item=Elytra&kind=single&tf=1d"
{
"item": "Elytra",
"kind": "single",
"tf": "1d",
"count": 2,
"candles": [
{ "t": 1787040000, "o": 310000000, "h": 315000000,
"l": 298000000, "c": 301000000, "n": 214 },
{ "t": 1787126400, "o": 301000000, "h": 305000000,
"l": 297000000, "c": 300000000, "n": 198 }
],
"at": 1787169092000
}
Every tracked item name, plus which have stack and buy-order data.
{
"items": ["Ancient Debris", "Bamboo", "Beacon", "..."],
"stackItems": ["Ancient Debris", "Bamboo", "..."],
"orderItems": ["Ancient Debris", "Bamboo", "..."],
"at": 1787169092000
}
Discord bot
Don't want to write any code? The bot in the Discord server answers price lookups directly in chat — free for everyone, no key needed.
Posts a card with the current AH price, full-stack price and top buy order, the 24h trend, the flip margin where one exists, and the price chart — plus a link through to the full interactive chart here.
The item field autocompletes as you type, so you don't need to remember whether it's “Block of Coal” or “Coal Block”.
Field reference
All prices are DonutSMP in-game coins — not real money.
| Field | Description |
|---|---|
single | Cheapest current listing total from /ah <item>. |
stack | Cheapest full-stack total from /ah <item> stack. |
order | Highest buy-order bid, per unit — the bid side of the market. |
updated | UNIX seconds when the item was last observed. |
ageSeconds | How long ago that was. The freshness signal to trust. |
at | Server time in milliseconds when the response was built. |
t | Candle bucket start, UNIX seconds. |
o h l c | Open, high, low, close for the bucket. |
n | Number of observations folded into the bucket. |
A null price means no data for that series — not a price of zero. Many items
are never listed as full stacks, so stack is commonly null.
Errors
Errors return the matching HTTP status and a JSON body with an error string.
| Status | Meaning |
|---|---|
400 | A required parameter is missing or malformed. |
401 | No key sent, or the key isn't valid. |
403 | The key is real but its subscription is no longer active. |
404 | Unknown endpoint. |
405 | Wrong method — every endpoint is GET. |
429 | Rate limit exceeded. Wait for Retry-After. |
503 | Storage temporarily unreachable. Retry shortly. |
{ "error": "Rate limit exceeded — 120 requests/minute." }
USD reference rate
What one billion DonutSMP coins is worth in USD. Public, unauthenticated, and updated every
15 minutes. Multiply any in-game price by usdPerB / 1e9 to get its reference
value in dollars.
GET /api/prices?rate=1
{
"usdPerB": 18.19, // USD per 1,000,000,000 in-game coins
"updated": 1787705940, // unix seconds — when the rate was last MEASURED
"at": 1787706378347 // unix ms — when this response was built
}
updated and at are deliberately separate: the first is the age of
the measurement, the second is the age of the response. Only the first tells you whether the
number is current, and a cached response can be fresh while the rate behind it is not.
usdPerB is null if no rate has been recorded yet.
This is a reference value, not a price. It is derived by observing public listings on third-party marketplaces, filtered to realistically transactable offers and depth-weighted over a 10B acquisition. Loot Seller does not sell DonutSMP currency or items and does not facilitate real-money trading. Full methodology →
The history of this rate is a subscriber series and is not served by this endpoint; it returns the current value only.
Free endpoints
The endpoints powering this site stay public and unauthenticated — the subscriber API adds bulk access rather than taking anything away.
GET /api/prices?item=<name>&tf=1h|1d&kind=single|stack|order— one item's candles.GET /api/prices?items=1— the tracked item list.GET /api/prices?flips=1&by=roi— current flip opportunities.GET /api/prices?rate=1— the current USD reference rate (see below).GET /api/og?item=<name>— a 1200×630 price card image.
Please keep requests reasonable on the free endpoints — they're shared by everyone using the site.