Skip to main content
GET
Live buyable listings
The listings endpoint exposes every buyable item currently on the CSBoard marketplace. Each record includes the complete inspection data you need for evaluation — float value, paint seed, applied stickers with their wear — alongside the authoritative asking price in USD. Results are paginated using a keyset cursor so you can reliably walk the full catalog even as new listings arrive. Authentication required. Send your key as Authorization: Bearer csb_pub_....
Pass appId=570 for Dota 2 or appId=252490 for Rust. Those rows have the same keys; the CS2-only fields (wear, doppler_phase, float_value, paint_seed, inspect_link, tradable_at, listed_at) are null and stickers is []. See Games.

Query parameters

integer
default:"730"
Game to read: 730 = CS2, 570 = Dota 2, 252490 = Rust. Omit it for CS2. See GET /v1/games for the games your key can use.
Fuzzy match on the item’s market_hash_name — splits the query into words and substring-matches each, ideal for discovery. Note: a name whose words are a subset of a longer item’s name (e.g. Spectrum Case vs Spectrum 2 Case) cannot be isolated this way. For a single specific item, use name.
string
Exact market_hash_name (case-insensitive). The precise way to fetch one specific item’s listings — name=Spectrum Case returns only Spectrum Case, never Spectrum 2 Case. Takes precedence over search when both are supplied.
string
Filter by item category, e.g. Rifle, Knife, Gloves, Pistol.
string
Filter by wear bucket. One of: Factory New, Minimal Wear, Field-Tested, Well-Worn, Battle-Scarred. CS2 only — with another appId it answers 400 invalid_param.
string
Filter by rarity tier, e.g. Classified, Covert, Extraordinary.
number
Minimum asking price in USD (inclusive).
number
Maximum asking price in USD (inclusive).
number
Minimum float value (inclusive). Accepts values from 0.0 to 1.0. CS2 only — with another appId it answers 400 invalid_param.
number
Maximum float value (inclusive). Accepts values from 0.0 to 1.0. CS2 only — with another appId it answers 400 invalid_param.
string
Delivery bucket — the same three the site’s own grid shows. One of:
  • instant — bot fulfilment. Seconds to a few minutes.
  • up_to_12h — a human seller on the source market has to send the trade. Displayed as ≤12h on the site.
  • hold — inside a Steam trade lock until the item’s tradable_at.
Use delivery=instant for any flow that must deliver now — a withdrawal, a bot payout, a user waiting on a screen. Any other value is a 400, so a typo fails loudly instead of quietly widening your results.
number
Only listings whose refund_percent is at least this (0–100). Listings with no published figure are excluded, not assumed.?delivery=instant&min_refund_percent=100 is the pool a withdrawal flow wants: ships immediately, and a Steam reversal costs nobody anything.
string
StatTrak™ filter. only returns only StatTrak™ items; exclude removes them from results. CS2 only — with another appId it answers 400 invalid_param.
string
Souvenir filter. only returns only Souvenir items; exclude removes them from results. CS2 only — with another appId it answers 400 invalid_param.
string (ISO 8601)
Only return listings that entered the catalogue after this timestamp — the delta-poll parameter. Pair it with sort=newest and the usual response is an empty page, which is what makes frequent polling cheap instead of a full rescan every tick.Overlap your watermark by ~60 seconds and dedupe by id. Send max(listed_at) - 60s, never the bare maximum. Timestamps come from the start of the database transaction that published the listing, so a large batch can commit rows stamped earlier than rows a smaller, later batch already committed — a watermark advanced to the exact maximum steps over those listings permanently.CS2 only — with another appId it answers 400 invalid_param.
string
default:"id"
Sort order. One of: id (stable default), newest, price_asc, price_desc. newest orders by listed_at, so re-listings surface alongside genuinely new inventory. newest is CS2 only — with another appId it answers 400 invalid_param.
string
Keyset pagination cursor. Pass the next_cursor value from the previous response to fetch the next page.
integer
default:"50"
Number of results per page. Minimum 1, maximum 200.

Response fields

Listing[]
required
Array of listing objects for this page.
string | null
required
Opaque keyset cursor. Pass this as the cursor query parameter to fetch the next page. null on the last page.

Pagination

This endpoint uses keyset pagination. To walk all pages:
  1. Make the initial request (no cursor).
  2. If next_cursor is non-null, repeat the request with cursor=<next_cursor>.
  3. Stop when next_cursor is null — you have reached the last page.
Keyset pagination is stable: new listings appearing during iteration won’t cause duplicates or skipped rows.

Example request

Example response

Error codes

price_usd on each listing is the authoritative buy price — it reflects the live asking price at query time and is exactly what you’ll be charged. Do not use the min_price_usd from the /prices endpoint as a buy-price estimate; that value can lag.

Authorizations

Authorization
string
header
required

Send your key as a Bearer token on every request: Authorization: Bearer csb_pub_.... Generate keys in your CSBoard profile.

Query Parameters

appId
enum<integer>
default:730

Steam appId of the game. 730 = CS2 (the default), 570 = Dota 2, 252490 = Rust. Omit it and the endpoint answers for CS2 exactly as before. An appId this key may not use answers 400 unsupported_game, whose supported_app_ids lists the ones it may — see GET /games.

Available options:
730,
570,
252490

Full-text match on market hash name.

name
string

Exact market_hash_name (case-insensitive) — the precise single-item lookup. Unlike fuzzy search, it isolates one item even when its name is a word-subset of a longer one (e.g. Spectrum Case vs Spectrum 2 Case). Takes precedence over search.

category
string

e.g. Rifle, Knife, Gloves.

wear
enum<string>

Item wear bucket. CS2 only — sent with another appId it answers 400 invalid_param.

Available options:
Factory New,
Minimal Wear,
Field-Tested,
Well-Worn,
Battle-Scarred
rarity
string

e.g. Classified, Covert.

min_price
number

Minimum price in USD.

max_price
number

Maximum price in USD.

min_float
number

Minimum float value. CS2 only — sent with another appId it answers 400 invalid_param.

max_float
number

Maximum float value. CS2 only — sent with another appId it answers 400 invalid_param.

delivery
enum<string>

Delivery bucket, the same three the site's grid shows. instant = bot fulfilment (seconds to minutes); up_to_12h = a human seller on the source market must send the trade; hold = inside a Steam trade lock until the item's tradable_at. Any other value is a 400.

Available options:
instant,
up_to_12h,
hold
min_refund_percent
number

Only listings whose refund_percent is at least this (0-100). Listings with no published figure are EXCLUDED, not assumed. Combine with delivery=instant for a pool that ships now and is fully refundable on a Steam reversal.

Required range: 0 <= x <= 100
stat_trak
enum<string>

Filter StatTrak™ items. CS2 only — sent with another appId it answers 400 invalid_param.

Available options:
only,
exclude
souvenir
enum<string>

Filter Souvenir items. CS2 only — sent with another appId it answers 400 invalid_param.

Available options:
only,
exclude
available_after
string<date-time>

ISO-8601 timestamp. Returns only listings that entered the catalogue after it — the delta-poll parameter. Pair with sort=newest; the usual response is an empty page, which is what makes frequent polling cheap instead of a full rescan every tick.

Overlap your watermark by ~60 seconds and dedupe by id. Send max(listed_at) - 60s, never the bare maximum. Timestamps come from the start of the database transaction that published the listing, so a large batch can commit rows stamped earlier than rows a smaller, later batch already committed; a watermark advanced to the exact maximum steps over those listings permanently. CS2 only — sent with another appId it answers 400 invalid_param.

sort
enum<string>
default:id

Sort order. Default id. newest orders by listed_at (when the item entered the catalogue), so re-listings surface too. newest is CS2 only — with another appId it answers 400 invalid_param.

Available options:
id,
newest,
price_asc,
price_desc
cursor
string

Keyset cursor from next_cursor.

limit
integer
default:50

1–200. Default 50.

Required range: 1 <= x <= 200

Response

A page of listings.

items
object[]
required
next_cursor
string | null
required

Pass back as cursor to fetch the next page. Null on the last page.