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_....

Query parameters

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.
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.
number
Maximum float value (inclusive). Accepts values from 0.0 to 1.0.
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.
string
Souvenir filter. only returns only Souvenir items; exclude removes them from results.
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.
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.
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

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.

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.

max_float
number

Maximum float value.

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.

Available options:
only,
exclude
souvenir
enum<string>

Filter Souvenir items.

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.

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.

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.