GET /market— a snapshot of the feed, cheapest first.GET /market/live— a WebSocket that pushes price deltas in real time.
Snapshot
GET /market returns the curated feed sorted cheapest first.
1-based page number.
Listings per page, 1–500, or
-1 to return the whole feed in one response.price is a decimal number with the viewer’s fee already
applied, and id is the buyable listing id you pass to the trade
endpoints. See Data models for the full
MarketListing shape.
Live stream
GET /market to establish initial state.
Scopes
all or watchlist.| Scope | Contents | Payload |
|---|---|---|
watchlist | The curated feed GET /market returns | Full listing (icon, rarity, reference fields) |
all | Every listing event across the market (firehose) | Lighter — type and iconUrl are omitted; high volume |
watchlist to track the same set GET /market serves. Pick all
only if you want the raw firehose and can absorb the volume.
Authentication
The live socket uses the same JWT ticket as the WebSocket event stream — the ticket carries amarket scope alongside deposit
and trade, so one ticket works for both sockets.
Open the socket
Pass the token as a
bearer.<jwt> subprotocol (preferred — query
strings leak into logs) or as ?token=:Protocol
- Read-only. Sending any frame closes the socket with
4002 Read-only. - Heartbeats. The server sends WS pings; reply with pongs (most clients do this automatically).
- Frame shape. Every push is
{ event, data, ts }, wheretsis Unix epoch milliseconds.
Events
market.new and market.update identically — upsert the listing
keyed by data.id. On market.remove, drop the listing by
data.listingId.
Keeping a view in sync
Open the socket and buffer
Open
scope=watchlist and buffer deltas until the snapshot loads, so
nothing is lost in the gap.Prices are snapshotted at connect time using the acting sub-user’s fee
tier. A mid-session fee change takes effect on the next reconnect.
Close codes
| Code | Reason | Cause |
|---|---|---|
| 4001 | Missing token | No ticket in the subprotocol or ?token= |
| 4001 | Invalid token | Bad signature, expired, or wrong purpose |
| 4002 | Read-only | Client sent a frame after upgrade |
| 4003 | Missing market scope | Ticket lacks the market scope |
| 4008 | Too many connections | Over the per-user socket limit |
4001, back off on network blips), see
the WebSocket guide.