# Sale offers

> A Sale offer sets the selling price of a variant for a country, period and channels.

A **Sale offer** is the **selling price** of a [Variant](/api/product-management/variants/) for buyers in a given [Country](/api/product-management/countries/), over a validity period, optionally scoped to specific [Channels](/api/product-management/channels/). It carries the **tax-excluded price** and a [Tax](/api/product-management/taxes/) reference, from which the tax-included price is computed.

Sale offers are what the API reads to produce a variant's **`resolvedPrice`**: when you pass `resolveContext[channel]`, `resolveContext[country]` and `resolveContext[at]` on a [variant read](/api/product-management/variants/list/), the matching sale offer (right country, channel and date) determines the price a buyer would see.

## The Sale offer object

## How pricing resolves

- A variant can have several sale offers - one per country, channel set, or time window.
- `startsAt` / `endsAt` bound when an offer applies. Leave `endsAt` open for an ongoing price.
- `discountTaxExcludedPrice` (optional) sets a promotional price for the period.
- On read, `resolveContext` selects the applicable offer and exposes the computed `price`, `discountPrice` and per-unit values.

## Common workflows

- **Set a price.** [Create a sale offer](/api/product-management/sale-offers/create/) for a variant with a `country`, `tax`, `taxExcludedPrice` and `startsAt`.
- **Run a promotion.** Add an offer with a `discountTaxExcludedPrice` and an `endsAt`, then let it expire.
- **Price per channel.** Attach `channels` to an offer so it only applies on those sales surfaces.

## Conventions

All requests require an OAuth 2.0 bearer token and the organization scope header:

```
Authorization: Bearer <token>
X-Flowkiwi-Organization-Id: <organization-id>
```

`PATCH` uses [JSON Merge Patch](https://datatracker.ietf.org/doc/html/rfc7396) with `Content-Type: application/merge-patch+json`.
