Transfer an existing basket.
Operation ID: transferBasketTransfer the previous shopper's basket to the current shopper by updating the basket's owner. No other values change. You must obtain the shopper authorization token via SLAS and you must provide the ‘guest usid‘ in both the ‘/oauth2/login‘ and ‘/oauth2/token‘ calls while fetching the registered user JWT token.
This endpoint provides different methods for handling the scenario in which both a previous guest shopper and the current registered shopper have an active basket attached, and utilizes the merge parameter as follows:
true(recommended): Triggers a merge hook for graceful handling and prevents 409 status returns. For more information, refer to themergeparameter documentation.false: Either overrides the basket of the current registered shopper or returns a 409 response, and allows you to choose between the options explained below.
If you call the endpoint with merge=false and the current shopper has an active basket, you have two options using the overrideExisting parameter. Setting it to true deletes the registered user's basket, while setting it to false returns a BasketTransferException (HTTP status 409), after which you can choose how to proceed:
- Keep the current shopper's active basket.
- Merge the previous and current shoppers' baskets by calling the
baskets/actions/mergeendpoint. - Force the transfer by calling the
baskets/actions/transferendpoint again, with the parameteroverrideExisting=true. Forcing the transfer deletes the current shopper's active basket.
A successful response provides the transferred (and merged) current basket. However, if neither the previous nor current shopper had an active basket, a 204 (No Content) response is returned.
curl "https://{shortCode}.api.commercecloud.salesforce.com/checkout/shopper-baskets/v2/organizations/{organizationId}/baskets/actions/transfer?siteId=RefArch" \
-X POSTAn identifier for the organization the request is being made by
f_ecom_zzxy_prd
The identifier of the site that a request is being made in the context of. Attributes might have site specific values, and some objects may only be assigned to specific sites
RefArch
If the current shopper has no active basket, this parameter is ignored. If the current shopper has an active basket, this parameter controls the behavior:
false(default): Return a BasketTransferException (HTTP status 409). The basket owner doesn't change.true: Force the transfer by deleting the current shopper's active basket and making the current shopper the owner of the previous shopper's basket. Returns the transferred basket (HTTP status 200).
false
This parameter controls the behavior:
- false (default): Transfers the basket or returns a 409 response with the appropriate message (taking overrideExisting in consideration).
- true: (recommended): Executes the dw.order.mergeBasket hook if at least one basket exists.
The hook dw.order.mergeBasket default implementation merges a source basket into the current basket. This behavior can be customized, as shown in this sample implementation.
There are four possible use cases:
a) Guest basket and registered basket exist The guest basket becomes the current basket for the registered shopper by updating the basket's owner (no personal data is removed). The hook dw.order.mergeBasket is called with the source basket (former registered shopper basket) and the transferred current basket (former guest basket).
b) Guest basket exists but no registered basket exists The guest basket becomes the current basket for the registered shopper by updating the basket's owner (no personal data is removed). The hook dw.order.mergeBasket is called without the source basket (null passed to the hook) and the transferred current basket (former guest basket).
c) No guest basket exists but a registered basket exists The registered basket is retained. The hook dw.order.mergeBasket is called with the retained current basket but without the source basket (null passed to the hook).
d) Neither basket exists The hook dw.order.mergeBasket is not called.
The API returns the current basket (after executing dw.order.mergeBasket).
false
A descriptor for a geographical region by both a language and country code. By combining these two, regional differences in a language can be addressed, such as with the request header parameter Accept-Language following RFC 2616 & RFC 1766. This can also just refer to a language code, also RFC 2616/1766 compliant, as a default if there is no specific match for a country. Finally, can also be used to define default behavior if there is no locale specified.
en-US
The current basket.
{
"adjustedMerchandizeTotalTax": 30,
"adjustedShippingTotalTax": 0.8,
"agentBasket": false,
"basketId": "a10ff320829cb0eef93ca5310a",
"billingAddress": {
"address1": "104 Presidential Way",
"city": "Woburn",
"countryCode": "US",
"firstName": "Stephanie",
"fullName": "Stephanie Miller",
"id": "bfea663fd3de75d5be3ec02702",
"lastName": "Miller",
"postalCode": "01801",
"stateCode": "MA"
},
"channelType": "storefront",
"couponItems": [
{
"code": "5ties",
"couponItemId": "cc6ef43f207bf64099288aec36",
"statusCode": "no_applicable_promotion",
"valid": true
}
],
"creationDate": "2019-10-17T08:29:55.340Z",
"currency": "USD",
"customerInfo": {
"customerId": "beQeANXJNsd0xcINsB6cSrobQa",
"email": "shopper@salesforce-test.com"
},
"lastModified": "2019-10-17T08:29:55.698Z",
"merchandizeTotalTax": 30,
"orderTotal": 646.76,
"paymentInstruments": [
{
"amount": 0,
"paymentCard": {
"cardType": "Visa",
"creditCardExpired": false
},
"paymentInstrumentId": "b7679bea661819b2de78b9de7d",
"paymentMethodId": "CREDIT_CARD"
}
],
"productItems": [
{
"adjustedTax": 30,
"basePrice": 199.99,
"bonusProductLineItem": false,
"gift": false,
"itemId": "3d4e28425ce0b3a65b0ac4e163",
"itemText": "Green Umbrella - Sustained Edition",
"optionItems": [
{
"adjustedTax": 0,
"basePrice": 0,
"bonusProductLineItem": false,
"gift": false,
"itemId": "ff9452ed11fcf5c80f9143a8f1",
"itemText": "We will plant a tree for your order.",
"optionId": "plantATree",
"optionValueId": "000",
"price": 0,
"priceAfterItemDiscount": 0,
"priceAfterOrderDiscount": 0,
"productId": "000",
"productName": "Plant a tree.",
"quantity": 3,
"shipmentId": "me",
"tax": 0,
"taxBasis": 0,
"taxClassId": "standard",
"taxRate": 0.05
}
],
"price": 599.97,
"priceAfterItemDiscount": 599.97,
"priceAfterOrderDiscount": 599.97,
"productId": "green-umbrella",
"productName": "Green Umbrella - Sustained Edition",
"quantity": 3,
"shipmentId": "me",
"tax": 30,
"taxBasis": 599.97,
"taxClassId": "standard",
"taxRate": 0.05
}
],
"productSubTotal": 599.97,
"productTotal": 599.97,
"shipments": [
{
"adjustedMerchandizeTotalTax": 30,
"adjustedShippingTotalTax": 0.8,
"gift": false,
"merchandizeTotalTax": 30,
"productSubTotal": 599.97,
"productTotal": 599.97,
"shipmentId": "me",
"shipmentTotal": 646.76,
"shippingAddress": {
"address1": "4162 Turkey Pen Road",
"city": "New York",
"countryCode": "US",
"firstName": "Agustin",
"fullName": "Agustin Estes",
"id": "4432af77112f7c2433248a48e8",
"lastName": "Estes",
"postalCode": "10016",
"stateCode": "NY"
},
"shippingMethod": {
"description": "Order received within 7-10 business days",
"id": "001",
"name": "Ground",
"price": 15.99
},
"shippingStatus": "not_shipped",
"shippingTotal": 15.99,
"shippingTotalTax": 0.8,
"taxTotal": 30.8
}
],
"shippingItems": [
{
"adjustedTax": 0.8,
"basePrice": 15.99,
"itemId": "d5ed0e58b8f8b5efe8d617a630",
"itemText": "Shipping",
"price": 15.99,
"priceAfterItemDiscount": 15.99,
"shipmentId": "me",
"tax": 0.8,
"taxBasis": 15.99,
"taxClassId": "standard",
"taxRate": 0.05
}
],
"shippingTotal": 15.99,
"shippingTotalTax": 0.8,
"taxation": "net",
"taxTotal": 30.8
}
The total tax on products in the shipment, including item-level price adjustments but not including service charges such as shipping. If the Discount Taxation preference is set to Tax Products and Shipping Only Based on Adjusted Price, this amount also includes prorated order-level price adjustments. It is read only.
4.95
The total tax on shipping charges in the shipment, including shipping price adjustments. It is read only.
0.3
Is the basket created by an agent? It is read only.
true
The unique identifier for the basket. It is read only.
e78aa5646a8efebdd9cdd38be7
The billing address.
The bonus discount line items.
The sales channel. It is read only.
- storefront
- callcenter
- marketplace
- dss
- store
- facebookads
- subscriptions
- onlinereservation
- customerservicecenter
- instagramcommerce
- tiktok
- snapchat
- youtube
storefront
The coupon items.
[{
"code": "10_percent_off"
}]
The timestamp when the basket was created. It is read only.
2015-05-19T15:23:18.000Z
A three letter uppercase currency code conforming to the ISO 4217 standard, or the string N/A indicating that a currency is not applicable.
USD
The customer information, if the customer is logged in.
The gift certificate line items.
[{
"amount": 1,
"recipientEmail": "miller@salesforce-test.com",
"shipmentId": "me"
}]
Tax values that are grouped and summed based on the tax rate. The tax totals of the line items with the same tax rate are grouped together and summed up. This does not affect the calculation in any way. It is read only.
The expiration datetime of the inventory reservation. It is read only.
2015-05-19T15:30:18.000Z
The timestamp when the basket was last modified. It is read only.
2015-05-19T15:25:18.000Z
The total products tax in the purchase currency. Merchandise total price represents the sum of the product prices before services (such as shipping) or adjustments from promotions have been added. It is read only.
4.95
The order-level price adjustments.
[{
"appliedDiscount": {
"amount": 15,
"type": "amount"
},
"itemText": "AgentOrderAdjustment",
"reasonCode": "override manual promo"
}]
The total price, including products, shipping and tax. It is read only.
110.24
The payment instruments list.
[{
"amount": 0,
"paymentCard": {
"holder": "Miller",
"cardType": "Visa"
},
"paymentMethodId": "CREDIT_CARD"
}]
The product items.
[{
"quantity": 1
}]
The total price of all products including item-level adjustments, but not including order-level adjustments or shipping charges. If the taxation policy is net, it doesn't include tax. If the taxation policy is gross, it includes tax. It is read only.
99
The total price of all products including adjustments, but not including shipping charges. If the taxation policy is net, it doesn't include tax. If the taxation policy is gross, it includes tax. It is read only.
88
The shipments.
[{
"shipmentId": "me2",
"shippingMethod": {
"id": "001"
},
"shippingAddress": {
"firstName": "Stephanie",
"lastName": "Miller",
"address1": "385 Prospect Valley Road",
"city": "Woburn",
"postalCode": "01801",
"stateCode": "MA",
"countryCode": "US"
}
}]
The shipping items.
The total price of all shipping charges, including shipping adjustments. If the taxation policy is net, it doesn't include tax. If the taxation policy is gross, it includes tax. It is read only.
5.99
The total tax on all shipping charges, not including shipping adjustments. It is read only.
0.3
The source code assigned to the basket. It is read only.
OUTDOOR1
The total tax amount. It is read only.
5.25
The taxation policy (gross or net). It is read only.
- gross
- net
net
If the tax is rounded at the group level, this is set to true. If the tax is rounded at the item or unit level, it is set to false.
true
If the created basket is a temporary basket, this is set to true. Otherwise, it is set to false.
true
This type supports additional properties passed along with the defined properties of this API.
To indicate that the properties were defined and expected to be handled as additional properties, they are expected to be prefixed with a c_.
The type will reject any property that does not fit this pattern, only allowing additional properties beginning with the known prefix.