Products
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 and own a set of Options that define their variant matrix.
The Product object
Section titled “The Product object”| Property | Type | Required | Description |
|---|---|---|---|
id | string | - | Stable UUID of the product. |
status | string | - | The status of the product. |
vendor | string | null | - | The name of the product's vendor. |
title | string | null | - | This property supports translations. The name of the product. |
description | string | null | - | This property supports translations. A description of the product. |
tags | string | null | - | A string of comma-separated tags. |
variants | string[] | - | A list of Variant, each one representing a variant associated with the product. Serialized as IRI strings by default; pass ?expand=variants to embed the full Variant objects (including resolvedPrice, lowestPriceLast30Days, medias, and metafields when composed with ?expand=metafields). |
options | string[] | - | A list of Product Option, each one representing an option associated with the product. Serialized as IRI strings by default; pass ?expand=options to embed the full Product Option objects. |
category | string | null | - | The category to which this product belongs. Serialized as IRI string by default; pass ?expand=category to embed the full CategoryResource. |
attributeValues | array | - | A list of Attribute Values, each one representing an attribute value associated with the product. |
channels | string[] | - | A list of Channel, each one representing a channel associated with the product. Serialized as IRI strings by default; pass ?expand=channels to embed full ChannelResource objects. |
collections | string[] | - | A list of Collection, each one representing a collection associated with the product. Serialized as IRI strings by default; pass ?expand=collections to embed full CollectionResource objects. |
medias | string[] | - | A list of Media, ordered by position. Only media of type "image" can be associated with a product. Returned as IRI strings by default; pass ?expand=medias to embed full Media objects. |
metafields | string[] | - | Metafields owned by this product. Serialized as IRI strings by default; pass ?expand=metafields to embed full MetafieldResource objects. |
createdAt | string | - | The date and time when the resource was created (ISO 8601 format). |
updatedAt | string | - | The date and time when the resource was last modified (ISO 8601 format). |
Common workflows
Section titled “Common workflows”- Sync a catalog from your ERP. Use
POST /productsto create products in bulk, then patch them as inventory shifts. TheupdatedAt[after]filter onGET /productslets you poll only the products that changed since your last sync. - Surface prices for a specific channel. Pass
resolveContext[channel],resolveContext[country]andresolveContext[at]toGET /productsso each variant’sresolvedPricereflects what a buyer in that channel and country would see at that moment. - Take a product down without losing its history.
DELETE /products/{id}removes the product from active channels but preserves its audit trail.
Conventions
Section titled “Conventions”These conventions apply to every endpoint on this resource.
Authentication and headers
Section titled “Authentication and headers”All requests require an OAuth 2.0 bearer token:
Authorization: Bearer <token>And the organization scope header:
X-Flowkiwi-Organization-Id: <organization-id>For localized fields, set the active locale and (optionally) a fallback:
X-Flowkiwi-Locale: fr-FRX-Flowkiwi-Locale-Fallback: en-USResolve context
Section titled “Resolve context”Three query parameters control how prices and channel-specific fields are computed on read endpoints:
resolveContext[channel]- channel identifierresolveContext[country]- ISO 3166-1 alpha-2 country coderesolveContext[at]- ISO 8601 UTC timestamp
All three must be set together, or none. When set, embedded variants gain a resolvedPrice field.
Pagination
Section titled “Pagination”List endpoints accept page (1-based) and itemsPerPage. Defaults follow the standard Hydra collection contract.
Partial updates
Section titled “Partial updates”PATCH uses JSON Merge Patch with Content-Type: application/merge-patch+json. To clear a field, pass null; to leave it untouched, omit it.