Skip to content

Products

View as Markdown

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.

PropertyTypeRequiredDescription
idstring-Stable UUID of the product.
statusstring-The status of the product.
vendorstring | null-The name of the product's vendor.
titlestring | null-This property supports translations.

The name of the product.
descriptionstring | null-This property supports translations.

A description of the product.
tagsstring | null-A string of comma-separated tags.
variantsstring[]-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).
optionsstring[]-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.
categorystring | null-The category to which this product belongs. Serialized as IRI string by default; pass ?expand=category to embed the full CategoryResource.
attributeValuesarray-A list of Attribute Values, each one representing an attribute value associated with the product.
channelsstring[]-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.
collectionsstring[]-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.
mediasstring[]-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.
metafieldsstring[]-Metafields owned by this product. Serialized as IRI strings by default; pass ?expand=metafields to embed full MetafieldResource objects.
createdAtstring-The date and time when the resource was created (ISO 8601 format).
updatedAtstring-The date and time when the resource was last modified (ISO 8601 format).
  • Sync a catalog from your ERP. Use POST /products to create products in bulk, then patch them as inventory shifts. The updatedAt[after] filter on GET /products 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 /products 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 /products/{id} removes the product from active channels but preserves its audit trail.

These conventions apply to every endpoint on this resource.

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-FR
X-Flowkiwi-Locale-Fallback: en-US

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.

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

PATCH uses JSON Merge Patch with Content-Type: application/merge-patch+json. To clear a field, pass null; to leave it untouched, omit it.