Create a product
post
/api/products Creates a Product resource.
Creates a single product in the current organization. The product is returned with all read-only fields (id, timestamps, derived state) populated. You can also create initial channel assignments, collections and variants in the same call.
Headers
| Name | Type | Required | Description |
|---|---|---|---|
Flowkiwi-Locale | string | - | Specifies the locale for properties that support localization. If not provided, the default locale will be used. |
Request body
| Property | Type | Required | Description | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
attributes | ProductAttributeValueResource[] | - | Attribute values for the attribute definitions attached to the product's category (or one of its ancestors). | ||||||||||||||||
Show | |||||||||||||||||||
| Property | Type | Required | Description |
|---|---|---|---|
definition | string | required | The attribute definition this value is for. Requires the categories:read scope. Returned null when the scope is missing. |
option | string | - | The selected option, for attribute definitions of type list. Must belong to definition. Requires the categories:read scope. Returned null when the scope is missing. |
value | string | null | - | This property supports translations. The free-text value, for attribute definitions of type string. |
categorystring | nullcategories:read scope. Returned null when the scope is missing.channelsstring[]Channel IRIs the product is assigned to. Requires the channels:read scope. Returned empty when the scope is missing.collectionsstring[]Collection IRIs the product is attached to. Requires the collections:read scope. Returned empty when the scope is missing.descriptionstring | nullmediasstring[]Media IRIs (ordered). Only images are accepted. Position determines display order. Requires the medias:read scope. Returned empty when the scope is missing.status"/api/statuses/DRAFT" | "/api/statuses/ACTIVE" | "/api/statuses/ARCHIVED"tagsstring | nulltitlestring | nullFlowkiwi-Locale.Response
201 - Product resource created
| Property | Type | Required | Description | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@context | string | object | - | |||||||||||||||||||||||||
@id | string | required | |||||||||||||||||||||||||
@type | string | required | |||||||||||||||||||||||||
attributes | ProductAttributeValueResource[] | - | Attribute values for the attribute definitions attached to the product's category (or one of its ancestors). Each item references a definition (IRI) plus either an option (for list definitions) or a value (for string definitions). | ||||||||||||||||||||||||
Show | |||||||||||||||||||||||||||
| Property | Type | Required | Description |
|---|---|---|---|
code | string | null | - | The code of the attribute definition (read-only, mirrors definition.code). |
definition | string | null | required | The attribute definition this value is for. Requires the categories:read scope. Returned null when the scope is missing. |
option | string | null | - | The selected option, for attribute definitions of type list. Must belong to definition. Requires the categories:read scope. Returned null when the scope is missing. |
type | "string" | "list" | null | - | The type of the attribute definition (read-only, mirrors definition.type). |
value | string | null | - | This property supports translations. The free-text value, for attribute definitions of type string. |
categorystring | Category | null?expand=category to embed the full CategoryResource. Requires the categories:read scope. Returned null when the scope is missing.channelsarrayChannel, each one representing a channel associated with the product. Serialized as IRI strings by default; pass ?expand=channels to embed full ChannelResource objects. Requires the channels:read scope. Returned empty when the scope is missing.collectionsarrayCollection, each one representing a collection associated with the product. Serialized as IRI strings by default; pass ?expand=collections to embed full CollectionResource objects. Requires the collections:read scope. Returned empty when the scope is missing.createdAtstringdescriptionstring | nullA description of the product.
idstringmediasarrayMedia, 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. Requires the medias:read scope. Returned empty when the scope is missing.metafieldsarray?expand=metafields to embed full MetafieldResource objects. Requires the metafields:read scope. Returned empty when the scope is missing.optionsarrayProduct 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. Requires the products:read scope. Returned empty when the scope is missing.status"/api/statuses/DRAFT" | "/api/statuses/ACTIVE" | "/api/statuses/ARCHIVED"tagsstring | nulltitlestring | nullThe name of the product.
updatedAtstringvariantsarrayVariant, 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). Requires the products:read scope. Returned empty when the scope is missing.| Property | Type | Required | Description | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
attributes | ProductAttributeValueResource[] | - | Attribute values for the attribute definitions attached to the product's category (or one of its ancestors). Each item references a definition (IRI) plus either an option (for list definitions) or a value (for string definitions). | ||||||||||||||||||||||||
Show | |||||||||||||||||||||||||||
| Property | Type | Required | Description |
|---|---|---|---|
code | string | null | - | The code of the attribute definition (read-only, mirrors definition.code). |
definition | string | null | required | The attribute definition this value is for. Requires the categories:read scope. Returned null when the scope is missing. |
option | string | null | - | The selected option, for attribute definitions of type list. Must belong to definition. Requires the categories:read scope. Returned null when the scope is missing. |
type | "string" | "list" | null | - | The type of the attribute definition (read-only, mirrors definition.type). |
value | string | null | - | This property supports translations. The free-text value, for attribute definitions of type string. |
categorystring | Category | null?expand=category to embed the full CategoryResource. Requires the categories:read scope. Returned null when the scope is missing.channelsarrayChannel, each one representing a channel associated with the product. Serialized as IRI strings by default; pass ?expand=channels to embed full ChannelResource objects. Requires the channels:read scope. Returned empty when the scope is missing.collectionsarrayCollection, each one representing a collection associated with the product. Serialized as IRI strings by default; pass ?expand=collections to embed full CollectionResource objects. Requires the collections:read scope. Returned empty when the scope is missing.createdAtstringdescriptionstring | nullA description of the product.
idstringmediasarrayMedia, 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. Requires the medias:read scope. Returned empty when the scope is missing.metafieldsarray?expand=metafields to embed full MetafieldResource objects. Requires the metafields:read scope. Returned empty when the scope is missing.optionsarrayProduct 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. Requires the products:read scope. Returned empty when the scope is missing.status"/api/statuses/DRAFT" | "/api/statuses/ACTIVE" | "/api/statuses/ARCHIVED"tagsstring | nulltitlestring | nullThe name of the product.
updatedAtstringvariantsarrayVariant, 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). Requires the products:read scope. Returned empty when the scope is missing.Errors
400 - Invalid input
| Property | Type | Required | Description |
|---|---|---|---|
@context | string | object | - | |
@id | string | required | |
@type | string | required | |
code | string | - | Stable identifier of the error in the error code catalogue (see /api/error-codes). Present on catalogued errors only. |
description | string | null | - | |
detail | string | null | - | A human-readable explanation specific to this occurrence of the problem. |
instance | string | null | - | A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. |
message | string | - | End-user message localized in the request locale, with this occurrence's values substituted. Present on catalogued errors only. |
slug | string | - | Stable, readable key of the error in the error code catalogue. Present on catalogued errors only. |
status | integer | null | - | |
title | string | null | - | A short, human-readable summary of the problem. For a catalogued error it repeats the slug. |
type | string | - | A URI reference that identifies the problem type. For a catalogued error it is the error code resource, /api/error-codes/{code}. |
| Property | Type | Required | Description |
|---|---|---|---|
code | string | - | Stable identifier of the error in the error code catalogue (see /api/error-codes). Present on catalogued errors only. |
detail | string | null | - | A human-readable explanation specific to this occurrence of the problem. |
instance | string | null | - | A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. |
message | string | - | End-user message localized in the request locale, with this occurrence's values substituted. Present on catalogued errors only. |
slug | string | - | Stable, readable key of the error in the error code catalogue. Present on catalogued errors only. |
status | integer | null | - | |
title | string | null | - | A short, human-readable summary of the problem. For a catalogued error it repeats the slug. |
type | string | - | A URI reference that identifies the problem type. For a catalogued error it is the error code resource, /api/error-codes/{code}. |
403 - Access denied. The caller is missing one or more permissions required for this operation.
Content-Type: application/problem+json
| Property | Type | Required | Description |
|---|---|---|---|
@context | string | object | - | |
@id | string | required | |
@type | string | required | |
detail | string | - | |
missingPermissions | string[] | - | Permissions that the caller is missing for this operation. Present only when the 403 is caused by a denied permission. |
status | integer | - | |
title | string | - | |
type | string | - |
422 - An error occurred
| Property | Type | Required | Description | ||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@context | string | object | - | |||||||||||||||||||||||||||||||||
@id | string | required | |||||||||||||||||||||||||||||||||
@type | string | required | |||||||||||||||||||||||||||||||||
description | string | - | |||||||||||||||||||||||||||||||||
detail | string | - | |||||||||||||||||||||||||||||||||
instance | string | null | - | |||||||||||||||||||||||||||||||||
status | integer | - | |||||||||||||||||||||||||||||||||
title | string | null | - | |||||||||||||||||||||||||||||||||
type | string | - | |||||||||||||||||||||||||||||||||
violations | object[] | - | |||||||||||||||||||||||||||||||||
Show | |||||||||||||||||||||||||||||||||||
| Property | Type | Required | Description |
|---|---|---|---|
code | string | - | The code of the violation |
hint | string | - | An extra hint to understand the violation |
message | string | required | The message associated with the violation |
parameters | object | - | Dynamic placeholder values for the violation message template (substitute into the code catalogue message). |
payload | object | - | The serialized payload of the violation |
propertyPath | string | required | The property path of the violation |
slug | string | - | Stable centralized error-code slug for this violation (see /api/error-codes). |
| Property | Type | Required | Description | ||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
detail | string | - | |||||||||||||||||||||||||||||||||
instance | string | null | - | |||||||||||||||||||||||||||||||||
status | integer | - | |||||||||||||||||||||||||||||||||
title | string | null | - | |||||||||||||||||||||||||||||||||
type | string | - | |||||||||||||||||||||||||||||||||
violations | object[] | - | |||||||||||||||||||||||||||||||||
Show | |||||||||||||||||||||||||||||||||||
| Property | Type | Required | Description |
|---|---|---|---|
code | string | - | The code of the violation |
hint | string | - | An extra hint to understand the violation |
message | string | required | The message associated with the violation |
parameters | object | - | Dynamic placeholder values for the violation message template (substitute into the code catalogue message). |
payload | object | - | The serialized payload of the violation |
propertyPath | string | required | The property path of the violation |
slug | string | - | Stable centralized error-code slug for this violation (see /api/error-codes). |