# How to Get Every Wear for a CS2 Skin

> `GET /v1/schema` lists every issued wear-specific CS2 item by exact `market_hash_name`, including each row's wear, float range, and StatTrak or Souvenir status.

Not every finish exists in all five wear bands. Generating names by appending every condition can create catalog entries that Valve never issued.

## Wear data in the schema

Skin records can include:

- `base_name`, `weapon`, and `finish` for grouping the same finish.
- `wears` for the conditions the finish supports.
- `wear` for the condition of the exact catalog row.
- `float_range.min` and `float_range.max` for the finish's allowed float bounds.
- `stattrak` and `souvenir` on the exact row, plus `has_stattrak` and `has_souvenir` on compatible finish records.
- The canonical `market_hash_name` accepted by price endpoints.

The schema also supplies category, rarity, collections, containers, marketplace IDs, and images. Fields that do not apply are omitted.

## Enumerate real wear rows

Fetch `GET /v1/schema` and group `items` by the desired `base_name`. Filter to skin rows, then list their exact `market_hash_name` and `wear` values. Use the returned rows as the allowed set rather than constructing strings.

Treat `wears` as finish-level availability and the top-level item keys as the executable catalog identities. StatTrak and Souvenir availability should also come from actual rows. A general `has_stattrak` flag does not guarantee that every wear has a corresponding StatTrak row.

Doppler phases and Case Hardened tiers are variants, not additional wears. Base rows list them under `variants`, and standalone variant rows link back through `variant`.

## Applicable endpoint

| Endpoint | Returns | Plans |
| --- | --- | --- |
| `GET /v1/schema` | Complete item catalog, wears, variants, IDs, and images | All plans |

## Schema details that affect syncing

- `float_range` is the finish-level allowed range. It is not the numeric boundary of the row's wear label.
- Fields are omitted when they do not apply, so absence must be handled explicitly.
- Use `generation_id` or the response ETag to detect a new immutable schema generation.
- `image` is required; `steam_image` is optional and can be absent without removing the owned image.
- Price lookups still require the exact returned `market_hash_name`.

The [schema API reference](/docs/api-reference/schema) lists the catalog object fields.
