# Products

> The Product resource represents a sellable item in your Flowkiwi catalog.
{/* generated:versioned-pages - edit _pm-authored, not this file */}

A **Product** is a sellable item in your catalog. Each product can carry channel-, country- and time-aware pricing through its variants, and can be assigned to collections and categories. Products are the parent of [Variants](/api/product-management/variants/) and own a set of [Options](/api/product-management/options/) that define their variant matrix.

## The Product object

## Common workflows

- **Sync a catalog from your ERP.** Use [`POST /api/products`](/api/product-management/products/create/) to create products in bulk, then patch them as inventory shifts. The `updatedAt[after]` filter on [`GET /api/products`](/api/product-management/products/list/) lets you poll only the products that changed since your last sync.
- **Surface prices for a specific channel.** Pass `resolveContext[channel]`, `resolveContext[country]` and `resolveContext[at]` to [`GET /api/products`](/api/product-management/products/list/) so each variant's `resolvedPrice` reflects what a buyer in that channel and country would see at that moment.
- **Take a product down without losing its history.** [`DELETE /api/products/{id}`](/api/product-management/products/delete/) removes the product from active channels but preserves its audit trail.

## Conventions

These conventions apply to every endpoint on this resource.

### Authentication and headers

All requests require an OAuth 2.0 bearer token:

```
Authorization: Bearer <token>
```

For localized fields, set the active locale:

```
Flowkiwi-Locale: fr-FR
```

### Resolve context

Three query parameters control how prices and channel-specific fields are computed on read endpoints:

- `resolveContext[channel]` - channel identifier
- `resolveContext[country]` - ISO 3166-1 alpha-2 country code
- `resolveContext[at]` - ISO 8601 UTC timestamp

All three must be set together, or none. When set, embedded variants gain a `resolvedPrice` field.

### Pagination

List endpoints accept `page` (1-based) and `itemsPerPage`. Defaults follow the standard Hydra collection contract.

### Partial updates

`PATCH` uses [JSON Merge Patch](https://datatracker.ietf.org/doc/html/rfc7396) with `Content-Type: application/merge-patch+json`. To clear a field, pass `null`; to leave it untouched, omit it.
