# How to Get Doppler Float-Range Price History

> cs2.sh exposes BUFF Doppler and Gamma Doppler float-range prices by phase, with current buckets and `30m`, `1h`, or `1d` OHLC history from May 19, 2026.

A phase-wide listing floor can misprice a low-float knife because it includes every float in that phase. BUFF's bucket model isolates the range that contains the exact float before comparing it with the phase base.

## The phase and float bucket model

`GET /v1/market/buff/latest` nests each phase under `variants`. Every phase contains `buckets[]` split into `base`, `float`, `fade`, and `float_fade` where those range types apply.

A float bucket includes `float.min` and `float.max`. Bounds are lower-inclusive and upper-exclusive, so a value belongs where `min <= float < max`. `bucket_id` is stable across latest and history. A phase float ID combines the variant version with the range, while the phase `base` bucket covers the whole phase.

Each latest bucket can contain `ask`, `avg_ask`, `bid`, `ask_volume`, and `bid_volume`. BUFF prices update every 10 minutes.

## Resolve and query the correct bucket

Start with the base Doppler `market_hash_name` on `GET /v1/market/buff/latest`. Select the phase by stable `version`, then find the one `float` bucket whose bounds contain the exact float. Also retain that phase's `base` bucket for a phase-wide comparison.

Send the base item to `POST /v1/market/buff/history` and match both series by their stable `bucket_id`. Each history point contains ask, average-ask, and bid OHLC plus last-observed volumes. Compare `close_ask` values only at timestamps where both buckets have observations.

The history endpoint supports `30m` for up to 90 days, `1h` for 365 days, and `1d` without a range cap. It requires Scale or Enterprise access.

## Applicable endpoints

| Endpoint | Returns | Plans |
| --- | --- | --- |
| `GET /v1/market/buff/latest` | Current phase base and float buckets | All plans |
| `POST /v1/market/buff/history` | Per-bucket OHLC since May 19, 2026 | Scale, Enterprise |

## Details that change the comparison

- Bucket boundaries vary by item, exterior, and float cap. Discover them from the snapshot instead of constructing IDs from common ranges.
- Compare a phase float bucket with that same phase's `base`. Comparing with the parent Doppler base mixes phase and float premiums.
- `close_ask` is a listing floor, not a completed sale. Thin `ask_volume` can let one listing move the bucket.
- `bucket` is the UTC boundary; `open_time` and `close_time` are the real observation window.
- No BUFF float-range history exists before May 19, 2026.

The [BUFF range reference](/docs/api-reference/market-buff-latest) defines all bucket types and fields.
