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: QuantFeedStream opens one connection per call and yields events as they arrive.
Leaving the loop closes the connection. Heartbeat comments are consumed for you, so
every value you receive is a real event: ready first, then prices.changed.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.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
Opens an SSE stream of buy-order (bid) changes across the providers you subscribe to. Where/feed/prices tracks the cheapest listing, this tracks the best standing offer to buy — use the two together to watch a spread live.
Tiers: Quant
feed.stream_bids(...) (Python) or feed.streamBids({...}) (TypeScript). They take the same arguments and yield the same event shape as the price feed shown above, carrying bids.changed instead of prices.changed.
Query parameters
Identical to/feed/prices: providers, item_ids, and market_hash_names, all repeatable. item_ids and market_hash_names are a union capped at 100 values combined, and the same phased-item advice applies — prefer item_ids, since one market_hash_name covers every Doppler phase.
Event catalog
event
The first event on every connection. Same shape as the prices feed.
event
Fires when a provider refresh detects one or more added, updated, or removed buy orders.
comment
A
: ping comment line roughly every 20 seconds while the stream is idle, exactly as on the prices feed.Reconnecting
Same rule, different resync endpoint: on every reconnect, fetch current state fromGET /bids for the providers and items you care about, open a new connection, and apply events on top of that snapshot. There is no replay buffer and no cross-reconnect ordering guarantee.
If you run both feeds, resync both — a disconnect drops price and bid events alike, and a stale bid against a fresh ask is a spread that never existed.
Limits
Otherwise identical to the prices feed: 100 filter values combined, ~20s heartbeat. See Limits above.Possible errors
The same three as/feed/prices — 503 SERVICE_UNAVAILABLE, 422 VALIDATION_ERROR, and 429 RATE_LIMIT_FEED_CONNECTIONS_EXCEEDED. See Possible errors above for what each means and how to respond.