Basket
General
Customers must place items in the basket before proceeding to the checkout and completing a purchase. Included products can be reviewed, edited, or moved to the customer's wish list at any point in time.
Products in the basket always include the respective variant since this is the entity to be sold. So, whether you are adding, updating, or deleting items, you deal with the individual variant and its availability – without exception.
The products are kept for 60 days in the basket and this time is reset in case any change is made within the basket entity. After this period, the products are deleted from the basket.
Promotions at the item level within the basket are always included if a promotionId is present. However, the validity of the promotion (promotion.isValid
) and any failed conditions (promotion.failedConditions
) depends on whether the promotion meets its specified conditions. If the conditions are met, isValid
is true, and failedConditions
is an empty array; otherwise, it could be vice versa. If there is no promotionId, both promotionId
and the promotion
object will be null at the basket item level.
Retrieve a list of all applicable promotions by including the ?with=applicablePromotions
query parameter. To display applicable promotions, submit a basket item without the "promotionId" parameter. If the "promotionId"
is included, the promotion becomes directly associated with the item, and no other applicable promotions will be displayed.
For example, to get basket items with applicable promotions: GET /v1/baskets/{basket_key}?with=applicablePromotions
You need a configured Storefront API client to:
- get basket items
- get basket items with applicable promotions
- add items to the basket
- add items to the basket with promotionId
- add items to the basket with promotionCode
- add items to the basket with PPK
- add items to the basket with combined promotionId and PPK
- update items in the basket
- update basket item with
promotionId
- update basket item with
promotionCode
- update basket item with PPK
- update basket item with combined promotionId and PPK
- remove item from the basket
Storefront API
When selling products, remember that you are always working with its respective variants.
The number of items you can add to the basket depends on how many product variants are in stock.
If you add a number higher than what is in stock, the system will automatically add the maximum number of what is available. If a product is not available at all, the request will fail. If the variant was added before it was unavailable, it will be flagged as sold out.
Item quantity
You cannot add an item, which is already in the basket. In this case, you need to update the quantity.
Add basket item
We are going to add our first product variant to the basket of a customer. In this example it is about customer 1234 who wants 3 pieces of a specific shirt with variant ID 1.
Each basket has a specific key which we can freely come up with. Here we can use the pattern myshop_customer_$customerId
. Whenever we want to work with this basket, we need to refer to that specific key. We also request some product and variant related information, e.g. product name and variant sizes.
Use addOrUpdateItem()
The NodeJS SDK provides the method addOrUpdateItem()
which works similar to addItem()
but can be run again for the same variant with an updated quantity. If you run addItem()
for a variant which exists in the basket it results in a failure.
For PHP and Java use update()
to change quantity.
Parameter | Type | Required | Description |
---|---|---|---|
basketKey | string | true | Key of the basket. |
variantId | integer | true | ID of the variant to be added to the basket. |
quantity | integer | true | Quantity of variants to be added to the basket. |
promotionId | string | false | ID of promotion to be added to the basket. |
promotionCode | string | false | Code of promotion to be added to the basket. |
with | object | false | Defines which optional fields should be included in the response. Contained as with inside the options object (fourth parameter). |
customData | string | false | For each item, you can add an additional custom data array. The data will remain attached to the basket item and you may retrieve it at any time during or after the checkout and order process. You can specify |
// Add variant with id 1 to our customer's basket
const response = await client.basket.addItem( // or addOrUpdateItem()
"myshop_customer_1234",
1, // variantId
3, // quantity
{
with: {
items: {
variant: {
attributes: "all",
},
product: {
attributes: { withKey: ["name"] },
},
},
},
}
);
const item = response.basket.items[0];
console.log(item.product.attributes.name.values.label);
console.log(`Size: ${item.variant.attributes.size.values.label}`);
console.log(`Quantity: ${item.quantity}`);
// Hilfiger Shirt
// Size: S
// Quantity: 3
Response
{
"type": "success",
"basket": {
"key": "myshop_customer_1234",
"items": [
{
"key": "c4ca4238a0b923820dcc509a6f75849b",
"packageId": 1,
"quantity": 3,
"status": "available",
"displayData": {},
"availableQuantity": 31,
"deliveryForecast": {},
"customData": {},
"lowestPriorPrice": {
"withTax": null,
"relativeDifferenceToPrice": null
},
"price": {
"total": {
"currencyCode": "EUR",
"withTax": 11970,
"withoutTax": 10059,
"recommendedRetailPrice": null,
"tax": { "vat": { "amount": 1911, "rate": 0 } },
"appliedReductions": []
},
"unit": {
"currencyCode": "EUR",
"withTax": 3990,
"withoutTax": 3353,
"recommendedRetailPrice": null,
"tax": { "vat": { "amount": 637, "rate": 0 } },
"appliedReductions": []
}
},
"variant": {
"id": 1,
"referenceKey": "THS0906008000001_S",
"attributes": {
"size": {
"id": 1002,
"key": "size",
"label": "Size",
"type": "",
"multiSelect": false,
"values": { "id": 28, "label": "S", "value": "s" }
}
},
"firstLiveAt": "0001-01-01T00:00:00+00:00",
"createdAt": "2023-06-12T14:05:33+00:00",
"updatedAt": "2023-07-07T11:50:06+00:00",
"stock": {
"supplierId": 1,
"warehouseId": 1,
"quantity": 31,
"isSellableWithoutStock": false
},
"price": {
"currencyCode": "EUR",
"withTax": 3990,
"withoutTax": 3353,
"recommendedRetailPrice": null,
"tax": { "vat": { "amount": 637, "rate": 0.19 } },
"appliedReductions": []
},
"customData": {}
},
"product": {
"id": 1,
"isActive": true,
"isSoldOut": false,
"isNew": false,
"createdAt": "2023-06-12T14:05:33+00:00",
"updatedAt": "2023-06-12T14:05:34+00:00",
"indexedAt": "2023-07-10T13:13:03+00:00",
"firstLiveAt": "2023-06-12T14:05:33+00:00",
"masterKey": "THS090600",
"referenceKey": "THS0906008000001",
"attributes": {
"name": {
"id": 20005,
"key": "name",
"label": "Name",
"type": "",
"multiSelect": false,
"values": {
"id": 20005,
"label": "Hilfiger Shirt",
"value": "name"
}
}
},
"images": [
{
"hash": "https://cdn.aboutstatic.com/file/cd81a5d37e4241686586812d9e179553?bg=F4F4F5&quality=75&trim=1&height=1067&width=800,https://cdn.aboutstatic.com/file/1c98f7fc408b9d2cca91abfbf5650df1?bg=F4F4F5&quality=75&height=1067&width=800, https://cdn.aboutstatic.com/f",
"attributes": {}
}
],
"customData": {}
},
"itemGroup": null
"promotionId": null
"promotion": null
}
],
"packages": [
{
"carrierKey": "DEFAULT",
"deliveryDate": { "max": "2023-07-13", "min": "2023-07-11" },
"id": 1
}
],
"cost": {
"currencyCode": "EUR",
"withTax": 11970,
"withoutTax": 10059,
"recommendedRetailPrice": null,
"tax": { "vat": { "amount": 1911, "rate": 0 } },
"appliedReductions": []
}
}
}
Add items to the basket with promotionId
We are going to add our first product variant to the basket of a customer. In this example it is about customer 1235 who wants 2 pieces of a specific shirt with variant id 100, and promotion ID 6522f4b2b857b289b920c12e
. Each basket has a specific key which we can freely come up with. Here we can with the pattern myshop_customer_$customerId. Whenever we want to work with this basket, we need to refer to that specific key. We also request some product and variant related information, e.g. product name and variant sizes.
Use addOrUpdateItem()
The NodeJS SDK provides the method addOrUpdateItem()
which works similar to addItem()
but can be run again for the same variant with an updated quantity. If you run addItem()
for a variant which exists in the basket it results in a failure.
For PHP and Java use update()
to change quantity.
// Add variant with id 100 to our customer's basket
const response = await client.basket.addItem( // or addOrUpdateItem()
"myshop_customer_1235",
100, // variantId
2, // quantity
"6522f4b2b857b289b920c12e", // promotionId
{
with: {
items: {
variant: {
attributes: "all",
},
product: {
attributes: { withKey: ["name"] },
},
},
},
}
);
const item = response.basket.items[0];
console.log(item.product.attributes.name.values.label);
console.log(`Size: ${item.variant.attributes.size.values.label}`);
console.log(`Quantity: ${item.quantity}`);
console.log(`PromotionId: ${item.promotionId}`);
// Hilfiger Shirt
// Size: S
// Quantity: 2
// PromotionId: 6522f4b2b857b289b920c12e
Response
{
"type": "success",
"basket": {
"key": "myshop_customer_1235",
"items": [
{
"key": "c4ca4238a0b923820dcc509a6f75849c",
"packageId": 1,
"quantity": 2,
"status": "available",
"displayData": {},
"availableQuantity": 31,
"deliveryForecast": {},
"customData": {},
"lowestPriorPrice": {
"withTax": null,
"relativeDifferenceToPrice": null
},
"price": {
"total": {
"currencyCode": "EUR",
"withTax": 11970,
"withoutTax": 10059,
"recommendedRetailPrice": null,
"tax": { "vat": { "amount": 1911, "rate": 0 } },
"appliedReductions": []
},
"unit": {
"currencyCode": "EUR",
"withTax": 3990,
"withoutTax": 3353,
"recommendedRetailPrice": null,
"tax": { "vat": { "amount": 637, "rate": 0 } },
"appliedReductions": []
}
},
"variant": {
"id": 100,
"referenceKey": "THS0906008000001_S",
"attributes": {
"size": {
"id": 1002,
"key": "size",
"label": "Size",
"type": "",
"multiSelect": false,
"values": { "id": 28, "label": "S", "value": "s" }
}
},
"firstLiveAt": "0001-01-01T00:00:00+00:00",
"createdAt": "2023-06-12T14:05:33+00:00",
"updatedAt": "2023-07-07T11:50:06+00:00",
"stock": {
"supplierId": 1,
"warehouseId": 1,
"quantity": 31,
"isSellableWithoutStock": false
},
"price": {
"currencyCode": "EUR",
"withTax": 3990,
"withoutTax": 3353,
"recommendedRetailPrice": null,
"tax": { "vat": { "amount": 637, "rate": 0.19 } },
"appliedReductions": []
},
"customData": {}
},
"product": {
"id": 1,
"isActive": true,
"isSoldOut": false,
"isNew": false,
"createdAt": "2023-06-12T14:05:33+00:00",
"updatedAt": "2023-06-12T14:05:34+00:00",
"indexedAt": "2023-07-10T13:13:03+00:00",
"firstLiveAt": "2023-06-12T14:05:33+00:00",
"masterKey": "THS090600",
"referenceKey": "THS0906008000001",
"attributes": {
"name": {
"id": 20005,
"key": "name",
"label": "Name",
"type": "",
"multiSelect": false,
"values": {
"id": 20005,
"label": "Hilfiger Shirt",
"value": "name"
}
}
},
"images": [
{
"hash": "https://cdn.aboutstatic.com/file/cd81a5d37e4241686586812d9e179553?bg=F4F4F5&quality=75&trim=1&height=1067&width=800,https://cdn.aboutstatic.com/file/1c98f7fc408b9d2cca91abfbf5650df1?bg=F4F4F5&quality=75&height=1067&width=800, https://cdn.aboutstatic.com/f",
"attributes": {}
}
],
"customData": {}
},
"itemGroup": null
"promotionId": "6522f4b2b857b289b920c12e"
"promotion": {
"id": "6522f4b2b857b289b920c12e",
"name": "Automatic Discount",
"schedule": {
"from": "2023-09-30T09:00:00Z",
"to": "2023-12-30T18:00:00Z"
},
"isActive": true,
"effect": {
"type": "automatic_discount",
"additionalData": {
"type": "relative",
"value": 20
}
},
"conditions": [
{
"level": "global",
"key": "mov_100",
"condition": "payload.totals.withTax > 10000"
}
],
"customData": {
"corePanel": {
"viewType": "advanced"
},
"headerText": "Get 20% when your basket is over 100$"
},
"tiers": [
{
"id": 1,
"name": "Tier 1",
"MOV": 10000,
"effect": {
"additionalData": {
"type": "relative",
"value": 25
}
}
}
],
"isValid": false,
"failedConditions": [
{
"key": "mov_100",
"level": "global"
}
]
}
}
],
"packages": [
{
"carrierKey": "DEFAULT",
"deliveryDate": { "max": "2023-07-13", "min": "2023-07-11" },
"id": 1
}
],
"cost": {
"currencyCode": "EUR",
"withTax": 11970,
"withoutTax": 10059,
"recommendedRetailPrice": null,
"tax": { "vat": { "amount": 1911, "rate": 0 } },
"appliedReductions": []
}
}
}
Add items to the basket with promotionCode
It is also possible to add an item to the basket with a promotionCode. It works the same way as with a promotionId and you also need to include the promotionId.
curl --location -X POST 'https://{{tenant-space}}.storefront.api.scayle.cloud/v1/baskets/myshop_customer_1234/items?shopId={{shopId}}&with=items.product.attributes%2Citems.variant.attributes%3Akey(name)' \
--header 'Content-Type: application/json' \
--data '{
"quantity": 3,
"variantId": 1,
"promotionId": "6522f4b2b857b289b920c12e",
"promotionCode": "promocode123"
}'
Response
{
"type": "success",
"basket": {
"key": "myshop_customer_1235",
"items": [
{
"key": "c4ca4238a0b923820dcc509a6f75849c",
"packageId": 1,
"quantity": 2,
"status": "available",
"displayData": {},
"availableQuantity": 31,
"deliveryForecast": {},
"customData": {},
"lowestPriorPrice": {
"withTax": null,
"relativeDifferenceToPrice": null
},
"price": {
"total": {
"currencyCode": "EUR",
"withTax": 11970,
"withoutTax": 10059,
"recommendedRetailPrice": null,
"tax": { "vat": { "amount": 1911, "rate": 0 } },
"appliedReductions": []
},
"unit": {
"currencyCode": "EUR",
"withTax": 3990,
"withoutTax": 3353,
"recommendedRetailPrice": null,
"tax": { "vat": { "amount": 637, "rate": 0 } },
"appliedReductions": []
}
},
"variant": {
"id": 100,
"referenceKey": "THS0906008000001_S",
"attributes": {
"size": {
"id": 1002,
"key": "size",
"label": "Size",
"type": "",
"multiSelect": false,
"values": { "id": 28, "label": "S", "value": "s" }
}
},
"firstLiveAt": "0001-01-01T00:00:00+00:00",
"createdAt": "2023-06-12T14:05:33+00:00",
"updatedAt": "2023-07-07T11:50:06+00:00",
"stock": {
"supplierId": 1,
"warehouseId": 1,
"quantity": 31,
"isSellableWithoutStock": false
},
"price": {
"currencyCode": "EUR",
"withTax": 3990,
"withoutTax": 3353,
"recommendedRetailPrice": null,
"tax": { "vat": { "amount": 637, "rate": 0.19 } },
"appliedReductions": []
},
"customData": {}
},
"product": {
"id": 1,
"isActive": true,
"isSoldOut": false,
"isNew": false,
"createdAt": "2023-06-12T14:05:33+00:00",
"updatedAt": "2023-06-12T14:05:34+00:00",
"indexedAt": "2023-07-10T13:13:03+00:00",
"firstLiveAt": "2023-06-12T14:05:33+00:00",
"masterKey": "THS090600",
"referenceKey": "THS0906008000001",
"attributes": {
"name": {
"id": 20005,
"key": "name",
"label": "Name",
"type": "",
"multiSelect": false,
"values": {
"id": 20005,
"label": "Hilfiger Shirt",
"value": "name"
}
}
},
"images": [
{
"hash": "https://cdn.aboutstatic.com/file/cd81a5d37e4241686586812d9e179553?bg=F4F4F5&quality=75&trim=1&height=1067&width=800,https://cdn.aboutstatic.com/file/1c98f7fc408b9d2cca91abfbf5650df1?bg=F4F4F5&quality=75&height=1067&width=800, https://cdn.aboutstatic.com/f",
"attributes": {}
}
],
"customData": {}
},
"itemGroup": null
"promotionId": "6522f4b2b857b289b920c12e"
"promotion": {
"id": "6522f4b2b857b289b920c12e",
"name": "Automatic Discount",
"schedule": {
"from": "2023-09-30T09:00:00Z",
"to": "2023-12-30T18:00:00Z"
},
"isActive": true,
"effect": {
"type": "automatic_discount",
"additionalData": {
"type": "relative",
"value": 20
}
},
"conditions": [
{
"level": "global",
"key": "mov_100",
"condition": "payload.totals.withTax > 10000"
}
],
"customData": {
"corePanel": {
"viewType": "advanced"
},
"headerText": "Get 20% when your basket is over 100$"
},
"tiers": [
{
"id": 1,
"name": "Tier 1",
"MOV": 10000,
"effect": {
"additionalData": {
"type": "relative",
"value": 25
}
}
}
],
"isValid": false,
"failedConditions": [
{
"key": "mov_100",
"level": "global"
}
]
}
}
],
"packages": [
{
"carrierKey": "DEFAULT",
"deliveryDate": { "max": "2023-07-13", "min": "2023-07-11" },
"id": 1
}
],
"cost": {
"currencyCode": "EUR",
"withTax": 11970,
"withoutTax": 10059,
"recommendedRetailPrice": null,
"tax": { "vat": { "amount": 1911, "rate": 0 } },
"appliedReductions": []
}
}
}
Add items to the basket with PPK
It is possible to add an item to the basket using a PPK (Price Promotion Key). This process applies the PPK discount directly to the item's original price. Below is an example of how this works:
Example:
- Product Original price: €999
- After applying the PPK: €777
The final payable amount after the PPK discount is €777.
// Add variant with id 338316 to our customer's basket
const response = await client.basket.addItem( // or addOrUpdateItem()
"myshop_customer_1235",
338316, // variantId
1, // quantity
{
pricePromotionKey: "sapiqappk",
},
);
const item = response.basket.items[0];
console.log(`Quantity: ${item.quantity}`);
console.log(`PricePromotionKey: ${item.customData.pricePromotionKey}`);
// Quantity: 1
// PricePromotionKey: sapiqappk
Response
{
"key": "myshop_customer_1235",
"items": [
{
"key": "37105a2d2576d072b38f426e7b443a2c",
"packageId": 1,
"quantity": 1,
"status": "available",
"displayData": {},
"availableQuantity": 9702,
"customData": {
"pricePromotionKey": "sapiqappk"
},
"lowestPriorPrice": {
"withTax": 77795,
"relativeDifferenceToPrice": -0.01
},
"price": {
"total": {
"currencyCode": "EUR",
"withTax": 77700,
"withoutTax": 65294,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 12406,
"rate": 0
}
},
"appliedReductions": [
{
"category": "sale",
"type": "relative",
"amount": {
"relative": 0.12,
"absoluteWithTax": 11100
}
}
]
},
"unit": {
"currencyCode": "EUR",
"withTax": 77700,
"withoutTax": 65294,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 12406,
"rate": 0
}
},
"appliedReductions": [
{
"category": "sale",
"type": "relative",
"amount": {
"relative": 0.12,
"absoluteWithTax": 11100
}
}
]
}
},
"variant": {
"id": 338316,
"referenceKey": "varRKDF0",
"firstLiveAt": "2024-10-14T13:02:49+00:00",
"createdAt": "2024-10-14T13:02:20+00:00",
"updatedAt": "2024-10-28T09:53:49+00:00",
"stock": {
"supplierId": 1,
"warehouseId": 1,
"quantity": 9702,
"isSellableWithoutStock": false,
"expectedAvailabilityAt": null
},
"price": {
"currencyCode": "EUR",
"withTax": 99900,
"withoutTax": 83950,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 15950,
"rate": 0.19
}
},
"appliedReductions": []
},
"customData": {}
},
"product": {
"id": 208143,
"isActive": true,
"isSoldOut": false,
"isNew": false,
"createdAt": "2024-10-14T13:02:20+00:00",
"updatedAt": "2024-12-24T11:20:04+00:00",
"indexedAt": "2025-01-10T14:35:50+00:00",
"firstLiveAt": "2024-10-14T13:02:49+00:00",
"masterKey": "productDisableFuzziness0",
"referenceKey": "productRefKDisableFuzziness0",
"images": [
{
"hash": "https://www.aboutyou.de"
}
],
"customData": {}
},
"itemGroup": null,
"promotionId": null,
"promotionCode": null,
"promotion": null
}
],
"packages": [
{
"carrierKey": "ZASIL_CZ",
"deliveryDate": {
"max": "2025-01-14",
"min": "2025-01-13"
},
"id": 1
}
],
"cost": {
"currencyCode": "EUR",
"withTax": 77700,
"withoutTax": 65294,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 12406,
"rate": 0
}
},
"appliedReductions": [
{
"category": "sale",
"type": "relative",
"amount": {
"relative": 0.12,
"absoluteWithTax": 11100
}
}
]
},
"basketOutdated": false
}
Add items to the basket with combined promotionId and PPK
It is possible to add an item to the basket using both a promotionId
and a PPK
(Price Promotion Key) simultaneously. This process first applies the PPK discount, and then the promotion's automatic discount is applied on top of it. Below is an example of how to make this request, along with the expected outcomes.
In below example: Original price: €999. After applying the PPK, price drops to €777. With a 17% promotion discount (on orders above €500), the final payable amount is €644.91.
// Add variant with id 338316 to our customer's basket
const response = await client.basket.addItem( // or addOrUpdateItem()
"myshop_customer_1235",
338316, // variantId
1, // quantity
"672b8324cc574c81c1a24938", // promotionId
{
pricePromotionKey: "sapiqappk",
},
);
const item = response.basket.items[0];
console.log(`Quantity: ${item.quantity}`);
console.log(`PromotionId: ${item.promotionId}`);
console.log(`PricePromotionKey: ${item.customData.pricePromotionKey}`);
// Quantity: 1
// PromotionId: 672b8324cc574c81c1a24938
// PricePromotionKey: sapiqappk
Response
{
"key": "myshop_customer_1235",
"items": [
{
"key": "37105a2d2576d072b38f426e7b443a2c",
"packageId": 1,
"quantity": 1,
"status": "available",
"displayData": {},
"availableQuantity": 9709,
"customData": {
"pricePromotionKey": "sapiqappk"
},
"lowestPriorPrice": {
"withTax": 77795,
"relativeDifferenceToPrice": -0.01
},
"price": {
"total": {
"currencyCode": "EUR",
"withTax": 64491,
"withoutTax": 54194,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 10297,
"rate": 0
}
},
"appliedReductions": [
{
"category": "sale",
"type": "relative",
"amount": {
"relative": 0.12,
"absoluteWithTax": 11100
}
},
{
"category": "promotion",
"type": "relative",
"amount": {
"relative": 0.17,
"absoluteWithTax": 13209,
"absoluteTax": 2109,
"absoluteWithoutTax": 11100
}
}
]
},
"unit": {
"currencyCode": "EUR",
"withTax": 64491,
"withoutTax": 54194,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 10297,
"rate": 0
}
},
"appliedReductions": [
{
"category": "sale",
"type": "relative",
"amount": {
"relative": 0.12,
"absoluteWithTax": 11100
}
},
{
"category": "promotion",
"type": "relative",
"amount": {
"relative": 0.17,
"absoluteWithTax": 13209,
"absoluteTax": 2109,
"absoluteWithoutTax": 11100
}
}
]
}
},
"variant": {
"id": 338316,
"referenceKey": "varRKDF0",
"firstLiveAt": "2024-10-14T13:02:49+00:00",
"createdAt": "2024-10-14T13:02:20+00:00",
"updatedAt": "2024-10-28T09:53:49+00:00",
"stock": {
"supplierId": 1,
"warehouseId": 1,
"quantity": 9709,
"isSellableWithoutStock": false,
"expectedAvailabilityAt": null
},
"price": {
"currencyCode": "EUR",
"withTax": 99900,
"withoutTax": 83950,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 15950,
"rate": 0.19
}
},
"appliedReductions": []
},
"customData": {}
},
"product": {
"id": 208143,
"isActive": true,
"isSoldOut": false,
"isNew": false,
"createdAt": "2024-10-14T13:02:20+00:00",
"updatedAt": "2024-12-24T11:20:04+00:00",
"indexedAt": "2025-01-09T11:26:37+00:00",
"firstLiveAt": "2024-10-14T13:02:49+00:00",
"masterKey": "productDisableFuzziness0",
"referenceKey": "productRefKDisableFuzziness0",
"images": [
{
"hash": "https://www.aboutyou.de"
}
],
"customData": {}
},
"itemGroup": null,
"promotionId": "672b8324cc574c81c1a24938",
"promotionCode": null,
"promotion": {
"id": "672b8324cc574c81c1a24938",
"name": "PPK and AD percentage",
"schedule": {
"from": "2024-11-05T23:00:00Z",
"to": "2026-11-13T23:00:00Z"
},
"isActive": true,
"effect": {
"type": "automatic_discount",
"additionalData": {
"type": "relative",
"value": 17
}
},
"conditions": [
{
"level": "global",
"key": "panels_automatic-discount_any_products_condition_e5b66afa5eacabdb6bb855c6a9344db49cc372b4",
"condition": "size(payload.items) >= 1"
},
{
"level": "global",
"key": "panels_automatic-discount_minimum_order_amount_50000",
"condition": "payload.totals.withTax >= 50000"
},
{
"level": "item",
"key": "panels_automatic-discount_any_products_condition_5ffe533b830f08a0326348a9160afafc8ada44db",
"condition": "true"
}
],
"customData": {
"corePanel": {
"viewType": "automatic-discount"
}
},
"priority": 1,
"tiers": [],
"isValid": true,
"failedConditions": []
}
}
],
"packages":
[
{
"carrierKey": "ZASIL_CZ",
"deliveryDate": {
"max": "2025-01-13",
"min": "2025-01-10"
},
"id": 1
}
],
"cost":
{
"currencyCode": "EUR",
"withTax": 64491,
"withoutTax": 54194,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 10297,
"rate": 0
}
},
"appliedReductions":
[
{
"category": "sale",
"type": "relative",
"amount": {
"relative": 0.12,
"absoluteWithTax": 11100
}
},
{
"category": "promotion",
"type": "relative",
"amount": {
"relative": 0.17,
"absoluteWithTax": 13209,
"absoluteTax": 2109,
"absoluteWithoutTax": 11100
}
}
]
},
"basketOutdated": false
}
Get all basket items
We can request the current state of a basket by simply passing the basket key. Here we can also define which attributes of the product and its variant we want to retrieve.
Note that you need to have an item in the basket.
Optionally you can add a campaignKey
to retrieve updated discounted prices.
// Get a specific basket by its key
const { basket } = await client.basket.get("myshop_customer_1234", {
items: {
product: {
attributes: { withKey: ["name","brand"] },
},
variant: {
attributes: "all"
},
},
campaignKey: 'promo_test_20'
});
console.log(
`Costs: ${basket.basket.cost.withTax / 100}${basket.basket.cost.currencyCode}`
);
// Costs: 119.7EUR
Response
{
"key": "myshop_customer_1234",
"items": [
{
"key": "640752001b09dc131087c3620227027c",
"packageId": 1,
"quantity": 19,
"status": "available",
"displayData": {},
"availableQuantity": 31,
"customData": {},
"lowestPriorPrice": {
"withTax": null,
"relativeDifferenceToPrice": null
},
"price": {
"total": {
"currencyCode": "EUR",
"withTax": 75810,
"withoutTax": 63707,
"recommendedRetailPrice": null,
"tax": { "vat": { "amount": 12104, "rate": 0 } },
"appliedReductions": []
},
"unit": {
"currencyCode": "EUR",
"withTax": 3990,
"withoutTax": 3353,
"recommendedRetailPrice": null,
"tax": { "vat": { "amount": 637, "rate": 0 } },
"appliedReductions": []
}
},
"variant": {
"id": 1,
"referenceKey": "THS0906008000001_S",
"attributes": {
"size": {
"id": 1002,
"key": "size",
"label": "Size",
"type": "",
"multiSelect": false,
"values": { "id": 28, "label": "S", "value": "s" }
}
},
"firstLiveAt": "0001-01-01T00:00:00+00:00",
"createdAt": "2023-06-12T14:05:33+00:00",
"updatedAt": "2023-08-28T11:19:33+00:00",
"stock": {
"supplierId": 1,
"warehouseId": 1,
"quantity": 31,
"isSellableWithoutStock": false
},
"price": {
"currencyCode": "EUR",
"withTax": 3990,
"withoutTax": 3353,
"recommendedRetailPrice": null,
"tax": { "vat": { "amount": 637, "rate": 0.19 } },
"appliedReductions": []
},
"customData": { "deliveryEstimate": [] }
},
"product": {
"id": 1,
"isActive": true,
"isSoldOut": false,
"isNew": false,
"createdAt": "2023-06-12T14:05:33+00:00",
"updatedAt": "2023-06-12T14:05:34+00:00",
"indexedAt": "2023-09-05T12:42:43+00:00",
"firstLiveAt": "2023-06-12T14:05:33+00:00",
"masterKey": "THS090600",
"referenceKey": "THS0906008000001",
"attributes": {
"name": {
"id": 20005,
"key": "name",
"label": "Name",
"type": "",
"multiSelect": false,
"values": {
"id": 20005,
"label": "Hilfiger Shirt",
"value": "name"
}
},
"brand": {
"id": 550,
"key": "brand",
"label": "Marke",
"type": "",
"multiSelect": false,
"values": {
"id": 10,
"label": "Tommy Hilfiger",
"value": "tommy_hilfiger"
}
}
},
"images": [
{
"hash": "https://cdn.aboutstatic.com/file/cd81a5d37e4241686586812d9e179553?bg=F4F4F5&quality=75&trim=1&height=1067&width=800,https://cdn.aboutstatic.com/file/1c98f7fc408b9d2cca91abfbf5650df1?bg=F4F4F5&quality=75&height=1067&width=800, https://cdn.aboutstatic.com/f",
"attributes": {}
}
],
"customData": {}
},
"itemGroup": {
"id": "sun_glasses_hhbdz6",
"isMainItem": true,
"isRequired": true
},
"promotionId": null
"promotion": null
}
],
"packages": [
{
"carrierKey": "DEFAULT",
"deliveryDate": { "max": "2023-09-18", "min": "2023-09-11" },
"id": 1
}
],
"cost": {
"currencyCode": "EUR",
"withTax": 75810,
"withoutTax": 63707,
"recommendedRetailPrice": null,
"tax": { "vat": { "amount": 12104, "rate": 0 } },
"appliedReductions": []
}
}
Get Basket items with Applicable Promotions
Retrieve a list of all applicable promotions along with basket items by including the?with=applicablePromotions
query parameter. To display applicable promotions, submit a basket item without the "promotionId" parameter. If the "promotionId"
is included (not null), the promotion becomes directly associated with the item, and no other applicable promotions will be displayed.
Optionally you can add a with=applicablePromotions
to retrieve active applicable promotions.
// Get a specific basket by its key with applicablePromotions
const { basket } = await client.basket.get("myshop_customer_1234", {
with: 'applicablePromotions'
});
console.log(
`Number of Applicable Promotions: ${basket.applicablePromotions.length}`
);
// Number of Applicable Promotions: 1
Response
{
"key": "myshop_customer_1234",
"items": [
{
"key": "44f364e11b019eb381b86866331a9993",
"packageId": 2,
"quantity": 20,
"status": "available",
"displayData": {},
"availableQuantity": 70,
"customData": {},
"lowestPriorPrice": {
"withTax": null,
"relativeDifferenceToPrice": null
},
"price": {
"total": {
"currencyCode": "EUR",
"withTax": 2400,
"withoutTax": 2020,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 380,
"rate": 0
}
},
"appliedReductions": [
{
"category": "promotion",
"type": "relative",
"amount": {
"relative": 0.2,
"absoluteWithTax": 600,
"absoluteTax": 100,
"absoluteWithoutTax": 500
}
}
]
},
"unit": {
"currencyCode": "EUR",
"withTax": 120,
"withoutTax": 101,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 19,
"rate": 0
}
},
"appliedReductions": [
{
"category": "promotion",
"type": "relative",
"amount": {
"relative": 0.2,
"absoluteWithTax": 30,
"absoluteTax": 5,
"absoluteWithoutTax": 25
}
}
]
}
},
"variant": {
"id": 33378,
"referenceKey": "default-merchant-fallback-test-v9",
"firstLiveAt": "2023-11-16T01:04:38+00:00",
"createdAt": "2023-11-14T11:03:14+00:00",
"updatedAt": "2023-11-16T01:04:38+00:00",
"stock": {
"supplierId": 1,
"warehouseId": 9,
"quantity": 70,
"isSellableWithoutStock": false
},
"price": {
"currencyCode": "EUR",
"withTax": 150,
"withoutTax": 126,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 24,
"rate": 0.19
}
},
"appliedReductions": []
},
"customData": {
"subscriptionEligibility": false
}
},
"product": {
"id": 17381,
"isActive": true,
"isSoldOut": false,
"isNew": true,
"createdAt": "2023-11-14T10:00:30+00:00",
"updatedAt": "2023-11-14T10:17:49+00:00",
"indexedAt": "2023-11-23T10:09:32+00:00",
"firstLiveAt": "2023-11-16T01:04:38+00:00",
"masterKey": "default-merchant-fallback-test-m6",
"referenceKey": "default-merchant-fallback-test-p6",
"images": [],
"customData": {}
},
"itemGroup": null,
"promotionId": null,
"promotion": null
}
],
"packages": [
{
"carrierKey": "zelim-test",
"deliveryDate": {
"max": "2023-11-27",
"min": "2023-11-24"
},
"id": 1
},
{
"carrierKey": "zelim-test",
"deliveryDate": {
"max": "2023-11-27",
"min": "2023-11-24"
},
"id": 2
}
],
"cost": {
"currencyCode": "EUR",
"withTax": 10400,
"withoutTax": 8740,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 1660,
"rate": 0
}
},
"appliedReductions": []
}
"applicablePromotions": [
{
"promotion": {
"id": "6565fdd53740d2825e72e08f",
"name": "SAPIQA-B item 155 pId2031 vId17846 EUR G 44390",
"schedule": {
"from": "2023-11-28T11:00:00Z",
"to": "2023-12-09T11:00:00Z"
},
"isActive": true,
"effect": {
"type": "buy_x_get_y",
"additionalData": {
"eligibleItemsQuantity": 2,
"maxCount": 1,
"maxCountType": "per_eligible_items_quantity",
"variantIds": [
44390
]
}
},
"conditions": [
{
"level": "item",
"key": "price==3999",
"condition": "item.unitPrice.withTax==3999"
}
],
"customData": {
"corePanel": {
"viewType": "advanced"
}
},
"tiers": [
{
"id": 1,
"name": "Tier 1",
"MOV": 10000,
"effect": {
"additionalData": {
"type": "relative",
"value": 25
}
}
}
]
},
"itemId": "e215aa18dc849e9b53c7c90f59d455d5"
}
]
}
Get Basket items with Applicable Promotions by Promotion Code
Retrieve a list of all applicable promotions along with basket items by promotion code.
curl --location --request POST 'https://{{tenant-space}}.storefront.api.scayle.cloud/v1/basket/{{basketId}}/promotion-code?shopId={{shopId}}' \
--header 'X-Access-Token: {{ACCESSTOKEN}}'
--data '{
"promotionCode": "promocode123",
}'
Response
{
"key": "myshop_customer_1234",
"items": [
{
"key": "44f364e11b019eb381b86866331a9993",
"packageId": 2,
"quantity": 20,
"status": "available",
"displayData": {},
"availableQuantity": 70,
"customData": {},
"lowestPriorPrice": {
"withTax": null,
"relativeDifferenceToPrice": null
},
"price": {
"total": {
"currencyCode": "EUR",
"withTax": 2400,
"withoutTax": 2020,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 380,
"rate": 0
}
},
"appliedReductions": [
{
"category": "promotion",
"type": "relative",
"amount": {
"relative": 0.2,
"absoluteWithTax": 600,
"absoluteTax": 100,
"absoluteWithoutTax": 500
}
}
]
},
"unit": {
"currencyCode": "EUR",
"withTax": 120,
"withoutTax": 101,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 19,
"rate": 0
}
},
"appliedReductions": [
{
"category": "promotion",
"type": "relative",
"amount": {
"relative": 0.2,
"absoluteWithTax": 30,
"absoluteTax": 5,
"absoluteWithoutTax": 25
}
}
]
}
},
"variant": {
"id": 33378,
"referenceKey": "default-merchant-fallback-test-v9",
"firstLiveAt": "2023-11-16T01:04:38+00:00",
"createdAt": "2023-11-14T11:03:14+00:00",
"updatedAt": "2023-11-16T01:04:38+00:00",
"stock": {
"supplierId": 1,
"warehouseId": 9,
"quantity": 70,
"isSellableWithoutStock": false
},
"price": {
"currencyCode": "EUR",
"withTax": 150,
"withoutTax": 126,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 24,
"rate": 0.19
}
},
"appliedReductions": []
},
"customData": {
"subscriptionEligibility": false
}
},
"product": {
"id": 17381,
"isActive": true,
"isSoldOut": false,
"isNew": true,
"createdAt": "2023-11-14T10:00:30+00:00",
"updatedAt": "2023-11-14T10:17:49+00:00",
"indexedAt": "2023-11-23T10:09:32+00:00",
"firstLiveAt": "2023-11-16T01:04:38+00:00",
"masterKey": "default-merchant-fallback-test-m6",
"referenceKey": "default-merchant-fallback-test-p6",
"images": [],
"customData": {}
},
"itemGroup": null,
"promotionId": null,
"promotion": null
}
],
"packages": [
{
"carrierKey": "zelim-test",
"deliveryDate": {
"max": "2023-11-27",
"min": "2023-11-24"
},
"id": 1
},
{
"carrierKey": "zelim-test",
"deliveryDate": {
"max": "2023-11-27",
"min": "2023-11-24"
},
"id": 2
}
],
"cost": {
"currencyCode": "EUR",
"withTax": 10400,
"withoutTax": 8740,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 1660,
"rate": 0
}
},
"appliedReductions": []
}
"applicablePromotions": [
{
"promotion": {
"id": "6565fdd53740d2825e72e08f",
"name": "SAPIQA-B item 155 pId2031 vId17846 EUR G 44390",
"schedule": {
"from": "2023-11-28T11:00:00Z",
"to": "2023-12-09T11:00:00Z"
},
"isActive": true,
"effect": {
"type": "buy_x_get_y",
"additionalData": {
"eligibleItemsQuantity": 2,
"maxCount": 1,
"maxCountType": "per_eligible_items_quantity",
"variantIds": [
44390
]
}
},
"conditions": [
{
"level": "item",
"key": "price==3999",
"condition": "item.unitPrice.withTax==3999"
}
],
"customData": {
"corePanel": {
"viewType": "advanced"
}
},
"tiers": [
{
"id": 1,
"name": "Tier 1",
"MOV": 10000,
"effect": {
"additionalData": {
"type": "relative",
"value": 25
}
}
}
]
},
"itemId": "e215aa18dc849e9b53c7c90f59d455d5"
}
]
}
Change quantity
Sometimes our customers change their mind and change quantity. We can update basket items by passing the item key and the updated quantity.
Parameter | type | Required | Description |
---|---|---|---|
basketKey | string | true | Key of the basket. |
itemKey | string | true | Key of the basket item. |
quantity | integer | true | New quantity of the item. |
promotionId | string | false | ID of promotion to be updated to the basket item |
promotionCode | string | false | Code of promotion to be updated to the basket item |
with | object | false | Defines which optional fields should be included in the response. Contained as with inside the options object (second parameter). |
// Update a basket item and set quantity to 1
const { basket } = await client.basket.get("myshop_customer_1234");
console.log(`Quantity: ${basket.items[0].quantity}`);
// Quantity: 3
const item = basket.items[0];
const { basket: updatedBasket } = await client.basket.updateItem(
"myshop_customer_1234",
item.key,
1
);
console.log(`Quantity: ${updatedBasket.items[0].quantity}`);
// Quantity: 1
Response
{
"type": "success",
"basket": {
"key": "myshop_customer_1234",
"items": [
{
"key": "c4ca4238a0b923820dcc509a6f75849b",
"packageId": 1,
"quantity": 1,
"status": "available",
"displayData": {},
"availableQuantity": 31,
"deliveryForecast": {},
"customData": {},
"lowestPriorPrice": {
"withTax": null,
"relativeDifferenceToPrice": null
},
"price": {
"total": {
"currencyCode": "EUR",
"withTax": 3990,
"withoutTax": 3353,
"recommendedRetailPrice": null,
"tax": { "vat": { "amount": 637, "rate": 0 } },
"appliedReductions": []
},
"unit": {
"currencyCode": "EUR",
"withTax": 3990,
"withoutTax": 3353,
"recommendedRetailPrice": null,
"tax": { "vat": { "amount": 637, "rate": 0 } },
"appliedReductions": []
}
},
"variant": {
"id": 1,
"referenceKey": "THS0906008000001_S",
"firstLiveAt": "0001-01-01T00:00:00+00:00",
"createdAt": "2023-06-12T14:05:33+00:00",
"updatedAt": "2023-07-07T11:50:06+00:00",
"stock": {
"supplierId": 1,
"warehouseId": 1,
"quantity": 31,
"isSellableWithoutStock": false
},
"price": {
"currencyCode": "EUR",
"withTax": 3990,
"withoutTax": 3353,
"recommendedRetailPrice": null,
"tax": { "vat": { "amount": 637, "rate": 0.19 } },
"appliedReductions": []
},
"customData": {}
},
"product": {
"id": 1,
"isActive": true,
"isSoldOut": false,
"isNew": false,
"createdAt": "2023-06-12T14:05:33+00:00",
"updatedAt": "2023-06-12T14:05:34+00:00",
"indexedAt": "2023-07-11T20:13:33+00:00",
"firstLiveAt": "2023-06-12T14:05:33+00:00",
"masterKey": "THS090600",
"referenceKey": "THS0906008000001",
"images": [
{
"hash": "https://cdn.aboutstatic.com/file/cd81a5d37e4241686586812d9e179553?bg=F4F4F5&quality=75&trim=1&height=1067&width=800,https://cdn.aboutstatic.com/file/1c98f7fc408b9d2cca91abfbf5650df1?bg=F4F4F5&quality=75&height=1067&width=800, https://cdn.aboutstatic.com/f"
}
],
"customData": {}
},
"itemGroup": null
"promotionId": null
"promotion": null
}
],
"packages": [
{
"carrierKey": "DEFAULT",
"deliveryDate": { "max": "2023-07-14", "min": "2023-07-12" },
"id": 1
}
],
"cost": {
"currencyCode": "EUR",
"withTax": 3990,
"withoutTax": 3353,
"recommendedRetailPrice": null,
"tax": { "vat": { "amount": 637, "rate": 0 } },
"appliedReductions": []
}
}
}
Update Basket Item with promotionId
We can update promotionId to the basket item by passing the item key, like so:
// Update a basket item and set promotionId to "6522f4b2b857b289b920c65c"
const { basket } = await client.basket.get("myshop_customer_1236");
console.log(`PromotionId: ${basket.items[0].promotionId}`);
// PromotionId: null
const item = basket.items[0];
const { basket: updatedBasket } = await client.basket.updateItem(
"myshop_customer_1236",
item.key,
item.quantity,
{promotionId:"6522f4b2b857b289b920c65c"}
);
console.log(`PromotionId: ${updatedBasket.items[0].promotionId}`);
// PromotionId: "6522f4b2b857b289b920c65c"
Response
{
"key": "myshop_customer_1236",
"items": [
{
"key": "44f364e11b019eb381b86866331a9993",
"packageId": 2,
"quantity": 20,
"status": "available",
"displayData": {},
"availableQuantity": 70,
"customData": {},
"lowestPriorPrice": {
"withTax": null,
"relativeDifferenceToPrice": null
},
"price": {
"total": {
"currencyCode": "EUR",
"withTax": 2400,
"withoutTax": 2020,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 380,
"rate": 0
}
},
"appliedReductions": [
{
"category": "promotion",
"type": "relative",
"amount": {
"relative": 0.2,
"absoluteWithTax": 600,
"absoluteTax": 100,
"absoluteWithoutTax": 500
}
}
]
},
"unit": {
"currencyCode": "EUR",
"withTax": 120,
"withoutTax": 101,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 19,
"rate": 0
}
},
"appliedReductions": [
{
"category": "promotion",
"type": "relative",
"amount": {
"relative": 0.2,
"absoluteWithTax": 30,
"absoluteTax": 5,
"absoluteWithoutTax": 25
}
}
]
}
},
"variant": {
"id": 33378,
"referenceKey": "default-merchant-fallback-test-v9",
"firstLiveAt": "2023-11-16T01:04:38+00:00",
"createdAt": "2023-11-14T11:03:14+00:00",
"updatedAt": "2023-11-16T01:04:38+00:00",
"stock": {
"supplierId": 1,
"warehouseId": 9,
"quantity": 70,
"isSellableWithoutStock": false
},
"price": {
"currencyCode": "EUR",
"withTax": 150,
"withoutTax": 126,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 24,
"rate": 0.19
}
},
"appliedReductions": []
},
"customData": {
"subscriptionEligibility": false
}
},
"product": {
"id": 17381,
"isActive": true,
"isSoldOut": false,
"isNew": true,
"createdAt": "2023-11-14T10:00:30+00:00",
"updatedAt": "2023-11-14T10:17:49+00:00",
"indexedAt": "2023-11-23T10:09:32+00:00",
"firstLiveAt": "2023-11-16T01:04:38+00:00",
"masterKey": "default-merchant-fallback-test-m6",
"referenceKey": "default-merchant-fallback-test-p6",
"images": [],
"customData": {}
},
"itemGroup": null,
"promotionId": "6522f4b2b857b289b920c65c",
"promotion": {
"id": "6522f4b2b857b289b920c65c",
"name": "Automatic Discount",
"schedule": {
"from": "2023-09-30T09:00:00Z",
"to": "2023-12-30T18:00:00Z"
},
"isActive": true,
"effect": {
"type": "automatic_discount",
"additionalData": {
"type": "relative",
"value": 20
}
},
"conditions": [
{
"level": "global",
"key": "mov_100",
"condition": "payload.totals.withTax > 10000"
}
],
"customData": {
"corePanel": {
"viewType": "advanced"
},
"headerText": "Get 20% when your basket is over 100$"
},
"tiers": [
{
"id": 1,
"name": "Tier 1",
"MOV": 10000,
"effect": {
"additionalData": {
"type": "relative",
"value": 25
}
}
}
],
"isValid": true,
"failedConditions": []
}
},
{
"key": "b33e197c4fdad374692ca3d65509d771",
"packageId": 1,
"quantity": 10,
"status": "available",
"displayData": {},
"availableQuantity": 10,
"customData": {},
"lowestPriorPrice": {
"withTax": 480,
"relativeDifferenceToPrice": 0.66
},
"price": {
"total": {
"currencyCode": "EUR",
"withTax": 8000,
"withoutTax": 6720,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 1280,
"rate": 0
}
},
"appliedReductions": [
{
"category": "sale",
"type": "relative",
"amount": {
"relative": 0.2,
"absoluteWithTax": 2000
}
}
]
},
"unit": {
"currencyCode": "EUR",
"withTax": 800,
"withoutTax": 672,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 128,
"rate": 0
}
},
"appliedReductions": [
{
"category": "sale",
"type": "relative",
"amount": {
"relative": 0.2,
"absoluteWithTax": 200
}
}
]
}
},
"variant": {
"id": 32707,
"referenceKey": "TC32 BAPIQAZSAP varints1.referenceKey BAPIQA test w Mallory",
"firstLiveAt": "2023-07-17T14:01:22+00:00",
"createdAt": "2023-07-17T14:01:04+00:00",
"updatedAt": "2023-11-09T16:05:56+00:00",
"stock": {
"supplierId": 1,
"warehouseId": 4,
"quantity": 10,
"isSellableWithoutStock": false
},
"price": {
"currencyCode": "EUR",
"withTax": 800,
"withoutTax": 672,
"recommendedRetailPrice": 1000,
"tax": {
"vat": {
"amount": 128,
"rate": 0.19
}
},
"appliedReductions": [
{
"category": "sale",
"type": "relative",
"amount": {
"relative": 0.2,
"absoluteWithTax": 200
}
}
],
"reference": {
"withoutTax": 84,
"withTax": 100,
"size": 100,
"unit": "ml"
}
},
"customData": {
"subscriptionEligibility": false,
"deliveryEstimate": []
}
},
"product": {
"id": 16934,
"isActive": true,
"isSoldOut": false,
"isNew": false,
"createdAt": "2023-07-17T14:01:04+00:00",
"updatedAt": "2023-08-17T10:49:55+00:00",
"indexedAt": "2023-11-23T10:09:32+00:00",
"firstLiveAt": "2023-07-17T14:01:21+00:00",
"masterKey": "TC32 BAPIQAZSAP master.referenceKey BAPIQA test w Mallory",
"referenceKey": "TC32 BAPIQAZSAP referenceKey BAPIQA test w Mallory",
"images": [
{
"hash": "images/084dace7d7ff691e97982fa554113c29"
}
],
"customData": {
"subscriptionDiscountSubsequentPercentage": 10,
"wedwde": "Prepearation for ppk w 'promotionKey': null,",
"productCustomData": "productCustomData",
"subscriptionIntervals": "[\"1 month\", \"3 month\", \"6 month\", \"12 month\"]",
"subscriptionEligibility": false
}
},
"itemGroup": null,
"promotionId": null,
"promotion": null
}
],
"packages": [
{
"carrierKey": "zelim-test",
"deliveryDate": {
"max": "2023-11-27",
"min": "2023-11-24"
},
"id": 1
},
{
"carrierKey": "zelim-test",
"deliveryDate": {
"max": "2023-11-27",
"min": "2023-11-24"
},
"id": 2
}
],
"cost": {
"currencyCode": "EUR",
"withTax": 10400,
"withoutTax": 8740,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 1660,
"rate": 0
}
},
"appliedReductions": [
{
"category": "sale",
"type": "relative",
"amount": {
"relative": 0.15,
"absoluteWithTax": 2000
}
},
{
"category": "promotion",
"type": "relative",
"amount": {
"relative": 0.05,
"absoluteWithTax": 600,
"absoluteTax": 100,
"absoluteWithoutTax": 500
}
}
]
}
}
Update Basket Item with promotionCode
We can update the promotionCode of the basket item by passing the item key, like so:
curl --location -X PATCH 'https://{{tenant-space}}.storefront.api.scayle.cloud/v1/baskets/myshop_customer_1234/items/{{itemKey}}?shopId={{shopId}}' \
--header 'Content-Type: application/json' \
--data '{
"quantity": 1,
"promotionId": "6522f4b2b857b289b920c65c",
"promotionCode": "promocode123"
}'
Response
{
"key": "myshop_customer_1236",
"items": [
{
"key": "44f364e11b019eb381b86866331a9993",
"packageId": 2,
"quantity": 20,
"status": "available",
"displayData": {},
"availableQuantity": 70,
"customData": {},
"lowestPriorPrice": {
"withTax": null,
"relativeDifferenceToPrice": null
},
"price": {
"total": {
"currencyCode": "EUR",
"withTax": 2400,
"withoutTax": 2020,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 380,
"rate": 0
}
},
"appliedReductions": [
{
"category": "promotion",
"type": "relative",
"amount": {
"relative": 0.2,
"absoluteWithTax": 600,
"absoluteTax": 100,
"absoluteWithoutTax": 500
}
}
]
},
"unit": {
"currencyCode": "EUR",
"withTax": 120,
"withoutTax": 101,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 19,
"rate": 0
}
},
"appliedReductions": [
{
"category": "promotion",
"type": "relative",
"amount": {
"relative": 0.2,
"absoluteWithTax": 30,
"absoluteTax": 5,
"absoluteWithoutTax": 25
}
}
]
}
},
"variant": {
"id": 33378,
"referenceKey": "default-merchant-fallback-test-v9",
"firstLiveAt": "2023-11-16T01:04:38+00:00",
"createdAt": "2023-11-14T11:03:14+00:00",
"updatedAt": "2023-11-16T01:04:38+00:00",
"stock": {
"supplierId": 1,
"warehouseId": 9,
"quantity": 70,
"isSellableWithoutStock": false
},
"price": {
"currencyCode": "EUR",
"withTax": 150,
"withoutTax": 126,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 24,
"rate": 0.19
}
},
"appliedReductions": []
},
"customData": {
"subscriptionEligibility": false
}
},
"product": {
"id": 17381,
"isActive": true,
"isSoldOut": false,
"isNew": true,
"createdAt": "2023-11-14T10:00:30+00:00",
"updatedAt": "2023-11-14T10:17:49+00:00",
"indexedAt": "2023-11-23T10:09:32+00:00",
"firstLiveAt": "2023-11-16T01:04:38+00:00",
"masterKey": "default-merchant-fallback-test-m6",
"referenceKey": "default-merchant-fallback-test-p6",
"images": [],
"customData": {}
},
"itemGroup": null,
"promotionId": "6522f4b2b857b289b920c65c",
"promotion": {
"id": "6522f4b2b857b289b920c65c",
"name": "Automatic Discount",
"schedule": {
"from": "2023-09-30T09:00:00Z",
"to": "2023-12-30T18:00:00Z"
},
"isActive": true,
"effect": {
"type": "automatic_discount",
"additionalData": {
"type": "relative",
"value": 20
}
},
"conditions": [
{
"level": "global",
"key": "mov_100",
"condition": "payload.totals.withTax > 10000"
}
],
"customData": {
"corePanel": {
"viewType": "advanced"
},
"headerText": "Get 20% when your basket is over 100$"
},
"tiers": [
{
"id": 1,
"name": "Tier 1",
"MOV": 10000,
"effect": {
"additionalData": {
"type": "relative",
"value": 25
}
}
}
],
"isValid": true,
"failedConditions": []
}
},
{
"key": "b33e197c4fdad374692ca3d65509d771",
"packageId": 1,
"quantity": 10,
"status": "available",
"displayData": {},
"availableQuantity": 10,
"customData": {},
"lowestPriorPrice": {
"withTax": 480,
"relativeDifferenceToPrice": 0.66
},
"price": {
"total": {
"currencyCode": "EUR",
"withTax": 8000,
"withoutTax": 6720,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 1280,
"rate": 0
}
},
"appliedReductions": [
{
"category": "sale",
"type": "relative",
"amount": {
"relative": 0.2,
"absoluteWithTax": 2000
}
}
]
},
"unit": {
"currencyCode": "EUR",
"withTax": 800,
"withoutTax": 672,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 128,
"rate": 0
}
},
"appliedReductions": [
{
"category": "sale",
"type": "relative",
"amount": {
"relative": 0.2,
"absoluteWithTax": 200
}
}
]
}
},
"variant": {
"id": 32707,
"referenceKey": "TC32 BAPIQAZSAP varints1.referenceKey BAPIQA test w Mallory",
"firstLiveAt": "2023-07-17T14:01:22+00:00",
"createdAt": "2023-07-17T14:01:04+00:00",
"updatedAt": "2023-11-09T16:05:56+00:00",
"stock": {
"supplierId": 1,
"warehouseId": 4,
"quantity": 10,
"isSellableWithoutStock": false
},
"price": {
"currencyCode": "EUR",
"withTax": 800,
"withoutTax": 672,
"recommendedRetailPrice": 1000,
"tax": {
"vat": {
"amount": 128,
"rate": 0.19
}
},
"appliedReductions": [
{
"category": "sale",
"type": "relative",
"amount": {
"relative": 0.2,
"absoluteWithTax": 200
}
}
],
"reference": {
"withoutTax": 84,
"withTax": 100,
"size": 100,
"unit": "ml"
}
},
"customData": {
"subscriptionEligibility": false,
"deliveryEstimate": []
}
},
"product": {
"id": 16934,
"isActive": true,
"isSoldOut": false,
"isNew": false,
"createdAt": "2023-07-17T14:01:04+00:00",
"updatedAt": "2023-08-17T10:49:55+00:00",
"indexedAt": "2023-11-23T10:09:32+00:00",
"firstLiveAt": "2023-07-17T14:01:21+00:00",
"masterKey": "TC32 BAPIQAZSAP master.referenceKey BAPIQA test w Mallory",
"referenceKey": "TC32 BAPIQAZSAP referenceKey BAPIQA test w Mallory",
"images": [
{
"hash": "images/084dace7d7ff691e97982fa554113c29"
}
],
"customData": {
"subscriptionDiscountSubsequentPercentage": 10,
"wedwde": "Prepearation for ppk w 'promotionKey': null,",
"productCustomData": "productCustomData",
"subscriptionIntervals": "[\"1 month\", \"3 month\", \"6 month\", \"12 month\"]",
"subscriptionEligibility": false
}
},
"itemGroup": null,
"promotionId": null,
"promotion": null
}
],
"packages": [
{
"carrierKey": "zelim-test",
"deliveryDate": {
"max": "2023-11-27",
"min": "2023-11-24"
},
"id": 1
},
{
"carrierKey": "zelim-test",
"deliveryDate": {
"max": "2023-11-27",
"min": "2023-11-24"
},
"id": 2
}
],
"cost": {
"currencyCode": "EUR",
"withTax": 10400,
"withoutTax": 8740,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 1660,
"rate": 0
}
},
"appliedReductions": [
{
"category": "sale",
"type": "relative",
"amount": {
"relative": 0.15,
"absoluteWithTax": 2000
}
},
{
"category": "promotion",
"type": "relative",
"amount": {
"relative": 0.05,
"absoluteWithTax": 600,
"absoluteTax": 100,
"absoluteWithoutTax": 500
}
}
]
}
}
Update Basket Item with PPK
We can update the pricePromotionKey
(PPK) for the basket item by passing the item key, like so:
// Update a basket item and set pricePromotionKey to "sapiqappk"
const { basket } = await client.basket.get("myshop_customer_1236");
console.log(`PricePromotionKey: ${basket.customData.pricePromotionKey}`);
// PricePromotionKey: null
const item = basket.items[0];
const { basket: updatedBasket } = await client.basket.updateItem(
"myshop_customer_1236",
item.key,
item.quantity,
{
pricePromotionKey: "sapiqappk",
},
);
console.log(`PricePromotionKey: ${updatedBasket.customData.pricePromotionKey}`);
// PricePromotionKey: "sapiqappk"
Response
{
"key": "myshop_customer_1236",
"items": [
{
"key": "37105a2d2576d072b38f426e7b443a2c",
"packageId": 1,
"quantity": 1,
"status": "available",
"displayData": {},
"availableQuantity": 9702,
"customData": {
"pricePromotionKey": "sapiqappk"
},
"lowestPriorPrice": {
"withTax": 77795,
"relativeDifferenceToPrice": -0.01
},
"price": {
"total": {
"currencyCode": "EUR",
"withTax": 77700,
"withoutTax": 65294,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 12406,
"rate": 0
}
},
"appliedReductions": [
{
"category": "sale",
"type": "relative",
"amount": {
"relative": 0.12,
"absoluteWithTax": 11100
}
}
]
},
"unit": {
"currencyCode": "EUR",
"withTax": 77700,
"withoutTax": 65294,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 12406,
"rate": 0
}
},
"appliedReductions": [
{
"category": "sale",
"type": "relative",
"amount": {
"relative": 0.12,
"absoluteWithTax": 11100
}
}
]
}
},
"variant": {
"id": 338316,
"referenceKey": "varRKDF0",
"firstLiveAt": "2024-10-14T13:02:49+00:00",
"createdAt": "2024-10-14T13:02:20+00:00",
"updatedAt": "2024-10-28T09:53:49+00:00",
"stock": {
"supplierId": 1,
"warehouseId": 1,
"quantity": 9702,
"isSellableWithoutStock": false,
"expectedAvailabilityAt": null
},
"price": {
"currencyCode": "EUR",
"withTax": 99900,
"withoutTax": 83950,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 15950,
"rate": 0.19
}
},
"appliedReductions": []
},
"customData": {}
},
"product": {
"id": 208143,
"isActive": true,
"isSoldOut": false,
"isNew": false,
"createdAt": "2024-10-14T13:02:20+00:00",
"updatedAt": "2024-12-24T11:20:04+00:00",
"indexedAt": "2025-01-10T14:35:50+00:00",
"firstLiveAt": "2024-10-14T13:02:49+00:00",
"masterKey": "productDisableFuzziness0",
"referenceKey": "productRefKDisableFuzziness0",
"images": [
{
"hash": "https://www.aboutyou.de"
}
],
"customData": {}
},
"itemGroup": null,
"promotionId": null,
"promotionCode": null,
"promotion": null
}
],
"packages": [
{
"carrierKey": "ZASIL_CZ",
"deliveryDate": {
"max": "2025-01-14",
"min": "2025-01-13"
},
"id": 1
}
],
"cost": {
"currencyCode": "EUR",
"withTax": 77700,
"withoutTax": 65294,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 12406,
"rate": 0
}
},
"appliedReductions": [
{
"category": "sale",
"type": "relative",
"amount": {
"relative": 0.12,
"absoluteWithTax": 11100
}
}
]
},
"basketOutdated": false
}
Update basket item with combined promotionId and PPK
We can update the promotionId
and pricePromotionKey
(PPK) for the basket item by passing the item key, like so:
// Update a basket item and set PricePromotionKey and PromotionId
const { basket } = await client.basket.get("myshop_customer_1236");
console.log(`PromotionId: ${basket.items[0].promotionId}`);
console.log(`PricePromotionKey: ${basket.customData.pricePromotionKey}`);
// PromotionId: null
// PricePromotionKey: null
const item = basket.items[0];
const { basket: updatedBasket } = await client.basket.updateItem(
"myshop_customer_1236",
item.key,
item.quantity,
{
promotionId:"672b8324cc574c81c1a24938",
pricePromotionKey: "sapiqappk",
},
);
console.log(`PromotionId: ${updatedBasket.items[0].promotionId}`);
console.log(`PricePromotionKey: ${updatedBasket.customData.pricePromotionKey}`);
// PromotionId: 672b8324cc574c81c1a24938
// PricePromotionKey: "sapiqappk"
Response
{
"key": "myshop_customer_1236",
"items": [
{
"key": "37105a2d2576d072b38f426e7b443a2c",
"packageId": 1,
"quantity": 1,
"status": "available",
"displayData": {},
"availableQuantity": 9709,
"customData": {
"pricePromotionKey": "sapiqappk"
},
"lowestPriorPrice": {
"withTax": 77795,
"relativeDifferenceToPrice": -0.01
},
"price": {
"total": {
"currencyCode": "EUR",
"withTax": 64491,
"withoutTax": 54194,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 10297,
"rate": 0
}
},
"appliedReductions": [
{
"category": "sale",
"type": "relative",
"amount": {
"relative": 0.12,
"absoluteWithTax": 11100
}
},
{
"category": "promotion",
"type": "relative",
"amount": {
"relative": 0.17,
"absoluteWithTax": 13209,
"absoluteTax": 2109,
"absoluteWithoutTax": 11100
}
}
]
},
"unit": {
"currencyCode": "EUR",
"withTax": 64491,
"withoutTax": 54194,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 10297,
"rate": 0
}
},
"appliedReductions": [
{
"category": "sale",
"type": "relative",
"amount": {
"relative": 0.12,
"absoluteWithTax": 11100
}
},
{
"category": "promotion",
"type": "relative",
"amount": {
"relative": 0.17,
"absoluteWithTax": 13209,
"absoluteTax": 2109,
"absoluteWithoutTax": 11100
}
}
]
}
},
"variant": {
"id": 338316,
"referenceKey": "varRKDF0",
"firstLiveAt": "2024-10-14T13:02:49+00:00",
"createdAt": "2024-10-14T13:02:20+00:00",
"updatedAt": "2024-10-28T09:53:49+00:00",
"stock": {
"supplierId": 1,
"warehouseId": 1,
"quantity": 9709,
"isSellableWithoutStock": false,
"expectedAvailabilityAt": null
},
"price": {
"currencyCode": "EUR",
"withTax": 99900,
"withoutTax": 83950,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 15950,
"rate": 0.19
}
},
"appliedReductions": []
},
"customData": {}
},
"product": {
"id": 208143,
"isActive": true,
"isSoldOut": false,
"isNew": false,
"createdAt": "2024-10-14T13:02:20+00:00",
"updatedAt": "2024-12-24T11:20:04+00:00",
"indexedAt": "2025-01-09T11:26:37+00:00",
"firstLiveAt": "2024-10-14T13:02:49+00:00",
"masterKey": "productDisableFuzziness0",
"referenceKey": "productRefKDisableFuzziness0",
"images": [
{
"hash": "https://www.aboutyou.de"
}
],
"customData": {}
},
"itemGroup": null,
"promotionId": "672b8324cc574c81c1a24938",
"promotionCode": null,
"promotion": {
"id": "672b8324cc574c81c1a24938",
"name": "PPK and AD percentage",
"schedule": {
"from": "2024-11-05T23:00:00Z",
"to": "2026-11-13T23:00:00Z"
},
"isActive": true,
"effect": {
"type": "automatic_discount",
"additionalData": {
"type": "relative",
"value": 17
}
},
"conditions": [
{
"level": "global",
"key": "panels_automatic-discount_any_products_condition_e5b66afa5eacabdb6bb855c6a9344db49cc372b4",
"condition": "size(payload.items) >= 1"
},
{
"level": "global",
"key": "panels_automatic-discount_minimum_order_amount_50000",
"condition": "payload.totals.withTax >= 50000"
},
{
"level": "item",
"key": "panels_automatic-discount_any_products_condition_5ffe533b830f08a0326348a9160afafc8ada44db",
"condition": "true"
}
],
"customData": {
"corePanel": {
"viewType": "automatic-discount"
}
},
"priority": 1,
"tiers": [],
"isValid": true,
"failedConditions": []
}
}
],
"packages":
[
{
"carrierKey": "ZASIL_CZ",
"deliveryDate": {
"max": "2025-01-13",
"min": "2025-01-10"
},
"id": 1
}
],
"cost":
{
"currencyCode": "EUR",
"withTax": 64491,
"withoutTax": 54194,
"recommendedRetailPrice": null,
"tax": {
"vat": {
"amount": 10297,
"rate": 0
}
},
"appliedReductions":
[
{
"category": "sale",
"type": "relative",
"amount": {
"relative": 0.12,
"absoluteWithTax": 11100
}
},
{
"category": "promotion",
"type": "relative",
"amount": {
"relative": 0.17,
"absoluteWithTax": 13209,
"absoluteTax": 2109,
"absoluteWithoutTax": 11100
}
}
]
},
"basketOutdated": false
}
Delete basket item
To delete an item from the basket we simply need to pass the item key.
currently for deleteItem()
in NodeJS SDK the basket object is not nested under the key basket
but included directly. This will be fixed in the next upcoming version
Parameter | Type | Required | Description |
---|---|---|---|
basketKey | string | true | Unique identifier of the basket. |
with | BasketWith | false | Defines which optional fields should be included in the response. Contained as with inside the options object (second parameter). |
// Get a basket item and delete it
const { basket } = await client.basket.get("myshop_customer_1234");
console.log(`Items count: ${basket.items.length}`);
// Items count: 1
const item = basket.items[0];
const response = await client.basket.deleteItem(
"myshop_customer_1234",
item.key
);
console.log(`Items count: ${response.items.length}`); // Note that items are directly included in response
// Items count: 0
Response
{
"key": "myshop_customer_1234",
"items": [],
"packages": [],
"cost": {
"currencyCode": "EUR",
"withTax": 0,
"withoutTax": 0,
"recommendedRetailPrice": null,
"tax": { "vat": { "amount": 0, "rate": 0 } },
"appliedReductions": []
}
}