# GET /v1/market/csfloat/orderbook/latest

Full CSFloat buy-order books for every item.

Returns current CSFloat buy orders for every item. This includes price, quantity, and conditionals such as float ranges, paint indexes, applied stickers, applied charms/keychain fields, charm patterns, and paint seeds.

Orderbooks update every ~10-30 minutes depending on item liquidity, where a higher liquidity = higher refresh rate.

## Access

Requires a Scale or Enterprise API key.

## Request

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

**curl**

```bash
curl https://api.cs2.sh/v1/market/csfloat/orderbook/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/csfloat/orderbook/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/csfloat/orderbook/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/csfloat/orderbook/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/csfloat/orderbook/latest") |>
  req_headers(
    Authorization = "Bearer <<YOUR_API_KEY>>",
    `Accept-Encoding` = "gzip"
  ) |>
  req_perform()

data <- resp_body_json(resp)
```

## Response

```json
{
  "response_time": "2026-08-23T21:59:41.701806658Z",
  "currency": "USD",
  "items": {
    "USP-S | Printstream (Factory New)": {
      "market_hash_name": "USP-S | Printstream (Factory New)",
      "updated_at": "2026-08-23T21:54:42.008Z",
      "collected_at": "2026-08-23T21:55:35.051Z",
      "top_generic_bid": 92.6,
      "orders": [
        {
          "price": 93.3,
          "quantity": 1,
          "kind": "float",
          "conditions": {
            "min_float": 0,
            "max_float": 0.04
          }
        },
        {
          "price": 93.2,
          "quantity": 1,
          "kind": "float",
          "conditions": {
            "min_float": 0,
            "max_float": 0.04
          }
        },
        {
          "price": 92.6,
          "quantity": 1,
          "kind": "float",
          "conditions": {
            "min_float": 0.03,
            "max_float": 0.04
          }
        }
      ]
    },
    "★ Karambit | Doppler (Factory New)": {
      "market_hash_name": "★ Karambit | Doppler (Factory New)",
      "updated_at": "2026-08-23T21:54:42.871Z",
      "collected_at": "2026-08-23T21:55:35.051Z",
      "top_generic_bid": null,
      "orders": [
        {
          "price": 6800,
          "quantity": 1,
          "kind": "paint_index",
          "conditions": {
            "paint_index": 415
          }
        },
        {
          "price": 6790,
          "quantity": 1,
          "kind": "paint_index",
          "conditions": {
            "paint_index": 415
          }
        }
      ],
      "variants": {
        "Phase 2": {
          "market_hash_name": "★ Karambit | Doppler (Factory New)",
          "name": "★ Karambit | Doppler (Factory New) | Phase 2",
          "display_name": "Phase 2",
          "version": "p2",
          "updated_at": "2026-08-23T21:57:12.655Z",
          "collected_at": "2026-08-23T21:57:35.153Z",
          "top_generic_bid": 1190,
          "orders": [
            {
              "price": 1650,
              "quantity": 1,
              "kind": "paint_index",
              "conditions": {
                "paint_index": 419
              }
            },
            {
              "price": 1640,
              "quantity": 1,
              "kind": "paint_index",
              "conditions": {
                "paint_index": 419
              }
            }
          ]
        },
        "Ruby": {
          "market_hash_name": "★ Karambit | Doppler (Factory New)",
          "name": "★ Karambit | Doppler (Factory New) | Ruby",
          "display_name": "Ruby",
          "version": "ruby",
          "updated_at": "2026-08-23T21:10:37.529Z",
          "collected_at": "2026-08-23T21:11:32.943Z",
          "top_generic_bid": 1190,
          "orders": [
            {
              "price": 6800,
              "quantity": 1,
              "kind": "paint_index",
              "conditions": {
                "paint_index": 415
              }
            },
            {
              "price": 6790,
              "quantity": 1,
              "kind": "paint_index",
              "conditions": {
                "paint_index": 415
              }
            }
          ]
        }
      }
    }
  }
}
```

## Response fields

[CSFloatBuyOrdersLatestResponse](/docs/objects#csfloatbuyorderslatestresponse) fields:

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `response_time` | `string (date-time)` | Yes | When this snapshot response was generated. |
| `currency` | `string` | Yes | Currency code (always `USD`). |
| `items` | [`Record<string, CSFloatBuyOrdersItem>`](/docs/objects#csfloatbuyordersitem) | Yes | Items with current buy-order books, keyed by `market_hash_name`. |

## Orderbook data

| Field | Description |
| --- | --- |
| `items.<name>.orders` | The buy-order ladder, price descending. Each order has a `kind` and a `conditions` object (`{}` for `generic` orders). |
| `items.<name>.top_generic_bid` | Highest order price with no conditions; `null` when only conditional orders stand. |
| `items.<name>.variants` | Doppler and Gamma Doppler phase books, keyed by display name. |
| `items.<name>.updated_at`, `collected_at` | CSFloat's update time and cs2.sh's fetch time. |

- An empty `orders` array appears only for a Doppler or Gamma Doppler phase confirmed to have no standing orders. Missing items and missing phase books are unknown or stale, never confirmed empty.

## Buy-order conditions

| `kind` | Meaning |
| --- | --- |
| `generic` | No conditions. `conditions` is `{}`. |
| `paint_index` | The listing's paint index must match. |
| `float` | The listing's float value must be within the supplied bounds. |
| `sticker` | The listing must have the specified sticker requirements. |
| `keychain_pattern` | The applied charm's pattern value must be within the supplied bounds. |
| `paint_seeds` | The listing's paint seed must be one of the supplied values. |
| `keychain` | The listing must have the specified charm. |
| `mixed` | The listing must satisfy all supplied condition families. |

| `conditions` key | Type | Meaning |
| --- | --- | --- |
| `paint_index` | `integer` | The listing's paint index must equal this value. |
| `min_float` | `number` | The listing's float value must be at least this value. |
| `max_float` | `number` | The listing's float value must be at most this value. |
| `stickers` | [`CSFloatStickerCondition[]`](/docs/objects#csfloatstickercondition) | The listing must satisfy every sticker requirement. Repeating an `sId` requires multiple copies. |
| `min_keychain_pattern` | `integer` | The applied charm's pattern value must be at least this value. |
| `max_keychain_pattern` | `integer` | The applied charm's pattern value must be at most this value. |
| `paint_seeds` | `integer[]` | The listing's paint seed must equal one of these values. |
| `keychains` | [`CSFloatKeychainCondition[]`](/docs/objects#csfloatkeychaincondition) | The listing must have every charm identified in this array. |

If multiple condition fields are present, the listing must satisfy all of them. `mixed` orders can also include additional CSFloat condition keys verbatim.

Sticker requirement:

| Field | Type | Required | Meaning |
| --- | --- | --- | --- |
| `sId` | `integer` | Yes | Numeric CSFloat ID of the sticker the listing must have. |
| `s` | `integer` | No | Zero-based slot that must contain this sticker. If omitted, the sticker may be in any slot. |

Charm requirement:

| Field | Type | Required | Meaning |
| --- | --- | --- | --- |
| `sId` | `integer` | Yes | Numeric CSFloat ID of the charm the listing must have. |

Full schemas: [CSFloatBuyOrdersItem](/docs/objects#csfloatbuyordersitem), [CSFloatBuyOrdersVariant](/docs/objects#csfloatbuyordersvariant), [CSFloatBuyOrder](/docs/objects#csfloatbuyorder), [CSFloatBuyOrderConditions](/docs/objects#csfloatbuyorderconditions), [CSFloatStickerCondition](/docs/objects#csfloatstickercondition), [CSFloatKeychainCondition](/docs/objects#csfloatkeychaincondition).

### CSFloatBuyOrdersItem

A base item's buy-order book. Book fields are absent when the entry exists only to carry phase books under `variants`.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `market_hash_name` | `string` | Yes | Canonical Steam `market_hash_name`. |
| `updated_at` | `string (date-time)` | No | When CSFloat last updated this book. |
| `collected_at` | `string (date-time)` | No | When cs2.sh collected this book. |
| `top_generic_bid` | `number \| null` | No | Highest order price (USD) with no conditions. `null` when only conditional orders stand. |
| `orders` | [CSFloatBuyOrder[]](/docs/objects#csfloatbuyorder) | No | Price-descending order ladder. |
| `variants` | [`Record<string, CSFloatBuyOrdersVariant>`](/docs/objects#csfloatbuyordersvariant) | No | Doppler and Gamma Doppler phase books keyed by display name. |

### CSFloatBuyOrdersVariant

One Doppler or Gamma Doppler phase's buy-order book.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `market_hash_name` | `string` | Yes | The base item's `market_hash_name`. The full variant name is `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 2`, `Ruby`). |
| `version` | `string` | Yes | Stable variant code. Switch on this in client code. |
| `updated_at` | `string (date-time)` | Yes | When CSFloat last updated this book. |
| `collected_at` | `string (date-time)` | Yes | When cs2.sh collected this book. |
| `top_generic_bid` | `number \| null` | Yes | Highest order price (USD) with no conditions. `null` when only conditional orders stand. |
| `orders` | [CSFloatBuyOrder[]](/docs/objects#csfloatbuyorder) | Yes | Price-descending order ladder. |

### CSFloatBuyOrder

One standing CSFloat buy order. Its conditions live in `conditions`.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `price` | `number` | Yes | Order price in USD. |
| `quantity` | `integer` | No | Number of items wanted at this price. |
| `kind` | `string` | Yes | Allowed: `generic`, `paint_index`, `float`, `sticker`, `keychain_pattern`, `paint_seeds`, `keychain`, `mixed`. Summary of the matching rules in `conditions`. `generic` has no rules; `mixed` contains multiple rule families or an upstream rule the API does not recognize. |
| `conditions` | [CSFloatBuyOrderConditions](/docs/objects#csfloatbuyorderconditions) | Yes | Rules a listing must satisfy for this order to buy it. When several rules are present, all must match. Empty for `generic` orders. A `mixed` order can also carry unrecognized CSFloat rule keys verbatim. |

### CSFloatBuyOrderConditions

Rules a listing must satisfy for this order to buy it. When several rules are present, all must match. Empty for `generic` orders. A `mixed` order can also carry unrecognized CSFloat rule keys verbatim.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `paint_index` | `integer` | No | The listing's paint index must equal this value. |
| `min_float` | `number` | No | The listing's float value must be greater than or equal to this value. |
| `max_float` | `number` | No | The listing's float value must be less than or equal to this value. |
| `stickers` | [CSFloatStickerCondition[]](/docs/objects#csfloatstickercondition) | No | The listing must satisfy every sticker requirement in this array. Repeating a sticker ID requires multiple copies of that sticker. |
| `min_keychain_pattern` | `integer` | No | The applied charm's pattern value must be greater than or equal to this value. |
| `max_keychain_pattern` | `integer` | No | The applied charm's pattern value must be less than or equal to this value. |
| `paint_seeds` | `integer[]` | No | The listing's paint seed must equal one of these values. |
| `keychains` | [CSFloatKeychainCondition[]](/docs/objects#csfloatkeychaincondition) | No | The listing must have every charm identified in this array. |

### CSFloatStickerCondition

One sticker the listing must have. Additional upstream CSFloat fields are preserved.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `sId` | `integer` | Yes | Numeric CSFloat ID of the sticker the listing must have. |
| `s` | `integer` | No | Zero-based slot that must contain this sticker. If omitted, the sticker may be in any slot. |

### CSFloatKeychainCondition

One charm the listing must have. Additional upstream CSFloat fields are preserved.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `sId` | `integer` | Yes | Numeric CSFloat ID of the charm the listing must have. |

## Errors

`503 service_unavailable` means the latest orderbook snapshot is missing, stale, or empty. See [Request errors](/docs/using-the-api#request-errors) for shared errors.
