Download OpenAPI specification:
Public, versioned HTTP API for NetSeller commerce integrations.
All responses use a shared envelope with data, meta, and errors.
API base URLs belong to individual NetSeller installations; this
documentation host does not proxy or execute Commerce API requests.
Returns products assigned to the resolved shop. The collection defaults
to active products; use active=false or active=all to include other
states. q performs a case-insensitive substring search across the
effective name, short name, SKU/article number, EAN, manufacturer
number, and short description. The long description is not searched.
Product text is resolved for the requested language with the shop
default language and product master data as fallbacks. Product prices
are resolved for quantity one using the selected currency and optional
price list. Resolved quantity tiers and a reservation-adjusted
availability summary for the shop's default inventory location are
included with each product.
| page | integer >= 1 Default: 1 Example: page=2 One-based page number. |
| perPage | integer [ 1 .. 100 ] Default: 25 Example: perPage=50 Number of items returned per page. |
| sort | string^-?(id|name|sku|updatedAt)(,-?(id|name|sku|up... Default: "id" Example: sort=-updatedAt,name Comma-separated product fields. Supported fields are |
| q | string <= 200 characters Examples:
Case-insensitive substring search across the effective localized name, short name, SKU/article number, EAN, manufacturer number, and short description. The long description is not searched. |
| active | string Default: "true" Enum: "true" "false" "all" Examples:
Filters by product active state. |
| categoryId | Array of integers non-empty unique [ items >= 1 ] Examples:
Comma-separated positive category IDs. A product matches when it is assigned to at least one listed category in the resolved shop. |
| manufacturerId | Array of integers non-empty unique [ items >= 1 ] Examples:
Comma-separated positive manufacturer IDs. A product matches when its manufacturer is included in the list. |
| updatedAfter | string <date-time> ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}... Example: updatedAfter=2026-07-01T00:00:00Z Exclusive lower boundary for |
| updatedBefore | string <date-time> ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}... Example: updatedBefore=2026-08-01T00:00:00Z Exclusive upper boundary for |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": [
- {
- "id": 1,
- "active": true,
- "sku": "string",
- "ean": "string",
- "name": "string",
- "shortName": "string",
- "shortDescription": "string",
- "manufacturerId": 1,
- "manufacturerName": "string",
- "manufacturerNumber": "string",
- "categories": [
- {
- "id": 1,
- "name": "string",
- "active": true,
- "sortOrder": 0
}
], - "markings": [
- {
- "id": 1,
- "key": "string",
- "name": "string",
- "badgeColor": "string",
- "hasDateRange": true,
- "sortOrder": 0,
- "activeFrom": "2019-08-24T14:15:22Z",
- "activeUntil": "2019-08-24T14:15:22Z"
}
], - "fulfillmentMode": "shipping_and_pickup",
- "hasVariants": true,
- "availability": {
- "tracked": true,
- "status": "inStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "primaryImage": {
- "id": 1,
- "url": "/media/catalog/9"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Creates one shared product master record, assigns it only to the
resolved shop, stores its localized text in the resolved language, and
creates its canonical base price in the resolved currency. New products
default to inactive unless active: true is supplied.
A supplied compareAtAmount must be greater than amount; it becomes
the canonical base price while amount becomes the effective canonical
sale price. Without it, amount is the canonical base price. Products
without quantity pricing still store one canonical threshold at
minQuantity: 1; the required price object creates it automatically.
Product SKUs are global identifiers. An existing SKU returns
409 product_sku_conflict. Price lists, media, additional shop
assignments, shop overrides, category assignments, variants, and
inventory are not created implicitly. priceListId is not supported.
A canonical slug is generated from name. An optional seo object
may set a manual slug and localized metadata for the resolved language.
Authentication with the catalog:write scope and Commerce request
context is required.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| sku required | string [ 1 .. 120 ] characters |
| ean | string or null^(?:[0-9]{8}|[0-9]{12,14})$ |
| name required | string [ 1 .. 255 ] characters Product name in the resolved request language. |
| shortName | string or null <= 50 characters |
| description | string or null |
| shortDescription | string or null May contain markup; rendered text is limited to 255 characters. |
| manufacturerNumber | string or null <= 120 characters |
| manufacturerId | integer or null >= 1 Optional manufacturer assigned to the resolved shop. |
| taxRateId required | integer >= 1 |
| deliveryTimeId | integer or null >= 1 |
| minimumOrderQuantity | integer >= 1 Default: 1 |
| active | boolean Default: false |
| fulfillmentMode | string Default: "shipping_and_pickup" Enum: "shipping_and_pickup" "pickup_only" |
object (ProductMeasurementWrite) non-empty Product measurements. Omitted properties remain unchanged. A null
decimal value clears that measurement; null or zero for
| |
object (ConnectorCustomFieldWriteValues) <= 100 properties Complete replacement of all active connector-visible custom-field values for the entity in the resolved shop. Keys are technical custom- field keys. Null clears a scalar value; an empty array clears a multi-select value. Definitions not visible to connectors cannot be addressed and remain unchanged. | |
object (CatalogSeoWrite) non-empty SEO changes for the resolved language. A non-empty | |
required | object (ProductCreatePrice) Canonical quantity-one price. Product creation stores this as the
required |
{- "sku": "ERP-501",
- "ean": "7612345678901",
- "name": "API product",
- "shortDescription": "Created by the ERP connector",
- "manufacturerId": 5,
- "taxRateId": 2,
- "deliveryTimeId": 3,
- "minimumOrderQuantity": 1,
- "active": false,
- "fulfillmentMode": "shipping_and_pickup",
- "seo": {
- "slug": "api-product",
- "metaTitle": "API product",
- "metaDescription": "Product metadata maintained by the connector."
}, - "price": {
- "amount": 20,
- "compareAtAmount": 25,
- "amountType": "gross"
}
}{- "data": {
- "id": 1,
- "active": true,
- "sku": "string",
- "ean": "string",
- "name": "string",
- "shortName": "string",
- "shortDescription": "string",
- "manufacturerId": 1,
- "manufacturerName": "string",
- "manufacturerNumber": "string",
- "categories": [
- {
- "id": 1,
- "name": "string",
- "active": true,
- "sortOrder": 0
}
], - "markings": [
- {
- "id": 1,
- "key": "string",
- "name": "string",
- "badgeColor": "string",
- "hasDateRange": true,
- "sortOrder": 0,
- "activeFrom": "2019-08-24T14:15:22Z",
- "activeUntil": "2019-08-24T14:15:22Z"
}
], - "fulfillmentMode": "shipping_and_pickup",
- "hasVariants": true,
- "availability": {
- "tracked": true,
- "status": "inStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "primaryImage": {
- "id": 1,
- "url": "/media/catalog/9"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "description": "string",
- "taxRateId": 1,
- "deliveryTimeId": 1,
- "packagingUnit": "string",
- "measurements": {
- "widthMm": "string",
- "heightMm": "string",
- "lengthMm": "string",
- "weightKg": "string",
- "salesUnit": "string",
- "measurementUnitId": 1
}, - "media": [
- {
- "id": 1,
- "url": "/media/catalog/9",
- "mimeType": "image/jpeg",
- "title": "string",
- "altText": "string",
- "width": 1,
- "height": 1,
- "variantId": 1
}
], - "variants": [
- {
- "id": 1,
- "sku": "string",
- "ean": "string",
- "name": "string",
- "shortName": "string",
- "description": "string",
- "shortDescription": "string",
- "manufacturerNumber": "string",
- "packagingUnit": "string",
- "isDefault": true,
- "availability": {
- "tracked": true,
- "status": "inStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "measurements": {
- "widthMm": "string",
- "heightMm": "string",
- "lengthMm": "string",
- "weightKg": "string",
- "salesUnit": "string",
- "measurementUnitId": 1
}, - "options": [
- {
- "groupId": 1,
- "valueId": 1,
- "groupName": "string",
- "value": "string",
- "swatchColor": "#ff0000",
- "sortOrder": 0
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "seo": {
- "metaTitle": "string",
- "metaDescription": "string",
- "slug": "string",
- "canonicalPath": "/example-product"
}, - "specificationSet": {
- "id": 1,
- "key": "string",
- "name": "string"
}, - "specifications": [
- {
- "id": 1,
- "key": "string",
- "name": "string",
- "valueType": "string",
- "group": {
- "id": 1,
- "key": "string",
- "name": "string"
}, - "unit": {
- "id": 1,
- "name": "string",
- "symbol": "string"
}, - "value": {
- "text": "string",
- "decimal": "string",
- "boolean": true,
- "date": "2019-08-24",
- "options": [
- {
- "id": 1,
- "key": "string",
- "name": "string"
}
]
}
}
], - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns one product when it is assigned to the resolved shop,
independently of its active state. The active response field exposes
that state. The detail includes its resolved product price and quantity
tiers, category assignments, active variants with their own resolved
prices and quantity tiers, localized option values and availability,
active catalog images, resolved SEO metadata, and connector-visible
product custom fields. Embedded variants remain compact and expose
their custom fields through the variant detail endpoint. Unassigned
products are not exposed.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": {
- "id": 42,
- "active": true,
- "sku": "SKU-42",
- "ean": "7612345678901",
- "name": "Example product",
- "shortName": "Example",
- "shortDescription": "Localized product summary",
- "manufacturerId": 5,
- "manufacturerName": "Example manufacturer",
- "manufacturerNumber": "M-42",
- "taxRateId": 2,
- "deliveryTimeId": 3,
- "categories": [
- {
- "id": 12,
- "name": "Running shoes",
- "active": true,
- "sortOrder": 20
}
], - "markings": [ ],
- "fulfillmentMode": "shipping_and_pickup",
- "hasVariants": true,
- "availability": {
- "tracked": true,
- "status": "lowStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "primaryImage": {
- "id": 9,
- "url": "/media/catalog/9"
}, - "createdAt": "2026-07-29T10:30:00Z",
- "updatedAt": "2026-07-29T11:45:00Z",
- "description": "Localized product description",
- "packagingUnit": "piece",
- "measurements": {
- "widthMm": "125.500",
- "heightMm": null,
- "lengthMm": null,
- "weightKg": "1.2500",
- "salesUnit": "1.0000",
- "measurementUnitId": 3
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - {
- "minQuantity": 10,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "media": [
- {
- "id": 9,
- "url": "/media/catalog/9",
- "mimeType": "image/jpeg",
- "title": "Example product",
- "altText": "Example product in red",
- "width": 1200,
- "height": 800,
- "variantId": null
}
], - "variants": [
- {
- "id": 51,
- "sku": "SKU-42-RED",
- "ean": null,
- "name": "Red",
- "shortName": null,
- "description": null,
- "shortDescription": null,
- "manufacturerNumber": "M-42-RED",
- "packagingUnit": "piece",
- "isDefault": true,
- "availability": {
- "tracked": true,
- "status": "lowStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "17.90",
- "compareAtAmount": "19.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "19.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - {
- "minQuantity": 10,
- "amount": "15.90",
- "compareAtAmount": "19.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "measurements": {
- "widthMm": "125.500",
- "heightMm": null,
- "lengthMm": null,
- "weightKg": "1.2500",
- "salesUnit": "1.0000",
- "measurementUnitId": 3
}, - "options": [
- {
- "groupId": 3,
- "valueId": 4,
- "groupName": "Color",
- "value": "Red",
- "swatchColor": "#ff0000",
- "sortOrder": 1
}
], - "createdAt": "2026-07-29T10:30:00Z",
- "updatedAt": "2026-07-29T11:45:00Z"
}
], - "seo": {
- "metaTitle": "Example product",
- "metaDescription": "Buy the example product online.",
- "slug": "example-product",
- "canonicalPath": "/example-product"
}, - "specificationSet": {
- "id": 7,
- "key": "running-shoe-profile",
- "name": "Running-shoe profile"
}, - "specifications": [
- {
- "id": 11,
- "key": "upper-material",
- "name": "Upper material",
- "valueType": "multi_option",
- "group": {
- "id": 3,
- "key": "materials",
- "name": "Materials"
}, - "unit": null,
- "value": {
- "text": null,
- "decimal": null,
- "boolean": null,
- "date": null,
- "options": [
- {
- "id": 21,
- "key": "mesh",
- "name": "Mesh"
}
]
}
}
], - "customFields": [
- {
- "setKey": "catalog",
- "setLabel": "Catalog",
- "key": "fragile",
- "label": "Fragile",
- "type": "boolean",
- "value": true,
- "displayValue": "Yes",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Partially updates one shared product assigned to the resolved shop. Omitted fields remain unchanged. Localized text affects only the resolved language and canonical pricing only the resolved currency.
price updates the quantity-one canonical tier. priceTiers replaces
all canonical tiers in the resolved currency; its first positive
minQuantity threshold may be greater than one. The two fields cannot
be combined. Use an empty string to clear optional text and 0 to
clear manufacturerId or deliveryTimeId.
A product without quantity pricing must retain one canonical entry at
minQuantity: 1; use price or a one-element priceTiers array for
that case. A higher first threshold intentionally leaves lower
quantities without a canonical price.
Renaming synchronizes an automatic canonical slug but never overwrites
a manual slug. seo.slug sets a manual canonical slug; null resets
it to automatic generation. Previous canonicals remain 301 history.
Shop assignments are preserved and cannot be changed here. Use
active: false for reversible deactivation; the public API exposes no
destructive product DELETE because products can retain operational and
cross-shop references. Authentication with the catalog:write scope
is required.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| sku | string [ 1 .. 120 ] characters |
| ean | string^(?:|[0-9]{8}|[0-9]{12,14})$ |
| name | string [ 1 .. 255 ] characters Product name in the resolved request language. |
| shortName | string <= 50 characters |
| description | string |
| shortDescription | string May contain markup; rendered text is limited to 255 characters. |
| manufacturerNumber | string <= 120 characters |
| manufacturerId | integer >= 0 Manufacturer assigned to the resolved shop; zero clears it. |
| taxRateId | integer >= 1 |
| deliveryTimeId | integer >= 0 Delivery time ID; zero clears it. |
| minimumOrderQuantity | integer >= 1 |
| active | boolean |
| fulfillmentMode | string Enum: "shipping_and_pickup" "pickup_only" |
object (ProductMeasurementWrite) non-empty Product measurements. Omitted properties remain unchanged. A null
decimal value clears that measurement; null or zero for
| |
object (ConnectorCustomFieldWriteValues) <= 100 properties Complete replacement of all active connector-visible custom-field values for the entity in the resolved shop. Keys are technical custom- field keys. Null clears a scalar value; an empty array clears a multi-select value. Definitions not visible to connectors cannot be addressed and remain unchanged. | |
object (CatalogSeoWrite) non-empty SEO changes for the resolved language. A non-empty | |
object (ProductCreatePrice) Canonical quantity-one price. Product creation stores this as the
required | |
Array of objects (ProductUpdatePriceTier) [ 1 .. 100 ] items Complete replacement for canonical tiers in the resolved currency. Quantities must be unique and positive; the first threshold may be greater than one. Every tier must use one shared amountType. A product without quantity pricing uses one entry at minQuantity 1. |
{- "name": "Updated API product",
- "deliveryTimeId": 0,
- "active": true,
- "seo": {
- "slug": "updated-api-product",
- "metaTitle": "Updated API product"
}, - "priceTiers": [
- {
- "minQuantity": 250,
- "amount": 20,
- "compareAtAmount": 25,
- "amountType": "gross"
}, - {
- "minQuantity": 500,
- "amount": 18,
- "amountType": "gross"
}
]
}{- "data": {
- "id": 1,
- "active": true,
- "sku": "string",
- "ean": "string",
- "name": "string",
- "shortName": "string",
- "shortDescription": "string",
- "manufacturerId": 1,
- "manufacturerName": "string",
- "manufacturerNumber": "string",
- "categories": [
- {
- "id": 1,
- "name": "string",
- "active": true,
- "sortOrder": 0
}
], - "markings": [
- {
- "id": 1,
- "key": "string",
- "name": "string",
- "badgeColor": "string",
- "hasDateRange": true,
- "sortOrder": 0,
- "activeFrom": "2019-08-24T14:15:22Z",
- "activeUntil": "2019-08-24T14:15:22Z"
}
], - "fulfillmentMode": "shipping_and_pickup",
- "hasVariants": true,
- "availability": {
- "tracked": true,
- "status": "inStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "primaryImage": {
- "id": 1,
- "url": "/media/catalog/9"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "description": "string",
- "taxRateId": 1,
- "deliveryTimeId": 1,
- "packagingUnit": "string",
- "measurements": {
- "widthMm": "string",
- "heightMm": "string",
- "lengthMm": "string",
- "weightKg": "string",
- "salesUnit": "string",
- "measurementUnitId": 1
}, - "media": [
- {
- "id": 1,
- "url": "/media/catalog/9",
- "mimeType": "image/jpeg",
- "title": "string",
- "altText": "string",
- "width": 1,
- "height": 1,
- "variantId": 1
}
], - "variants": [
- {
- "id": 1,
- "sku": "string",
- "ean": "string",
- "name": "string",
- "shortName": "string",
- "description": "string",
- "shortDescription": "string",
- "manufacturerNumber": "string",
- "packagingUnit": "string",
- "isDefault": true,
- "availability": {
- "tracked": true,
- "status": "inStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "measurements": {
- "widthMm": "string",
- "heightMm": "string",
- "lengthMm": "string",
- "weightKg": "string",
- "salesUnit": "string",
- "measurementUnitId": 1
}, - "options": [
- {
- "groupId": 1,
- "valueId": 1,
- "groupName": "string",
- "value": "string",
- "swatchColor": "#ff0000",
- "sortOrder": 0
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "seo": {
- "metaTitle": "string",
- "metaDescription": "string",
- "slug": "string",
- "canonicalPath": "/example-product"
}, - "specificationSet": {
- "id": 1,
- "key": "string",
- "name": "string"
}, - "specifications": [
- {
- "id": 1,
- "key": "string",
- "name": "string",
- "valueType": "string",
- "group": {
- "id": 1,
- "key": "string",
- "name": "string"
}, - "unit": {
- "id": 1,
- "name": "string",
- "symbol": "string"
}, - "value": {
- "text": "string",
- "decimal": "string",
- "boolean": true,
- "date": "2019-08-24",
- "options": [
- {
- "id": 1,
- "key": "string",
- "name": "string"
}
]
}
}
], - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns the current resolved price and effective quantity tiers for one product assigned to the resolved shop, regardless of its active state. Resolution applies the selected shop's base-price override, the optional global price-list override, and applicable marketing price actions. Missing price-list rows fall back to the resolved base price.
This compact response represents the main product only. It does not expose variant prices, raw price records, or price-list override rows.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": {
- "product": {
- "id": 42,
- "sku": "SKU-42"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - {
- "minQuantity": 10,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
]
}, - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns stored product price-list rows without resolving base-price
fallback, shop overrides, inheritance, or marketing price actions.
The selected shop authorizes product visibility only; rows are global.
Omit currency and priceListId to return all stored rows.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Optional ISO currency filter; omit it to include every currency. |
| priceListId | integer >= 1 Optional global price-list filter; omit it to include every price list. |
{- "data": [
- {
- "id": 1,
- "productId": 1,
- "priceListId": 1,
- "currency": "string",
- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Creates one global product price-list override row in the resolved currency. Price list, currency, and minimum quantity must be unique.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId required | integer >= 1 |
| minQuantity | integer >= 1 Default: 1 |
| amount required | string^[0-9]{1,12}(\.[0-9]{1,4})?$ |
| compareAtAmount | string or null^[0-9]{1,12}(\.[0-9]{1,4})?$ |
{- "priceListId": 1,
- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string"
}{- "data": {
- "id": 1,
- "productId": 1,
- "priceListId": 1,
- "currency": "string",
- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Updates mutable values while preserving row identity, price list, and currency.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| priceListPriceId required | integer >= 1 Example: 91 Positive raw price-list row ID returned by the matching product or variant endpoint. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| minQuantity | integer >= 1 |
| amount | string^[0-9]{1,12}(\.[0-9]{1,4})?$ |
| compareAtAmount | string or null^[0-9]{1,12}(\.[0-9]{1,4})?$ |
{- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string"
}{- "data": {
- "id": 1,
- "productId": 1,
- "priceListId": 1,
- "currency": "string",
- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Deletes the selected raw product price-list row without changing canonical prices or other quantity tiers.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| priceListPriceId required | integer >= 1 Example: 91 Positive raw price-list row ID returned by the matching product or variant endpoint. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
{- "data": {
- "id": 1,
- "deleted": true
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Adds one active image to the gallery of a product assigned to the
resolved shop. Send JSON with mediaAssetId to reuse an existing
media-library image, or send one file as multipart/form-data to
upload and assign a new image in one request.
Existing product images, downloads, and other media roles are
preserved. Without sortOrder, a new image is appended after the
current product images. Repeating an existing assignment is
idempotent and returns 200; a newly created assignment returns
201. The response is the authoritative public product detail.
Supported uploads are JPG, PNG, GIF, WebP, AVIF, and SVG. The configured media upload-size limit applies. Product downloads and external videos are outside this image-specific contract.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
| mediaAssetId required | integer >= 1 Existing active image asset to assign to the product. |
| sortOrder | integer [ 0 .. 2147483647 ] Optional gallery order; lower values are returned first. |
{- "mediaAssetId": 91,
- "sortOrder": 20
}{- "data": {
- "id": 1,
- "active": true,
- "sku": "string",
- "ean": "string",
- "name": "string",
- "shortName": "string",
- "shortDescription": "string",
- "manufacturerId": 1,
- "manufacturerName": "string",
- "manufacturerNumber": "string",
- "categories": [
- {
- "id": 1,
- "name": "string",
- "active": true,
- "sortOrder": 0
}
], - "markings": [
- {
- "id": 1,
- "key": "string",
- "name": "string",
- "badgeColor": "string",
- "hasDateRange": true,
- "sortOrder": 0,
- "activeFrom": "2019-08-24T14:15:22Z",
- "activeUntil": "2019-08-24T14:15:22Z"
}
], - "fulfillmentMode": "shipping_and_pickup",
- "hasVariants": true,
- "availability": {
- "tracked": true,
- "status": "inStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "primaryImage": {
- "id": 1,
- "url": "/media/catalog/9"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "description": "string",
- "taxRateId": 1,
- "deliveryTimeId": 1,
- "packagingUnit": "string",
- "measurements": {
- "widthMm": "string",
- "heightMm": "string",
- "lengthMm": "string",
- "weightKg": "string",
- "salesUnit": "string",
- "measurementUnitId": 1
}, - "media": [
- {
- "id": 1,
- "url": "/media/catalog/9",
- "mimeType": "image/jpeg",
- "title": "string",
- "altText": "string",
- "width": 1,
- "height": 1,
- "variantId": 1
}
], - "variants": [
- {
- "id": 1,
- "sku": "string",
- "ean": "string",
- "name": "string",
- "shortName": "string",
- "description": "string",
- "shortDescription": "string",
- "manufacturerNumber": "string",
- "packagingUnit": "string",
- "isDefault": true,
- "availability": {
- "tracked": true,
- "status": "inStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "measurements": {
- "widthMm": "string",
- "heightMm": "string",
- "lengthMm": "string",
- "weightKg": "string",
- "salesUnit": "string",
- "measurementUnitId": 1
}, - "options": [
- {
- "groupId": 1,
- "valueId": 1,
- "groupName": "string",
- "value": "string",
- "swatchColor": "#ff0000",
- "sortOrder": 0
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "seo": {
- "metaTitle": "string",
- "metaDescription": "string",
- "slug": "string",
- "canonicalPath": "/example-product"
}, - "specificationSet": {
- "id": 1,
- "key": "string",
- "name": "string"
}, - "specifications": [
- {
- "id": 1,
- "key": "string",
- "name": "string",
- "valueType": "string",
- "group": {
- "id": 1,
- "key": "string",
- "name": "string"
}, - "unit": {
- "id": 1,
- "name": "string",
- "symbol": "string"
}, - "value": {
- "text": "string",
- "decimal": "string",
- "boolean": true,
- "date": "2019-08-24",
- "options": [
- {
- "id": 1,
- "key": "string",
- "name": "string"
}
]
}
}
], - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces the complete product image gallery with the ordered
mediaAssetIds array. Every ID must reference a distinct active image;
the first becomes the primary image. An empty array clears the gallery
and an unchanged retry avoids rewriting usages.
Product downloads and every non-gallery media role are preserved. Downloads and external media require separate future contracts because they have different metadata, delivery, and lifecycle semantics.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
| mediaAssetIds required | Array of integers <= 100 items unique [ items [ 1 .. 2147483647 ] ] Complete ordered set of active images assigned to the product. |
{- "mediaAssetIds": [
- 92,
- 91
]
}{- "data": {
- "id": 1,
- "active": true,
- "sku": "string",
- "ean": "string",
- "name": "string",
- "shortName": "string",
- "shortDescription": "string",
- "manufacturerId": 1,
- "manufacturerName": "string",
- "manufacturerNumber": "string",
- "categories": [
- {
- "id": 1,
- "name": "string",
- "active": true,
- "sortOrder": 0
}
], - "markings": [
- {
- "id": 1,
- "key": "string",
- "name": "string",
- "badgeColor": "string",
- "hasDateRange": true,
- "sortOrder": 0,
- "activeFrom": "2019-08-24T14:15:22Z",
- "activeUntil": "2019-08-24T14:15:22Z"
}
], - "fulfillmentMode": "shipping_and_pickup",
- "hasVariants": true,
- "availability": {
- "tracked": true,
- "status": "inStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "primaryImage": {
- "id": 1,
- "url": "/media/catalog/9"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "description": "string",
- "taxRateId": 1,
- "deliveryTimeId": 1,
- "packagingUnit": "string",
- "measurements": {
- "widthMm": "string",
- "heightMm": "string",
- "lengthMm": "string",
- "weightKg": "string",
- "salesUnit": "string",
- "measurementUnitId": 1
}, - "media": [
- {
- "id": 1,
- "url": "/media/catalog/9",
- "mimeType": "image/jpeg",
- "title": "string",
- "altText": "string",
- "width": 1,
- "height": 1,
- "variantId": 1
}
], - "variants": [
- {
- "id": 1,
- "sku": "string",
- "ean": "string",
- "name": "string",
- "shortName": "string",
- "description": "string",
- "shortDescription": "string",
- "manufacturerNumber": "string",
- "packagingUnit": "string",
- "isDefault": true,
- "availability": {
- "tracked": true,
- "status": "inStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "measurements": {
- "widthMm": "string",
- "heightMm": "string",
- "lengthMm": "string",
- "weightKg": "string",
- "salesUnit": "string",
- "measurementUnitId": 1
}, - "options": [
- {
- "groupId": 1,
- "valueId": 1,
- "groupName": "string",
- "value": "string",
- "swatchColor": "#ff0000",
- "sortOrder": 0
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "seo": {
- "metaTitle": "string",
- "metaDescription": "string",
- "slug": "string",
- "canonicalPath": "/example-product"
}, - "specificationSet": {
- "id": 1,
- "key": "string",
- "name": "string"
}, - "specifications": [
- {
- "id": 1,
- "key": "string",
- "name": "string",
- "valueType": "string",
- "group": {
- "id": 1,
- "key": "string",
- "name": "string"
}, - "unit": {
- "id": 1,
- "name": "string",
- "symbol": "string"
}, - "value": {
- "text": "string",
- "decimal": "string",
- "boolean": true,
- "date": "2019-08-24",
- "options": [
- {
- "id": 1,
- "key": "string",
- "name": "string"
}
]
}
}
], - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Removes only the selected product image assignment. The media-library asset, product downloads, external media, and all other usages remain unchanged. The authoritative product detail is returned.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| mediaAssetId required | integer >= 1 Example: 91 Positive media-asset identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": {
- "id": 1,
- "active": true,
- "sku": "string",
- "ean": "string",
- "name": "string",
- "shortName": "string",
- "shortDescription": "string",
- "manufacturerId": 1,
- "manufacturerName": "string",
- "manufacturerNumber": "string",
- "categories": [
- {
- "id": 1,
- "name": "string",
- "active": true,
- "sortOrder": 0
}
], - "markings": [
- {
- "id": 1,
- "key": "string",
- "name": "string",
- "badgeColor": "string",
- "hasDateRange": true,
- "sortOrder": 0,
- "activeFrom": "2019-08-24T14:15:22Z",
- "activeUntil": "2019-08-24T14:15:22Z"
}
], - "fulfillmentMode": "shipping_and_pickup",
- "hasVariants": true,
- "availability": {
- "tracked": true,
- "status": "inStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "primaryImage": {
- "id": 1,
- "url": "/media/catalog/9"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "description": "string",
- "taxRateId": 1,
- "deliveryTimeId": 1,
- "packagingUnit": "string",
- "measurements": {
- "widthMm": "string",
- "heightMm": "string",
- "lengthMm": "string",
- "weightKg": "string",
- "salesUnit": "string",
- "measurementUnitId": 1
}, - "media": [
- {
- "id": 1,
- "url": "/media/catalog/9",
- "mimeType": "image/jpeg",
- "title": "string",
- "altText": "string",
- "width": 1,
- "height": 1,
- "variantId": 1
}
], - "variants": [
- {
- "id": 1,
- "sku": "string",
- "ean": "string",
- "name": "string",
- "shortName": "string",
- "description": "string",
- "shortDescription": "string",
- "manufacturerNumber": "string",
- "packagingUnit": "string",
- "isDefault": true,
- "availability": {
- "tracked": true,
- "status": "inStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "measurements": {
- "widthMm": "string",
- "heightMm": "string",
- "lengthMm": "string",
- "weightKg": "string",
- "salesUnit": "string",
- "measurementUnitId": 1
}, - "options": [
- {
- "groupId": 1,
- "valueId": 1,
- "groupName": "string",
- "value": "string",
- "swatchColor": "#ff0000",
- "sortOrder": 0
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "seo": {
- "metaTitle": "string",
- "metaDescription": "string",
- "slug": "string",
- "canonicalPath": "/example-product"
}, - "specificationSet": {
- "id": 1,
- "key": "string",
- "name": "string"
}, - "specifications": [
- {
- "id": 1,
- "key": "string",
- "name": "string",
- "valueType": "string",
- "group": {
- "id": 1,
- "key": "string",
- "name": "string"
}, - "unit": {
- "id": 1,
- "name": "string",
- "symbol": "string"
}, - "value": {
- "text": "string",
- "decimal": "string",
- "boolean": true,
- "date": "2019-08-24",
- "options": [
- {
- "id": 1,
- "key": "string",
- "name": "string"
}
]
}
}
], - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Adds one or more active shops to a shared product without removing
existing assignments. The product must already be assigned to the
resolved shopId context. Every target shop must also be assigned to
the authenticated API client.
Duplicate target IDs are collapsed. A request that creates at least
one assignment returns 201; an identical retry is idempotent and
returns 200. Both responses contain the authoritative complete shop
assignment set visible to the API client; assignments outside its shop
access are not exposed.
Pickup-only products require an active pickup shipping method in every requested shop. Base data, translations, prices, and shop-specific overrides are not copied or replaced. Existing category assignments are projected to the newly assigned shops by the product domain service.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
| shopIds required | Array of integers non-empty [ items [ 1 .. 2147483647 ] ] Active target shops assigned to the authenticated API client. |
{- "shopIds": [
- 2,
- 3
]
}{- "data": {
- "productId": 1,
- "shopAssignments": [
- {
- "shopId": 1,
- "key": "string",
- "name": "string",
- "primary": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces the product assignments within the authenticated API client's
active shop-access boundary. Assignments to shops outside that boundary
are preserved and never exposed. This makes the submitted shopIds
authoritative for every shop the client is allowed to manage while
preventing accidental removal of hidden assignments.
The product must be available in the resolved shopId, and that shop
must remain in the submitted set so the mutation cannot invalidate its
own context. Every submitted shop must be active and assigned to the
API client. Omitting another accessible shop removes that assignment.
An identical retry is idempotent and returns 200.
Pickup-only products require an active pickup shipping method in every submitted shop. Existing category assignments are reprojected by the product domain service. Base data, translations, prices, and overrides are not copied or replaced.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
| shopIds required | Array of integers non-empty [ items [ 1 .. 2147483647 ] ] Active target shops assigned to the authenticated API client. |
{- "shopIds": [
- 2,
- 3
]
}{- "data": {
- "productId": 1,
- "shopAssignments": [
- {
- "shopId": 1,
- "key": "string",
- "name": "string",
- "primary": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces the complete global category-assignment set for a product available in the resolved shop. Every submitted category must also be available in that shop. Unknown and shop-foreign category IDs use the same validation response and are not disclosed.
Nested selections automatically include their available ancestors,
matching Admin catalog authoring. An empty categoryIds array removes
every assignment. Repeating an unchanged request is idempotent.
The shared assignment set is projected only into shops where both the product and category are assigned. The response is the authoritative product detail resolved for the current Commerce API context.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
| categoryIds required | Array of integers <= 100 items unique [ items [ 1 .. 2147483647 ] ] Complete desired global category-assignment set. Empty removes all assignments. Assigned ancestors are added automatically. |
{- "categoryIds": [
- 12,
- 18
]
}{- "data": {
- "id": 1,
- "active": true,
- "sku": "string",
- "ean": "string",
- "name": "string",
- "shortName": "string",
- "shortDescription": "string",
- "manufacturerId": 1,
- "manufacturerName": "string",
- "manufacturerNumber": "string",
- "categories": [
- {
- "id": 1,
- "name": "string",
- "active": true,
- "sortOrder": 0
}
], - "markings": [
- {
- "id": 1,
- "key": "string",
- "name": "string",
- "badgeColor": "string",
- "hasDateRange": true,
- "sortOrder": 0,
- "activeFrom": "2019-08-24T14:15:22Z",
- "activeUntil": "2019-08-24T14:15:22Z"
}
], - "fulfillmentMode": "shipping_and_pickup",
- "hasVariants": true,
- "availability": {
- "tracked": true,
- "status": "inStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "primaryImage": {
- "id": 1,
- "url": "/media/catalog/9"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "description": "string",
- "taxRateId": 1,
- "deliveryTimeId": 1,
- "packagingUnit": "string",
- "measurements": {
- "widthMm": "string",
- "heightMm": "string",
- "lengthMm": "string",
- "weightKg": "string",
- "salesUnit": "string",
- "measurementUnitId": 1
}, - "media": [
- {
- "id": 1,
- "url": "/media/catalog/9",
- "mimeType": "image/jpeg",
- "title": "string",
- "altText": "string",
- "width": 1,
- "height": 1,
- "variantId": 1
}
], - "variants": [
- {
- "id": 1,
- "sku": "string",
- "ean": "string",
- "name": "string",
- "shortName": "string",
- "description": "string",
- "shortDescription": "string",
- "manufacturerNumber": "string",
- "packagingUnit": "string",
- "isDefault": true,
- "availability": {
- "tracked": true,
- "status": "inStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "measurements": {
- "widthMm": "string",
- "heightMm": "string",
- "lengthMm": "string",
- "weightKg": "string",
- "salesUnit": "string",
- "measurementUnitId": 1
}, - "options": [
- {
- "groupId": 1,
- "valueId": 1,
- "groupName": "string",
- "value": "string",
- "swatchColor": "#ff0000",
- "sortOrder": 0
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "seo": {
- "metaTitle": "string",
- "metaDescription": "string",
- "slug": "string",
- "canonicalPath": "/example-product"
}, - "specificationSet": {
- "id": 1,
- "key": "string",
- "name": "string"
}, - "specifications": [
- {
- "id": 1,
- "key": "string",
- "name": "string",
- "valueType": "string",
- "group": {
- "id": 1,
- "key": "string",
- "name": "string"
}, - "unit": {
- "id": 1,
- "name": "string",
- "symbol": "string"
}, - "value": {
- "text": "string",
- "decimal": "string",
- "boolean": true,
- "date": "2019-08-24",
- "options": [
- {
- "id": 1,
- "key": "string",
- "name": "string"
}
]
}
}
], - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces the complete ordered product-marking assignment set in the resolved shop. Only active global marking definitions may be assigned; unknown and inactive IDs use the same validation response.
Array order defines display order. An empty array removes every assignment in the selected shop. Optional activation bounds must be RFC 3339 UTC values and are supported only by marking definitions configured for date ranges. Repeating an unchanged request is idempotent and avoids a rewrite.
The response is authoritative product detail for the current Commerce API context. Its markings collection includes only assignments active at response time, so future scheduled assignments may not yet appear.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
required | Array of objects (ProductMarkingAssignmentWrite) <= 100 items Complete desired assignment set for the resolved shop. Array order defines display order; empty removes every assignment. |
{- "assignments": [
- {
- "markingId": 3
}, - {
- "markingId": 7,
- "activeFrom": "2026-10-01T00:00:00Z",
- "activeUntil": "2026-10-31T23:59:59Z"
}
]
}{- "data": {
- "id": 1,
- "active": true,
- "sku": "string",
- "ean": "string",
- "name": "string",
- "shortName": "string",
- "shortDescription": "string",
- "manufacturerId": 1,
- "manufacturerName": "string",
- "manufacturerNumber": "string",
- "categories": [
- {
- "id": 1,
- "name": "string",
- "active": true,
- "sortOrder": 0
}
], - "markings": [
- {
- "id": 1,
- "key": "string",
- "name": "string",
- "badgeColor": "string",
- "hasDateRange": true,
- "sortOrder": 0,
- "activeFrom": "2019-08-24T14:15:22Z",
- "activeUntil": "2019-08-24T14:15:22Z"
}
], - "fulfillmentMode": "shipping_and_pickup",
- "hasVariants": true,
- "availability": {
- "tracked": true,
- "status": "inStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "primaryImage": {
- "id": 1,
- "url": "/media/catalog/9"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "description": "string",
- "taxRateId": 1,
- "deliveryTimeId": 1,
- "packagingUnit": "string",
- "measurements": {
- "widthMm": "string",
- "heightMm": "string",
- "lengthMm": "string",
- "weightKg": "string",
- "salesUnit": "string",
- "measurementUnitId": 1
}, - "media": [
- {
- "id": 1,
- "url": "/media/catalog/9",
- "mimeType": "image/jpeg",
- "title": "string",
- "altText": "string",
- "width": 1,
- "height": 1,
- "variantId": 1
}
], - "variants": [
- {
- "id": 1,
- "sku": "string",
- "ean": "string",
- "name": "string",
- "shortName": "string",
- "description": "string",
- "shortDescription": "string",
- "manufacturerNumber": "string",
- "packagingUnit": "string",
- "isDefault": true,
- "availability": {
- "tracked": true,
- "status": "inStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "measurements": {
- "widthMm": "string",
- "heightMm": "string",
- "lengthMm": "string",
- "weightKg": "string",
- "salesUnit": "string",
- "measurementUnitId": 1
}, - "options": [
- {
- "groupId": 1,
- "valueId": 1,
- "groupName": "string",
- "value": "string",
- "swatchColor": "#ff0000",
- "sortOrder": 0
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "seo": {
- "metaTitle": "string",
- "metaDescription": "string",
- "slug": "string",
- "canonicalPath": "/example-product"
}, - "specificationSet": {
- "id": 1,
- "key": "string",
- "name": "string"
}, - "specifications": [
- {
- "id": 1,
- "key": "string",
- "name": "string",
- "valueType": "string",
- "group": {
- "id": 1,
- "key": "string",
- "name": "string"
}, - "unit": {
- "id": 1,
- "name": "string",
- "symbol": "string"
}, - "value": {
- "text": "string",
- "decimal": "string",
- "boolean": true,
- "date": "2019-08-24",
- "options": [
- {
- "id": 1,
- "key": "string",
- "name": "string"
}
]
}
}
], - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Atomically replaces the product's specification-set assignment and complete typed value collection. The set, submitted definitions, active set items, and option IDs are validated without disclosing unavailable registry entries. Required set items must have values.
Every value object has exactly one field matching its definition's
value type. Text targets the resolved request language while preserving
other stored translations. Array omission removes optional values.
Set specificationSetId to 0 with an empty values array to clear the
complete state. Identical retries avoid rewriting stored rows.
Product detail exposes only active, storefront-visible, present values, so stored administrative-only definitions may be absent from the response.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
| specificationSetId required | integer [ 0 .. 2147483647 ] Active set ID, or zero to remove the complete specification state. |
required | Array of ProductSpecificationTextWrite (object) or ProductSpecificationNumberWrite (object) or ProductSpecificationDecimalWrite (object) or ProductSpecificationBooleanWrite (object) or ProductSpecificationDateWrite (object) or ProductSpecificationSingleOptionWrite (object) or ProductSpecificationMultiOptionWrite (object) <= 250 items Complete typed value collection for the selected set. |
{- "specificationSetId": 9,
- "values": [
- {
- "definitionId": 11,
- "text": "Oak aged"
}, - {
- "definitionId": 12,
- "number": 12
}, - {
- "definitionId": 13,
- "decimal": 13.5
}, - {
- "definitionId": 14,
- "boolean": false
}, - {
- "definitionId": 15,
- "date": "2026-09-17"
}, - {
- "definitionId": 16,
- "optionId": 61
}, - {
- "definitionId": 17,
- "optionIds": [
- 71,
- 72
]
}
]
}{- "data": {
- "id": 1,
- "active": true,
- "sku": "string",
- "ean": "string",
- "name": "string",
- "shortName": "string",
- "shortDescription": "string",
- "manufacturerId": 1,
- "manufacturerName": "string",
- "manufacturerNumber": "string",
- "categories": [
- {
- "id": 1,
- "name": "string",
- "active": true,
- "sortOrder": 0
}
], - "markings": [
- {
- "id": 1,
- "key": "string",
- "name": "string",
- "badgeColor": "string",
- "hasDateRange": true,
- "sortOrder": 0,
- "activeFrom": "2019-08-24T14:15:22Z",
- "activeUntil": "2019-08-24T14:15:22Z"
}
], - "fulfillmentMode": "shipping_and_pickup",
- "hasVariants": true,
- "availability": {
- "tracked": true,
- "status": "inStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "primaryImage": {
- "id": 1,
- "url": "/media/catalog/9"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "description": "string",
- "taxRateId": 1,
- "deliveryTimeId": 1,
- "packagingUnit": "string",
- "measurements": {
- "widthMm": "string",
- "heightMm": "string",
- "lengthMm": "string",
- "weightKg": "string",
- "salesUnit": "string",
- "measurementUnitId": 1
}, - "media": [
- {
- "id": 1,
- "url": "/media/catalog/9",
- "mimeType": "image/jpeg",
- "title": "string",
- "altText": "string",
- "width": 1,
- "height": 1,
- "variantId": 1
}
], - "variants": [
- {
- "id": 1,
- "sku": "string",
- "ean": "string",
- "name": "string",
- "shortName": "string",
- "description": "string",
- "shortDescription": "string",
- "manufacturerNumber": "string",
- "packagingUnit": "string",
- "isDefault": true,
- "availability": {
- "tracked": true,
- "status": "inStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "measurements": {
- "widthMm": "string",
- "heightMm": "string",
- "lengthMm": "string",
- "weightKg": "string",
- "salesUnit": "string",
- "measurementUnitId": 1
}, - "options": [
- {
- "groupId": 1,
- "valueId": 1,
- "groupName": "string",
- "value": "string",
- "swatchColor": "#ff0000",
- "sortOrder": 0
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "seo": {
- "metaTitle": "string",
- "metaDescription": "string",
- "slug": "string",
- "canonicalPath": "/example-product"
}, - "specificationSet": {
- "id": 1,
- "key": "string",
- "name": "string"
}, - "specifications": [
- {
- "id": 1,
- "key": "string",
- "name": "string",
- "valueType": "string",
- "group": {
- "id": 1,
- "key": "string",
- "name": "string"
}, - "unit": {
- "id": 1,
- "name": "string",
- "symbol": "string"
}, - "value": {
- "text": "string",
- "decimal": "string",
- "boolean": true,
- "date": "2019-08-24",
- "options": [
- {
- "id": 1,
- "key": "string",
- "name": "string"
}
]
}
}
], - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns the global ordered accessory-group assignments for a product available in the resolved shop. Group names use the requested language and configured fallback language. Internal assignment IDs and global group product counts are not exposed.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": {
- "productId": 1,
- "accessoryGroups": [
- {
- "id": 1,
- "key": "string",
- "name": "string",
- "sortOrder": 1
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces the complete global ordered accessory-group assignment set. Array order defines display order, an empty array clears the set, and unchanged retries produce the same authoritative result. Every ID must identify an existing global accessory group.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
| accessoryGroupIds required | Array of integers <= 100 items unique [ items [ 1 .. 2147483647 ] ] Complete ordered global accessory-group assignment set. |
{- "accessoryGroupIds": [
- 3,
- 7
]
}{- "data": {
- "productId": 1,
- "accessoryGroups": [
- {
- "id": 1,
- "key": "string",
- "name": "string",
- "sortOrder": 1
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns direct accessory products assigned to the source product and available in the resolved shop. Foreign-shop assignments remain hidden.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": {
- "productId": 1,
- "accessoryProducts": [
- {
- "id": 1,
- "sku": "string",
- "name": "string",
- "active": true,
- "sortOrder": 1
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces the ordered direct-accessory set visible in the resolved shop. Array order defines display order and an empty array clears the visible set. Existing assignments to products outside the API client's current shop boundary are preserved and remain undisclosed. Self-relations and unavailable product IDs are rejected with the same validation response.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
| productIds required | Array of integers <= 100 items unique [ items [ 1 .. 2147483647 ] ] Complete ordered visible direct-accessory product set. |
{- "productIds": [
- 42,
- 57
]
}{- "data": {
- "productId": 1,
- "accessoryProducts": [
- {
- "id": 1,
- "sku": "string",
- "name": "string",
- "active": true,
- "sortOrder": 1
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns manual recommendations for the resolved shop in maintained order. Only products assigned to that shop can appear.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": {
- "productId": 1,
- "recommendations": [
- {
- "id": 1,
- "sku": "string",
- "name": "string",
- "active": true,
- "sortOrder": 1
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces the complete manual recommendation set for the resolved shop. Array order defines display order, an empty array clears the set, and at most 20 products are accepted. Self-relations and products outside the resolved shop use the same validation response.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
| productIds required | Array of integers <= 20 items unique [ items [ 1 .. 2147483647 ] ] Complete ordered manual recommendation set for the resolved shop. |
{- "productIds": [
- 42,
- 57
]
}{- "data": {
- "productId": 1,
- "recommendations": [
- {
- "id": 1,
- "sku": "string",
- "name": "string",
- "active": true,
- "sortOrder": 1
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces shop-specific base-price override data for one assigned,
active, non-primary shop. The target shop is taken from the path and
must be assigned to the authenticated API client; this endpoint does
not accept a separate shopId query parameter.
price replaces all quantity-one override rows, including scheduled
or inactive rows at that threshold, while leaving higher thresholds
untouched. priceTiers completely replaces all override rows in the
selected currency and may start above quantity one. { "inherit": true } removes every
override tier in that currency and restores canonical fallback.
Exactly one of these three fields is required.
The optional currency query parameter selects an active currency;
otherwise the target shop's default currency is used. The response
contains active, non-scheduled stored tiers, not the fully resolved
effective price. Use the product prices endpoint with the target shop
context for effective and time-dependent pricing.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId required | integer [ 1 .. 2147483647 ] Examples:
Positive shop identifier assigned to the API client. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| inherit required | boolean Remove all overrides in the selected currency. Value: true |
object (ProductCreatePrice) Replace all quantity-one shop override rows. | |
Array of objects (ProductUpdatePriceTier) [ 1 .. 100 ] items Complete replacement for shop override tiers in the selected currency. |
{- "priceTiers": [
- {
- "minQuantity": 250,
- "amount": 20,
- "compareAtAmount": 25,
- "amountType": "gross"
}, - {
- "minQuantity": 500,
- "amount": 18,
- "amountType": "gross"
}
]
}{- "data": {
- "productId": 1,
- "shopId": 1,
- "currency": "string",
- "inherited": true,
- "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string",
- "amountType": "gross"
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Creates an initially inactive variant for a product assigned to the
resolved shop. Variant master data remains global; the shop context is
only the authorization and presentation boundary. sku is globally
unique. options can atomically assign one product-enabled value per
group; its array order is the returned display order. Media,
measurements, translations, custom fields, and optional canonical
variant prices can be authored in the same request. Shop and
price-list overrides use their explicit pricing operations.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
| sku required | string [ 1 .. 120 ] characters |
| ean | string or null^(?:|[0-9]{8}|[0-9]{12,14})$ |
| deliveryTimeId | integer >= 0 |
| name | string or null <= 255 characters |
| shortName | string or null <= 50 characters |
| minimumOrderQuantity | integer >= 0 |
| description | string or null |
| shortDescription | string or null May contain markup; rendered text is limited to 255 characters. |
| packagingUnit | string or null <= 120 characters |
object (VariantMeasurementWrite) non-empty Variant-specific measurement overrides. Omitted properties remain
unchanged. A null numeric value, or zero for | |
object (ConnectorCustomFieldWriteValues) <= 100 properties Complete replacement of all active connector-visible custom-field values for the entity in the resolved shop. Keys are technical custom- field keys. Null clears a scalar value; an empty array clears a multi-select value. Definitions not visible to connectors cannot be addressed and remain unchanged. | |
| manufacturerNumber | string or null <= 120 characters |
| sortOrder | integer >= 0 Default: 0 |
| isDefault | boolean Default: false |
| active | boolean Default: false |
Array of objects (VariantMutationOption) <= 20 items | |
object (ProductCreatePrice) Optional canonical quantity-one variant price. | |
Array of objects (ProductUpdatePriceTier) <= 100 items Optional canonical variant tiers in the resolved currency. The first threshold may be greater than one. An empty array stores no variant price rows and therefore inherits parent-product pricing. |
{- "sku": "string",
- "ean": "string",
- "deliveryTimeId": 0,
- "name": "string",
- "shortName": "string",
- "minimumOrderQuantity": 0,
- "description": "string",
- "shortDescription": "string",
- "packagingUnit": "string",
- "measurements": {
- "widthMm": 0,
- "heightMm": 0,
- "lengthMm": 0,
- "weightKg": 0,
- "salesUnit": 0,
- "measurementUnitId": 0
}, - "customFields": {
- "property1": "string",
- "property2": "string"
}, - "manufacturerNumber": "string",
- "sortOrder": 0,
- "isDefault": false,
- "active": false,
- "options": [
- {
- "groupId": 1,
- "valueId": 1
}
], - "price": {
- "amount": 0,
- "compareAtAmount": 0,
- "amountType": "gross"
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": 0,
- "compareAtAmount": 0,
- "amountType": "gross"
}
]
}{- "data": {
- "id": 1,
- "active": true,
- "product": {
- "id": 1,
- "sku": "string",
- "name": "string"
}, - "sku": "string",
- "ean": "string",
- "name": "string",
- "shortName": "string",
- "shortDescription": "string",
- "manufacturerId": 1,
- "manufacturerName": "string",
- "manufacturerNumber": "string",
- "fulfillmentMode": "shipping_and_pickup",
- "isDefault": true,
- "sortOrder": 0,
- "options": [
- {
- "groupId": 1,
- "valueId": 1,
- "groupName": "string",
- "value": "string",
- "swatchColor": "#ff0000",
- "sortOrder": 0
}
], - "availability": {
- "tracked": true,
- "status": "inStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "primaryImage": {
- "id": 1,
- "url": "/media/catalog/9"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "description": "string",
- "packagingUnit": "string",
- "measurements": {
- "widthMm": "string",
- "heightMm": "string",
- "lengthMm": "string",
- "weightKg": "string",
- "salesUnit": "string",
- "measurementUnitId": 1
}, - "media": [
- {
- "id": 1,
- "url": "/media/catalog/9",
- "mimeType": "image/jpeg",
- "title": "string",
- "altText": "string",
- "width": 1,
- "height": 1,
- "variantId": 1
}
], - "seo": {
- "metaTitle": "string",
- "metaDescription": "string",
- "slug": "string",
- "canonicalPath": "/example-product"
}, - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns variants of products assigned to the resolved shop. The
collection defaults to active variants of active products. Use
active=false for inactive variants or active=all to remove variant
and parent-product active-state filtering. q performs a
case-insensitive substring search across the effective name, short
name, SKU/article number, EAN, manufacturer number, and short
description. Effective values include the documented language and
parent-product fallbacks; the long description is not searched. Prices
and quantity tiers use the selected currency and optional price list.
Availability is calculated for the concrete variant at the shop's
default inventory location and accounts for active reservations.
Use productId to restrict the collection to one parent product.
| page | integer >= 1 Default: 1 Example: page=2 One-based page number. |
| perPage | integer [ 1 .. 100 ] Default: 25 Example: perPage=50 Number of items returned per page. |
| sort | string^-?(id|productId|name|sku|sortOrder|updatedAt... Default: "productId,sortOrder,id" Example: sort=productId,sortOrder,id Comma-separated variant fields. Supported fields are |
| productId | integer >= 1 Example: productId=42 Restricts the collection to variants belonging to this shop-assigned
parent product. The |
| q | string <= 200 characters Examples:
Case-insensitive substring search across the effective localized name, short name, SKU/article number, EAN, manufacturer number, and short description. Effective values include variant, language, and parent product fallbacks. The long description is not searched. |
| active | string Default: "true" Enum: "true" "false" "all" Examples:
Controls variant active-state filtering. |
| updatedAfter | string <date-time> ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}... Example: updatedAfter=2026-07-01T00:00:00Z Exclusive lower boundary for the variant's effective |
| updatedBefore | string <date-time> ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}... Example: updatedBefore=2026-08-01T00:00:00Z Exclusive upper boundary for the variant's effective |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": [
- {
- "id": 1,
- "active": true,
- "product": {
- "id": 1,
- "sku": "string",
- "name": "string"
}, - "sku": "string",
- "ean": "string",
- "name": "string",
- "shortName": "string",
- "shortDescription": "string",
- "manufacturerId": 1,
- "manufacturerName": "string",
- "manufacturerNumber": "string",
- "fulfillmentMode": "shipping_and_pickup",
- "isDefault": true,
- "sortOrder": 0,
- "options": [
- {
- "groupId": 1,
- "valueId": 1,
- "groupName": "string",
- "value": "string",
- "swatchColor": "#ff0000",
- "sortOrder": 0
}
], - "availability": {
- "tracked": true,
- "status": "inStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "primaryImage": {
- "id": 1,
- "url": "/media/catalog/9"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns one variant of a product assigned to the resolved shop,
independently of the variant or parent-product active state. The
active response field exposes the variant state. All inheritable
fields are returned as effective values, including fallbacks from the
parent product. The media gallery uses active variant images when
available and otherwise falls back to the parent product gallery. SEO
metadata and the canonical path belong to the parent product because
variants do not have independent storefront URLs. Connector-visible
variant custom fields are resolved for the selected shop and language.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": {
- "id": 51,
- "active": true,
- "product": {
- "id": 42,
- "sku": "SKU-42",
- "name": "Example product"
}, - "sku": "SKU-42-RED",
- "ean": "7612345678901",
- "name": "Example product – Red",
- "shortName": "Red",
- "shortDescription": "Localized product summary",
- "manufacturerId": 5,
- "manufacturerName": "Example manufacturer",
- "manufacturerNumber": "M-42-RED",
- "fulfillmentMode": "shipping_and_pickup",
- "isDefault": true,
- "sortOrder": 10,
- "options": [
- {
- "groupId": 3,
- "valueId": 4,
- "groupName": "Color",
- "value": "Red",
- "swatchColor": "#ff0000",
- "sortOrder": 1
}
], - "availability": {
- "tracked": true,
- "status": "lowStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "17.90",
- "compareAtAmount": "19.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "19.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "primaryImage": {
- "id": 10,
- "url": "/media/catalog/10"
}, - "createdAt": "2026-07-29T10:30:00Z",
- "updatedAt": "2026-07-29T11:45:00Z",
- "description": "Localized product description",
- "packagingUnit": "piece",
- "measurements": {
- "widthMm": "125.500",
- "heightMm": null,
- "lengthMm": null,
- "weightKg": "1.2500",
- "salesUnit": "1.0000",
- "measurementUnitId": 3
}, - "media": [
- {
- "id": 10,
- "url": "/media/catalog/10",
- "mimeType": "image/jpeg",
- "title": "Example variant",
- "altText": "Example product in red",
- "width": 1200,
- "height": 800,
- "variantId": 51
}
], - "seo": {
- "metaTitle": "Example product",
- "metaDescription": "Buy the example product online.",
- "slug": "example-product",
- "canonicalPath": "/example-product"
}, - "customFields": [
- {
- "setKey": "catalog",
- "setLabel": "Catalog",
- "key": "warehouse_bin",
- "label": "Warehouse bin",
- "type": "text",
- "value": "A-12",
- "displayValue": "A-12",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Partially updates global variant base data after verifying that its
parent product is assigned to the resolved shop. Omitted fields remain
unchanged. Use active: false to safely deactivate a variant that has
already been used operationally. Zero clears deliveryTimeId or an
inherited minimumOrderQuantity override. When supplied, options
completely replaces the variant combination and its order; an empty
array removes all option assignments. price replaces only the
canonical quantity-one tier. priceTiers completely replaces
canonical tiers in the resolved currency; an empty array restores
parent-product price inheritance.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
| sku | string [ 1 .. 120 ] characters |
| ean | string or null^(?:|[0-9]{8}|[0-9]{12,14})$ |
| deliveryTimeId | integer >= 0 Zero clears the variant-specific delivery time. |
| name | string or null <= 255 characters |
| shortName | string or null <= 50 characters |
| minimumOrderQuantity | integer >= 0 Zero restores the parent-product fallback. |
| description | string or null |
| shortDescription | string or null May contain markup; rendered text is limited to 255 characters. |
| packagingUnit | string or null <= 120 characters |
object (VariantMeasurementWrite) non-empty Variant-specific measurement overrides. Omitted properties remain
unchanged. A null numeric value, or zero for | |
object (ConnectorCustomFieldWriteValues) <= 100 properties Complete replacement of all active connector-visible custom-field values for the entity in the resolved shop. Keys are technical custom- field keys. Null clears a scalar value; an empty array clears a multi-select value. Definitions not visible to connectors cannot be addressed and remain unchanged. | |
| manufacturerNumber | string or null <= 120 characters |
| sortOrder | integer >= 0 |
| isDefault | boolean |
| active | boolean |
Array of objects (VariantMutationOption) <= 20 items | |
object (ProductCreatePrice) Replace only the canonical quantity-one variant tier. | |
Array of objects (ProductUpdatePriceTier) <= 100 items Complete replacement for canonical variant tiers in the resolved currency. The first threshold may be greater than one. An empty array removes all own tiers and restores parent-product fallback. |
{- "sku": "string",
- "ean": "string",
- "deliveryTimeId": 0,
- "name": "string",
- "shortName": "string",
- "minimumOrderQuantity": 0,
- "description": "string",
- "shortDescription": "string",
- "packagingUnit": "string",
- "measurements": {
- "widthMm": 0,
- "heightMm": 0,
- "lengthMm": 0,
- "weightKg": 0,
- "salesUnit": 0,
- "measurementUnitId": 0
}, - "customFields": {
- "property1": "string",
- "property2": "string"
}, - "manufacturerNumber": "string",
- "sortOrder": 0,
- "isDefault": true,
- "active": true,
- "options": [
- {
- "groupId": 1,
- "valueId": 1
}
], - "price": {
- "amount": 0,
- "compareAtAmount": 0,
- "amountType": "gross"
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": 0,
- "compareAtAmount": 0,
- "amountType": "gross"
}
]
}{- "data": {
- "id": 1,
- "active": true,
- "product": {
- "id": 1,
- "sku": "string",
- "name": "string"
}, - "sku": "string",
- "ean": "string",
- "name": "string",
- "shortName": "string",
- "shortDescription": "string",
- "manufacturerId": 1,
- "manufacturerName": "string",
- "manufacturerNumber": "string",
- "fulfillmentMode": "shipping_and_pickup",
- "isDefault": true,
- "sortOrder": 0,
- "options": [
- {
- "groupId": 1,
- "valueId": 1,
- "groupName": "string",
- "value": "string",
- "swatchColor": "#ff0000",
- "sortOrder": 0
}
], - "availability": {
- "tracked": true,
- "status": "inStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "primaryImage": {
- "id": 1,
- "url": "/media/catalog/9"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "description": "string",
- "packagingUnit": "string",
- "measurements": {
- "widthMm": "string",
- "heightMm": "string",
- "lengthMm": "string",
- "weightKg": "string",
- "salesUnit": "string",
- "measurementUnitId": 1
}, - "media": [
- {
- "id": 1,
- "url": "/media/catalog/9",
- "mimeType": "image/jpeg",
- "title": "string",
- "altText": "string",
- "width": 1,
- "height": 1,
- "variantId": 1
}
], - "seo": {
- "metaTitle": "string",
- "metaDescription": "string",
- "slug": "string",
- "canonicalPath": "/example-product"
}, - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Permanently deletes a variant only while it has no cart, order,
inventory-movement, or inventory-reservation history. A used variant
returns 409 variant_in_use and must be deactivated with PATCH instead.
This bounded unused-record cleanup is the only destructive catalog
entity deletion exposed in Phase 2.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
{- "data": {
- "id": 1,
- "deleted": true
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns the current resolved price and effective quantity tiers for one concrete variant whose parent product is assigned to the resolved shop, regardless of the variant or parent-product active state. Resolution applies a variant price-list override, then a parent-product price-list override, then the resolved variant base price and applicable marketing price actions. Missing price-list rows fall back to the resolved base price.
This compact response represents the concrete variant only. It does not expose raw price records or price-list override rows.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": {
- "product": {
- "id": 42,
- "sku": "SKU-42"
}, - "variant": {
- "id": 51,
- "sku": "SKU-42-RED"
}, - "price": {
- "amount": "17.90",
- "compareAtAmount": "19.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "19.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - {
- "minQuantity": 10,
- "amount": "15.90",
- "compareAtAmount": "19.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
]
}, - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns only price-list rows stored for the concrete variant. It does not include inherited product rows or resolve any fallback. The parent product must be visible in the selected shop; rows remain global.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Optional ISO currency filter; omit it to include every currency. |
| priceListId | integer >= 1 Optional global price-list filter; omit it to include every price list. |
{- "data": [
- {
- "id": 1,
- "variantId": 1,
- "priceListId": 1,
- "currency": "string",
- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Creates one global variant override row without materializing product inheritance.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId required | integer >= 1 |
| minQuantity | integer >= 1 Default: 1 |
| amount required | string^[0-9]{1,12}(\.[0-9]{1,4})?$ |
| compareAtAmount | string or null^[0-9]{1,12}(\.[0-9]{1,4})?$ |
{- "priceListId": 1,
- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string"
}{- "data": {
- "id": 1,
- "variantId": 1,
- "priceListId": 1,
- "currency": "string",
- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Updates mutable values while preserving row identity, price list, and currency.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| priceListPriceId required | integer >= 1 Example: 91 Positive raw price-list row ID returned by the matching product or variant endpoint. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| minQuantity | integer >= 1 |
| amount | string^[0-9]{1,12}(\.[0-9]{1,4})?$ |
| compareAtAmount | string or null^[0-9]{1,12}(\.[0-9]{1,4})?$ |
{- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string"
}{- "data": {
- "id": 1,
- "variantId": 1,
- "priceListId": 1,
- "currency": "string",
- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Deletes the selected raw variant price-list row without changing canonical prices or other quantity tiers.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| priceListPriceId required | integer >= 1 Example: 91 Positive raw price-list row ID returned by the matching product or variant endpoint. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
{- "data": {
- "id": 1,
- "deleted": true
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces or removes variant base-price override tiers for one assigned,
active, non-primary shop and selected currency. The path shop is the
authorization boundary and must be assigned to the API client. Supply
exactly one of price, priceTiers, or inherit. The first tier may
begin above quantity one. inherit: true removes every variant shop
override in the selected currency and restores canonical variant or
parent-product fallback resolution.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| shopId required | integer [ 1 .. 2147483647 ] Examples:
Positive shop identifier assigned to the API client. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| inherit required | boolean Remove all overrides in the selected currency. Value: true |
object (ProductCreatePrice) Replace all quantity-one shop override rows. | |
Array of objects (ProductUpdatePriceTier) [ 1 .. 100 ] items Complete replacement for shop override tiers in the selected currency. |
{- "inherit": true
}{- "data": {
- "productId": 1,
- "variantId": 1,
- "shopId": 1,
- "currency": "string",
- "inherited": true,
- "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string",
- "amountType": "gross"
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces or removes quantity tiers for one variant and global price
list in the resolved currency. Price lists are global master data; the
resolved shop verifies access to the variant but does not scope the
stored override. Supply exactly one of price, priceTiers, or
inherit. Override amounts inherit the amount type from resolved base
pricing. Writing amounts therefore requires an existing resolved base
price, while inherit: true is always allowed and restores normal
base-price fallback.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| priceListId required | integer >= 1 Example: 8 Positive ID of a global price list. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| inherit required | boolean Remove all override tiers for this variant, list, and currency. Value: true |
object (VariantPriceListOverridePrice) Replace the quantity-one price-list override. | |
Array of objects (VariantPriceListOverridePriceTier) [ 1 .. 100 ] items Complete replacement for the selected price-list override tiers. |
{- "inherit": true
}{- "data": {
- "productId": 1,
- "variantId": 1,
- "priceListId": 1,
- "priceListName": "string",
- "currency": "string",
- "amountType": "gross",
- "inherited": true,
- "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string"
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Adds one active image to a variant whose parent product is assigned to
the resolved shop. Send JSON with mediaAssetId to reuse an existing
media-library image, or send one file as multipart/form-data to
upload and assign a new image in one request.
Existing variant images, downloads, and other media roles are
preserved. Without sortOrder, a new image is appended after the
current variant images. Repeating an existing assignment is
idempotent and returns 200; a newly created assignment returns
201. The response is the authoritative public variant detail.
Supported uploads are JPG, PNG, GIF, WebP, AVIF, and SVG. The configured media upload-size limit applies.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
| mediaAssetId required | integer >= 1 Existing active image asset to assign to the variant. |
| sortOrder | integer [ 0 .. 2147483647 ] Optional gallery order; lower values are returned first. |
{- "mediaAssetId": 91,
- "sortOrder": 20
}{- "data": {
- "id": 1,
- "active": true,
- "product": {
- "id": 1,
- "sku": "string",
- "name": "string"
}, - "sku": "string",
- "ean": "string",
- "name": "string",
- "shortName": "string",
- "shortDescription": "string",
- "manufacturerId": 1,
- "manufacturerName": "string",
- "manufacturerNumber": "string",
- "fulfillmentMode": "shipping_and_pickup",
- "isDefault": true,
- "sortOrder": 0,
- "options": [
- {
- "groupId": 1,
- "valueId": 1,
- "groupName": "string",
- "value": "string",
- "swatchColor": "#ff0000",
- "sortOrder": 0
}
], - "availability": {
- "tracked": true,
- "status": "inStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "primaryImage": {
- "id": 1,
- "url": "/media/catalog/9"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "description": "string",
- "packagingUnit": "string",
- "measurements": {
- "widthMm": "string",
- "heightMm": "string",
- "lengthMm": "string",
- "weightKg": "string",
- "salesUnit": "string",
- "measurementUnitId": 1
}, - "media": [
- {
- "id": 1,
- "url": "/media/catalog/9",
- "mimeType": "image/jpeg",
- "title": "string",
- "altText": "string",
- "width": 1,
- "height": 1,
- "variantId": 1
}
], - "seo": {
- "metaTitle": "string",
- "metaDescription": "string",
- "slug": "string",
- "canonicalPath": "/example-product"
}, - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces the variant's complete image assignment with the ordered
mediaAssetIds array. Every ID must reference a distinct active image;
at most 100 images may be supplied. The first ID becomes the primary
variant image. Repeating the same ordered array is idempotent.
Downloads and other variant media roles are preserved. An empty array removes every variant-specific image. Public variant reads then fall back to the parent product gallery; inherited product images are not copied to the variant.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
| mediaAssetIds required | Array of integers <= 100 items unique [ items [ 1 .. 2147483647 ] ] Complete ordered set of active images assigned to the variant. |
{- "mediaAssetIds": [
- 92,
- 91
]
}{- "data": {
- "id": 1,
- "active": true,
- "product": {
- "id": 1,
- "sku": "string",
- "name": "string"
}, - "sku": "string",
- "ean": "string",
- "name": "string",
- "shortName": "string",
- "shortDescription": "string",
- "manufacturerId": 1,
- "manufacturerName": "string",
- "manufacturerNumber": "string",
- "fulfillmentMode": "shipping_and_pickup",
- "isDefault": true,
- "sortOrder": 0,
- "options": [
- {
- "groupId": 1,
- "valueId": 1,
- "groupName": "string",
- "value": "string",
- "swatchColor": "#ff0000",
- "sortOrder": 0
}
], - "availability": {
- "tracked": true,
- "status": "inStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "primaryImage": {
- "id": 1,
- "url": "/media/catalog/9"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "description": "string",
- "packagingUnit": "string",
- "measurements": {
- "widthMm": "string",
- "heightMm": "string",
- "lengthMm": "string",
- "weightKg": "string",
- "salesUnit": "string",
- "measurementUnitId": 1
}, - "media": [
- {
- "id": 1,
- "url": "/media/catalog/9",
- "mimeType": "image/jpeg",
- "title": "string",
- "altText": "string",
- "width": 1,
- "height": 1,
- "variantId": 1
}
], - "seo": {
- "metaTitle": "string",
- "metaDescription": "string",
- "slug": "string",
- "canonicalPath": "/example-product"
}, - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Removes only the selected variant image assignment. The media-library asset itself and all other usages remain unchanged. Removing the last variant-specific image restores the parent product gallery fallback in public variant reads.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| mediaAssetId required | integer >= 1 Example: 91 Positive media-asset identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": {
- "id": 1,
- "active": true,
- "product": {
- "id": 1,
- "sku": "string",
- "name": "string"
}, - "sku": "string",
- "ean": "string",
- "name": "string",
- "shortName": "string",
- "shortDescription": "string",
- "manufacturerId": 1,
- "manufacturerName": "string",
- "manufacturerNumber": "string",
- "fulfillmentMode": "shipping_and_pickup",
- "isDefault": true,
- "sortOrder": 0,
- "options": [
- {
- "groupId": 1,
- "valueId": 1,
- "groupName": "string",
- "value": "string",
- "swatchColor": "#ff0000",
- "sortOrder": 0
}
], - "availability": {
- "tracked": true,
- "status": "inStock",
- "canOrder": true,
- "availableQuantity": "4.0000"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
], - "primaryImage": {
- "id": 1,
- "url": "/media/catalog/9"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "description": "string",
- "packagingUnit": "string",
- "measurements": {
- "widthMm": "string",
- "heightMm": "string",
- "lengthMm": "string",
- "weightKg": "string",
- "salesUnit": "string",
- "measurementUnitId": 1
}, - "media": [
- {
- "id": 1,
- "url": "/media/catalog/9",
- "mimeType": "image/jpeg",
- "title": "string",
- "altText": "string",
- "width": 1,
- "height": 1,
- "variantId": 1
}
], - "seo": {
- "metaTitle": "string",
- "metaDescription": "string",
- "slug": "string",
- "canonicalPath": "/example-product"
}, - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns the global variant-group registry in the resolved language, including each localized value and inactive records. The selected shop authorizes and resolves language context, but does not filter the registry. This endpoint exposes value master data, not product-specific variant combinations or assignment usage.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": [
- {
- "id": 12,
- "name": "Color",
- "sortOrder": 10,
- "active": true,
- "values": [
- {
- "id": 24,
- "value": "Red",
- "swatchColor": "#e63946",
- "sortOrder": 5,
- "active": true,
- "createdAt": "2026-08-01T08:30:00Z",
- "updatedAt": "2026-08-02T09:00:00Z"
}
], - "createdAt": "2026-08-01T08:30:00Z",
- "updatedAt": "2026-08-02T09:00:00Z"
}
], - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns categories assigned to the resolved shop. The collection
defaults to active categories; use active=false or active=all for
other states. q performs a case-insensitive substring search across
the effective localized name and description. Category and parent
names are resolved for the requested language with the shop default
language and category master data as fallbacks. Collection items
intentionally contain compact master data without descriptions, media,
or SEO metadata.
| page | integer >= 1 Default: 1 Example: page=2 One-based page number. |
| perPage | integer [ 1 .. 100 ] Default: 25 Example: perPage=50 Number of items returned per page. |
| sort | string^-?(id|name|sortOrder|updatedAt)(,-?(id|name|... Default: "sortOrder,id" Example: sort=-updatedAt,name Comma-separated category fields. Supported fields are |
| q | string <= 200 characters Examples:
Case-insensitive substring search across the effective localized category name and description. The description is searchable even though it is returned only by the detail endpoint. |
| active | string Default: "true" Enum: "true" "false" "all" Examples:
Filters by category active state. |
| updatedAfter | string <date-time> ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}... Example: updatedAfter=2026-07-01T00:00:00Z Exclusive lower boundary for |
| updatedBefore | string <date-time> ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}... Example: updatedBefore=2026-08-01T00:00:00Z Exclusive upper boundary for |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": [
- {
- "id": 12,
- "active": true,
- "name": "Running shoes",
- "parent": {
- "id": 3,
- "name": "Shoes"
}, - "sortOrder": 20,
- "defaultProductSort": "default",
- "storefrontDisplayMode": "automatic",
- "childCategoryDisplayVariant": "grid",
- "childCount": 2,
- "createdAt": "2026-07-28T09:00:00Z",
- "updatedAt": "2026-07-29T11:45:00Z"
}
], - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05",
- "pagination": {
- "page": 1,
- "perPage": 25,
- "totalItems": 1,
- "totalPages": 1
}
}, - "errors": [ ]
}Creates one shared category master record, stores its localized text
and media references in the resolved language, and assigns it to the
resolved shop by default. shopIds may assign the category to several
active shops, but every requested shop must be authorized for the API
client and the resolved shop must remain included.
Parent, order, default product sorting, and storefront display values
are stored as shop-assignment data. A parent must already be assigned
to every selected shop. New categories default to inactive. Category
names are not unique; every successful request creates a new category.
Automatic slugs are created for every requested shop. An optional
seo object may set a manual slug and localized metadata.
Authentication with the catalog:write scope is required.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
| name required | string [ 1 .. 255 ] characters Category name in the resolved request language. |
| description | string or null |
| active | boolean Default: false |
| parentCategoryId | integer or null [ 0 .. 2147483647 ] Default: 0 Zero or null creates a root category. |
| sortOrder | integer or null [ 0 .. 2147483647 ] Omit or use null to append after the selected parent in the resolved shop. |
| defaultProductSort | string Default: "default" Enum: "default" "name_asc" "price_asc" "price_desc" "newest" |
| storefrontDisplayMode | string Default: "automatic" Enum: "automatic" "subcategories_products" "products" |
| childCategoryDisplayVariant | string Default: "grid" Enum: "grid" "cards" "tiles" |
| iconMediaAssetId | integer or null [ 0 .. 2147483647 ] Zero or null leaves the localized icon unset. |
| bannerMediaAssetId | integer or null [ 0 .. 2147483647 ] Zero or null leaves the localized banner unset. |
| shopIds | Array of integers [ 1 .. 100 ] items [ items [ 1 .. 2147483647 ] ] Active API-authorized shop assignments. Defaults to the resolved shop and must include it when supplied. |
object (CatalogSeoWrite) non-empty SEO changes for the resolved language. A non-empty |
{- "name": "Running shoes",
- "description": "Shoes designed for running.",
- "active": false,
- "parentCategoryId": 3,
- "defaultProductSort": "price_asc",
- "storefrontDisplayMode": "products",
- "childCategoryDisplayVariant": "cards",
- "iconMediaAssetId": 31,
- "bannerMediaAssetId": 32,
- "seo": {
- "slug": "running-shoes",
- "metaTitle": "Running shoes"
}, - "shopIds": [
- 2,
- 4
]
}{- "data": {
- "id": 1,
- "active": true,
- "name": "string",
- "parent": {
- "id": 1,
- "name": "string"
}, - "sortOrder": 0,
- "defaultProductSort": "default",
- "storefrontDisplayMode": "automatic",
- "childCategoryDisplayVariant": "grid",
- "childCount": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "description": "string",
- "media": {
- "icon": {
- "id": 1,
- "url": "/media/catalog/31"
}, - "banner": {
- "id": 1,
- "url": "/media/catalog/31"
}
}, - "seo": {
- "metaTitle": "string",
- "metaDescription": "string",
- "slug": "string",
- "canonicalPath": "/example-product"
}, - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns one category when it is assigned to the resolved shop,
independently of its active state. The detail adds its localized
description, icon and banner references, SEO metadata, and
connector-visible category custom fields. The active response field
exposes the category state. Unassigned categories are not exposed.
| categoryId required | integer >= 1 Example: 12 Positive category identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": {
- "id": 12,
- "active": true,
- "name": "Running shoes",
- "parent": {
- "id": 3,
- "name": "Shoes"
}, - "sortOrder": 20,
- "defaultProductSort": "default",
- "storefrontDisplayMode": "automatic",
- "childCategoryDisplayVariant": "grid",
- "childCount": 2,
- "createdAt": "2026-07-28T09:00:00Z",
- "updatedAt": "2026-07-29T11:45:00Z",
- "description": "Shoes designed for running.",
- "media": {
- "icon": {
- "id": 31,
- "url": "/media/catalog/31"
}, - "banner": {
- "id": 32,
- "url": "/media/catalog/32"
}
}, - "seo": {
- "metaTitle": "Running shoes",
- "metaDescription": "Discover running shoes in our shop.",
- "slug": "running-shoes",
- "canonicalPath": "/running-shoes"
}, - "customFields": [
- {
- "setKey": "catalog",
- "setLabel": "Catalog",
- "key": "market_segment",
- "label": "Market segment",
- "type": "single_select",
- "value": "business",
- "displayValue": "Business",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Partially updates a category assigned to the resolved shop. Omitted
fields remain unchanged. Name, description, icon, and banner apply to
the resolved language; active changes global category master data;
parent, order, default product sorting, and storefront display fields
apply to the resolved shop.
shopIds replaces assignments only among active shops authorized for
the API client. Existing assignments outside that mutable set are
preserved, and the resolved shop must remain assigned. Newly assigned
shops inherit the resolved shop's current hierarchy and display
settings. A parent must be assigned to every newly affected shop and
must not create a hierarchy cycle.
Empty description clears the localized description. Zero clears an
icon, banner, or parent. Renaming updates automatic slugs across the
assigned shops authorized for the client while manual slugs remain
stable. seo.slug sets a manual slug and null resets it to automatic;
prior canonical slugs remain 301 history. Custom fields are not changed.
Repeating the same request is idempotent. Use active: false for
reversible deactivation; the public API exposes no destructive
category DELETE because hierarchy, SEO, product, and cross-shop
references must be preserved. Authentication with the catalog:write
scope is required.
| categoryId required | integer >= 1 Example: 12 Positive category identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
| name | string [ 1 .. 255 ] characters Category name in the resolved request language. |
| description | string |
| active | boolean |
| parentCategoryId | integer [ 0 .. 2147483647 ] Zero makes the category a root in the resolved shop. |
| sortOrder | integer [ 0 .. 2147483647 ] |
| defaultProductSort | string Enum: "default" "name_asc" "price_asc" "price_desc" "newest" |
| storefrontDisplayMode | string Enum: "automatic" "subcategories_products" "products" |
| childCategoryDisplayVariant | string Enum: "grid" "cards" "tiles" |
| iconMediaAssetId | integer [ 0 .. 2147483647 ] Active image media ID; zero clears the localized icon. |
| bannerMediaAssetId | integer [ 0 .. 2147483647 ] Active image media ID; zero clears the localized banner. |
| shopIds | Array of integers [ 1 .. 100 ] items [ items [ 1 .. 2147483647 ] ] Complete desired assignment list among active API-authorized shops. Must include the resolved shop. Existing hidden or inactive assignments are preserved. |
object (CatalogSeoWrite) non-empty SEO changes for the resolved language. A non-empty |
{- "name": "Running and trail shoes",
- "description": "Shoes designed for running and trail use.",
- "active": true,
- "parentCategoryId": 3,
- "sortOrder": 30,
- "defaultProductSort": "name_asc",
- "storefrontDisplayMode": "products",
- "childCategoryDisplayVariant": "tiles",
- "iconMediaAssetId": 41,
- "seo": {
- "slug": "running-and-trail-shoes",
- "metaDescription": "Running and trail shoes."
}, - "shopIds": [
- 2,
- 4
]
}{- "data": {
- "id": 1,
- "active": true,
- "name": "string",
- "parent": {
- "id": 1,
- "name": "string"
}, - "sortOrder": 0,
- "defaultProductSort": "default",
- "storefrontDisplayMode": "automatic",
- "childCategoryDisplayVariant": "grid",
- "childCount": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "description": "string",
- "media": {
- "icon": {
- "id": 1,
- "url": "/media/catalog/31"
}, - "banner": {
- "id": 1,
- "url": "/media/catalog/31"
}
}, - "seo": {
- "metaTitle": "string",
- "metaDescription": "string",
- "slug": "string",
- "canonicalPath": "/example-product"
}, - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns manufacturers assigned to the resolved shop in the resolved
language. Manufacturers are shared catalog master data; the explicit
shop assignment is the visibility boundary. The collection defaults to
active manufacturers. q performs a case-insensitive substring search
across the effective localized name and description.
updatedAt includes relevant manufacturer, selected-shop assignment,
and selected-language fallback changes. The response does not expose
assignment lists, product-reference counts, or raw translations.
| page | integer >= 1 Default: 1 Example: page=2 One-based page number. |
| perPage | integer [ 1 .. 100 ] Default: 25 Example: perPage=50 Number of items returned per page. |
| sort | string^-?(id|name|updatedAt)(,-?(id|name|updatedAt)... Default: "name,id" Example: sort=-updatedAt,name Comma-separated manufacturer fields. Supported fields are |
| q | string <= 200 characters Examples:
Case-insensitive substring search across the effective localized manufacturer name and description. |
| active | string Default: "true" Enum: "true" "false" "all" Examples:
Filters by manufacturer active state. |
| updatedAfter | string <date-time> ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}... Example: updatedAfter=2026-08-01T00:00:00Z Exclusive lower boundary for the manufacturer's effective |
| updatedBefore | string <date-time> ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}... Example: updatedBefore=2026-08-02T00:00:00Z Exclusive upper boundary for the manufacturer's effective |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": [
- {
- "id": 5,
- "name": "Example manufacturer",
- "description": "A manufacturer of example products.",
- "active": true,
- "createdAt": "2026-08-01T08:30:00Z",
- "updatedAt": "2026-08-02T09:00:00Z"
}
], - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05",
- "pagination": {
- "page": 1,
- "perPage": 25,
- "totalItems": 1,
- "totalPages": 1
}
}, - "errors": [ ]
}Creates shared manufacturer master data and its translation in the
resolved language. New manufacturers default to inactive. shopIds
defaults to the resolved shop; every submitted shop must be active,
assigned to the API client, and include the resolved shop.
logoMediaAssetId must reference an active image. customFields, when
supplied, authoritatively replaces values for active manufacturer
fields marked connector-visible in the resolved shop. Authentication
with the catalog:write scope is required.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
| name required | string [ 1 .. 255 ] characters Manufacturer name in the resolved request language. |
| description | string or null |
| active | boolean Default: false |
| shopIds | Array of integers [ 1 .. 100 ] items [ items [ 1 .. 2147483647 ] ] Active API-authorized assignments. Defaults to the resolved shop and must include it when supplied. |
| logoMediaAssetId | integer or null [ 0 .. 2147483647 ] Active image ID; zero or null leaves the logo unset. |
object (ConnectorCustomFieldWriteValues) <= 100 properties Complete replacement of all active connector-visible custom-field values for the entity in the resolved shop. Keys are technical custom- field keys. Null clears a scalar value; an empty array clears a multi-select value. Definitions not visible to connectors cannot be addressed and remain unchanged. |
{- "name": "Example manufacturer",
- "description": "A manufacturer of example products.",
- "active": false,
- "shopIds": [
- 2
], - "logoMediaAssetId": 41,
- "customFields": {
- "support_tier": "premium"
}
}{- "data": {
- "id": 1,
- "name": "string",
- "description": "string",
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "media": {
- "logo": {
- "id": 1,
- "url": "/media/catalog/41"
}
}, - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns one manufacturer when it is assigned to the resolved shop, independently of its active state. The detail adds the active manufacturer logo and connector-visible manufacturer custom fields. The logo is returned as a public catalog media reference. An unassigned manufacturer is not exposed.
| manufacturerId required | integer >= 1 Example: 5 Positive manufacturer identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": {
- "id": 5,
- "name": "Example manufacturer",
- "description": "A manufacturer of example products.",
- "active": true,
- "createdAt": "2026-08-01T08:30:00Z",
- "updatedAt": "2026-08-02T09:00:00Z",
- "media": {
- "logo": {
- "id": 41,
- "url": "/media/catalog/41"
}
}, - "customFields": [
- {
- "setKey": "catalog",
- "setLabel": "Catalog",
- "key": "support_tier",
- "label": "Support tier",
- "type": "single_select",
- "value": "premium",
- "displayValue": "Premium",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Partially updates a manufacturer assigned to the resolved shop. Name
and description apply to the resolved language; active changes shared
master data. Empty description clears the localized value. Zero clears
the logo while preserving every non-logo media usage.
shopIds authoritatively replaces assignments only among active shops
authorized for the API client. Existing hidden or inactive assignments
are preserved, and the resolved shop must remain assigned. Supplying
customFields authoritatively replaces only connector-visible values
in the resolved shop. Omitted fields remain unchanged, and identical
retries have the same result. Use active: false for reversible
deactivation; the public API exposes no destructive manufacturer
DELETE because product and cross-shop references must be preserved.
Authentication with catalog:write is required.
| manufacturerId required | integer >= 1 Example: 5 Positive manufacturer identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
| name | string [ 1 .. 255 ] characters Manufacturer name in the resolved request language. |
| description | string Empty string clears the localized description. |
| active | boolean |
| shopIds | Array of integers [ 1 .. 100 ] items [ items [ 1 .. 2147483647 ] ] Complete desired assignment set among active API-authorized shops. Must include the resolved shop. |
| logoMediaAssetId | integer [ 0 .. 2147483647 ] Active image ID; zero clears the manufacturer logo. |
object (ConnectorCustomFieldWriteValues) <= 100 properties Complete replacement of all active connector-visible custom-field values for the entity in the resolved shop. Keys are technical custom- field keys. Null clears a scalar value; an empty array clears a multi-select value. Definitions not visible to connectors cannot be addressed and remain unchanged. |
{- "name": "Updated manufacturer",
- "active": true,
- "shopIds": [
- 2,
- 4
], - "logoMediaAssetId": 51,
- "customFields": {
- "support_tier": "standard"
}
}{- "data": {
- "id": 1,
- "name": "string",
- "description": "string",
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "media": {
- "logo": {
- "id": 1,
- "url": "/media/catalog/41"
}
}, - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns the global product-marking registry in the resolved language, including inactive records so integrations can retain stable marking references. The selected shop authorizes and resolves language context, but does not filter the registry. Product responses separately expose only current active marking assignments for the selected shop.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": [
- {
- "id": 8,
- "key": "highlight",
- "name": "Highlight",
- "badgeColor": "#e63946",
- "hasDateRange": true,
- "sortOrder": 3,
- "active": true,
- "createdAt": "2026-08-01T08:30:00Z",
- "updatedAt": "2026-08-02T09:00:00Z"
}
], - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns the global product-specification definition registry in the resolved language, including its option values. Definitions and options are returned regardless of active state so integrations can retain stable references. The selected shop authorizes and resolves language context, but does not filter the registry.
Product details separately expose only assigned values whose set item, definition, and selected option remain storefront-visible and active.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": [
- {
- "id": 11,
- "key": "material",
- "name": "Material",
- "description": "Product composition.",
- "valueType": "multi_option",
- "unit": null,
- "sortOrder": 10,
- "required": false,
- "filterable": true,
- "searchable": true,
- "comparable": true,
- "storefrontVisible": true,
- "active": true,
- "options": [
- {
- "id": 21,
- "key": "cotton",
- "name": "Cotton",
- "sortOrder": 10,
- "active": true,
- "createdAt": "2026-08-01T08:30:00Z",
- "updatedAt": "2026-08-02T09:00:00Z"
}
], - "createdAt": "2026-08-01T08:30:00Z",
- "updatedAt": "2026-08-02T09:00:00Z"
}
], - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns the global measurement-unit master-data registry in the resolved language. The selected shop authorizes and resolves the language context, but does not filter the registry. Both active and inactive units are returned so integrations can preserve references to existing product data.
The response contains resolved public values only and never exposes raw translations or administrative configuration.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": [
- {
- "id": 3,
- "name": "Kilogram",
- "symbol": "kg",
- "active": true,
- "createdAt": "2026-08-01T08:30:00Z",
- "updatedAt": "2026-08-02T09:00:00Z"
}
], - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns the global delivery-time master-data registry in the resolved language. The selected shop authorizes and resolves the language context, but does not filter the registry. Each record contains its normalized unit plus the inclusive minimum and maximum delivery-time range.
The response contains resolved public values only and never exposes raw translations or administrative configuration.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": [
- {
- "id": 4,
- "name": "1 to 3 business days",
- "unit": "business_days",
- "minimum": 1,
- "maximum": 3,
- "createdAt": "2026-08-01T08:30:00Z",
- "updatedAt": "2026-08-02T09:00:00Z"
}
], - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns the current resolved price and effective quantity tiers for one product assigned to the resolved shop, regardless of its active state. Resolution applies the selected shop's base-price override, the optional global price-list override, and applicable marketing price actions. Missing price-list rows fall back to the resolved base price.
This compact response represents the main product only. It does not expose variant prices, raw price records, or price-list override rows.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": {
- "product": {
- "id": 42,
- "sku": "SKU-42"
}, - "price": {
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "19.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - {
- "minQuantity": 10,
- "amount": "17.90",
- "compareAtAmount": "24.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
]
}, - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns stored product price-list rows without resolving base-price
fallback, shop overrides, inheritance, or marketing price actions.
The selected shop authorizes product visibility only; rows are global.
Omit currency and priceListId to return all stored rows.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Optional ISO currency filter; omit it to include every currency. |
| priceListId | integer >= 1 Optional global price-list filter; omit it to include every price list. |
{- "data": [
- {
- "id": 1,
- "productId": 1,
- "priceListId": 1,
- "currency": "string",
- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Creates one global product price-list override row in the resolved currency. Price list, currency, and minimum quantity must be unique.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId required | integer >= 1 |
| minQuantity | integer >= 1 Default: 1 |
| amount required | string^[0-9]{1,12}(\.[0-9]{1,4})?$ |
| compareAtAmount | string or null^[0-9]{1,12}(\.[0-9]{1,4})?$ |
{- "priceListId": 1,
- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string"
}{- "data": {
- "id": 1,
- "productId": 1,
- "priceListId": 1,
- "currency": "string",
- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Updates mutable values while preserving row identity, price list, and currency.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| priceListPriceId required | integer >= 1 Example: 91 Positive raw price-list row ID returned by the matching product or variant endpoint. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| minQuantity | integer >= 1 |
| amount | string^[0-9]{1,12}(\.[0-9]{1,4})?$ |
| compareAtAmount | string or null^[0-9]{1,12}(\.[0-9]{1,4})?$ |
{- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string"
}{- "data": {
- "id": 1,
- "productId": 1,
- "priceListId": 1,
- "currency": "string",
- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Deletes the selected raw product price-list row without changing canonical prices or other quantity tiers.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| priceListPriceId required | integer >= 1 Example: 91 Positive raw price-list row ID returned by the matching product or variant endpoint. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
{- "data": {
- "id": 1,
- "deleted": true
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces shop-specific base-price override data for one assigned,
active, non-primary shop. The target shop is taken from the path and
must be assigned to the authenticated API client; this endpoint does
not accept a separate shopId query parameter.
price replaces all quantity-one override rows, including scheduled
or inactive rows at that threshold, while leaving higher thresholds
untouched. priceTiers completely replaces all override rows in the
selected currency and may start above quantity one. { "inherit": true } removes every
override tier in that currency and restores canonical fallback.
Exactly one of these three fields is required.
The optional currency query parameter selects an active currency;
otherwise the target shop's default currency is used. The response
contains active, non-scheduled stored tiers, not the fully resolved
effective price. Use the product prices endpoint with the target shop
context for effective and time-dependent pricing.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId required | integer [ 1 .. 2147483647 ] Examples:
Positive shop identifier assigned to the API client. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| inherit required | boolean Remove all overrides in the selected currency. Value: true |
object (ProductCreatePrice) Replace all quantity-one shop override rows. | |
Array of objects (ProductUpdatePriceTier) [ 1 .. 100 ] items Complete replacement for shop override tiers in the selected currency. |
{- "priceTiers": [
- {
- "minQuantity": 250,
- "amount": 20,
- "compareAtAmount": 25,
- "amountType": "gross"
}, - {
- "minQuantity": 500,
- "amount": 18,
- "amountType": "gross"
}
]
}{- "data": {
- "productId": 1,
- "shopId": 1,
- "currency": "string",
- "inherited": true,
- "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string",
- "amountType": "gross"
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns the current resolved price and effective quantity tiers for one concrete variant whose parent product is assigned to the resolved shop, regardless of the variant or parent-product active state. Resolution applies a variant price-list override, then a parent-product price-list override, then the resolved variant base price and applicable marketing price actions. Missing price-list rows fall back to the resolved base price.
This compact response represents the concrete variant only. It does not expose raw price records or price-list override rows.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": {
- "product": {
- "id": 42,
- "sku": "SKU-42"
}, - "variant": {
- "id": 51,
- "sku": "SKU-42-RED"
}, - "price": {
- "amount": "17.90",
- "compareAtAmount": "19.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "17.90",
- "compareAtAmount": "19.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}, - {
- "minQuantity": 10,
- "amount": "15.90",
- "compareAtAmount": "19.90",
- "currency": "CHF",
- "amountType": "gross",
- "isDiscounted": true
}
]
}, - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns only price-list rows stored for the concrete variant. It does not include inherited product rows or resolve any fallback. The parent product must be visible in the selected shop; rows remain global.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Optional ISO currency filter; omit it to include every currency. |
| priceListId | integer >= 1 Optional global price-list filter; omit it to include every price list. |
{- "data": [
- {
- "id": 1,
- "variantId": 1,
- "priceListId": 1,
- "currency": "string",
- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Creates one global variant override row without materializing product inheritance.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId required | integer >= 1 |
| minQuantity | integer >= 1 Default: 1 |
| amount required | string^[0-9]{1,12}(\.[0-9]{1,4})?$ |
| compareAtAmount | string or null^[0-9]{1,12}(\.[0-9]{1,4})?$ |
{- "priceListId": 1,
- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string"
}{- "data": {
- "id": 1,
- "variantId": 1,
- "priceListId": 1,
- "currency": "string",
- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Updates mutable values while preserving row identity, price list, and currency.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| priceListPriceId required | integer >= 1 Example: 91 Positive raw price-list row ID returned by the matching product or variant endpoint. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| minQuantity | integer >= 1 |
| amount | string^[0-9]{1,12}(\.[0-9]{1,4})?$ |
| compareAtAmount | string or null^[0-9]{1,12}(\.[0-9]{1,4})?$ |
{- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string"
}{- "data": {
- "id": 1,
- "variantId": 1,
- "priceListId": 1,
- "currency": "string",
- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Deletes the selected raw variant price-list row without changing canonical prices or other quantity tiers.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| priceListPriceId required | integer >= 1 Example: 91 Positive raw price-list row ID returned by the matching product or variant endpoint. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
{- "data": {
- "id": 1,
- "deleted": true
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces or removes variant base-price override tiers for one assigned,
active, non-primary shop and selected currency. The path shop is the
authorization boundary and must be assigned to the API client. Supply
exactly one of price, priceTiers, or inherit. The first tier may
begin above quantity one. inherit: true removes every variant shop
override in the selected currency and restores canonical variant or
parent-product fallback resolution.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| shopId required | integer [ 1 .. 2147483647 ] Examples:
Positive shop identifier assigned to the API client. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| inherit required | boolean Remove all overrides in the selected currency. Value: true |
object (ProductCreatePrice) Replace all quantity-one shop override rows. | |
Array of objects (ProductUpdatePriceTier) [ 1 .. 100 ] items Complete replacement for shop override tiers in the selected currency. |
{- "inherit": true
}{- "data": {
- "productId": 1,
- "variantId": 1,
- "shopId": 1,
- "currency": "string",
- "inherited": true,
- "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string",
- "amountType": "gross"
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces or removes quantity tiers for one variant and global price
list in the resolved currency. Price lists are global master data; the
resolved shop verifies access to the variant but does not scope the
stored override. Supply exactly one of price, priceTiers, or
inherit. Override amounts inherit the amount type from resolved base
pricing. Writing amounts therefore requires an existing resolved base
price, while inherit: true is always allowed and restores normal
base-price fallback.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| priceListId required | integer >= 1 Example: 8 Positive ID of a global price list. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| inherit required | boolean Remove all override tiers for this variant, list, and currency. Value: true |
object (VariantPriceListOverridePrice) Replace the quantity-one price-list override. | |
Array of objects (VariantPriceListOverridePriceTier) [ 1 .. 100 ] items Complete replacement for the selected price-list override tiers. |
{- "inherit": true
}{- "data": {
- "productId": 1,
- "variantId": 1,
- "priceListId": 1,
- "priceListName": "string",
- "currency": "string",
- "amountType": "gross",
- "inherited": true,
- "priceTiers": [
- {
- "minQuantity": 1,
- "amount": "string",
- "compareAtAmount": "string"
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns the global price-list catalog in the resolved language. The selected shop authorizes and resolves the language context, but does not filter the global price lists. A price list is an optional pricing override layer; this endpoint returns metadata only, never product or variant price overrides.
Use an item ID as priceListId when requesting context-sensitive
catalog pricing from product or variant endpoints.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
{- "data": [
- {
- "id": 8,
- "name": "Wholesale",
- "createdAt": "2026-08-06T08:30:00Z",
- "updatedAt": "2026-08-06T09:00:00Z"
}
], - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Creates a global optional pricing layer and stores name for the
resolved language. The selected shop supplies authorization and
language context; it does not own or filter the price list.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| name required | string [ 1 .. 120 ] characters |
{- "name": "string"
}{- "data": {
- "id": 1,
- "name": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns localized metadata for one global price list. The selected shop authorizes and resolves the language context, but does not scope price-list availability. The response does not expose translations or product and variant price overrides.
| priceListId required | integer >= 1 Example: 8 Positive ID of a global price list. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
{- "data": {
- "id": 8,
- "name": "Wholesale",
- "createdAt": "2026-08-06T08:30:00Z",
- "updatedAt": "2026-08-06T09:00:00Z"
}, - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Replaces the price-list name in the resolved language. A default-language update also changes the canonical fallback name; other languages change only their translation.
| priceListId required | integer >= 1 Example: 8 Positive ID of a global price list. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| name required | string [ 1 .. 120 ] characters |
{- "name": "string"
}{- "data": {
- "id": 1,
- "name": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Current operational inventory snapshots and controlled writes. Reservations remain lifecycle-owned by cart, checkout, payment, and order services; direct reservation CRUD is intentionally not exposed.
Returns active global physical inventory locations and identifies the
configured default. Locations are not shop-owned, so this discovery
endpoint requires inventory:read but no Commerce request context.
{- "data": [
- {
- "id": 1,
- "key": "string",
- "name": "string",
- "type": "string",
- "description": "string",
- "default": true,
- "system": true
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns the current operational inventory snapshot for one simple
product assigned to the resolved shop. The selected shop is the
product-visibility boundary; inventory locations and physical stock
are global. When locationId is omitted, the configured default
location is used. reservedQuantity includes all active reservations
for the physical product stock at the selected location.
Products with variants return 409 inventory_managed_by_variants.
Use the variant inventory endpoint for those products. Inventory
movements, internal inventory IDs, notes, and actor details are not
exposed by this snapshot endpoint.
Authentication with the inventory:read scope and Commerce request
context is required.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
| locationId | integer >= 1 Example: locationId=4 Active global inventory-location ID. Snapshot endpoints use the configured default when omitted; movement collections include all locations when omitted. |
{- "data": {
- "product": {
- "id": 42,
- "sku": "SKU-42"
}, - "location": {
- "id": 3,
- "key": "main",
- "name": "Main warehouse"
}, - "inventory": {
- "tracked": true,
- "quantityOnHand": "12.0000",
- "reservedQuantity": "2.0000",
- "availableQuantity": "10.0000",
- "backorderAllowed": false,
- "alwaysAvailable": false
}, - "observedAt": "2026-08-06T10:20:00Z"
}, - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns newest-first physical-stock movements for one shop-visible
simple product across all global locations, or one active location
selected by locationId.
reference and idempotencyKey are returned and filterable only for
API inventory adjustments authored by the currently authenticated API
client. Other movements remain visible with their quantities, location,
reason, and timestamp, but their lifecycle reference is redacted.
Internal notes, actors, fingerprints, and idempotency scopes are never
exposed. Authentication with inventory:read is required.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| page | integer >= 1 Default: 1 Example: page=2 One-based page number. |
| perPage | integer [ 1 .. 100 ] Default: 25 Example: perPage=50 Number of items returned per page. |
| locationId | integer >= 1 Example: locationId=4 Active global inventory-location ID. Snapshot endpoints use the configured default when omitted; movement collections include all locations when omitted. |
| createdAfter | string <date-time> ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}... Example: createdAfter=2026-09-01T00:00:00Z Exclusive lower UTC boundary for movement creation time. |
| createdBefore | string <date-time> ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}... Example: createdBefore=2026-10-01T00:00:00Z Exclusive upper UTC boundary; must be later than |
| reason | string [ 1 .. 50 ] characters ^[a-z][a-z0-9._-]*$ Example: reason=erp_sync Exact public technical reason; API storage prefixes are normalized away. |
| reference | string [ 1 .. 120 ] characters Example: reference=ERP-501 Exact external reference. Searches only API inventory adjustments authored by the authenticated API client. |
| idempotencyKey | string [ 1 .. 190 ] characters ^[A-Za-z0-9][A-Za-z0-9._:-]{0,189}$ Example: idempotencyKey=inventory-request-501 Exact idempotency key. Searches only API inventory adjustments authored by the authenticated API client. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": [
- {
- "id": 1,
- "location": {
- "id": 1,
- "key": "string",
- "name": "string"
}, - "quantityDelta": "string",
- "quantityBefore": "string",
- "quantityAfter": "string",
- "reason": "string",
- "reference": "string",
- "idempotencyKey": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Partially updates backorderAllowed and alwaysAvailable for the
shop-visible product inventory scope. At least one field is required;
omitted fields retain their stored values. Product flags remain
writable for products with variants because product
alwaysAvailable is the existing variant fallback.
This target-state update is idempotent without an Idempotency-Key.
It does not change stock or create an inventory movement.
Authentication with inventory:write is required.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
| backorderAllowed | boolean |
| alwaysAvailable | boolean |
{- "backorderAllowed": true,
- "alwaysAvailable": true
}{- "data": {
- "product": {
- "id": 1,
- "sku": "string"
}, - "availability": {
- "backorderAllowed": true,
- "alwaysAvailable": true
}, - "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Atomically adds quantityDelta to the physical on-hand stock of one
simple product assigned to the resolved shop. A positive delta adds
stock and a negative delta removes stock. The operation uses the
globally configured default inventory location; the selected shop is
the product-visibility boundary and does not create shop-specific
physical stock.
The resulting on-hand quantity cannot be lower than active
reservations. Products with active variants must be adjusted through
their variant inventory and return
409 inventory_managed_by_variants here.
Idempotency-Key is required and scoped to the authenticated API
client. The first successful booking returns 201. Repeating the
exact normalized request with the same key does not book another
movement and returns 200 with idempotentReplay: true. Reusing the
key for different adjustment data returns 409 idempotency_conflict.
Authentication with the inventory:write scope and Commerce request
context is required.
| productId required | integer [ 1 .. 2147483647 ] Example: 42 Positive product identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
| Idempotency-Key required | string [ 1 .. 190 ] characters ^[A-Za-z0-9][A-Za-z0-9._:-]{0,189}$ Example: inventory-request-501 Caller-generated identifier that makes one mutation safe to retry. Keys are scoped to the authenticated API client and must not be reused for different normalized request data. |
| quantityDelta required | number decimal places <= 4 [ -1000000000000000 .. 1000000000000000 ] Signed amount added to the current physical on-hand stock. |
| reason required | string [ 1 .. 35 ] characters ^[a-z][a-z0-9._-]{0,34}$ Technical reason key stored with the inventory movement. |
| reference | string <= 120 characters Optional external reference such as an ERP transaction ID. |
| note | string <= 1000 characters Optional human-readable audit note. |
{- "quantityDelta": -2,
- "reason": "erp_sync",
- "reference": "ERP-501",
- "note": "Warehouse correction"
}{- "data": {
- "product": {
- "id": 1,
- "sku": "string"
}, - "location": {
- "id": 1,
- "key": "string",
- "name": "string"
}, - "adjustment": {
- "quantityDelta": "string",
- "quantityBefore": "string",
- "quantityAfter": "string",
- "reason": "string",
- "reference": "string",
- "note": "string",
- "idempotentReplay": true
}, - "inventory": {
- "tracked": true,
- "quantityOnHand": "string",
- "reservedQuantity": "string",
- "availableQuantity": "string",
- "backorderAllowed": true,
- "alwaysAvailable": true
}, - "observedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns the current operational inventory snapshot for one product
variant whose parent product is assigned to the resolved shop. The
selected shop is the product-visibility boundary; the inventory
locations and physical stock are global. When locationId is omitted,
the configured default location is used. reservedQuantity includes
all active reservations for that physical variant stock at the
selected location.
Inventory movements, internal inventory IDs, notes, and actor details
are not exposed by this snapshot endpoint. Authentication with the
inventory:read scope and Commerce request context is required.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
| locationId | integer >= 1 Example: locationId=4 Active global inventory-location ID. Snapshot endpoints use the configured default when omitted; movement collections include all locations when omitted. |
{- "data": {
- "product": {
- "id": 42,
- "sku": "SKU-42"
}, - "variant": {
- "id": 51,
- "sku": "SKU-42-RED"
}, - "location": {
- "id": 3,
- "key": "main",
- "name": "Main warehouse"
}, - "inventory": {
- "tracked": true,
- "quantityOnHand": "8.0000",
- "reservedQuantity": "3.0000",
- "availableQuantity": "5.0000",
- "backorderAllowed": false,
- "alwaysAvailable": false
}, - "observedAt": "2026-08-06T10:20:00Z"
}, - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns newest-first physical-stock movements for one product variant whose parent product is visible in the selected shop. The location, pagination, timestamp, reason, reference, idempotency, redaction, and API-client ownership rules match the product movement endpoint.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| page | integer >= 1 Default: 1 Example: page=2 One-based page number. |
| perPage | integer [ 1 .. 100 ] Default: 25 Example: perPage=50 Number of items returned per page. |
| locationId | integer >= 1 Example: locationId=4 Active global inventory-location ID. Snapshot endpoints use the configured default when omitted; movement collections include all locations when omitted. |
| createdAfter | string <date-time> ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}... Example: createdAfter=2026-09-01T00:00:00Z Exclusive lower UTC boundary for movement creation time. |
| createdBefore | string <date-time> ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}... Example: createdBefore=2026-10-01T00:00:00Z Exclusive upper UTC boundary; must be later than |
| reason | string [ 1 .. 50 ] characters ^[a-z][a-z0-9._-]*$ Example: reason=erp_sync Exact public technical reason; API storage prefixes are normalized away. |
| reference | string [ 1 .. 120 ] characters Example: reference=ERP-501 Exact external reference. Searches only API inventory adjustments authored by the authenticated API client. |
| idempotencyKey | string [ 1 .. 190 ] characters ^[A-Za-z0-9][A-Za-z0-9._:-]{0,189}$ Example: idempotencyKey=inventory-request-501 Exact idempotency key. Searches only API inventory adjustments authored by the authenticated API client. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": [
- {
- "id": 1,
- "location": {
- "id": 1,
- "key": "string",
- "name": "string"
}, - "quantityDelta": "string",
- "quantityBefore": "string",
- "quantityAfter": "string",
- "reason": "string",
- "reference": "string",
- "idempotencyKey": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Partially updates backorderAllowed and alwaysAvailable for the
exact shop-visible variant inventory scope. At least one field is
required; omitted fields retain their stored values. The target-state
update is idempotent without an Idempotency-Key, does not change
stock, and does not create an inventory movement. Authentication with
inventory:write is required.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
| backorderAllowed | boolean |
| alwaysAvailable | boolean |
{- "backorderAllowed": true,
- "alwaysAvailable": true
}{- "data": {
- "product": {
- "id": 1,
- "sku": "string"
}, - "variant": {
- "id": 1,
- "sku": "string"
}, - "availability": {
- "backorderAllowed": true,
- "alwaysAvailable": true
}, - "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Atomically adds quantityDelta to the physical on-hand stock of one
product variant whose parent product is assigned to the resolved shop.
A positive delta adds stock and a negative delta removes stock. The
operation uses the globally configured default inventory location; the
selected shop is the product-visibility boundary and does not create
shop-specific physical stock.
The resulting on-hand quantity cannot be lower than active reservations for this exact variant inventory scope.
Idempotency-Key is required and scoped to the authenticated API
client. The first successful booking returns 201. Repeating the exact
normalized request with the same key does not book another movement and
returns 200 with idempotentReplay: true. Reusing the key for
different adjustment data returns 409 idempotency_conflict.
Authentication with the inventory:write scope and Commerce request
context is required.
| variantId required | integer >= 1 Example: 51 Positive product variant identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
| Idempotency-Key required | string [ 1 .. 190 ] characters ^[A-Za-z0-9][A-Za-z0-9._:-]{0,189}$ Example: inventory-request-501 Caller-generated identifier that makes one mutation safe to retry. Keys are scoped to the authenticated API client and must not be reused for different normalized request data. |
| quantityDelta required | number decimal places <= 4 [ -1000000000000000 .. 1000000000000000 ] Signed amount added to the current physical on-hand stock. |
| reason required | string [ 1 .. 35 ] characters ^[a-z][a-z0-9._-]{0,34}$ Technical reason key stored with the inventory movement. |
| reference | string <= 120 characters Optional external reference such as an ERP transaction ID. |
| note | string <= 1000 characters Optional human-readable audit note. |
{- "quantityDelta": 3,
- "reason": "stock_count",
- "reference": "COUNT-9",
- "note": "Warehouse count correction"
}{- "data": {
- "product": {
- "id": 1,
- "sku": "string"
}, - "variant": {
- "id": 1,
- "sku": "string"
}, - "location": {
- "id": 1,
- "key": "string",
- "name": "string"
}, - "adjustment": {
- "quantityDelta": "string",
- "quantityBefore": "string",
- "quantityAfter": "string",
- "reason": "string",
- "reference": "string",
- "note": "string",
- "idempotentReplay": true
}, - "inventory": {
- "tracked": true,
- "quantityOnHand": "string",
- "reservedQuantity": "string",
- "availableQuantity": "string",
- "backorderAllowed": true,
- "alwaysAvailable": true
}, - "observedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Creates a new empty cart in the resolved shop, language, and currency context and returns its opaque public token plus the authoritative cart representation. Every successful request creates a fresh cart; an existing customer cart is never resumed implicitly.
The optional customer context is validated against the resolved shop.
Supplying companyId also requires a company membership that permits
ordering. Cart pricing follows the selected customer or company's
customer-group context and the canonical base-price fallback. An
explicit priceListId query parameter is therefore not supported.
Authentication with the checkout:write scope is required. Numeric
internal cart IDs are never exposed.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| customerId | integer or null >= 1 Optional active non-guest customer linked to the resolved shop. |
| companyId | integer or null >= 1 Optional active company for which the selected customer may order. |
| guestEmail | string or null <email> <= 255 characters Optional guest email; it cannot be combined with customerId. |
{ }{- "data": {
- "cartToken": "5f90a78d66144eeaa3fe4d3fb6736f80",
- "status": "active",
- "checkoutState": "cart",
- "customer": {
- "mode": "guest",
- "id": null,
- "companyId": null,
- "guestEmail": null
}, - "context": {
- "shopId": 2,
- "language": "de",
- "currency": "CHF",
- "priceListId": null,
- "amountType": "gross"
}, - "items": [ ],
- "addresses": {
- "billing": null,
- "shipping": null
}, - "selection": {
- "shippingMethodId": null,
- "paymentMethodId": null,
- "couponCodes": [ ],
- "voucherCodes": [ ]
}, - "summary": {
- "itemCount": 0,
- "quantity": "0",
- "currency": "CHF",
- "amountType": "gross",
- "subtotal": {
- "hasValue": true,
- "amount": "0",
- "netAmount": "0",
- "grossAmount": "0",
- "currency": "CHF",
- "amountType": "gross"
}, - "discounts": {
- "hasValue": false,
- "amount": "0",
- "netAmount": "0",
- "grossAmount": "0",
- "currency": "CHF",
- "amountType": "gross"
}, - "surcharges": {
- "hasValue": false,
- "amount": "0",
- "netAmount": "0",
- "grossAmount": "0",
- "currency": "CHF",
- "amountType": "gross"
}, - "shipping": {
- "hasValue": false,
- "amount": "0",
- "netAmount": "0",
- "grossAmount": "0",
- "currency": "CHF",
- "amountType": "gross"
}, - "payment": {
- "hasValue": false,
- "amount": "0",
- "netAmount": "0",
- "grossAmount": "0",
- "currency": "CHF",
- "amountType": "gross"
}, - "rounding": {
- "hasValue": false,
- "amount": "0",
- "netAmount": "0",
- "grossAmount": "0",
- "currency": "CHF",
- "amountType": "gross"
}, - "tax": {
- "amount": "0",
- "breakdown": [ ]
}, - "totals": {
- "net": "0",
- "gross": "0",
- "grandTotal": "0"
}, - "adjustments": [ ],
- "hasPricingGaps": false
}, - "createdAt": "2026-09-14T10:00:00Z",
- "updatedAt": "2026-09-14T10:00:00Z",
- "lastActivityAt": "2026-09-14T10:00:00Z"
}, - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns the authoritative persisted state for the cart selected by its opaque public token. The lookup is constrained to the resolved shop; a token from another shop is indistinguishable from an unknown token.
This operation is side-effect free. It does not update cart activity, refresh stored line prices, or reserve inventory. It does project the current shipping, payment, adjustment, tax, and grand-total breakdown through the shared checkout domain. Use the explicit refresh mutation when stored line prices must first be recalculated.
Authentication with the checkout:write scope is required. Only the
optional shopId commerce parameter is accepted. A cart's stored
language, currency, and pricing context cannot be overridden while
reading it.
| cartToken required | string [ 1 .. 255 ] characters Example: 5f90a78d66144eeaa3fe4d3fb6736f80 Opaque, unguessable public cart identifier returned when the cart is created. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "cartToken": "stringstringstringstringstringst",
- "status": "string",
- "checkoutState": "string",
- "customer": {
- "mode": "guest",
- "id": 1,
- "companyId": 1,
- "guestEmail": "user@example.com"
}, - "context": {
- "shopId": 1,
- "language": "string",
- "currency": "string",
- "priceListId": 1,
- "amountType": "string"
}, - "items": [
- {
- "id": 1,
- "type": "string",
- "lineKey": "string",
- "productId": 1,
- "variantId": 1,
- "sku": "string",
- "name": "string",
- "configuration": { },
- "quantity": "string",
- "unitPrice": "string",
- "lineTotal": "string",
- "currency": "string",
- "amountType": "string",
- "pricingStatus": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}
], - "addresses": {
- "billing": {
- "sourceType": "string",
- "customerAddressId": 1,
- "companyAddressId": 1,
- "salutationId": 1,
- "titleId": 1,
- "company": "string",
- "companyAddition": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryId": 1,
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}, - "shipping": {
- "sourceType": "string",
- "customerAddressId": 1,
- "companyAddressId": 1,
- "salutationId": 1,
- "titleId": 1,
- "company": "string",
- "companyAddition": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryId": 1,
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}
}, - "selection": {
- "shippingMethodId": 1,
- "paymentMethodId": 1,
- "couponCodes": [
- "string"
], - "voucherCodes": [
- "string"
]
}, - "summary": {
- "itemCount": 0,
- "quantity": "string",
- "currency": "string",
- "amountType": "string",
- "subtotal": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "discounts": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "surcharges": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "shipping": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "payment": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "rounding": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "tax": {
- "amount": "string",
- "breakdown": [
- {
- "taxRateId": 1,
- "name": "string",
- "rate": "string",
- "amount": "string"
}
]
}, - "totals": {
- "net": "string",
- "gross": "string",
- "grandTotal": "string"
}, - "adjustments": [
- {
- "sourceType": "string",
- "triggerType": "string",
- "code": "string",
- "label": "string",
- "direction": "increase",
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "taxAmount": "string",
- "currency": "string",
- "amountType": "string"
}
], - "hasPricingGaps": true
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "lastActivityAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Resolves the shipping and payment methods that are currently available for the cart's persisted shop, customer, currency, items, addresses, and checkout selection. Shipping options contain the authoritative zone/rate result. Payment options contain the authoritative fee or discount that would apply to that method.
Method IDs in this response are the public global IDs accepted by the shipping-method and payment-method mutation endpoints. Internal shop assignment and rate IDs are not exposed. The cart's stored language, currency, and pricing context cannot be overridden.
| cartToken required | string [ 1 .. 255 ] characters Example: 5f90a78d66144eeaa3fe4d3fb6736f80 Opaque, unguessable public cart identifier returned when the cart is created. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "cartToken": "string",
- "shipping": {
- "requiresPickup": true,
- "hasOptions": true,
- "hasSelection": true,
- "hasValidSelection": true,
- "selectedShippingMethodId": 1,
- "options": [
- {
- "shippingMethodId": 1,
- "technicalKey": "string",
- "providerKey": "string",
- "providerMethodKey": "string",
- "name": "string",
- "description": "string",
- "deliveryTimeName": "string",
- "isPickupMethod": true,
- "isSelected": true,
- "rate": {
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string",
- "taxRate": "string",
- "taxRateName": "string",
- "rateType": "string",
- "freeFromApplied": true
}
}
]
}, - "payment": {
- "hasOptions": true,
- "hasSelection": true,
- "hasValidSelection": true,
- "selectedPaymentMethodId": 1,
- "options": [
- {
- "paymentMethodId": 1,
- "technicalKey": "string",
- "providerKey": "string",
- "providerMethodKey": "string",
- "name": "string",
- "description": "string",
- "logoUrl": "string",
- "isSelected": true,
- "fee": {
- "hasAdjustment": true,
- "direction": "increase",
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "taxAmount": "string",
- "taxBreakdown": [
- { }
]
}
}
]
}, - "canContinueToReview": true
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Explicitly reprices every cart line from the cart's persisted customer, currency, price-list, and shop context, then reevaluates the checkout options, codes, adjustments, taxes, and eligibility through the shared checkout domain. The returned cart is the newly persisted authoritative state. Use the checkout-options operation to retrieve the refreshed method availability and resolved rates.
This endpoint accepts no request body. It exists so external channels can deliberately refresh a long-lived cart before displaying totals or submitting it instead of relying on side effects of a GET request.
| cartToken required | string [ 1 .. 255 ] characters Example: 5f90a78d66144eeaa3fe4d3fb6736f80 Opaque, unguessable public cart identifier returned when the cart is created. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "cartToken": "stringstringstringstringstringst",
- "status": "string",
- "checkoutState": "string",
- "customer": {
- "mode": "guest",
- "id": 1,
- "companyId": 1,
- "guestEmail": "user@example.com"
}, - "context": {
- "shopId": 1,
- "language": "string",
- "currency": "string",
- "priceListId": 1,
- "amountType": "string"
}, - "items": [
- {
- "id": 1,
- "type": "string",
- "lineKey": "string",
- "productId": 1,
- "variantId": 1,
- "sku": "string",
- "name": "string",
- "configuration": { },
- "quantity": "string",
- "unitPrice": "string",
- "lineTotal": "string",
- "currency": "string",
- "amountType": "string",
- "pricingStatus": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}
], - "addresses": {
- "billing": {
- "sourceType": "string",
- "customerAddressId": 1,
- "companyAddressId": 1,
- "salutationId": 1,
- "titleId": 1,
- "company": "string",
- "companyAddition": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryId": 1,
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}, - "shipping": {
- "sourceType": "string",
- "customerAddressId": 1,
- "companyAddressId": 1,
- "salutationId": 1,
- "titleId": 1,
- "company": "string",
- "companyAddition": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryId": 1,
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}
}, - "selection": {
- "shippingMethodId": 1,
- "paymentMethodId": 1,
- "couponCodes": [
- "string"
], - "voucherCodes": [
- "string"
]
}, - "summary": {
- "itemCount": 0,
- "quantity": "string",
- "currency": "string",
- "amountType": "string",
- "subtotal": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "discounts": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "surcharges": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "shipping": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "payment": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "rounding": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "tax": {
- "amount": "string",
- "breakdown": [
- {
- "taxRateId": 1,
- "name": "string",
- "rate": "string",
- "amount": "string"
}
]
}, - "totals": {
- "net": "string",
- "gross": "string",
- "grandTotal": "string"
}, - "adjustments": [
- {
- "sourceType": "string",
- "triggerType": "string",
- "code": "string",
- "label": "string",
- "direction": "increase",
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "taxAmount": "string",
- "currency": "string",
- "amountType": "string"
}
], - "hasPricingGaps": true
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "lastActivityAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Adds a positive quantity of one shop-assigned active product or
variant to an active cart and returns the complete authoritative cart
representation. A product with active variants requires a concrete
variantId. The quantity is the amount to add. When the same
unconfigured product or variant line already exists, its quantity is
incremented instead of creating a duplicate line.
The cart's stored customer, language, currency, price-list, and amount type context remains authoritative. The mutation validates the added line's minimum order quantity and inventory, resolves its price, and refreshes all cart line prices and the subtotal through the existing cart domain service. Clients must not calculate prices or totals.
The optional configuration object contains raw customer input keyed
by the public technical field key. NetSeller passes those values
through the registered core and plugin configuration contributors;
only their validated, server-built snapshot, display data, line key,
and pricing contribution are persisted. Clients cannot submit stored
snapshots or trusted pricing metadata directly.
Authentication with the checkout:write scope is required. Only the
optional shopId commerce parameter is accepted; it must resolve to
the cart's authorized shop boundary.
| cartToken required | string [ 1 .. 255 ] characters Example: 5f90a78d66144eeaa3fe4d3fb6736f80 Opaque, unguessable public cart identifier returned when the cart is created. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| productId required | integer >= 1 Product assigned to the cart's resolved shop. |
| variantId | integer or null >= 1 Active variant belonging to productId; required when the product has active variants. |
| quantity | number decimal places <= 4 ( 0 .. 99999999.9999 ] Default: 1 Positive amount to add to the existing cart line quantity. |
object <= 100 properties Raw line-item input keyed by technical field key, for example
|
{- "productId": 42,
- "quantity": 2
}{- "data": {
- "cartToken": "stringstringstringstringstringst",
- "status": "string",
- "checkoutState": "string",
- "customer": {
- "mode": "guest",
- "id": 1,
- "companyId": 1,
- "guestEmail": "user@example.com"
}, - "context": {
- "shopId": 1,
- "language": "string",
- "currency": "string",
- "priceListId": 1,
- "amountType": "string"
}, - "items": [
- {
- "id": 1,
- "type": "string",
- "lineKey": "string",
- "productId": 1,
- "variantId": 1,
- "sku": "string",
- "name": "string",
- "configuration": { },
- "quantity": "string",
- "unitPrice": "string",
- "lineTotal": "string",
- "currency": "string",
- "amountType": "string",
- "pricingStatus": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}
], - "addresses": {
- "billing": {
- "sourceType": "string",
- "customerAddressId": 1,
- "companyAddressId": 1,
- "salutationId": 1,
- "titleId": 1,
- "company": "string",
- "companyAddition": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryId": 1,
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}, - "shipping": {
- "sourceType": "string",
- "customerAddressId": 1,
- "companyAddressId": 1,
- "salutationId": 1,
- "titleId": 1,
- "company": "string",
- "companyAddition": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryId": 1,
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}
}, - "selection": {
- "shippingMethodId": 1,
- "paymentMethodId": 1,
- "couponCodes": [
- "string"
], - "voucherCodes": [
- "string"
]
}, - "summary": {
- "itemCount": 0,
- "quantity": "string",
- "currency": "string",
- "amountType": "string",
- "subtotal": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "discounts": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "surcharges": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "shipping": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "payment": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "rounding": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "tax": {
- "amount": "string",
- "breakdown": [
- {
- "taxRateId": 1,
- "name": "string",
- "rate": "string",
- "amount": "string"
}
]
}, - "totals": {
- "net": "string",
- "gross": "string",
- "grandTotal": "string"
}, - "adjustments": [
- {
- "sourceType": "string",
- "triggerType": "string",
- "code": "string",
- "label": "string",
- "direction": "increase",
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "taxAmount": "string",
- "currency": "string",
- "amountType": "string"
}
], - "hasPricingGaps": true
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "lastActivityAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces the absolute quantity of one existing line in an active cart and returns the complete authoritative cart representation. This is not an increment operation. A quantity of zero does not remove the line; clients use the separate DELETE operation for removal.
The line keeps its product, variant, and trusted configuration snapshot. The mutation validates minimum order quantity and inventory, resolves the line price from the cart's stored pricing context, and refreshes all cart line prices and the subtotal through the existing cart domain service. Clients must not calculate prices or totals.
Authentication with the checkout:write scope is required. Only the
optional shopId commerce parameter is accepted; it must resolve to
the cart's authorized shop boundary. An item belonging to another cart
is indistinguishable from an unknown item.
| cartToken required | string [ 1 .. 255 ] characters Example: 5f90a78d66144eeaa3fe4d3fb6736f80 Opaque, unguessable public cart identifier returned when the cart is created. |
| itemId required | integer >= 1 Example: 501 Positive identifier of an existing line in the selected cart. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| quantity required | number decimal places <= 4 ( 0 .. 99999999.9999 ] New absolute line quantity; use DELETE to remove the item. |
{- "quantity": 4.5
}{- "data": {
- "cartToken": "stringstringstringstringstringst",
- "status": "string",
- "checkoutState": "string",
- "customer": {
- "mode": "guest",
- "id": 1,
- "companyId": 1,
- "guestEmail": "user@example.com"
}, - "context": {
- "shopId": 1,
- "language": "string",
- "currency": "string",
- "priceListId": 1,
- "amountType": "string"
}, - "items": [
- {
- "id": 1,
- "type": "string",
- "lineKey": "string",
- "productId": 1,
- "variantId": 1,
- "sku": "string",
- "name": "string",
- "configuration": { },
- "quantity": "string",
- "unitPrice": "string",
- "lineTotal": "string",
- "currency": "string",
- "amountType": "string",
- "pricingStatus": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}
], - "addresses": {
- "billing": {
- "sourceType": "string",
- "customerAddressId": 1,
- "companyAddressId": 1,
- "salutationId": 1,
- "titleId": 1,
- "company": "string",
- "companyAddition": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryId": 1,
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}, - "shipping": {
- "sourceType": "string",
- "customerAddressId": 1,
- "companyAddressId": 1,
- "salutationId": 1,
- "titleId": 1,
- "company": "string",
- "companyAddition": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryId": 1,
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}
}, - "selection": {
- "shippingMethodId": 1,
- "paymentMethodId": 1,
- "couponCodes": [
- "string"
], - "voucherCodes": [
- "string"
]
}, - "summary": {
- "itemCount": 0,
- "quantity": "string",
- "currency": "string",
- "amountType": "string",
- "subtotal": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "discounts": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "surcharges": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "shipping": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "payment": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "rounding": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "tax": {
- "amount": "string",
- "breakdown": [
- {
- "taxRateId": 1,
- "name": "string",
- "rate": "string",
- "amount": "string"
}
]
}, - "totals": {
- "net": "string",
- "gross": "string",
- "grandTotal": "string"
}, - "adjustments": [
- {
- "sourceType": "string",
- "triggerType": "string",
- "code": "string",
- "label": "string",
- "direction": "increase",
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "taxAmount": "string",
- "currency": "string",
- "amountType": "string"
}
], - "hasPricingGaps": true
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "lastActivityAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Removes one existing line from an active cart and returns the complete authoritative cart representation. The cart domain refreshes the remaining line prices and subtotal. Clients must use the returned cart instead of calculating totals locally.
Authentication with the checkout:write scope is required. The
request has no body and accepts only the optional shopId commerce
parameter. It must resolve to the cart's authorized shop boundary. An
item belonging to another cart is indistinguishable from an unknown
item. Repeating a successful removal therefore returns
cart_item_not_found.
| cartToken required | string [ 1 .. 255 ] characters Example: 5f90a78d66144eeaa3fe4d3fb6736f80 Opaque, unguessable public cart identifier returned when the cart is created. |
| itemId required | integer >= 1 Example: 501 Positive identifier of an existing line in the selected cart. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "cartToken": "stringstringstringstringstringst",
- "status": "string",
- "checkoutState": "string",
- "customer": {
- "mode": "guest",
- "id": 1,
- "companyId": 1,
- "guestEmail": "user@example.com"
}, - "context": {
- "shopId": 1,
- "language": "string",
- "currency": "string",
- "priceListId": 1,
- "amountType": "string"
}, - "items": [
- {
- "id": 1,
- "type": "string",
- "lineKey": "string",
- "productId": 1,
- "variantId": 1,
- "sku": "string",
- "name": "string",
- "configuration": { },
- "quantity": "string",
- "unitPrice": "string",
- "lineTotal": "string",
- "currency": "string",
- "amountType": "string",
- "pricingStatus": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}
], - "addresses": {
- "billing": {
- "sourceType": "string",
- "customerAddressId": 1,
- "companyAddressId": 1,
- "salutationId": 1,
- "titleId": 1,
- "company": "string",
- "companyAddition": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryId": 1,
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}, - "shipping": {
- "sourceType": "string",
- "customerAddressId": 1,
- "companyAddressId": 1,
- "salutationId": 1,
- "titleId": 1,
- "company": "string",
- "companyAddition": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryId": 1,
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}
}, - "selection": {
- "shippingMethodId": 1,
- "paymentMethodId": 1,
- "couponCodes": [
- "string"
], - "voucherCodes": [
- "string"
]
}, - "summary": {
- "itemCount": 0,
- "quantity": "string",
- "currency": "string",
- "amountType": "string",
- "subtotal": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "discounts": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "surcharges": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "shipping": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "payment": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "rounding": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "tax": {
- "amount": "string",
- "breakdown": [
- {
- "taxRateId": 1,
- "name": "string",
- "rate": "string",
- "amount": "string"
}
]
}, - "totals": {
- "net": "string",
- "gross": "string",
- "grandTotal": "string"
}, - "adjustments": [
- {
- "sourceType": "string",
- "triggerType": "string",
- "code": "string",
- "label": "string",
- "direction": "increase",
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "taxAmount": "string",
- "currency": "string",
- "amountType": "string"
}
], - "hasPricingGaps": true
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "lastActivityAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Creates or replaces the cart's billing or shipping address snapshot and returns the complete authoritative cart representation. Billing and shipping addresses are independent; this operation does not copy one role to the other.
Only manual address fields are accepted. Internal source types and
stored customer or company address references cannot be supplied. The
country, salutation, and optional title are validated against active
master data using the cart's stored language context. A country may be
identified by countryId or countryIsoCode; when both are supplied,
they must refer to the same country.
customFields contains raw values keyed by technical field key. Only
active, storefront-editable definitions assigned to the selected shop,
person/company address type, and billing/shipping role are accepted.
Required and typed values follow the existing storefront checkout rules.
Authentication with the checkout:write scope is required. Only the
optional shopId commerce parameter is accepted; it must resolve to
the cart's authorized shop boundary. Only active carts can be changed.
| cartToken required | string [ 1 .. 255 ] characters Example: 5f90a78d66144eeaa3fe4d3fb6736f80 Opaque, unguessable public cart identifier returned when the cart is created. |
| addressRole required | string Enum: "billing" "shipping" Example: billing Checkout address role to create or replace. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| countryId required | integer >= 1 Active country; either this field or countryIsoCode is required. |
| salutationId required | integer >= 1 Active salutation resolved in the cart's stored language. |
| titleId | integer or null >= 1 Optional active title. |
| company | string or null <= 255 characters |
| companyAddition | string or null <= 255 characters |
| firstName required | string [ 1 .. 120 ] characters |
| lastName required | string [ 1 .. 120 ] characters |
| street required | string [ 1 .. 255 ] characters |
| streetNumber | string or null <= 40 characters |
| addressLine2 | string or null <= 255 characters |
| postcode required | string [ 1 .. 40 ] characters |
| city required | string [ 1 .. 120 ] characters |
| state | string or null <= 120 characters |
| countryIsoCode | string^[A-Za-z]{2}$ Two-letter ISO country code; normalized to uppercase. |
| phone | string or null <= 80 characters |
| mobile | string or null <= 80 characters |
object <= 100 properties Raw storefront-editable address custom-field values keyed by technical field key. |
{- "salutationId": 1,
- "firstName": "Regula",
- "lastName": "Muster",
- "street": "Marktgasse",
- "streetNumber": "1",
- "postcode": "3000",
- "city": "Bern",
- "countryIsoCode": "CH",
- "customFields": {
- "delivery_note": "Side door"
}
}{- "data": {
- "cartToken": "stringstringstringstringstringst",
- "status": "string",
- "checkoutState": "string",
- "customer": {
- "mode": "guest",
- "id": 1,
- "companyId": 1,
- "guestEmail": "user@example.com"
}, - "context": {
- "shopId": 1,
- "language": "string",
- "currency": "string",
- "priceListId": 1,
- "amountType": "string"
}, - "items": [
- {
- "id": 1,
- "type": "string",
- "lineKey": "string",
- "productId": 1,
- "variantId": 1,
- "sku": "string",
- "name": "string",
- "configuration": { },
- "quantity": "string",
- "unitPrice": "string",
- "lineTotal": "string",
- "currency": "string",
- "amountType": "string",
- "pricingStatus": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}
], - "addresses": {
- "billing": {
- "sourceType": "string",
- "customerAddressId": 1,
- "companyAddressId": 1,
- "salutationId": 1,
- "titleId": 1,
- "company": "string",
- "companyAddition": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryId": 1,
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}, - "shipping": {
- "sourceType": "string",
- "customerAddressId": 1,
- "companyAddressId": 1,
- "salutationId": 1,
- "titleId": 1,
- "company": "string",
- "companyAddition": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryId": 1,
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}
}, - "selection": {
- "shippingMethodId": 1,
- "paymentMethodId": 1,
- "couponCodes": [
- "string"
], - "voucherCodes": [
- "string"
]
}, - "summary": {
- "itemCount": 0,
- "quantity": "string",
- "currency": "string",
- "amountType": "string",
- "subtotal": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "discounts": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "surcharges": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "shipping": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "payment": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "rounding": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "tax": {
- "amount": "string",
- "breakdown": [
- {
- "taxRateId": 1,
- "name": "string",
- "rate": "string",
- "amount": "string"
}
]
}, - "totals": {
- "net": "string",
- "gross": "string",
- "grandTotal": "string"
}, - "adjustments": [
- {
- "sourceType": "string",
- "triggerType": "string",
- "code": "string",
- "label": "string",
- "direction": "increase",
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "taxAmount": "string",
- "currency": "string",
- "amountType": "string"
}
], - "hasPricingGaps": true
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "lastActivityAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Removes the cart's billing or shipping address snapshot and returns the complete authoritative cart representation. The two roles are independent, so deleting one does not modify the other. Custom-field values belonging to the deleted role are removed atomically with the address.
The operation is idempotent. When the selected address is already absent, the unchanged authoritative cart is returned successfully. The request has no body.
Authentication with the checkout:write scope is required. Only the
optional shopId commerce parameter is accepted; it must resolve to
the cart's authorized shop boundary. Only active carts can be changed.
| cartToken required | string [ 1 .. 255 ] characters Example: 5f90a78d66144eeaa3fe4d3fb6736f80 Opaque, unguessable public cart identifier returned when the cart is created. |
| addressRole required | string Enum: "billing" "shipping" Example: billing Checkout address role to create or replace. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "cartToken": "stringstringstringstringstringst",
- "status": "string",
- "checkoutState": "string",
- "customer": {
- "mode": "guest",
- "id": 1,
- "companyId": 1,
- "guestEmail": "user@example.com"
}, - "context": {
- "shopId": 1,
- "language": "string",
- "currency": "string",
- "priceListId": 1,
- "amountType": "string"
}, - "items": [
- {
- "id": 1,
- "type": "string",
- "lineKey": "string",
- "productId": 1,
- "variantId": 1,
- "sku": "string",
- "name": "string",
- "configuration": { },
- "quantity": "string",
- "unitPrice": "string",
- "lineTotal": "string",
- "currency": "string",
- "amountType": "string",
- "pricingStatus": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}
], - "addresses": {
- "billing": {
- "sourceType": "string",
- "customerAddressId": 1,
- "companyAddressId": 1,
- "salutationId": 1,
- "titleId": 1,
- "company": "string",
- "companyAddition": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryId": 1,
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}, - "shipping": {
- "sourceType": "string",
- "customerAddressId": 1,
- "companyAddressId": 1,
- "salutationId": 1,
- "titleId": 1,
- "company": "string",
- "companyAddition": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryId": 1,
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}
}, - "selection": {
- "shippingMethodId": 1,
- "paymentMethodId": 1,
- "couponCodes": [
- "string"
], - "voucherCodes": [
- "string"
]
}, - "summary": {
- "itemCount": 0,
- "quantity": "string",
- "currency": "string",
- "amountType": "string",
- "subtotal": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "discounts": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "surcharges": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "shipping": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "payment": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "rounding": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "tax": {
- "amount": "string",
- "breakdown": [
- {
- "taxRateId": 1,
- "name": "string",
- "rate": "string",
- "amount": "string"
}
]
}, - "totals": {
- "net": "string",
- "gross": "string",
- "grandTotal": "string"
}, - "adjustments": [
- {
- "sourceType": "string",
- "triggerType": "string",
- "code": "string",
- "label": "string",
- "direction": "increase",
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "taxAmount": "string",
- "currency": "string",
- "amountType": "string"
}
], - "hasPricingGaps": true
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "lastActivityAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Selects a shipping method and returns the complete authoritative cart
representation. shippingMethodId is the public global method ID
returned by /shops/{shopId}/shipping-methods; the server resolves it
to the active assignment of the cart's shop.
Availability is evaluated by the existing checkout domain. The method must have an active rate for the cart currency and destination, using the shipping address or falling back to the billing address. Cart subtotal, weight, pickup-only products, and required checkout address custom fields are also respected. Internal shop-assignment IDs cannot be supplied or discovered through this endpoint.
Authentication with the checkout:write scope is required. Only the
optional shopId commerce parameter is accepted; it must resolve to
the cart's authorized shop boundary. Only active carts can be changed.
| cartToken required | string [ 1 .. 255 ] characters Example: 5f90a78d66144eeaa3fe4d3fb6736f80 Opaque, unguessable public cart identifier returned when the cart is created. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| shippingMethodId required | integer >= 1 Public global ID returned by the selected shop's shipping-method collection. |
{- "shippingMethodId": 4
}{- "data": {
- "cartToken": "stringstringstringstringstringst",
- "status": "string",
- "checkoutState": "string",
- "customer": {
- "mode": "guest",
- "id": 1,
- "companyId": 1,
- "guestEmail": "user@example.com"
}, - "context": {
- "shopId": 1,
- "language": "string",
- "currency": "string",
- "priceListId": 1,
- "amountType": "string"
}, - "items": [
- {
- "id": 1,
- "type": "string",
- "lineKey": "string",
- "productId": 1,
- "variantId": 1,
- "sku": "string",
- "name": "string",
- "configuration": { },
- "quantity": "string",
- "unitPrice": "string",
- "lineTotal": "string",
- "currency": "string",
- "amountType": "string",
- "pricingStatus": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}
], - "addresses": {
- "billing": {
- "sourceType": "string",
- "customerAddressId": 1,
- "companyAddressId": 1,
- "salutationId": 1,
- "titleId": 1,
- "company": "string",
- "companyAddition": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryId": 1,
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}, - "shipping": {
- "sourceType": "string",
- "customerAddressId": 1,
- "companyAddressId": 1,
- "salutationId": 1,
- "titleId": 1,
- "company": "string",
- "companyAddition": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryId": 1,
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}
}, - "selection": {
- "shippingMethodId": 1,
- "paymentMethodId": 1,
- "couponCodes": [
- "string"
], - "voucherCodes": [
- "string"
]
}, - "summary": {
- "itemCount": 0,
- "quantity": "string",
- "currency": "string",
- "amountType": "string",
- "subtotal": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "discounts": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "surcharges": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "shipping": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "payment": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "rounding": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "tax": {
- "amount": "string",
- "breakdown": [
- {
- "taxRateId": 1,
- "name": "string",
- "rate": "string",
- "amount": "string"
}
]
}, - "totals": {
- "net": "string",
- "gross": "string",
- "grandTotal": "string"
}, - "adjustments": [
- {
- "sourceType": "string",
- "triggerType": "string",
- "code": "string",
- "label": "string",
- "direction": "increase",
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "taxAmount": "string",
- "currency": "string",
- "amountType": "string"
}
], - "hasPricingGaps": true
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "lastActivityAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Selects a payment method and returns the complete authoritative cart
representation. paymentMethodId is the public global method ID
returned by /shops/{shopId}/payment-methods. Payment methods are
global master data with explicit shop assignments; internal assignment
IDs cannot be supplied or discovered through this endpoint.
A valid shipping method must be available. When exactly one shipping option exists, the existing checkout behavior may select it automatically. Availability is evaluated by the existing checkout domain, including the active shop assignment, shipping-method restrictions, customer or company rules, minimum paid-order requirements, and payment-method adjustments.
Authentication with the checkout:write scope is required. Only the
optional shopId commerce parameter is accepted; it must resolve to
the cart's authorized shop boundary. Only active carts can be changed.
| cartToken required | string [ 1 .. 255 ] characters Example: 5f90a78d66144eeaa3fe4d3fb6736f80 Opaque, unguessable public cart identifier returned when the cart is created. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| paymentMethodId required | integer >= 1 Public global ID returned by the selected shop's payment-method collection. |
{- "paymentMethodId": 6
}{- "data": {
- "cartToken": "stringstringstringstringstringst",
- "status": "string",
- "checkoutState": "string",
- "customer": {
- "mode": "guest",
- "id": 1,
- "companyId": 1,
- "guestEmail": "user@example.com"
}, - "context": {
- "shopId": 1,
- "language": "string",
- "currency": "string",
- "priceListId": 1,
- "amountType": "string"
}, - "items": [
- {
- "id": 1,
- "type": "string",
- "lineKey": "string",
- "productId": 1,
- "variantId": 1,
- "sku": "string",
- "name": "string",
- "configuration": { },
- "quantity": "string",
- "unitPrice": "string",
- "lineTotal": "string",
- "currency": "string",
- "amountType": "string",
- "pricingStatus": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}
], - "addresses": {
- "billing": {
- "sourceType": "string",
- "customerAddressId": 1,
- "companyAddressId": 1,
- "salutationId": 1,
- "titleId": 1,
- "company": "string",
- "companyAddition": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryId": 1,
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}, - "shipping": {
- "sourceType": "string",
- "customerAddressId": 1,
- "companyAddressId": 1,
- "salutationId": 1,
- "titleId": 1,
- "company": "string",
- "companyAddition": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryId": 1,
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}
}, - "selection": {
- "shippingMethodId": 1,
- "paymentMethodId": 1,
- "couponCodes": [
- "string"
], - "voucherCodes": [
- "string"
]
}, - "summary": {
- "itemCount": 0,
- "quantity": "string",
- "currency": "string",
- "amountType": "string",
- "subtotal": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "discounts": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "surcharges": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "shipping": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "payment": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "rounding": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "tax": {
- "amount": "string",
- "breakdown": [
- {
- "taxRateId": 1,
- "name": "string",
- "rate": "string",
- "amount": "string"
}
]
}, - "totals": {
- "net": "string",
- "gross": "string",
- "grandTotal": "string"
}, - "adjustments": [
- {
- "sourceType": "string",
- "triggerType": "string",
- "code": "string",
- "label": "string",
- "direction": "increase",
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "taxAmount": "string",
- "currency": "string",
- "amountType": "string"
}
], - "hasPricingGaps": true
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "lastActivityAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Submits one checkout code and returns the complete authoritative cart representation. The existing checkout domain determines whether the code is a coupon or voucher and validates its shop, customer, currency, validity, usage, balance, calculation basis, and combinability.
The current checkout domain permits one active discount code effect, so an eligible code replaces the existing coupon or voucher selection. Voucher balance and coupon usage are consumed only during successful order submission. A rejected request restores the previous code selection and uses a generic error that does not reveal whether the submitted code exists.
Authentication with the checkout:write scope is required. Only the
optional shopId commerce parameter is accepted; it must resolve to
the cart's authorized shop boundary. Only active carts can be changed.
| cartToken required | string [ 1 .. 255 ] characters Example: 5f90a78d66144eeaa3fe4d3fb6736f80 Opaque, unguessable public cart identifier returned when the cart is created. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| code required | string [ 1 .. 120 ] characters One coupon or voucher code; comma-separated or multiline lists are not accepted. |
{- "code": "WELCOME10"
}{- "data": {
- "cartToken": "stringstringstringstringstringst",
- "status": "string",
- "checkoutState": "string",
- "customer": {
- "mode": "guest",
- "id": 1,
- "companyId": 1,
- "guestEmail": "user@example.com"
}, - "context": {
- "shopId": 1,
- "language": "string",
- "currency": "string",
- "priceListId": 1,
- "amountType": "string"
}, - "items": [
- {
- "id": 1,
- "type": "string",
- "lineKey": "string",
- "productId": 1,
- "variantId": 1,
- "sku": "string",
- "name": "string",
- "configuration": { },
- "quantity": "string",
- "unitPrice": "string",
- "lineTotal": "string",
- "currency": "string",
- "amountType": "string",
- "pricingStatus": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}
], - "addresses": {
- "billing": {
- "sourceType": "string",
- "customerAddressId": 1,
- "companyAddressId": 1,
- "salutationId": 1,
- "titleId": 1,
- "company": "string",
- "companyAddition": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryId": 1,
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}, - "shipping": {
- "sourceType": "string",
- "customerAddressId": 1,
- "companyAddressId": 1,
- "salutationId": 1,
- "titleId": 1,
- "company": "string",
- "companyAddition": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryId": 1,
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}
}, - "selection": {
- "shippingMethodId": 1,
- "paymentMethodId": 1,
- "couponCodes": [
- "string"
], - "voucherCodes": [
- "string"
]
}, - "summary": {
- "itemCount": 0,
- "quantity": "string",
- "currency": "string",
- "amountType": "string",
- "subtotal": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "discounts": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "surcharges": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "shipping": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "payment": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "rounding": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "tax": {
- "amount": "string",
- "breakdown": [
- {
- "taxRateId": 1,
- "name": "string",
- "rate": "string",
- "amount": "string"
}
]
}, - "totals": {
- "net": "string",
- "gross": "string",
- "grandTotal": "string"
}, - "adjustments": [
- {
- "sourceType": "string",
- "triggerType": "string",
- "code": "string",
- "label": "string",
- "direction": "increase",
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "taxAmount": "string",
- "currency": "string",
- "amountType": "string"
}
], - "hasPricingGaps": true
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "lastActivityAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Removes the matching selected checkout code and returns the complete recalculated authoritative cart representation. Coupon usage and voucher balance are not consumed or changed by this operation.
Code matching is case-insensitive. If the code is not currently
selected, the operation returns checkout_code_not_found; repeating a
successful removal therefore leaves the same cart state but returns a
not-found response.
Authentication with the checkout:write scope is required. Only the
optional shopId commerce parameter is accepted; it must resolve to
the cart's authorized shop boundary. Only active carts can be changed.
| cartToken required | string [ 1 .. 255 ] characters Example: 5f90a78d66144eeaa3fe4d3fb6736f80 Opaque, unguessable public cart identifier returned when the cart is created. |
| code required | string [ 1 .. 120 ] characters Example: WELCOME10 Selected coupon or voucher code, encoded as one URL path segment. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "cartToken": "stringstringstringstringstringst",
- "status": "string",
- "checkoutState": "string",
- "customer": {
- "mode": "guest",
- "id": 1,
- "companyId": 1,
- "guestEmail": "user@example.com"
}, - "context": {
- "shopId": 1,
- "language": "string",
- "currency": "string",
- "priceListId": 1,
- "amountType": "string"
}, - "items": [
- {
- "id": 1,
- "type": "string",
- "lineKey": "string",
- "productId": 1,
- "variantId": 1,
- "sku": "string",
- "name": "string",
- "configuration": { },
- "quantity": "string",
- "unitPrice": "string",
- "lineTotal": "string",
- "currency": "string",
- "amountType": "string",
- "pricingStatus": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}
], - "addresses": {
- "billing": {
- "sourceType": "string",
- "customerAddressId": 1,
- "companyAddressId": 1,
- "salutationId": 1,
- "titleId": 1,
- "company": "string",
- "companyAddition": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryId": 1,
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}, - "shipping": {
- "sourceType": "string",
- "customerAddressId": 1,
- "companyAddressId": 1,
- "salutationId": 1,
- "titleId": 1,
- "company": "string",
- "companyAddition": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryId": 1,
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "observedAt": "2019-08-24T14:15:22Z"
}
}, - "selection": {
- "shippingMethodId": 1,
- "paymentMethodId": 1,
- "couponCodes": [
- "string"
], - "voucherCodes": [
- "string"
]
}, - "summary": {
- "itemCount": 0,
- "quantity": "string",
- "currency": "string",
- "amountType": "string",
- "subtotal": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "discounts": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "surcharges": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "shipping": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "payment": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "rounding": {
- "hasValue": true,
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "currency": "string",
- "amountType": "string"
}, - "tax": {
- "amount": "string",
- "breakdown": [
- {
- "taxRateId": 1,
- "name": "string",
- "rate": "string",
- "amount": "string"
}
]
}, - "totals": {
- "net": "string",
- "gross": "string",
- "grandTotal": "string"
}, - "adjustments": [
- {
- "sourceType": "string",
- "triggerType": "string",
- "code": "string",
- "label": "string",
- "direction": "increase",
- "amount": "string",
- "netAmount": "string",
- "grossAmount": "string",
- "taxAmount": "string",
- "currency": "string",
- "amountType": "string"
}
], - "hasPricingGaps": true
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "lastActivityAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Revalidates and submits the authoritative cart selected by its opaque token. The cart's stored shop, customer or company context, addresses, shipping method, payment method, prices, totals, coupon codes, and voucher codes are used as-is; clients cannot override or calculate these values in the submission request.
For an internal payment method, a successful request creates the order
immediately and returns its complete public representation with 201.
Repeating submission after that order was created is idempotent and
returns the same order with 200. For an external redirect payment,
the response uses 202 and contains the provider redirect URL plus an
opaque payment-session key. Provider return and notification URLs are
generated by the server and cannot be supplied by the client. Repeating
the request while that payment is pending returns the same redirect URL
and session key without initializing another provider payment. After a
successful provider callback, repeating the request returns the created
order with 200; clients therefore use this same operation to continue
the public flow idempotently.
customFields accepts storefront-editable order custom-field values by
their technical keys. The existing checkout domain validates required
fields and persists accepted values with the order. Authentication with
the checkout:write scope is required. Only the optional shopId
commerce parameter is accepted and must match the cart's shop boundary.
| cartToken required | string [ 1 .. 255 ] characters Example: 5f90a78d66144eeaa3fe4d3fb6736f80 Opaque, unguessable public cart identifier returned when the cart is created. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| termsAccepted required | boolean Explicit confirmation that the checkout terms and conditions were accepted. Value: true |
| orderReference | string <= 255 characters Optional customer-facing order reference. |
| customerNote | string <= 65535 characters Optional note stored with the order. |
object <= 100 properties Storefront-editable order custom-field values keyed by technical field key. |
{- "termsAccepted": true,
- "orderReference": "WEB-2026-1842",
- "customerNote": "Please leave the parcel at reception.",
- "customFields": {
- "delivery_instructions": "Ring the side entrance bell."
}
}{- "data": {
- "status": "order_created",
- "order": {
- "id": 1,
- "orderNumber": "string",
- "shopId": 1,
- "customerMode": "string",
- "salesChannel": "string",
- "amountType": "net",
- "status": {
- "order": "string",
- "payment": "string",
- "fulfillment": "string"
}, - "customer": {
- "id": 1,
- "number": "string",
- "email": "string",
- "firstName": "string",
- "lastName": "string",
- "reference": "string",
- "company": {
- "id": 1,
- "number": "string",
- "name": "string"
}, - "note": "string"
}, - "currency": {
- "isoCode": "string",
- "symbol": "string",
- "decimalPlaces": 0
}, - "language": "string",
- "totals": {
- "subtotalNet": "110.00",
- "subtotalGross": "110.00",
- "shippingNet": "110.00",
- "shippingGross": "110.00",
- "tax": "110.00",
- "totalNet": "110.00",
- "totalGross": "110.00"
}, - "payment": {
- "id": 1,
- "methodId": 1,
- "methodKey": "string",
- "providerKey": "string",
- "providerMethodKey": "string",
- "name": "string",
- "status": "string",
- "description": "string",
- "instructions": {
- "html": "string",
- "text": "string"
}, - "amountDue": "110.00",
- "amountPaid": "110.00",
- "externalReference": "string",
- "authorizedAt": "2019-08-24T14:15:22Z",
- "paidAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "shipping": {
- "id": 1,
- "methodId": 1,
- "methodKey": "string",
- "providerKey": "string",
- "providerMethodKey": "string",
- "name": "string",
- "status": "string",
- "deliveryTimeName": "string",
- "zoneName": "string",
- "rateType": "string",
- "amountType": "string",
- "tax": {
- "rate": "2.0000",
- "name": "string",
- "amount": "110.00"
}, - "price": {
- "input": "110.00",
- "net": "110.00",
- "gross": "110.00"
}, - "description": "string",
- "instructions": {
- "html": "string",
- "text": "string"
}, - "tracking": {
- "number": "string",
- "url": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "itemCount": 0,
- "placedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "termsAcceptedAt": "2019-08-24T14:15:22Z",
- "items": [
- {
- "id": 1,
- "type": "string",
- "lineKey": "string",
- "productId": 1,
- "variantId": 1,
- "sku": "string",
- "name": "string",
- "variantName": "string",
- "description": "string",
- "configuration": { },
- "quantity": "2.0000",
- "amountType": "net",
- "tax": {
- "rateId": 1,
- "rate": "2.0000",
- "name": "string",
- "amount": "110.00"
}, - "unitPrice": {
- "input": "110.00",
- "net": "110.00",
- "gross": "110.00"
}, - "totals": {
- "net": "110.00",
- "gross": "110.00",
- "tax": "110.00"
}, - "position": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "addresses": [
- {
- "id": 1,
- "role": "string",
- "company": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "country": {
- "isoCode": "string",
- "name": "string"
}, - "phone": "string",
- "mobile": "string",
- "email": "string",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}
], - "shipments": [
- {
- "id": 1,
- "trackingNumber": "string",
- "trackingUrl": "string",
- "shippedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
},
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns the complete canonical technical keys for order, payment, and fulfillment statuses. The catalog is global metadata and does not require Commerce shop context.
Authentication with the orders:read scope is required.
The response does not describe allowed transitions for a concrete order. A listed status is therefore not necessarily a valid next status from every current order state.
{- "data": {
- "order": [
- "open",
- "completed",
- "cancelled"
], - "payment": [
- "open",
- "pending",
- "paid",
- "failed",
- "partially_refunded",
- "refunded",
- "not_required"
], - "fulfillment": [
- "open",
- "pending",
- "partially_shipped",
- "shipped",
- "pickup_ready",
- "picked_up",
- "cancelled",
- "not_required"
]
}, - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns orders belonging to the resolved shop. Every customer, currency, total, payment, and shipping value comes from the persisted order snapshots. Current customer, pricing, tax, shipping, payment, language, and currency configuration is never used to recalculate historical orders.
q performs a case-insensitive substring search across the order
number, customer email, customer number, company name, company number,
customer first and last names, the combined customer name, and customer
reference. Status, sales-channel, customer, company, placement-time,
and update-time filters are exact or exclusive as documented by their
parameters.
| page | integer >= 1 Default: 1 Example: page=2 One-based page number. |
| perPage | integer [ 1 .. 100 ] Default: 25 Example: perPage=50 Number of items returned per page. |
| sort | string^-?(id|orderNumber|orderStatus|placedAt|total... Default: "-placedAt" Examples:
Comma-separated order summary fields. Supported fields are |
| q | string <= 200 characters Examples:
Case-insensitive substring search across order number, customer email, customer number, company name, company number, customer first and last names, the combined customer name, and customer reference. |
| orderStatus | string [ 1 .. 40 ] characters ^[a-z][a-z0-9_]*$ Examples:
Exact technical order-status key. |
| paymentStatus | string [ 1 .. 40 ] characters ^[a-z][a-z0-9_]*$ Examples:
Exact technical payment-status key stored on the order. |
| fulfillmentStatus | string [ 1 .. 40 ] characters ^[a-z][a-z0-9_]*$ Examples:
Exact technical fulfillment-status key stored on the order. |
| salesChannel | string [ 1 .. 30 ] characters ^[a-z][a-z0-9_]*$ Examples:
Exact technical sales-channel key stored on the order. |
| customerId | integer >= 1 Examples:
Restricts results to orders linked to this customer ID. |
| companyId | integer >= 1 Examples:
Restricts results to orders linked to this company ID. |
| placedAfter | string <date-time> ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}... Examples:
Exclusive lower boundary for |
| placedBefore | string <date-time> ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}... Examples:
Exclusive upper boundary for |
| updatedAfter | string <date-time> ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}... Examples:
Exclusive lower boundary for the order's |
| updatedBefore | string <date-time> ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}... Examples:
Exclusive upper boundary for the order's |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": [
- {
- "id": 1042,
- "orderNumber": "100042",
- "shopId": 2,
- "customerMode": "registered",
- "salesChannel": "storefront",
- "amountType": "gross",
- "status": {
- "order": "open",
- "payment": "paid",
- "fulfillment": "pending"
}, - "customer": {
- "id": 18,
- "number": "C-10018",
- "email": "customer@example.com",
- "firstName": "Anna",
- "lastName": "Muster",
- "reference": "WEB-4711",
- "company": {
- "id": 7,
- "number": "CO-1007",
- "name": "Muster AG"
}
}, - "currency": {
- "isoCode": "CHF",
- "symbol": "CHF",
- "decimalPlaces": 2
}, - "language": "de",
- "totals": {
- "subtotalNet": "92.51",
- "subtotalGross": "100.00",
- "shippingNet": "9.25",
- "shippingGross": "10.00",
- "tax": "8.24",
- "totalNet": "101.76",
- "totalGross": "110.00"
}, - "payment": {
- "methodId": 3,
- "methodKey": "invoice",
- "providerKey": null,
- "name": "Invoice",
- "status": "paid",
- "amountDue": "110.00",
- "amountPaid": "110.00"
}, - "shipping": {
- "methodId": 4,
- "methodKey": "postpac-economy",
- "providerKey": "swiss-post",
- "name": "PostPac Economy",
- "status": "pending"
}, - "itemCount": 2,
- "placedAt": "2026-07-30T09:15:00Z",
- "createdAt": "2026-07-30T09:15:00Z",
- "updatedAt": "2026-07-30T10:00:00Z"
}
], - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05",
- "pagination": {
- "page": 1,
- "perPage": 25,
- "totalItems": 1,
- "totalPages": 1
}
}, - "errors": [ ]
}Returns one historical order belonging to the resolved shop. The response contains the persisted order, customer, address, item, payment, shipping, and shipment snapshots. Current commerce master data is never used to recalculate or replace those values.
Billing and shipping addresses are separate role-specific snapshots.
Their contents may therefore be identical while their role and id
values remain distinct. Root order custom fields use the current
connector-visible definitions, while address custom fields remain the
immutable connector-visible snapshots captured with the order.
| orderId required | integer >= 1 Examples:
Positive historical order identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "id": 1042,
- "orderNumber": "100042",
- "shopId": 2,
- "customerMode": "registered",
- "salesChannel": "storefront",
- "amountType": "gross",
- "status": {
- "order": "open",
- "payment": "paid",
- "fulfillment": "shipped"
}, - "customer": {
- "id": 18,
- "number": "C-10018",
- "email": "customer@example.com",
- "firstName": "Anna",
- "lastName": "Muster",
- "reference": "WEB-4711",
- "company": {
- "id": 7,
- "number": "CO-1007",
- "name": "Muster AG"
}, - "note": "Leave at reception."
}, - "currency": {
- "isoCode": "CHF",
- "symbol": "CHF",
- "decimalPlaces": 2
}, - "language": "de",
- "totals": {
- "subtotalNet": "92.51",
- "subtotalGross": "100.00",
- "shippingNet": "9.25",
- "shippingGross": "10.00",
- "tax": "8.24",
- "totalNet": "101.76",
- "totalGross": "110.00"
}, - "payment": {
- "id": 51,
- "methodId": 3,
- "methodKey": "invoice",
- "providerKey": null,
- "providerMethodKey": null,
- "name": "Invoice",
- "status": "paid",
- "description": "Payable within 30 days.",
- "instructions": {
- "html": null,
- "text": "Payable within 30 days."
}, - "amountDue": "110.00",
- "amountPaid": "110.00",
- "externalReference": "INV-100042",
- "authorizedAt": null,
- "paidAt": "2026-07-30T10:00:00Z",
- "createdAt": "2026-07-30T09:15:00Z",
- "updatedAt": "2026-07-30T10:00:00Z"
}, - "shipping": {
- "id": 61,
- "methodId": 4,
- "methodKey": "postpac-economy",
- "providerKey": "swiss-post",
- "providerMethodKey": "economy",
- "name": "PostPac Economy",
- "status": "shipped",
- "deliveryTimeName": "2-3 business days",
- "zoneName": "Switzerland",
- "rateType": "fixed",
- "amountType": "gross",
- "tax": {
- "rate": "8.1000",
- "name": "VAT",
- "amount": "0.75"
}, - "price": {
- "input": "10.00",
- "net": "9.25",
- "gross": "10.00"
}, - "description": "Standard parcel delivery.",
- "instructions": {
- "html": null,
- "text": null
}, - "createdAt": "2026-07-30T09:15:00Z",
- "updatedAt": "2026-07-30T11:00:00Z"
}, - "itemCount": 1,
- "placedAt": "2026-07-30T09:15:00Z",
- "createdAt": "2026-07-30T09:15:00Z",
- "updatedAt": "2026-07-30T11:00:00Z",
- "termsAcceptedAt": "2026-07-30T09:14:00Z",
- "items": [
- {
- "id": 71,
- "type": "product",
- "lineKey": "line-1",
- "productId": 42,
- "variantId": null,
- "sku": "SKU-42",
- "name": "Example product",
- "variantName": null,
- "description": "Persisted item description.",
- "configuration": null,
- "quantity": "2.0000",
- "amountType": "gross",
- "tax": {
- "rateId": 8,
- "rate": "8.1000",
- "name": "VAT",
- "amount": "7.49"
}, - "unitPrice": {
- "input": "50.00",
- "net": "46.25",
- "gross": "50.00"
}, - "totals": {
- "net": "92.51",
- "gross": "100.00",
- "tax": "7.49"
}, - "position": 1,
- "createdAt": "2026-07-30T09:15:00Z",
- "updatedAt": "2026-07-30T09:15:00Z"
}
], - "addresses": [
- {
- "id": 81,
- "role": "billing",
- "company": "Muster AG",
- "salutation": "Ms",
- "firstName": "Anna",
- "lastName": "Muster",
- "street": "Example Street",
- "streetNumber": "42",
- "addressLine2": null,
- "postcode": "3000",
- "city": "Bern",
- "state": null,
- "country": {
- "isoCode": "CH",
- "name": "Switzerland"
}, - "phone": null,
- "mobile": null,
- "email": "customer@example.com",
- "customFields": [ ]
}, - {
- "id": 82,
- "role": "shipping",
- "company": "Muster AG",
- "salutation": "Ms",
- "firstName": "Anna",
- "lastName": "Muster",
- "street": "Example Street",
- "streetNumber": "42",
- "addressLine2": null,
- "postcode": "3000",
- "city": "Bern",
- "state": null,
- "country": {
- "isoCode": "CH",
- "name": "Switzerland"
}, - "phone": null,
- "mobile": null,
- "email": "customer@example.com",
- "customFields": [ ]
}
], - "shipments": [
- {
- "id": 91,
- "trackingNumber": "TRACK-100042",
- "shippedAt": "2026-07-30T11:00:00Z",
- "createdAt": "2026-07-30T11:00:00Z",
- "updatedAt": "2026-07-30T11:00:00Z"
}
], - "customFields": [
- {
- "setKey": "fulfillment",
- "setLabel": "Fulfillment",
- "key": "delivery_priority",
- "label": "Delivery priority",
- "type": "number",
- "value": 2,
- "displayValue": "Priority 2",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns persisted refund history for one order in the resolved shop. Refunded item values are historical snapshots. Generated voucher or coupon codes and internal admin actor data are never exposed.
| orderId required | integer >= 1 Examples:
Positive historical order identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": [
- {
- "id": 1,
- "orderId": 1,
- "method": "manual",
- "status": "recorded",
- "externalReference": "string",
- "amount": "110.00",
- "currency": "str",
- "reason": "string",
- "items": [
- {
- "id": 1,
- "orderItemId": 1,
- "sku": "string",
- "name": "string",
- "quantity": "2.0000",
- "amount": "110.00",
- "note": "string"
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Records a validated manual, voucher, or coupon refund through the
shared refund domain for an order belonging to the resolved shop.
Authentication with the orders:write scope is required.
Optional item entries identify historical order positions. Their amounts must add up to the refund amount, and the domain enforces the remaining refundable order amount, quantities, and item amounts. Immutable order snapshots and the order's shop ownership are not changed. Generated voucher or coupon credit codes are never exposed.
An optional Idempotency-Key makes retries safe. The same API client,
key, and normalized request return the original refund with 200;
reusing the key for different request data returns
409 idempotency_conflict.
| orderId required | integer >= 1 Examples:
Positive historical order identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| Idempotency-Key | string [ 1 .. 190 ] characters ^[A-Za-z0-9][A-Za-z0-9._:-]{0,189}$ Example: order-mutation-501 Optional caller-generated identifier that makes one resource creation safe to retry. Keys are scoped to the authenticated API client and must not be reused for different normalized request data. |
| method required | string Enum: "manual" "voucher" "coupon" |
| amount required | number decimal places <= 4 ( 0 .. 999999999999.9999 ] |
| externalReference | string or null <= 190 characters |
| reason | string or null <= 5000 characters |
Array of objects (OrderRefundCreateItemRequest) <= 100 items |
{- "method": "manual",
- "amount": 25,
- "externalReference": "ERP-RMA-8821",
- "reason": "Damaged item",
- "items": [
- {
- "orderItemId": 501,
- "quantity": 1,
- "amount": 25,
- "note": "One damaged unit"
}
]
}{- "data": {
- "id": 1,
- "orderId": 1,
- "method": "manual",
- "status": "recorded",
- "externalReference": "string",
- "amount": "110.00",
- "currency": "str",
- "reason": "string",
- "items": [
- {
- "id": 1,
- "orderItemId": 1,
- "sku": "string",
- "name": "string",
- "quantity": "2.0000",
- "amount": "110.00",
- "note": "string"
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns one persisted refund belonging to the specified order and resolved shop.
| orderId required | integer >= 1 Examples:
Positive historical order identifier. |
| refundId required | integer >= 1 Examples:
Positive order-refund identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "id": 1,
- "orderId": 1,
- "method": "manual",
- "status": "recorded",
- "externalReference": "string",
- "amount": "110.00",
- "currency": "str",
- "reason": "string",
- "items": [
- {
- "id": 1,
- "orderItemId": 1,
- "sku": "string",
- "name": "string",
- "quantity": "2.0000",
- "amount": "110.00",
- "note": "string"
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Safely transitions a refund to voided while preserving its persisted
refund and item snapshots. The order and refund must both belong to
the resolved shop, and orders:write is required.
Voucher and coupon credits are voided only when they have not been redeemed. Unsafe state transitions return a conflict without changing the refund. Generated credit codes and internal actor data are never exposed.
| orderId required | integer >= 1 Examples:
Positive historical order identifier. |
| refundId required | integer >= 1 Examples:
Positive order-refund identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "id": 1,
- "orderId": 1,
- "method": "manual",
- "status": "recorded",
- "externalReference": "string",
- "amount": "110.00",
- "currency": "str",
- "reason": "string",
- "items": [
- {
- "id": 1,
- "orderItemId": 1,
- "sku": "string",
- "name": "string",
- "quantity": "2.0000",
- "amount": "110.00",
- "note": "string"
}
], - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns immutable document metadata for one historical order in the resolved shop. The order and every document are constrained to the selected shop. Internal filesystem paths, template snapshots, and rendering details are never exposed.
| orderId required | integer >= 1 Examples:
Positive historical order identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": [
- {
- "id": 151,
- "orderId": 1042,
- "type": "invoice",
- "number": "INV-100042",
- "name": "Invoice 100042",
- "filename": "invoice-100042.pdf",
- "language": "de",
- "createdAt": "2026-07-30T10:01:00Z",
- "updatedAt": "2026-07-30T10:01:00Z",
- "downloadUrl": "/api/v1/orders/1042/documents/151?shopId=2"
}
], - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Generates one policy-approved order document for an order in the resolved shop. The shared document domain selects the effective shop/language template, reserves the document number, snapshots the historical order and template, and renders the PDF.
Callers cannot supply a template, number, filename, language, or body. Credit notes must reference one active refund belonging to the same order and shop. Incomplete records and PDFs are removed when rendering or history recording fails.
| orderId required | integer >= 1 Examples:
Positive historical order identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| type required | string Enum: "invoice" "delivery_note" "cancellation" |
{- "type": "invoice"
}{- "data": {
- "id": 1,
- "orderId": 1,
- "type": "string",
- "number": "string",
- "name": "string",
- "filename": "string",
- "language": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "downloadUrl": "string"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns the PDF binary for a document belonging to the specified historical order in the resolved shop. The response is a file download, not the JSON API envelope. The PDF is rendered from immutable order and document-template snapshots.
| orderId required | integer >= 1 Examples:
Positive historical order identifier. |
| documentId required | integer >= 1 Examples:
Positive immutable order-document identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": null,
- "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [
- {
- "code": "authentication_required",
- "message": "A valid API key is required.",
- "field": null
}
]
}Deletes a document and its generated PDF only while no delivery has been recorded. Delivery history and document-linked communications make delivered documents immutable. The document must belong to the specified order and resolved shop.
| orderId required | integer >= 1 Examples:
Positive historical order identifier. |
| documentId required | integer >= 1 Examples:
Positive immutable order-document identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "id": 1,
- "orderId": 1,
- "type": "string",
- "number": "string",
- "name": "string",
- "filename": "string",
- "language": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "downloadUrl": "string"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Sends the existing PDF using only immutable and configured inputs. The recipient comes from the order snapshot, the language from the document, and the subject and body from the document-type-bound email template. This operation accepts no request body and exposes no recipient, subject, message, template, or attachment override.
| orderId required | integer >= 1 Examples:
Positive historical order identifier. |
| documentId required | integer >= 1 Examples:
Positive immutable order-document identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "document": {
- "id": 1,
- "orderId": 1,
- "type": "string",
- "number": "string",
- "name": "string",
- "filename": "string",
- "language": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "downloadUrl": "string"
}, - "delivery": {
- "sent": true,
- "templateKey": "invoice_delivery",
- "recipientEmail": "user@example.com"
}
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns the chronological public outbound communication history for an order in the resolved shop. Internal admin identifiers, usernames, actor labels, translation keys, and template configuration are omitted.
| orderId required | integer >= 1 Examples:
Positive historical order identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": [
- {
- "id": 81,
- "orderId": 1042,
- "documentId": 151,
- "channel": "email",
- "direction": "outbound",
- "templateKey": "invoice_delivery",
- "recipientEmail": "customer@example.com",
- "subject": "Invoice INV-100042",
- "createdAt": "2026-09-17T15:00:00Z"
}
], - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Sends one explicitly supported order communication through its fixed configured template. The recipient and language are taken from the immutable order snapshot. Callers cannot provide a recipient, language, subject, body, raw HTML, arbitrary template, or attachment.
| orderId required | integer >= 1 Examples:
Positive historical order identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| type required | string Value: "order_confirmation" |
{- "type": "order_confirmation"
}{- "data": {
- "sent": true,
- "templateKey": "order_confirmation",
- "recipientEmail": "user@example.com"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Performs one allowed transition in the order, payment, or fulfillment status domain for an order belonging to the resolved shop.
Authentication with the orders:write scope and Commerce shop context
is required. Missing and foreign-shop orders return the same
404 order_not_found response.
The shared order lifecycle applies its intrinsic reservation, inventory-booking, payment/shipping snapshot, and status-history effects. The authenticated API client is recorded as the actor. Notifications, documents, refunds, shipment creation, and tracking updates are not performed by this endpoint.
| orderId required | integer >= 1 Examples:
Positive historical order identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| statusType required | string Value: "order" |
| nextStatus required | string Enum: "open" "completed" "cancelled" |
| note | string <= 5000 characters |
{- "statusType": "payment",
- "nextStatus": "paid",
- "note": "Payment confirmed by ERP."
}{- "data": {
- "id": 1042,
- "status": {
- "order": "open",
- "payment": "paid",
- "fulfillment": "pending"
}, - "updatedAt": "2026-07-31T09:15:00Z"
}, - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns persisted shipment and tracking entries for one order in the resolved shop. The order is authorized before shipment data is read.
| orderId required | integer >= 1 Examples:
Positive historical order identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": [
- {
- "id": 1,
- "orderId": 1,
- "trackingNumber": "string",
- "shippedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Creates one persisted shipment tracking record for an order belonging
to the resolved shop. This does not change lifecycle statuses, book
inventory, call a carrier, generate a label, or send a notification.
An optional Idempotency-Key returns the original shipment with 200
on a matching retry and rejects different request data with
409 idempotency_conflict.
| orderId required | integer >= 1 Examples:
Positive historical order identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| Idempotency-Key | string [ 1 .. 190 ] characters ^[A-Za-z0-9][A-Za-z0-9._:-]{0,189}$ Example: order-mutation-501 Optional caller-generated identifier that makes one resource creation safe to retry. Keys are scoped to the authenticated API client and must not be reused for different normalized request data. |
| trackingNumber required | string [ 1 .. 190 ] characters |
| trackingUrl | string <uri> <= 500 characters |
| shippedAt | string <date-time> ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}... Optional RFC 3339 UTC timestamp; defaults to server time. |
{- "trackingNumber": "TRACK-100042",
- "shippedAt": "2026-08-03T12:15:30Z"
}{- "data": {
- "id": 1,
- "orderId": 1,
- "trackingNumber": "string",
- "shippedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns one persisted shipment constrained to the specified order and resolved shop.
| orderId required | integer >= 1 Examples:
Positive historical order identifier. |
| shipmentId required | integer >= 1 Examples:
Positive order-shipment identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "id": 1,
- "orderId": 1,
- "trackingNumber": "string",
- "shippedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Deletes one shipment constrained to the specified order and resolved shop and returns its former public snapshot. Historical order, shipping, customer, address, price, and item snapshots are unchanged.
| orderId required | integer >= 1 Examples:
Positive historical order identifier. |
| shipmentId required | integer >= 1 Examples:
Positive order-shipment identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "id": 1,
- "orderId": 1,
- "trackingNumber": "string",
- "shippedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Creates one persisted shipment tracking record for an order belonging
to the resolved shop. Authentication with the orders:write scope and
Commerce shop context is required. Missing and foreign-shop orders
return the same 404 order_not_found response.
This endpoint does not change an order, payment, or fulfillment status,
book inventory, call a carrier, generate labels, or send notifications.
Multiple tracking entries can be created for the same order. An
optional Idempotency-Key returns the original entry with 200 on a
matching retry and rejects different request data with
409 idempotency_conflict.
| orderId required | integer >= 1 Examples:
Positive historical order identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| Idempotency-Key | string [ 1 .. 190 ] characters ^[A-Za-z0-9][A-Za-z0-9._:-]{0,189}$ Example: order-mutation-501 Optional caller-generated identifier that makes one resource creation safe to retry. Keys are scoped to the authenticated API client and must not be reused for different normalized request data. |
| trackingNumber required | string [ 1 .. 190 ] characters |
| trackingUrl | string <uri> <= 500 characters |
| shippedAt | string <date-time> ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}... Optional RFC 3339 UTC timestamp; defaults to server time. |
{- "trackingNumber": "00340434161234567890",
}{- "data": {
- "id": 1,
- "orderId": 1,
- "trackingNumber": "string",
- "shippedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns the global customer-group catalog in the resolved language. The selected shop authorizes and resolves the language context, but it does not filter the global groups. A customer group's optional price list is a global pricing reference, not a shop-specific override.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
{- "data": [
- {
- "id": 1,
- "name": "string",
- "amountType": "gross",
- "priceListId": 1,
- "priceListName": "string",
- "default": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns the global salutation master-data registry in the resolved language. The selected shop authorizes and resolves the language context, but does not filter the registry. Active state and sort order are included so integrations can retain stable customer references.
The response exposes the technical key and resolved display name only; it does not expose letter-salutation templates or raw translations.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": [
- {
- "id": 2,
- "key": "female",
- "name": "Ms.",
- "active": true,
- "sortOrder": 20
}
], - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns the global academic and honorific-title master-data registry in the resolved language. The selected shop authorizes and resolves the language context, but does not filter the registry. Active state and sort order are included so integrations can retain stable customer references.
The response exposes the technical key and resolved display name only; it does not expose raw translations or administrative configuration.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| priceListId | integer >= 1 Example: priceListId=4 Existing price list used for price resolution. When omitted, standard base-price resolution is used. |
{- "data": [
- {
- "id": 5,
- "key": "dr",
- "name": "Dr.",
- "active": true,
- "sortOrder": 10
}
], - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns customer accounts linked to the resolved shop. Customer identity is global, while the customer-shop link is the visibility boundary. Credentials, addresses, company memberships, customer groups, and other shop assignments are not included.
| page | integer >= 1 Default: 1 Example: page=2 One-based page number. |
| perPage | integer [ 1 .. 100 ] Default: 25 Example: perPage=50 Number of items returned per page. |
| sort | string^-?(id|number|email|lastName|createdAt|update... Default: "id" Example: sort=-updatedAt,id Comma-separated customer fields. Supported fields are |
| q | string <= 200 characters Example: q=muster Case-insensitive substring search across customer number, email, first name, and last name. |
| updatedAfter | string <date-time> ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}... Example: updatedAfter=2026-08-01T00:00:00Z Exclusive lower boundary for customer |
| updatedBefore | string <date-time> ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}... Example: updatedBefore=2026-08-02T00:00:00Z Exclusive upper boundary for customer |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": [
- {
- "id": 1,
- "customerShopId": 1,
- "number": "string",
- "email": "user@example.com",
- "firstName": "string",
- "lastName": "string",
- "active": true,
- "guest": true,
- "status": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "shopLinkedAt": "2019-08-24T14:15:22Z",
- "shopUpdatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Creates a credential-free global customer identity and an active registration in the resolved shop. Passwords, reset data, payment credentials, and newsletter consent are not accepted.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| email required | string <email> <= 255 characters |
| number required | string [ 1 .. 255 ] characters |
| salutationId | integer or null >= 1 |
| titleId | integer or null >= 1 |
| firstName | string <= 120 characters |
| lastName | string <= 120 characters |
| active | boolean Default: true |
| guest | boolean Default: false |
{- "email": "user@example.com",
- "number": "string",
- "salutationId": 1,
- "titleId": 1,
- "firstName": "string",
- "lastName": "string",
- "active": true,
- "guest": false
}{- "data": {
- "id": 1,
- "customerShopId": 1,
- "number": "string",
- "email": "user@example.com",
- "firstName": "string",
- "lastName": "string",
- "active": true,
- "guest": true,
- "status": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "shopLinkedAt": "2019-08-24T14:15:22Z",
- "shopUpdatedAt": "2019-08-24T14:15:22Z",
- "salutation": "string",
- "salutationKey": "string",
- "title": "string",
- "lastLoginAt": "2019-08-24T14:15:22Z",
- "shop": {
- "id": 1,
- "key": "string",
- "name": "string",
- "language": {
- "id": 1,
- "isoCode": "string",
- "locale": "string",
- "name": "string"
}, - "currency": {
- "id": 1,
- "isoCode": "string",
- "name": "string",
- "symbol": "string"
}
}, - "customerGroup": {
- "id": 1,
- "name": "string",
- "amountType": "string",
- "priceListId": 1,
- "priceListName": "string"
}, - "registration": {
- "id": 1,
- "number": "string",
- "status": "string",
- "active": true,
- "shop": {
- "id": 1,
- "key": "string",
- "name": "string",
- "language": {
- "id": 1,
- "isoCode": "string",
- "locale": "string",
- "name": "string"
}, - "currency": {
- "id": 1,
- "isoCode": "string",
- "name": "string",
- "symbol": "string"
}
}, - "customerGroup": {
- "id": 1,
- "name": "string",
- "amountType": "string",
- "priceListId": 1,
- "priceListName": "string"
}, - "pricingContext": {
- "amountType": "string",
- "priceListId": 0,
- "priceListName": "string",
- "currencyId": 0,
- "currencyIsoCode": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "addresses": [
- {
- "id": 1,
- "type": "string",
- "label": "string",
- "company": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "email": "user@example.com",
- "defaultBilling": true,
- "defaultShipping": true,
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns one private customer linked to the resolved shop, including the current shop assignment, customer group, connector-visible customer custom fields, and addresses. Credentials, company assignments, and other shop assignments are never exposed.
| customerId required | integer >= 1 Example: 41 Positive global customer identifier linked to the resolved shop. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "id": 1,
- "customerShopId": 1,
- "number": "string",
- "email": "user@example.com",
- "firstName": "string",
- "lastName": "string",
- "active": true,
- "guest": true,
- "status": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "shopLinkedAt": "2019-08-24T14:15:22Z",
- "shopUpdatedAt": "2019-08-24T14:15:22Z",
- "salutation": "string",
- "salutationKey": "string",
- "title": "string",
- "lastLoginAt": "2019-08-24T14:15:22Z",
- "shop": {
- "id": 1,
- "key": "string",
- "name": "string",
- "language": {
- "id": 1,
- "isoCode": "string",
- "locale": "string",
- "name": "string"
}, - "currency": {
- "id": 1,
- "isoCode": "string",
- "name": "string",
- "symbol": "string"
}
}, - "customerGroup": {
- "id": 1,
- "name": "string",
- "amountType": "string",
- "priceListId": 1,
- "priceListName": "string"
}, - "registration": {
- "id": 1,
- "number": "string",
- "status": "string",
- "active": true,
- "shop": {
- "id": 1,
- "key": "string",
- "name": "string",
- "language": {
- "id": 1,
- "isoCode": "string",
- "locale": "string",
- "name": "string"
}, - "currency": {
- "id": 1,
- "isoCode": "string",
- "name": "string",
- "symbol": "string"
}
}, - "customerGroup": {
- "id": 1,
- "name": "string",
- "amountType": "string",
- "priceListId": 1,
- "priceListName": "string"
}, - "pricingContext": {
- "amountType": "string",
- "priceListId": 0,
- "priceListName": "string",
- "currencyId": 0,
- "currencyIsoCode": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "addresses": [
- {
- "id": 1,
- "type": "string",
- "label": "string",
- "company": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "email": "user@example.com",
- "defaultBilling": true,
- "defaultShipping": true,
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Partially updates the global identity of a customer linked to the resolved shop. Shop-registration fields use their dedicated contract.
| customerId required | integer >= 1 Example: 41 Positive global customer identifier linked to the resolved shop. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
string <email> <= 255 characters | |
| number | string [ 1 .. 255 ] characters |
| salutationId | integer or null >= 1 |
| titleId | integer or null >= 1 |
| firstName | string <= 120 characters |
| lastName | string <= 120 characters |
| active | boolean |
| guest | boolean |
{- "email": "user@example.com",
- "number": "string",
- "salutationId": 1,
- "titleId": 1,
- "firstName": "string",
- "lastName": "string",
- "active": true,
- "guest": true
}{- "data": {
- "id": 1,
- "customerShopId": 1,
- "number": "string",
- "email": "user@example.com",
- "firstName": "string",
- "lastName": "string",
- "active": true,
- "guest": true,
- "status": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "shopLinkedAt": "2019-08-24T14:15:22Z",
- "shopUpdatedAt": "2019-08-24T14:15:22Z",
- "salutation": "string",
- "salutationKey": "string",
- "title": "string",
- "lastLoginAt": "2019-08-24T14:15:22Z",
- "shop": {
- "id": 1,
- "key": "string",
- "name": "string",
- "language": {
- "id": 1,
- "isoCode": "string",
- "locale": "string",
- "name": "string"
}, - "currency": {
- "id": 1,
- "isoCode": "string",
- "name": "string",
- "symbol": "string"
}
}, - "customerGroup": {
- "id": 1,
- "name": "string",
- "amountType": "string",
- "priceListId": 1,
- "priceListName": "string"
}, - "registration": {
- "id": 1,
- "number": "string",
- "status": "string",
- "active": true,
- "shop": {
- "id": 1,
- "key": "string",
- "name": "string",
- "language": {
- "id": 1,
- "isoCode": "string",
- "locale": "string",
- "name": "string"
}, - "currency": {
- "id": 1,
- "isoCode": "string",
- "name": "string",
- "symbol": "string"
}
}, - "customerGroup": {
- "id": 1,
- "name": "string",
- "amountType": "string",
- "priceListId": 1,
- "priceListName": "string"
}, - "pricingContext": {
- "amountType": "string",
- "priceListId": 0,
- "priceListName": "string",
- "currencyId": 0,
- "currencyIsoCode": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "addresses": [
- {
- "id": 1,
- "type": "string",
- "label": "string",
- "company": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "email": "user@example.com",
- "defaultBilling": true,
- "defaultShipping": true,
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces the complete connector-visible custom-field value set for a customer registered in the resolved shop. Omitted connector-visible definitions are cleared; non-connector definitions are untouched.
| customerId required | integer >= 1 Example: 41 Positive global customer identifier linked to the resolved shop. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
required | object <= 100 properties Complete connector-visible value set keyed by custom-field key. Use null to clear a value; omitted connector-visible definitions are also cleared. Custom fields must not be used to store authentication secrets or sensitive payment credentials. |
{- "customFields": { }
}{- "data": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns the effective selected-shop consent state and its latest explicit event. No state is inferred from customer identity or registration fields, and request evidence such as IP address or user agent is not exposed.
| customerId required | integer >= 1 Example: 41 Positive global customer identifier linked to the resolved shop. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "consented": true,
- "latestEvent": {
- "id": 1,
- "type": "granted",
- "source": "string",
- "email": "user@example.com",
- "recordedAt": "2019-08-24T14:15:22Z"
}
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Records an explicit selected-shop grant event. The operation is idempotent while the latest effective event is already granted.
| customerId required | integer >= 1 Example: 41 Positive global customer identifier linked to the resolved shop. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| confirmed required | boolean Explicit affirmative confirmation for the grant or withdrawal represented by the endpoint. Value: true |
| source required | string [ 1 .. 80 ] characters ^[a-z][a-z0-9_.-]*$ Stable lower-case audit source key, for example |
{- "confirmed": true,
- "source": "string"
}{- "data": {
- "consented": true,
- "latestEvent": {
- "id": 1,
- "type": "granted",
- "source": "string",
- "email": "user@example.com",
- "recordedAt": "2019-08-24T14:15:22Z"
}
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Records an explicit selected-shop withdrawal event. The operation is idempotent while the latest event is already withdrawn.
| customerId required | integer >= 1 Example: 41 Positive global customer identifier linked to the resolved shop. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| confirmed required | boolean Explicit affirmative confirmation for the grant or withdrawal represented by the endpoint. Value: true |
| source required | string [ 1 .. 80 ] characters ^[a-z][a-z0-9_.-]*$ Stable lower-case audit source key, for example |
{- "confirmed": true,
- "source": "string"
}{- "data": {
- "consented": true,
- "latestEvent": {
- "id": 1,
- "type": "granted",
- "source": "string",
- "email": "user@example.com",
- "recordedAt": "2019-08-24T14:15:22Z"
}
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Partially updates registration status, customer number, group, language, and currency in the resolved shop. The resulting pricing context is derived from the selected customer group and currency; arbitrary price-list assignment is not accepted.
| customerId required | integer >= 1 Example: 41 Positive global customer identifier linked to the resolved shop. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| number | string or null <= 100 characters |
| status | string Enum: "active" "inactive" "guest" "pending_verification" "pending_approval" "pending_verification_approval" |
| customerGroupId | integer or null >= 1 |
| languageId | integer or null >= 1 |
| currencyId | integer or null >= 1 |
{- "number": "string",
- "status": "active",
- "customerGroupId": 1,
- "languageId": 1,
- "currencyId": 1
}{- "data": {
- "id": 1,
- "customerShopId": 1,
- "number": "string",
- "email": "user@example.com",
- "firstName": "string",
- "lastName": "string",
- "active": true,
- "guest": true,
- "status": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "shopLinkedAt": "2019-08-24T14:15:22Z",
- "shopUpdatedAt": "2019-08-24T14:15:22Z",
- "salutation": "string",
- "salutationKey": "string",
- "title": "string",
- "lastLoginAt": "2019-08-24T14:15:22Z",
- "shop": {
- "id": 1,
- "key": "string",
- "name": "string",
- "language": {
- "id": 1,
- "isoCode": "string",
- "locale": "string",
- "name": "string"
}, - "currency": {
- "id": 1,
- "isoCode": "string",
- "name": "string",
- "symbol": "string"
}
}, - "customerGroup": {
- "id": 1,
- "name": "string",
- "amountType": "string",
- "priceListId": 1,
- "priceListName": "string"
}, - "registration": {
- "id": 1,
- "number": "string",
- "status": "string",
- "active": true,
- "shop": {
- "id": 1,
- "key": "string",
- "name": "string",
- "language": {
- "id": 1,
- "isoCode": "string",
- "locale": "string",
- "name": "string"
}, - "currency": {
- "id": 1,
- "isoCode": "string",
- "name": "string",
- "symbol": "string"
}
}, - "customerGroup": {
- "id": 1,
- "name": "string",
- "amountType": "string",
- "priceListId": 1,
- "priceListName": "string"
}, - "pricingContext": {
- "amountType": "string",
- "priceListId": 0,
- "priceListName": "string",
- "currencyId": 0,
- "currencyIsoCode": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "addresses": [
- {
- "id": 1,
- "type": "string",
- "label": "string",
- "company": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "email": "user@example.com",
- "defaultBilling": true,
- "defaultShipping": true,
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns only customer registrations for active shops authorized for the API client.
| customerId required | integer >= 1 Example: 41 Positive global customer identifier linked to the resolved shop. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": [
- {
- "customerShopId": 1,
- "shopId": 1,
- "key": "string",
- "name": "string",
- "primary": true,
- "active": true,
- "languageId": 1,
- "currencyId": 1,
- "customerGroupId": 1,
- "number": "string",
- "status": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces the registration set within the API client's authorized shops while preserving registrations outside that boundary. The resolved shop registration must be retained.
| customerId required | integer >= 1 Example: 41 Positive global customer identifier linked to the resolved shop. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| shopIds required | Array of integers non-empty unique [ items >= 1 ] |
{- "shopIds": [
- 1
]
}{- "data": [
- {
- "customerShopId": 1,
- "shopId": 1,
- "key": "string",
- "name": "string",
- "primary": true,
- "active": true,
- "languageId": 1,
- "currencyId": 1,
- "customerGroupId": 1,
- "number": "string",
- "status": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns addresses available to one private customer through its link to the resolved shop. Company addresses and addresses belonging only to other customer-shop links are not exposed.
| customerId required | integer >= 1 Example: 41 Positive global customer identifier linked to the resolved shop. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": [
- {
- "id": 1,
- "type": "string",
- "label": "string",
- "company": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "email": "user@example.com",
- "defaultBilling": true,
- "defaultShipping": true,
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Creates an address for a customer visible through the resolved shop registration. Default roles use the dedicated defaults operation.
| customerId required | integer >= 1 Example: 41 Positive global customer identifier linked to the resolved shop. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| type | string <= 30 characters |
| label | string <= 120 characters |
| company | string <= 255 characters |
| salutationId | integer or null >= 1 |
| titleId | integer or null >= 1 |
| firstName | string <= 120 characters |
| lastName | string <= 120 characters |
| street required | string <= 255 characters |
| streetNumber | string <= 40 characters |
| addressLine2 | string <= 255 characters |
| postcode required | string <= 40 characters |
| city required | string <= 120 characters |
| state | string <= 120 characters |
| countryIsoCode required | string^[A-Za-z]{2}$ |
| phone | string <= 80 characters |
| mobile | string <= 80 characters |
string <email> <= 255 characters | |
| active | boolean |
{- "type": "string",
- "label": "string",
- "company": "string",
- "salutationId": 1,
- "titleId": 1,
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "email": "user@example.com",
- "active": true
}{- "data": {
- "id": 1,
- "type": "string",
- "label": "string",
- "company": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "email": "user@example.com",
- "defaultBilling": true,
- "defaultShipping": true,
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Partially updates an address visible through the customer's resolved shop registration.
| customerId required | integer >= 1 Example: 41 Positive global customer identifier linked to the resolved shop. |
| addressId required | integer >= 1 Example: 12 Stable customer-address identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| type | string <= 30 characters |
| label | string <= 120 characters |
| company | string <= 255 characters |
| salutationId | integer or null >= 1 |
| titleId | integer or null >= 1 |
| firstName | string <= 120 characters |
| lastName | string <= 120 characters |
| street | string <= 255 characters |
| streetNumber | string <= 40 characters |
| addressLine2 | string <= 255 characters |
| postcode | string <= 40 characters |
| city | string <= 120 characters |
| state | string <= 120 characters |
| countryIsoCode | string^[A-Za-z]{2}$ |
| phone | string <= 80 characters |
| mobile | string <= 80 characters |
string <email> <= 255 characters | |
| active | boolean |
{- "type": "string",
- "label": "string",
- "company": "string",
- "salutationId": 1,
- "titleId": 1,
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "email": "user@example.com",
- "active": true
}{- "data": {
- "id": 1,
- "type": "string",
- "label": "string",
- "company": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "email": "user@example.com",
- "defaultBilling": true,
- "defaultShipping": true,
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Deletes an address visible through the customer's resolved shop registration.
| customerId required | integer >= 1 Example: 41 Positive global customer identifier linked to the resolved shop. |
| addressId required | integer >= 1 Example: 12 Stable customer-address identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "id": 1,
- "deleted": true
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Atomically sets or clears the selected address as the customer's default billing or shipping address.
| customerId required | integer >= 1 Example: 41 Positive global customer identifier linked to the resolved shop. |
| addressId required | integer >= 1 Example: 12 Stable customer-address identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| billing | boolean |
| shipping | boolean |
{- "billing": true,
- "shipping": true
}{- "data": {
- "id": 1,
- "type": "string",
- "label": "string",
- "company": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "email": "user@example.com",
- "defaultBilling": true,
- "defaultShipping": true,
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces the complete connector-visible custom-field value set for an address visible through the customer's resolved-shop registration.
| customerId required | integer >= 1 Example: 41 Positive global customer identifier linked to the resolved shop. |
| addressId required | integer >= 1 Example: 12 Stable customer-address identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
required | object <= 100 properties Complete connector-visible value set keyed by custom-field key. Use null to clear a value; omitted connector-visible definitions are also cleared. Custom fields must not be used to store authentication secrets or sensitive payment credentials. |
{- "customFields": { }
}{- "data": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns B2B companies assigned to the resolved shop. The company record is shared, while its explicit company-shop assignment is the visibility boundary. Company members, addresses, custom fields, and other shop assignments are not included.
| page | integer >= 1 Default: 1 Example: page=2 One-based page number. |
| perPage | integer [ 1 .. 100 ] Default: 25 Example: perPage=50 Number of items returned per page. |
| sort | string^-?(id|number|name|email|createdAt|updatedAt)... Default: "id" Example: sort=-updatedAt,id Comma-separated company fields. Supported fields are |
| q | string <= 200 characters Example: q=muster Case-insensitive substring search across company number, name, addition, VAT ID, and email. |
| updatedAfter | string <date-time> ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}... Example: updatedAfter=2026-08-01T00:00:00Z Exclusive lower boundary for company |
| updatedBefore | string <date-time> ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}... Example: updatedBefore=2026-08-02T00:00:00Z Exclusive upper boundary for company |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": [
- {
- "id": 1,
- "number": "string",
- "name": "string",
- "addition": "string",
- "vatId": "string",
- "email": "user@example.com",
- "status": "string",
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Creates global company master data and assigns the company to the resolved shop.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| name required | string <= 255 characters |
| addition | string <= 255 characters |
| number | string <= 100 characters |
| vatId | string <= 100 characters |
string <email> <= 255 characters | |
| status | string Enum: "active" "inactive" |
| active | boolean |
| customerGroupId | integer or null >= 1 |
{- "name": "string",
- "addition": "string",
- "number": "string",
- "vatId": "string",
- "email": "user@example.com",
- "status": "active",
- "active": true,
- "customerGroupId": 1
}{- "data": {
- "id": 1,
- "number": "string",
- "name": "string",
- "addition": "string",
- "vatId": "string",
- "email": "user@example.com",
- "status": "string",
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "shop": {
- "id": 1,
- "key": "string",
- "name": "string",
- "primary": true,
- "active": true
}, - "customerGroup": {
- "id": 1,
- "name": "string",
- "amountType": "string",
- "priceListId": 1,
- "priceListName": "string"
}, - "addresses": [
- {
- "id": 1,
- "type": "string",
- "label": "string",
- "company": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "email": "user@example.com",
- "defaultBilling": true,
- "defaultShipping": true,
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}
], - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns one B2B company assigned to the resolved shop, including the selected shop, customer-group pricing context, connector-visible company custom fields, and addresses owned by the company. Company members and other shop assignments are not exposed. Credentials, reset data, and sensitive payment credentials are never part of this representation.
| companyId required | integer >= 1 Example: 51 Positive company identifier assigned to the resolved shop. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "id": 1,
- "number": "string",
- "name": "string",
- "addition": "string",
- "vatId": "string",
- "email": "user@example.com",
- "status": "string",
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "shop": {
- "id": 1,
- "key": "string",
- "name": "string",
- "primary": true,
- "active": true
}, - "customerGroup": {
- "id": 1,
- "name": "string",
- "amountType": "string",
- "priceListId": 1,
- "priceListName": "string"
}, - "addresses": [
- {
- "id": 1,
- "type": "string",
- "label": "string",
- "company": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "email": "user@example.com",
- "defaultBilling": true,
- "defaultShipping": true,
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}
], - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Partially updates global master data for a company visible through the resolved shop assignment.
| companyId required | integer >= 1 Example: 51 Positive company identifier assigned to the resolved shop. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| name | string <= 255 characters |
| addition | string <= 255 characters |
| number | string <= 100 characters |
| vatId | string <= 100 characters |
string <email> <= 255 characters | |
| status | string Enum: "active" "inactive" |
| active | boolean |
| customerGroupId | integer or null >= 1 |
{- "name": "string",
- "addition": "string",
- "number": "string",
- "vatId": "string",
- "email": "user@example.com",
- "status": "active",
- "active": true,
- "customerGroupId": 1
}{- "data": {
- "id": 1,
- "number": "string",
- "name": "string",
- "addition": "string",
- "vatId": "string",
- "email": "user@example.com",
- "status": "string",
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "shop": {
- "id": 1,
- "key": "string",
- "name": "string",
- "primary": true,
- "active": true
}, - "customerGroup": {
- "id": 1,
- "name": "string",
- "amountType": "string",
- "priceListId": 1,
- "priceListName": "string"
}, - "addresses": [
- {
- "id": 1,
- "type": "string",
- "label": "string",
- "company": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "email": "user@example.com",
- "defaultBilling": true,
- "defaultShipping": true,
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}
], - "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces the complete connector-visible custom-field value set for a company assigned to the resolved shop. Omitted connector-visible definitions are cleared; non-connector definitions are untouched.
| companyId required | integer >= 1 Example: 51 Positive company identifier assigned to the resolved shop. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
required | object <= 100 properties Complete connector-visible value set keyed by custom-field key. Use null to clear a value; omitted connector-visible definitions are also cleared. Custom fields must not be used to store authentication secrets or sensitive payment credentials. |
{- "customFields": { }
}{- "data": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Creates an address for a company assigned to the resolved shop.
| companyId required | integer >= 1 Example: 51 Positive company identifier assigned to the resolved shop. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| type | string <= 30 characters |
| label | string <= 120 characters |
| company | string <= 255 characters |
| salutationId | integer or null >= 1 |
| titleId | integer or null >= 1 |
| firstName | string <= 120 characters |
| lastName | string <= 120 characters |
| street required | string <= 255 characters |
| streetNumber | string <= 40 characters |
| addressLine2 | string <= 255 characters |
| postcode required | string <= 40 characters |
| city required | string <= 120 characters |
| state | string <= 120 characters |
| countryIsoCode required | string^[A-Za-z]{2}$ |
| phone | string <= 80 characters |
| mobile | string <= 80 characters |
string <email> <= 255 characters | |
| active | boolean |
{- "type": "string",
- "label": "string",
- "company": "string",
- "salutationId": 1,
- "titleId": 1,
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "email": "user@example.com",
- "active": true
}{- "data": {
- "id": 1,
- "type": "string",
- "label": "string",
- "company": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "email": "user@example.com",
- "defaultBilling": true,
- "defaultShipping": true,
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Fully replaces the writable fields of a company address visible through the resolved shop.
| companyId required | integer >= 1 Example: 51 Positive company identifier assigned to the resolved shop. |
| addressId required | integer >= 1 Example: 22 Positive address identifier owned by the company. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| type | string <= 30 characters |
| label | string <= 120 characters |
| company | string <= 255 characters |
| salutationId | integer or null >= 1 |
| titleId | integer or null >= 1 |
| firstName | string <= 120 characters |
| lastName | string <= 120 characters |
| street required | string <= 255 characters |
| streetNumber | string <= 40 characters |
| addressLine2 | string <= 255 characters |
| postcode required | string <= 40 characters |
| city required | string <= 120 characters |
| state | string <= 120 characters |
| countryIsoCode required | string^[A-Za-z]{2}$ |
| phone | string <= 80 characters |
| mobile | string <= 80 characters |
string <email> <= 255 characters | |
| active | boolean |
{- "type": "string",
- "label": "string",
- "company": "string",
- "salutationId": 1,
- "titleId": 1,
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "email": "user@example.com",
- "active": true
}{- "data": {
- "id": 1,
- "type": "string",
- "label": "string",
- "company": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "email": "user@example.com",
- "defaultBilling": true,
- "defaultShipping": true,
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Deletes an address belonging to the selected company when it is visible through the resolved shop.
| companyId required | integer >= 1 Example: 51 Positive company identifier assigned to the resolved shop. |
| addressId required | integer >= 1 Example: 22 Positive address identifier owned by the company. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "id": 1,
- "deleted": true
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Atomically sets or clears the selected address as the company's default billing or shipping address.
| companyId required | integer >= 1 Example: 51 Positive company identifier assigned to the resolved shop. |
| addressId required | integer >= 1 Example: 22 Positive address identifier owned by the company. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| billing | boolean |
| shipping | boolean |
{- "billing": true,
- "shipping": true
}{- "data": {
- "id": 1,
- "type": "string",
- "label": "string",
- "company": "string",
- "salutation": "string",
- "firstName": "string",
- "lastName": "string",
- "street": "string",
- "streetNumber": "string",
- "addressLine2": "string",
- "postcode": "string",
- "city": "string",
- "state": "string",
- "countryIsoCode": "string",
- "phone": "string",
- "mobile": "string",
- "email": "user@example.com",
- "defaultBilling": true,
- "defaultShipping": true,
- "active": true,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "customFields": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces the complete connector-visible custom-field value set for a company address visible through the resolved shop.
| companyId required | integer >= 1 Example: 51 Positive company identifier assigned to the resolved shop. |
| addressId required | integer >= 1 Example: 22 Positive address identifier owned by the company. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
required | object <= 100 properties Complete connector-visible value set keyed by custom-field key. Use null to clear a value; omitted connector-visible definitions are also cleared. Custom fields must not be used to store authentication secrets or sensitive payment credentials. |
{- "customFields": { }
}{- "data": [
- {
- "setKey": "string",
- "setLabel": "string",
- "key": "string",
- "label": "string",
- "type": "string",
- "value": null,
- "displayValue": "string",
- "hasValue": true
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Lists the global memberships of a company assigned to the resolved shop. Selected-shop registration context is included per customer when available.
| companyId required | integer >= 1 Example: 51 Positive company identifier assigned to the resolved shop. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": [
- {
- "id": 1,
- "role": "string",
- "primaryContact": true,
- "canOrder": true,
- "customer": {
- "id": 1,
- "number": "string",
- "email": "user@example.com",
- "firstName": "string",
- "lastName": "string",
- "active": true,
- "guest": true,
- "registeredInShop": true,
- "status": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Adds a customer registered in the resolved shop to the global company membership.
| companyId required | integer >= 1 Example: 51 Positive company identifier assigned to the resolved shop. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| customerId required | integer >= 1 |
| role | string [ 1 .. 60 ] characters Default: "member" |
| primaryContact | boolean Default: false |
| canOrder | boolean Default: true |
{- "customerId": 1,
- "role": "member",
- "primaryContact": false,
- "canOrder": true
}{- "data": {
- "id": 1,
- "role": "string",
- "primaryContact": true,
- "canOrder": true,
- "customer": {
- "id": 1,
- "number": "string",
- "email": "user@example.com",
- "firstName": "string",
- "lastName": "string",
- "active": true,
- "guest": true,
- "registeredInShop": true,
- "status": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Partially updates the role, primary-contact state, or ordering permission of a company member.
| companyId required | integer >= 1 Example: 51 Positive company identifier assigned to the resolved shop. |
| memberId required | integer >= 1 Example: 33 Positive company-membership identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| role | string [ 1 .. 60 ] characters |
| primaryContact | boolean |
| canOrder | boolean |
{- "role": "string",
- "primaryContact": true,
- "canOrder": true
}{- "data": {
- "id": 1,
- "role": "string",
- "primaryContact": true,
- "canOrder": true,
- "customer": {
- "id": 1,
- "number": "string",
- "email": "user@example.com",
- "firstName": "string",
- "lastName": "string",
- "active": true,
- "guest": true,
- "registeredInShop": true,
- "status": "string"
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Removes the selected global membership from the company without deleting the customer identity.
| companyId required | integer >= 1 Example: 51 Positive company identifier assigned to the resolved shop. |
| memberId required | integer >= 1 Example: 33 Positive company-membership identifier. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "id": 1,
- "deleted": true
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns only assignments to active shops authorized for the API client.
| companyId required | integer >= 1 Example: 51 Positive company identifier assigned to the resolved shop. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": [
- {
- "shopId": 1,
- "key": "string",
- "name": "string",
- "primary": true,
- "active": true
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces the assignment set within the API client's authorized shops while preserving assignments outside that boundary. The resolved and primary shop assignments must be retained.
| companyId required | integer >= 1 Example: 51 Positive company identifier assigned to the resolved shop. |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| shopIds required | Array of integers non-empty unique [ items >= 1 ] |
{- "shopIds": [
- 1
]
}{- "data": [
- {
- "shopId": 1,
- "key": "string",
- "name": "string",
- "primary": true,
- "active": true
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Lists only coupons whose adjustment rule is explicitly scoped to the resolved shop. Requires marketing:read.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| page | integer >= 1 Default: 1 Example: page=2 One-based page number. |
| perPage | integer [ 1 .. 100 ] Default: 25 Example: perPage=50 Number of items returned per page. |
| q | string <= 200 characters Example: q=running shoe Free-text search term. Search behavior is endpoint-specific. |
| status | string Default: "all" Enum: "all" "draft" "active" "paused" "archived" |
{- "data": [
- {
- "id": 1,
- "name": "string",
- "status": "string",
- "active": true,
- "codeMode": "string",
- "amountMode": "string",
- "amountValue": "string",
- "amountType": "string",
- "currency": "string",
- "minimumCartSubtotal": "string",
- "maxTotalRedemptions": 0,
- "maxRedemptionsPerCustomer": 0,
- "redemptionCount": 0,
- "codeCount": 0,
- "shopId": 1,
- "validFrom": "2019-08-24T14:15:22Z",
- "validTo": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Creates a coupon and its checkout adjustment rule with an explicit scope for the resolved shop. The resolved currency is used for fixed amounts. Requires marketing:write.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| name | string [ 1 .. 190 ] characters |
| status | string Enum: "draft" "active" "paused" "archived" |
| codeMode | string Enum: "public" "generated" |
| amountMode | string Enum: "fixed" "percentage" |
| amountValue | number > 0 |
| minimumCartSubtotal | number >= 0 |
| maxTotalRedemptions | integer >= 0 |
| maxRedemptionsPerCustomer | integer >= 0 |
| validFrom | string or null <date-time> |
| validTo | string or null <date-time> |
{- "name": "string",
- "status": "draft",
- "codeMode": "public",
- "amountMode": "fixed",
- "amountValue": 1,
- "minimumCartSubtotal": 0,
- "maxTotalRedemptions": 0,
- "maxRedemptionsPerCustomer": 0,
- "validFrom": "2019-08-24T14:15:22Z",
- "validTo": "2019-08-24T14:15:22Z"
}{- "data": {
- "id": 1,
- "name": "string",
- "status": "string",
- "active": true,
- "codeMode": "string",
- "amountMode": "string",
- "amountValue": "string",
- "amountType": "string",
- "currency": "string",
- "minimumCartSubtotal": "string",
- "maxTotalRedemptions": 0,
- "maxRedemptionsPerCustomer": 0,
- "redemptionCount": 0,
- "codeCount": 0,
- "shopId": 1,
- "validFrom": "2019-08-24T14:15:22Z",
- "validTo": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Requires marketing:read and exact resolved-shop scope.
| couponId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "id": 1,
- "name": "string",
- "status": "string",
- "active": true,
- "codeMode": "string",
- "amountMode": "string",
- "amountValue": "string",
- "amountType": "string",
- "currency": "string",
- "minimumCartSubtotal": "string",
- "maxTotalRedemptions": 0,
- "maxRedemptionsPerCustomer": 0,
- "redemptionCount": 0,
- "codeCount": 0,
- "shopId": 1,
- "validFrom": "2019-08-24T14:15:22Z",
- "validTo": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Partially updates the coupon and its shop-scoped adjustment rule. Activation requires at least one active code. Requires marketing:write.
| couponId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| name | string [ 1 .. 190 ] characters |
| status | string Enum: "draft" "active" "paused" "archived" |
| codeMode | string Enum: "public" "generated" |
| amountMode | string Enum: "fixed" "percentage" |
| amountValue | number > 0 |
| minimumCartSubtotal | number >= 0 |
| maxTotalRedemptions | integer >= 0 |
| maxRedemptionsPerCustomer | integer >= 0 |
| validFrom | string or null <date-time> |
| validTo | string or null <date-time> |
{- "name": "string",
- "status": "draft",
- "codeMode": "public",
- "amountMode": "fixed",
- "amountValue": 1,
- "minimumCartSubtotal": 0,
- "maxTotalRedemptions": 0,
- "maxRedemptionsPerCustomer": 0,
- "validFrom": "2019-08-24T14:15:22Z",
- "validTo": "2019-08-24T14:15:22Z"
}{- "data": {
- "id": 1,
- "name": "string",
- "status": "string",
- "active": true,
- "codeMode": "string",
- "amountMode": "string",
- "amountValue": "string",
- "amountType": "string",
- "currency": "string",
- "minimumCartSubtotal": "string",
- "maxTotalRedemptions": 0,
- "maxRedemptionsPerCustomer": 0,
- "redemptionCount": 0,
- "codeCount": 0,
- "shopId": 1,
- "validFrom": "2019-08-24T14:15:22Z",
- "validTo": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Requires marketing:read and exact coupon shop scope.
| couponId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| page | integer >= 1 Default: 1 Example: page=2 One-based page number. |
| perPage | integer [ 1 .. 100 ] Default: 25 Example: perPage=50 Number of items returned per page. |
| q | string <= 200 characters Example: q=running shoe Free-text search term. Search behavior is endpoint-specific. |
| status | string Default: "all" Enum: "all" "active" "disabled" "used" |
{- "data": [
- {
- "id": 1,
- "couponId": 1,
- "code": "string",
- "status": "string",
- "transferable": true,
- "maxRedemptions": 0,
- "redemptionCount": 0,
- "customerId": 0,
- "lastRedeemedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Creates one unique code, optionally assigned to a customer registered in the resolved shop. Requires marketing:write.
| couponId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| code required | string^[A-Za-z0-9_-]{1,120}$ |
| status | string Enum: "active" "disabled" |
| isTransferable | boolean |
| maxRedemptions | integer >= 0 |
| customerId | integer or null >= 1 |
{- "code": "string",
- "status": "active",
- "isTransferable": true,
- "maxRedemptions": 0,
- "customerId": 1
}{- "data": {
- "id": 1,
- "couponId": 1,
- "code": "string",
- "status": "string",
- "transferable": true,
- "maxRedemptions": 0,
- "redemptionCount": 0,
- "customerId": 0,
- "lastRedeemedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Updates bounded code status, transferability, or usage limit fields. Code values and customer assignments use separate contracts. Requires marketing:write.
| couponId required | integer >= 1 |
| couponCodeId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| status | string Enum: "active" "disabled" |
| isTransferable | boolean |
| maxRedemptions | integer >= 0 |
{- "status": "active",
- "isTransferable": true,
- "maxRedemptions": 0
}{- "data": {
- "id": 1,
- "couponId": 1,
- "code": "string",
- "status": "string",
- "transferable": true,
- "maxRedemptions": 0,
- "redemptionCount": 0,
- "customerId": 0,
- "lastRedeemedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces the code's customer assignment with a customer registered in the resolved shop. Requires marketing:write.
| couponId required | integer >= 1 |
| couponCodeId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| customerId required | integer >= 1 |
{- "customerId": 1
}{- "data": {
- "id": 1,
- "couponId": 1,
- "code": "string",
- "status": "string",
- "transferable": true,
- "maxRedemptions": 0,
- "redemptionCount": 0,
- "customerId": 0,
- "lastRedeemedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Requires marketing:write and exact coupon shop scope.
| couponId required | integer >= 1 |
| couponCodeId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "id": 1,
- "couponId": 1,
- "code": "string",
- "status": "string",
- "transferable": true,
- "maxRedemptions": 0,
- "redemptionCount": 0,
- "customerId": 0,
- "lastRedeemedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Lists lifecycle-written redemption history. This resource is read-only; coupon application and redemption remain authoritative in checkout and order placement. Requires marketing:read.
| couponId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| page | integer >= 1 Default: 1 Example: page=2 One-based page number. |
| perPage | integer [ 1 .. 100 ] Default: 25 Example: perPage=50 Number of items returned per page. |
{- "data": [
- {
- "id": 1,
- "couponId": 1,
- "couponCodeId": 1,
- "customerId": 0,
- "orderId": 0,
- "code": "string",
- "status": "string",
- "amountNet": "string",
- "amountGross": "string",
- "currency": "string",
- "redeemedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Lists vouchers explicitly assigned to the resolved shop. Customer profile data and internal notes are not exposed. Requires marketing:read.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| page | integer >= 1 Default: 1 Example: page=2 One-based page number. |
| perPage | integer [ 1 .. 100 ] Default: 25 Example: perPage=50 Number of items returned per page. |
| q | string <= 200 characters Example: q=running shoe Free-text search term. Search behavior is endpoint-specific. |
| status | string Default: "all" Enum: "all" "draft" "active" "paused" "archived" |
{- "data": [
- {
- "id": 1,
- "shopId": 1,
- "customerId": 1,
- "code": "string",
- "status": "draft",
- "active": true,
- "transferable": true,
- "initialAmount": "string",
- "remainingAmount": "string",
- "currency": "string",
- "redemptionCount": 0,
- "validFrom": "2019-08-24T14:15:22Z",
- "validTo": "2019-08-24T14:15:22Z",
- "lastRedeemedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Creates a manual voucher, its initial credit, and its explicit resolved-shop assignment in one transaction. The resolved currency is immutable for the voucher. Requires marketing:write.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| code required | string^[A-Za-z0-9_-]{1,120}$ |
| status | string Default: "draft" Enum: "draft" "active" "paused" "archived" |
| initialAmount required | number decimal places <= 4 > 0 |
| isTransferable | boolean Default: true |
| customerId | integer >= 1 Optional registered customer in the resolved shop. |
| validFrom | string ISO-compatible date-time, or an empty string for no lower bound. |
| validTo | string ISO-compatible date-time, or an empty string for no upper bound. |
{- "code": "string",
- "status": "draft",
- "initialAmount": 1,
- "isTransferable": true,
- "customerId": 1,
- "validFrom": "string",
- "validTo": "string"
}{- "data": {
- "id": 1,
- "shopId": 1,
- "customerId": 1,
- "code": "string",
- "status": "draft",
- "active": true,
- "transferable": true,
- "initialAmount": "string",
- "remainingAmount": "string",
- "currency": "string",
- "redemptionCount": 0,
- "validFrom": "2019-08-24T14:15:22Z",
- "validTo": "2019-08-24T14:15:22Z",
- "lastRedeemedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Requires marketing:read and exact resolved-shop assignment.
| voucherId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "id": 1,
- "shopId": 1,
- "customerId": 1,
- "code": "string",
- "status": "draft",
- "active": true,
- "transferable": true,
- "initialAmount": "string",
- "remainingAmount": "string",
- "currency": "string",
- "redemptionCount": 0,
- "validFrom": "2019-08-24T14:15:22Z",
- "validTo": "2019-08-24T14:15:22Z",
- "lastRedeemedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Updates bounded lifecycle, transferability, and validity fields. Code, currency, initial amount, and remaining balance are immutable here; balance changes use the movement endpoint. Requires marketing:write.
| voucherId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| status | string Enum: "draft" "active" "paused" "archived" |
| isTransferable | boolean |
| validFrom | string ISO-compatible date-time, or an empty string to clear the bound. |
| validTo | string ISO-compatible date-time, or an empty string to clear the bound. |
{- "status": "draft",
- "isTransferable": true,
- "validFrom": "string",
- "validTo": "string"
}{- "data": {
- "id": 1,
- "shopId": 1,
- "customerId": 1,
- "code": "string",
- "status": "draft",
- "active": true,
- "transferable": true,
- "initialAmount": "string",
- "remainingAmount": "string",
- "currency": "string",
- "redemptionCount": 0,
- "validFrom": "2019-08-24T14:15:22Z",
- "validTo": "2019-08-24T14:15:22Z",
- "lastRedeemedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces the customer assignment with a registered customer in the resolved shop and makes the voucher non-transferable. Requires marketing:write.
| voucherId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| customerId required | integer >= 1 |
{- "customerId": 1
}{- "data": {
- "id": 1,
- "shopId": 1,
- "customerId": 1,
- "code": "string",
- "status": "draft",
- "active": true,
- "transferable": true,
- "initialAmount": "string",
- "remainingAmount": "string",
- "currency": "string",
- "redemptionCount": 0,
- "validFrom": "2019-08-24T14:15:22Z",
- "validTo": "2019-08-24T14:15:22Z",
- "lastRedeemedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Clears the assignment and restores transferability. Requires marketing:write and exact resolved-shop assignment.
| voucherId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "id": 1,
- "shopId": 1,
- "customerId": 1,
- "code": "string",
- "status": "draft",
- "active": true,
- "transferable": true,
- "initialAmount": "string",
- "remainingAmount": "string",
- "currency": "string",
- "redemptionCount": 0,
- "validFrom": "2019-08-24T14:15:22Z",
- "validTo": "2019-08-24T14:15:22Z",
- "lastRedeemedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Requires marketing:read and exact resolved-shop assignment.
| voucherId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| page | integer >= 1 Default: 1 Example: page=2 One-based page number. |
| perPage | integer [ 1 .. 100 ] Default: 25 Example: perPage=50 Number of items returned per page. |
{- "data": [
- {
- "id": 1,
- "voucherId": 1,
- "type": "initial_credit",
- "amountDelta": "string",
- "balanceAfter": "string",
- "currency": "string",
- "note": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Applies a transaction-safe credit or debit. Idempotency is isolated per API client; replaying the same key and body returns the original movement, while reusing a key for a different request returns 409. Requires marketing:write.
| voucherId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| Idempotency-Key required | string [ 1 .. 190 ] characters ^[A-Za-z0-9][A-Za-z0-9._:-]{0,189}$ Example: inventory-request-501 Caller-generated identifier that makes one mutation safe to retry. Keys are scoped to the authenticated API client and must not be reused for different normalized request data. |
| type required | string Enum: "credit" "debit" |
| amount required | number decimal places <= 4 > 0 |
| note | string <= 1000 characters |
{- "type": "credit",
- "amount": 1,
- "note": "string"
}{- "data": {
- "id": 1,
- "voucherId": 1,
- "type": "initial_credit",
- "amountDelta": "string",
- "balanceAfter": "string",
- "currency": "string",
- "note": "string",
- "createdAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Lists lifecycle-written redemption history. This resource is read-only; voucher application and redemption remain authoritative in checkout and order placement. Requires marketing:read.
| voucherId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| page | integer >= 1 Default: 1 Example: page=2 One-based page number. |
| perPage | integer [ 1 .. 100 ] Default: 25 Example: perPage=50 Number of items returned per page. |
{- "data": [
- {
- "id": 1,
- "voucherId": 1,
- "customerId": 1,
- "orderId": 1,
- "status": "string",
- "amount": "string",
- "balanceBefore": "string",
- "balanceAfter": "string",
- "currency": "string",
- "redeemedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Lists price actions targeted only to the resolved shop. Global and multi-shop actions are outside this API contract. Requires marketing:read.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| page | integer >= 1 Default: 1 Example: page=2 One-based page number. |
| perPage | integer [ 1 .. 100 ] Default: 25 Example: perPage=50 Number of items returned per page. |
| q | string <= 200 characters Example: q=running shoe Free-text search term. Search behavior is endpoint-specific. |
| status | string Default: "all" Enum: "all" "draft" "active" "paused" "archived" |
{- "data": [
- {
- "id": 1,
- "name": "string",
- "status": "draft",
- "active": true,
- "shopIds": [
- 1
], - "productStatusFilter": "all",
- "priceChange": {
- "type": "percentage_reduction",
- "value": "string",
- "currencyId": 1
}, - "schedule": {
- "validFrom": "2019-08-24T14:15:22Z",
- "validTo": "2019-08-24T14:15:22Z"
}, - "priority": 0,
- "targets": {
- "productIds": [
- 1
], - "categoryIds": [
- 1
], - "manufacturerIds": [
- 1
]
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Creates an action targeted only to the resolved shop. Empty product, category, and manufacturer target arrays mean all matching products in that shop. Fixed reductions use the resolved currency. Requires marketing:write.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| name | string [ 1 .. 190 ] characters |
| status | string Enum: "draft" "active" "paused" "archived" |
| productStatusFilter | string Enum: "all" "active" "inactive" |
| priceChangeType | string Enum: "percentage_reduction" "fixed_reduction" |
| changeValue | number > 0 |
| validFrom | string or null <date-time> |
| validTo | string or null <date-time> |
| priority | integer >= 0 |
| shopIds | Array of integers = 1 items [ items >= 1 ] If supplied, must contain only the resolved shop ID. |
| productIds | Array of integers unique [ items >= 1 ] |
| categoryIds | Array of integers unique [ items >= 1 ] |
| manufacturerIds | Array of integers unique [ items >= 1 ] |
{- "name": "string",
- "status": "draft",
- "productStatusFilter": "all",
- "priceChangeType": "percentage_reduction",
- "changeValue": 1,
- "validFrom": "2019-08-24T14:15:22Z",
- "validTo": "2019-08-24T14:15:22Z",
- "priority": 0,
- "shopIds": [
- 1
], - "productIds": [
- 1
], - "categoryIds": [
- 1
], - "manufacturerIds": [
- 1
]
}{- "data": {
- "id": 1,
- "name": "string",
- "status": "draft",
- "active": true,
- "shopIds": [
- 1
], - "productStatusFilter": "all",
- "priceChange": {
- "type": "percentage_reduction",
- "value": "string",
- "currencyId": 1
}, - "schedule": {
- "validFrom": "2019-08-24T14:15:22Z",
- "validTo": "2019-08-24T14:15:22Z"
}, - "priority": 0,
- "targets": {
- "productIds": [
- 1
], - "categoryIds": [
- 1
], - "manufacturerIds": [
- 1
]
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Requires marketing:read and exact resolved-shop scope.
| priceActionId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "id": 1,
- "name": "string",
- "status": "draft",
- "active": true,
- "shopIds": [
- 1
], - "productStatusFilter": "all",
- "priceChange": {
- "type": "percentage_reduction",
- "value": "string",
- "currencyId": 1
}, - "schedule": {
- "validFrom": "2019-08-24T14:15:22Z",
- "validTo": "2019-08-24T14:15:22Z"
}, - "priority": 0,
- "targets": {
- "productIds": [
- 1
], - "categoryIds": [
- 1
], - "manufacturerIds": [
- 1
]
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Partially updates configuration, schedule, and catalog targets while retaining exact resolved-shop scope. Requires marketing:write.
| priceActionId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
| currency | string^[A-Za-z]{3}$ Example: currency=CHF Case-insensitive ISO 4217 code of an active currency. When omitted, the selected shop's configured default currency is used. |
| name | string [ 1 .. 190 ] characters |
| status | string Enum: "draft" "active" "paused" "archived" |
| productStatusFilter | string Enum: "all" "active" "inactive" |
| priceChangeType | string Enum: "percentage_reduction" "fixed_reduction" |
| changeValue | number > 0 |
| validFrom | string or null <date-time> |
| validTo | string or null <date-time> |
| priority | integer >= 0 |
| shopIds | Array of integers = 1 items [ items >= 1 ] If supplied, must contain only the resolved shop ID. |
| productIds | Array of integers unique [ items >= 1 ] |
| categoryIds | Array of integers unique [ items >= 1 ] |
| manufacturerIds | Array of integers unique [ items >= 1 ] |
{- "name": "string",
- "status": "draft",
- "productStatusFilter": "all",
- "priceChangeType": "percentage_reduction",
- "changeValue": 1,
- "validFrom": "2019-08-24T14:15:22Z",
- "validTo": "2019-08-24T14:15:22Z",
- "priority": 0,
- "shopIds": [
- 1
], - "productIds": [
- 1
], - "categoryIds": [
- 1
], - "manufacturerIds": [
- 1
]
}{- "data": {
- "id": 1,
- "name": "string",
- "status": "draft",
- "active": true,
- "shopIds": [
- 1
], - "productStatusFilter": "all",
- "priceChange": {
- "type": "percentage_reduction",
- "value": "string",
- "currencyId": 1
}, - "schedule": {
- "validFrom": "2019-08-24T14:15:22Z",
- "validTo": "2019-08-24T14:15:22Z"
}, - "priority": 0,
- "targets": {
- "productIds": [
- 1
], - "categoryIds": [
- 1
], - "manufacturerIds": [
- 1
]
}, - "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Lists stored action-price calculation results for the resolved shop. This resource is read-only; price actions are applied dynamically by the pricing resolver and do not overwrite base prices. Requires marketing:read.
| priceActionId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| page | integer >= 1 Default: 1 Example: page=2 One-based page number. |
| perPage | integer [ 1 .. 100 ] Default: 25 Example: perPage=50 Number of items returned per page. |
{- "data": [
- {
- "id": 1,
- "priceActionId": 1,
- "productId": 1,
- "productVariantId": 1,
- "shopId": 1,
- "currencyId": 1,
- "sourceAmount": "string",
- "actionPriceAmount": "string",
- "comparePriceAmount": "string",
- "priceChange": {
- "type": "percentage_reduction",
- "value": "string"
}, - "status": "string",
- "skipReason": "string",
- "appliedAt": "2019-08-24T14:15:22Z",
- "revertedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Lists active, non-submitted carts with items whose last activity is older than the requested inactivity window and which have not produced an order. Results are restricted to the resolved shop and omit cart tokens, contact details, addresses, and checkout codes. Requires marketing:read.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| page | integer >= 1 Default: 1 Example: page=2 One-based page number. |
| perPage | integer [ 1 .. 100 ] Default: 25 Example: perPage=50 Number of items returned per page. |
| checkoutState | string Default: "all" Enum: "all" "cart" "customer" "addresses" "shipping" "payment" "review" |
| inactiveForSeconds | integer [ 300 .. 2592000 ] Default: 1800 |
{- "data": [
- {
- "id": 1,
- "shopId": 1,
- "checkoutState": "cart",
- "customerMode": "string",
- "contactType": "company",
- "contactAvailable": true,
- "language": "string",
- "currency": "string",
- "itemCount": 1,
- "quantityTotal": "string",
- "cartValue": "string",
- "pricingGapCount": 0,
- "lastActivityAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns the privacy-bounded cart summary and item snapshots only when the cart belongs to the resolved shop and satisfies the abandoned-cart definition. Requires marketing:read.
| cartId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| inactiveForSeconds | integer [ 300 .. 2592000 ] Default: 1800 |
{- "data": {
- "id": 1,
- "shopId": 1,
- "checkoutState": "cart",
- "customerMode": "string",
- "contactType": "company",
- "contactAvailable": true,
- "language": "string",
- "currency": "string",
- "itemCount": 1,
- "quantityTotal": "string",
- "cartValue": "string",
- "pricingGapCount": 0,
- "lastActivityAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z",
- "items": [
- {
- "id": 1,
- "productId": 1,
- "productVariantId": 1,
- "type": "string",
- "sku": "string",
- "name": "string",
- "quantity": "string",
- "unitPrice": "string",
- "lineTotal": "string",
- "currency": "string",
- "pricingStatus": "string",
- "pricedAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns the active shops explicitly assigned to the authenticated API
client. This discovery operation requires the settings:read scope but
does not resolve a Commerce request context, so it never requires a
shopId parameter. Inactive and unassigned shops are omitted.
| page | integer >= 1 Default: 1 Example: page=2 One-based page number. |
| perPage | integer [ 1 .. 100 ] Default: 25 Example: perPage=50 Number of items returned per page. |
{- "data": [
- {
- "id": 2,
- "key": "main-store",
- "name": "Main Store",
- "defaultLanguageIsoCode": "de",
- "defaultCurrencyIsoCode": "CHF"
}
], - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05",
- "pagination": {
- "page": 1,
- "perPage": 25,
- "totalItems": 1,
- "totalPages": 1
}
}, - "errors": [ ]
}Returns presentation-safe metadata for one active shop explicitly
assigned to the authenticated API client. The operation requires
settings:read but does not resolve a Commerce request context.
Missing, inactive, and unassigned shop IDs all return the same
404 shop_not_found response.
| shopId required | integer [ 1 .. 2147483647 ] Examples:
Positive shop identifier assigned to the API client. |
{- "data": {
- "id": 2,
- "key": "main-store",
- "name": "Main Store",
- "defaultLanguageIsoCode": "de",
- "defaultCurrencyIsoCode": "CHF",
- "storefrontThemeKey": "default",
- "primary": true,
- "defaultTimezoneIdentifier": "Europe/Zurich",
- "priceFormatLocale": "de_CH"
}, - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns the complete active storefront-language registry after the
requested active shop has been verified as assigned to the API client.
Storefront languages are global master data; the selected shop only
determines which language is marked default. The operation requires
settings:read, does not resolve a Commerce request context, and
accepts no query parameters.
| shopId required | integer [ 1 .. 2147483647 ] Examples:
Positive shop identifier assigned to the API client. |
{- "data": [
- {
- "id": 2,
- "isoCode": "de",
- "locale": "de_CH",
- "name": "German",
- "nativeName": "Deutsch",
- "active": true,
- "adminEnabled": true,
- "storefrontEnabled": true,
- "default": true
}
], - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns the complete active currency registry after the requested active
shop has been verified as assigned to the API client. Currencies are
global master data; the selected shop only determines which currency is
marked default. globalDefault remains the global currency setting.
The operation requires settings:read, does not resolve a Commerce
request context, and accepts no query parameters.
| shopId required | integer [ 1 .. 2147483647 ] Examples:
Positive shop identifier assigned to the API client. |
{- "data": [
- {
- "id": 3,
- "isoCode": "CHF",
- "name": "Swiss franc",
- "symbol": "CHF",
- "decimalPlaces": 2,
- "roundingIncrement": 0.05,
- "active": true,
- "globalDefault": true,
- "default": true
}
], - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns the complete active country registry after the requested active
shop has been verified as assigned to the API client. Countries are
global master data; the selected shop supplies the preferred language
for country names unless an active storefront language is requested.
Names fall back to the global default language and then the base
country name. The operation requires settings:read, does not resolve
a Commerce request context, and accepts only the language query
parameter.
| shopId required | integer [ 1 .. 2147483647 ] Examples:
Positive shop identifier assigned to the API client. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
{- "data": [
- {
- "id": 41,
- "isoCode": "CH",
- "isoCode3": "CHE",
- "name": "Schweiz",
- "active": true,
- "sortOrder": 10
}
], - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns the active global shipping-zone registry and every assigned
country after the requested active shop has been verified as assigned
to the API client. The shop authorizes the request and resolves the
language context; it does not filter the global zone registry. Names,
descriptions, and country names resolve through an explicitly
requested active storefront language, or the shop default language
when omitted, then the global default language, and finally the base
value. The operation requires settings:read, does not resolve a
Commerce request context, and accepts only the language query
parameter. It does not expose shipping-method assignments, cost rules,
rates, currencies, or checkout availability.
| shopId required | integer [ 1 .. 2147483647 ] Examples:
Positive shop identifier assigned to the API client. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
{- "data": [
- {
- "id": 6,
- "key": "switzerland",
- "name": "Switzerland",
- "description": "Domestic delivery.",
- "position": 2,
- "active": true,
- "countries": [
- {
- "id": 41,
- "isoCode": "CH",
- "name": "Switzerland"
}
]
}
], - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns the active shipping methods explicitly assigned to the requested
active shop after it has been verified as assigned to the API client.
Results use the selected shop assignment order. Names, descriptions,
and delivery-time names resolve through an explicitly requested active
storefront language, or the shop default language when omitted, then
the global default language, and finally the base value. The operation
requires settings:read, does not resolve a Commerce request context,
and accepts only the language query parameter. It does not calculate
shipping rates, zones, or checkout availability.
| shopId required | integer [ 1 .. 2147483647 ] Examples:
Positive shop identifier assigned to the API client. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
{- "data": [
- {
- "id": 7,
- "key": "postpac-economy",
- "name": "PostPac Economy",
- "description": "Delivery within two business days.",
- "providerKey": "post",
- "providerMethodKey": "economy",
- "pickup": false,
- "deliveryTime": {
- "id": 4,
- "name": "2 business days"
}, - "position": 3,
- "active": true
}
], - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns the active payment methods explicitly assigned to the requested
active shop after it has been verified as assigned to the API client.
Results use the selected shop assignment order. Names and descriptions
resolve through an explicitly requested active storefront language,
or the shop default language when omitted, then the global default
language, and finally the base value. The operation requires
settings:read, does not resolve a Commerce request context, and
accepts only the language query parameter. It does not calculate
fees, payment eligibility, or checkout availability.
| shopId required | integer [ 1 .. 2147483647 ] Examples:
Positive shop identifier assigned to the API client. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
{- "data": [
- {
- "id": 9,
- "key": "invoice",
- "name": "Invoice",
- "description": "Pay after delivery.",
- "providerKey": null,
- "providerMethodKey": null,
- "position": 4,
- "active": true
}
], - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns stable, non-sensitive configuration for one active shop
explicitly assigned to the authenticated API client: default language,
currency, and timezone; the effective price-format locale; and SEO and
sitemap flags. The operation requires settings:read, does not resolve
a Commerce request context, and accepts no query parameters. It never
exposes credentials, mail configuration, or shop profile data. Missing,
inactive, and unassigned shop IDs all return 404 shop_not_found.
| shopId required | integer [ 1 .. 2147483647 ] Examples:
Positive shop identifier assigned to the API client. |
{- "data": {
- "defaults": {
- "languageIsoCode": "de",
- "currencyIsoCode": "CHF",
- "timezoneIdentifier": "Europe/Zurich"
}, - "priceFormat": {
- "configuredLocale": "de_CH",
- "effectiveLocale": "de_CH"
}, - "seo": {
- "searchEngineIndexable": true,
- "sitemap": {
- "enabled": true,
- "productsEnabled": true,
- "categoriesEnabled": true
}
}
}, - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns the active tax-rate registry after the requested active shop
has been verified as assigned to the authenticated API client. Tax
rates are global master data in the current model; the path shop is an
access boundary and does not create a shop-specific tax override.
Names use the requested active storefront language, or the global
default language when omitted. The operation requires settings:read,
does not resolve a Commerce request context, and does not calculate
product, shipping, or destination-specific taxes.
| shopId required | integer [ 1 .. 2147483647 ] Examples:
Positive shop identifier assigned to the API client. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
{- "data": {
- "taxRates": [
- {
- "id": 8,
- "name": "VAT standard",
- "rate": 8.1,
- "active": true
}
]
}, - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns the declared, resolved presentation settings of the active
storefront theme after the requested active shop has been verified as
assigned to the authenticated API client. Each setting provides its
manifest key, type, effective value, and default value. The operation
requires settings:read, does not resolve a Commerce request context,
and accepts no query parameters. It does not expose theme templates,
asset URLs, manifest internals, or commerce behavior.
| shopId required | integer [ 1 .. 2147483647 ] Examples:
Positive shop identifier assigned to the API client. |
{- "data": {
- "themeKey": "default",
- "settings": [
- {
- "key": "primary_color",
- "type": "color",
- "value": "#123456",
- "defaultValue": "#0d6efd"
}
]
}, - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns the effective public account and checkout registration policy
after the requested active shop has been verified as assigned to the
authenticated API client. A shop without its own policy inherits the
default-shop policy and reports that fallback explicitly. The operation
requires settings:read, accepts no query parameters, and never exposes
credential compatibility flags or internal configuration identifiers.
| shopId required | integer [ 1 .. 2147483647 ] Examples:
Positive shop identifier assigned to the API client. |
{- "data": {
- "defaultCustomerGroupId": 7,
- "selfRegistrationAllowed": true,
- "emailVerificationRequired": true,
- "guestCheckoutAllowed": false,
- "catalogModeEnabled": false,
- "storefrontLoginRequired": false,
- "companyRegistrationAllowed": true,
- "manualApprovalRequired": true,
- "newsletterSignupAllowed": true,
- "usesDefaultShopFallback": false
}, - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns active custom-field definitions enabled for connector use in an
assigned active shop. Labels, descriptions, and option labels use the
requested active storefront language, or the shop default language
when omitted, then the global default language. Inactive definitions
and definitions not marked connector-visible are excluded. Options
retain their active state so integrations can interpret historical
values without treating inactive options as valid new selections. The
response omits configured default values and internal row identifiers.
| shopId required | integer [ 1 .. 2147483647 ] Examples:
Positive shop identifier assigned to the API client. |
| entityType required | string Enum: "product" "product_variant" "category" "customer" "customer_address" "customer_company" "customer_company_address" "customer_order" "manufacturer" Custom-field entity contract used by the public API. |
| language | string non-empty Example: language=de Case-insensitive ISO code of an active storefront language. When omitted, the selected shop's configured default language is used. |
{- "data": {
- "entityType": "product",
- "definitions": [
- {
- "setKey": "connector",
- "setLabel": "Connector data",
- "key": "condition",
- "label": "Condition",
- "description": "External product condition.",
- "type": "single_select",
- "required": true,
- "sortOrder": 10,
- "options": [
- {
- "key": "new",
- "label": "New",
- "sortOrder": 10,
- "active": true
}
]
}
]
}, - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Returns the explicit public management decision for each supported
settings and master-data resource, including public operations,
operation-specific scopes, representative endpoints, and rationale.
This global capability registry requires settings:read; it describes
API contracts but does not grant the caller any of their scopes. Price
lists are the only externally managed registry in this set. All other
registries are read-only or expose resolved checkout results only.
{- "data": [
- {
- "resource": "price-lists",
- "exposure": "create_update",
- "operations": [
- "read",
- "create",
- "update"
], - "requiredScopes": {
- "read": "catalog:read",
- "write": "catalog:write"
}, - "endpoints": [
- "/price-lists",
- "/price-lists/{priceListId}"
], - "rationale": "ERP and PIM synchronization may create and update price-list metadata; deletion remains private."
}
], - "meta": {
- "requestId": "2db8c9e2-2771-4bd9-b243-6201be741d05"
}, - "errors": [ ]
}Requires webhooks:read and a resolved shop context.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": [
- {
- "key": "string",
- "domain": "string",
- "description": "string",
- "payloadVersion": "1"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns only subscriptions owned by the API client in the exact resolved shop. Requires webhooks:read.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": [
- {
- "id": 1,
- "shopId": 1,
- "name": "string",
- "status": "active",
- "payloadVersion": "1",
- "eventTypes": [
- "string"
], - "secretPreview": "string",
- "secretRotatedAt": "2019-08-24T14:15:22Z",
- "timeoutSeconds": 0,
- "maxAttempts": 0,
- "initialBackoffSeconds": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Creates an HTTPS-only subscription in the resolved shop. The signing
secret is returned exactly once. Requires webhooks:write.
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| name required | string [ 1 .. 190 ] characters |
| endpointUrl required | string <uri> <= 2048 characters ^https:// |
| status | string Default: "active" Enum: "active" "paused" |
| eventTypes required | Array of strings non-empty unique |
| timeoutSeconds | integer [ 1 .. 30 ] Default: 10 |
| maxAttempts | integer [ 1 .. 12 ] Default: 8 |
| initialBackoffSeconds | integer [ 10 .. 3600 ] Default: 60 |
{- "name": "string",
- "status": "active",
- "eventTypes": [
- "string"
], - "timeoutSeconds": 10,
- "maxAttempts": 8,
- "initialBackoffSeconds": 60
}{- "data": {
- "id": 1,
- "shopId": 1,
- "name": "string",
- "status": "active",
- "payloadVersion": "1",
- "eventTypes": [
- "string"
], - "secretPreview": "string",
- "secretRotatedAt": "2019-08-24T14:15:22Z",
- "timeoutSeconds": 0,
- "maxAttempts": 0,
- "initialBackoffSeconds": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns an owned subscription in the exact resolved shop without exposing its signing secret. Requires webhooks:read.
| subscriptionId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "id": 1,
- "shopId": 1,
- "name": "string",
- "status": "active",
- "payloadVersion": "1",
- "eventTypes": [
- "string"
], - "secretPreview": "string",
- "secretRotatedAt": "2019-08-24T14:15:22Z",
- "timeoutSeconds": 0,
- "maxAttempts": 0,
- "initialBackoffSeconds": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Replaces only supplied fields. Event-type replacement is atomic. Requires webhooks:write.
| subscriptionId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| name | string [ 1 .. 190 ] characters |
| endpointUrl | string <uri> <= 2048 characters ^https:// |
| status | string Enum: "active" "paused" |
| eventTypes | Array of strings non-empty unique |
| timeoutSeconds | integer [ 1 .. 30 ] |
| maxAttempts | integer [ 1 .. 12 ] |
| initialBackoffSeconds | integer [ 10 .. 3600 ] |
{- "name": "string",
- "status": "active",
- "eventTypes": [
- "string"
], - "timeoutSeconds": 1,
- "maxAttempts": 1,
- "initialBackoffSeconds": 10
}{- "data": {
- "id": 1,
- "shopId": 1,
- "name": "string",
- "status": "active",
- "payloadVersion": "1",
- "eventTypes": [
- "string"
], - "secretPreview": "string",
- "secretRotatedAt": "2019-08-24T14:15:22Z",
- "timeoutSeconds": 0,
- "maxAttempts": 0,
- "initialBackoffSeconds": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Deletes the subscription and its delivery history. Requires webhooks:write.
| subscriptionId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "deleted": true
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Invalidates the old secret and returns the replacement exactly once. Requires webhooks:write.
| subscriptionId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "id": 1,
- "shopId": 1,
- "name": "string",
- "status": "active",
- "payloadVersion": "1",
- "eventTypes": [
- "string"
], - "secretPreview": "string",
- "secretRotatedAt": "2019-08-24T14:15:22Z",
- "timeoutSeconds": 0,
- "maxAttempts": 0,
- "initialBackoffSeconds": 0,
- "createdAt": "2019-08-24T14:15:22Z",
- "updatedAt": "2019-08-24T14:15:22Z"
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns up to 100 recent deliveries for the owned subscription. Requires webhooks:read.
| subscriptionId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": [
- {
- "id": 1,
- "deliveryId": "string",
- "eventId": "string",
- "eventType": "string",
- "entityType": "string",
- "entityId": "string",
- "status": "pending",
- "attemptCount": 0,
- "nextAttemptAt": "2019-08-24T14:15:22Z",
- "lastResponseStatus": 0,
- "lastErrorCode": "string",
- "deliveredAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "attempts": [
- {
- "id": "string",
- "number": 1,
- "status": "delivered",
- "responseStatus": 0,
- "durationMs": 0,
- "errorCode": "string",
- "errorMessage": "string",
- "nextRetryAt": "2019-08-24T14:15:22Z",
- "startedAt": "2019-08-24T14:15:22Z",
- "completedAt": "2019-08-24T14:15:22Z"
}
]
}
], - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Returns one delivery and its attempt history for an owned subscription in the resolved shop. Requires webhooks:read.
| subscriptionId required | integer >= 1 |
| deliveryId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
{- "data": {
- "id": 1,
- "deliveryId": "string",
- "eventId": "string",
- "eventType": "string",
- "entityType": "string",
- "entityId": "string",
- "status": "pending",
- "attemptCount": 0,
- "nextAttemptAt": "2019-08-24T14:15:22Z",
- "lastResponseStatus": 0,
- "lastErrorCode": "string",
- "deliveredAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "attempts": [
- {
- "id": "string",
- "number": 1,
- "status": "delivered",
- "responseStatus": 0,
- "durationMs": 0,
- "errorCode": "string",
- "errorMessage": "string",
- "nextRetryAt": "2019-08-24T14:15:22Z",
- "startedAt": "2019-08-24T14:15:22Z",
- "completedAt": "2019-08-24T14:15:22Z"
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}Requeues the original immutable event. Idempotency-Key is mandatory;
the same key and delivery return the prior result. Requires webhooks:write.
| subscriptionId required | integer >= 1 |
| deliveryId required | integer >= 1 |
| shopId | integer >= 1 Example: shopId=2 Active shop used for the commerce request. The shop must be assigned to the authenticated API client. This parameter is required when the client has access to multiple active shops. When exactly one assigned shop is active, omitting the parameter selects that shop. |
| Idempotency-Key required | string [ 1 .. 190 ] characters ^[A-Za-z0-9][A-Za-z0-9._:-]{0,189}$ Example: inventory-request-501 Caller-generated identifier that makes one mutation safe to retry. Keys are scoped to the authenticated API client and must not be reused for different normalized request data. |
{- "data": {
- "id": 1,
- "deliveryId": "string",
- "eventId": "string",
- "eventType": "string",
- "entityType": "string",
- "entityId": "string",
- "status": "pending",
- "attemptCount": 0,
- "nextAttemptAt": "2019-08-24T14:15:22Z",
- "lastResponseStatus": 0,
- "lastErrorCode": "string",
- "deliveredAt": "2019-08-24T14:15:22Z",
- "createdAt": "2019-08-24T14:15:22Z",
- "attempts": [
- {
- "id": "string",
- "number": 1,
- "status": "delivered",
- "responseStatus": 0,
- "durationMs": 0,
- "errorCode": "string",
- "errorMessage": "string",
- "nextRetryAt": "2019-08-24T14:15:22Z",
- "startedAt": "2019-08-24T14:15:22Z",
- "completedAt": "2019-08-24T14:15:22Z"
}
]
}, - "meta": {
- "requestId": "string",
- "pagination": {
- "page": 1,
- "perPage": 1,
- "totalItems": 0,
- "totalPages": 0
}
}, - "errors": [ ]
}