CSBoard API
Market data over our marketplace — live listings, floats, stickers, minAsk prices, FX rates — plus opt-in buying straight from your balance. Free to read, key-gated, built for automation.
The entire API in one file — auth, every endpoint, JSON samples, and the MCP config.
https://csboard.com/docs/llms.txtAuthentication
https://csboard.com/v1Authorization: Bearer csb_pub_...Send your key as a Bearer token on every request. Keys are generated in your profile — grab one here. Only /v1/health works without a key; every other endpoint requires one.
curl https://csboard.com/v1/listings \
-H "Authorization: Bearer csb_pub_..."Rate limits
Limits are per key. Exceeding one returns 429 with { "code": "rate_limit_exceeded" } and a Retry-After header. More than 30 bad keys per minute from one IP triggers a 5-minute ban. Need more headroom? Contact us to raise your key’s limit.
Endpoints
/v1/healthNo authLiveness + freshness probe. No key required — use it to check the API is up and the price list is fresh.
curl https://csboard.com/v1/healthgroups = count of priced item groups. price_list_age_seconds = age of the materialized price list (freshness).
/v1/listingsAuth requiredLive buyable listings across the marketplace — each with float, paint seed, stickers, and the asking price in USD.
| Name | Description |
|---|---|
searchstring | Full-text match on market hash name. |
categorystring | e.g. Rifle, Knife, Gloves. |
wearenum | Factory New | Minimal Wear | Field-Tested | Well-Worn | Battle-Scarred. |
raritystring | e.g. Classified, Covert. |
min_pricenumber | Minimum price in USD. |
max_pricenumber | Maximum price in USD. |
min_floatnumber | Minimum float value. |
max_floatnumber | Maximum float value. |
stat_trakonly | exclude | Filter StatTrak™ items. |
souvenironly | exclude | Filter Souvenir items. |
sortenum | id | newest | price_asc | price_desc. Default id. |
cursorstring | Keyset cursor from next_cursor. |
limitnumber | 1–200. Default 50. |
curl "https://csboard.com/v1/listings?category=Rifle&wear=Minimal%20Wear&stat_trak=only&limit=1" \
-H "Authorization: Bearer csb_pub_..."Each Listing carries id, market_hash_name, wear, doppler_phase, float_value, paint_seed, stickers[], price_usd, category, rarity, image, inspect_link, tradable, tradable_at, delivery — where delivery is "instant" or "hold", and each sticker is { name, image, slot, wear }.
/v1/pricesAuth requiredThe minAsk price list — one row per market hash name (+ wear + Doppler phase), with the cheapest current ask and how many are listed.
| Name | Description |
|---|---|
searchstring | Full-text match on market hash name. |
categorystring | e.g. Rifle, Knife, Gloves. |
wearenum | Factory New … Battle-Scarred. |
raritystring | e.g. Classified, Covert. |
min_pricenumber | Minimum price in USD. |
max_pricenumber | Maximum price in USD. |
cursorstring | Keyset cursor from next_cursor. |
limitnumber | 1–500. Default 100. |
curl "https://csboard.com/v1/prices?search=AK-47%20Redline&limit=1" \
-H "Authorization: Bearer csb_pub_..."Each row is { market_hash_name, wear, doppler_phase, min_price_usd, qty }.
/v1/prices/snapshot.ndjson.gzAuth requiredFull gzipped NDJSON dump of the price list — one price row JSON per line. Use this for full-catalog ingestion (e.g. comparison sites), not pagination. Rate limited to 1 request/minute.
curl --compressed \
-H "Authorization: Bearer csb_pub_..." \
https://csboard.com/v1/prices/snapshot.ndjson.gzSupports ETag / If-None-Match — an unchanged snapshot returns 304 Not Modified, so you only download when the catalog actually moved.
/v1/currencyAuth requiredFX rates with USD as the base. Every price in this API is USD — use this to convert to a local currency. Same rate table the site + payment flows use (cached ~1h).
curl https://csboard.com/v1/currency \
-H "Authorization: Bearer csb_pub_..."Response is { base, rates, updated_at, rub_source, base_source }. rates maps currency code → units per 1 USD.
Buying (orders)
Buy skins straight from your CSBoard balance. Buying is opt-in and deliberately locked down:
- Enable trading first. A normal key only reads. Flip on buying for your key at your profile. Until then
POST /v1/ordersreturns403 trading_not_enabled— a leaked read key can never spend. - Balance only. Buys debit your existing CSBoard balance. Top up on the site; there is no card/crypto over the API.
- One price source, no drift surprises. You are charged the LIVE price at execution.
price_usdfrom/v1/listingsis authoritative (it equals the charge);/v1/pricesis an indicative grouped snapshot that can lag. Always sendmax_price_usd— a ceiling enforced atomically inside the locked debit. If the live price moved past it the order is rejected withprice_movedand the current total, never overcharging you. - Idempotent. Send an
Idempotency-Keyheader (oridempotency_keyin the body). A retried request replays the original order instead of buying twice.
/v1/ordersAuth requiredBuy 1–10 listings by id, debited from your balance. Requires trading enabled + a linked Steam account & trade URL.
| Name | Description |
|---|---|
item_idsstring[] | 1–10 unique ids from /v1/listings. Do not mix external-market items with platform items. |
max_price_usdnumber | Total ceiling in USD. Strongly recommended — your overcharge protection. |
idempotency_keystring | Optional; or send the Idempotency-Key header. Replays the original order on retry. |
curl -X POST https://csboard.com/v1/orders \
-H "Authorization: Bearer csb_pub_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 6f9c2b10-1a2b-4c3d-9e8f-0a1b2c3d4e5f" \
-d '{ "item_ids": ["000012e8-1f4a-4c2b-9d3e-7a1b2c3d4e5f"], "max_price_usd": 268.00 }'Recommended flow: read the item from /v1/listings, take its price_usd, then POST with max_price_usd set to that (optionally + a small tolerance). A 409 price_moved means re-read and retry with the new price.
/v1/orders/:idAuth requiredStatus of one of your orders. Poll it to watch delivery. 404 if the order isn't on your account.
curl https://csboard.com/v1/orders/clx123abc... \
-H "Authorization: Bearer csb_pub_..."/v1/balanceAuth requiredYour CSBoard balance in USD. Check it before buying.
curl https://csboard.com/v1/balance \
-H "Authorization: Bearer csb_pub_..."trading_enabled reflects whether buying is turned on for your key.
Pagination
List endpoints return a next_cursor. Pass it back as ?cursor= to get the next page. A null cursor means you’ve reached the end. These are keyset cursors — stable at any depth, no offset drift.
curl "https://csboard.com/v1/listings?cursor=eyJpZCI6IjAwMDAxMmU4In0" \
-H "Authorization: Bearer csb_pub_..."Errors
Every error returns JSON of the shape { "code": "...", "detail": "..." }.
| Status | Code |
|---|---|
| 401 | missing_api_keyNo Authorization header sent. |
invalid_api_keyKey not found, revoked, or malformed. | |
| 402 | insufficient_balanceBalance < order total. Carries required_usd / current_usd. |
kyc_requiredVerify identity (kyc_url) before this purchase, then retry. | |
| 403 | trading_not_enabledBuying is off for this key — enable it in your profile. |
account_restrictedAccount restricted — contact support. | |
| 409 | price_movedLive price passed max_price_usd. Re-read /v1/listings and retry. |
item_unavailableOne or more items sold out. | |
idempotency_in_progressSame Idempotency-Key still processing — retry shortly. | |
| 429 | rate_limit_exceededPer-key request limit hit. See Retry-After. |
snapshot_rate_limitedSnapshot is limited to 1/min per key. | |
too_many_failed_auth>30 bad keys/min from your IP — 5-min ban. | |
| 501 | not_implementedEndpoint off by design (e.g. withdraw). |
MCP server
Use CSBoard from Claude Desktop or Cursor. Run npx @csboard/mcp with your CSBOARD_API_KEY and the catalog + prices become tools. Drop this into your MCP config and restart your client.
{
"mcpServers": {
"csboard": {
"command": "npx",
"args": ["-y", "@csboard/mcp"],
"env": { "CSBOARD_API_KEY": "csb_pub_..." }
}
}
}search_listingsget_priceslist_cheapesthealthNot available via API
Withdrawals stay off the API by design — manage payouts at your profile. This endpoint returns 501.
/v1/withdrawWithdraw funds — manage on the site