# GET /v1/market/steam/latest

覆盖每件饰品的 Steam 全深度买/卖订单簿。

返回所有饰品最新的 Steam 买/卖订单簿全深度快照。

响应未压缩时约为 100 MB，因此必须使用 `Accept-Encoding: gzip`。完整档位以列式数组返回：卖价按升序排列，买价按降序排列，每个 `volumes` 值对应相同数组索引上的价格。

订单簿约每 5 分钟更新一次。

## 访问

适用于所有套餐。

## 请求

`GET https://api.cs2.sh/v1/market/steam/latest`

**curl**

```bash
curl https://api.cs2.sh/v1/market/steam/latest \
  -H "Authorization: Bearer <<YOUR_API_KEY>>" \
  -H "Accept-Encoding: gzip" --compressed
```

**Python**

```python
import requests

headers = {
    "Authorization": "Bearer <<YOUR_API_KEY>>",
    "Accept-Encoding": "gzip",
}

response = requests.get(
    "https://api.cs2.sh/v1/market/steam/latest",
    headers=headers,
)

response.raise_for_status()
data = response.json()
```

**Node**

```javascript
const headers = {
  "Authorization": "Bearer <<YOUR_API_KEY>>",
  "Accept-Encoding": "gzip",
};

const response = await fetch("https://api.cs2.sh/v1/market/steam/latest", { headers });

if (!response.ok) throw new Error(`HTTP ${response.status}`);
const data = await response.json();
```

**Go**

```go
package main

import (
    "compress/gzip"
    "encoding/json"
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://api.cs2.sh/v1/market/steam/latest", nil)
    req.Header.Set("Authorization", "Bearer <<YOUR_API_KEY>>")
    req.Header.Set("Accept-Encoding", "gzip")

    resp, err := http.DefaultClient.Do(req)
    if err != nil { panic(err) }
    defer resp.Body.Close()

    if resp.StatusCode < 200 || resp.StatusCode >= 300 {
        body, _ := io.ReadAll(resp.Body)
        panic(fmt.Sprintf("HTTP %d: %s", resp.StatusCode, body))
    }

    var reader io.Reader = resp.Body
    if resp.Header.Get("Content-Encoding") == "gzip" {
        gz, err := gzip.NewReader(resp.Body)
        if err != nil { panic(err) }
        defer gz.Close()
        reader = gz
    }

    var data any
    if err := json.NewDecoder(reader).Decode(&data); err != nil { panic(err) }
    fmt.Printf("%#v\n", data)
}
```

**R**

```r
library(httr2)

resp <- request("https://api.cs2.sh/v1/market/steam/latest") |>
  req_headers(
    Authorization = "Bearer <<YOUR_API_KEY>>",
    `Accept-Encoding` = "gzip"
  ) |>
  req_perform()

data <- resp_body_json(resp)
```

## 响应

```json
{
  "response_time": "2026-07-26T18:54:14.123567967Z",
  "currency": "USD",
  "as_of": "2026-07-26T18:53:53.202Z",
  "items": {
    "USP-S | Printstream (Factory New)": {
      "updated_at": "2026-07-26T18:52:21.42Z",
      "collected_at": "2026-07-26T18:52:56.46Z",
      "top": {
        "ask": 169.14,
        "ask_volume": 70,
        "bid": 155.05,
        "bid_volume": 2951
      },
      "depth": {
        "ask_levels": 2,
        "bid_levels": 2,
        "asks": {
          "prices": [
            169.14,
            169.4
          ],
          "volumes": [
            1,
            1
          ]
        },
        "bids": {
          "prices": [
            155.05,
            154.88
          ],
          "volumes": [
            1,
            1
          ]
        }
      }
    }
  }
}
```

## 响应字段

[SteamOrderbookLatestResponse](/zh-cn/docs/objects#steamorderbooklatestresponse) 字段:

| 字段 | 类型 | 必需 | 描述 |
| --- | --- | --- | --- |
| `response_time` | `string (date-time)` | 是 | 此快照响应的生成时间。 |
| `currency` | `string` | 是 | 货币代码（始终为 `USD`）。 |
| `as_of` | `string (date-time)` | 是 | 整个快照中最新的 `updated_at`。 |
| `items` | [`Record<string, SteamOrderbookItem>`](/zh-cn/docs/objects#steamorderbookitem) | 是 | 具有当前订单簿数据的常规饰品，按 `market_hash_name` 键控。 |

## 订单簿数据

| 字段 | 描述 |
| --- | --- |
| `items.<name>.top` | 最优买/卖价以及 Steam 卖/买挂单总数。 |
| `items.<name>.depth` | 完整的列式档位：`asks.prices`/`asks.volumes` 和 `bids.prices`/`bids.volumes`。 |
| `items.<name>.updated_at`、`collected_at` | Steam 的更新时间与 cs2.sh 的抓取时间。 |
| `as_of` | 整个快照中最新的 `updated_at`。 |

- 不包含变体饰品。

完整结构：[SteamOrderbookItem](/zh-cn/docs/objects#steamorderbookitem)、[SteamOrderbookTop](/zh-cn/docs/objects#steamorderbooktop)、[SteamOrderbookDepth](/zh-cn/docs/objects#steamorderbookdepth)、[SteamOrderbookDepthSide](/zh-cn/docs/objects#steamorderbookdepthside)。

### SteamOrderbookItem

单个常规饰品的最新全深度 Steam 订单簿。

| 字段 | 类型 | 必需 | 描述 |
| --- | --- | --- | --- |
| `updated_at` | `string (date-time)` | 是 | Steam 最后更新该订单簿的时间。 |
| `collected_at` | `string (date-time)` | 是 | cs2.sh 采集该订单簿的时间。 |
| `top` | [SteamOrderbookTop](/zh-cn/docs/objects#steamorderbooktop) | 是 | Steam 订单簿的最优卖单/买单（盘口顶部）。某一侧缺失时对应字段为 `null`。 |
| `depth` | [SteamOrderbookDepth](/zh-cn/docs/objects#steamorderbookdepth) | 是 | 列式表示的全深度 Steam 订单簿档位。 |

### SteamOrderbookTop

Steam 订单簿的最优卖单/买单（盘口顶部）。某一侧缺失时对应字段为 `null`。

| 字段 | 类型 | 必需 | 描述 |
| --- | --- | --- | --- |
| `ask` | `number \| null` | 是 | 最优卖单 USD 价格；缺失时为 `null`。 |
| `ask_volume` | `integer \| null` | 是 | Steam 卖单总数量；缺失时为 `null`。 |
| `bid` | `number \| null` | 是 | 最优买单 USD 价格；缺失时为 `null`。 |
| `bid_volume` | `integer \| null` | 是 | Steam 买单总数量；缺失时为 `null`。 |

### SteamOrderbookDepth

列式表示的全深度 Steam 订单簿档位。

| 字段 | 类型 | 必需 | 描述 |
| --- | --- | --- | --- |
| `ask_levels` | `integer` | 是 | `asks` 中的卖单档位数量。 |
| `bid_levels` | `integer` | 是 | `bids` 中的买单档位数量。 |
| `asks` | [SteamOrderbookDepthSide](/zh-cn/docs/objects#steamorderbookdepthside) | 是 | 订单簿某一侧的列式深度。`prices[i]` 与 `volumes[i]` 一一对应；每个 `volume` 是该价格上的数量，不是累计数量。 |
| `bids` | [SteamOrderbookDepthSide](/zh-cn/docs/objects#steamorderbookdepthside) | 是 | 订单簿某一侧的列式深度。`prices[i]` 与 `volumes[i]` 一一对应；每个 `volume` 是该价格上的数量，不是累计数量。 |

### SteamOrderbookDepthSide

订单簿某一侧的列式深度。`prices[i]` 与 `volumes[i]` 一一对应；每个 `volume` 是该价格上的数量，不是累计数量。

| 字段 | 类型 | 必需 | 描述 |
| --- | --- | --- | --- |
| `prices` | `number[]` | 是 | USD 十进制价格。卖单升序，买单降序。 |
| `volumes` | `integer[]` | 是 | 每个对应价格上的数量。 |

## 错误

`503 service_unavailable` 表示最新订单簿快照缺失、过期或为空。共有错误见[请求错误](/zh-cn/docs/using-the-api#请求错误)。
