# How to Chart a CS2 Skin Wear Price Curve

> Use `GET /v1/schema` to resolve every valid wear row for a finish, then attach current asks from `GET /v1/prices/latest` in a fixed exterior order.

A wear curve compares distinct `market_hash_name` rows. It should not manufacture an exterior that the finish does not have or mix normal, StatTrak, Souvenir, and variant identities.

## Resolve the wear series

Schema skin records include `base_name`, `finish`, `wears`, current `wear`, native `float_range`, StatTrak and Souvenir flags, and exact names. Group records by the intended finish and attribute state, then order the existing rows as Factory New, Minimal Wear, Field-Tested, Well-Worn, and Battle-Scarred.

Missing exteriors should remain gaps. The schema's `wears` and per-row `float_range` describe the finish's actual availability; string sorting or name construction is unnecessary.

## Attach prices to each exterior

Read the current all-item snapshot and choose a consistent price rule. A lowest cash-market `ask` curve can select a different marketplace at each exterior, while a fixed-source curve gives a cleaner within-market comparison. Store the chosen source and `collected_at` with every point.

For narrower float-aware curves, `GET /v1/market/buff/latest` splits an exterior into inclusive-minimum, exclusive-maximum `float` buckets. Each range has its own `ask`, `avg_ask`, `bid`, and active-order volumes. Plotting these bucket prices reveals premiums hidden by one exterior-wide floor.

## Applicable endpoints

| Endpoint | Returns | Plans |
| --- | --- | --- |
| `GET /v1/schema` | Valid wear rows and native float bounds | All plans |
| `GET /v1/prices/latest` | Current per-source asks and bids | All plans |
| `GET /v1/market/buff/latest` | Current BUFF prices by float range | All plans |

## Curve caveats

- An exterior point is a listing floor for a float interval, not a price for every float in that wear.
- The lowest ask can represent a special float, sticker craft, or other individual asset attribute that these endpoints do not describe.
- A cross-market minimum changes both wear and source between points. Label the source or use one marketplace throughout.
- BUFF range `ask_volume` is total listings in the bucket, not quantity at the lowest ask.

Use [schema float ranges](/resources/how-to-get-cs2-float-ranges) to define the x-axis before applying prices.
