# Variants

> A Variant is a single purchasable version of a product, identified by its option values.

A **Variant** is a single purchasable version of a [Product](/api/product-management/products/) - a specific combination of the product's [Options](/api/product-management/options/) (for example *Size: M / Color: Red*). Each variant carries its own `sku`, `barcode`, physical `measurement` and pricing, and is the unit that channels, orders and stock are attached to.

A product always has at least one variant. Products with no declared options have a single default variant; products with options have one variant per combination of [Option Values](/api/product-management/option-values/).

## The Variant object

## Resolved pricing

When you set the `resolveContext[*]` query parameters on a read endpoint, each variant gains a `resolvedPrice` object describing what a buyer would pay in the given channel and country at a given moment - including tax, discounts and the lowest price over the last 30 days (for EU Omnibus compliance).

```
?resolveContext[channel]=<channel_id>&resolveContext[country]=FR&resolveContext[at]=2026-01-15T10:00:00Z
```

All three parameters must be set together, or none.

## Common workflows

- **Add a variant to an existing product.** [`POST /products/{productId}/variants`](/api/product-management/variants/create/) with the option values that identify it. Reference existing [Option Values](/api/product-management/option-values/) by IRI.
- **Update stock-keeping data.** Use [`PATCH`](/api/product-management/variants/update/) to change a variant's `sku`, `barcode` or `measurement` without touching the rest of the product.
- **Display channel-specific prices.** Pass `resolveContext` to [`GET /products/{productId}/variants`](/api/product-management/variants/list/) so each variant's `resolvedPrice` reflects the buyer's channel and country.
