# API Objects

Response object shapes used across the cs2.sh API.

Response object field reference for the cs2.sh API.

## Object groups

- [Response Envelopes](#response-envelopes)
- [Items](#items)
- [History Buckets](#history-buckets)
- [Latest Price Source Data](#latest-price-source-data)
- [OHLC Source Data](#ohlc-source-data)
- [Item Schema](#item-schema)
- [Health](#health)
- [Errors](#errors)

## Response Envelopes

### LatestPricesGetResponse

All-items snapshot. Returned by `GET /v1/prices/latest` with shared response metadata.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `response_time` | `string (date-time)` | Yes | When the response was generated |
| `currency` | `string` | Yes | Currency code (always `USD`) |
| `items` | [`Record<string, Item>`](/docs/objects#item) | Yes | Map of `market_hash_name` to item price data. |

### LatestPricesPostResponse

Filtered per-item snapshot. Returned by `POST /v1/prices/latest` and includes per-item `errors`.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `response_time` | `string (date-time)` | Yes | When the response was generated |
| `currency` | `string` | Yes | Currency code (always `USD`) |
| `items` | [`Record<string, Item>`](/docs/objects#item) | Yes | Map of `market_hash_name` to item price data, filtered to the requested items. |
| `errors` | [ItemError[]](/docs/objects#itemerror) | No | Per-item failures alongside successful results (partial success). |

### HistoryResponse

Response shape for `POST /v1/prices/history`.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `response_time` | `string (date-time)` | Yes | When the response was generated. |
| `currency` | `string` | Yes | Currency code (always `USD`). |
| `start` | `string (date-time)` | Yes | Effective start of the queried range, floored to the interval boundary. |
| `end` | `string (date-time)` | Yes | Effective end of the queried range, ceiled to the interval boundary. Exclusive. |
| `interval` | `string` | Yes | Allowed: `5m`, `30m`, `1h`, `1d`. OHLC bucket size. |
| `items` | [`Record<string, HistoryItem>`](/docs/objects#historyitem) | Yes | Map of `market_hash_name` to OHLC time-series. |
| `errors` | [ItemError[]](/docs/objects#itemerror) | No | Per-item failures alongside successful results (partial success). |

### ItemLiquidityGetResponse

All-items liquidity snapshot. Returned by `GET /v1/liquidity/items`.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `response_time` | `string (date-time)` | Yes | When the snapshot was computed. |
| `run_date` | `string (date)` | Yes | UTC date for the daily computation. |
| `items` | [`Record<string, ItemLiquidityItem>`](/docs/objects#itemliquidityitem) | Yes | Map of `market_hash_name` to item liquidity data. |

### BUFFMarketFloatLatestResponse

All-items BUFF float and fade range snapshot. Returned by `GET /v1/market/buff/latest`; all prices are USD.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `response_time` | `string (date-time)` | Yes | When the response was generated. |
| `currency` | `string` | Yes | Currency code (always `USD`). |
| `items` | [`Record<string, BUFFMarketFloatItem>`](/docs/objects#buffmarketfloatitem) | Yes | Map of `market_hash_name` to per-item BUFF data. |

### BUFFMarketFloatHistoryResponse

Response shape for `POST /v1/market/buff/history`. Returns OHLC history for each requested BUFF market float/fade bucket.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `response_time` | `string (date-time)` | Yes | When the response was generated. |
| `currency` | `string` | Yes | Currency code (always `USD`). |
| `start` | `string (date-time)` | Yes | Effective start of the queried range, floored to the interval boundary. |
| `end` | `string (date-time)` | Yes | Effective end of the queried range, ceiled to the interval boundary. Exclusive. |
| `interval` | `string` | Yes | Allowed: `30m`, `1h`, `1d`. OHLC bucket size. |
| `items` | [`Record<string, BUFFMarketFloatHistoryItem>`](/docs/objects#buffmarketfloathistoryitem) | Yes | Map of `market_hash_name` to per-item BUFF history. |
| `errors` | [ItemError[]](/docs/objects#itemerror) | No | Per-item failures alongside successful results (partial success). |

### ArchiveCSFloatResponse

Response shape for `POST /v1/archive/csfloat`.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `response_time` | `string (date-time)` | Yes | When the response was generated. |
| `currency` | `string` | Yes | Currency code (always `USD`). |
| `start` | `string (date-time)` | Yes | Effective start of the queried range, floored to the day boundary. |
| `end` | `string (date-time)` | Yes | Effective end of the queried range, ceiled to the day boundary. Exclusive. |
| `items` | [`Record<string, ArchiveCSFloatItem>`](/docs/objects#archivecsfloatitem) | Yes | Map of `market_hash_name` to CSFloat sale time-series. |
| `errors` | [ItemError[]](/docs/objects#itemerror) | No | Per-item failures alongside successful results (partial success). |

### ArchiveHistoryResponse

Response shape for `POST /v1/archive/history`.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `response_time` | `string (date-time)` | Yes | When the response was generated. |
| `currency` | `string` | Yes | Currency code (always `USD`). |
| `start` | `string (date-time)` | Yes | Effective start of the queried range, floored to the interval boundary. |
| `end` | `string (date-time)` | Yes | Effective end of the queried range, ceiled to the interval boundary. Exclusive. |
| `interval` | `string` | Yes | Allowed: `1h`, `1d`. Archive bucket size. |
| `items` | [`Record<string, ArchiveHistoryItem>`](/docs/objects#archivehistoryitem) | Yes | Map of `market_hash_name` to archive time-series. |
| `errors` | [ItemError[]](/docs/objects#itemerror) | No | Per-item failures alongside successful results (partial success). |

### ArchiveSteamResponse

Response shape for `POST /v1/archive/steam`. Valid regular items with no rows return item-level `not_in_archive`; if every valid regular item has no rows, the endpoint returns `404 not_found`.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `response_time` | `string (date-time)` | Yes | When the response was generated. |
| `currency` | `string` | Yes | Currency code (always `USD`). |
| `start` | `string (date-time)` | Yes | Normalized UTC inclusive start. |
| `end` | `string (date-time)` | Yes | Normalized UTC exclusive end. |
| `interval` | `string` | Yes | Allowed: `1h`, `1d`. Requested native Steam interval for every returned bucket. |
| `items` | [`Record<string, ArchiveSteamItem>`](/docs/objects#archivesteamitem) | Yes | Map of `market_hash_name` to native Steam sale-history buckets. |
| `errors` | [ItemError[]](/docs/objects#itemerror) | No | Per-item failures alongside successful results (partial success). |

### ArchiveYoupinResponse

Response shape for `POST /v1/archive/youpin`.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `response_time` | `string (date-time)` | Yes | When the response was generated. |
| `currency` | `string` | Yes | Currency code (always `USD`). |
| `start` | `string (date-time)` | Yes | Effective start of the queried range, floored to the 1h boundary. |
| `end` | `string (date-time)` | Yes | Effective end of the queried range, ceiled to the 1h boundary. Exclusive. |
| `items` | [`Record<string, ArchiveYoupinItem>`](/docs/objects#archiveyoupinitem) | Yes | Map of `market_hash_name` to Youpin sale series. |
| `errors` | [ItemError[]](/docs/objects#itemerror) | No | Per-item failures alongside successful results (partial success). |

### SteamOrderbookLatestResponse

Latest Steam orderbook snapshot for all tracked regular items. Returned by `GET /v1/market/steam/latest`; variants are not supported.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `response_time` | `string (date-time)` | Yes | When this snapshot response was generated. |
| `currency` | `string` | Yes | Currency code (always `USD`). |
| `as_of` | `string (date-time)` | Yes | Latest `updated_at` represented anywhere in the snapshot. |
| `items` | [`Record<string, SteamOrderbookItem>`](/docs/objects#steamorderbookitem) | Yes | Regular items with current orderbook data, keyed by `market_hash_name`. |

### SteamOrderbookHistoryResponse

Response shape for `POST /v1/market/steam/history`. Valid regular items with no rows are omitted; if all valid regular items have no rows, `items` is empty.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `response_time` | `string (date-time)` | Yes | When the response was generated. |
| `currency` | `string` | Yes | Currency code (always `USD`). |
| `start` | `string (date-time)` | Yes | Normalized UTC inclusive start. |
| `end` | `string (date-time)` | Yes | Normalized UTC exclusive end. |
| `interval` | `string` | Yes | Allowed: `1h`, `1d`. Requested bucket interval. |
| `items` | [`Record<string, SteamOrderbookHistoryItem>`](/docs/objects#steamorderbookhistoryitem) | Yes | Map of `market_hash_name` to returned orderbook history. |
| `errors` | [ItemError[]](/docs/objects#itemerror) | No | Per-item failures alongside successful results (partial success). |

### SchemaResponse

Response shape for `GET /v1/schema`, the full item schema with metadata keyed by `market_hash_name`.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `schema_version` | `string` | Yes | Schema version. Re-sync clients when it changes. |
| `generation_id` | `string` | Yes | Stable identifier for this immutable schema generation. |
| `generated_at` | `string (date-time)` | Yes | When this immutable schema generation was built. Compare `generation_id` to detect a generation change. |
| `counts` | `object` | Yes | Schema entity counts. |
| `rarities` | [SchemaRarity[]](/docs/objects#schemararity) | Yes | Rarity tiers. |
| `collections` | [`Record<string, SchemaCollection>`](/docs/objects#schemacollection) | Yes | Collection metadata keyed by collection name. |
| `items` | [`Record<string, SchemaItem>`](/docs/objects#schemaitem) | Yes | Item records keyed by `market_hash_name`. |

## Items

### Item

Price data for an item across all sources.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `market_hash_name` | `string` | Yes | Steam market hash name (the canonical item identifier). |
| `buff` | [BUFFSourceData](/docs/objects#buffsourcedata) | Yes | Price data from BUFF. |
| `youpin` | [YoupinSourceData](/docs/objects#youpinsourcedata) | Yes | Price data from Youpin898. |
| `csfloat` | [CsfloatSourceData](/docs/objects#csfloatsourcedata) | Yes | Current CSFloat listing and buy-order prices. |
| `skinport` | [SkinportSourceData](/docs/objects#skinportsourcedata) | Yes | Price data from Skinport, including Skinport-supplied rolling history windows. |
| `c5game` | [C5GameSourceData](/docs/objects#c5gamesourcedata) | Yes | Price data from C5Game. Ask and bid come from independent collection passes, so timestamps may differ for the same item. |
| `steam` | [SteamSourceData](/docs/objects#steamsourcedata) | Yes | Price data from the Steam Community Market. |
| `variants` | [`Record<string, Variant>`](/docs/objects#variant) | No | Per-variant price data for items with Doppler / Gamma Doppler phases or Case Hardened tiers. Keyed by display name. |

### Variant

A variant of an item (Doppler / Gamma Doppler phase or Case Hardened tier). `youpin` includes `ask`, `bid`, and `bid_volume` on every Doppler and Gamma Doppler phase, with `ask_volume` on most items.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `market_hash_name` | `string` | Yes | Base item `market_hash_name`. Full variant name: `name`. |
| `name` | `string` | Yes | The variant's full `market_hash_name`, e.g. `★ Karambit \| Doppler (Factory New) \| Phase 1`. |
| `display_name` | `string` | Yes | Human-readable variant label (e.g. `Phase 1`, `Ruby`, `Tier 1`, `Blue Gem`). |
| `version` | `string` | Yes | Allowed: `p1`, `p2`, `p3`, `p4`, `ruby`, `sapphire`, `blackpearl`, `emerald`, `t1`, `t2`, `t3`, `t4`, `singleblue`. Stable variant code. Switch on this in client code. |
| `buff` | [BUFFSourceData](/docs/objects#buffsourcedata) | No | Price data from BUFF. |
| `youpin` | [YoupinSourceData](/docs/objects#youpinsourcedata) | No | Price data from Youpin898. |
| `csfloat` | [CsfloatSourceData](/docs/objects#csfloatsourcedata) | No | Current CSFloat listing and buy-order prices. |
| `skinport` | [SkinportSourceData](/docs/objects#skinportsourcedata) | No | Price data from Skinport, including Skinport-supplied rolling history windows. |
| `c5game` | [C5GameSourceData](/docs/objects#c5gamesourcedata) | No | Price data from C5Game. Ask and bid come from independent collection passes, so timestamps may differ for the same item. |
| `steam` | [SteamSourceData](/docs/objects#steamsourcedata) | No | Price data from the Steam Community Market. |

### HistoryItem

OHLC time-series for a single item.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `market_hash_name` | `string` | Yes | Steam market hash name (the canonical item identifier). |
| `count` | `integer` | Yes | Number of buckets with data |
| `data` | [HistoryBucket[]](/docs/objects#historybucket) | Yes | OHLC buckets in chronological order. |
| `variants` | `Record<string, object>` | No | Per-variant OHLC time-series for items with Doppler / Gamma Doppler phases or Case Hardened tiers. Keyed by display name. |

### ItemLiquidityItem

Item liquidity bucket and estimated sale time for a single item.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `market_hash_name` | `string` | Yes | Steam market hash name. |
| `liquidity` | `string` | No | Allowed: `unknown`, `extremely_illiquid`, `very_illiquid`, `illiquid`, `moderate`, `liquid`, `very_liquid`, `extremely_liquid`. Recomputed item liquidity bucket. |
| `estimated_sale_time` | `string` | No | Allowed: `under 1 hour`, `1 - 2 hours`, `2 - 6 hours`, `6 - 12 hours`, `12 - 24 hours`, `1 - 2 days`, `2 - 3 days`, `3 - 4 days`, `4 - 5 days`, `5 - 7 days`, `7 - 10 days`, `10 - 14 days`, `2 - 3 weeks`, `3 - 4 weeks`, `1 - 1.5 months`, `1.5 - 2 months`, `2+ months`, `unknown`. 80th-percentile estimated time for a competitively priced listing to sell. |
| `variants` | `Record<string, object>` | No | Per-variant item liquidity keyed by display name. |

### BUFFMarketFloatItem

BUFF market float/fade data for one item.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `market_hash_name` | `string` | Yes | Canonical base `market_hash_name`. |
| `buckets` | [BUFFMarketFloatLatestBucket[]](/docs/objects#buffmarketfloatlatestbucket) | No | Latest BUFF buckets for the base listing. |
| `variants` | [`Record<string, BUFFMarketFloatVariant>`](/docs/objects#buffmarketfloatvariant) | No | Per-variant BUFF data for items with Doppler / Gamma Doppler phases or Case Hardened tiers. Keyed by display name (e.g. `Phase 1`, `Ruby`, `Tier 1`). |

### BUFFMarketFloatHistoryItem

BUFF market float/fade OHLC history for one item.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `market_hash_name` | `string` | Yes | Canonical base `market_hash_name`. |
| `buckets` | [BUFFMarketFloatHistoryBucket[]](/docs/objects#buffmarketfloathistorybucket) | No | OHLC history for the base listing's buckets. |
| `variants` | [`Record<string, BUFFMarketFloatHistoryVariant>`](/docs/objects#buffmarketfloathistoryvariant) | No | Per-variant OHLC history for items with Doppler / Gamma Doppler phases or Case Hardened tiers. Keyed by display name. |

### BUFFMarketFloatVariant

BUFF latest data for a single variant of an item (Doppler / Gamma Doppler phase or Case Hardened tier).

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `market_hash_name` | `string` | Yes | Base item's `market_hash_name`. Full variant name lives in `name`. |
| `name` | `string` | Yes | The variant's full `market_hash_name`, e.g. `★ M9 Bayonet \| Doppler (Factory New) \| Phase 1`. |
| `display_name` | `string` | Yes | Human-readable variant label (e.g. `Phase 1`, `Ruby`, `Tier 1`). |
| `version` | `string` | Yes | Stable variant code. Switch on this in client code. |
| `buckets` | [BUFFMarketFloatLatestBucket[]](/docs/objects#buffmarketfloatlatestbucket) | Yes | Latest BUFF buckets for this variant. |

### BUFFMarketFloatHistoryVariant

BUFF OHLC history for a single variant of an item.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `market_hash_name` | `string` | Yes | Base item's `market_hash_name`. Full variant name lives in `name`. |
| `name` | `string` | Yes | The variant's full `market_hash_name`, e.g. `★ M9 Bayonet \| Doppler (Factory New) \| Phase 1`. |
| `display_name` | `string` | Yes | Human-readable variant label. |
| `version` | `string` | Yes | Stable variant code. |
| `buckets` | [BUFFMarketFloatHistoryBucket[]](/docs/objects#buffmarketfloathistorybucket) | Yes | OHLC history per bucket for this variant. |

### ArchiveCSFloatItem

CSFloat sale time-series for a single item.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `market_hash_name` | `string` | Yes | Steam market hash name. |
| `count` | `integer` | Yes | Number of days with data |
| `data` | [ArchiveCSFloatBucket[]](/docs/objects#archivecsfloatbucket) | Yes | Daily sale aggregates in chronological order. |
| `variants` | `Record<string, object>` | No | Per-variant CSFloat sale time-series for items with Doppler / Gamma Doppler phases or Case Hardened tiers. Keyed by display name. |

### ArchiveHistoryItem

Long-term archive time-series for a single item.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `market_hash_name` | `string` | Yes | Steam market hash name. |
| `count` | `integer` | Yes | Number of buckets with data. |
| `data` | [ArchiveHistoryBucket[]](/docs/objects#archivehistorybucket) | Yes | Archive buckets in chronological order. |
| `variants` | `Record<string, object>` | No | Per-variant archive time-series for items with Doppler / Gamma Doppler phases or Case Hardened tiers. Keyed by display name. |

### ArchiveSteamItem

Native Steam sale-history buckets for one regular item. No variants are returned.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `market_hash_name` | `string` | Yes | Canonical regular Steam market hash name. |
| `count` | `integer` | Yes | Number of buckets in `data`. |
| `data` | [ArchiveSteamBucket[]](/docs/objects#archivesteambucket) | Yes | Buckets sorted ascending by `bucket`. |

### ArchiveYoupinItem

Youpin sale history for a single item, served as one independent series per provider sampling interval.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `market_hash_name` | `string` | Yes | Steam market hash name. |
| `intervals` | `object` | Yes | Independent series keyed by provider sampling interval, emitted in `1h`, `4h`, `12h` order. A key is present only when that interval was observed inside the requested window, so an entry that exists only to carry requested variants returns `{}`. |
| `variants` | `Record<string, object>` | No | Per-variant Youpin sale history for items with Doppler or Gamma Doppler phases or Case Hardened tiers. Keyed by display name, and omitted when empty. A variant series never falls back to base history. |

### SteamOrderbookItem

Latest full-depth Steam orderbook for one regular item.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `updated_at` | `string (date-time)` | Yes | When Steam last updated this orderbook. |
| `collected_at` | `string (date-time)` | Yes | When cs2.sh collected this orderbook. |
| `top` | [SteamOrderbookTop](/docs/objects#steamorderbooktop) | Yes | Top-of-book best ask/bid for a Steam orderbook. Each field is `null` when that side is absent. |
| `depth` | [SteamOrderbookDepth](/docs/objects#steamorderbookdepth) | Yes | Full-depth Steam orderbook ladders in columnar form. |

### SteamOrderbookHistoryItem

Steam orderbook bucket snapshots for one regular item. No variants are returned.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `count` | `integer` | Yes | Number of points in `data`. |
| `data` | [SteamOrderbookHistoryPoint[]](/docs/objects#steamorderbookhistorypoint) | Yes | Points sorted ascending by `bucket`. |

## History Buckets

### HistoryBucket

A single OHLC time bucket. `bucket` is the interval boundary (UTC-aligned, deterministic); `open_time`/`close_time` on each per-source object are the actual first/last observation timestamps inside it.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `bucket` | `string (date-time)` | Yes | Start of the time bucket. UTC-aligned to the interval boundary (e.g. `2026-01-08T19:00:00Z` for an `1h` bucket). Deterministic. |
| `buff` | [BUFFOHLCSourceData](/docs/objects#buffohlcsourcedata) | No | OHLC bucket of BUFF prices. |
| `youpin` | [YoupinOHLCSourceData](/docs/objects#youpinohlcsourcedata) | No | OHLC bucket of Youpin prices. |
| `csfloat` | [CsfloatOHLCSourceData](/docs/objects#csfloatohlcsourcedata) | No | OHLC bucket of CSFloat ask and bid prices. |
| `skinport` | [SkinportOHLCSourceData](/docs/objects#skinportohlcsourcedata) | No | OHLC bucket of Skinport ask prices. |
| `c5game` | [C5GameOHLCSourceData](/docs/objects#c5gameohlcsourcedata) | No | OHLC bucket of C5Game ask and bid prices. |
| `steam` | [SteamOHLCSourceData](/docs/objects#steamohlcsourcedata) | No | OHLC bucket of Steam Community Market ask and bid prices. |

### BUFFMarketFloatLatestBucket

One latest BUFF float or fade range bucket, identified by `bucket_type`.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `bucket_id` | `string` | Yes | Stable bucket identifier (e.g. `base`, `float:0.15:0.18`, `variant:p2\|float:0.00:0.01`). |
| `bucket_type` | `string` | Yes | Allowed: `base`, `float`, `fade`, `float_fade`. Bucket stratification. - `base`: aggregated across the entire item or variant. - `float`: float-range slice (see `float`). - `fade`: fade-percentage slice (see `fade`). - `float_fade`: combined float and fade slice. |
| `float` | [BUFFMarketFloatRange](/docs/objects#buffmarketfloatrange) | No | Numeric range for a `float` or `fade` bucket. `min` is inclusive, `max` is exclusive. |
| `fade` | [BUFFMarketFloatRange](/docs/objects#buffmarketfloatrange) | No | Numeric range for a `float` or `fade` bucket. `min` is inclusive, `max` is exclusive. |
| `updated_at` | `string (date-time)` | No | When BUFF last refreshed this bucket. |
| `collected_at` | `string (date-time)` | No | When cs2.sh fetched this bucket. |
| `ask` | `number` | No | Lowest ask price (USD) in this bucket. |
| `avg_ask` | `number` | No | Average ask price (USD) in the bucket. |
| `bid` | `number` | No | Highest buy-order price (USD) on BUFF. |
| `ask_volume` | `integer` | No | Number of items listed for sale in this bucket. |
| `bid_volume` | `integer` | No | Number of active buy orders against this bucket. |

### BUFFMarketFloatHistoryBucket

OHLC history for one BUFF market bucket. Each entry in `data` is one interval, in chronological order.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `bucket_id` | `string` | Yes | Stable bucket identifier (e.g. `fade:99:100`, `variant:p2\|float:0.00:0.01`). |
| `bucket_type` | `string` | Yes | Allowed: `base`, `float`, `fade`, `float_fade`. Bucket stratification. See `BUFFMarketFloatLatestBucket.bucket_type`. |
| `float` | [BUFFMarketFloatRange](/docs/objects#buffmarketfloatrange) | No | Numeric range for a `float` or `fade` bucket. `min` is inclusive, `max` is exclusive. |
| `fade` | [BUFFMarketFloatRange](/docs/objects#buffmarketfloatrange) | No | Numeric range for a `float` or `fade` bucket. `min` is inclusive, `max` is exclusive. |
| `data` | [BUFFMarketFloatHistoryPoint[]](/docs/objects#buffmarketfloathistorypoint) | Yes | OHLC observations for this bucket, chronological. |

### BUFFMarketFloatHistoryPoint

A single OHLC observation inside a BUFF market float/fade bucket history.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `bucket` | `string (date-time)` | Yes | UTC-aligned start of the OHLC interval. |
| `updated_at` | `string (date-time)` | No | When BUFF last refreshed the bucket inside this interval. |
| `collected_at` | `string (date-time)` | No | When cs2.sh fetched the source rows inside this interval. |
| `open_ask` | `number` | No | First ask price (USD) observed in the interval. |
| `high_ask` | `number` | No | Highest ask price (USD) observed in the interval. |
| `low_ask` | `number` | No | Lowest ask price (USD) observed in the interval. |
| `close_ask` | `number` | No | Last ask price (USD) observed in the interval. |
| `open_avg_ask` | `number` | No | First `avg_ask` value observed in the interval. |
| `high_avg_ask` | `number` | No | Highest `avg_ask` value observed in the interval. |
| `low_avg_ask` | `number` | No | Lowest `avg_ask` value observed in the interval. |
| `close_avg_ask` | `number` | No | Last `avg_ask` value observed in the interval. |
| `open_bid` | `number` | No | First bid price (USD) observed in the interval. |
| `high_bid` | `number` | No | Highest bid price (USD) observed in the interval. |
| `low_bid` | `number` | No | Lowest bid price (USD) observed in the interval. |
| `close_bid` | `number` | No | Last bid price (USD) observed in the interval. |
| `ask_volume` | `integer` | No | Last observed ask volume inside the interval. |
| `bid_volume` | `integer` | No | Last observed bid volume inside the interval. |
| `open_time` | `string (date-time)` | Yes | Timestamp of the first observation inside the interval. Distinct from `bucket` (the interval boundary). |
| `close_time` | `string (date-time)` | Yes | Timestamp of the last observation inside the interval. Distinct from `bucket` (the interval boundary). |

### BUFFMarketFloatRange

Numeric range for a `float` or `fade` bucket. `min` is inclusive, `max` is exclusive.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `min` | `number` | No | Inclusive lower bound. |
| `max` | `number` | No | Exclusive upper bound. |

### ArchiveCSFloatBucket

One day of sale data on CSFloat.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `date` | `string` | Yes | Date in `YYYY-MM-DD` format (UTC). |
| `price` | `number \| null` | Yes | Arithmetic average of all sale prices (USD) that day. |
| `volume` | `integer` | Yes | Number of sales that day. |

### ArchiveHistoryBucket

A single archive time bucket. Each platform key is present only when data exists for that platform in this bucket.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `bucket` | `string (date-time)` | Yes | Start of the time bucket (UTC-aligned to the interval boundary). |
| `aggregate` | [ArchiveHistoryPlatformData](/docs/objects#archivehistoryplatformdata) | No | Per-platform price data within an archive bucket. `hourly_volume` and `total_supply` are populated only on the `aggregate` platform. |
| `buff` | [ArchiveHistoryPlatformData](/docs/objects#archivehistoryplatformdata) | No | Per-platform price data within an archive bucket. `hourly_volume` and `total_supply` are populated only on the `aggregate` platform. |
| `youpin` | [ArchiveHistoryPlatformData](/docs/objects#archivehistoryplatformdata) | No | Per-platform price data within an archive bucket. `hourly_volume` and `total_supply` are populated only on the `aggregate` platform. |
| `c5game` | [ArchiveHistoryPlatformData](/docs/objects#archivehistoryplatformdata) | No | Per-platform price data within an archive bucket. `hourly_volume` and `total_supply` are populated only on the `aggregate` platform. |

### ArchiveHistoryPlatformData

Per-platform price data within an archive bucket. `hourly_volume` and `total_supply` are populated only on the `aggregate` platform.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `time` | `string (date-time)` | Yes | Actual timestamp of the last observation in the bucket. Distinct from the bucket boundary. |
| `ask` | `number \| null` | Yes | Last observed ask price (USD) in the bucket. |
| `ask_volume` | `integer \| null` | Yes | Last observed number of items listed for sale. |
| `bid` | `number \| null` | Yes | Last observed bid price (USD) in the bucket. |
| `bid_volume` | `integer \| null` | Yes | Last observed number of buy orders. |
| `hourly_volume` | `number \| null` | No | Aggregated trading volume metric (`aggregate` platform only). |
| `total_supply` | `number \| null` | No | Total market supply metric (`aggregate` platform only). |
| `sample_count` | `integer` | Yes | Number of observations aggregated into this bucket. |

### ArchiveSteamBucket

One native Steam sale-history bucket. `price` is Steam median sale price and `volume` is purchases.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `bucket` | `string (date-time)` | Yes | Native Steam bucket start. |
| `price` | `number \| null` | Yes | Steam median sale price in USD. |
| `volume` | `integer \| null` | Yes | Steam purchase count. |

### ArchiveYoupinSeries

One independent Youpin sale series at a single provider sampling interval, carrying exactly `count` and `data`. Series are never stitched, summed, or interleaved with one another.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `count` | `integer` | Yes | Number of points in this series, equal to the length of `data`. This is not a sale volume, and `count` of 0 with an empty `data` means the interval was observed and no sales landed in the window. |
| `data` | [ArchiveYoupinPoint[]](/docs/objects#archiveyoupinpoint) | Yes | Sales at this interval, ordered by bucket. |

### ArchiveYoupinPoint

One sale on Youpin. Youpin keeps one sale per sampling bucket, so a point is a real sale, not an aggregate. The sampling interval is the series key, never a field on the point.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `bucket` | `string (date-time)` | Yes | Start of the provider sampling bucket the point represents, at the width of the series holding it. |
| `time` | `string (date-time)` | Yes | Actual sale time inside the bucket. |
| `price` | `number \| null` | Yes | Sale price (USD), converted from CNY at the sale date's own historical rate, or `null` when no rate for that date could be resolved. |

### SteamOrderbookTop

Top-of-book best ask/bid for a Steam orderbook. Each field is `null` when that side is absent.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ask` | `number \| null` | Yes | Best sell price in USD, or `null` when absent. |
| `ask_volume` | `integer \| null` | Yes | Total Steam sell-order count, or `null` when absent. |
| `bid` | `number \| null` | Yes | Best buy-order price in USD, or `null` when absent. |
| `bid_volume` | `integer \| null` | Yes | Total Steam buy-order count, or `null` when absent. |

### SteamOrderbookDepth

Full-depth Steam orderbook ladders in columnar form.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `ask_levels` | `integer` | Yes | Number of ask levels in `asks`. |
| `bid_levels` | `integer` | Yes | Number of bid levels in `bids`. |
| `asks` | [SteamOrderbookDepthSide](/docs/objects#steamorderbookdepthside) | Yes | One side of the orderbook ladder in columnar form. `prices[i]` pairs with `volumes[i]`; each `volume` is the quantity available at that exact price, not cumulative. |
| `bids` | [SteamOrderbookDepthSide](/docs/objects#steamorderbookdepthside) | Yes | One side of the orderbook ladder in columnar form. `prices[i]` pairs with `volumes[i]`; each `volume` is the quantity available at that exact price, not cumulative. |

### SteamOrderbookDepthSide

One side of the orderbook ladder in columnar form. `prices[i]` pairs with `volumes[i]`; each `volume` is the quantity available at that exact price, not cumulative.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `prices` | `number[]` | Yes | Decimal USD prices. Asks ascending, bids descending. |
| `volumes` | `integer[]` | Yes | Quantity available at each corresponding price. |

### SteamOrderbookHistoryPoint

One latest-in-bucket full-depth Steam orderbook snapshot. This is not OHLC data.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `bucket` | `string (date-time)` | Yes | UTC bucket start. |
| `updated_at` | `string (date-time)` | Yes | When Steam last updated the orderbook represented by this bucket. |
| `collected_at` | `string (date-time)` | Yes | When cs2.sh collected the orderbook represented by this bucket. |
| `top` | [SteamOrderbookTop](/docs/objects#steamorderbooktop) | Yes | Top-of-book best ask/bid for a Steam orderbook. Each field is `null` when that side is absent. |
| `depth` | [SteamOrderbookDepth](/docs/objects#steamorderbookdepth) | Yes | Full-depth Steam orderbook ladders in columnar form. |

## Latest Price Source Data

### BUFFSourceData

Price data from BUFF.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `updated_at` | `string (date-time) \| null` | Yes | When BUFF last updated this price |
| `collected_at` | `string (date-time) \| null` | Yes | When cs2.sh fetched this data |
| `ask` | `number \| null` | Yes | Lowest ask price (USD) |
| `ask_volume` | `integer \| null` | Yes | Number of items listed for sale |
| `bid` | `number \| null` | Yes | Highest buy-order price (USD) |
| `bid_volume` | `integer \| null` | Yes | Number of active buy orders |

### YoupinSourceData

Price data from Youpin898.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `updated_at` | `string (date-time) \| null` | Yes | When Youpin last updated this price |
| `collected_at` | `string (date-time) \| null` | Yes | When cs2.sh fetched this data |
| `ask` | `number \| null` | Yes | Lowest ask price (USD) |
| `ask_volume` | `integer \| null` | Yes | Number of items listed for sale |
| `bid` | `number \| null` | Yes | Highest buy-order price (USD) |
| `bid_volume` | `integer \| null` | Yes | Number of active buy orders |

### CsfloatSourceData

Current CSFloat listing and buy-order prices.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `updated_at` | `string (date-time) \| null` | Yes | When CSFloat last updated this price |
| `collected_at` | `string (date-time) \| null` | Yes | When cs2.sh fetched this data |
| `ask` | `number \| null` | Yes | Lowest ask price (USD) |
| `ask_volume` | `integer \| null` | Yes | Number of items listed for sale |
| `bid` | `number \| null` | Yes | Highest buy-order price (USD) |

### SkinportSourceData

Price data from Skinport, including Skinport-supplied rolling history windows.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `updated_at` | `string (date-time) \| null` | Yes | When Skinport last updated this price |
| `collected_at` | `string (date-time) \| null` | Yes | When cs2.sh fetched this data |
| `ask` | `number \| null` | Yes | Lowest ask price (USD) |
| `ask_volume` | `integer \| null` | Yes | Number of items listed for sale |
| `max_ask` | `number \| null` | Yes | Highest listing price (USD) |
| `mean_ask` | `number \| null` | Yes | Average listing price (USD) |
| `median_ask` | `number \| null` | Yes | Median listing price (USD) |
| `24h_history` | [SkinportPriceWindow](/docs/objects#skinportpricewindow) \| `null` | Yes | - |
| `7d_history` | [SkinportPriceWindow](/docs/objects#skinportpricewindow) \| `null` | Yes | - |
| `30d_history` | [SkinportPriceWindow](/docs/objects#skinportpricewindow) \| `null` | Yes | - |
| `90d_history` | [SkinportPriceWindow](/docs/objects#skinportpricewindow) \| `null` | Yes | - |

### SteamSourceData

Price data from the Steam Community Market.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `updated_at` | `string (date-time) \| null` | Yes | When the upstream price was last updated |
| `collected_at` | `string (date-time) \| null` | Yes | When cs2.sh fetched this data |
| `ask` | `number \| null` | Yes | Lowest ask price (USD) |
| `ask_volume` | `integer \| null` | Yes | Number of items listed for sale |
| `bid` | `number \| null` | Yes | Highest buy-order price (USD) |
| `bid_volume` | `integer \| null` | Yes | Number of active buy orders |

### C5GameSourceData

Price data from C5Game. Ask and bid come from independent collection passes, so timestamps may differ for the same item.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `updated_at` | `string (date-time) \| null` | Yes | When C5Game last updated this price |
| `collected_at` | `string (date-time) \| null` | Yes | When cs2.sh fetched this data |
| `ask` | `number \| null` | Yes | Lowest ask price (USD) |
| `ask_volume` | `integer \| null` | Yes | Number of items listed for sale |
| `bid` | `number \| null` | Yes | Highest buy-order price (USD) |

### SkinportPriceWindow

Skinport-supplied rolling price window. Object is `null` when Skinport has no recent sales for the item.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `price` | `number` | Yes | Last sale price (USD) within the window |
| `max_price` | `number` | Yes | Highest sale price (USD) within the window |
| `mean_price` | `number` | Yes | Average sale price (USD) within the window |
| `median_price` | `number` | Yes | Median sale price (USD) within the window |
| `volume` | `integer` | Yes | Number of sales within the window |

## OHLC Source Data

### BUFFOHLCSourceData

OHLC bucket of BUFF prices.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `open_ask` | `number \| null` | Yes | First ask price in the bucket |
| `high_ask` | `number \| null` | Yes | Highest ask price in the bucket |
| `low_ask` | `number \| null` | Yes | Lowest ask price in the bucket |
| `close_ask` | `number \| null` | Yes | Last ask price in the bucket |
| `ask_volume` | `integer \| null` | Yes | Last observed ask volume in the bucket |
| `open_bid` | `number \| null` | Yes | First bid price in the bucket |
| `high_bid` | `number \| null` | Yes | Highest bid price in the bucket |
| `low_bid` | `number \| null` | Yes | Lowest bid price in the bucket |
| `close_bid` | `number \| null` | Yes | Last bid price in the bucket |
| `bid_volume` | `integer \| null` | Yes | Last observed bid volume in the bucket |
| `sample_count` | `integer` | Yes | Number of underlying 5-minute observations aggregated into this bucket |
| `open_time` | `string (date-time) \| null` | Yes | Timestamp of the first observation inside this bucket. Distinct from `bucket` (the interval boundary). |
| `close_time` | `string (date-time) \| null` | Yes | Timestamp of the last observation inside this bucket. Distinct from `bucket` (the interval boundary). |

### YoupinOHLCSourceData

OHLC bucket of Youpin prices.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `open_ask` | `number \| null` | Yes | First ask price in the bucket |
| `high_ask` | `number \| null` | Yes | Highest ask price in the bucket |
| `low_ask` | `number \| null` | Yes | Lowest ask price in the bucket |
| `close_ask` | `number \| null` | Yes | Last ask price in the bucket |
| `ask_volume` | `integer \| null` | Yes | Last observed ask volume in the bucket |
| `open_bid` | `number \| null` | Yes | First bid price in the bucket |
| `high_bid` | `number \| null` | Yes | Highest bid price in the bucket |
| `low_bid` | `number \| null` | Yes | Lowest bid price in the bucket |
| `close_bid` | `number \| null` | Yes | Last bid price in the bucket |
| `bid_volume` | `integer \| null` | Yes | Last observed bid volume in the bucket |
| `sample_count` | `integer` | Yes | Number of underlying 5-minute observations aggregated into this bucket |
| `open_time` | `string (date-time) \| null` | Yes | Timestamp of the first observation inside this bucket. Distinct from `bucket` (the interval boundary). |
| `close_time` | `string (date-time) \| null` | Yes | Timestamp of the last observation inside this bucket. Distinct from `bucket` (the interval boundary). |

### CsfloatOHLCSourceData

OHLC bucket of CSFloat ask and bid prices.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `open_ask` | `number \| null` | Yes | First ask price in the bucket |
| `high_ask` | `number \| null` | Yes | Highest ask price in the bucket |
| `low_ask` | `number \| null` | Yes | Lowest ask price in the bucket |
| `close_ask` | `number \| null` | Yes | Last ask price in the bucket |
| `ask_volume` | `integer \| null` | Yes | Last observed ask volume in the bucket |
| `open_bid` | `number \| null` | Yes | First bid price in the bucket |
| `high_bid` | `number \| null` | Yes | Highest bid price in the bucket |
| `low_bid` | `number \| null` | Yes | Lowest bid price in the bucket |
| `close_bid` | `number \| null` | Yes | Last bid price in the bucket |
| `sample_count` | `integer` | Yes | Number of underlying 5-minute observations aggregated into this bucket |
| `open_time` | `string (date-time) \| null` | Yes | Timestamp of the first observation inside this bucket. Distinct from `bucket` (the interval boundary). |
| `close_time` | `string (date-time) \| null` | Yes | Timestamp of the last observation inside this bucket. Distinct from `bucket` (the interval boundary). |

### SkinportOHLCSourceData

OHLC bucket of Skinport ask prices.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `open_ask` | `number \| null` | Yes | First ask price in the bucket |
| `high_ask` | `number \| null` | Yes | Highest ask price in the bucket |
| `low_ask` | `number \| null` | Yes | Lowest ask price in the bucket |
| `close_ask` | `number \| null` | Yes | Last ask price in the bucket |
| `ask_volume` | `integer \| null` | Yes | Last observed ask volume in the bucket |
| `sample_count` | `integer` | Yes | Number of underlying 5-minute observations aggregated into this bucket |
| `open_time` | `string (date-time) \| null` | Yes | Timestamp of the first observation inside this bucket. Distinct from `bucket` (the interval boundary). |
| `close_time` | `string (date-time) \| null` | Yes | Timestamp of the last observation inside this bucket. Distinct from `bucket` (the interval boundary). |

### SteamOHLCSourceData

OHLC bucket of Steam Community Market ask and bid prices.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `open_ask` | `number \| null` | Yes | First ask price in the bucket |
| `high_ask` | `number \| null` | Yes | Highest ask price in the bucket |
| `low_ask` | `number \| null` | Yes | Lowest ask price in the bucket |
| `close_ask` | `number \| null` | Yes | Last ask price in the bucket |
| `ask_volume` | `integer \| null` | Yes | Last observed ask volume in the bucket |
| `open_bid` | `number \| null` | Yes | First bid price in the bucket |
| `high_bid` | `number \| null` | Yes | Highest bid price in the bucket |
| `low_bid` | `number \| null` | Yes | Lowest bid price in the bucket |
| `close_bid` | `number \| null` | Yes | Last bid price in the bucket |
| `bid_volume` | `integer \| null` | Yes | Last observed bid volume in the bucket |
| `sample_count` | `integer` | Yes | Number of underlying 5-minute observations aggregated into this bucket |
| `open_time` | `string (date-time) \| null` | Yes | Timestamp of the first observation inside this bucket. Distinct from `bucket` (the interval boundary). |
| `close_time` | `string (date-time) \| null` | Yes | Timestamp of the last observation inside this bucket. Distinct from `bucket` (the interval boundary). |

### C5GameOHLCSourceData

OHLC bucket of C5Game ask and bid prices.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `open_ask` | `number \| null` | Yes | First ask price in the bucket |
| `high_ask` | `number \| null` | Yes | Highest ask price in the bucket |
| `low_ask` | `number \| null` | Yes | Lowest ask price in the bucket |
| `close_ask` | `number \| null` | Yes | Last ask price in the bucket |
| `ask_volume` | `integer \| null` | Yes | Last observed ask volume in the bucket |
| `open_bid` | `number \| null` | Yes | First bid price in the bucket |
| `high_bid` | `number \| null` | Yes | Highest bid price in the bucket |
| `low_bid` | `number \| null` | Yes | Lowest bid price in the bucket |
| `close_bid` | `number \| null` | Yes | Last bid price in the bucket |
| `sample_count` | `integer` | Yes | Number of underlying 5-minute observations aggregated into this bucket |
| `open_time` | `string (date-time) \| null` | Yes | Timestamp of the first observation inside this bucket. Distinct from `bucket` (the interval boundary). |
| `close_time` | `string (date-time) \| null` | Yes | Timestamp of the last observation inside this bucket. Distinct from `bucket` (the interval boundary). |

## Item Schema

### SchemaItem

One schema record, keyed by `market_hash_name` in the top-level `items` map. Fields that do not apply to the item are omitted.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `market_hash_name` | `string` | Yes | Canonical Steam market hash name (matches the price endpoints). |
| `category` | `string` | Yes | Item category (e.g. `skin`, `sticker`, `container`, `agent`). |
| `image` | `string` | Yes | Owned image URL served from `cs2.sh`. |
| `steam_image` | `string` | No | Optional official Valve Economy/static image URL, emitted only when the exact item origin is independently proven. Its absence does not remove the required owned `image`. |
| `is_tradable` | `boolean` | Yes | Whether the item can be traded. |
| `rarity` | `object` | No | Item rarity with `name`, `tier`, and `color`. |
| `collections` | `string[]` | No | Collections the item belongs to. Omitted when none. |
| `containers` | `string[]` | No | Containers the item drops from. Omitted when none. |
| `ids` | `object` | No | Marketplace catalog ids where known. |
| `def_index` | `integer` | No | Item definition index. |
| `base_name` | `string` | No | Base item name without the wear suffix. Skins only. |
| `weapon` | `string` | No | Weapon name. Skins only. |
| `finish` | `string` | No | Finish name. Skins only. |
| `paint_index` | `integer` | No | Paint kit index. Skins only; omitted on Doppler and Gamma Doppler base items. |
| `wears` | `string[]` | No | Wears the item exists in. Wear-carrying items only. |
| `has_stattrak` | `boolean` | No | Whether a StatTrak version exists. Wear-carrying items only. |
| `has_souvenir` | `boolean` | No | Whether a Souvenir version exists. Wear-carrying items only. |
| `float_range` | `object` | No | Float bounds for this item. Wear-carrying items only. |
| `wear` | `string` | No | This item's wear (e.g. `Field-Tested`). Wear-carrying items only. |
| `wear_float_range` | `object` | No | Float bounds for this exact wear row, `float_range` clamped to this wear's bracket. Wear-carrying items only. |
| `stattrak` | `boolean` | No | Whether this row is the StatTrak version. |
| `souvenir` | `boolean` | No | Whether this row is the Souvenir version. |
| `variants` | [SchemaItemVariant[]](/docs/objects#schemaitemvariant) | No | Doppler / Gamma Doppler phases or Case Hardened tiers for this base item. |
| `variant` | `object` | No | Back-link on a variant row to its base item. |
| `phase` | `string` | No | Phase or gem name. Doppler and Gamma Doppler variant rows only. |
| `color` | `string` | No | Hex accent color. Doppler and Gamma Doppler variant rows only. |

### SchemaItemVariant

A Doppler / Gamma Doppler phase or Case Hardened tier listed under a base item's `variants`.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `market_hash_name` | `string` | Yes | Full variant `market_hash_name`. |
| `family` | `string` | Yes | Allowed: `doppler`, `gamma_doppler`, `case_hardened`. Variant family. |
| `name` | `string` | Yes | Variant name (e.g. `Phase 2`, `Ruby`, `Tier 1`). |
| `phase` | `string` | No | Phase or gem name. Omitted for Case Hardened. |
| `color` | `string` | No | Hex accent color. Omitted for Case Hardened. |
| `paint_index` | `integer` | No | Paint kit index for this variant. |
| `image` | `string` | Yes | Owned image URL served from `cs2.sh`. |
| `steam_image` | `string` | No | Optional official Valve Economy/static image URL, emitted only when the exact variant origin is independently proven. Its absence does not remove the required owned `image`. |

### SchemaCollection

Collection metadata. Keyed by collection name in the top-level `collections` map.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `string` | Yes | Collection name. |
| `kind` | `string` | Yes | Collection kind (e.g. `weapon`, `sticker`). |
| `release_date` | `string` | No | Release date (`YYYY-MM-DD`), when known. An item's release date is its collection's; items carry `collections`, so join on that rather than expecting a date per item. |
| `released_at` | `string` | No | Exact publication instant of the Valve announcement that shipped the collection (RFC 3339 UTC). Present only where that announcement is known. |
| `update_name` | `string` | No | Valve's own name for that update, e.g. `Season 5, Armory, and More`. |
| `announcement_url` | `string` | No | Canonical Steam announcement for that update. |
| `image` | `string` | No | Owned image URL served from `cs2.sh`, when available. |
| `steam_image` | `string` | No | Optional official Valve Economy/static image URL, emitted only when the exact origin is independently proven. |

### SchemaRarity

A rarity tier. Listed in the top-level `rarities` array and referenced by item-level `rarity`.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `key` | `string` | Yes | Stable rarity key (e.g. `ancient`, `legendary`). |
| `name` | `string` | Yes | Display name (e.g. `Covert`, `Classified`). |
| `tier` | `integer` | Yes | Numeric rarity tier, ascending with rarity. |
| `color` | `string` | Yes | Hex color for the rarity. |

## Health

### HealthResponse

Current health of cs2.sh data sources and public datasets.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `status` | `string` | Yes | Allowed: `up`, `degraded`, `down`. Overall API data health. |
| `last_refreshed_at` | `string (date-time)` | Yes | When this health snapshot was generated. |
| `schema_ready` | `boolean` | Yes | Whether the item schema is available. |
| `sources` | [`Record<string, HealthEntry>`](/docs/objects#healthentry) | Yes | Marketplace health keyed by source. |
| `variants` | [`Record<string, HealthEntry>`](/docs/objects#healthentry) | Yes | Variant-price health keyed by source collector. |
| `endpoints` | [`Record<string, HealthEntry>`](/docs/objects#healthentry) | Yes | Dataset health keyed by endpoint name. |
| `stats` | [HealthStats](/docs/objects#healthstats) | Yes | Aggregate database counts at the last health refresh. |

### HealthEntry

Freshness and status for one source, variant collector, or endpoint dataset.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `updated_at` | `string (date-time)` | Yes | Most recent source-data timestamp represented by this entry. |
| `collected_at` | `string (date-time)` | Yes | When cs2.sh most recently collected or produced this dataset. |
| `status` | `string` | Yes | Allowed: `up`, `degraded`, `down`. Health derived from the dataset's expected refresh rate. |

### HealthStats

Aggregate database counts at the last health refresh.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `total_events` | `integer` | Yes | Total stored market-data events. |
| `market_hash_names` | `integer` | Yes | Unique item names represented in current market data. |
| `variant_items` | `integer` | Yes | Unique variant item names represented in current market data. |

## Errors

### ItemError

Error for a specific item in partial success response

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `item` | `string` | Yes | The requested item name that failed |
| `code` | `string` | Yes | Allowed: `unknown_item`, `not_in_cache`, `invalid_format`, `not_in_archive`, `unsupported_variant`, `unsupported_source`. Error code |
| `message` | `string` | Yes | Human-readable error message |

### ErrorResponse

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `error` | `string` | Yes | Error code (e.g., validation_error, unauthorized, rate_limited) |
| `message` | `string` | Yes | Human-readable error message |
| `request_id` | `string (uuid)` | No | Unique request identifier for support |
| `details` | `object` | No | Additional error details (structure varies by error type) |
