Skip to main content
The CSBoard API gives you real-time access to every buyable CS2 skin on the marketplace — individual listings with float values, stickers, and paint seeds, as well as grouped price rows for fast market scans. This guide walks you through all four market-data endpoints and shows you how to combine them effectively.

Browsing listings

Use GET /v1/listings to fetch live, buyable listings. Every item returned is available to buy right now. The endpoint supports rich filtering so you can narrow results to exactly the skins you care about.
Available filters

Keyset pagination

Results are paged via a cursor. When next_cursor is non-null, pass it back as cursor to fetch the next page. When next_cursor is null, you have reached the last page.

Example response

price_usd on a listing is the authoritative buy price — it is exactly what you are charged if you place an order for that item. The /v1/prices endpoint returns an indicative grouped snapshot and can lag the live per-item price.

Price list

GET /v1/prices returns one row per unique skin group (market hash name + wear + Doppler phase), showing the current cheapest ask and how many are listed. It is designed for fast market scans and price comparisons across thousands of items — not for picking a specific listing to buy. Available filters

Example response

Listings vs. price list — at a glance

Bulk snapshot

For full-catalog ingestion — comparison sites, price databases, arbitrage bots — use GET /v1/prices/snapshot.ndjson.gz. This endpoint streams the entire price list as a gzipped NDJSON file, one PriceRow JSON object per line.

Conditional requests with ETag

The snapshot sets an ETag header on every 200 response. Send it back as If-None-Match on the next request — if the snapshot hasn’t changed, the server returns 304 Not Modified with an empty body, saving bandwidth and processing time.
The snapshot endpoint is rate-limited to 1 request per minute. Use the ETag pattern above to avoid re-downloading identical data — a 304 response does not count against your rate limit budget for data transfer, only the request itself.

FX conversion

Every price in the CSBoard API is denominated in USD. Use GET /v1/currency to fetch the same FX rate table the site uses, then convert price_usd to any local currency client-side.

Example response

Converting a price

Multiply price_usd by the rate for your target currency:
FX rates are cached approximately every hour. For display purposes this is more than sufficient — for trading decisions, always use the price_usd field directly from /v1/listings.

Next steps


Picking a pool you can promise on

Two fields decide whether a listing is safe to put behind a user-facing withdrawal, and both are per-listing rather than per-account:
  • deliveryinstant (bot, seconds to minutes), up_to_12h (a human seller on the source market has to send the trade), hold (Steam trade lock until tradable_at).
  • refund_percent — how much comes back if Valve reverses the trade. It is a property of the source market, not a support policy, and it ranges from 0 to 100 across our catalogue. null means no published figure; treat it as unknown, never as 100.
For a withdrawal flow, ask for both:
Every item that comes back ships immediately and is fully covered if the trade is later reversed. Drop min_refund_percent and the catalogue gets several times larger and cheaper — which is the right call for a display case or a price index, and the wrong one for something a user is waiting on.