Skip to main content
The Feed API pushes item-level price and bid changes to you as they’re detected, over a Server-Sent Events (SSE) connection, so you don’t have to poll GET /prices or GET /bids on a timer.
Event cadence follows provider scrape cadence, not ticks. Each provider is re-scraped on its own interval (typically every few minutes), and an event only fires when that scrape detects a change. This is not a tick-by-tick order-book feed — expect bursts of events after each provider refresh, not a steady stream.
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 receive 403 — 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).
The two filters are a union — an item is streamed if either parameter names it — and their combined length is capped at 100 values. Omit both to receive changes for every item on the selected providers. See Limits.
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:
  1. Fetch current state from GET /prices (or /bids for the bids feed) for the providers/items you care about.
  2. Open a new feed connection.
  3. Apply feed events on top of that fresh snapshot going forward.
Don’t try to diff against your last-seen event — there’s no ordering or sequence guarantee across a reconnect, only within a single open connection.

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_ERRORitem_ids and market_hash_names exceed 100 values combined, an item_ids value 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 the Retry-After header, close an existing connection, or wait it out.
See the error codes reference for the full list.

GET /feed/bids — Stream bid changes

Same contract as GET /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
Tiers: Quant, same as /feed/prices.
Last modified on July 27, 2026