# How to Get BUFF Doppler Price History by Phase

> cs2.sh provides BUFF Doppler price history for each phase and gem through
> `POST /v1/market/buff/history`. Every phase has separate BUFF range buckets
> with ask, average-ask, bid, and volume history from May 19, 2026.

Doppler Phase 1 through Phase 4, Ruby, Sapphire, and Black Pearl are separate
markets. Combining them into one base-item series hides the phase premium and
can make a thin gem market look like an ordinary Doppler.

## BUFF Doppler history coverage

The response nests each phase under `variants`. `display_name` gives the label,
while `version` provides the stable code: `p1`, `p2`, `p3`, `p4`, `ruby`,
`sapphire`, or `blackpearl`. Use `version` when the phase identity must remain
stable across responses.

Every variant contains its own `buckets`:

- A `base` bucket covers the complete phase. Its stable `bucket_id` looks like
  `variant:p2`.
- `float` buckets divide that phase into narrower float ranges. A Phase 2
  `0.00:0.01` bucket is a different market from the Phase 2 base bucket.
- Each history point has OHLC fields for `ask`, `avg_ask`, and `bid`.
  `ask_volume` and `bid_volume` are the last observed counts in the interval.
- Prices are normalized to USD. The dedicated BUFF data refreshes every 10
  minutes.

The BUFF history endpoint supports `30m`, `1h`, and `1d` intervals. The maximum
range is 90 days for `30m`, 365 days for `1h`, and unlimited for `1d`.

## Select the phase and BUFF bucket

Request the base Doppler `market_hash_name`, then locate the required entry in
`variants` by `version`. Choose the phase-wide `base` bucket for comparisons
between phases. Choose a `float` bucket only when the analysis is explicitly
about a float premium within that phase.

`bucket_id` is stable between
[BUFF latest](/docs/api-reference/market-buff-latest) and
[BUFF history](/docs/api-reference/market-buff-history). A client can discover
the current bucket catalog once, retain the identifiers it needs, and match the
same identifiers in historical responses.

Within each history point, `bucket` is the UTC interval boundary.
`open_time` and `close_time` are the first and last real observations inside
that interval. Use those observation timestamps when data coverage within a
bucket matters.

## Applicable endpoints

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

## Boundaries that affect the result

- `avg_ask` is the average active listing ask. It is not a completed-sale
  average, so a large gap between `ask` and `avg_ask` describes a dispersed
  listing book rather than prices paid by buyers.
- Range bounds include `min` and exclude `max`. An exact float at the upper
  bound belongs to the next bucket.
- History begins May 19, 2026. Use the broader
  [Doppler phase price data guide](/resources/how-to-get-doppler-phase-price-data)
  for cross-market phase coverage, but do not infer earlier BUFF range history.
- `ask_volume` and `bid_volume` are active listing and buy-order counts. They
  do not measure completed sales.
