# How to Get BUFF Doppler Prices by Phase

> `GET /v1/market/buff/latest` returns current BUFF Doppler prices for each
> phase and gem, split into phase-wide and float-range buckets. Each bucket has
> its own ask, average ask, bid, listing count, and buy-order count.

BUFF treats Phase 1 through Phase 4, Ruby, Sapphire, and Black Pearl as separate
variant markets. The dedicated BUFF endpoint also separates low-float inventory
inside each phase, which prevents a float premium from being mistaken for a
phase-wide price.

## What the current BUFF phase snapshot contains

Each base Doppler item has a `variants` object keyed by display label. The
variant record includes `display_name`, the full `name`, and a stable `version`
code such as `p2`, `ruby`, `sapphire`, or `blackpearl`.

Inside each variant, `buckets` describes the available BUFF markets:

| Bucket | Meaning | When to use it |
| --- | --- | --- |
| `base` | All listings for one phase | Comparing Phase 1, Phase 2, gems, and other phases |
| `float` | Listings inside one float range | Pricing an exact float within a phase |
| `fade` | Listings inside one fade range | Relevant only when the item exposes fade data |
| `float_fade` | A combined float and fade range | Pricing an item where both ranges matter |

Every bucket can carry `ask`, `avg_ask`, `bid`, `ask_volume`, and `bid_volume`.
The ask is the cheapest active listing. `avg_ask` describes the average active
listing ask, while the bid is the highest buy order. Prices are normalized to
USD, and this endpoint refreshes every 10 minutes.

## Read a BUFF Doppler phase price

Fetch the full BUFF range snapshot and select the base item by its exact
`market_hash_name`. Find the desired phase by `version`, then choose the single
bucket whose `bucket_type` is `base` for a phase-wide quote.

A bucket such as `variant:p2|float:0.00:0.01` should be used only for floats
from `0.00` inclusive to `0.01` exclusive. Replacing the phase-wide bucket with
that low-float bucket will overstate the ordinary Phase 2 floor.

If range detail is unnecessary, `GET /v1/prices/latest` also exposes current
per-source variant pricing. The dedicated
[BUFF latest reference](/docs/api-reference/market-buff-latest) is the source
for `avg_ask` and range-level books.

## Applicable endpoints

| Endpoint | Returns | Plans |
| --- | --- | --- |
| `GET /v1/market/buff/latest` | Current BUFF phase and float-range prices for all items | All plans |
| `GET /v1/prices/latest` | Current per-source variant prices across all six marketplaces | All plans |

## BUFF phase-pricing limits

- A phase-level `ask_volume` counts all active listings in that phase bucket.
  It does not state how many units are available at the cheapest ask.
- `updated_at` is BUFF's update time and `collected_at` is when cs2.sh fetched
  the bucket. Use `collected_at` to enforce a freshness rule.
- Thin gem books can have a large difference between `ask` and `avg_ask`.
  Keep both fields and the listing count together when judging whether the
  floor represents the rest of the active book.
- Use [BUFF Doppler price history](/resources/how-to-get-buff-doppler-price-history)
  when the question is whether a phase or float premium persisted over time.
