Sync with Waxpeer session to auto-fill API key

Fetch all items listed on WAXPEER (large response size)

GET/v1/prices/snapshot

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).
bash
curl --compressed "https://api.waxpeer.com/v1/prices/snapshot?format=csv&game=csgo&api=YOUR_API_KEY"
bash
curl --compressed "https://api.waxpeer.com/v1/prices/snapshot?format=csv&game=csgo&include_hold=1&api=YOUR_API_KEY"
bash
curl --compressed "https://api.waxpeer.com/v1/prices/snapshot?format=csv&game=csgo&include_manual=1&api=YOUR_API_KEY"
code
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.

Prices are integers. 1000 = $1.00 USD.

Parameters

NameLocationTypeDescription
game
optional
queryenum

Game code for requested items (csgo, tf2, rust, dota2)

enum: csgo, tf2, rust, dota2

format
optional
querystring

format

api
optional
querystring
include_hold
optional
querystring

include_hold

include_manual
optional
querystring

include_manual

compact
optional
querystring

compact

Responses

200 Successful operation

NameTypeDescription
success
optional
boolean

Whether the operation succeeded

timestamp
optional
number

Snapshot Unix timestamp

items
optional
array<object>

Array of items

item_id
optional
string

Unique Waxpeer item identifier (item_id)

price
optional
number

Item price in integer format (1000 = $1.00 USD)

name
optional
string

Full item market hash name

unlock_at
optional
string

RFC 3339 UTC time when the Steam trade lock ends and item can be sent. null for regular items

send_until
optional
string

RFC 3339 UTC delivery deadline

msg
optional
string

Reason message when success is false

Response
{
  "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