Skip to main content
This changelog tracks public API, documentation, and platform changes that affect integrators. You will find new endpoints, breaking changes, deprecations, and improvements here as they ship. Non-breaking internal changes and infrastructure updates are not listed.

2026-10 — Partial results when a provider is unavailable

Prices and bids no longer fail outright when one of the requested providers has no data available.
  • POST /v1/prices and POST /v1/bids stream the available providers and name the missing ones in a new X-Snapshot-Unavailable-Providers response header (comma-separated). Previously the stream returned 503 when the first requested provider had no data.
  • GET /v1/prices and GET /v1/bids listings (no item_id or market_hash_name) return the available providers and list the missing ones in a new meta.unavailable_providers field. Previously any missing provider returned 503.
  • 503 is still returned when none of the requested providers are available.
This is additive. No existing fields changed.

2026-09 — stale flag on prices and bids

Prices and bids rows now say whether they are still confirmed by the provider.
  • Every row from GET /v1/prices, POST /v1/prices, POST /v1/prices/batch, GET /v1/bids, POST /v1/bids, and POST /v1/bids/batch includes stale. It is true when the provider’s most recent scan did not include the listing or buy order, so the price shown is the last one observed and may already be gone.
  • New exclude_stale option (query parameter on the list and stream endpoints, body field on the batch endpoints) leaves those rows out. It defaults to false, so existing integrations see the same rows as before.
  • With exclude_stale=true, pagination.total on broad listings (no item_id or market_hash_name) and X-Snapshot-Total on the streams still count stale rows, so a page can contain fewer than limit items.
This is additive. No existing fields changed.

2026-08 — SDK v3.1.0: feed streaming and portfolio value fields

An additive release covering everything the API gained since v3.0.0. No methods were renamed or removed, so upgrading needs no code changes.
  • Python: pip install cs2cap==3.1.0
  • Node/TypeScript: npm install cs2cap@3.1.0
What is new
  • FeedStream, a streaming client for the real-time feeds. It handles the SSE connection, skips heartbeats, and yields decoded events with typed item changes.
  • skinswap_t joins the provider enum.
  • currency, price_provider, total_value, and change_24h_pct on the portfolio list model, plus the include parameter that fills the last two in.
  • prices on the Steam import request, so an import can carry cost basis.
  • Liquidity score field descriptions now match the current scoring model.
FeedStream is the supported way to consume the feeds from the SDKs. The generated FeedApi class reads a whole response before returning, which never completes on a stream. See the Feed API reference for the event catalog and reconnect guidance.

2026-08 — Portfolio list valuation and import cost basis

GET /portfolio now accepts include=value, which adds total_value and change_24h_pct to every portfolio in the response. It is opt-in because valuing each portfolio costs an extra lookup. The list model also returns currency and price_provider so you can tell how a portfolio is being valued. POST /portfolio/{id}/import accepts a prices map keyed by Steam asset ID. Each imported asset with a price also gets a matching buy transaction, so imported items arrive with cost basis instead of needing a second pass.

2026-08 — Liquidity score rebalanced around confirmed sales

The liquidity score now weighs evidence differently. The range stays 0-100 and no field names change, but scores move for some items — recompute anything you cached or threshold against. Requests for a 7d or 30d liquidity horizon are normalized to the canonical 24h score, which already smooths 24h, 7d, and 30d sales evidence. See the liquidity score guide for the full model.

2026-07 — Best bid excludes same-provider bids above the ask

best_bid in market analytics now ignores bids from the same provider that sit at or above that provider’s current ask. Those entries were arbitrage artifacts rather than offers you could actually sell into.

2026-07 — Real-time price and bid feeds

Two Server-Sent Events endpoints replace polling /prices and /bids on a timer:
  • GET /feed/prices — price changes as providers refresh
  • GET /feed/bids — buy-order changes
Both take repeatable providers, item_ids, and market_hash_names filters, and are available on the Quant tier. Delivery is fire-and-forget with no event history, so re-fetch current state before reconnecting. See the Feed API reference.

2026-07 — New provider: SkinSwap Trade

skinswap_t is accepted anywhere a provider key is, and appears in provider lists alongside the existing skinswap marketplace.

2026-07 — SDK v3.0.0: new repositories and renamed methods

Both SDKs move to dedicated repositories with independent versioning, and method names change to a consistent verb-first convention. This is a breaking SDK release; the REST API itself is unchanged. New homes Renamed methods (TypeScript / Python) The bundled SDK examples were removed; the docs are the canonical usage reference.
Last modified on September 13, 2026