# How to Get CS2 Skin Liquidity Data

> `GET /v1/liquidity/items` returns a daily liquidity bucket and
> `estimated_sale_time` for every tracked item. Doppler phases, Gamma Doppler
> phases, and Case Hardened tiers are scored independently.

Liquidity describes how readily an item has sold under recent market
conditions. It does not validate the current listing price, so an estimated
sale time assumes the item is listed competitively.

## How cs2.sh liquidity is calculated

Liquidity uses real sale volume and traded value (`price * volume`) from BUFF,
Steam, and CSFloat. The calculation looks across rolling 30-day and 90-day
windows, weights recent activity more heavily, and recomputes daily.

Each exact `market_hash_name` receives one absolute, deterministic bucket:

| Less liquid | More liquid |
| --- | --- |
| `unknown` | |
| `extremely_illiquid` | |
| `very_illiquid` | |
| `illiquid` | |
| `moderate` | |
| `liquid` | |
| `very_liquid` | |
| `extremely_liquid` | |

These are fixed classifications from sale data, not percentile ranks relative
to the current item population.

`estimated_sale_time` ranges from `under 1 hour` through `2+ months`, with
`unknown` for insufficient evidence. It is an 80th-percentile estimate for a
competitively priced listing rather than a deadline or guarantee.

## Read item and variant liquidity

Fetch the full daily snapshot and select the exact item in `items`. Read
`liquidity` and `estimated_sale_time` from the item object.

When `variants` is present, evaluate each child independently. The map is keyed
by display name, while each variant includes the base `market_hash_name`, full
variant `name`, and stable `version`. Copying the base item's bucket to Ruby,
Black Pearl, Emerald, or a Case Hardened tier can materially understate its
expected sale time.

Use `run_date` to identify the UTC date of the daily computation. Pair the
result with the current ask from `GET /v1/prices/latest` when applying a rule
that assumes competitive pricing. The
[liquidity reference](/docs/api-reference/liquidity-items) lists every allowed
sale-time label.

## Applicable endpoints

| Endpoint | Returns | Plans |
| --- | --- | --- |
| `GET /v1/liquidity/items` | Daily item and variant liquidity plus estimated sale time | Scale, Enterprise |
| `GET /v1/prices/latest` | Current asks and bids used to assess listing competitiveness | All plans |

## Decision boundaries

- `unknown` means recent sale evidence is insufficient for classification.
  Treat it as an explicit coverage result rather than the least-liquid bucket.
- Re-fetching during the same UTC day does not create a more recent
  classification; the snapshot is recomputed daily.
- Liquidity does not account for one item's exact float, paint seed, stickers,
  or a noncompetitive ask.
- Current prices can move faster than the daily score. Check price freshness
  before applying `estimated_sale_time` to an active listing decision.
