# SkinPricer changelog

> Every change to the SkinPricer API, SDK, market data, and terminal, newest first. Entries are verified against what shipped. All prices in the API are integer USD cents.

## Upcoming · not shipped yet · On the roadmap

What we're building next. None of this is live yet. Each item is flagged "Coming soon" in the API reference until it ships.

- **PREVIEW** (API): WebSocket streaming for real-time NBBO and trade updates, replacing repeated polling. See [ws](/api-docs/ws.md).
- **PREVIEW** (API): Outbound webhooks that push price and spread alerts to your own endpoint. See [webhooks](/api-docs/webhooks.md).
- **PREVIEW** (SDK): Game-scoped SDK client: `client.forGame("rust")` wraps the /v2 routes with the same types, retries, and throttling as the CS2 client. See [games](/api-docs/games.md).
- **PREVIEW** (API): ML-assisted fair-value estimates and listing anomaly flags.

## v1.3.1 · 2026-09-25 · Developer guides, runnable docs, and two new venues

A developer guides hub with runnable code for every endpoint, an accuracy pass on the API reference, Youpin and RapidSkins in the feed, and fixes after the Rust launch.

- **NEW** (Docs): Developer guides at /resources: task-first guides for live prices, the cross-market best bid and ask, history, float and Doppler buckets, liquidity, and Rust, each with runnable curl, TypeScript, and Python and a Markdown twin.
- **IMPROVED** (Docs): API reference code samples are copy-paste runnable: real example items and required parameters filled in, syntax highlighting, copy buttons on code and responses, and Python samples that read the response body directly.
- **FIXED** (Docs): API reference accuracy pass: the cash-executable bid rule on pricing reads, liquidity venues and the insufficient-data badge, the full set of /v2 game routes, and refreshed response samples. See [price](/api-docs/price.md), [reading-prices](/api-docs/reading-prices.md), [liquidity](/api-docs/liquidity.md), [games](/api-docs/games.md).
- **NEW** (Market data): Youpin (CS2) listings now feed cross-market pricing, NBBO, and depth. See [price](/api-docs/price.md), [nbbo](/api-docs/nbbo.md), [depth](/api-docs/depth.md).
- **NEW** (Market data): RapidSkins stock feeds for CS2 and Rust. See [price](/api-docs/price.md), [games](/api-docs/games.md).
- **NEW** (Market data): CS.Deals Rust prices and sale averages. See [games](/api-docs/games.md).
- **IMPROVED** (Market data): The Rust catalog now includes items that are not currently listed anywhere, discovered from Steam item definitions, with their images mirrored. See [items](/api-docs/items.md), [schema](/api-docs/schema.md).
- **FIXED** (API): Order-book depth only reports a crossed book when the crossing quotes come from supported cash venues. See [depth](/api-docs/depth.md).
- **FIXED** (Terminal): Rust item pages refresh live quotes in the browser instead of showing an expired cached price as current.
- **IMPROVED** (Terminal): Rust depth panels label each level's settlement basis, so cash and non-cash quotes are never read as one price.
- **IMPROVED** (Docs): One changelog for the product and the API, filterable by area and type, with links from each API change to its reference page.

## v1.3.0 · 2026-09-14 · Rust joins the terminal and the API

SkinPricer now covers Rust alongside CS2. The web terminal ships the full Rust catalog, live per-item pricing, the observed Item Store rotation tracker, and a game-scoped markets directory under /rust. The developer API serves both games through game-scoped /v2 endpoints, live since 2026-09-12.

- **NEW** (API): Rust in the developer API: game-scoped /v2 variants of pricing, listings, history, history by market, NBBO, depth, item search, liquidity, and item schema, each with a required `game=cs2` or `game=rust` parameter. Same response shapes, auth, and quotas as v1, included in every plan. Rust history buckets carry `bestAskCents` and `bestBidCents` like CS2. See [games](/api-docs/games.md), [price](/api-docs/price.md), [listings](/api-docs/listings.md), [history](/api-docs/history.md), [history-markets](/api-docs/history-markets.md), [nbbo](/api-docs/nbbo.md), [depth](/api-docs/depth.md), [items](/api-docs/items.md), [liquidity](/api-docs/liquidity.md), [schema](/api-docs/schema.md).
- **NEW** (API): Market health per game: `GET /v2/markets/health?game=rust`, keyless like the v1 route. See [markets](/api-docs/markets.md).
- **NEW** (Terminal): Rust terminal at /rust: the full item catalog with live search, plus per-item pages with live cross-market quotes, price history, NBBO, order-book depth, and workshop creator attribution.
- **NEW** (Terminal): Item Store tracker at /rust/store: the current rotation with observed store prices and market-lock countdowns, live market comparison per item, and an archive page for every rotation we have observed.
- **NEW** (Terminal): Browse hubs for every Rust item class and base item (all AK-47 skins, all doors, and so on), plus curated collections. Membership always comes from store and workshop records, never guessed from names.
- **NEW** (Terminal): Game switcher in the navbar. Pages with a twin in the other game (like the markets directory) switch in place; everything else lands on the game's hub, and search follows the active game.
- **NEW** (Terminal): Rust markets directory at /rust/markets: live status, freshness coverage, and fee schedules for every venue we ingest Rust listings from.
- **NEW** (Market data): Mannco.store prices for CS2 and Rust.
- **IMPROVED** (Terminal): Markets directory redesign for both games: a clickable per-venue status tape, 4h uptime strips and freshness coverage in the table, and venue details that expand inline under the row.
- **IMPROVED** (Docs): API docs readability pass: stronger heading and inline-code contrast, and response samples moved into the code rail next to the request runner.

## v1.2.2 · 2026-08-31 · Safer recommendations and Chinese API docs

Recommendations now refuse to guess on thin books, the API reference is available in Simplified Chinese, and the public site works properly on phones.

- **IMPROVED** (API): Recommendations withhold a hard price when supporting quotes are thin or unstable, and no longer count non-cash venues as support. See [recommend](/api-docs/recommend.md).
- **NEW** (Docs): API reference in Simplified Chinese at /zh-cn/api-docs, covering the introduction, authentication, rate limits, every concept guide, and the pricing and market-data endpoints. See [intro](/api-docs.md).
- **NEW** (Terminal): Mobile navigation: the public navbar opens a full navigation sheet on phones.
- **NEW** (Market data): WhiteMarket buy orders are now ingested, adding a bid side for WhiteMarket to NBBO and depth. See [nbbo](/api-docs/nbbo.md), [depth](/api-docs/depth.md).
- **FIXED** (Market data): Steam Community Market order books ingest again after Steam changed its response format. See [depth](/api-docs/depth.md).
- **DEPRECATED** (Market data): BitSkins is retired from the feed. It no longer appears in market lists or quotes, so drop `bitskins` from any `markets` filter. See [markets](/api-docs/markets.md).

## v1.2.1 · 2026-07-30 · Cleaner top of book

A month of correctness work on the numbers you act on: crossed books, bid selection, history granularity, and market freshness.

- **IMPROVED** (API): The `crossed` flag now compares seller-net bids (after the selling venue's fees), so a bid that only looks crossed before fees is no longer flagged. Raw quotes are still served as-is. See [nbbo](/api-docs/nbbo.md).
- **FIXED** (Market data): BUFF float and fade bucket buy orders no longer leak into the base item's best bid. See [nbbo](/api-docs/nbbo.md), [price](/api-docs/price.md).
- **FIXED** (API): `/v1/aggregations/min-prices` returns one representative row per market. See [aggregations](/api-docs/aggregations.md).
- **NEW** (API): Market health adds `freshnessCoveragePct` per market: the share of that market's served prices refreshed within its expected cadence. See [markets](/api-docs/markets.md).
- **NEW** (API): History responses echo `effectiveInterval`, the bucket width actually served (10m, 1h, or 1d), which can differ from the interval you asked for. See [history](/api-docs/history.md), [history-markets](/api-docs/history-markets.md).
- **FIXED** (API): Crossed books no longer produce negative spreads on pricing reads: `spreadBps` is null when the best bid exceeds the best ask, and the mid price falls back to the best ask. NBBO keeps its explicit `crossed` flag. See [price](/api-docs/price.md), [reading-prices](/api-docs/reading-prices.md).
- **IMPROVED** (API): The default best bid on pricing, item search, and recommendations is now cash-executable, matching NBBO. Pass an explicit `markets` list to consider every venue's bid. See [price](/api-docs/price.md), [items](/api-docs/items.md), [recommend](/api-docs/recommend.md).
- **IMPROVED** (Market data): Steam Community Market sales now feed liquidity scores. See [liquidity](/api-docs/liquidity.md).

## v1.2.0 · 2026-07-03 · Item schema API

The full SkinPricer item catalog as a versioned, cacheable snapshot, with single-item lookups and incremental sync.

- **NEW** (API): `GET /v1/schema`: the full item catalog as one snapshot with collections, containers, variants, float ranges, images, and per-market catalog ids. Send `If-None-Match` with the last ETag to get a 304 when nothing changed. See [schema](/api-docs/schema.md).
- **NEW** (API): `GET /v1/schema/items/:idOrName`: single-item schema lookup by canonical id or market_hash_name. See [schema-item](/api-docs/schema-item.md).
- **NEW** (API): `GET /v1/schema/changes`: incremental catalog sync. Returns only items changed after your stored `schemaVersion`, cursor-paginated. See [schema-changes](/api-docs/schema-changes.md).
- **IMPROVED** (API): Item images in the schema are served from the SkinPricer CDN. See [schema](/api-docs/schema.md).

## v1.1.0 · 2026-06-24 · Liquidity API and the official TypeScript SDK

Ten days after launch: a liquidity and time-to-sell API, the @skinpricer/sdk package on npm, per-endpoint reference pages, and a batch of correctness fixes.

- **NEW** (SDK): `@skinpricer/sdk` on npm: a typed TypeScript client for every key-gated v1 endpoint with zero runtime dependencies, typed errors, retries, timeouts, and rate-limit metadata. 0.2.0 adds the execution-adjusted NBBO; 0.3.0 adds liquidity and market-health resources and `marketHashNames` lookups on aggregations. See [intro](/api-docs.md).
- **NEW** (API): `GET /v1/liquidity/:marketHashName` and `POST /v1/liquidity/batch`: a liquidity score, badge, and expected time-to-sell per item, built from order books and completed sales. See [liquidity](/api-docs/liquidity.md), [liquidity-batch](/api-docs/liquidity-batch.md).
- **NEW** (API): `GET /v1/liquidity/summary/:marketHashName`: a lightweight per-item liquidity read. See [liquidity-summary](/api-docs/liquidity-summary.md).
- **NEW** (API): `GET /v1/liquidity/items` and `/v1/liquidity/items/manifest`: the whole catalog's liquidity as one ETag-cacheable snapshot. See [liquidity-bulk](/api-docs/liquidity-bulk.md), [liquidity-manifest](/api-docs/liquidity-manifest.md).
- **IMPROVED** (API): `min-prices` and `max-orders` accept `marketHashNames` as an alternative to `ids`. See [aggregations](/api-docs/aggregations.md), [max-orders](/api-docs/max-orders.md).
- **SECURITY** (API): Rate limits are pooled per subscription: every key on an account shares one per-minute and one monthly budget, with up to 5 active keys per subscription. This closes a gap where extra keys multiplied throughput. See [rate](/api-docs/rate.md), [auth](/api-docs/auth.md).
- **IMPROVED** (API): New API keys use the `sp_live_` prefix; older `sk_` keys keep working. There is no separate test environment, so every key reads the same live data. See [auth](/api-docs/auth.md).
- **FIXED** (API): `/v1/market-analytics` returned the `sell_*` and `buy_*` fields in dollars next to integer-cent `current_ask` and `current_bid`. All price fields are now integer USD cents. See [market-analytics](/api-docs/market-analytics.md).
- **FIXED** (API): `/v1/items` now splits a comma-separated `markets` filter. Multi-market filters previously returned no quotes. See [items](/api-docs/items.md).
- **FIXED** (API): `spreadBps` on NBBO and pricing is null instead of an extreme value when the spread would exceed 10000 bps (100%), which almost always means a stale bid. See [nbbo](/api-docs/nbbo.md), [price](/api-docs/price.md), [reading-prices](/api-docs/reading-prices.md).
- **FIXED** (Market data): Listings not re-fetched within 48 hours are excluded from listings, aggregates, and listing counts, so a quietly stalled market can't quote stale prices. See [listings](/api-docs/listings.md), [price](/api-docs/price.md).
- **FIXED** (API): The cross-market spread in price history uses a cash-executable, non-crossing bid, matching live NBBO. See [history](/api-docs/history.md).
- **NEW** (Market data): CS.Deals and Avan.Market join the feed.
- **NEW** (Docs): Every endpoint and concept has its own reference page with field, error, and access tables, an API Objects page, and a Markdown twin of every page for LLM tooling. See [objects](/api-docs/objects.md).
- **NEW** (Terminal): Browse filters for rarity, price range, StatTrak, and Souvenir, a visible sort control, and instant typeahead search across the full catalog.

## v1.0.0 · 2026-06-14 · SkinPricer launch

Public launch. Real-time CS2 market data across every integrated marketplace, served over a key-gated REST API and a free live terminal. Every price is an integer number of USD cents.

- **NEW** (API): REST API v1: cross-market NBBO, order-book depth, full pricing snapshots, per-listing samples with float data, price history (aggregate and per market), recommendations, item search, batch min and max prices, and per-market analytics. See [nbbo](/api-docs/nbbo.md), [depth](/api-docs/depth.md), [price](/api-docs/price.md), [listings](/api-docs/listings.md), [history](/api-docs/history.md), [history-markets](/api-docs/history-markets.md), [recommend](/api-docs/recommend.md), [items](/api-docs/items.md), [aggregations](/api-docs/aggregations.md), [max-orders](/api-docs/max-orders.md), [market-analytics](/api-docs/market-analytics.md).
- **NEW** (API): `GET /v1/arbitrage/opportunities`: ranked cross-market arbitrage pairing a fresh ask on one market with a fresh bid on another, with spread, estimated net, tradable quantity, and per-leg freshness. See [arb](/api-docs/arb.md).
- **NEW** (API): Per-attribute prices: `GET /v1/attribute-prices/latest` and `/history` for float, fade, and pattern buckets across markets, plus the BUFF-scoped `/v1/markets/buff163/latest` and `/history`. See [floats](/api-docs/floats.md), [attribute-history](/api-docs/attribute-history.md), [buff163](/api-docs/buff163.md), [buff163-history](/api-docs/buff163-history.md), [attribute-buckets](/api-docs/attribute-buckets.md).
- **NEW** (API): Execution-adjusted NBBO: an `executionAdjusted` block that re-ranks venues by what you would actually pay and receive after fees, with its own spread and confidence. See [nbbo](/api-docs/nbbo.md), [reading-prices](/api-docs/reading-prices.md).
- **NEW** (API): In the default all-markets view, the NBBO best bid only considers cash-executable venues, so Steam wallet credit can't produce a false crossed book. Pass an explicit `markets` list to include every venue. See [nbbo](/api-docs/nbbo.md), [reading-prices](/api-docs/reading-prices.md).
- **NEW** (API): Price history picks its bucket size from the requested range, or takes an `interval` param (MINUTE_5, MINUTE_15, HOUR_1, HOUR_6, DAY_1) that snaps to the nearest stored rollup: 10m, 1h, or 1d. See [history](/api-docs/history.md).
- **NEW** (API): Operational reads: per-market ingest freshness (`/v1/status/freshness`) and ingest latency (`/v1/status/market-latency`), plus Market Health (`/v1/markets/health`), the one keyless endpoint, with 48 half-hour health bars per market. See [status](/api-docs/status.md), [market-latency](/api-docs/market-latency.md), [markets](/api-docs/markets.md).
- **NEW** (API): API keys with per-plan minute and monthly quotas. Authenticate with `Authorization: ApiKey <key>` (Bearer also works); every key-gated response carries `X-RateLimit-*` headers, and a 429 comes with `Retry-After`. See [auth](/api-docs/auth.md), [rate](/api-docs/rate.md).
- **NEW** (Terminal): The live terminal, free for everyone: per-item dashboards with NBBO, depth, price history, price distribution, float-vs-price scatter, and market freshness, plus catalog browse and a markets directory with per-venue profiles.
- **NEW** (Terminal): Accounts: sign in with Google, Discord, or Steam, manage API keys, track usage, and subscribe through Stripe.
