# How to Get CSFloat Doppler Prices by Phase

> `GET /v1/prices/latest` returns current CSFloat Doppler asks and highest bids separately for Phase 1-4, Ruby, Sapphire, and Black Pearl under the base item's `variants` object.

Doppler phases have materially different markets. The parent Doppler quote is not a safe fallback for a missing phase because it discards the phase premium.

## Current CSFloat phase coverage

Each variant contains a human label in `display_name` and a stable `version` code. Doppler uses `p1` through `p4` plus `ruby`, `sapphire`, and `blackpearl`. The CSFloat object can carry:

| Field | Meaning |
| --- | --- |
| `ask` | Cheapest active listing for that phase |
| `bid` | Highest active buy order for that phase |
| `ask_volume` | Active listing count |
| `updated_at`, `collected_at` | Listing update and collection times |

CSFloat does not expose `bid_volume`. Phase bids are available for most covered items and refresh every ~10-30 minutes based on liquidity. Variant listing prices generally refresh every ~10-15 minutes.

## Read phase prices from the snapshot

Fetch `GET /v1/prices/latest`, select the base `market_hash_name` in the `items` map, and open `variants`. Select the desired variant by `version`, then read its `csfloat` object. The response is a full-market snapshot and is available on all plans.

Use the stable version value for joins and sorting. The display name remains useful for UI labels. If CSFloat does not appear on a phase, preserve that missing source rather than taking `item.csfloat` from the parent.

For trends, [CSFloat Doppler listing history](/resources/how-to-get-csfloat-doppler-price-history) exposes per-phase OHLC. For actual sales, [CSFloat Doppler sales history](/resources/how-to-get-csfloat-doppler-sales-history) uses the daily completed-sale archive.

## Applicable endpoints

| Endpoint | Returns | Plans |
| --- | --- | --- |
| `GET /v1/prices/latest` | Current per-phase CSFloat ask, bid, and listing count | All plans |
| `POST /v1/prices/history` | Per-phase quote OHLC | Scale, Enterprise |
| `POST /v1/archive/csfloat` | Per-phase completed-sale data where available | Scale, Enterprise |

## Limits to preserve

- A phase `ask` is a listing floor. It does not price a specific float, seed, or sticker configuration.
- A bid can be missing even when an ask is present. Without `bid_volume`, the quote cannot describe buy-order depth.
- A crossed phase pair, where bid exceeds ask, can result from separate collection passes. Refresh it before calculating a spread.
- Variant source objects are sparse. Missing coverage must remain missing instead of inheriting the parent quote.

See the [variant response fields](/docs/api-reference/objects#variant) for the complete object shape.
