GET /prices or GET /bids on a timer.
Delivery is fire-and-forget: there is no event history and nothing is buffered while you’re disconnected. If your connection drops, re-fetch current state from /prices or /bids before reconnecting to the feed — see Reconnecting below.
GET /feed/prices — Stream price changes
Opens an SSE stream of price changes across the providers you subscribe to. Tiers: Quant. Keys on Free, Starter, and Pro receive403 — see Pricing to upgrade.
Query parameters
string[]
Providers to stream. Repeat the parameter to pass more than one:
providers=steam&providers=csfloat. Omit to stream all providers. Uses the same provider keys as GET /prices.integer[]
Optional exact catalog
item_id filter, repeatable: item_ids=17464&item_ids=17465. Uses the same IDs as GET /prices.string[]
Optional
market_hash_name filter, repeatable: market_hash_names=AK-47%20%7C%20Redline%20(Field-Tested).Prefer
item_ids for phased items. Doppler, Gamma Doppler, and other phased finishes all share a single market_hash_name — ★ Butterfly Knife | Doppler (Factory New) covers Phase 1 through Sapphire — but each phase is a distinct catalog item with its own item_id. Filtering by market_hash_names therefore streams every phase, so a Sapphire subscriber also receives Phase 2 prices an order of magnitude cheaper. Filter by item_ids to receive exactly the phase you asked for.Event catalog
event
The first event on every connection. Confirms the subscription.
event
Fires when a provider refresh detects one or more added, updated, or removed listings.
comment
A
: ping comment line sent roughly every 20 seconds while the stream is idle, so you can detect a dead connection without waiting on a TCP timeout. This is a raw SSE comment, not a named event — most SSE clients surface it only as a no-op keepalive.Reconnecting
The feed has no replay buffer, so a disconnect always means you may have missed changes. On every reconnect:- Fetch current state from
GET /prices(or/bidsfor the bids feed) for the providers/items you care about. - Open a new feed connection.
- Apply feed events on top of that fresh snapshot going forward.
Limits
The concurrent-connection cap is enforced per API key, not per IP or session. If you need more than 2 concurrent feed connections (for example, separate processes for prices and bids), use separate API keys or consolidate into fewer, broader-scoped connections.
Possible errors
503 SERVICE_UNAVAILABLE— the feed is temporarily disabled or its backing store is unreachable. Retry with backoff.422 VALIDATION_ERROR—item_idsandmarket_hash_namesexceed 100 values combined, anitem_idsvalue is not an integer, or an unknown provider key was passed.429 RATE_LIMIT_FEED_CONNECTIONS_EXCEEDED— you already have the maximum concurrent feed connections open for this API key. Check theRetry-Afterheader, close an existing connection, or wait it out.
GET /feed/bids — Stream bid changes
Same contract asGET /feed/prices — identical providers, item_ids, and market_hash_names parameters — for buy-order (bid) changes. Events are named bids.changed instead of prices.changed, with the same item-change shape. On reconnect, fetch current state from GET /bids instead of /prices.
cURL
/feed/prices.