Provides versioned APIs for SellSite frontend applications.

Basket

Lists and selects the baskets of the logged in buyer and manages the positions of the selected basket.

List Baskets

Lists the baskets available to the current buyer: the currently selected basket first (marked as 'active'), followed by the parked baskets, ordered by their last modification. Each entry carries the id to be used for the select endpoint, the title, the position count and - if sums may be shown - the totals. Returns at most 'limit' baskets (50 by default, 500 at most); there is no other pagination.

Documentation

GET JSON /frontend-api/v1/baskets
Parameter
Name Description Example
limit The maximum number of baskets to return. Defaults to 50, capped at 500.
Response Body
Field Type Description
baskets required List<ApiBasketOverviewResponse> The baskets available to the current buyer, with the currently selected basket first.
baskets[].id required String The database id of the basket.
baskets[].title required String The displayable title of the basket.
baskets[].active required boolean Whether this is the currently selected basket of the buyer. Baskets which are not active are considered parked.
baskets[].positionCount required long The number of regular positions in the basket.
baskets[].lastRefresh String The timestamp of the last modification of the basket, in ISO-8601 format with seconds precision and without an offset - it is stated in the time zone of the shop.
Example: 2026-08-04T15:53:11
baskets[].projectName String The name of the project assigned to the basket, if any.
baskets[].buyerName String The name of the buyer who created the basket.
baskets[].netPrice ApiPriceResponse The total net price of the basket, present only if sums may be shown for the current price mode.
baskets[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
baskets[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
baskets[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
baskets[].grossPrice ApiPriceResponse The total gross price of the basket, present only if sums may be shown for the current price mode.
baskets[].grossPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
baskets[].grossPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
baskets[].grossPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
baskets[].hasSupervisor required boolean Whether this basket was forwarded to a supervisor as an order request.
baskets[].supervisorIsCurrentUser required boolean Whether the current user is the supervisor of this basket.

Select Basket

Selects the given basket as the active basket of the buyer and returns its state. Use the literal 'new' as id to create and select a fresh, empty basket, which effectively parks the current one. The basket becomes the current basket exactly like in the classic web frontend, so all subsequent basket and checkout API calls target it. Responds with 400 if no id is given, with 404 if the basket does not exist or is not accessible, and with 403 if the shop configuration does not permit switching baskets.

Documentation

POST JSON /frontend-api/v1/baskets/select
Parameter
Name Description Example
includeQuantities Whether to report the order quantity metadata (minimum order quantity and order step) of every position. Defaults to false, as it costs an item lookup per position.
Request Body
Field Type Description
basketId required String The id of the basket to select as the active basket. Use the literal 'new' to create and select a fresh, empty basket, which effectively parks the current one.
Example: new
Response Body
Field Type Description
id required String The database id of the basket.
title required String The displayable title of the basket.
active required boolean Whether this is the currently selected basket of the buyer.
recomputing required boolean Whether the basket is currently being recomputed. Prices and totals may change once the recomputation has finished.
lastRefresh String The timestamp of the last modification of the basket, in ISO-8601 format with seconds precision and without an offset - it is stated in the time zone of the shop.
Example: 2026-08-04T15:53:11
projectName String The name of the project assigned to the basket, if any.
comment String The comment attached to the basket, if there is one.
orderType String The id of the order type selected for this basket, if any - the same id the checkout API reports as the selected order method.
Example: order
orderTypeLabel String The localized name of the order type, for display only.
Example: Order
price ApiPriceResponse The effective total price of the basket, present only if sums may be shown for the current price mode.
price.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
price.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
price.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
netPrice ApiPriceResponse The total net price of the basket including its cost positions, present only if sums may be shown for the current price mode.
netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positionsNetPrice ApiPriceResponse The net price of the regular positions only, i.e. without the cost positions - the subtotal the web basket shows. Present under the same conditions as 'netPrice'.
positionsNetPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positionsNetPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positionsNetPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
grossPrice ApiPriceResponse The total gross price of the basket, present only if sums may be shown for the current price mode.
grossPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
grossPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
grossPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positionCount required long The number of regular positions in the basket.
shippingInfo String The displayable info text about the preselected shipping method, if one is configured.
positionCommentsAllowed required boolean Whether comments may be attached to the positions of the basket.
positions required List<ApiBasketPositionResponse> The regular positions of the basket.
positions[].id required String The database id of the position.
positions[].itemNumber required String The item number of the position, as shown to the current user. Meant for display only - use 'uniqueItemNumber' to address the item in other endpoints.
positions[].uniqueItemNumber String The unique item number of the item behind this position. This is the number the item and search endpoints expect, and the one to send when adding the item again.
positions[].shortText String The short description of the item, so that the position can be rendered without fetching the item details separately.
positions[].previewImageUrl String The URL of the preview image of the item, if the item has one.
positions[].quantity ApiQuantityResponse The ordered quantity.
positions[].quantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].quantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].quantityUnit String The order unit 'quantity' is stated in - the base unit of the item.
Example: piece
positions[].displayQuantity ApiQuantityResponse The quantity in the alternative sales unit the item was ordered in, present only for positions which use one. Render this together with 'displayQuantityUnit' instead of 'quantity'/'quantityUnit', as the web basket does.
positions[].displayQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].displayQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].displayQuantityUnit String The name of the alternative sales unit the item was ordered in, present only for positions which use one.
Example: box
positions[].quantityChangeable required boolean Whether the quantity of this position can be changed.
positions[].priceQuantity ApiQuantityResponse The number of units 'netPricePerUnit' refers to. A unit price of 19,99 with a price quantity of 100 means 19,99 per 100 units. Does not apply to 'netPrice', which is always the total of the whole position.
positions[].priceQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].priceQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].minOrderQuantity ApiQuantityResponse The minimum quantity which can be ordered of this item, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].minOrderQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].minOrderQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].orderStep ApiQuantityResponse The quantity steps in which this item can be ordered, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].orderStep.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].orderStep.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].netPrice ApiPriceResponse The total net price of the whole position (quantity times unit price), present only if prices may be shown for the current price mode and position. Render this as the line total - it must not be multiplied by the quantity again.
positions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].netPricePerUnit ApiPriceResponse The net price of a single price quantity of the item (see 'priceQuantity'), present under the same conditions as 'netPrice'.
positions[].netPricePerUnit.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPricePerUnit.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPricePerUnit.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].comment String The comment attached to this position, if there is one.
positions[].messages required List<ApiMessageResponse> Messages emitted for this position, e.g. availability hints. Unlike basket messages these cannot be acknowledged - the position itself has to be corrected (e.g. via the update or remove endpoint) or the message vanishes once its cause is gone. May be empty.
positions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
positions[].messages[].type required String The severity of the message.
Example: WARNING
positions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
positions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
positions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
positions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
costPositions required List<ApiBasketCostPositionResponse> The cost positions computed by the system (e.g. shipping costs or a minimum quantity surcharge). They are part of 'netPrice' but not of 'positions' - render them to show a summary which adds up. May be empty.
costPositions[].itemNumber String The item number of the cost position, as shown to the current user.
costPositions[].shortText required String The label of the cost position, e.g. 'Shipping costs'.
costPositions[].netPrice ApiPriceResponse The net price of the cost position, present only if prices may be shown for the current price mode.
costPositions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
costPositions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
costPositions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
costPositions[].messages required List<ApiMessageResponse> Messages emitted for this cost position, e.g. an invalid coupon. May be empty. A PROBLEM here blocks the checkout just like a problem on a regular position - and can be its only explanation. Like the messages of a position these cannot be acknowledged.
costPositions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
costPositions[].messages[].type required String The severity of the message.
Example: WARNING
costPositions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
costPositions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
costPositions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
costPositions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
messages required List<ApiMessageResponse> Messages emitted for the basket itself. May be empty.
messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
messages[].type required String The severity of the message.
Example: WARNING
messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
messages[].acknowledged required boolean Whether this message has already been acknowledged.

Delete Basket

Deletes the given basket and returns the remaining baskets, in the very same shape as the list endpoint - a client rendering the basket selection can re-render straight from the response. The currently selected basket cannot be deleted (400 with 'current_basket'): select another one first, as the web basket selection does. Responds with 400 if no id is given, with 404 if the basket does not exist or is not accessible, and with 403 if the shop configuration does not permit switching baskets.

Documentation

POST JSON /frontend-api/v1/baskets/delete
Parameter
Name Description Example
limit The maximum number of baskets to return afterwards. Defaults to 50, capped at 500.
Request Body
Field Type Description
basketId required String The id of the basket to delete. Must not be the currently selected basket - select another one first if the user wants to get rid of the active basket.
Response Body
Field Type Description
baskets required List<ApiBasketOverviewResponse> The baskets available to the current buyer, with the currently selected basket first.
baskets[].id required String The database id of the basket.
baskets[].title required String The displayable title of the basket.
baskets[].active required boolean Whether this is the currently selected basket of the buyer. Baskets which are not active are considered parked.
baskets[].positionCount required long The number of regular positions in the basket.
baskets[].lastRefresh String The timestamp of the last modification of the basket, in ISO-8601 format with seconds precision and without an offset - it is stated in the time zone of the shop.
Example: 2026-08-04T15:53:11
baskets[].projectName String The name of the project assigned to the basket, if any.
baskets[].buyerName String The name of the buyer who created the basket.
baskets[].netPrice ApiPriceResponse The total net price of the basket, present only if sums may be shown for the current price mode.
baskets[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
baskets[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
baskets[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
baskets[].grossPrice ApiPriceResponse The total gross price of the basket, present only if sums may be shown for the current price mode.
baskets[].grossPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
baskets[].grossPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
baskets[].grossPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
baskets[].hasSupervisor required boolean Whether this basket was forwarded to a supervisor as an order request.
baskets[].supervisorIsCurrentUser required boolean Whether the current user is the supervisor of this basket.

Rename Basket

Renames the given basket (the currently selected one without a 'basketId') and returns its updated state. Unlike the other endpoints, a deviating 'basketId' does not select that basket - renaming a parked basket from the basket selection leaves the selection untouched, but requires the same permissions as selecting it (403 otherwise). An empty title resets the basket to its generated default title. Responds with 400 if no title is given, if it exceeds 512 characters, or if the selected order method enforces the title ('title_not_changeable').

Documentation

POST JSON /frontend-api/v1/baskets/rename
Parameter
Name Description Example
includeQuantities Whether to report the order quantity metadata (minimum order quantity and order step) of every position. Defaults to false, as it costs an item lookup per position.
Request Body
Field Type Description
basketId String The id of the basket to rename. Defaults to the currently selected basket. Unlike the other endpoints, a deviating id does not select that basket - renaming a parked basket leaves the selection untouched, but requires the same permissions as selecting it.
title required String The new title of the basket, at most 512 characters. An empty title resets the basket to its generated default title, which the response then reports.
Response Body
Field Type Description
id required String The database id of the basket.
title required String The displayable title of the basket.
active required boolean Whether this is the currently selected basket of the buyer.
recomputing required boolean Whether the basket is currently being recomputed. Prices and totals may change once the recomputation has finished.
lastRefresh String The timestamp of the last modification of the basket, in ISO-8601 format with seconds precision and without an offset - it is stated in the time zone of the shop.
Example: 2026-08-04T15:53:11
projectName String The name of the project assigned to the basket, if any.
comment String The comment attached to the basket, if there is one.
orderType String The id of the order type selected for this basket, if any - the same id the checkout API reports as the selected order method.
Example: order
orderTypeLabel String The localized name of the order type, for display only.
Example: Order
price ApiPriceResponse The effective total price of the basket, present only if sums may be shown for the current price mode.
price.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
price.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
price.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
netPrice ApiPriceResponse The total net price of the basket including its cost positions, present only if sums may be shown for the current price mode.
netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positionsNetPrice ApiPriceResponse The net price of the regular positions only, i.e. without the cost positions - the subtotal the web basket shows. Present under the same conditions as 'netPrice'.
positionsNetPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positionsNetPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positionsNetPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
grossPrice ApiPriceResponse The total gross price of the basket, present only if sums may be shown for the current price mode.
grossPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
grossPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
grossPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positionCount required long The number of regular positions in the basket.
shippingInfo String The displayable info text about the preselected shipping method, if one is configured.
positionCommentsAllowed required boolean Whether comments may be attached to the positions of the basket.
positions required List<ApiBasketPositionResponse> The regular positions of the basket.
positions[].id required String The database id of the position.
positions[].itemNumber required String The item number of the position, as shown to the current user. Meant for display only - use 'uniqueItemNumber' to address the item in other endpoints.
positions[].uniqueItemNumber String The unique item number of the item behind this position. This is the number the item and search endpoints expect, and the one to send when adding the item again.
positions[].shortText String The short description of the item, so that the position can be rendered without fetching the item details separately.
positions[].previewImageUrl String The URL of the preview image of the item, if the item has one.
positions[].quantity ApiQuantityResponse The ordered quantity.
positions[].quantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].quantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].quantityUnit String The order unit 'quantity' is stated in - the base unit of the item.
Example: piece
positions[].displayQuantity ApiQuantityResponse The quantity in the alternative sales unit the item was ordered in, present only for positions which use one. Render this together with 'displayQuantityUnit' instead of 'quantity'/'quantityUnit', as the web basket does.
positions[].displayQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].displayQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].displayQuantityUnit String The name of the alternative sales unit the item was ordered in, present only for positions which use one.
Example: box
positions[].quantityChangeable required boolean Whether the quantity of this position can be changed.
positions[].priceQuantity ApiQuantityResponse The number of units 'netPricePerUnit' refers to. A unit price of 19,99 with a price quantity of 100 means 19,99 per 100 units. Does not apply to 'netPrice', which is always the total of the whole position.
positions[].priceQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].priceQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].minOrderQuantity ApiQuantityResponse The minimum quantity which can be ordered of this item, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].minOrderQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].minOrderQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].orderStep ApiQuantityResponse The quantity steps in which this item can be ordered, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].orderStep.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].orderStep.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].netPrice ApiPriceResponse The total net price of the whole position (quantity times unit price), present only if prices may be shown for the current price mode and position. Render this as the line total - it must not be multiplied by the quantity again.
positions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].netPricePerUnit ApiPriceResponse The net price of a single price quantity of the item (see 'priceQuantity'), present under the same conditions as 'netPrice'.
positions[].netPricePerUnit.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPricePerUnit.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPricePerUnit.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].comment String The comment attached to this position, if there is one.
positions[].messages required List<ApiMessageResponse> Messages emitted for this position, e.g. availability hints. Unlike basket messages these cannot be acknowledged - the position itself has to be corrected (e.g. via the update or remove endpoint) or the message vanishes once its cause is gone. May be empty.
positions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
positions[].messages[].type required String The severity of the message.
Example: WARNING
positions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
positions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
positions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
positions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
costPositions required List<ApiBasketCostPositionResponse> The cost positions computed by the system (e.g. shipping costs or a minimum quantity surcharge). They are part of 'netPrice' but not of 'positions' - render them to show a summary which adds up. May be empty.
costPositions[].itemNumber String The item number of the cost position, as shown to the current user.
costPositions[].shortText required String The label of the cost position, e.g. 'Shipping costs'.
costPositions[].netPrice ApiPriceResponse The net price of the cost position, present only if prices may be shown for the current price mode.
costPositions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
costPositions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
costPositions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
costPositions[].messages required List<ApiMessageResponse> Messages emitted for this cost position, e.g. an invalid coupon. May be empty. A PROBLEM here blocks the checkout just like a problem on a regular position - and can be its only explanation. Like the messages of a position these cannot be acknowledged.
costPositions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
costPositions[].messages[].type required String The severity of the message.
Example: WARNING
costPositions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
costPositions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
costPositions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
costPositions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
messages required List<ApiMessageResponse> Messages emitted for the basket itself. May be empty.
messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
messages[].type required String The severity of the message.
Example: WARNING
messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
messages[].acknowledged required boolean Whether this message has already been acknowledged.

Basket State

Returns the full state of the basket: title, totals, positions (with prices, comments and messages) and basket level messages. Does not await a running recomputation - it reports one via 'recomputing' instead, so poll again once it has finished to receive final prices. Responds with 404 if the buyer has no basket yet.

Documentation

GET JSON /frontend-api/v1/basket
Parameters
Name Description Example
basketId The id of the basket to read. Defaults to the currently selected basket. A different basket is selected as the active basket first.
includeQuantities Whether to report the order quantity metadata (minimum order quantity and order step) of every position. Defaults to false, as it costs an item lookup per position.
Response Body
Field Type Description
id required String The database id of the basket.
title required String The displayable title of the basket.
active required boolean Whether this is the currently selected basket of the buyer.
recomputing required boolean Whether the basket is currently being recomputed. Prices and totals may change once the recomputation has finished.
lastRefresh String The timestamp of the last modification of the basket, in ISO-8601 format with seconds precision and without an offset - it is stated in the time zone of the shop.
Example: 2026-08-04T15:53:11
projectName String The name of the project assigned to the basket, if any.
comment String The comment attached to the basket, if there is one.
orderType String The id of the order type selected for this basket, if any - the same id the checkout API reports as the selected order method.
Example: order
orderTypeLabel String The localized name of the order type, for display only.
Example: Order
price ApiPriceResponse The effective total price of the basket, present only if sums may be shown for the current price mode.
price.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
price.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
price.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
netPrice ApiPriceResponse The total net price of the basket including its cost positions, present only if sums may be shown for the current price mode.
netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positionsNetPrice ApiPriceResponse The net price of the regular positions only, i.e. without the cost positions - the subtotal the web basket shows. Present under the same conditions as 'netPrice'.
positionsNetPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positionsNetPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positionsNetPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
grossPrice ApiPriceResponse The total gross price of the basket, present only if sums may be shown for the current price mode.
grossPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
grossPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
grossPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positionCount required long The number of regular positions in the basket.
shippingInfo String The displayable info text about the preselected shipping method, if one is configured.
positionCommentsAllowed required boolean Whether comments may be attached to the positions of the basket.
positions required List<ApiBasketPositionResponse> The regular positions of the basket.
positions[].id required String The database id of the position.
positions[].itemNumber required String The item number of the position, as shown to the current user. Meant for display only - use 'uniqueItemNumber' to address the item in other endpoints.
positions[].uniqueItemNumber String The unique item number of the item behind this position. This is the number the item and search endpoints expect, and the one to send when adding the item again.
positions[].shortText String The short description of the item, so that the position can be rendered without fetching the item details separately.
positions[].previewImageUrl String The URL of the preview image of the item, if the item has one.
positions[].quantity ApiQuantityResponse The ordered quantity.
positions[].quantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].quantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].quantityUnit String The order unit 'quantity' is stated in - the base unit of the item.
Example: piece
positions[].displayQuantity ApiQuantityResponse The quantity in the alternative sales unit the item was ordered in, present only for positions which use one. Render this together with 'displayQuantityUnit' instead of 'quantity'/'quantityUnit', as the web basket does.
positions[].displayQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].displayQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].displayQuantityUnit String The name of the alternative sales unit the item was ordered in, present only for positions which use one.
Example: box
positions[].quantityChangeable required boolean Whether the quantity of this position can be changed.
positions[].priceQuantity ApiQuantityResponse The number of units 'netPricePerUnit' refers to. A unit price of 19,99 with a price quantity of 100 means 19,99 per 100 units. Does not apply to 'netPrice', which is always the total of the whole position.
positions[].priceQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].priceQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].minOrderQuantity ApiQuantityResponse The minimum quantity which can be ordered of this item, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].minOrderQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].minOrderQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].orderStep ApiQuantityResponse The quantity steps in which this item can be ordered, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].orderStep.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].orderStep.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].netPrice ApiPriceResponse The total net price of the whole position (quantity times unit price), present only if prices may be shown for the current price mode and position. Render this as the line total - it must not be multiplied by the quantity again.
positions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].netPricePerUnit ApiPriceResponse The net price of a single price quantity of the item (see 'priceQuantity'), present under the same conditions as 'netPrice'.
positions[].netPricePerUnit.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPricePerUnit.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPricePerUnit.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].comment String The comment attached to this position, if there is one.
positions[].messages required List<ApiMessageResponse> Messages emitted for this position, e.g. availability hints. Unlike basket messages these cannot be acknowledged - the position itself has to be corrected (e.g. via the update or remove endpoint) or the message vanishes once its cause is gone. May be empty.
positions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
positions[].messages[].type required String The severity of the message.
Example: WARNING
positions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
positions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
positions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
positions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
costPositions required List<ApiBasketCostPositionResponse> The cost positions computed by the system (e.g. shipping costs or a minimum quantity surcharge). They are part of 'netPrice' but not of 'positions' - render them to show a summary which adds up. May be empty.
costPositions[].itemNumber String The item number of the cost position, as shown to the current user.
costPositions[].shortText required String The label of the cost position, e.g. 'Shipping costs'.
costPositions[].netPrice ApiPriceResponse The net price of the cost position, present only if prices may be shown for the current price mode.
costPositions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
costPositions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
costPositions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
costPositions[].messages required List<ApiMessageResponse> Messages emitted for this cost position, e.g. an invalid coupon. May be empty. A PROBLEM here blocks the checkout just like a problem on a regular position - and can be its only explanation. Like the messages of a position these cannot be acknowledged.
costPositions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
costPositions[].messages[].type required String The severity of the message.
Example: WARNING
costPositions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
costPositions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
costPositions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
costPositions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
messages required List<ApiMessageResponse> Messages emitted for the basket itself. May be empty.
messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
messages[].type required String The severity of the message.
Example: WARNING
messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
messages[].acknowledged required boolean Whether this message has already been acknowledged.

Basket Summary

Returns the compact summary of the basket for the basket icon in the header: the effective total price, the position count and the shortened title. Deliberately fast - it does not await a running recomputation but reports one via 'recomputing', so poll again once it has finished. Responds with 404 if the buyer has no basket yet.

Documentation

GET JSON /frontend-api/v1/basket/summary
Parameter
Name Description Example
basketId The id of the basket to read. Defaults to the currently selected basket. A different basket is selected as the active basket first.
Response Body
Field Type Description
id required String The database id of the basket.
title required String The displayable title of the basket, shortened for the header.
price ApiPriceResponse The effective total price of the basket, present only if sums may be shown for the current price mode.
price.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
price.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
price.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positionCount required long The number of regular positions in the basket.
recomputing required boolean Whether the basket is currently being recomputed. Prices and totals may change once the recomputation has finished.

Add Positions

Adds one or more items to the basket, optionally with a comment, a quantity in an alternative sales unit, additions (sub positions like cutting services) and ignored mandatory accessory groups. Items whose number cannot be resolved are skipped and reported via 'missingItemNumbers', items the shop rejects (e.g. one which may not be ordered) are skipped with their reason reported in 'messages' - the response stays 200 in both cases. Creates a basket if the buyer has none yet, exactly like the web shop does. Awaits the triggered recomputation and returns the updated basket state, so no separate refresh call is needed.

Documentation

POST JSON /frontend-api/v1/basket/positions/add
Parameter
Name Description Example
includeQuantities Whether to report the order quantity metadata (minimum order quantity and order step) of every position. Defaults to false, as it costs an item lookup per position.
Request Body
Field Type Description
basketId String The id of the basket to add the items to. Defaults to the currently selected basket. A different basket is selected as the active basket before adding the items.
source String The source to record for the new positions, for statistics purposes. Defaults to 'frontend-api'.
Example: frontend-api
positions required List<ApiBasketAddPositionRequest> The items to add to the basket.
positions[].itemNumber required String The item number of the item to add.
positions[].quantity BigDecimal The quantity to add, stated in the alternative sales unit if 'alternativeUnitId' is given, in the base unit of the item otherwise. Defaults to the recommended order quantity of the item, in the very same unit.
Example: 10
positions[].alternativeUnitId Long The id of the alternative sales unit the quantity refers to. If given, the quantity is converted into the base unit of the item.
positions[].comment String The comment to attach to the new position. Only honored if position comments are allowed in the shop.
positions[].additions List<ApiBasketAdditionRequest> Additions (sub positions like cutting services) to attach to the new position.
positions[].additions[].type required String The type of the addition, matching the name of a registered addition handler.
positions[].additions[].json ObjectNode The type specific configuration of the addition, as understood by its handler.
positions[].additions[].quantity required BigDecimal The quantity of the addition.
Example: 1
positions[].ignoredMandatoryGroups List<String> The unique names of the mandatory accessory groups of the item which the user chose to ignore. Groups not listed here are validated and report a position message if their accessories are missing from the basket.
Response Body
Field Type Description
id required String The database id of the basket.
title required String The displayable title of the basket.
active required boolean Whether this is the currently selected basket of the buyer.
recomputing required boolean Whether the basket is currently being recomputed. Prices and totals may change once the recomputation has finished.
lastRefresh String The timestamp of the last modification of the basket, in ISO-8601 format with seconds precision and without an offset - it is stated in the time zone of the shop.
Example: 2026-08-04T15:53:11
projectName String The name of the project assigned to the basket, if any.
comment String The comment attached to the basket, if there is one.
orderType String The id of the order type selected for this basket, if any - the same id the checkout API reports as the selected order method.
Example: order
orderTypeLabel String The localized name of the order type, for display only.
Example: Order
price ApiPriceResponse The effective total price of the basket, present only if sums may be shown for the current price mode.
price.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
price.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
price.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
netPrice ApiPriceResponse The total net price of the basket including its cost positions, present only if sums may be shown for the current price mode.
netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positionsNetPrice ApiPriceResponse The net price of the regular positions only, i.e. without the cost positions - the subtotal the web basket shows. Present under the same conditions as 'netPrice'.
positionsNetPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positionsNetPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positionsNetPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
grossPrice ApiPriceResponse The total gross price of the basket, present only if sums may be shown for the current price mode.
grossPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
grossPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
grossPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positionCount required long The number of regular positions in the basket.
shippingInfo String The displayable info text about the preselected shipping method, if one is configured.
positionCommentsAllowed required boolean Whether comments may be attached to the positions of the basket.
positions required List<ApiBasketPositionResponse> The regular positions of the basket.
positions[].id required String The database id of the position.
positions[].itemNumber required String The item number of the position, as shown to the current user. Meant for display only - use 'uniqueItemNumber' to address the item in other endpoints.
positions[].uniqueItemNumber String The unique item number of the item behind this position. This is the number the item and search endpoints expect, and the one to send when adding the item again.
positions[].shortText String The short description of the item, so that the position can be rendered without fetching the item details separately.
positions[].previewImageUrl String The URL of the preview image of the item, if the item has one.
positions[].quantity ApiQuantityResponse The ordered quantity.
positions[].quantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].quantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].quantityUnit String The order unit 'quantity' is stated in - the base unit of the item.
Example: piece
positions[].displayQuantity ApiQuantityResponse The quantity in the alternative sales unit the item was ordered in, present only for positions which use one. Render this together with 'displayQuantityUnit' instead of 'quantity'/'quantityUnit', as the web basket does.
positions[].displayQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].displayQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].displayQuantityUnit String The name of the alternative sales unit the item was ordered in, present only for positions which use one.
Example: box
positions[].quantityChangeable required boolean Whether the quantity of this position can be changed.
positions[].priceQuantity ApiQuantityResponse The number of units 'netPricePerUnit' refers to. A unit price of 19,99 with a price quantity of 100 means 19,99 per 100 units. Does not apply to 'netPrice', which is always the total of the whole position.
positions[].priceQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].priceQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].minOrderQuantity ApiQuantityResponse The minimum quantity which can be ordered of this item, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].minOrderQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].minOrderQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].orderStep ApiQuantityResponse The quantity steps in which this item can be ordered, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].orderStep.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].orderStep.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].netPrice ApiPriceResponse The total net price of the whole position (quantity times unit price), present only if prices may be shown for the current price mode and position. Render this as the line total - it must not be multiplied by the quantity again.
positions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].netPricePerUnit ApiPriceResponse The net price of a single price quantity of the item (see 'priceQuantity'), present under the same conditions as 'netPrice'.
positions[].netPricePerUnit.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPricePerUnit.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPricePerUnit.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].comment String The comment attached to this position, if there is one.
positions[].messages required List<ApiMessageResponse> Messages emitted for this position, e.g. availability hints. Unlike basket messages these cannot be acknowledged - the position itself has to be corrected (e.g. via the update or remove endpoint) or the message vanishes once its cause is gone. May be empty.
positions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
positions[].messages[].type required String The severity of the message.
Example: WARNING
positions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
positions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
positions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
positions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
costPositions required List<ApiBasketCostPositionResponse> The cost positions computed by the system (e.g. shipping costs or a minimum quantity surcharge). They are part of 'netPrice' but not of 'positions' - render them to show a summary which adds up. May be empty.
costPositions[].itemNumber String The item number of the cost position, as shown to the current user.
costPositions[].shortText required String The label of the cost position, e.g. 'Shipping costs'.
costPositions[].netPrice ApiPriceResponse The net price of the cost position, present only if prices may be shown for the current price mode.
costPositions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
costPositions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
costPositions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
costPositions[].messages required List<ApiMessageResponse> Messages emitted for this cost position, e.g. an invalid coupon. May be empty. A PROBLEM here blocks the checkout just like a problem on a regular position - and can be its only explanation. Like the messages of a position these cannot be acknowledged.
costPositions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
costPositions[].messages[].type required String The severity of the message.
Example: WARNING
costPositions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
costPositions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
costPositions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
costPositions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
messages required List<ApiMessageResponse> Messages emitted for the basket itself. May be empty.
messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
messages[].type required String The severity of the message.
Example: WARNING
messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
messages[].acknowledged required boolean Whether this message has already been acknowledged.
addedPositionIds required List<String> The database ids of the positions created by this request.
missingItemNumbers required List<String> The item numbers which could not be resolved and were therefore skipped. Items which were resolved but rejected by the shop are not listed here - their reason is reported in 'messages'.

Update Positions

Changes the quantities and/or comments of one or more basket positions. Omitted fields are left unchanged, an empty comment removes the comment. Quantities refer to the base unit of the item - the same unit the 'quantity' of the state response reports. All changes are validated first and applied together within one basket lock - a request with an unknown position id or an invalid change is rejected as a whole. Unlike the web basket, a quantity of 0 does not delete the position but is rejected with 'invalid_quantity' - use the remove endpoint instead. Awaits the triggered recomputation and returns the updated basket state.

Documentation

POST JSON /frontend-api/v1/basket/positions/update
Parameter
Name Description Example
includeQuantities Whether to report the order quantity metadata (minimum order quantity and order step) of every position. Defaults to false, as it costs an item lookup per position.
Request Body
Field Type Description
basketId String The id of the basket owning the positions. Defaults to the currently selected basket. A different basket is selected as the active basket before applying the changes.
positions required List<ApiBasketUpdatePositionRequest> The changes to apply to the positions of the basket.
positions[].id required String The database id of the position to change.
positions[].quantity BigDecimal The new quantity of the position, in the base unit of the item - the same unit the 'quantity' of the state response reports. Omit to leave the quantity unchanged.
Example: 5
positions[].comment String The new comment of the position. An empty string removes the comment, omitting the field leaves the comment unchanged.
Response Body
Field Type Description
id required String The database id of the basket.
title required String The displayable title of the basket.
active required boolean Whether this is the currently selected basket of the buyer.
recomputing required boolean Whether the basket is currently being recomputed. Prices and totals may change once the recomputation has finished.
lastRefresh String The timestamp of the last modification of the basket, in ISO-8601 format with seconds precision and without an offset - it is stated in the time zone of the shop.
Example: 2026-08-04T15:53:11
projectName String The name of the project assigned to the basket, if any.
comment String The comment attached to the basket, if there is one.
orderType String The id of the order type selected for this basket, if any - the same id the checkout API reports as the selected order method.
Example: order
orderTypeLabel String The localized name of the order type, for display only.
Example: Order
price ApiPriceResponse The effective total price of the basket, present only if sums may be shown for the current price mode.
price.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
price.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
price.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
netPrice ApiPriceResponse The total net price of the basket including its cost positions, present only if sums may be shown for the current price mode.
netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positionsNetPrice ApiPriceResponse The net price of the regular positions only, i.e. without the cost positions - the subtotal the web basket shows. Present under the same conditions as 'netPrice'.
positionsNetPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positionsNetPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positionsNetPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
grossPrice ApiPriceResponse The total gross price of the basket, present only if sums may be shown for the current price mode.
grossPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
grossPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
grossPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positionCount required long The number of regular positions in the basket.
shippingInfo String The displayable info text about the preselected shipping method, if one is configured.
positionCommentsAllowed required boolean Whether comments may be attached to the positions of the basket.
positions required List<ApiBasketPositionResponse> The regular positions of the basket.
positions[].id required String The database id of the position.
positions[].itemNumber required String The item number of the position, as shown to the current user. Meant for display only - use 'uniqueItemNumber' to address the item in other endpoints.
positions[].uniqueItemNumber String The unique item number of the item behind this position. This is the number the item and search endpoints expect, and the one to send when adding the item again.
positions[].shortText String The short description of the item, so that the position can be rendered without fetching the item details separately.
positions[].previewImageUrl String The URL of the preview image of the item, if the item has one.
positions[].quantity ApiQuantityResponse The ordered quantity.
positions[].quantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].quantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].quantityUnit String The order unit 'quantity' is stated in - the base unit of the item.
Example: piece
positions[].displayQuantity ApiQuantityResponse The quantity in the alternative sales unit the item was ordered in, present only for positions which use one. Render this together with 'displayQuantityUnit' instead of 'quantity'/'quantityUnit', as the web basket does.
positions[].displayQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].displayQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].displayQuantityUnit String The name of the alternative sales unit the item was ordered in, present only for positions which use one.
Example: box
positions[].quantityChangeable required boolean Whether the quantity of this position can be changed.
positions[].priceQuantity ApiQuantityResponse The number of units 'netPricePerUnit' refers to. A unit price of 19,99 with a price quantity of 100 means 19,99 per 100 units. Does not apply to 'netPrice', which is always the total of the whole position.
positions[].priceQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].priceQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].minOrderQuantity ApiQuantityResponse The minimum quantity which can be ordered of this item, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].minOrderQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].minOrderQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].orderStep ApiQuantityResponse The quantity steps in which this item can be ordered, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].orderStep.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].orderStep.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].netPrice ApiPriceResponse The total net price of the whole position (quantity times unit price), present only if prices may be shown for the current price mode and position. Render this as the line total - it must not be multiplied by the quantity again.
positions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].netPricePerUnit ApiPriceResponse The net price of a single price quantity of the item (see 'priceQuantity'), present under the same conditions as 'netPrice'.
positions[].netPricePerUnit.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPricePerUnit.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPricePerUnit.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].comment String The comment attached to this position, if there is one.
positions[].messages required List<ApiMessageResponse> Messages emitted for this position, e.g. availability hints. Unlike basket messages these cannot be acknowledged - the position itself has to be corrected (e.g. via the update or remove endpoint) or the message vanishes once its cause is gone. May be empty.
positions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
positions[].messages[].type required String The severity of the message.
Example: WARNING
positions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
positions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
positions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
positions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
costPositions required List<ApiBasketCostPositionResponse> The cost positions computed by the system (e.g. shipping costs or a minimum quantity surcharge). They are part of 'netPrice' but not of 'positions' - render them to show a summary which adds up. May be empty.
costPositions[].itemNumber String The item number of the cost position, as shown to the current user.
costPositions[].shortText required String The label of the cost position, e.g. 'Shipping costs'.
costPositions[].netPrice ApiPriceResponse The net price of the cost position, present only if prices may be shown for the current price mode.
costPositions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
costPositions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
costPositions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
costPositions[].messages required List<ApiMessageResponse> Messages emitted for this cost position, e.g. an invalid coupon. May be empty. A PROBLEM here blocks the checkout just like a problem on a regular position - and can be its only explanation. Like the messages of a position these cannot be acknowledged.
costPositions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
costPositions[].messages[].type required String The severity of the message.
Example: WARNING
costPositions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
costPositions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
costPositions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
costPositions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
messages required List<ApiMessageResponse> Messages emitted for the basket itself. May be empty.
messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
messages[].type required String The severity of the message.
Example: WARNING
messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
messages[].acknowledged required boolean Whether this message has already been acknowledged.

Remove Positions

Removes one or more positions from the basket, including their sub and subordinate positions. Responds with 404 if one of the position ids does not exist in the basket - nothing is removed in that case. Awaits the triggered recomputation and returns the updated basket state.

Documentation

POST JSON /frontend-api/v1/basket/positions/remove
Parameter
Name Description Example
includeQuantities Whether to report the order quantity metadata (minimum order quantity and order step) of every position. Defaults to false, as it costs an item lookup per position.
Request Body
Field Type Description
basketId String The id of the basket owning the positions. Defaults to the currently selected basket. A different basket is selected as the active basket before removing the positions.
positionIds required List<String> The database ids of the positions to remove.
Response Body
Field Type Description
id required String The database id of the basket.
title required String The displayable title of the basket.
active required boolean Whether this is the currently selected basket of the buyer.
recomputing required boolean Whether the basket is currently being recomputed. Prices and totals may change once the recomputation has finished.
lastRefresh String The timestamp of the last modification of the basket, in ISO-8601 format with seconds precision and without an offset - it is stated in the time zone of the shop.
Example: 2026-08-04T15:53:11
projectName String The name of the project assigned to the basket, if any.
comment String The comment attached to the basket, if there is one.
orderType String The id of the order type selected for this basket, if any - the same id the checkout API reports as the selected order method.
Example: order
orderTypeLabel String The localized name of the order type, for display only.
Example: Order
price ApiPriceResponse The effective total price of the basket, present only if sums may be shown for the current price mode.
price.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
price.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
price.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
netPrice ApiPriceResponse The total net price of the basket including its cost positions, present only if sums may be shown for the current price mode.
netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positionsNetPrice ApiPriceResponse The net price of the regular positions only, i.e. without the cost positions - the subtotal the web basket shows. Present under the same conditions as 'netPrice'.
positionsNetPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positionsNetPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positionsNetPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
grossPrice ApiPriceResponse The total gross price of the basket, present only if sums may be shown for the current price mode.
grossPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
grossPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
grossPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positionCount required long The number of regular positions in the basket.
shippingInfo String The displayable info text about the preselected shipping method, if one is configured.
positionCommentsAllowed required boolean Whether comments may be attached to the positions of the basket.
positions required List<ApiBasketPositionResponse> The regular positions of the basket.
positions[].id required String The database id of the position.
positions[].itemNumber required String The item number of the position, as shown to the current user. Meant for display only - use 'uniqueItemNumber' to address the item in other endpoints.
positions[].uniqueItemNumber String The unique item number of the item behind this position. This is the number the item and search endpoints expect, and the one to send when adding the item again.
positions[].shortText String The short description of the item, so that the position can be rendered without fetching the item details separately.
positions[].previewImageUrl String The URL of the preview image of the item, if the item has one.
positions[].quantity ApiQuantityResponse The ordered quantity.
positions[].quantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].quantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].quantityUnit String The order unit 'quantity' is stated in - the base unit of the item.
Example: piece
positions[].displayQuantity ApiQuantityResponse The quantity in the alternative sales unit the item was ordered in, present only for positions which use one. Render this together with 'displayQuantityUnit' instead of 'quantity'/'quantityUnit', as the web basket does.
positions[].displayQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].displayQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].displayQuantityUnit String The name of the alternative sales unit the item was ordered in, present only for positions which use one.
Example: box
positions[].quantityChangeable required boolean Whether the quantity of this position can be changed.
positions[].priceQuantity ApiQuantityResponse The number of units 'netPricePerUnit' refers to. A unit price of 19,99 with a price quantity of 100 means 19,99 per 100 units. Does not apply to 'netPrice', which is always the total of the whole position.
positions[].priceQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].priceQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].minOrderQuantity ApiQuantityResponse The minimum quantity which can be ordered of this item, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].minOrderQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].minOrderQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].orderStep ApiQuantityResponse The quantity steps in which this item can be ordered, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].orderStep.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].orderStep.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].netPrice ApiPriceResponse The total net price of the whole position (quantity times unit price), present only if prices may be shown for the current price mode and position. Render this as the line total - it must not be multiplied by the quantity again.
positions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].netPricePerUnit ApiPriceResponse The net price of a single price quantity of the item (see 'priceQuantity'), present under the same conditions as 'netPrice'.
positions[].netPricePerUnit.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPricePerUnit.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPricePerUnit.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].comment String The comment attached to this position, if there is one.
positions[].messages required List<ApiMessageResponse> Messages emitted for this position, e.g. availability hints. Unlike basket messages these cannot be acknowledged - the position itself has to be corrected (e.g. via the update or remove endpoint) or the message vanishes once its cause is gone. May be empty.
positions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
positions[].messages[].type required String The severity of the message.
Example: WARNING
positions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
positions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
positions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
positions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
costPositions required List<ApiBasketCostPositionResponse> The cost positions computed by the system (e.g. shipping costs or a minimum quantity surcharge). They are part of 'netPrice' but not of 'positions' - render them to show a summary which adds up. May be empty.
costPositions[].itemNumber String The item number of the cost position, as shown to the current user.
costPositions[].shortText required String The label of the cost position, e.g. 'Shipping costs'.
costPositions[].netPrice ApiPriceResponse The net price of the cost position, present only if prices may be shown for the current price mode.
costPositions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
costPositions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
costPositions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
costPositions[].messages required List<ApiMessageResponse> Messages emitted for this cost position, e.g. an invalid coupon. May be empty. A PROBLEM here blocks the checkout just like a problem on a regular position - and can be its only explanation. Like the messages of a position these cannot be acknowledged.
costPositions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
costPositions[].messages[].type required String The severity of the message.
Example: WARNING
costPositions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
costPositions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
costPositions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
costPositions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
messages required List<ApiMessageResponse> Messages emitted for the basket itself. May be empty.
messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
messages[].type required String The severity of the message.
Example: WARNING
messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
messages[].acknowledged required boolean Whether this message has already been acknowledged.

Acknowledge Messages

Marks basket messages as acknowledged by their 'id' (see 'messages' in the state response) and returns the updated basket state. Ids without a matching message are silently ignored. The acknowledgement is shared with the checkout: an acknowledgeable warning acknowledged here no longer blocks 'canCommit' of the checkout API.

Documentation

POST JSON /frontend-api/v1/basket/messages/acknowledge
Parameter
Name Description Example
includeQuantities Whether to report the order quantity metadata (minimum order quantity and order step) of every position. Defaults to false, as it costs an item lookup per position.
Request Body
Field Type Description
basketId String The id of the basket owning the messages. Defaults to the currently selected basket. A different basket is selected as the active basket first.
messageIds List<String> The ids of the messages (see 'messages' in the state response) to mark as acknowledged. Ids which do not belong to the basket are silently ignored.
Response Body
Field Type Description
id required String The database id of the basket.
title required String The displayable title of the basket.
active required boolean Whether this is the currently selected basket of the buyer.
recomputing required boolean Whether the basket is currently being recomputed. Prices and totals may change once the recomputation has finished.
lastRefresh String The timestamp of the last modification of the basket, in ISO-8601 format with seconds precision and without an offset - it is stated in the time zone of the shop.
Example: 2026-08-04T15:53:11
projectName String The name of the project assigned to the basket, if any.
comment String The comment attached to the basket, if there is one.
orderType String The id of the order type selected for this basket, if any - the same id the checkout API reports as the selected order method.
Example: order
orderTypeLabel String The localized name of the order type, for display only.
Example: Order
price ApiPriceResponse The effective total price of the basket, present only if sums may be shown for the current price mode.
price.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
price.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
price.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
netPrice ApiPriceResponse The total net price of the basket including its cost positions, present only if sums may be shown for the current price mode.
netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positionsNetPrice ApiPriceResponse The net price of the regular positions only, i.e. without the cost positions - the subtotal the web basket shows. Present under the same conditions as 'netPrice'.
positionsNetPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positionsNetPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positionsNetPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
grossPrice ApiPriceResponse The total gross price of the basket, present only if sums may be shown for the current price mode.
grossPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
grossPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
grossPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positionCount required long The number of regular positions in the basket.
shippingInfo String The displayable info text about the preselected shipping method, if one is configured.
positionCommentsAllowed required boolean Whether comments may be attached to the positions of the basket.
positions required List<ApiBasketPositionResponse> The regular positions of the basket.
positions[].id required String The database id of the position.
positions[].itemNumber required String The item number of the position, as shown to the current user. Meant for display only - use 'uniqueItemNumber' to address the item in other endpoints.
positions[].uniqueItemNumber String The unique item number of the item behind this position. This is the number the item and search endpoints expect, and the one to send when adding the item again.
positions[].shortText String The short description of the item, so that the position can be rendered without fetching the item details separately.
positions[].previewImageUrl String The URL of the preview image of the item, if the item has one.
positions[].quantity ApiQuantityResponse The ordered quantity.
positions[].quantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].quantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].quantityUnit String The order unit 'quantity' is stated in - the base unit of the item.
Example: piece
positions[].displayQuantity ApiQuantityResponse The quantity in the alternative sales unit the item was ordered in, present only for positions which use one. Render this together with 'displayQuantityUnit' instead of 'quantity'/'quantityUnit', as the web basket does.
positions[].displayQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].displayQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].displayQuantityUnit String The name of the alternative sales unit the item was ordered in, present only for positions which use one.
Example: box
positions[].quantityChangeable required boolean Whether the quantity of this position can be changed.
positions[].priceQuantity ApiQuantityResponse The number of units 'netPricePerUnit' refers to. A unit price of 19,99 with a price quantity of 100 means 19,99 per 100 units. Does not apply to 'netPrice', which is always the total of the whole position.
positions[].priceQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].priceQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].minOrderQuantity ApiQuantityResponse The minimum quantity which can be ordered of this item, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].minOrderQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].minOrderQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].orderStep ApiQuantityResponse The quantity steps in which this item can be ordered, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].orderStep.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].orderStep.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].netPrice ApiPriceResponse The total net price of the whole position (quantity times unit price), present only if prices may be shown for the current price mode and position. Render this as the line total - it must not be multiplied by the quantity again.
positions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].netPricePerUnit ApiPriceResponse The net price of a single price quantity of the item (see 'priceQuantity'), present under the same conditions as 'netPrice'.
positions[].netPricePerUnit.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPricePerUnit.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPricePerUnit.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].comment String The comment attached to this position, if there is one.
positions[].messages required List<ApiMessageResponse> Messages emitted for this position, e.g. availability hints. Unlike basket messages these cannot be acknowledged - the position itself has to be corrected (e.g. via the update or remove endpoint) or the message vanishes once its cause is gone. May be empty.
positions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
positions[].messages[].type required String The severity of the message.
Example: WARNING
positions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
positions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
positions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
positions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
costPositions required List<ApiBasketCostPositionResponse> The cost positions computed by the system (e.g. shipping costs or a minimum quantity surcharge). They are part of 'netPrice' but not of 'positions' - render them to show a summary which adds up. May be empty.
costPositions[].itemNumber String The item number of the cost position, as shown to the current user.
costPositions[].shortText required String The label of the cost position, e.g. 'Shipping costs'.
costPositions[].netPrice ApiPriceResponse The net price of the cost position, present only if prices may be shown for the current price mode.
costPositions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
costPositions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
costPositions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
costPositions[].messages required List<ApiMessageResponse> Messages emitted for this cost position, e.g. an invalid coupon. May be empty. A PROBLEM here blocks the checkout just like a problem on a regular position - and can be its only explanation. Like the messages of a position these cannot be acknowledged.
costPositions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
costPositions[].messages[].type required String The severity of the message.
Example: WARNING
costPositions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
costPositions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
costPositions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
costPositions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
messages required List<ApiMessageResponse> Messages emitted for the basket itself. May be empty.
messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
messages[].type required String The severity of the message.
Example: WARNING
messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
messages[].acknowledged required boolean Whether this message has already been acknowledged.

Checkout

Provides the checkout state, update, validation and completion endpoints for the existing basket of the logged in buyer.

Checkout State

Returns the current state of the checkout for the logged in buyer: the basket summary, invoice/shipping address and contact, the selected and available order/shipping/payment methods, custom fields, messages and whether the basket is in a committable state ('canCommit'). Requires a basket to already exist for the buyer - responds with 404 otherwise. This endpoint does not run the field validation, so 'canCommit' alone is no promise that completing will succeed - call the validate endpoint before offering to place the order.

Documentation

GET JSON /frontend-api/v1/checkout
Parameter
Name Description Example
includeQuantities Whether to report the order quantity metadata (minimum order quantity and order step) of every position. Defaults to false, as it costs an item lookup per position.
Response Body
Field Type Description
netPrice ApiPriceResponse The net sum of the basket, present only if prices may be shown for the current price mode.
netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
grossPrice ApiPriceResponse The gross sum of the basket, present only if prices may be shown for the current price mode.
grossPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
grossPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
grossPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
invoiceAddress required ApiCheckoutAddressResponse The invoice address.
invoiceAddress.name1 String The first name/company line.
invoiceAddress.name2 String The second name/company line.
invoiceAddress.name3 String The third name/company line.
invoiceAddress.street String The street and house number.
invoiceAddress.zip String The ZIP code.
invoiceAddress.city String The city.
invoiceAddress.countryCode String The ISO country code.
Example: DE
invoiceAddress.countryName String The translated country name.
invoiceAddress.correlationId String Links this address to an entry of the buyer's address book, if it currently is a known address. Absent for a manually entered address - which also happens once the fields of a previously linked address are edited. Send it back unchanged (along with the unchanged fields) to keep the link.
shippingAddress required ApiCheckoutAddressResponse The shipping address. May be empty if shipping to the invoice address.
shippingAddress.name1 String The first name/company line.
shippingAddress.name2 String The second name/company line.
shippingAddress.name3 String The third name/company line.
shippingAddress.street String The street and house number.
shippingAddress.zip String The ZIP code.
shippingAddress.city String The city.
shippingAddress.countryCode String The ISO country code.
Example: DE
shippingAddress.countryName String The translated country name.
shippingAddress.correlationId String Links this address to an entry of the buyer's address book, if it currently is a known address. Absent for a manually entered address - which also happens once the fields of a previously linked address are edited. Send it back unchanged (along with the unchanged fields) to keep the link.
shippingContact required ApiCheckoutContactResponse The shipping contact.
shippingContact.contactPerson String The name of the contact person at the shipping address.
shippingContact.phone String The phone number of the contact person.
shippingContact.email String The email address of the contact person.
buyerInfo required ApiCheckoutBuyerInfoResponse The buyer information.
buyerInfo.salutation String The salutation code, as defined in the 'salutations' code list.
buyerInfo.title String The title of the buyer.
buyerInfo.firstname String The first name of the buyer.
buyerInfo.lastname String The last name of the buyer.
buyerInfo.email String The email address of the buyer.
buyerInfo.phone String The phone number of the buyer.
buyerInfo.fax String The fax number of the buyer.
projectId String The id of the selected project, if any.
projectName String The name of the selected project, if any.
commissionId String The commission / cost reference of the order, if any.
couponCode String The applied coupon code, if any.
comment String An optional comment concerning the order.
title String A title or commercial reference (commission) for the basket, if the shop uses this field.
desiredDeliveryDate String The desired delivery date, as an ISO-8601 date ('yyyy-MM-dd'), if set. For shops with the delivery tour feature this is the desired date of the tour - for all others, the delivery date of the basket.
pickupSiteCode String The code of the selected pickup site, if the shipping method uses pickup.
pickupSiteName String The translated name of the selected pickup site, if the shipping method uses pickup.
orderMethod required ApiCheckoutMethodSelectionResponse The selected and available order types.
orderMethod.selectedId String The id of the currently selected method, if any.
orderMethod.selectedName String The translated name of the currently selected method, if any.
orderMethod.values required List<ApiCheckoutMethodOptionResponse> All methods currently available for selection.
orderMethod.values[].id required String The id of the method, to be used in the update request.
orderMethod.values[].name required String The translated name of the method.
orderMethod.values[].requiresAddress Boolean Whether this method requires a shipping address. Only present for shipping methods - use it to decide whether to show the address form when this method is selected.
orderMethod.values[].requiresPickupSite Boolean Whether this method requires a pickup site. Only present for shipping methods - use it to decide whether to show the pickup site selection (see 'pickupSites') when this method is selected.
shippingMethod required ApiCheckoutMethodSelectionResponse The selected and available shipping methods. Each option states whether it requires a shipping address or a pickup site.
shippingMethod.selectedId String The id of the currently selected method, if any.
shippingMethod.selectedName String The translated name of the currently selected method, if any.
shippingMethod.values required List<ApiCheckoutMethodOptionResponse> All methods currently available for selection.
shippingMethod.values[].id required String The id of the method, to be used in the update request.
shippingMethod.values[].name required String The translated name of the method.
shippingMethod.values[].requiresAddress Boolean Whether this method requires a shipping address. Only present for shipping methods - use it to decide whether to show the address form when this method is selected.
shippingMethod.values[].requiresPickupSite Boolean Whether this method requires a pickup site. Only present for shipping methods - use it to decide whether to show the pickup site selection (see 'pickupSites') when this method is selected.
pickupSites List<ApiCheckoutPickupSiteResponse> The selectable pickup sites. Only present if at least one available shipping method requires a pickup site.
pickupSites[].id required long The database id of the pickup site, to be used as 'pickupSiteId' in the update request.
pickupSites[].code required String The code of the pickup site, as reported in 'pickupSiteCode' of the state response.
pickupSites[].name required String The translated name of the pickup site.
tour ApiCheckoutTourResponse The delivery tour selection. Only present if the shop has the tour feature enabled and the tour selection applies to the current basket.
tour.editable required boolean Whether the tour data can currently be changed by the user.
tour.selectedId String The id of the currently selected tour, if any.
tour.selectedLabel String The user readable name of the currently selected tour, if any.
tour.hint String A hint concerning the last tour change (e.g. an automatically updated date), to be shown to the user.
tour.values required List<ApiCheckoutTourOptionResponse> The selectable tours - render a tour picker if and only if this is non-empty. Empty if the shop does not offer a tour selection, mirroring the web checkout (e.g. the selection is disabled, or there is exactly one tour and the shop does not offer a single tour for selection). A tour may still be assigned in that case, reported via 'selectedId'/'selectedLabel'.
tour.values[].id required String The id of the tour, to be used as 'tourId' in the update request.
tour.values[].label required String The user readable name of the tour.
tour.values[].deliveryDate String The delivery date of the tour, as an ISO-8601 date ('yyyy-MM-dd'), if known.
tour.values[].hint String An optional hint concerning the tour, to be shown to the user.
shippingCountries required List<ApiCheckoutCountryResponse> The selectable shipping countries - the valid values for 'countryCode' in the address blocks of the update request.
shippingCountries[].code required String The code of the country, to be used as 'countryCode' in address blocks of the update request.
Example: DE
shippingCountries[].name required String The translated name of the country.
fields required ApiCheckoutFieldsResponse Describes which checkout fields the shop shows, which are editable and which are required - drive the checkout form entirely from this block.
fields.invoiceAddress required ApiCheckoutFieldConfigResponse The invoice address section.
fields.invoiceAddress.show required boolean Whether the field should be shown at all.
fields.invoiceAddress.editable required boolean Whether the field can be edited by the user.
fields.invoiceAddress.required required boolean Whether the field must be filled before the checkout can be completed.
fields.shippingAddress required ApiCheckoutShippingAddressConfigResponse The shipping address section.
fields.shippingAddress.show required boolean Whether the field should be shown at all.
fields.shippingAddress.editable required boolean Whether the field can be edited by the user.
fields.shippingAddress.required required boolean Whether the field must be filled before the checkout can be completed.
fields.shippingAddress.canSuggest required boolean Whether the buyer's address book should be offered for selecting the shipping address (see the addresses suggestion endpoint).
fields.shippingAddress.canSave required boolean Whether an edited shipping address can be saved to the buyer's address book via 'saveShippingAddress' of the update request.
fields.shippingAddress.showName required boolean Whether the name line of the shipping address should be shown.
fields.shippingAddress.showSecondName required boolean Whether the second name line of the shipping address should be shown.
fields.shippingAddress.showThirdName required boolean Whether the third name line of the shipping address should be shown.
fields.shippingContact required ApiCheckoutShippingContactConfigResponse The shipping contact fields.
fields.shippingContact.showContactPerson required boolean Whether the contact person field should be shown.
fields.shippingContact.showPhone required boolean Whether the contact phone field should be shown.
fields.shippingContact.showEmail required boolean Whether the contact email field should be shown.
fields.buyerDetails required ApiCheckoutBuyerConfigResponse The buyer details section.
fields.buyerDetails.show required boolean Whether the buyer details should be shown at all.
fields.buyerDetails.editable required boolean Whether the buyer details can be edited by the user.
fields.buyerDetails.showPhone required boolean Whether the buyer phone field should be shown.
fields.buyerDetails.phoneRequired required boolean Whether the buyer phone must be filled.
fields.buyerDetails.showFax required boolean Whether the buyer fax field should be shown.
fields.buyerDetails.faxRequired required boolean Whether the buyer fax must be filled.
fields.buyerDetails.emailRequired required boolean Whether the buyer email must be filled.
fields.title required ApiCheckoutFieldConfigResponse The checkout title / commercial reference field.
fields.title.show required boolean Whether the field should be shown at all.
fields.title.editable required boolean Whether the field can be edited by the user.
fields.title.required required boolean Whether the field must be filled before the checkout can be completed.
fields.desiredDeliveryDate required ApiCheckoutFieldConfigResponse The desired delivery date field.
fields.desiredDeliveryDate.show required boolean Whether the field should be shown at all.
fields.desiredDeliveryDate.editable required boolean Whether the field can be edited by the user.
fields.desiredDeliveryDate.required required boolean Whether the field must be filled before the checkout can be completed.
fields.project required ApiCheckoutFieldConfigResponse The project selection.
fields.project.show required boolean Whether the field should be shown at all.
fields.project.editable required boolean Whether the field can be edited by the user.
fields.project.required required boolean Whether the field must be filled before the checkout can be completed.
fields.commission required ApiCheckoutFieldConfigResponse The commission selection.
fields.commission.show required boolean Whether the field should be shown at all.
fields.commission.editable required boolean Whether the field can be edited by the user.
fields.commission.required required boolean Whether the field must be filled before the checkout can be completed.
fields.coupon required ApiCheckoutFieldConfigResponse The coupon code field.
fields.coupon.show required boolean Whether the field should be shown at all.
fields.coupon.editable required boolean Whether the field can be edited by the user.
fields.coupon.required required boolean Whether the field must be filled before the checkout can be completed.
fields.comment required ApiCheckoutFieldConfigResponse The order comment field.
fields.comment.show required boolean Whether the field should be shown at all.
fields.comment.editable required boolean Whether the field can be edited by the user.
fields.comment.required required boolean Whether the field must be filled before the checkout can be completed.
fields.pickupSite required ApiCheckoutFieldConfigResponse The pickup site selection (see 'pickupSites' for the selectable sites).
fields.pickupSite.show required boolean Whether the field should be shown at all.
fields.pickupSite.editable required boolean Whether the field can be edited by the user.
fields.pickupSite.required required boolean Whether the field must be filled before the checkout can be completed.
paymentMethod required ApiCheckoutMethodSelectionResponse The selected and available payment methods.
paymentMethod.selectedId String The id of the currently selected method, if any.
paymentMethod.selectedName String The translated name of the currently selected method, if any.
paymentMethod.values required List<ApiCheckoutMethodOptionResponse> All methods currently available for selection.
paymentMethod.values[].id required String The id of the method, to be used in the update request.
paymentMethod.values[].name required String The translated name of the method.
paymentMethod.values[].requiresAddress Boolean Whether this method requires a shipping address. Only present for shipping methods - use it to decide whether to show the address form when this method is selected.
paymentMethod.values[].requiresPickupSite Boolean Whether this method requires a pickup site. Only present for shipping methods - use it to decide whether to show the pickup site selection (see 'pickupSites') when this method is selected.
positions required List<ApiBasketPositionResponse> The regular positions of the basket.
positions[].id required String The database id of the position.
positions[].itemNumber required String The item number of the position, as shown to the current user. Meant for display only - use 'uniqueItemNumber' to address the item in other endpoints.
positions[].uniqueItemNumber String The unique item number of the item behind this position. This is the number the item and search endpoints expect, and the one to send when adding the item again.
positions[].shortText String The short description of the item, so that the position can be rendered without fetching the item details separately.
positions[].previewImageUrl String The URL of the preview image of the item, if the item has one.
positions[].quantity ApiQuantityResponse The ordered quantity.
positions[].quantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].quantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].quantityUnit String The order unit 'quantity' is stated in - the base unit of the item.
Example: piece
positions[].displayQuantity ApiQuantityResponse The quantity in the alternative sales unit the item was ordered in, present only for positions which use one. Render this together with 'displayQuantityUnit' instead of 'quantity'/'quantityUnit', as the web basket does.
positions[].displayQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].displayQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].displayQuantityUnit String The name of the alternative sales unit the item was ordered in, present only for positions which use one.
Example: box
positions[].quantityChangeable required boolean Whether the quantity of this position can be changed.
positions[].priceQuantity ApiQuantityResponse The number of units 'netPricePerUnit' refers to. A unit price of 19,99 with a price quantity of 100 means 19,99 per 100 units. Does not apply to 'netPrice', which is always the total of the whole position.
positions[].priceQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].priceQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].minOrderQuantity ApiQuantityResponse The minimum quantity which can be ordered of this item, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].minOrderQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].minOrderQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].orderStep ApiQuantityResponse The quantity steps in which this item can be ordered, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].orderStep.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].orderStep.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].netPrice ApiPriceResponse The total net price of the whole position (quantity times unit price), present only if prices may be shown for the current price mode and position. Render this as the line total - it must not be multiplied by the quantity again.
positions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].netPricePerUnit ApiPriceResponse The net price of a single price quantity of the item (see 'priceQuantity'), present under the same conditions as 'netPrice'.
positions[].netPricePerUnit.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPricePerUnit.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPricePerUnit.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].comment String The comment attached to this position, if there is one.
positions[].messages required List<ApiMessageResponse> Messages emitted for this position, e.g. availability hints. Unlike basket messages these cannot be acknowledged - the position itself has to be corrected (e.g. via the update or remove endpoint) or the message vanishes once its cause is gone. May be empty.
positions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
positions[].messages[].type required String The severity of the message.
Example: WARNING
positions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
positions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
positions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
positions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
costPositions required List<ApiBasketCostPositionResponse> The computed cost positions of the basket (e.g. shipping costs). Together with the regular positions, these add up to the reported basket sums. May be empty.
costPositions[].itemNumber String The item number of the cost position, as shown to the current user.
costPositions[].shortText required String The label of the cost position, e.g. 'Shipping costs'.
costPositions[].netPrice ApiPriceResponse The net price of the cost position, present only if prices may be shown for the current price mode.
costPositions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
costPositions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
costPositions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
costPositions[].messages required List<ApiMessageResponse> Messages emitted for this cost position, e.g. an invalid coupon. May be empty. A PROBLEM here blocks the checkout just like a problem on a regular position - and can be its only explanation. Like the messages of a position these cannot be acknowledged.
costPositions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
costPositions[].messages[].type required String The severity of the message.
Example: WARNING
costPositions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
costPositions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
costPositions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
costPositions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
messages required List<ApiMessageResponse> Messages concerning the basket as a whole, e.g. validation problems or warnings which need to be acknowledged. May be empty.
messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
messages[].type required String The severity of the message.
Example: WARNING
messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
messages[].acknowledged required boolean Whether this message has already been acknowledged.
canCommit required boolean Whether the basket is in a committable state - false if the checkout is disabled or not permitted, the basket is erroneous or currently locked, or an unacknowledged warning exists. This is a necessary but not a sufficient condition: it does not run the field validation (e.g. a missing required title), which only the validate and complete endpoints perform. Call validate before offering to place the order.
customFields required Map<String, ApiCheckoutCustomFieldResponse> The current custom field values, keyed by field name. Combines shop-configurable 'CustomizableField' values and compiled, customer-specific fields.
customFields[].label required String The translated label of the field.
customFields[].type required String The type of the field, e.g. 'STRING', 'BOOLEAN', 'SELECT'.
customFields[].value String The current value of the field, if any.
customFields[].messages required List<ApiMessageResponse> Messages emitted for this field, e.g. validation problems. May be empty.
customFields[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
customFields[].messages[].type required String The severity of the message.
Example: WARNING
customFields[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
customFields[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
customFields[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
customFields[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
customFieldDefinitions required List<ApiCheckoutCustomFieldDefinitionResponse> Describes the shop-configurable custom fields applicable to the basket, so that an app can render fields generically, including ones added later. Does not include the compiled, customer-specific fields contributed by an ApiCheckoutFieldCustomizer, as those are not shop-configurable and are expected to be known to the app in advance.
customFieldDefinitions[].id required String The database id of the field definition.
customFieldDefinitions[].name required String The technical name of the field - the key to use in 'customFields'.
customFieldDefinitions[].title required String The translated title of the field.
customFieldDefinitions[].type required String The type of the field, e.g. 'STRING', 'BOOLEAN', 'SELECT'.
customFieldDefinitions[].required required boolean Whether the field must be filled in order to complete the checkout.
customFieldDefinitions[].selectValues List<String> The selectable values, only present for types like 'SELECT' or 'RADIO'.
customFieldDefinitions[].hide required boolean Whether the field should be kept hidden instead of shown as input.

Update Checkout

Applies a partial update to the checkout: invoice/shipping address and contact, order/shipping/payment method, pickup site, desired delivery date, buyer information, project, commission, coupon code, comment and custom fields. Only fields actually present in the request are applied - everything else is left untouched. Returns the same state shape as the GET endpoint ("read your writes"). This does not perform the full checkout validation (see the validate endpoint) - it only enforces the basic consistency of the given fields.

Documentation

POST JSON /frontend-api/v1/checkout/update
Parameter
Name Description Example
includeQuantities Whether to report the order quantity metadata (minimum order quantity and order step) of every position. Defaults to false, as it costs an item lookup per position.
Request Body
Field Type Description
invoiceAddress ApiCheckoutAddressRequest The invoice address. If present, replaces the whole invoice address.
invoiceAddress.name1 String The first name/company line. At most 255 characters.
invoiceAddress.name2 String The second name/company line. At most 255 characters.
invoiceAddress.name3 String The third name/company line. At most 255 characters.
invoiceAddress.street String The street and house number. At most 255 characters.
invoiceAddress.zip String The ZIP code. At most 16 characters.
invoiceAddress.city String The city. At most 255 characters.
invoiceAddress.countryCode String The country code, as listed in 'shippingCountries' of the state response - an unknown code is rejected with a 400 error. For the shipping address, this is only honored if the shop permits changing the shipping country - otherwise the invoice address's country is used.
Example: DE
invoiceAddress.correlationId String Links this address to an entry of the buyer's address book. Only ever send a value obtained from the API (the addresses suggestion endpoint or a previous state response), together with that entry's unchanged fields. Omit it (or send an empty string) for a manually entered address - it is then auto-linked if it matches a known entry and otherwise validated against the ERP. A link whose fields no longer match the referenced entry is dropped automatically, so always read the effective value back from the response. At most 255 characters.
shippingAddress ApiCheckoutAddressRequest The shipping address. If present, replaces the whole shipping address.
shippingAddress.name1 String The first name/company line. At most 255 characters.
shippingAddress.name2 String The second name/company line. At most 255 characters.
shippingAddress.name3 String The third name/company line. At most 255 characters.
shippingAddress.street String The street and house number. At most 255 characters.
shippingAddress.zip String The ZIP code. At most 16 characters.
shippingAddress.city String The city. At most 255 characters.
shippingAddress.countryCode String The country code, as listed in 'shippingCountries' of the state response - an unknown code is rejected with a 400 error. For the shipping address, this is only honored if the shop permits changing the shipping country - otherwise the invoice address's country is used.
Example: DE
shippingAddress.correlationId String Links this address to an entry of the buyer's address book. Only ever send a value obtained from the API (the addresses suggestion endpoint or a previous state response), together with that entry's unchanged fields. Omit it (or send an empty string) for a manually entered address - it is then auto-linked if it matches a known entry and otherwise validated against the ERP. A link whose fields no longer match the referenced entry is dropped automatically, so always read the effective value back from the response. At most 255 characters.
shippingContact ApiCheckoutContactRequest The shipping contact. If present, replaces the whole shipping contact.
shippingContact.contactPerson String The name of the contact person at the shipping address. At most 255 characters.
shippingContact.phone String The phone number of the contact person. At most 150 characters.
shippingContact.email String The email address of the contact person. At most 150 characters.
shippingMethodId String The id of the shipping method to select, as listed in the state response. An unknown or unavailable id is rejected with a 400 error.
paymentMethodId String The id of the payment method to select, as listed in the state response. An unknown or unavailable id is rejected with a 400 error.
orderMethodId String The id of the order type to select, as listed in the state response. An unknown or unavailable id is rejected with a 400 error.
pickupSiteId Long The id of the pickup site to select, as listed in 'pickupSites' of the state response - an unknown id is rejected with a 400 error. Send 0 or a negative number to clear the pickup site.
desiredDeliveryDate String The desired delivery date, as an ISO-8601 date ('yyyy-MM-dd'). Send an empty string to clear it. For shops with the delivery tour feature, this sets the desired date of the tour - for all others, the delivery date of the basket (then only applied if the selected shipping method requires an address). Note that the shop may adjust the date to the next valid tour.
tourId String The id of the delivery tour to select, as listed in the 'tour' block of the state response. Only accepted if the shop has the tour feature enabled - an unknown or no longer valid id is rejected with a 400 error. Send an empty string to clear the selected tour.
buyerInfo ApiCheckoutBuyerInfoRequest The buyer information. If present, only the given fields of the buyer information are applied.
buyerInfo.salutation String The salutation code, as defined in the 'salutations' code list. At most 20 characters.
buyerInfo.title String The title of the buyer. At most 50 characters.
buyerInfo.firstname String The first name of the buyer. At most 150 characters.
buyerInfo.lastname String The last name of the buyer. At most 150 characters.
buyerInfo.email String The email address of the buyer. At most 255 characters.
buyerInfo.phone String The phone number of the buyer. At most 255 characters.
buyerInfo.fax String The fax number of the buyer. At most 255 characters.
projectId String The id of the project to select, as returned by the project suggestion endpoint - an unknown id is rejected with a 400 error. Send an empty string to clear the project.
commissionId String The commission / cost reference of the order. At most 64 characters. Send an empty string to clear it.
couponCode String The coupon code to apply. At most 255 characters. Send an empty string to remove an applied coupon.
comment String An optional comment concerning the order. Not limited in length by default, but shops may configure a maximum length, enforced by the validate and complete endpoints.
title String A title or commercial reference (commission) for the basket, if the shop uses this field. At most 512 characters.
saveShippingAddress Boolean If true, the (edited) shipping address is saved to the buyer's address book - only honored if the state response reports 'fields.shippingAddress.canSave' and the selected shipping method requires an address.
customFields Map<String, String> Custom field values, keyed by field name. Covers both shop-configurable 'CustomizableField' values (see 'customFieldDefinitions' in the state response) and compiled, customer-specific fields contributed by an ApiCheckoutFieldCustomizer. If present at all, every customizable field not contained in this map is left untouched (it is not cleared).
Response Body
Field Type Description
netPrice ApiPriceResponse The net sum of the basket, present only if prices may be shown for the current price mode.
netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
grossPrice ApiPriceResponse The gross sum of the basket, present only if prices may be shown for the current price mode.
grossPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
grossPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
grossPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
invoiceAddress required ApiCheckoutAddressResponse The invoice address.
invoiceAddress.name1 String The first name/company line.
invoiceAddress.name2 String The second name/company line.
invoiceAddress.name3 String The third name/company line.
invoiceAddress.street String The street and house number.
invoiceAddress.zip String The ZIP code.
invoiceAddress.city String The city.
invoiceAddress.countryCode String The ISO country code.
Example: DE
invoiceAddress.countryName String The translated country name.
invoiceAddress.correlationId String Links this address to an entry of the buyer's address book, if it currently is a known address. Absent for a manually entered address - which also happens once the fields of a previously linked address are edited. Send it back unchanged (along with the unchanged fields) to keep the link.
shippingAddress required ApiCheckoutAddressResponse The shipping address. May be empty if shipping to the invoice address.
shippingAddress.name1 String The first name/company line.
shippingAddress.name2 String The second name/company line.
shippingAddress.name3 String The third name/company line.
shippingAddress.street String The street and house number.
shippingAddress.zip String The ZIP code.
shippingAddress.city String The city.
shippingAddress.countryCode String The ISO country code.
Example: DE
shippingAddress.countryName String The translated country name.
shippingAddress.correlationId String Links this address to an entry of the buyer's address book, if it currently is a known address. Absent for a manually entered address - which also happens once the fields of a previously linked address are edited. Send it back unchanged (along with the unchanged fields) to keep the link.
shippingContact required ApiCheckoutContactResponse The shipping contact.
shippingContact.contactPerson String The name of the contact person at the shipping address.
shippingContact.phone String The phone number of the contact person.
shippingContact.email String The email address of the contact person.
buyerInfo required ApiCheckoutBuyerInfoResponse The buyer information.
buyerInfo.salutation String The salutation code, as defined in the 'salutations' code list.
buyerInfo.title String The title of the buyer.
buyerInfo.firstname String The first name of the buyer.
buyerInfo.lastname String The last name of the buyer.
buyerInfo.email String The email address of the buyer.
buyerInfo.phone String The phone number of the buyer.
buyerInfo.fax String The fax number of the buyer.
projectId String The id of the selected project, if any.
projectName String The name of the selected project, if any.
commissionId String The commission / cost reference of the order, if any.
couponCode String The applied coupon code, if any.
comment String An optional comment concerning the order.
title String A title or commercial reference (commission) for the basket, if the shop uses this field.
desiredDeliveryDate String The desired delivery date, as an ISO-8601 date ('yyyy-MM-dd'), if set. For shops with the delivery tour feature this is the desired date of the tour - for all others, the delivery date of the basket.
pickupSiteCode String The code of the selected pickup site, if the shipping method uses pickup.
pickupSiteName String The translated name of the selected pickup site, if the shipping method uses pickup.
orderMethod required ApiCheckoutMethodSelectionResponse The selected and available order types.
orderMethod.selectedId String The id of the currently selected method, if any.
orderMethod.selectedName String The translated name of the currently selected method, if any.
orderMethod.values required List<ApiCheckoutMethodOptionResponse> All methods currently available for selection.
orderMethod.values[].id required String The id of the method, to be used in the update request.
orderMethod.values[].name required String The translated name of the method.
orderMethod.values[].requiresAddress Boolean Whether this method requires a shipping address. Only present for shipping methods - use it to decide whether to show the address form when this method is selected.
orderMethod.values[].requiresPickupSite Boolean Whether this method requires a pickup site. Only present for shipping methods - use it to decide whether to show the pickup site selection (see 'pickupSites') when this method is selected.
shippingMethod required ApiCheckoutMethodSelectionResponse The selected and available shipping methods. Each option states whether it requires a shipping address or a pickup site.
shippingMethod.selectedId String The id of the currently selected method, if any.
shippingMethod.selectedName String The translated name of the currently selected method, if any.
shippingMethod.values required List<ApiCheckoutMethodOptionResponse> All methods currently available for selection.
shippingMethod.values[].id required String The id of the method, to be used in the update request.
shippingMethod.values[].name required String The translated name of the method.
shippingMethod.values[].requiresAddress Boolean Whether this method requires a shipping address. Only present for shipping methods - use it to decide whether to show the address form when this method is selected.
shippingMethod.values[].requiresPickupSite Boolean Whether this method requires a pickup site. Only present for shipping methods - use it to decide whether to show the pickup site selection (see 'pickupSites') when this method is selected.
pickupSites List<ApiCheckoutPickupSiteResponse> The selectable pickup sites. Only present if at least one available shipping method requires a pickup site.
pickupSites[].id required long The database id of the pickup site, to be used as 'pickupSiteId' in the update request.
pickupSites[].code required String The code of the pickup site, as reported in 'pickupSiteCode' of the state response.
pickupSites[].name required String The translated name of the pickup site.
tour ApiCheckoutTourResponse The delivery tour selection. Only present if the shop has the tour feature enabled and the tour selection applies to the current basket.
tour.editable required boolean Whether the tour data can currently be changed by the user.
tour.selectedId String The id of the currently selected tour, if any.
tour.selectedLabel String The user readable name of the currently selected tour, if any.
tour.hint String A hint concerning the last tour change (e.g. an automatically updated date), to be shown to the user.
tour.values required List<ApiCheckoutTourOptionResponse> The selectable tours - render a tour picker if and only if this is non-empty. Empty if the shop does not offer a tour selection, mirroring the web checkout (e.g. the selection is disabled, or there is exactly one tour and the shop does not offer a single tour for selection). A tour may still be assigned in that case, reported via 'selectedId'/'selectedLabel'.
tour.values[].id required String The id of the tour, to be used as 'tourId' in the update request.
tour.values[].label required String The user readable name of the tour.
tour.values[].deliveryDate String The delivery date of the tour, as an ISO-8601 date ('yyyy-MM-dd'), if known.
tour.values[].hint String An optional hint concerning the tour, to be shown to the user.
shippingCountries required List<ApiCheckoutCountryResponse> The selectable shipping countries - the valid values for 'countryCode' in the address blocks of the update request.
shippingCountries[].code required String The code of the country, to be used as 'countryCode' in address blocks of the update request.
Example: DE
shippingCountries[].name required String The translated name of the country.
fields required ApiCheckoutFieldsResponse Describes which checkout fields the shop shows, which are editable and which are required - drive the checkout form entirely from this block.
fields.invoiceAddress required ApiCheckoutFieldConfigResponse The invoice address section.
fields.invoiceAddress.show required boolean Whether the field should be shown at all.
fields.invoiceAddress.editable required boolean Whether the field can be edited by the user.
fields.invoiceAddress.required required boolean Whether the field must be filled before the checkout can be completed.
fields.shippingAddress required ApiCheckoutShippingAddressConfigResponse The shipping address section.
fields.shippingAddress.show required boolean Whether the field should be shown at all.
fields.shippingAddress.editable required boolean Whether the field can be edited by the user.
fields.shippingAddress.required required boolean Whether the field must be filled before the checkout can be completed.
fields.shippingAddress.canSuggest required boolean Whether the buyer's address book should be offered for selecting the shipping address (see the addresses suggestion endpoint).
fields.shippingAddress.canSave required boolean Whether an edited shipping address can be saved to the buyer's address book via 'saveShippingAddress' of the update request.
fields.shippingAddress.showName required boolean Whether the name line of the shipping address should be shown.
fields.shippingAddress.showSecondName required boolean Whether the second name line of the shipping address should be shown.
fields.shippingAddress.showThirdName required boolean Whether the third name line of the shipping address should be shown.
fields.shippingContact required ApiCheckoutShippingContactConfigResponse The shipping contact fields.
fields.shippingContact.showContactPerson required boolean Whether the contact person field should be shown.
fields.shippingContact.showPhone required boolean Whether the contact phone field should be shown.
fields.shippingContact.showEmail required boolean Whether the contact email field should be shown.
fields.buyerDetails required ApiCheckoutBuyerConfigResponse The buyer details section.
fields.buyerDetails.show required boolean Whether the buyer details should be shown at all.
fields.buyerDetails.editable required boolean Whether the buyer details can be edited by the user.
fields.buyerDetails.showPhone required boolean Whether the buyer phone field should be shown.
fields.buyerDetails.phoneRequired required boolean Whether the buyer phone must be filled.
fields.buyerDetails.showFax required boolean Whether the buyer fax field should be shown.
fields.buyerDetails.faxRequired required boolean Whether the buyer fax must be filled.
fields.buyerDetails.emailRequired required boolean Whether the buyer email must be filled.
fields.title required ApiCheckoutFieldConfigResponse The checkout title / commercial reference field.
fields.title.show required boolean Whether the field should be shown at all.
fields.title.editable required boolean Whether the field can be edited by the user.
fields.title.required required boolean Whether the field must be filled before the checkout can be completed.
fields.desiredDeliveryDate required ApiCheckoutFieldConfigResponse The desired delivery date field.
fields.desiredDeliveryDate.show required boolean Whether the field should be shown at all.
fields.desiredDeliveryDate.editable required boolean Whether the field can be edited by the user.
fields.desiredDeliveryDate.required required boolean Whether the field must be filled before the checkout can be completed.
fields.project required ApiCheckoutFieldConfigResponse The project selection.
fields.project.show required boolean Whether the field should be shown at all.
fields.project.editable required boolean Whether the field can be edited by the user.
fields.project.required required boolean Whether the field must be filled before the checkout can be completed.
fields.commission required ApiCheckoutFieldConfigResponse The commission selection.
fields.commission.show required boolean Whether the field should be shown at all.
fields.commission.editable required boolean Whether the field can be edited by the user.
fields.commission.required required boolean Whether the field must be filled before the checkout can be completed.
fields.coupon required ApiCheckoutFieldConfigResponse The coupon code field.
fields.coupon.show required boolean Whether the field should be shown at all.
fields.coupon.editable required boolean Whether the field can be edited by the user.
fields.coupon.required required boolean Whether the field must be filled before the checkout can be completed.
fields.comment required ApiCheckoutFieldConfigResponse The order comment field.
fields.comment.show required boolean Whether the field should be shown at all.
fields.comment.editable required boolean Whether the field can be edited by the user.
fields.comment.required required boolean Whether the field must be filled before the checkout can be completed.
fields.pickupSite required ApiCheckoutFieldConfigResponse The pickup site selection (see 'pickupSites' for the selectable sites).
fields.pickupSite.show required boolean Whether the field should be shown at all.
fields.pickupSite.editable required boolean Whether the field can be edited by the user.
fields.pickupSite.required required boolean Whether the field must be filled before the checkout can be completed.
paymentMethod required ApiCheckoutMethodSelectionResponse The selected and available payment methods.
paymentMethod.selectedId String The id of the currently selected method, if any.
paymentMethod.selectedName String The translated name of the currently selected method, if any.
paymentMethod.values required List<ApiCheckoutMethodOptionResponse> All methods currently available for selection.
paymentMethod.values[].id required String The id of the method, to be used in the update request.
paymentMethod.values[].name required String The translated name of the method.
paymentMethod.values[].requiresAddress Boolean Whether this method requires a shipping address. Only present for shipping methods - use it to decide whether to show the address form when this method is selected.
paymentMethod.values[].requiresPickupSite Boolean Whether this method requires a pickup site. Only present for shipping methods - use it to decide whether to show the pickup site selection (see 'pickupSites') when this method is selected.
positions required List<ApiBasketPositionResponse> The regular positions of the basket.
positions[].id required String The database id of the position.
positions[].itemNumber required String The item number of the position, as shown to the current user. Meant for display only - use 'uniqueItemNumber' to address the item in other endpoints.
positions[].uniqueItemNumber String The unique item number of the item behind this position. This is the number the item and search endpoints expect, and the one to send when adding the item again.
positions[].shortText String The short description of the item, so that the position can be rendered without fetching the item details separately.
positions[].previewImageUrl String The URL of the preview image of the item, if the item has one.
positions[].quantity ApiQuantityResponse The ordered quantity.
positions[].quantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].quantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].quantityUnit String The order unit 'quantity' is stated in - the base unit of the item.
Example: piece
positions[].displayQuantity ApiQuantityResponse The quantity in the alternative sales unit the item was ordered in, present only for positions which use one. Render this together with 'displayQuantityUnit' instead of 'quantity'/'quantityUnit', as the web basket does.
positions[].displayQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].displayQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].displayQuantityUnit String The name of the alternative sales unit the item was ordered in, present only for positions which use one.
Example: box
positions[].quantityChangeable required boolean Whether the quantity of this position can be changed.
positions[].priceQuantity ApiQuantityResponse The number of units 'netPricePerUnit' refers to. A unit price of 19,99 with a price quantity of 100 means 19,99 per 100 units. Does not apply to 'netPrice', which is always the total of the whole position.
positions[].priceQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].priceQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].minOrderQuantity ApiQuantityResponse The minimum quantity which can be ordered of this item, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].minOrderQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].minOrderQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].orderStep ApiQuantityResponse The quantity steps in which this item can be ordered, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].orderStep.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].orderStep.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].netPrice ApiPriceResponse The total net price of the whole position (quantity times unit price), present only if prices may be shown for the current price mode and position. Render this as the line total - it must not be multiplied by the quantity again.
positions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].netPricePerUnit ApiPriceResponse The net price of a single price quantity of the item (see 'priceQuantity'), present under the same conditions as 'netPrice'.
positions[].netPricePerUnit.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPricePerUnit.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPricePerUnit.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].comment String The comment attached to this position, if there is one.
positions[].messages required List<ApiMessageResponse> Messages emitted for this position, e.g. availability hints. Unlike basket messages these cannot be acknowledged - the position itself has to be corrected (e.g. via the update or remove endpoint) or the message vanishes once its cause is gone. May be empty.
positions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
positions[].messages[].type required String The severity of the message.
Example: WARNING
positions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
positions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
positions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
positions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
costPositions required List<ApiBasketCostPositionResponse> The computed cost positions of the basket (e.g. shipping costs). Together with the regular positions, these add up to the reported basket sums. May be empty.
costPositions[].itemNumber String The item number of the cost position, as shown to the current user.
costPositions[].shortText required String The label of the cost position, e.g. 'Shipping costs'.
costPositions[].netPrice ApiPriceResponse The net price of the cost position, present only if prices may be shown for the current price mode.
costPositions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
costPositions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
costPositions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
costPositions[].messages required List<ApiMessageResponse> Messages emitted for this cost position, e.g. an invalid coupon. May be empty. A PROBLEM here blocks the checkout just like a problem on a regular position - and can be its only explanation. Like the messages of a position these cannot be acknowledged.
costPositions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
costPositions[].messages[].type required String The severity of the message.
Example: WARNING
costPositions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
costPositions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
costPositions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
costPositions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
messages required List<ApiMessageResponse> Messages concerning the basket as a whole, e.g. validation problems or warnings which need to be acknowledged. May be empty.
messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
messages[].type required String The severity of the message.
Example: WARNING
messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
messages[].acknowledged required boolean Whether this message has already been acknowledged.
canCommit required boolean Whether the basket is in a committable state - false if the checkout is disabled or not permitted, the basket is erroneous or currently locked, or an unacknowledged warning exists. This is a necessary but not a sufficient condition: it does not run the field validation (e.g. a missing required title), which only the validate and complete endpoints perform. Call validate before offering to place the order.
customFields required Map<String, ApiCheckoutCustomFieldResponse> The current custom field values, keyed by field name. Combines shop-configurable 'CustomizableField' values and compiled, customer-specific fields.
customFields[].label required String The translated label of the field.
customFields[].type required String The type of the field, e.g. 'STRING', 'BOOLEAN', 'SELECT'.
customFields[].value String The current value of the field, if any.
customFields[].messages required List<ApiMessageResponse> Messages emitted for this field, e.g. validation problems. May be empty.
customFields[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
customFields[].messages[].type required String The severity of the message.
Example: WARNING
customFields[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
customFields[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
customFields[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
customFields[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
customFieldDefinitions required List<ApiCheckoutCustomFieldDefinitionResponse> Describes the shop-configurable custom fields applicable to the basket, so that an app can render fields generically, including ones added later. Does not include the compiled, customer-specific fields contributed by an ApiCheckoutFieldCustomizer, as those are not shop-configurable and are expected to be known to the app in advance.
customFieldDefinitions[].id required String The database id of the field definition.
customFieldDefinitions[].name required String The technical name of the field - the key to use in 'customFields'.
customFieldDefinitions[].title required String The translated title of the field.
customFieldDefinitions[].type required String The type of the field, e.g. 'STRING', 'BOOLEAN', 'SELECT'.
customFieldDefinitions[].required required boolean Whether the field must be filled in order to complete the checkout.
customFieldDefinitions[].selectValues List<String> The selectable values, only present for types like 'SELECT' or 'RADIO'.
customFieldDefinitions[].hide required boolean Whether the field should be kept hidden instead of shown as input.

Validate Checkout

Validates the checkout without committing it: enforces all checkout constraints, awaits a pending recomputation of the basket and then runs the full field validation. Hard problems (e.g. a missing required field) are reported as a structured HTTP error - soft problems are reported via 'messages' and 'canCommit' in the returned state, mirroring the GET endpoint. Optionally acknowledges messages (e.g. a severe stock warning) before evaluating whether the checkout can be completed.

Documentation

POST JSON /frontend-api/v1/checkout/validate
Parameter
Name Description Example
includeQuantities Whether to report the order quantity metadata (minimum order quantity and order step) of every position. Defaults to false, as it costs an item lookup per position.
Request Body
Field Type Description
acknowledgedMessageIds List<String> The ids of the messages (see 'messages' in the state response) to mark as acknowledged before evaluating whether the checkout can be completed.
Response Body
Field Type Description
netPrice ApiPriceResponse The net sum of the basket, present only if prices may be shown for the current price mode.
netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
grossPrice ApiPriceResponse The gross sum of the basket, present only if prices may be shown for the current price mode.
grossPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
grossPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
grossPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
invoiceAddress required ApiCheckoutAddressResponse The invoice address.
invoiceAddress.name1 String The first name/company line.
invoiceAddress.name2 String The second name/company line.
invoiceAddress.name3 String The third name/company line.
invoiceAddress.street String The street and house number.
invoiceAddress.zip String The ZIP code.
invoiceAddress.city String The city.
invoiceAddress.countryCode String The ISO country code.
Example: DE
invoiceAddress.countryName String The translated country name.
invoiceAddress.correlationId String Links this address to an entry of the buyer's address book, if it currently is a known address. Absent for a manually entered address - which also happens once the fields of a previously linked address are edited. Send it back unchanged (along with the unchanged fields) to keep the link.
shippingAddress required ApiCheckoutAddressResponse The shipping address. May be empty if shipping to the invoice address.
shippingAddress.name1 String The first name/company line.
shippingAddress.name2 String The second name/company line.
shippingAddress.name3 String The third name/company line.
shippingAddress.street String The street and house number.
shippingAddress.zip String The ZIP code.
shippingAddress.city String The city.
shippingAddress.countryCode String The ISO country code.
Example: DE
shippingAddress.countryName String The translated country name.
shippingAddress.correlationId String Links this address to an entry of the buyer's address book, if it currently is a known address. Absent for a manually entered address - which also happens once the fields of a previously linked address are edited. Send it back unchanged (along with the unchanged fields) to keep the link.
shippingContact required ApiCheckoutContactResponse The shipping contact.
shippingContact.contactPerson String The name of the contact person at the shipping address.
shippingContact.phone String The phone number of the contact person.
shippingContact.email String The email address of the contact person.
buyerInfo required ApiCheckoutBuyerInfoResponse The buyer information.
buyerInfo.salutation String The salutation code, as defined in the 'salutations' code list.
buyerInfo.title String The title of the buyer.
buyerInfo.firstname String The first name of the buyer.
buyerInfo.lastname String The last name of the buyer.
buyerInfo.email String The email address of the buyer.
buyerInfo.phone String The phone number of the buyer.
buyerInfo.fax String The fax number of the buyer.
projectId String The id of the selected project, if any.
projectName String The name of the selected project, if any.
commissionId String The commission / cost reference of the order, if any.
couponCode String The applied coupon code, if any.
comment String An optional comment concerning the order.
title String A title or commercial reference (commission) for the basket, if the shop uses this field.
desiredDeliveryDate String The desired delivery date, as an ISO-8601 date ('yyyy-MM-dd'), if set. For shops with the delivery tour feature this is the desired date of the tour - for all others, the delivery date of the basket.
pickupSiteCode String The code of the selected pickup site, if the shipping method uses pickup.
pickupSiteName String The translated name of the selected pickup site, if the shipping method uses pickup.
orderMethod required ApiCheckoutMethodSelectionResponse The selected and available order types.
orderMethod.selectedId String The id of the currently selected method, if any.
orderMethod.selectedName String The translated name of the currently selected method, if any.
orderMethod.values required List<ApiCheckoutMethodOptionResponse> All methods currently available for selection.
orderMethod.values[].id required String The id of the method, to be used in the update request.
orderMethod.values[].name required String The translated name of the method.
orderMethod.values[].requiresAddress Boolean Whether this method requires a shipping address. Only present for shipping methods - use it to decide whether to show the address form when this method is selected.
orderMethod.values[].requiresPickupSite Boolean Whether this method requires a pickup site. Only present for shipping methods - use it to decide whether to show the pickup site selection (see 'pickupSites') when this method is selected.
shippingMethod required ApiCheckoutMethodSelectionResponse The selected and available shipping methods. Each option states whether it requires a shipping address or a pickup site.
shippingMethod.selectedId String The id of the currently selected method, if any.
shippingMethod.selectedName String The translated name of the currently selected method, if any.
shippingMethod.values required List<ApiCheckoutMethodOptionResponse> All methods currently available for selection.
shippingMethod.values[].id required String The id of the method, to be used in the update request.
shippingMethod.values[].name required String The translated name of the method.
shippingMethod.values[].requiresAddress Boolean Whether this method requires a shipping address. Only present for shipping methods - use it to decide whether to show the address form when this method is selected.
shippingMethod.values[].requiresPickupSite Boolean Whether this method requires a pickup site. Only present for shipping methods - use it to decide whether to show the pickup site selection (see 'pickupSites') when this method is selected.
pickupSites List<ApiCheckoutPickupSiteResponse> The selectable pickup sites. Only present if at least one available shipping method requires a pickup site.
pickupSites[].id required long The database id of the pickup site, to be used as 'pickupSiteId' in the update request.
pickupSites[].code required String The code of the pickup site, as reported in 'pickupSiteCode' of the state response.
pickupSites[].name required String The translated name of the pickup site.
tour ApiCheckoutTourResponse The delivery tour selection. Only present if the shop has the tour feature enabled and the tour selection applies to the current basket.
tour.editable required boolean Whether the tour data can currently be changed by the user.
tour.selectedId String The id of the currently selected tour, if any.
tour.selectedLabel String The user readable name of the currently selected tour, if any.
tour.hint String A hint concerning the last tour change (e.g. an automatically updated date), to be shown to the user.
tour.values required List<ApiCheckoutTourOptionResponse> The selectable tours - render a tour picker if and only if this is non-empty. Empty if the shop does not offer a tour selection, mirroring the web checkout (e.g. the selection is disabled, or there is exactly one tour and the shop does not offer a single tour for selection). A tour may still be assigned in that case, reported via 'selectedId'/'selectedLabel'.
tour.values[].id required String The id of the tour, to be used as 'tourId' in the update request.
tour.values[].label required String The user readable name of the tour.
tour.values[].deliveryDate String The delivery date of the tour, as an ISO-8601 date ('yyyy-MM-dd'), if known.
tour.values[].hint String An optional hint concerning the tour, to be shown to the user.
shippingCountries required List<ApiCheckoutCountryResponse> The selectable shipping countries - the valid values for 'countryCode' in the address blocks of the update request.
shippingCountries[].code required String The code of the country, to be used as 'countryCode' in address blocks of the update request.
Example: DE
shippingCountries[].name required String The translated name of the country.
fields required ApiCheckoutFieldsResponse Describes which checkout fields the shop shows, which are editable and which are required - drive the checkout form entirely from this block.
fields.invoiceAddress required ApiCheckoutFieldConfigResponse The invoice address section.
fields.invoiceAddress.show required boolean Whether the field should be shown at all.
fields.invoiceAddress.editable required boolean Whether the field can be edited by the user.
fields.invoiceAddress.required required boolean Whether the field must be filled before the checkout can be completed.
fields.shippingAddress required ApiCheckoutShippingAddressConfigResponse The shipping address section.
fields.shippingAddress.show required boolean Whether the field should be shown at all.
fields.shippingAddress.editable required boolean Whether the field can be edited by the user.
fields.shippingAddress.required required boolean Whether the field must be filled before the checkout can be completed.
fields.shippingAddress.canSuggest required boolean Whether the buyer's address book should be offered for selecting the shipping address (see the addresses suggestion endpoint).
fields.shippingAddress.canSave required boolean Whether an edited shipping address can be saved to the buyer's address book via 'saveShippingAddress' of the update request.
fields.shippingAddress.showName required boolean Whether the name line of the shipping address should be shown.
fields.shippingAddress.showSecondName required boolean Whether the second name line of the shipping address should be shown.
fields.shippingAddress.showThirdName required boolean Whether the third name line of the shipping address should be shown.
fields.shippingContact required ApiCheckoutShippingContactConfigResponse The shipping contact fields.
fields.shippingContact.showContactPerson required boolean Whether the contact person field should be shown.
fields.shippingContact.showPhone required boolean Whether the contact phone field should be shown.
fields.shippingContact.showEmail required boolean Whether the contact email field should be shown.
fields.buyerDetails required ApiCheckoutBuyerConfigResponse The buyer details section.
fields.buyerDetails.show required boolean Whether the buyer details should be shown at all.
fields.buyerDetails.editable required boolean Whether the buyer details can be edited by the user.
fields.buyerDetails.showPhone required boolean Whether the buyer phone field should be shown.
fields.buyerDetails.phoneRequired required boolean Whether the buyer phone must be filled.
fields.buyerDetails.showFax required boolean Whether the buyer fax field should be shown.
fields.buyerDetails.faxRequired required boolean Whether the buyer fax must be filled.
fields.buyerDetails.emailRequired required boolean Whether the buyer email must be filled.
fields.title required ApiCheckoutFieldConfigResponse The checkout title / commercial reference field.
fields.title.show required boolean Whether the field should be shown at all.
fields.title.editable required boolean Whether the field can be edited by the user.
fields.title.required required boolean Whether the field must be filled before the checkout can be completed.
fields.desiredDeliveryDate required ApiCheckoutFieldConfigResponse The desired delivery date field.
fields.desiredDeliveryDate.show required boolean Whether the field should be shown at all.
fields.desiredDeliveryDate.editable required boolean Whether the field can be edited by the user.
fields.desiredDeliveryDate.required required boolean Whether the field must be filled before the checkout can be completed.
fields.project required ApiCheckoutFieldConfigResponse The project selection.
fields.project.show required boolean Whether the field should be shown at all.
fields.project.editable required boolean Whether the field can be edited by the user.
fields.project.required required boolean Whether the field must be filled before the checkout can be completed.
fields.commission required ApiCheckoutFieldConfigResponse The commission selection.
fields.commission.show required boolean Whether the field should be shown at all.
fields.commission.editable required boolean Whether the field can be edited by the user.
fields.commission.required required boolean Whether the field must be filled before the checkout can be completed.
fields.coupon required ApiCheckoutFieldConfigResponse The coupon code field.
fields.coupon.show required boolean Whether the field should be shown at all.
fields.coupon.editable required boolean Whether the field can be edited by the user.
fields.coupon.required required boolean Whether the field must be filled before the checkout can be completed.
fields.comment required ApiCheckoutFieldConfigResponse The order comment field.
fields.comment.show required boolean Whether the field should be shown at all.
fields.comment.editable required boolean Whether the field can be edited by the user.
fields.comment.required required boolean Whether the field must be filled before the checkout can be completed.
fields.pickupSite required ApiCheckoutFieldConfigResponse The pickup site selection (see 'pickupSites' for the selectable sites).
fields.pickupSite.show required boolean Whether the field should be shown at all.
fields.pickupSite.editable required boolean Whether the field can be edited by the user.
fields.pickupSite.required required boolean Whether the field must be filled before the checkout can be completed.
paymentMethod required ApiCheckoutMethodSelectionResponse The selected and available payment methods.
paymentMethod.selectedId String The id of the currently selected method, if any.
paymentMethod.selectedName String The translated name of the currently selected method, if any.
paymentMethod.values required List<ApiCheckoutMethodOptionResponse> All methods currently available for selection.
paymentMethod.values[].id required String The id of the method, to be used in the update request.
paymentMethod.values[].name required String The translated name of the method.
paymentMethod.values[].requiresAddress Boolean Whether this method requires a shipping address. Only present for shipping methods - use it to decide whether to show the address form when this method is selected.
paymentMethod.values[].requiresPickupSite Boolean Whether this method requires a pickup site. Only present for shipping methods - use it to decide whether to show the pickup site selection (see 'pickupSites') when this method is selected.
positions required List<ApiBasketPositionResponse> The regular positions of the basket.
positions[].id required String The database id of the position.
positions[].itemNumber required String The item number of the position, as shown to the current user. Meant for display only - use 'uniqueItemNumber' to address the item in other endpoints.
positions[].uniqueItemNumber String The unique item number of the item behind this position. This is the number the item and search endpoints expect, and the one to send when adding the item again.
positions[].shortText String The short description of the item, so that the position can be rendered without fetching the item details separately.
positions[].previewImageUrl String The URL of the preview image of the item, if the item has one.
positions[].quantity ApiQuantityResponse The ordered quantity.
positions[].quantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].quantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].quantityUnit String The order unit 'quantity' is stated in - the base unit of the item.
Example: piece
positions[].displayQuantity ApiQuantityResponse The quantity in the alternative sales unit the item was ordered in, present only for positions which use one. Render this together with 'displayQuantityUnit' instead of 'quantity'/'quantityUnit', as the web basket does.
positions[].displayQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].displayQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].displayQuantityUnit String The name of the alternative sales unit the item was ordered in, present only for positions which use one.
Example: box
positions[].quantityChangeable required boolean Whether the quantity of this position can be changed.
positions[].priceQuantity ApiQuantityResponse The number of units 'netPricePerUnit' refers to. A unit price of 19,99 with a price quantity of 100 means 19,99 per 100 units. Does not apply to 'netPrice', which is always the total of the whole position.
positions[].priceQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].priceQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].minOrderQuantity ApiQuantityResponse The minimum quantity which can be ordered of this item, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].minOrderQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].minOrderQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].orderStep ApiQuantityResponse The quantity steps in which this item can be ordered, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].orderStep.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].orderStep.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].netPrice ApiPriceResponse The total net price of the whole position (quantity times unit price), present only if prices may be shown for the current price mode and position. Render this as the line total - it must not be multiplied by the quantity again.
positions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].netPricePerUnit ApiPriceResponse The net price of a single price quantity of the item (see 'priceQuantity'), present under the same conditions as 'netPrice'.
positions[].netPricePerUnit.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPricePerUnit.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPricePerUnit.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].comment String The comment attached to this position, if there is one.
positions[].messages required List<ApiMessageResponse> Messages emitted for this position, e.g. availability hints. Unlike basket messages these cannot be acknowledged - the position itself has to be corrected (e.g. via the update or remove endpoint) or the message vanishes once its cause is gone. May be empty.
positions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
positions[].messages[].type required String The severity of the message.
Example: WARNING
positions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
positions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
positions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
positions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
costPositions required List<ApiBasketCostPositionResponse> The computed cost positions of the basket (e.g. shipping costs). Together with the regular positions, these add up to the reported basket sums. May be empty.
costPositions[].itemNumber String The item number of the cost position, as shown to the current user.
costPositions[].shortText required String The label of the cost position, e.g. 'Shipping costs'.
costPositions[].netPrice ApiPriceResponse The net price of the cost position, present only if prices may be shown for the current price mode.
costPositions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
costPositions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
costPositions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
costPositions[].messages required List<ApiMessageResponse> Messages emitted for this cost position, e.g. an invalid coupon. May be empty. A PROBLEM here blocks the checkout just like a problem on a regular position - and can be its only explanation. Like the messages of a position these cannot be acknowledged.
costPositions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
costPositions[].messages[].type required String The severity of the message.
Example: WARNING
costPositions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
costPositions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
costPositions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
costPositions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
messages required List<ApiMessageResponse> Messages concerning the basket as a whole, e.g. validation problems or warnings which need to be acknowledged. May be empty.
messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
messages[].type required String The severity of the message.
Example: WARNING
messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
messages[].acknowledged required boolean Whether this message has already been acknowledged.
canCommit required boolean Whether the basket is in a committable state - false if the checkout is disabled or not permitted, the basket is erroneous or currently locked, or an unacknowledged warning exists. This is a necessary but not a sufficient condition: it does not run the field validation (e.g. a missing required title), which only the validate and complete endpoints perform. Call validate before offering to place the order.
customFields required Map<String, ApiCheckoutCustomFieldResponse> The current custom field values, keyed by field name. Combines shop-configurable 'CustomizableField' values and compiled, customer-specific fields.
customFields[].label required String The translated label of the field.
customFields[].type required String The type of the field, e.g. 'STRING', 'BOOLEAN', 'SELECT'.
customFields[].value String The current value of the field, if any.
customFields[].messages required List<ApiMessageResponse> Messages emitted for this field, e.g. validation problems. May be empty.
customFields[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
customFields[].messages[].type required String The severity of the message.
Example: WARNING
customFields[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
customFields[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
customFields[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
customFields[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
customFieldDefinitions required List<ApiCheckoutCustomFieldDefinitionResponse> Describes the shop-configurable custom fields applicable to the basket, so that an app can render fields generically, including ones added later. Does not include the compiled, customer-specific fields contributed by an ApiCheckoutFieldCustomizer, as those are not shop-configurable and are expected to be known to the app in advance.
customFieldDefinitions[].id required String The database id of the field definition.
customFieldDefinitions[].name required String The technical name of the field - the key to use in 'customFields'.
customFieldDefinitions[].title required String The translated title of the field.
customFieldDefinitions[].type required String The type of the field, e.g. 'STRING', 'BOOLEAN', 'SELECT'.
customFieldDefinitions[].required required boolean Whether the field must be filled in order to complete the checkout.
customFieldDefinitions[].selectValues List<String> The selectable values, only present for types like 'SELECT' or 'RADIO'.
customFieldDefinitions[].hide required boolean Whether the field should be kept hidden instead of shown as input.

Complete Checkout

Completes (commits) the checkout and returns the order confirmation. v1 only supports the 'plain' payment method (no external payment provider) - if the selected payment method requires one (e.g. PayPal or Payone), this responds with HTTP 501 instead of completing the order; see the KBA documentation for the tracked follow-up ticket. Optionally acknowledges messages (e.g. a severe stock warning) before completing.

Documentation

POST JSON /frontend-api/v1/checkout/complete
Parameter
Name Description Example
includeQuantities Whether to report the order quantity metadata (minimum order quantity and order step) of every position. Defaults to false, as it costs an item lookup per position.
Request Body
Field Type Description
acknowledgedMessageIds List<String> The ids of the messages (see 'messages' in the state response) to mark as acknowledged before completing the checkout.
Response Body
Field Type Description
orderNumber required String The order number assigned by the system.
state required String The state of the order. 'ORDERED' for a completed order - 'WAITING_FOR_PAYMENT' may occur on the GET endpoint if a payment was started but never completed.
Example: ORDERED
netPrice ApiPriceResponse The net sum of the order, present only if prices may be shown for the current price mode.
netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
grossPrice ApiPriceResponse The gross sum of the order, present only if prices may be shown for the current price mode.
grossPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
grossPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
grossPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions required List<ApiBasketPositionResponse> The regular positions of the order.
positions[].id required String The database id of the position.
positions[].itemNumber required String The item number of the position, as shown to the current user. Meant for display only - use 'uniqueItemNumber' to address the item in other endpoints.
positions[].uniqueItemNumber String The unique item number of the item behind this position. This is the number the item and search endpoints expect, and the one to send when adding the item again.
positions[].shortText String The short description of the item, so that the position can be rendered without fetching the item details separately.
positions[].previewImageUrl String The URL of the preview image of the item, if the item has one.
positions[].quantity ApiQuantityResponse The ordered quantity.
positions[].quantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].quantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].quantityUnit String The order unit 'quantity' is stated in - the base unit of the item.
Example: piece
positions[].displayQuantity ApiQuantityResponse The quantity in the alternative sales unit the item was ordered in, present only for positions which use one. Render this together with 'displayQuantityUnit' instead of 'quantity'/'quantityUnit', as the web basket does.
positions[].displayQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].displayQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].displayQuantityUnit String The name of the alternative sales unit the item was ordered in, present only for positions which use one.
Example: box
positions[].quantityChangeable required boolean Whether the quantity of this position can be changed.
positions[].priceQuantity ApiQuantityResponse The number of units 'netPricePerUnit' refers to. A unit price of 19,99 with a price quantity of 100 means 19,99 per 100 units. Does not apply to 'netPrice', which is always the total of the whole position.
positions[].priceQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].priceQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].minOrderQuantity ApiQuantityResponse The minimum quantity which can be ordered of this item, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].minOrderQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].minOrderQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].orderStep ApiQuantityResponse The quantity steps in which this item can be ordered, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].orderStep.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].orderStep.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].netPrice ApiPriceResponse The total net price of the whole position (quantity times unit price), present only if prices may be shown for the current price mode and position. Render this as the line total - it must not be multiplied by the quantity again.
positions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].netPricePerUnit ApiPriceResponse The net price of a single price quantity of the item (see 'priceQuantity'), present under the same conditions as 'netPrice'.
positions[].netPricePerUnit.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPricePerUnit.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPricePerUnit.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].comment String The comment attached to this position, if there is one.
positions[].messages required List<ApiMessageResponse> Messages emitted for this position, e.g. availability hints. Unlike basket messages these cannot be acknowledged - the position itself has to be corrected (e.g. via the update or remove endpoint) or the message vanishes once its cause is gone. May be empty.
positions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
positions[].messages[].type required String The severity of the message.
Example: WARNING
positions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
positions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
positions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
positions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
costPositions required List<ApiBasketCostPositionResponse> The computed cost positions of the order (e.g. shipping costs). Together with the regular positions, these add up to the reported order sums. May be empty.
costPositions[].itemNumber String The item number of the cost position, as shown to the current user.
costPositions[].shortText required String The label of the cost position, e.g. 'Shipping costs'.
costPositions[].netPrice ApiPriceResponse The net price of the cost position, present only if prices may be shown for the current price mode.
costPositions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
costPositions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
costPositions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
costPositions[].messages required List<ApiMessageResponse> Messages emitted for this cost position, e.g. an invalid coupon. May be empty. A PROBLEM here blocks the checkout just like a problem on a regular position - and can be its only explanation. Like the messages of a position these cannot be acknowledged.
costPositions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
costPositions[].messages[].type required String The severity of the message.
Example: WARNING
costPositions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
costPositions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
costPositions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
costPositions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
messages required List<ApiMessageResponse> Messages concerning the completed order, e.g. a generated coupon or the hint that the basket was split into several orders. May be empty.
messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
messages[].type required String The severity of the message.
Example: WARNING
messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
messages[].acknowledged required boolean Whether this message has already been acknowledged.

Checkout Completion

Returns the confirmation (order number, totals, positions) of the current or last completed checkout of this session. Responds with 404 if no checkout was completed yet.

Documentation

GET JSON /frontend-api/v1/checkout/complete
Parameter
Name Description Example
includeQuantities Whether to report the order quantity metadata (minimum order quantity and order step) of every position. Defaults to false, as it costs an item lookup per position.
Response Body
Field Type Description
orderNumber required String The order number assigned by the system.
state required String The state of the order. 'ORDERED' for a completed order - 'WAITING_FOR_PAYMENT' may occur on the GET endpoint if a payment was started but never completed.
Example: ORDERED
netPrice ApiPriceResponse The net sum of the order, present only if prices may be shown for the current price mode.
netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
grossPrice ApiPriceResponse The gross sum of the order, present only if prices may be shown for the current price mode.
grossPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
grossPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
grossPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions required List<ApiBasketPositionResponse> The regular positions of the order.
positions[].id required String The database id of the position.
positions[].itemNumber required String The item number of the position, as shown to the current user. Meant for display only - use 'uniqueItemNumber' to address the item in other endpoints.
positions[].uniqueItemNumber String The unique item number of the item behind this position. This is the number the item and search endpoints expect, and the one to send when adding the item again.
positions[].shortText String The short description of the item, so that the position can be rendered without fetching the item details separately.
positions[].previewImageUrl String The URL of the preview image of the item, if the item has one.
positions[].quantity ApiQuantityResponse The ordered quantity.
positions[].quantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].quantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].quantityUnit String The order unit 'quantity' is stated in - the base unit of the item.
Example: piece
positions[].displayQuantity ApiQuantityResponse The quantity in the alternative sales unit the item was ordered in, present only for positions which use one. Render this together with 'displayQuantityUnit' instead of 'quantity'/'quantityUnit', as the web basket does.
positions[].displayQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].displayQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].displayQuantityUnit String The name of the alternative sales unit the item was ordered in, present only for positions which use one.
Example: box
positions[].quantityChangeable required boolean Whether the quantity of this position can be changed.
positions[].priceQuantity ApiQuantityResponse The number of units 'netPricePerUnit' refers to. A unit price of 19,99 with a price quantity of 100 means 19,99 per 100 units. Does not apply to 'netPrice', which is always the total of the whole position.
positions[].priceQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].priceQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].minOrderQuantity ApiQuantityResponse The minimum quantity which can be ordered of this item, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].minOrderQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].minOrderQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].orderStep ApiQuantityResponse The quantity steps in which this item can be ordered, in the unit reported via 'quantityUnit' - like every quantity of the position, its 'formatted' value carries no unit. Only reported if 'includeQuantities' was requested.
positions[].orderStep.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
positions[].orderStep.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
positions[].netPrice ApiPriceResponse The total net price of the whole position (quantity times unit price), present only if prices may be shown for the current price mode and position. Render this as the line total - it must not be multiplied by the quantity again.
positions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].netPricePerUnit ApiPriceResponse The net price of a single price quantity of the item (see 'priceQuantity'), present under the same conditions as 'netPrice'.
positions[].netPricePerUnit.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
positions[].netPricePerUnit.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
positions[].netPricePerUnit.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
positions[].comment String The comment attached to this position, if there is one.
positions[].messages required List<ApiMessageResponse> Messages emitted for this position, e.g. availability hints. Unlike basket messages these cannot be acknowledged - the position itself has to be corrected (e.g. via the update or remove endpoint) or the message vanishes once its cause is gone. May be empty.
positions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
positions[].messages[].type required String The severity of the message.
Example: WARNING
positions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
positions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
positions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
positions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
costPositions required List<ApiBasketCostPositionResponse> The computed cost positions of the order (e.g. shipping costs). Together with the regular positions, these add up to the reported order sums. May be empty.
costPositions[].itemNumber String The item number of the cost position, as shown to the current user.
costPositions[].shortText required String The label of the cost position, e.g. 'Shipping costs'.
costPositions[].netPrice ApiPriceResponse The net price of the cost position, present only if prices may be shown for the current price mode.
costPositions[].netPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
costPositions[].netPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
costPositions[].netPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
costPositions[].messages required List<ApiMessageResponse> Messages emitted for this cost position, e.g. an invalid coupon. May be empty. A PROBLEM here blocks the checkout just like a problem on a regular position - and can be its only explanation. Like the messages of a position these cannot be acknowledged.
costPositions[].messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
costPositions[].messages[].type required String The severity of the message.
Example: WARNING
costPositions[].messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
costPositions[].messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
costPositions[].messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
costPositions[].messages[].acknowledged required boolean Whether this message has already been acknowledged.
messages required List<ApiMessageResponse> Messages concerning the completed order, e.g. a generated coupon or the hint that the basket was split into several orders. May be empty.
messages[].id String The id of the message. Present for basket-level messages, absent for position-level messages. Use it to acknowledge the message via the acknowledge endpoint of the basket API or 'acknowledgedMessageIds' of the checkout API.
messages[].type required String The severity of the message.
Example: WARNING
messages[].message required String The human readable message text. Contains HTML markup if 'raw' is true, plain text otherwise.
messages[].raw required boolean Whether 'message' contains HTML markup (true) or plain text (false).
messages[].acknowledgeable required boolean Whether this message needs to be acknowledged (via its 'id') before the checkout can be completed.
messages[].acknowledged required boolean Whether this message has already been acknowledged.

Suggest Addresses

Suggests addresses of the buyer's address book matching the given query, to be offered when the user selects a shipping address. Send the 'correlationId' of the picked address along with its fields in the update request.

Documentation

GET JSON /frontend-api/v1/checkout/addresses
Parameter
Name Description Example
query An optional query to filter the addresses with. Omit it to list the first addresses.
Response Body
Field Type Description
addresses required List<ApiCheckoutAddressResponse> The matching addresses, including their 'correlationId' to be sent back when the user picks one. May be empty.
addresses[].name1 String The first name/company line.
addresses[].name2 String The second name/company line.
addresses[].name3 String The third name/company line.
addresses[].street String The street and house number.
addresses[].zip String The ZIP code.
addresses[].city String The city.
addresses[].countryCode String The ISO country code.
Example: DE
addresses[].countryName String The translated country name.
addresses[].correlationId String Links this address to an entry of the buyer's address book, if it currently is a known address. Absent for a manually entered address - which also happens once the fields of a previously linked address are edited. Send it back unchanged (along with the unchanged fields) to keep the link.

Suggest Projects

Suggests projects available to the buyer matching the given query, to be offered when the user selects a project. Send the 'id' of the picked project as 'projectId' in the update request.

Documentation

GET JSON /frontend-api/v1/checkout/projects
Parameter
Name Description Example
query An optional query to filter the projects with. Omit it to list the first projects.
Response Body
Field Type Description
projects required List<ApiCheckoutProjectResponse> The matching projects. May be empty.
projects[].id required String The id of the project, to be used as 'projectId' in the update request.
projects[].name required String The name of the project.

Favorites

Lists and manages the favorite lists of the logged in buyer along with the favorites they contain.

List Favorite Lists

Lists the favorite lists visible to the current buyer: their own private lists as well as the shared lists of their customer, sorted by position and name. Each entry carries the category used to group lists - entries without a category should be grouped under a label of the client's own choosing - along with the 'editable' flag and the number of favorites the list contains.

Documentation

GET JSON /frontend-api/v1/favorite-lists
Response Body
Field Type Description
lists required List<ApiFavoriteListOverviewResponse> The favorite lists available to the current buyer, sorted by position and name. Use the category of each list to group them.
lists[].id required String The database id of the favorite list.
lists[].name required String The displayable name of the favorite list.
lists[].category String The category used to group favorite lists. Absent if the list has no category assigned. Clients should group uncategorized lists under a label of their own choosing.
lists[].position required int The sort position of the list within its category. Lists are already sorted by position and name.
lists[].privateList required boolean Whether the list is private to the current buyer or shared with all buyers of the customer.
lists[].editable required boolean Whether the current buyer may modify the list and its favorites.
lists[].editableByColleagues required boolean Whether other buyers of the customer may modify this shared list. Always false for private lists. Report this value back when updating a list, otherwise the setting is overwritten.
lists[].favoriteCount required long The number of favorites in the list.

Create Favorite List

Creates a new favorite list for the current buyer. Lists are private by default - a non-private list is visible to all buyers of the customer and may optionally be made editable for them as well. Responds with 400 if the name is missing or already used by another list of the same category.

Documentation

POST JSON /frontend-api/v1/favorite-lists/create
Request Body
Field Type Description
name required String The displayable name of the new favorite list. Must be unique per category.
Example: Construction site A
category String The category used to group favorite lists.
Example: Projects
privateList Boolean Whether the list is private to the current buyer or shared with all buyers of the customer. Defaults to true.
editableByColleagues Boolean Whether other buyers of the customer may modify the shared list. Defaults to false.
Response Body
Field Type Description
id required String The database id of the favorite list.
name required String The displayable name of the favorite list.
category String The category used to group favorite lists. Absent if the list has no category assigned. Clients should group uncategorized lists under a label of their own choosing.
position required int The sort position of the list within its category. Lists are already sorted by position and name.
privateList required boolean Whether the list is private to the current buyer or shared with all buyers of the customer.
editable required boolean Whether the current buyer may modify the list and its favorites.
editableByColleagues required boolean Whether other buyers of the customer may modify this shared list. Always false for private lists. Report this value back when updating a list, otherwise the setting is overwritten.
favoriteCount required long The number of favorites in the list.

Update Favorite List

Updates the name, category or visibility settings of a favorite list. Omitted fields are left unchanged, an empty category clears the category. The visibility settings ('privateList' and 'editableByColleagues') of a list belonging to another buyer can only be changed by that buyer, as they decide who may see the list at all. Responds with 404 if the list does not exist or is not accessible, with 403 if it is not editable by the current buyer ('not_editable') or if a visibility change was attempted on a colleague's list ('not_list_owner'), and with 400 if the new name is empty or already used by another list of the same category.

Documentation

POST JSON /frontend-api/v1/favorite-lists/update
Request Body
Field Type Description
listId required String The database id of the favorite list to update.
name String The new displayable name of the favorite list. Must be unique per category. Omit to keep the current name.
Example: Construction site B
category String The new category of the favorite list. Pass an empty string to clear the category. Omit to keep the current category.
Example: Projects
privateList Boolean Whether the list is private to the current buyer or shared with all buyers of the customer. Omit to keep the current setting.
editableByColleagues Boolean Whether other buyers of the customer may modify the shared list. Omit to keep the current setting.
Response Body
Field Type Description
id required String The database id of the favorite list.
name required String The displayable name of the favorite list.
category String The category used to group favorite lists. Absent if the list has no category assigned. Clients should group uncategorized lists under a label of their own choosing.
position required int The sort position of the list within its category. Lists are already sorted by position and name.
privateList required boolean Whether the list is private to the current buyer or shared with all buyers of the customer.
editable required boolean Whether the current buyer may modify the list and its favorites.
editableByColleagues required boolean Whether other buyers of the customer may modify this shared list. Always false for private lists. Report this value back when updating a list, otherwise the setting is overwritten.
favoriteCount required long The number of favorites in the list.

Remove Favorite Lists

Removes one or more favorite lists along with the favorites they contain. All lists are validated first and removed together - a request with an unknown list id (404) or a list which is not editable (403) is rejected as a whole and nothing is removed.

Documentation

POST JSON /frontend-api/v1/favorite-lists/remove
Request Body
Field Type Description
listIds required List<String> The database ids of the favorite lists to remove. All lists are validated before any list is removed.
Response Body
Field Type Description
removedCount required int The number of favorite lists which have been removed.

Favorite List Details

Returns a single favorite list along with the requested page of its favorites, sorted by position. Each favorite carries its stored quantity and the item data in the same format as delivered by the search API - favorites whose item is no longer available in the shop keep their item number but come without an item block. Responds with 404 if the list does not exist or is not accessible.

Documentation

GET JSON /frontend-api/v1/favorite-list
Parameters
Name Description Example
listId
Required
The id of the favorite list to read.
includePrices Whether to report the price and availability of every item. Defaults to false, as prices may require an ERP round-trip.
page The one-based page of favorites to return. Defaults to 1.
pageSize The maximum number of favorites per page. Defaults to 25, capped at 100.
Response Body
Field Type Description
id required String The database id of the favorite list.
name required String The displayable name of the favorite list.
category String The category used to group favorite lists. Absent if the list has no category assigned. Clients should group uncategorized lists under a label of their own choosing.
position required int The sort position of the list within its category. Lists are already sorted by position and name.
privateList required boolean Whether the list is private to the current buyer or shared with all buyers of the customer.
editable required boolean Whether the current buyer may modify the list and its favorites.
editableByColleagues required boolean Whether other buyers of the customer may modify this shared list. Always false for private lists. Report this value back when updating a list, otherwise the setting is overwritten.
favoriteCount required long The number of favorites in the list.
page required int The one-based number of the returned page.
pageSize required int The maximum number of favorites per page.
favorites required List<ApiFavoriteResponse> The requested page of favorites, sorted by position. Use favoriteCount to determine the total number of favorites in the list.
favorites[].id required String The database id of the favorite.
favorites[].position required int The sort position of the favorite within the list. Favorites are already sorted by position.
favorites[].quantity ApiQuantityResponse The quantity stored for the favorite. Absent if no quantity has been set.
favorites[].quantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
favorites[].quantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
favorites[].itemNumber required String The item number of the favorite as visible to the current buyer. Remains available even if the item itself is no longer part of the shop.
favorites[].item ApiSearchItemResponse The item data of the favorite, in the same format as delivered by the search API. Absent if the item is no longer available to the buyer - because it was removed, hidden or is no longer part of an accessible catalog. Clients should render such favorites as unavailable using the itemNumber.
favorites[].item.uniqueItemNumber required String The globally unique item number.
Example: 1234567890
favorites[].item.visibleItemNumber required String The item number as shown to the user.
Example: 1234567
favorites[].item.shortDescription required String The short, human-readable description of the item.
Example: Cordless Drill 18V
favorites[].item.brandName String The name of the brand, if any.
Example: Acme
favorites[].item.previewImageUrl String The URL of the preview image, if any.
favorites[].item.badges List<ApiBadgeResponse> The badges of the item.
favorites[].item.badges[].label required String The displayable label of the badge.
Example: New
favorites[].item.badges[].color String The text color of the badge as CSS color value, if any.
Example: #ffffff
favorites[].item.badges[].backgroundColor String The background color of the badge as CSS color value, if any.
Example: #0d6efd
favorites[].item.energyClasses List<ApiEnergyClassResponse> The energy efficiency classes of the item.
favorites[].item.energyClasses[].energyClass required String The energy efficiency class.
Example: A+
favorites[].item.energyClasses[].energyClassRange required String The energy efficiency scale the class belongs to. Must be displayed along with the class.
Example: A+++ - D
favorites[].item.energyClasses[].leftArrowImageUrl String The URL of the left-pointing arrow image for the class.
favorites[].item.energyClasses[].rightArrowImageUrl String The URL of the right-pointing arrow image for the class.
favorites[].item.energyClasses[].labelUrl String The URL of the full energy label document, if any.
favorites[].item.energyProductDatasheetUrl String The URL of the energy product datasheet, if any.
favorites[].item.priceAndAvailability ApiPriceAndAvailabilityResponse The price and availability of the item. Only present if 'includePrices' was requested and the shop permits loading prices within the search.
favorites[].item.priceAndAvailability.hasPrice required boolean Whether a price could be determined for the current user.
favorites[].item.priceAndAvailability.price ApiPriceResponse The effective price, present if 'hasPrice' is true. The price always refers to 'priceQuantity' units of the item.
favorites[].item.priceAndAvailability.price.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
favorites[].item.priceAndAvailability.price.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
favorites[].item.priceAndAvailability.price.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
favorites[].item.priceAndAvailability.priceQuantity ApiQuantityResponse The quantity the price refers to, present if 'hasPrice' is true. A price of 19,99 with a price quantity of 100 means 19,99 per 100 units.
favorites[].item.priceAndAvailability.priceQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
favorites[].item.priceAndAvailability.priceQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
favorites[].item.priceAndAvailability.availability ApiAvailabilityResponse The availability as determined by the standard mechanism, honoring the settings of the current basket: the pickup availability at the selected pickup site if the basket uses pickup shipping, the delivery availability otherwise. The type UNKNOWN can also indicate that the computation did not complete within the time window (timeout or overload) - a retry can then yield a result.
favorites[].item.priceAndAvailability.availability.type required String The stock type, e.g. 'IN_STOCK', 'LOW_STOCK', 'OUT_OF_STOCK' or 'UNKNOWN'.
Example: IN_STOCK
favorites[].item.priceAndAvailability.availability.text required String A displayable text providing further details on the availability.
Example: Available
favorites[].item.priceAndAvailability.availability.additionalText String An additional displayable text providing further details on the availability, if present.
Example: Delivery within 2-3 days
favorites[].item.globalVariantGroup String The global variant group of the item, present if and only if the search actually grouped several matching variants into this entry. Pass this as 'variant' filter to the search endpoint (with the INDIVIDUAL variant mode) to fetch and narrow down all variants of the group.
favorites[].item.variantCount Integer The number of matching variants which were grouped into this entry, present if and only if 'globalVariantGroup' is present (and then always greater than one).
Example: 4

Add Favorite

Adds an item to a favorite list, addressed by its unique item number or by an unambiguous visible item number. If no list id is given, the item is added to the private default list of the buyer, which is created on demand - a shared list is never used for this. The quantity defaults to the recommended order quantity of the item. Adding is idempotent per item - if the list already contains the item, the existing favorite is returned unchanged and flagged via 'alreadyExisted'. Responds with 404 if the list or the item does not exist, with 403 if the list is not editable, and with 400 if the quantity is not positive or exceeds the storable range.

Documentation

POST JSON /frontend-api/v1/favorite-list/favorites/add
Request Body
Field Type Description
listId String The database id of the favorite list to add the item to. If omitted, the item is added to the private default list of the current buyer which is created on demand.
itemNumber required String The unique item number of the item to add, as reported by the search and item APIs. The visible item number is accepted as well, as long as it is unambiguous within the shop.
Example: A-10015
quantity BigDecimal The quantity to store for the favorite, using a dot as decimal separator. Defaults to the recommended order quantity of the item. Rounded to three decimal places.
Example: 2.5
Response Body
Field Type Description
listId required String The database id of the favorite list the item was added to.
listName required String The displayable name of the favorite list the item was added to.
alreadyExisted required boolean Whether the item was already contained in the list. Adding is idempotent - the existing favorite is returned unchanged in this case.
favorite required ApiFavoriteResponse The created or already existing favorite.
favorite.id required String The database id of the favorite.
favorite.position required int The sort position of the favorite within the list. Favorites are already sorted by position.
favorite.quantity ApiQuantityResponse The quantity stored for the favorite. Absent if no quantity has been set.
favorite.quantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
favorite.quantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
favorite.itemNumber required String The item number of the favorite as visible to the current buyer. Remains available even if the item itself is no longer part of the shop.
favorite.item ApiSearchItemResponse The item data of the favorite, in the same format as delivered by the search API. Absent if the item is no longer available to the buyer - because it was removed, hidden or is no longer part of an accessible catalog. Clients should render such favorites as unavailable using the itemNumber.
favorite.item.uniqueItemNumber required String The globally unique item number.
Example: 1234567890
favorite.item.visibleItemNumber required String The item number as shown to the user.
Example: 1234567
favorite.item.shortDescription required String The short, human-readable description of the item.
Example: Cordless Drill 18V
favorite.item.brandName String The name of the brand, if any.
Example: Acme
favorite.item.previewImageUrl String The URL of the preview image, if any.
favorite.item.badges List<ApiBadgeResponse> The badges of the item.
favorite.item.badges[].label required String The displayable label of the badge.
Example: New
favorite.item.badges[].color String The text color of the badge as CSS color value, if any.
Example: #ffffff
favorite.item.badges[].backgroundColor String The background color of the badge as CSS color value, if any.
Example: #0d6efd
favorite.item.energyClasses List<ApiEnergyClassResponse> The energy efficiency classes of the item.
favorite.item.energyClasses[].energyClass required String The energy efficiency class.
Example: A+
favorite.item.energyClasses[].energyClassRange required String The energy efficiency scale the class belongs to. Must be displayed along with the class.
Example: A+++ - D
favorite.item.energyClasses[].leftArrowImageUrl String The URL of the left-pointing arrow image for the class.
favorite.item.energyClasses[].rightArrowImageUrl String The URL of the right-pointing arrow image for the class.
favorite.item.energyClasses[].labelUrl String The URL of the full energy label document, if any.
favorite.item.energyProductDatasheetUrl String The URL of the energy product datasheet, if any.
favorite.item.priceAndAvailability ApiPriceAndAvailabilityResponse The price and availability of the item. Only present if 'includePrices' was requested and the shop permits loading prices within the search.
favorite.item.priceAndAvailability.hasPrice required boolean Whether a price could be determined for the current user.
favorite.item.priceAndAvailability.price ApiPriceResponse The effective price, present if 'hasPrice' is true. The price always refers to 'priceQuantity' units of the item.
favorite.item.priceAndAvailability.price.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
favorite.item.priceAndAvailability.price.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
favorite.item.priceAndAvailability.price.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
favorite.item.priceAndAvailability.priceQuantity ApiQuantityResponse The quantity the price refers to, present if 'hasPrice' is true. A price of 19,99 with a price quantity of 100 means 19,99 per 100 units.
favorite.item.priceAndAvailability.priceQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
favorite.item.priceAndAvailability.priceQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
favorite.item.priceAndAvailability.availability ApiAvailabilityResponse The availability as determined by the standard mechanism, honoring the settings of the current basket: the pickup availability at the selected pickup site if the basket uses pickup shipping, the delivery availability otherwise. The type UNKNOWN can also indicate that the computation did not complete within the time window (timeout or overload) - a retry can then yield a result.
favorite.item.priceAndAvailability.availability.type required String The stock type, e.g. 'IN_STOCK', 'LOW_STOCK', 'OUT_OF_STOCK' or 'UNKNOWN'.
Example: IN_STOCK
favorite.item.priceAndAvailability.availability.text required String A displayable text providing further details on the availability.
Example: Available
favorite.item.priceAndAvailability.availability.additionalText String An additional displayable text providing further details on the availability, if present.
Example: Delivery within 2-3 days
favorite.item.globalVariantGroup String The global variant group of the item, present if and only if the search actually grouped several matching variants into this entry. Pass this as 'variant' filter to the search endpoint (with the INDIVIDUAL variant mode) to fetch and narrow down all variants of the group.
favorite.item.variantCount Integer The number of matching variants which were grouped into this entry, present if and only if 'globalVariantGroup' is present (and then always greater than one).
Example: 4

Update Favorites

Changes the stored quantities of one or more favorites of a favorite list. All changes are validated first and applied together - a request with an unknown favorite id (404) or a non-positive quantity (400) is rejected as a whole. Duplicate favorite ids are collapsed to the last entry. The updated quantities are immediately visible to subsequent reads.

Documentation

POST JSON /frontend-api/v1/favorite-list/favorites/update
Request Body
Field Type Description
listId required String The database id of the favorite list owning the favorites.
favorites required List<ApiFavoriteUpdateEntryRequest> The quantity updates to apply. All updates are validated before any update is applied.
favorites[].favoriteId required String The database id of the favorite to update.
favorites[].quantity required BigDecimal The new quantity of the favorite, using a dot as decimal separator. Must be greater than zero and is rounded to three decimal places.
Example: 2.5
Response Body
Field Type Description
favorites required List<ApiFavoriteResponse> The updated favorites, without their item data. Re-fetch the list to obtain updated item data if required.
favorites[].id required String The database id of the favorite.
favorites[].position required int The sort position of the favorite within the list. Favorites are already sorted by position.
favorites[].quantity ApiQuantityResponse The quantity stored for the favorite. Absent if no quantity has been set.
favorites[].quantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
favorites[].quantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
favorites[].itemNumber required String The item number of the favorite as visible to the current buyer. Remains available even if the item itself is no longer part of the shop.
favorites[].item ApiSearchItemResponse The item data of the favorite, in the same format as delivered by the search API. Absent if the item is no longer available to the buyer - because it was removed, hidden or is no longer part of an accessible catalog. Clients should render such favorites as unavailable using the itemNumber.
favorites[].item.uniqueItemNumber required String The globally unique item number.
Example: 1234567890
favorites[].item.visibleItemNumber required String The item number as shown to the user.
Example: 1234567
favorites[].item.shortDescription required String The short, human-readable description of the item.
Example: Cordless Drill 18V
favorites[].item.brandName String The name of the brand, if any.
Example: Acme
favorites[].item.previewImageUrl String The URL of the preview image, if any.
favorites[].item.badges List<ApiBadgeResponse> The badges of the item.
favorites[].item.badges[].label required String The displayable label of the badge.
Example: New
favorites[].item.badges[].color String The text color of the badge as CSS color value, if any.
Example: #ffffff
favorites[].item.badges[].backgroundColor String The background color of the badge as CSS color value, if any.
Example: #0d6efd
favorites[].item.energyClasses List<ApiEnergyClassResponse> The energy efficiency classes of the item.
favorites[].item.energyClasses[].energyClass required String The energy efficiency class.
Example: A+
favorites[].item.energyClasses[].energyClassRange required String The energy efficiency scale the class belongs to. Must be displayed along with the class.
Example: A+++ - D
favorites[].item.energyClasses[].leftArrowImageUrl String The URL of the left-pointing arrow image for the class.
favorites[].item.energyClasses[].rightArrowImageUrl String The URL of the right-pointing arrow image for the class.
favorites[].item.energyClasses[].labelUrl String The URL of the full energy label document, if any.
favorites[].item.energyProductDatasheetUrl String The URL of the energy product datasheet, if any.
favorites[].item.priceAndAvailability ApiPriceAndAvailabilityResponse The price and availability of the item. Only present if 'includePrices' was requested and the shop permits loading prices within the search.
favorites[].item.priceAndAvailability.hasPrice required boolean Whether a price could be determined for the current user.
favorites[].item.priceAndAvailability.price ApiPriceResponse The effective price, present if 'hasPrice' is true. The price always refers to 'priceQuantity' units of the item.
favorites[].item.priceAndAvailability.price.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
favorites[].item.priceAndAvailability.price.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
favorites[].item.priceAndAvailability.price.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
favorites[].item.priceAndAvailability.priceQuantity ApiQuantityResponse The quantity the price refers to, present if 'hasPrice' is true. A price of 19,99 with a price quantity of 100 means 19,99 per 100 units.
favorites[].item.priceAndAvailability.priceQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
favorites[].item.priceAndAvailability.priceQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
favorites[].item.priceAndAvailability.availability ApiAvailabilityResponse The availability as determined by the standard mechanism, honoring the settings of the current basket: the pickup availability at the selected pickup site if the basket uses pickup shipping, the delivery availability otherwise. The type UNKNOWN can also indicate that the computation did not complete within the time window (timeout or overload) - a retry can then yield a result.
favorites[].item.priceAndAvailability.availability.type required String The stock type, e.g. 'IN_STOCK', 'LOW_STOCK', 'OUT_OF_STOCK' or 'UNKNOWN'.
Example: IN_STOCK
favorites[].item.priceAndAvailability.availability.text required String A displayable text providing further details on the availability.
Example: Available
favorites[].item.priceAndAvailability.availability.additionalText String An additional displayable text providing further details on the availability, if present.
Example: Delivery within 2-3 days
favorites[].item.globalVariantGroup String The global variant group of the item, present if and only if the search actually grouped several matching variants into this entry. Pass this as 'variant' filter to the search endpoint (with the INDIVIDUAL variant mode) to fetch and narrow down all variants of the group.
favorites[].item.variantCount Integer The number of matching variants which were grouped into this entry, present if and only if 'globalVariantGroup' is present (and then always greater than one).
Example: 4

Remove Favorites

Removes one or more favorites from a favorite list. All favorites are validated first and removed together - a request with an unknown favorite id is rejected as a whole with 404 and nothing is removed.

Documentation

POST JSON /frontend-api/v1/favorite-list/favorites/remove
Request Body
Field Type Description
listId required String The database id of the favorite list owning the favorites.
favoriteIds required List<String> The database ids of the favorites to remove. All favorites are validated before any favorite is removed.
Response Body
Field Type Description
removedCount required int The number of favorites which have been removed.

Items

Provides item detail, price/availability and recently viewed data for the item detail page.

Item Details

Returns the index-backed detail data of a single item - everything needed to render an item detail page without waiting for an ERP round-trip. Prices and availability are provided by the price endpoint, or - at the cost of waiting for the price computation - via the 'includePrices' flag.

Documentation

GET JSON /frontend-api/v1/item
Parameters
Name Description Example
uniqueItemNumber
Required
The globally unique item number of the item to fetch.
includeBadges Whether to include badges, energy efficiency classes and the energy product datasheet. Defaults to true.
includeFeatures Whether to include the product features. Defaults to true.
includePrices Whether to include the price and availability. This makes the otherwise ERP-free call wait for the price computation and is ignored if the shop disables price loading. Defaults to false.
includeQuantities Whether to include the order quantity metadata and index-backed packaging units. Defaults to true.
includeTexts Whether to include the long description and additional frontend texts. Defaults to true.
recordVisit Whether to record the request as item visit for the recently viewed list. Disable this for prefetching. Defaults to true.
Response Body
Field Type Description
uniqueItemNumber required String The globally unique item number.
Example: 1234567890
visibleItemNumber required String The item number as shown to the user.
Example: 1234567
shortDescription required String The short, human-readable description of the item.
Example: Cordless Drill 18V
brandName String The name of the brand, if any.
Example: Acme
brandImageUrl String The URL of the brand logo, if any.
previewImageUrl String The URL of the preview image, if any.
globalVariantGroup String The global variant group of the item, present if and only if the item belongs to a group of several variants. Pass this as 'variant' filter to the navigator search API to fetch and narrow down all variants.
texts ApiItemTextsResponse The descriptive texts of the item. Only present if 'includeTexts' is set.
texts.longDescription String The long description of the item as XHTML, if any.
texts.additionalTexts List<ApiItemAdditionalTextResponse> Additional texts to display on the item detail page.
texts.additionalTexts[].label required String The label of the additional text.
texts.additionalTexts[].text required String The additional text itself.
features List<ApiItemFeatureResponse> The product features of the item. Only present if 'includeFeatures' is set.
features[].code required String The stable code of the feature.
features[].name required String The translated name of the feature.
Example: Voltage
features[].values required List<String> The displayable values of the feature.
Example: ["18 V"]
badges List<ApiBadgeResponse> The badges of the item. Only present if 'includeBadges' is set.
badges[].label required String The displayable label of the badge.
Example: New
badges[].color String The text color of the badge as CSS color value, if any.
Example: #ffffff
badges[].backgroundColor String The background color of the badge as CSS color value, if any.
Example: #0d6efd
energyClasses List<ApiEnergyClassResponse> The energy efficiency classes of the item. Only present if 'includeBadges' is set.
energyClasses[].energyClass required String The energy efficiency class.
Example: A+
energyClasses[].energyClassRange required String The energy efficiency scale the class belongs to. Must be displayed along with the class.
Example: A+++ - D
energyClasses[].leftArrowImageUrl String The URL of the left-pointing arrow image for the class.
energyClasses[].rightArrowImageUrl String The URL of the right-pointing arrow image for the class.
energyClasses[].labelUrl String The URL of the full energy label document, if any.
energyProductDatasheetUrl String The URL of the energy product datasheet, if any. Only present if 'includeBadges' is set.
quantities ApiItemQuantitiesResponse The order quantity metadata of the item. Only present if 'includeQuantities' is set.
quantities.quantityUnit required String The displayable order unit of the item.
Example: piece
quantities.minOrderQuantity required ApiQuantityResponse The minimal order quantity.
quantities.minOrderQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
quantities.minOrderQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
quantities.orderStep required ApiQuantityResponse The step in which the order quantity can be increased.
quantities.orderStep.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
quantities.orderStep.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
quantities.priceQuantity required ApiQuantityResponse The quantity the price refers to.
quantities.priceQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
quantities.priceQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
quantities.recommendedOrderQuantity ApiQuantityResponse The recommended order quantity, if any.
quantities.recommendedOrderQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
quantities.recommendedOrderQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
quantities.packagingUnits List<ApiItemPackagingUnitResponse> The packaging units of the item as known from the index - only the quantity is available synchronously. The price response carries the same units enriched with their name and price per unit (match the entries by their quantity).
quantities.packagingUnits[].name String The name of the packaging unit, as provided by the ERP - hence only present in the price response.
Example: Box
quantities.packagingUnits[].quantity required ApiQuantityResponse The quantity contained in the packaging unit.
quantities.packagingUnits[].quantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
quantities.packagingUnits[].quantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
quantities.packagingUnits[].pricePerUnit ApiPriceResponse The price per packaging unit, if known.
quantities.packagingUnits[].pricePerUnit.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
quantities.packagingUnits[].pricePerUnit.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
quantities.packagingUnits[].pricePerUnit.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
priceAndAvailability ApiPriceAndAvailabilityResponse The price and availability of the item. Only present if 'includePrices' is set and the shop permits loading prices within the item detail endpoint. Requesting this makes the otherwise ERP-free call wait for the price computation.
priceAndAvailability.hasPrice required boolean Whether a price could be determined for the current user.
priceAndAvailability.price ApiPriceResponse The effective price, present if 'hasPrice' is true. The price always refers to 'priceQuantity' units of the item.
priceAndAvailability.price.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
priceAndAvailability.price.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
priceAndAvailability.price.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
priceAndAvailability.priceQuantity ApiQuantityResponse The quantity the price refers to, present if 'hasPrice' is true. A price of 19,99 with a price quantity of 100 means 19,99 per 100 units.
priceAndAvailability.priceQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
priceAndAvailability.priceQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
priceAndAvailability.availability ApiAvailabilityResponse The availability as determined by the standard mechanism, honoring the settings of the current basket: the pickup availability at the selected pickup site if the basket uses pickup shipping, the delivery availability otherwise. The type UNKNOWN can also indicate that the computation did not complete within the time window (timeout or overload) - a retry can then yield a result.
priceAndAvailability.availability.type required String The stock type, e.g. 'IN_STOCK', 'LOW_STOCK', 'OUT_OF_STOCK' or 'UNKNOWN'.
Example: IN_STOCK
priceAndAvailability.availability.text required String A displayable text providing further details on the availability.
Example: Available
priceAndAvailability.availability.additionalText String An additional displayable text providing further details on the availability, if present.
Example: Delivery within 2-3 days

Item Prices and Availabilities

Returns the ERP-backed prices and the applicable availabilities of one or more items. Each item carries either the standard availability (honoring the current basket settings) or - if pickup sites were requested - the pickup availabilities at these sites. May involve an ERP round-trip.

Documentation

POST JSON /frontend-api/v1/items/price
Request Body
Field Type Description
items required List<ApiItemPriceRequestItem> The items to fetch the price data for. At least one item is required, and the number of items per request is limited (50 by default, configurable per shop) - chunk larger lists accordingly. Unknown or inaccessible item numbers are skipped - the response then simply carries no entry for them.
items[].uniqueItemNumber required String The globally unique item number of the item to fetch the price data for.
Example: 1234567890
items[].quantity BigDecimal The quantity used for the extended availability of this item. Defaults to the minimal order quantity. Prices are always computed for the default quantity - quantity-dependent prices are covered by the graduated prices.
Example: 10
onlyAvailability boolean Whether to skip all price fields and only compute the availabilities.
includePriceScales boolean Whether to include the graduated prices.
includePriceAdditions boolean Whether to include the price additions (surcharges).
pickupSiteCodes List<String> The sites to determine the pickup availability for. If given, each item carries the pickup availability at exactly these sites instead of the standard availability. If empty, the standard availability mechanism is used, which honors the settings of the current basket (pickup availability at the selected pickup site, or the delivery availability).
Example: ["MAIN"]
Response Body
Field Type Description
priceMode required String The price mode of the current user, e.g. 'NET' or 'GROSS'.
effectivePriceLabel String The displayable label to use for the effective prices, e.g. 'Your price'. Absent if 'onlyAvailability' was requested.
effectivePriceSuffix String The displayable suffix to show next to the effective prices, e.g. 'plus VAT'. Absent if 'onlyAvailability' was requested.
recommendedPriceLabel String The displayable label to use for the recommended prices, e.g. 'list price'. Absent if 'onlyAvailability' was requested.
secondaryPriceSuffix String The displayable suffix to show next to the secondary prices, e.g. 'incl. VAT'. Absent if 'onlyAvailability' was requested.
items required List<ApiItemPriceItemResponse> The price and availability data per requested item, in the order of the request.
items[].uniqueItemNumber required String The globally unique item number the price data belongs to.
Example: 1234567890
items[].priceAndAvailability required ApiPriceAndAvailabilityResponse The price and availability of the item - the same shared block as returned by the search and item detail endpoints. Its 'availability' is only present in the standard case: if 'pickupSiteCodes' were given, the pickup availabilities in 'pickupStocks' replace it.
items[].priceAndAvailability.hasPrice required boolean Whether a price could be determined for the current user.
items[].priceAndAvailability.price ApiPriceResponse The effective price, present if 'hasPrice' is true. The price always refers to 'priceQuantity' units of the item.
items[].priceAndAvailability.price.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
items[].priceAndAvailability.price.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
items[].priceAndAvailability.price.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
items[].priceAndAvailability.priceQuantity ApiQuantityResponse The quantity the price refers to, present if 'hasPrice' is true. A price of 19,99 with a price quantity of 100 means 19,99 per 100 units.
items[].priceAndAvailability.priceQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
items[].priceAndAvailability.priceQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
items[].priceAndAvailability.availability ApiAvailabilityResponse The availability as determined by the standard mechanism, honoring the settings of the current basket: the pickup availability at the selected pickup site if the basket uses pickup shipping, the delivery availability otherwise. The type UNKNOWN can also indicate that the computation did not complete within the time window (timeout or overload) - a retry can then yield a result.
items[].priceAndAvailability.availability.type required String The stock type, e.g. 'IN_STOCK', 'LOW_STOCK', 'OUT_OF_STOCK' or 'UNKNOWN'.
Example: IN_STOCK
items[].priceAndAvailability.availability.text required String A displayable text providing further details on the availability.
Example: Available
items[].priceAndAvailability.availability.additionalText String An additional displayable text providing further details on the availability, if present.
Example: Delivery within 2-3 days
items[].offer required boolean Whether the effective price is a special offer.
items[].canAddToBasket required boolean Whether the item can currently be added to the basket.
items[].messages required List<ApiItemMessageResponse> Messages emitted while computing the prices, e.g. ERP hints. May be empty.
items[].messages[].html required String The message as HTML.
items[].messages[].type required String The severity of the message, e.g. 'INFO', 'WARNING' or 'PROBLEM'.
Example: INFO
items[].recommendedPrice ApiPriceResponse The recommended (list) price, if it should be displayed.
items[].recommendedPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
items[].recommendedPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
items[].recommendedPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
items[].secondaryPrice ApiPriceResponse The secondary price (e.g. the gross price for net shops), if it should be displayed.
items[].secondaryPrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
items[].secondaryPrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
items[].secondaryPrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
items[].basePrice ApiPriceResponse The base price (price per base unit), if any.
items[].basePrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
items[].basePrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
items[].basePrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
items[].priceScales List<ApiItemPriceScaleResponse> The graduated prices of the item. Only present if 'includePriceScales' is set.
items[].priceScales[].pricePredicate required String The condition type of the scale: 'LOWER_LIMIT' (applies from the given quantity on) or 'MODULO' (applies if the quantity is a multiple of the given value).
Example: LOWER_LIMIT
items[].priceScales[].conditionValue required ApiQuantityResponse The quantity the condition refers to.
items[].priceScales[].conditionValue.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
items[].priceScales[].conditionValue.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
items[].priceScales[].price ApiPriceResponse The list price of the scale.
items[].priceScales[].price.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
items[].priceScales[].price.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
items[].priceScales[].price.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
items[].priceScales[].effectivePrice ApiPriceResponse The effective price of the scale for the current user.
items[].priceScales[].effectivePrice.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
items[].priceScales[].effectivePrice.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
items[].priceScales[].effectivePrice.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
items[].bestPriceScale ApiItemBestPriceScaleResponse The best graduated price, if it should be displayed.
items[].bestPriceScale.prefix String The displayable prefix, e.g. 'from'.
Example: from
items[].bestPriceScale.price required ApiPriceResponse The best effective scale price.
items[].bestPriceScale.price.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
items[].bestPriceScale.price.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
items[].bestPriceScale.price.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
items[].bestPriceScale.suffix String The displayable suffix describing the condition, e.g. '>= 100 piece'.
items[].priceAdditions List<ApiItemPriceAdditionResponse> The price additions (surcharges) of the item. Only present if 'includePriceAdditions' is set.
items[].priceAdditions[].description required String The displayable description of the addition.
Example: Copper surcharge
items[].priceAdditions[].value required ApiPriceResponse The value of the addition.
items[].priceAdditions[].value.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
items[].priceAdditions[].value.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
items[].priceAdditions[].value.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
items[].priceAdditions[].showPriceQuantity required boolean Whether the addition refers to the price quantity of the item.
items[].packagingUnits List<ApiItemPackagingUnitResponse> The packaging units of the item, as provided by the ERP along with the prices. Only present when prices were computed.
items[].packagingUnits[].name String The name of the packaging unit, as provided by the ERP - hence only present in the price response.
Example: Box
items[].packagingUnits[].quantity required ApiQuantityResponse The quantity contained in the packaging unit.
items[].packagingUnits[].quantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
items[].packagingUnits[].quantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
items[].packagingUnits[].pricePerUnit ApiPriceResponse The price per packaging unit, if known.
items[].packagingUnits[].pricePerUnit.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
items[].packagingUnits[].pricePerUnit.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
items[].packagingUnits[].pricePerUnit.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
items[].extendedAvailability ApiAvailabilityResponse The extended (manufacturer) availability, complementing the standard availability. The server requests it automatically whenever the ERP availability is inconclusive. Never present when 'pickupSiteCodes' were given.
items[].extendedAvailability.type required String The stock type, e.g. 'IN_STOCK', 'LOW_STOCK', 'OUT_OF_STOCK' or 'UNKNOWN'.
Example: IN_STOCK
items[].extendedAvailability.text required String A displayable text providing further details on the availability.
Example: Available
items[].extendedAvailability.additionalText String An additional displayable text providing further details on the availability, if present.
Example: Delivery within 2-3 days
items[].pickupStocks List<ApiItemPickupStockResponse> The pickup availabilities at the requested sites. Only present if 'pickupSiteCodes' were given, and then carries exactly those sites (replacing the standard availability).
items[].pickupStocks[].siteCode required String The code of the pickup site.
items[].pickupStocks[].availability required ApiAvailabilityResponse The availability at the pickup site.
items[].pickupStocks[].availability.type required String The stock type, e.g. 'IN_STOCK', 'LOW_STOCK', 'OUT_OF_STOCK' or 'UNKNOWN'.
Example: IN_STOCK
items[].pickupStocks[].availability.text required String A displayable text providing further details on the availability.
Example: Available
items[].pickupStocks[].availability.additionalText String An additional displayable text providing further details on the availability, if present.
Example: Delivery within 2-3 days
items[].pickupStocks[].external required boolean Whether the stock information originates from an external source.

Recently Viewed Items

Returns the recently viewed items of the current session, most recent first. Requires the session cookie to be sent along - see the documentation for details.

Documentation

GET JSON /frontend-api/v1/items/recent
Response Body
Field Type Description
items required List<ApiItemSummaryResponse> The recently viewed items, most recent first. Empty if the feature is disabled or no visits were recorded yet.
items[].uniqueItemNumber required String The globally unique item number.
Example: 1234567890
items[].visibleItemNumber required String The item number as shown to the user.
Example: 1234567
items[].shortDescription required String The short, human-readable description of the item.
Example: Cordless Drill 18V
items[].brandName String The name of the brand, if any.
Example: Acme
items[].previewImageUrl String The URL of the preview image, if any.

Search products

Searches products with a typed query, filters, sorting, paging and a grouped or individual variant mode. The response contains the items, typed choice facets, pagination info and the total number of hits. As a sort mode may be unavailable for the current shop, user or result, the response also reports the effectively applied and the currently available sort modes.

Documentation

POST JSON /frontend-api/v1/search/query
Request Body
Field Type Description
query String The free-text search query.
Example: cordless drill
filters List<ApiSearchFilterValue> The active filters to apply, e.g. brand, price range or feature filters.
filters[].name required String The name of the filter, e.g. 'brand', 'price-min' or 'feature[code]'.
filters[].value required String The value to set for the filter.
sort ApiSearchSortMode The sort mode to apply. Defaults to 'RELEVANCE'. Note that not every mode is available for every request - an unavailable mode silently falls back, so check 'appliedSort' and 'availableSorts' of the response.
Example: RELEVANCE
page Integer The requested page, starting at 1.
Example: 1
pageSize Integer The number of items to return per page.
Example: 20
variantMode ApiSearchVariantMode Determines whether variants of the same item are grouped into a single result entry.
Example: GROUPED
includePrices boolean Whether to load prices and availabilities for the items of the result page. Loading them may require an ERP round-trip and can increase the response time noticeably. Only honored if the shop permits price loading within the search.
Response Body
Field Type Description
totalHits required int The total number of items matching the search.
items List<ApiSearchItemResponse> The items on the requested page.
items[].uniqueItemNumber required String The globally unique item number.
Example: 1234567890
items[].visibleItemNumber required String The item number as shown to the user.
Example: 1234567
items[].shortDescription required String The short, human-readable description of the item.
Example: Cordless Drill 18V
items[].brandName String The name of the brand, if any.
Example: Acme
items[].previewImageUrl String The URL of the preview image, if any.
items[].badges List<ApiBadgeResponse> The badges of the item.
items[].badges[].label required String The displayable label of the badge.
Example: New
items[].badges[].color String The text color of the badge as CSS color value, if any.
Example: #ffffff
items[].badges[].backgroundColor String The background color of the badge as CSS color value, if any.
Example: #0d6efd
items[].energyClasses List<ApiEnergyClassResponse> The energy efficiency classes of the item.
items[].energyClasses[].energyClass required String The energy efficiency class.
Example: A+
items[].energyClasses[].energyClassRange required String The energy efficiency scale the class belongs to. Must be displayed along with the class.
Example: A+++ - D
items[].energyClasses[].leftArrowImageUrl String The URL of the left-pointing arrow image for the class.
items[].energyClasses[].rightArrowImageUrl String The URL of the right-pointing arrow image for the class.
items[].energyClasses[].labelUrl String The URL of the full energy label document, if any.
items[].energyProductDatasheetUrl String The URL of the energy product datasheet, if any.
items[].priceAndAvailability ApiPriceAndAvailabilityResponse The price and availability of the item. Only present if 'includePrices' was requested and the shop permits loading prices within the search.
items[].priceAndAvailability.hasPrice required boolean Whether a price could be determined for the current user.
items[].priceAndAvailability.price ApiPriceResponse The effective price, present if 'hasPrice' is true. The price always refers to 'priceQuantity' units of the item.
items[].priceAndAvailability.price.amount required BigDecimal The machine-readable price amount, using a dot as decimal separator.
Example: 19.99
items[].priceAndAvailability.price.currencyCode required String The ISO 4217 currency code of the price.
Example: EUR
items[].priceAndAvailability.price.formatted required String The price, formatted according to the current shop and locale settings.
Example: 19,99 €
items[].priceAndAvailability.priceQuantity ApiQuantityResponse The quantity the price refers to, present if 'hasPrice' is true. A price of 19,99 with a price quantity of 100 means 19,99 per 100 units.
items[].priceAndAvailability.priceQuantity.value required BigDecimal The machine-readable quantity, using a dot as decimal separator.
Example: 2.5
items[].priceAndAvailability.priceQuantity.formatted required String The quantity, formatted according to the current shop and locale settings.
Example: 2,5
items[].priceAndAvailability.availability ApiAvailabilityResponse The availability as determined by the standard mechanism, honoring the settings of the current basket: the pickup availability at the selected pickup site if the basket uses pickup shipping, the delivery availability otherwise. The type UNKNOWN can also indicate that the computation did not complete within the time window (timeout or overload) - a retry can then yield a result.
items[].priceAndAvailability.availability.type required String The stock type, e.g. 'IN_STOCK', 'LOW_STOCK', 'OUT_OF_STOCK' or 'UNKNOWN'.
Example: IN_STOCK
items[].priceAndAvailability.availability.text required String A displayable text providing further details on the availability.
Example: Available
items[].priceAndAvailability.availability.additionalText String An additional displayable text providing further details on the availability, if present.
Example: Delivery within 2-3 days
items[].globalVariantGroup String The global variant group of the item, present if and only if the search actually grouped several matching variants into this entry. Pass this as 'variant' filter to the search endpoint (with the INDIVIDUAL variant mode) to fetch and narrow down all variants of the group.
items[].variantCount Integer The number of matching variants which were grouped into this entry, present if and only if 'globalVariantGroup' is present (and then always greater than one).
Example: 4
facets List<ApiSearchFacetResponse> The available facets to further narrow down the search.
facets[].code required String The stable code used to activate a value of this facet, e.g. via 'ApiSearchFilterValue.name'.
facets[].label required String The label to display for this facet.
facets[].type required ApiSearchFacetType The kind of this facet.
facets[].values List<ApiSearchFacetValueResponse> The selectable values of this facet.
facets[].values[].key required String The stable key used to activate this value via 'ApiSearchFilterValue.value'.
facets[].values[].label required String The label to display for this value.
facets[].values[].count required int The number of items matching this value.
facets[].values[].active required boolean Whether this value is currently active/selected.
pagination required ApiSearchPaginationResponse The paging state of this result.
pagination.page required int The effective page which was returned, starting at 1.
Example: 1
pagination.pageSize required int The effective number of items per page.
Example: 20
pagination.hasMore required boolean Whether another page can be requested.
appliedSort required ApiSearchSortMode The sort mode which was effectively applied to this result. This may differ from the requested one, as an unavailable mode falls back instead of failing the request.
availableSorts required List<ApiSearchSortMode> The sort modes which can be requested for this result. Use these to build a sort selection - requesting a mode which is absent here falls back to another mode.

Get search suggestions

Returns ordered suggestions for products, brands, classes and groups matching the query parameter and optional active search filters. Item suggestions expose the unique item number as their value.

Documentation

GET JSON /frontend-api/v1/search/suggestions
Parameters
Name Description Example
query
Required
The (partial) search phrase to compute suggestions for.
brand Example of an active search filter constraining the suggestions. Any filter name supported by the search endpoint can be supplied as an additional query parameter, e.g. 'brand', 'class', 'group[PRODUCT_GROUP]' or 'feature[code]'.
Response Body
Field Type Description
suggestions required List<ApiSearchSuggestionResponse> The suggestions grouped in their natural relevance order.
suggestions[].type required String The suggestion category, for example 'brand', 'class', 'group[productGroup]', 'item' or 'variant'.
suggestions[].value String The value to use when applying the suggestion. Item suggestions contain the unique item number instead of a web URL.
suggestions[].label required String The label to display for this suggestion.
suggestions[].imageUrl String An optional image URL for this suggestion.
suggestions[].description String An optional secondary description.
suggestions[].disabled required boolean Whether this entry is informational and cannot be selected.

Browse brands, classes or groups

Returns cursor-paged brands, classes or groups. For classes and groups, the hierarchy level is derived from a class or group token selected via filters; without such a token, the requested hierarchy level is used and defaults to the root level. Reuse the opaque nextCursor only with an otherwise unchanged request.

Documentation

POST JSON /frontend-api/v1/search/browse
Request Body
Field Type Description
type required ApiSearchBrowseType The hierarchy type to browse.
groupType String The group type code used for GROUP navigation, for example PRODUCT_GROUP. Defaults to PRODUCT_GROUP if omitted. Ignored for other types.
query String Optional full text query constraining the browsed values.
filters List<ApiSearchFilterValue> Optional active filter context used to constrain the browsed values.
filters[].name required String The name of the filter, e.g. 'brand', 'price-min' or 'feature[code]'.
filters[].value required String The value to set for the filter.
hierarchyLevel Integer The zero-based hierarchy level to aggregate for CLASS and GROUP navigation. If a class or group token is selected via filters, the level is derived from that token and this value is ignored. Otherwise it selects the start level (default 0 for the first/root page) and must be repeated unchanged together with the cursor while paginating. Ignored for BRAND.
cursor String The opaque cursor returned as nextCursor by the preceding browse request. Omit on the first page; do not send placeholder values.
Response Body
Field Type Description
entries required List<ApiSearchBrowseEntryResponse> The hierarchy entries for this page.
entries[].id required String The stable filter value for this hierarchy entry.
entries[].name required String The display name of this hierarchy entry.
entries[].imageUrl String An optional logo or icon URL.
entries[].description String An optional descriptive text, usually containing the item count.
nextCursor String The opaque cursor for the next page, or null when no further page exists.
hasMore required boolean Whether another cursor page is available.
hierarchyLevel required int The hierarchy level represented by this response.