Cross-sell

Last updated

Overview#

Cross-sell is an effective marketing tactic used by many stores to increase sales and revenues. It is a type of sales technique that encourages customers to purchase additional items when making a purchase. This feature allows customers to add products the order in one click, after they have already completed their checkout.

What is required to enable Cross-sell?#

Currently, Cross-sell feature available in CheckoutAPI and ShopAPI when using Klarna Checkout v3. Read how to enable Cross-sell feature for Klarna Checkout v3 plugin.

How does Cross-sell feature work?#

Cross-sell feature allows to add additional products to the order in one click, after checkout is completed and without filling shipping address and payment details again.

//a.storyblok.com/f/233206/85465a08b5/cross-sell-flow.png

  1. Store customer finished checkout and was redirected to thank you page by payment provider
  2. Your website calls PUT /payment-result response to the call contains object crossSell which provides information whether payment provider supports cross-sell:
    1 2 3 4 5 6 7 8 { // ... "crossSell": { "isAllowed": true, // Is post purchase cross-selling allowed "timeLimit": 3 // Cross-sell time limit in minutes } // ... }
  3. If the order supports cross-sell you can offer the customer to add additional products to the order.
  4. For adding cross-sell products to the order serve dedicated API endpoints in Shop API and Checkout API: POST orders/{order}/items/{item}
  5. When cross-sell time out is over Centra sends Order Confirmation email to customer

Which products can be added to order?#

For cross-sell products work the same rules as for the products that can be added to basket. The only exception - flexible bundles are not available for cross-selling. When a product already exists in the order and is also added as a post-purchase cross-sell product, the newly added cross-sell product will appear as a separate order line.

Getting products information through APIs#

Getting cross-sell products information is the same for both Checkout API and Shop API.

The product information should be identical to a standard products call. It includes all the pricing information like:

  • price
  • priceAsNumber
  • priceWithoutTax
  • priceWithoutTaxAsNumber
  • priceBeforeDiscount
  • priceBeforeDiscountAsNumber

You can get the upsold products information by calling following endpoint:

POST <api-url>/orders/<order-number>/items

ie. POST /checkout-api/orders/69/items

with body specifying which products should the API return:

1 2 3 { "products": [1, 2, 3, 4, 5] }

You must specify which product data to return.

Success

If all the products are found then the response will be:

1 2 3 4 5 6 7 8 9 10 11 12 13 { "token": "...", "products": [ { "product": "1", "name": "Test Product", "uri": "test-product", "sku": "123456", ... }, ... ] }

Partial success

If products will be fetched partially, then the response will be:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 { "token": "...", "successfullyFetched": [ 1, 2, 5 ], "failedToFetch": [ 3, 4 ], "products": [ { "product": "1", "name": "Test Product", "uri": "test-product", "sku": "123456", ... }, ... ] }

Failure

If no products can be found an error will be returned:

1 2 3 4 5 6 { "token": "...", "errors": { "products": "products not found" } }

Full response example

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 { "token": "...", "products": [ { "product": "1", "name": "Test Product", "uri": "test-product", "sku": "123456", "productSku": "123", "brand": "1", "brandName": "Brand", "brandUri": "brand", "collection": "1", "collectionName": "Collection", "collectionUri": "collection", "variantName": "Red", "countryOrigin": "", "excerpt": "", "excerptHtml": "", "description": "", "descriptionHtml": "", "metaTitle": "", "metaDescription": "", "metaKeywords": "", "stockUnit": "", "category": "1", "centraProduct": "1", "centraVariant": "1445", "itemQuantityMinimum": 1, "itemQuantityMultipleOf": 1, "price": "100.00 SEK", "priceAsNumber": 100, "priceWithoutTax": "80.00 SEK", "priceWithoutTaxAsNumber": 80, "priceBeforeDiscount": "100.00 SEK", "priceBeforeDiscountAsNumber": 100, "discountPercent": 0, "showAsOnSale": false, "showAsNew": false, "itemTable": { "unit": "", "original": { "x": [ "" ], "y": [] }, "x": [ "" ], "y": [], "dividerSymbol": "x", "desc": "One Size" }, "items": [ { "sizeId": "1", "item": "1-1", "ean": "ABCDEFGHIJKL", "itemTableY": 0, "itemTableX": 0, "name": "", "sku": "123456789" } ], "categoryName": [ "Shop" ], "categoryUri": "shop", "categories": [ { "pathIds": [], "uri": "shop", "sortOrder": 1000001, "name": [ "Shop" ], "category": "1" } ], "media": { "standard": [ "https://example.com/client/dynamic/images/1_9adfeff6f2-red.jpg", "https://example.com/client/dynamic/images/1_3a541eaec0-no-connect.jpg" ] }, "mediaObjects": [ { "media": 1, "sources": { "standard": [ { "url": "https://example.com/client/dynamic/images/1_9adfeff6f2-red.jpg" } ] }, "attributes": { "test_media_attribute_test": "test attribute" } }, { "media": 2, "sources": { "standard": [ { "url": "https://example.com/client/dynamic/images/1_3a541eaec0-no-connect.jpg" } ] }, "attributes": [] } ], "subscriptionPlans": [ { "intervalType": "month", "discountPercent": 0, "subscriptionPlan": 1, "name": "1 month subscription", "shippingType": "DYNAMIC", "id": "1", "intervalValue": 1, "status": "ACTIVE" } ], "modifiedAt": "2023-02-23 12:38:42", "createdAt": "2020-02-01 12:00:00", "campaigns": [ { "pricelists": [ 23 ], "markets": [ 1 ], "showAsNew": false, "flags": 1, "percent": 23400.5, "startDate": "2018-12-17T12:00:00+0100", "stopDate": "2024-02-09T15:54:35+0100", "showAsOnSale": false }, { "pricelists": [ 19 ], "markets": [ 3 ], "showAsNew": false, "flags": 0, "percent": 50, "startDate": "2019-01-04T13:00:00+0100", "stopDate": "2023-03-09T15:54:35+0100", "showAsOnSale": true } ], "measurementChart": [], "some_variation_attribute_text": "red variation value", "relation": "variant", "relatedProducts": [ { "product": "10", "media": { "standard": [ "https://example.com/client/dynamic/images/1_3a541eaec0-no-connect.jpg" ] }, "mediaObjects": [ { "media": 2, "sources": { "standard": [ { "url": "https://example.com/client/dynamic/images/1_3a541eaec0-no-connect.jpg" } ] }, "attributes": [] } ], "relation": "variant" } ] } ] }

Centra AMS#

Order with cross-sell products

Order lines that were added to Order through cross-sell are displayed in section “Order products“ cross-sell-product-vew.png

Order history section contains information about cross-sell transactions. Previous auth transactions are “deprecated“ by adding suffix “-old“. Centra creates new auth transaction.

//a.storyblok.com/f/233206/1bf630d8d5/ams-cross-sell-order-payment-history.png

Order History section contains data about upsold products.

//a.storyblok.com/f/233206/bdc7513cae/ams-cross-sell-order-history.png

Order with failed cross-sell transaction

In case when Cross-sell transaction failed, Centra:

  • reverts Order to the state before adding new Line Item
  • logs failed transaction
  • logs data to Order history
  • Order Receipt email is sent after cross-sell time out limit is over

The previous successful transaction remains active and can be captured as usual.

//a.storyblok.com/f/233206/5af0609eff/ams-order-with-failed-cross-sell-transaction.png

//a.storyblok.com/f/233206/1fb9a8ed65/ams-order-history-with-failed-cross-sell-transaction.png

Cross-sell feature using Klarna Checkout plugin#

After a successful checkout web-shop displays a list of products that the customer can add to the created order.

Increasing the order amount is not allowed for all payment methods, see below for details on when it is allowed. Any update to the order amount will override and replace the original order amount as well as any possible order lines you might have sent with the order.

Important note: Sometimes the increase might be rejected as we are not allowed to grant a customer an extended order amount. In these cases, the customer should be asked to place a new order in your shop for the new items. Be aware that increasing the order amount will trigger a second risk assessment on the customer, sometimes even a credit lookup.

//a.storyblok.com/f/233206/f92366df91/klarna-methods-that-support-cross-sell.png

Update the total order amount flow //a.storyblok.com/f/233206/52ff92fd45/klarna-update-order-amount-flow.png

More information read in documentation Klarna. Update order amount.