Fetch all items listed on WAXPEER (large response size)
JSON snapshot updates about once per 10 seconds.
format=csv returns one row per listing, not per name, and each row carries that listing's Steam inspect link.
CSV parameters: format=csv (required for this shape), game (optional, default csgo), api (optional; the file is priced for that account), include_hold (optional, 1 / true), include_manual (optional, 1 / true, CSV only). compact applies to the JSON snapshot only and is ignored for CSV.
Every CSV document shares one header (columns are only ever appended):
item_id,name,price,auto,inspect,unlock_at,send_until,class_id,instance_id,steam_id,merchant,delivery
Read columns by name, or by position for the columns you know.
| Column | Format | Description |
|---|---|---|
| item_id | string | Listing id (Steam asset id). Use it to buy. |
| name | string, always quoted | Market hash name. A quote inside the name is doubled. |
| price | integer, zero-padded to 12 digits | 1000 = $1 (000000012500 = $12.50). |
| auto | true / false / empty | true when the listing delivers instantly. |
| inspect | string / empty | Steam inspect link. Float, pattern (paint seed), paint index and Doppler phase are read from it. Empty when not available. |
| unlock_at | RFC 3339 UTC / empty | When the Steam trade lock ends; delivery starts after it. Always present as a column. Filled only with include_hold=1, on trade-locked listings; empty otherwise. |
| send_until | RFC 3339 UTC / empty | Delivery deadline. If the item is not delivered by then, the trade fails and you are refunded in full. Same filling rule as unlock_at. |
| class_id | string / empty | Steam class id. |
| instance_id | string / empty | Steam instance id. |
| steam_id | string / empty | SteamID64 of the account holding the item. Empty when not known. |
| merchant | string / empty | Supply-source / merchant identifier for callers who can see supply sources. Empty when unknown, and always empty on include_manual rows (manual listings have no supply source). |
| delivery | hold / instant / regular / manual / empty | How the listing ships. Checked in order: trade-locked → hold (even if auto-delivered); else auto-delivered → instant; else ordinary → regular; else Waxpeer manual P2P (only with include_manual=1) → manual. Empty means unknown and should not appear in a served document. |
Item image: build it from class_id — https://steamcommunity-a.akamaihd.net/economy/image/class/<app_id>/<class_id>/200fx125f, where app_id is 730 (CS2), 570 (Dota 2), 252490 (Rust), 440 (TF2).
An empty cell means the value is unknown — never null, never 0.
Opt-in matrix:
| Request | Rows | delivery values |
|---|---|---|
| format=csv | Ordinary | instant, regular |
| + include_hold=1 | + trade-locked | + hold |
| + include_manual=1 | + manual P2P | + manual |
| + both | all | all four |
- include_hold=1 adds trade-locked rows: fills unlock_at and send_until, sets delivery=hold on those rows.
- include_manual=1 adds 12-hour manual-delivery rows: delivery=manual; merchant is empty on those rows.
- Default CSV stays without hold/manual rows.
- Rows sorted ascending by numeric item_id; each item_id appears at most once.
- Missing manual stock returns HTTP 200 with no manual rows (never errors for empty manual stock).
curl --compressed "https://api.waxpeer.com/v1/prices/snapshot?format=csv&game=csgo&api=YOUR_API_KEY"
curl --compressed "https://api.waxpeer.com/v1/prices/snapshot?format=csv&game=csgo&include_hold=1&api=YOUR_API_KEY"
curl --compressed "https://api.waxpeer.com/v1/prices/snapshot?format=csv&game=csgo&include_manual=1&api=YOUR_API_KEY"
item_id,name,price,auto,inspect,unlock_at,send_until,class_id,instance_id,steam_id,merchant,delivery
5561944,"M249 | Blizzard Marbleized (Minimal Wear)",000000067190,false,steam://rungame/730/...,,,188530173,0,,wp_merchant_42,regular
38291047,"AK-47 | Redline (Field-Tested)",000000089500,true,steam://rungame/730/...,,,321984712,0,76561198012345678,wp_merchant_42,instant
52823273471,"★ Falchion Knife | Marble Fade (Factory New)",000000170850,true,steam://rungame/730/...,2026-09-27T20:00:00Z,2026-09-28T20:00:00Z,7993038249,480085569,76561198789871368,,hold
60173812,"Glock-18 | Water Elemental (Minimal Wear)",000000012800,false,steam://rungame/730/...,,,811204731,0,,,manual
The third row (hold) is only present with include_hold=1; the fourth row (manual) only with include_manual=1. Manual rows have an empty merchant field.
The CSV response is Content-Type: text/csv; charset=utf-8 with Content-Encoding: gzip. Snapshot rebuilt about once a minute; response may be cached briefly (~15s).
- 429: too many snapshot renders in flight. Retry after
Retry-After(1 second). - 503: the snapshot is not ready yet.
On the JSON snapshot, include_hold=1 returns a separate feed that includes hold listings. In compact mode, unlock_at and send_until are the last two array positions.
Parameters
| Name | Location | Type | Description |
|---|---|---|---|
gameoptional | query | enum | Game code for requested items (csgo, tf2, rust, dota2) enum: csgo, tf2, rust, dota2 |
formatoptional | query | string | format |
apioptional | query | string | Your WAXPEER API key |
include_holdoptional | query | string | include_hold |
include_manualoptional | query | string | include_manual |
compactoptional | query | string | compact |
Responses
200 Successful operation
| Name | Type | Description | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
successoptional | boolean | Whether the operation succeeded | |||||||||||||||
timestampoptional | number | Snapshot Unix timestamp | |||||||||||||||
itemsoptional | array<object> | Array of items | |||||||||||||||
| |||||||||||||||||
msgoptional | string | Reason message when success is false | |||||||||||||||
{
"success": false,
"timestamp": 1687297281,
"items": [
{
"item_id": "27253164358",
"price": "1380000",
"name": "★ Butterfly Knife | Doppler (Factory New)",
"unlock_at": "2026-08-04T12:00:00Z",
"send_until": "2026-08-05T12:00:00Z"
}
],
"msg": "Snapshot not found"
}429 Too many requests. Rate limit exceeded
503 503