# How to Get Float Ranges for Every CS2 Item

> `GET /v1/schema` returns `float_range.min` and `float_range.max` for every
> wear-carrying CS2 item row. These are item-specific physical bounds, not
> generic exterior limits or marketplace price buckets.

Two Field-Tested skins can have different possible float ranges because the
finish itself can cap the wear. Reconstructing bounds from the exterior suffix
can therefore accept values the item cannot have.

## Float fields in the item catalog

Each wear-carrying schema record can include:

| Field | Meaning |
| --- | --- |
| `float_range.min`, `float_range.max` | Physical float bounds for the item |
| `wears` | Exterior names in which the finish exists |
| `wear` | The exterior of this exact market row |
| `market_hash_name` | Exact identifier shared with price endpoints |
| `variants` | Supported Doppler, Gamma Doppler, or Case Hardened children |

Fields that do not apply are omitted. Stickers, most containers, and other
non-wear items have no `float_range`.

Variant rows can share physical bounds with their base item while carrying a
different `market_hash_name`, image, paint index, and market price.

## Read physical bounds or market ranges

For physical bounds, fetch the schema and select the item by exact
`market_hash_name`. Use the returned `float_range` directly. Do not derive it
from `wear`, `base_name`, or a generic exterior table.

For float-aware pricing, use `GET /v1/market/buff/latest`. BUFF can divide the
physical range into several `float` buckets, each with separate ask, average
ask, bid, and active volumes. These commercial ranges vary by item, exterior,
float cap, and variant.

Match an exact float to a BUFF bucket with an inclusive `min` and exclusive
`max`. The [BUFF float-range history guide](/resources/how-to-get-buff-float-range-price-history)
explains why the exterior-wide floor can misprice a low-float input.

## Applicable endpoints

| Endpoint | Returns | Plans |
| --- | --- | --- |
| `GET /v1/schema` | Physical float bounds and available wears | All plans |
| `GET /v1/market/buff/latest` | Current BUFF float-range price buckets | All plans |

## Keep the two range types separate

- `float_range` says which floats are physically possible. It does not say
  which subranges receive a market premium.
- BUFF bucket bounds are lower-inclusive and upper-exclusive. The schema's
  physical maximum should not be used as a substitute for returned BUFF
  bucket logic.
- An absent `float_range` usually means the field does not apply to that item
  record. It should not be replaced with a default `0` to `1` range.
- Use the schema generation ID or ETag when caching these bounds so newly
  published items and changed catalog records are picked up together.
