# Klarna > Klarna for API only lets you control the look and feel of your checkout page and display specific payment methods, including Klarna. This integration option lets you integrate Klarna payments through --- # Source: https://docs.klarna.com/platform-solutions/acquiring-partners/adyen/payments/accept-a-klarna-payment-through-adyen.md # Accept a Klarna payment through Adyen ## You can choose from multiple integration options to accept a Klarna payment through Adyen. Pick the method best suited to your Adyen integration and contracts. ## Klarna for API only Klarna for API only lets you control the look and feel of your checkout page and display specific payment methods, including Klarna. This integration option lets you integrate Klarna payments through an inline integration or through Klarna's Hosted payment page. Learn how to add Klarna to your existing Adyen API-only integration from [Adyen’s documentation on Klarna for API only](https://docs.adyen.com/payment-methods/klarna/api-only). If you haven't performed this integration yet, first refer to the Adyen checkout [API-only integration guide](https://docs.adyen.com/online-payments/api-only). [Take a look at the diagram illustrating the data flow in direct API integration](https://static.swimlanes.io/e51e7a6a687e0855cc968ee60bb6439a.png). If you want to use the Klarna inline integration (Adyen checkout API), to comply with [GDPR regulations](https://eur-lex.europa.eu/eli/reg/2016/679/oj), make sure you’re sending [the payments request](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) to Klarna after the customer selects Klarna as the payment method. In the request, the customer details are sent to Adyen who, in turn, forwards the data to Klarna. ## Web drop-in or component Web drop-in or component uses Klarna's hosted checkout, with Adyen managing the display of different payment methods (including Klarna), logos, and payment descriptors. You can manage the payment method availability in your Adyen Customer Area. Adyen automatically returns the Klarna products in the markets that are enabled in your merchant account settings. For more information, see [Adyen's documentation on Klarna for web drop-in or component](https://docs.adyen.com/payment-methods/klarna/web). If you haven’t yet integrated Web drop-in or component into Adyen, first refer to the [Web Drop-in integration guide](https://docs.adyen.com/online-payments/web-drop-in) or [Web Components integration guide](https://docs.adyen.com/online-payments/web-components). [Take a look at the diagram illustrating the data flow in web drop-in or component integration](https://static.swimlanes.io/a57fc5d58a1f6e8dfd57a69c17e2f198.png). ## Mobile apps You can integrate Klarna into your mobile application in two ways: - If you have the Adyen Checkout API integration and want to integrate Klarna into your iOS or Android mobile app, follow the [Klarna In-app SDK integration guide](https://docs.klarna.com/platform-solutions/acquiring-partners/adyen/payments/accept-a-klarna-payment-through-adyen/). Since you own the user interface of the checkout, the In-app SDK integration doesn’t require any other changes. - If you have the web drop-in component integration, you can integrate the [drop-in](https://docs.adyen.com/online-payments/ios/drop-in) and [component](https://docs.adyen.com/online-payments/ios/components) objects. Klarna is displayed as a payment method within Adyen’s hosted solution, allowing Adyen to take care of redirecting the customer to Klarna’s hosted payment page. --- # Source: https://docs.klarna.com/platform-solutions/acquiring-partners/stripe/payments/accept-a-klarna-payment-through-stripe.md # Accept a Klarna payment through Stripe ## You can choose from multiple integration options to accept a Klarna payment through Stripe. Pick the method best suited to your needs and the details of your Stripe integration. The most common methods of integrating Klarna are presented below. Regardless of the integration method, your customers will be redirected to a Klarna hosted payment page to complete the purchase. - [Stripe Checkout](https://stripe.com/docs/payments/checkout) is a low-code integration solution you can use to build a customized payment page hosted on Stripe. If you’re already integrated with Stripe Checkout, almost no additional development is required apart from enabling Klarna as a payment method. You can find more information on the \[. Accept a Klarna payment\] page. - [Stripe's Payment Element](https://stripe.com/docs/payments/customize-payment-element) is another low-code option where you can enable Klarna in your Stripe dashboard. - The [Direct API](https://stripe.com/docs/payments/klarna/accept-a-payment?platform=web&ui=API) integration is a full back-end integration. Use it if you want to build a custom checkout and have more flexibility and control. - [Payment links](https://stripe.com/docs/payments/payment-links) are the easiest way to offer a one-time payment or a recurring payment without writing a line of code. You can generate a payment link from the Stripe dashboard and share that link with your customers. - You can enable Klarna in your [mobile app](https://stripe.com/docs/payments/klarna/accept-a-payment?platform=mobile) for React Native, iOS, and Android. When a customer selects Klarna in your app, a WebView appears where the payment is verified. **Private Preview** Klarna is currently available in private preview on [Link](https://stripe.com/payments/link). Link is a wallet built by Stripe that enables consumers to check out faster with their preferred payment method. If you're interested in getting access, enter your email on [Stripe docs](https://docs.stripe.com/payments/link#request-access) --- # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-hpp/before-you-start/accept-klarna-payments-using-hosted-payment-page.md # Accept Klarna Payments This guide will lead you through all the steps required to accept payments with **Klarna Payments**using the **Hosted Payment Page**. At the end you will be able to accept payments with Klarna without hosting any web component on your own pages. ## Ecosystem ![klarna docs image](3bbb7172-2c66-4564-b202-629ae50c7c3f_HPP+for+KP.jpeg)image ## Sequence diagrams You will find here the usual integration flow of the Hosted Payment Page using a Klarna Payments session. In this flow, actors are defined as follow: - **Consumer**: a physical person that wants to buy something. - **Browser**: the browser that the **Consumer** is able to control, for example on a desktop or a mobile. - **Merchant Backend**: your backend that will do the API calls to HPP, KP and Order Management. - **HPP**: the Hosted Payment Page API - **Klarna Payments**: the Klarna Payments API ### Sequence where you host a part of the Consumer flow {{#mermaid: sequenceDiagram autonumber participant A as Consumer participant B as Browser participant C as Merchant Backend participant D as HPP participant E as Klarna Payments A -->> C: Intent of buying. May be given on website, by phone call, etc C ->> E: Create session E -->>C: session C ->>D: Create session D ->>C: URL to redirect to alt Synchronous flow C -->>B: Redirection to redirect_url else Asynchronous flow C -> D: Distribute session, method D -->>A: SMS or e-mail containing an url A ->>B: Reads and click end B ->>D: Request url D -->>B: HPP with Merchant's customization note over A,E: Consumer will be able to see basic order details, choose payment methos if none is enforced. If he is a Klarna user,
he will be able to pay in a few click and benefit from our Smoooth experience. B ->>D: Presses pay button D -->>B: Redirection to merchant_urls.success with authorization_token or order_id B ->>C: Requires success alt Custom place order note over A,E: When place_order_mode is not defined, you get an authorization_token and need to place the order. The token has a limited lifespan (usually 1 hour) C ->>E: Place order with authorization_token end C -->>B: Order confirmation }} 1. **Your consumer wants to proceed to a payment** using one of Klarna’s payment methods: depending on the integration, this interaction can be on a website when the Consumer choose to pay with Klarna, with a telesales by phone… 2. **Create sessions on Klarna Payments and Hosted Payment Page** a\. **Create a Payment session on Klarna Payments**: After receiving this consumer intent, create a Payment session with Klarna Payments API. b. **Associate the Payment session to an Hosted Page session**: Using the session identifier provided by Klarna Payments API, create the corresponding HPP session. 1. **Distribution of the Payment session to your consumer** - a\. **Distribution can be done by yourself**, using a redirection URL given by HPP. - b\. **Request that HPP distribute** the Payment session directly to your Consumer. 2. *\[Invisible step for you\]* **Consumer gets to Hosted Payment Page**: Consumer goes to the Payment page using the received link, either by you or by SMS/Email received from Klarna. 3. *\[Invisible step for you\]* **Authorization of payment**: When the Consumer presses the buy button on the Payment page, payment authorization will be given to the Consumer. HPP will proceed to the redirection of the Consumer to your Backend using the URL given in the session creation. 4. **Confirmation and Authorization Token** - a\. **Redirection of the Consumer after a successful authorization**: The Consumer’s browser is redirected to the success URL you defined. - b\. **Validation of the HPP Session outcome**: Depending on your HPP Session, you will be able to retrieve an authorization_token or an order_id from the URL parameters, but you can also checks the HPP Session status using our endpoint. The authorization_token will let you place the order manually, whereas the order_id will let you do the post-purchase experience. 5. **Place the order**: By not defining any place_order_mode when creating the HPP Session, you will need to place an order using the Authorization Token you just got. This will let you check that everything is still correct before validating the payment. This returns you an order_id that will let you do the post-purchase experience. 6. **Confirmation of the order**: You should show the customer that the payment authorization is successful and that the order has been validated. 7. *\[This step can be asynchronous\]* **Capture payment**: When you want the payment to actually happen, usually when goods are shipped, use the Order Management API to capture the amount on the order. When creating the KP Session, you can also ask the capture to be automatic. ### Success flow After a successful authorization, the Consumer’s browser will be redirected to your success URL defined when you created the HPP session (see Step 3). HPP will use merchant_urls.success to generate the URL, it should contain the authorization_token or order_id depending on your place_order_mode, but can also use some additional parameters. Please see HPP Create Session Parameters and Options for dynamic parameters. ### Rejection and cancellation flows When the Consumer decides to abort the process or gets rejected by Klarna for payment authorization, the Consumer’s browser is redirected to one of the URLs defined when you created the HPP session (see Step 3). - merchant_urls.failure: Consumer is redirected there after being refused by Klarna. - merchant_urls.cancel: Consumer is redirected there after clicking on the Cancel button. Please see [HPP Create Session Parameters and Options](https://docs.klarna.com/payments/other-products/hosted-payment-page/api-documentation/create-session.md) for dynamic parameters. ### Alternative Sequence: no hosting of the Consumer flow This alternative sequence is almost the same except that you don’t need to host any page that should be shown to the Consumer. As you can’t rely on any redirection to get the status of the session, your backend needs to poll the HPP API to get it. You can decide whether you want to host these pages by yourself or rely on HPP ones by defining the merchant_urls. You can give HPP a success url but not a cancellation one. {{#mermaid: sequenceDiagram autonumber participant A as Consumer participant B as Browser participant C as Merchant Backend participant D as Klarna Payments participant E as HPP A -->> C: Intent of buying. May be given on website, by phone call, in-store etc C ->> D: Create session D -->>C: session C ->>E: Create session E ->>C: URL to redirect to C ->>E: Distribute session, method E -->>A: SMS or e-mail containing an url A ->>B: Reads and click B ->>E: Request url E -->>B: HPP with Merchant's customization note over A,E: Consumer will be able to see basic order details, choose payment methos if none is enforced. If he is a Klarna user,
he will be able to pay in a few click and benefit from our Smoooth experience. B ->>E: Presses pay button note over A,E: When initiated without a value for merchant_urls.success, HPP will render a basic payment confirmation page to the consumer. E -->>B: Display of payment confirmation page note over A,E: Your backend should poll the session status until the status is COMPLETE C ->>E: Get session status E -->>C: status = COMPLETE with authorization_token or order_id alt Custom place order note over A,E: When place_order_mode is not defined, you get an authorization_token and need to place the order. The token has a limited lifespan (usually 1 hour) C ->>D: Place order with authorization_token end }} **6. b. Confirmation and Authorization Token** **Polling to get the successful outcome**: The Consumer’s browser is shown a simple payment confirmation page, your Backend will need to get the Authorization Token using HPP API. that you will need to use to place the order if the order is still valid. ### Success flow After a successful authorization, the read session endpoint will give you the status of the Session and the Authorization Token to place the order with. ### Rejection and cancellation flows When the Consumer decides to abort the process or gets rejected by Klarna for payment authorization, the status of the session will also be updated. The Consumer will see a simple cancel or rejection page. ## Step by step integration ### 1. Create KP Session with the Payments API The first step is to create a **KP Session** with the **Klarna Payment API** in order to be able to host it using the **Hosted Payment Page API**. This is where you are going to define all you know already about your Consumer, what is the content of the order and the metadata associated to the purchase. This call corresponds to **Step 2a**in the sequence diagram. | **Description** | **Creates a session with KP-API** | |----|----| | Reference | For a full list of accepted (optional) parameters, possible returns and error codes you can reference the KP-API documentation | | Url structure | | | Example | curl -X POST /payments/v1/sessions --header "Authorization: Basic " --header "Content-Type: application/json" --header “Cache-Control: no-cache” --data “” | ### Create a session KP: Request ``` json { "purchase_country": "us", "purchase_currency": "usd", "locale": "en-US", "order_amount": 20000, "order_tax_amount": 0, "order_lines": [ { "image_url": "https://www.exampleobjects.com/logo.png", "type": "physical", "reference": "Could be a Product Id or SKU #", "name": "Cool Bike", "quantity": 1, "unit_price": 20000, "tax_rate": 0, "total_amount": 20000, "total_discount_amount": 0, "total_tax_amount": 0 } ], "billing_address": { "given_name": "John", "family_name": "Doe", "email": "email+require_signup@example.com", "title": "Mr", "street_address": "2425 Example Rd", "street_address2": "", "postal_code": "43221", "city": "Columbus", "region": "OH", "phone": "6145675309", "country": "US" } } ``` ### Create a session KP: Response ``` json { "session_id" : "", "client_token" : "", // Ignore this field when using KP with HPP "payment_method_categories": [ { "identifier": "pay_later", "name": "Pay later.", "asset_urls": { "descriptive": "https://x.klarnacdn.net/payment-method/assets/badges/generic/klarna.svg", "standard": "https://x.klarnacdn.net/payment-method/assets/badges/generic/klarna.svg" } } ] } ``` ### How to create the Request Please read the session creation guide of **Klarna Payments API** to get all details on fields and how you can use them. As you will use the Hosted Payment Page API to host your KP Session, you don’t need to read the step after. As you won’t own and host the page that displays Klarna Payments’ Client, you have to respect additional guidelines that will depend on the use case of your integration see see special rules . Depending on your integration use case (ie *eCommerce*, *In Store*or*Telesales*), you may have to respect some guidelines when creating the KP Session, see \[ special rules\]. #### How to interpret the Response The KP Session is created on a successful response. On the fields present in it, only the session_id is useful when KP is used with Hosted Payment Page API. You will have to use it to build HPP’s `payment_session_url`. [`https://api.klarna.com/payments/v1/sessions/`](https://api.klarna.com/payments/v1/sessions/) ## 2. Create HPP Session with Hosted Payment Page API The second step is to create the **HPP Session** using the **KP Session** you have just created. Sessions will have a tied lifecycle meaning that the HPP Session will expire 1 hour before the KP Session, see session lifetimes. Multiple HPP Sessions can be linked to the same KP Session if you need to have multiple customization at the same time, although it is considered as a bad practice. This call corresponds to **Step 2b**in the sequence diagram. ### How to create the Request Please read the [session creation call reference of HPP](https://docs.klarna.com/payments/other-products/hosted-payment-page/api-documentation/create-session.md)**session creation call reference of HPP** to get all details on fields and how you can use them. As you will use the Hosted Payment Page API to host a KP Session, you have additional options that you can use. #### Specific Klarna Payments parameters when creating an HPP Session A successful HPP Session can lead to three different outcomes for the KP Session, depending on your use-case and the flexibility needed by your integration upon Customer’s authorization. Use this to speed up your integration and let HPP do the work for you: - **Authorized Payment** (default): the Consumer selected a payment method and was authorized by Klarna for the order amount of the KP Session. Your service will get an authorization_token back and will need to use it to *Place an Order* with KP API. One of the reason for you to choose this mode is if you want to make additional validation after the consumer was authorized and before actually placing the order (for example, stock management). In some cases, you may use the token to place an order on a lower amount. This could also let you create customer token for recurring payments. - **Placed Order**: the Consumer selected a payment method, was authorized by Klarna and HPP automatically placed the corresponding order. Your service will get an order_id back, you will then need to *Capture Order* with the Order Management API. Capturing order should happen when goods are sent to the customer. Klarna creates the order even in case of failed redirection to merchant_urls.success. Keep track of the HPP session status using by [polling HPP's read endpoint or via callback mechanism.](https://docs.klarna.com/hosted-payment-page/get-started/tracking-session-status) - **Captured Order**: the Consumer selected a payment method, was authorized by Klarna and HPP automatically placed the corresponding order and captured it. Your service will get an order_id back, you won’t need any additional call. This option should be used when goods are directly given to the Consumer (Digital goods, In-store…). Klarna creates the order even in case of failed redirection to merchant_urls.success. Keep track of the HPP session status using by [polling HPP's read endpoint or via callback mechanism.](https://docs.klarna.com/hosted-payment-page/get-started/tracking-session-status) The call corresponding to **Step 7**in the sequence diagram becomes obsolete when using PLACE_ORDER or CAPTURE_ORDER as a values for place_order_mode. | Key | **place_order_mode** | |----|----| | Description | Defines the outcome of the KP Session when the HPP Session is successful. | | Type | List values from an Enum | | Default Value | NONE | | Accepted Values | NONE, PLACE_ORDER, CAPTURE_ORDER | ``` json { "options": { "place_order_mode": "CAPTURE_ORDER" } } ``` **Payment Methods and Categories** **NOTE: We're introducing a new customer purchase flow where we handle everything related to the payment widget, so you don't have to worry about it. If you're using the new purchase flow, skip this section. Otherwise, if you still handle the widget, read more about it in this section.** HPP lets you define what *Payment Method Categories* should be made available to the Consumer when seeing the Klarna Payment Widget on HPP. Payment Categories are *Pay Now*, *Pay Later* or *Slice It (Pay over time)*, and will differ depending on what Products are available for you at Klarna. When you create a *KP Session* in **Step 2a**, *Klarna Payments API* sends you back as a result all available payment categories for the *KP Session*. You have to use this values to configure the *HPP Session*. This parameter will define what the Consumer will when first loading the Payment Page. 1. Display only one Payment Method Category using the field payment_method_category 2. Display a defined list of Payment Method Categories using the field payment_method_categories 3. Display all available Payment Method Categories by omitting both parameters Defining both fields payment_method_category and payment_method_categories at the same time will end up in a refused request. #### 1. Display only one Payment Method Category | Key | payment_method_category | |----|----| | Description | Consumer will be able to select a Payment Method from a single Category. The value has to be one of the payment categories sent back by KP API when creating the*KP Session*. | | Type | Enum | | Accepted Values | PAY_NOW, PAY_LATER, PAY_OVER_TIME, DIRECT_DEBIT, DIRECT_BANK_TRANSFER | ``` json { "options": { "payment_method_category": "pay_later" } } ``` #### 2. Display a list of Payment Method Categories | Key | payment_method_categories | |----|----| | Description | Consumer will be able to select a Payment Method from a list of Categories. Values have to be one of the payment categories sent back by KP API when creating the*KP Session*. | | Type | List values from an Enum | | Accepted Values | PAY_NOW, PAY_LATER, PAY_OVER_TIME, DIRECT_DEBIT, DIRECT_BANK_TRANSFER | ``` json { "options": { "payment_method_categories": [ "pay_later", "pay_now" ] } } ``` #### 3. Display all available Payment Method Categories When none of the above parameters are given on the create call, all the available payment categories will be made available to the consumer. When activated, the *Fallback flow* will make sure that the Consumer is declined for all payment categories of the *KP Session* before going through the *Rejection flow*. In combination with the two first initial display options, it is possible to activate a **fallback flow** that will happen only when the Consumer is declined for the payment categories that were defined. This *fallback* works as follow: 1. The KP Session is created and *Pay Now*, *Pay Later* and *Slice It* are all available 2. The HPP Session is created with the *Slice It* category because the Consumer’s choice has been made before going to HPP 3. The Consumer arrives on the Payment Page and sees only *Slice It* options. The Consumer applies for one of the *Slice It* options and for some reason gets declined 4. The *fallback flow* isn’t activated (default behavior) or has already happened, the Consumer will go through the *Rejection flow*. The *fallback flow*may be transparent for the Consumer and is not a guarantee of authorization. The Consumer may be declined for additional payment method categories while applying for one. | Key | payment_fallback | |----|----| | Description | When true, the *Fallback flow*will make sure that the Consumer is declined for all payment categories of the *KP Session*before going through the*Rejection flow*. | | Type | Boolean | | Accepted Values | true, false | ``` json { "options": { "payment_method_categories": [ "pay_later", "pay_now" ] } } ``` #### 3. Distribute Session with HPP (Optional) Outside of typical eCommerce flow, you will need to distribute the link to the Hosted Payment Page to the Consumer, for example by email or SMS, or by QR code. The Consumer will then be able to access the page and complete the payment. This call corresponds to **Step 3b**in the sequence diagram. ### 4. Retrieve the result of the HPP Session Once the Consumer has completed the flow on HPP, the status of the HPP Session will change to reflect the outcome of their actions. Your system will then need to retrieve this outcome to be able to act on it, either by placing an order on Klarna Payment, creating a consumer token, or just storing the order_id that was created by HPP for post-purchase purposes. The outcome of the HPP Session can be retrieved either via the redirection of the Consumer to your own website or by making an API Call to get the status of the session. #### 4. a. From the Consumer redirection You can get the outcome of the KP Session from the link that the Consumer will be redirected to as stated in our redirection guide. It is still advised to make a call to the HPP API to get the exact state of the HPP Session and not rely only on the consumer redirection. Parameters that will be required to handle the outcome are given to you by replacing the place holders you have set up in the merchant_urls.success at the creation of the HPP Session. You just need to extract the values from there. This call corresponds to **Step 6a**in the sequence diagram. It is advised to use both method to make sure that your system is actually placing the order whenever the Consumer has gotten a confirmation of payment by Klarna. - On create call: [`https://example.com/success?sid=`](https://example.com/success?sid=)`&authorization_token=` - When user gets redirect: [`https://example.com/success?sid=39a1c773-bafd-754d-af1f-b30c592f1267&authorization_token=a1a8f727-2756-6058-bd3c-40069be0994b`](https://example.com/success?sid=39a1c773-bafd-754d-af1f-b30c592f1267&authorization_token=a1a8f727-2756-6058-bd3c-40069be0994b) - On create call: [`https://example.com/success?sid=`](https://example.com/success?sid=)`&oder_id=` - When user gets redirect: [`https://example.com/success?sid=39a1c773-bafd-754d-af1f-b30c592f1267&oder_id=a1a8f727-2756-6058-bd3c-40069be0994b`](https://example.com/success?sid=39a1c773-bafd-754d-af1f-b30c592f1267&oder_id=a1a8f727-2756-6058-bd3c-40069be0994b) #### 4. b. From the HPP Session Status This token can be retrieved by making a read session call to the HPP API or registering for callback. You can for example use a polling mechanism to check the status of the session. When the HPP Session gets successful because your Consumer gets an authorization, the status will change to `COMPLETE`. Depending on the value of `place_order_mode`, you will be able to extract the `authorization_token` from the server response or directly the `order_id` if the order is placed by HPP. Please read our track session status guide to get all details on how you can get the status of the session. ### 5. Handle the result of the HPP Session The HPP Session was completed successfully and you need now to act depending on your parameters. - With `place_order_mode` to its default value (`NONE`), you now need to place an Order with Klarna Payments API. - With `place_order_mode` set to `PLACE_ORDER`, you will need to store the order_id to capture the payment once the goods are shipped. - With `place_order_mode` set to `CAPTURE_ORDER`, you need only to store the order_id to do post-purchase operations such as refunds. #### 5. a. Place Order with Klarna Payments API As described in the objects overview, when a Consumer gets a *Payment Authorization*, your backend will need to use a **KP Authorization Token** to place the Order. Now that the Consumer has gotten an Authorization from Klarna for the Payment, you have to use the Authorization Token that you retrieved in the redirection to Place the Order. After this call, Klarna will consider that the Order is actually valid and that you will be able to capture the payment when the goods are being delivered. Please read the place order guide of Klarna Payments to get all details. Depending on your integration use case (ie *eCommerce*,*In Store*or *Telesales*), you may have to respect some guidelines when placing the order, see special rules. To ease your integration and depending on your use case, you can count on the auto_capture feature of the KP API to automatically capture the order after its creation. Please read the place order guide of Klarna Payments to get all details. This call corresponds to **Step 7**in the sequence diagram. ### Place order request ``` json { "purchase_country": "GB", "purchase_currency": "GBP", "locale": "en-GB", "order_amount": 57064, "order_tax_amount": 9511, "order_lines": [ { "image_url": "https://www.exampleobjects.com/logo.png", "type": "physical", "reference": "Could be a Product Id or SKU #", "name": "Cool Bike", "quantity": 1, "unit_price": 20000, "tax_rate": 0, "total_amount": 20000, "total_discount_amount": 0, "total_tax_amount": 0 } ] } ``` ### Place order response ``` json { "order_id": "41c001ca-f6d4-4240-bbc5-5d2c036a2de4", "fraud_status": "ACCEPTED" } ``` ### 5. b. Capture Payment with Order Management API Orders that are created without auto_capture will need to be captured using the **Order Management API**. This can happen when you create the Order by yourself (see previous step) or when you use CAPTURE_ORDER as place_order_mode value. No payment will occur until the order has been captured. This is for use in transactions where the purchased goods are not immediately delivered but are made available at a later time. Please read the capture guide of Order Management to get all details. ## Edge cases ### Disabling an HPP Session by Merchant initiative If for any reason the payment session has to be canceled (expiration of an offer, order was paid using another payment method, etc), the HPP API gives to the Merchant the possibility to disable an *HPP Session*. To do that, it is required to send a delete request on the HPP Session resource. Please read the disable session call reference of HPP --- # Source: https://docs.klarna.com/payments/after-payments/order-management/manage-orders-in-the-merchant-portal/access-your-orders.md # Access your orders ## Learn about the different ways to access your orders in the Merchant portal. When you enter the [Merchant portal](https://www.klarna.com/us/business/the-merchant-portal/), the **Home** page welcomes you with a digest of the most recent activities in your online store, tools and services for day-to-day operations, and more. From the **Home** page, you can access **Orders** through a few different shortcuts: - **Menu**bar**:**It takes you to the main dashboard, where you can track all your created orders and their status. - *For your day-to-day***For your day-to-day**subsection**:**Same as the **Menu** bar option, this takes you to the main **Orders** dashboard. - *To-dos***To-dos**panel**:**Depending on what you select in the to-do list, this option lets you track the orders that are about to expire, the orders that you still need to capture, or all the created orders and their status. Check out the image below to see these options in action: ![ Home page of the Merchant portal.](88c1848f-e48c-4f27-8041-8da69d209c99_Order+management_Merchant+portal_Accessing+orders.jpeg) *Home page of the Merchant portal.* --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/payments/activation.md # Activation of SAP Commerce Cloud Add-on ## This guide helps you activate Klarna Payments by setting up configurations and credentials in the SAP Commerce Backoffice. ### Prerequisites Before you start, ensure: - The `klarnapaymentaddon` is successfully installed. - You have access to the SAP Commerce Backoffice. - Credentials from the Klarna Merchant Portal, including **API username**, **API password**, and **Public Key ID**. ### Steps to Activate Klarna Payments #### Step 1: Create a Klarna Payments configuration **1.** Navigate to Klarna Payment Configuration: Go to **SAP Commerce Backoffice** → **Klarna** → **Klarna Payments Config**. ![Navigate to Klarna Payment Configuration](Activation_of_SAP_Commerce_Cloud_Add-on_1737037256971.png) *Navigate to Klarna Payment Configuration* **2.** Create a new Klarna configuration: Select the option to create a new Klarna configuration. ![Create a New Klarna Configuration](Activation_of_SAP_Commerce_Cloud_Add-on_1737037796619.png) *Create a New Klarna Configuration* **3.** Fill in mandatory fields: - **Code:** A unique identifier for the configuration. - **Enable Klarna Payments:** Toggle to enable the feature. - **Email for Failure Notifications:** Email for receiving alerts. - *Click **Next** to proceed.* ![Fill in the Klarna Payments Specific Fields](Activation_of_SAP_Commerce_Cloud_Add-on_1737037867953.png) *Fill in the Klarna Payments Specific Fields* **4.** Provide additional details: - Enable **AutoCapture** (optional). - Enable **Extra Merchant Data (EMD)** (optional). - Set **Merchant Reference 2** and optional color customization for the Klarna interface. ![Fill in the Klarna Payments Specific Fields 2](Activation_of_SAP_Commerce_Cloud_Add-on_1737037970190.png) *Fill in the Klarna Payments Specific Fields 2* #### Step 2: Create credential data **1. Navigate to Klarna Activation:** In the Backoffice, go to **Klarna** → **Klarna Activation**. **2. Add a new credential:** Click the **+** icon below the Klarna Activation section. ![Klarna Activation](Activation_of_SAP_Commerce_Cloud_Add-on_1737039726935.png) *Klarna Activation* **3. Fill in mandatory fields:** - **Code:** Identifier for the credentials. - **Client ID, API Username, and API Password:** Retrieved from the Klarna Merchant Portal. ![Create new credential](Activation_of_SAP_Commerce_Cloud_Add-on_1737040297543.png) *Create new credential* **4. Provide additional details:** - Region (e.g., EUROPE, NORTH_AMERICA). - Supported **Markets**. - Enable **VCN** if applicable. - **Public Key ID:** For encrypting VCN data. ![Credential additional details](Activation_of_SAP_Commerce_Cloud_Add-on_1737040358173.png) *Credential additional details* #### Step 3: Map credentials and Klarna Payments configuration **1.** Navigate to Klarna Common Configuration: Go to **Klarna** → **Klarna Common Configuration**. ![Common Configuration](Activation_of_SAP_Commerce_Cloud_Add-on_1737040563865.png) *Common Configuration* **2.** Create a mapping: - Click the **+** icon to create a new mapping. - Fill in details such as **Code**, **Active**, and **Environment** (TEST or LIVE). ![Mapping credentials](Activation_of_SAP_Commerce_Cloud_Add-on_1737041144962.png) *Mapping credentials* **3.** Link Klarna credentials and payment configuration: - Select the Klarna credentials created in Step 2. - Associate the Klarna Payments configuration created in Step 1. ![Mapping details](Activation_of_SAP_Commerce_Cloud_Add-on_1737041223904.png) *Mapping details* ### Klarna Payments Configuration Fields | **Attribute** | **Mandatory** | **Description** | |----|----|----| | Klarna API Username | Yes | Generated in Klarna Merchant Portal. | | Klarna API Password | Yes | Generated in Klarna Merchant Portal. | | Region | Yes | Choose from EUROPE, NORTH_AMERICA, or OCEANIA. | | Markets | Yes | Countries supported under the selected region. | | Environment | Yes | TEST (playground) or LIVE (production). | | AutoCapture | No | Enables auto capturing during order placement (not relevant if VCN is enabled). | | Enable VCN | No | Toggles VCN-based settlement. | | Public Key ID | No | RSA public key provided in JWK format for VCN settlement. Recommended: 4096-bit RSA keypair. | **Tips for an Optimal User Experience** Ensure the Klarna Payments iframe is visible and text is legible by using a consistent minimum width for checkout and billing pages. This enhances the experience for mobile users. ### Setting Up Virtual Card Numbers (VCN) #### Steps to Enable VCN ##### Step 1: Enable VCN in Klarna Configuration 1. **Access Klarna Activation:** - Navigate to **SAP Commerce Backoffice** → **Klarna** → **Klarna Activation**. 2. **Enable VCN:** - Select the **Enable VCN** option. ##### Step 2: Generate a 4096-bit RSA Key Pair **1.** Open a terminal and run the following commands: ``` bash openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:4096 openssl rsa -pubout -in private_key.pem -out public_key.pem ``` **2.** This will create two files: - `private_key.pem` (Private key) - `public_key.pem` (Public key) ##### Step 3: Configure Klarna with RSA Keys 1. In **Klarna Activation**, set the **Public Key ID** using the contents of `public_key.pem`. 2. Example `public_key.pem` file contents: ``` text -----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAoNYG7l2G8nZa+22oBYZk tV228lw3UE9WO4oxfknJtKEdHn84x55ULt8KQTh9NVtdeKC8nTfTgyvMt/GNCa18 xuZV/lGYDftKt85hbV5EjOum+StAIufEXvlBX7nMOMc1KyWm9kp2kbqd88mFIX63 KV94OoNEXcNatRDFYR+qz53+ifadDQtQ1slVNStdroCZDJ1+LxtBy9V+BdmsBK1E RLsKh/JLXyWE24FJKV+z00s7TQkdWW/5ET12OGQYZsWo1yqgi9HplNvrisve8vWP xaL4m8iZ3I/9yYdg7yANQbTxSJcbbRCgaaagPo30CNxeqU6qafY5g8vY3E52CoXH DdO4UslX1qcuYIDhqaDzey6W+b8m755xLi+rqQyM4PBWL0J0dM3FVid8+4YKILex 3AKBFciqRCMHSOGaEeyrXKTjlAsghr9RS8PifvQRrL440cHzqw2vX0DvpjSWcmUJ tW4wUq5RNSsobrxnVmoV6fj1z67Q/1P+l5Ie+oowdahR5ztVqJlO+2PNoX4I5VDs /Pkz3f8wWVc3Mp2oNT244o+/NIiyRfPFaJJx7JAgrcvZt2nFAmY4QApXLFJCpgEM wYucE4AH4gJKsh3KZbxRERrrO72bL2rxvWqBp/0h7DcMsV9sQs4BvxxIl6CF506F ThzmclaKLBAyd5LALiXiPfkCAwEAAQ== -----END PUBLIC KEY----- ``` ![VCN](Activation_of_SAP_Commerce_Cloud_Add-on_1737040358173.png) *VCN* **Important Notes on PCI Compliance** - **Do not save decrypted PCI data (e.g., VCN or CVV) on servers.** - Ensure **PCI-DSS compliance** by securely handling card data. - Collaborate with partners, Payment Service Providers (PSP), and Acquirers for secure data management. - Delete any historical decrypted PCI data, regardless of its validity. #### Verifying VCN Data in Backoffice **1. Access the Order** - Navigate to **Order** in the SAP Commerce Backoffice. - Search for the specific order number. ![Verifying VCN in order](Activation_of_SAP_Commerce_Cloud_Add-on_1737044434610.png) *Verifying VCN in order* **2. View Order Details** - Click the order number. - Go to the **Payment & Delivery** section. - Select **Payment Information** to view the VCN details. ![VCN Details](Activation_of_SAP_Commerce_Cloud_Add-on_1737044466859.png) *VCN Details* Important! - VCNs are **one-time use cards** tied to individual orders. - Merchants are responsible for securely managing the cards. - Avoid storing decrypted PCI data in production environments. ### Verifying Klarna Order IDs in Backoffice #### Steps to Verify Klarna Orders 1. **Log in to SAP Commerce Backoffice.** 2. **Navigate to Orders:** - Click **Orders** in the left-side menu. 3. **Search for a Specific Order:** - Enter the order number in the search bar. - Open the order by clicking its entry in the results. #### Viewing Klarna-Specific Details **1. Verify Klarna Order ID:** - Go to the **Properties** tab of the order. - Locate and confirm the **Klarna Order ID**. ![Verify Klarna Order ID](Activation_of_SAP_Commerce_Cloud_Add-on_1737044767442.png) *Verify Klarna Order ID* **2. Check Payment Transactions:** - Go to the **Administration** tab. ![Verify Payment Transactions](Activation_of_SAP_Commerce_Cloud_Add-on_1737044812412.png) *Verify Payment Transactions* - Look for the transaction type `KLARNA`*`ORDER_PLACED`* *to verify Klarna-specific transactions* ![KLARNA_ORDER_PLACE](Activation_of_SAP_Commerce_Cloud_Add-on_1737044884697.png) *KLARNA_ORDER_PLACE* ### Configuring Extra Merchant Data (EMD) The **Extra Merchant Data (EMD)** feature allows merchants to send additional customer information to Klarna, such as alternative delivery addresses and reservation details. By default, only logged-in customer information is sent. #### Steps to Enable EMD in SAP Commerce Backoffice 1. **Navigate to the Backoffice:** - Open **SAP Commerce Backoffice**. - Go to **Klarna** → **Klarna Payments Configuration**. 2. **Enable the EMD Option:** - Locate the **Enable EMD** setting in the Klarna Payments configuration. - Toggle the option to enable it. ![Enable EMD](Activation_of_SAP_Commerce_Cloud_Add-on_1737045598452.png) *Enable EMD* #### Configuring EMD in Code To extend the EMD functionality beyond the default behavior: 1. **Open the KPCreditSessionPopulator.java File:** Locate the file in your SAP Commerce extension codebase. 2. **Use the `addAttachment` Method:** - This method is exposed for configuring EMD data. - Replace `yourDataObject` with the required data (e.g., customer preferences or reservation details). - Example usage: `addAttachment("additionalData", yourDataObject);` 3. **Compile and Deploy the Changes:** Build your extension and deploy it to the SAP Commerce environment. **Best Practices for EMD and Order Verification** - Use the **addAttachment** method to ensure relevant EMD fields are properly configured for Klarna Payments. - Regularly monitor orders in Backoffice to ensure accurate mappings between Klarna and SAP Commerce configurations. ### Appendix #### Extension Model and Classes | | | | |----|----|----| | **Model** | **OOB Model** | **Attributes** | | BaseStore | BaseStore | klarnaPayConfig | | AbstractOrder | AbstractOrder | kpIdentifier kpAnonymousGUID kpOrderId kpFraudStatus isKpPendingOrder isKpAuthorised isKpFraudRiskStopped | | KPPaymentInfo | InvoicePaymentInfo | paymentOption finalizeRequired description authToken isVCNUsed vcnBrand vcnCSC vcnValidToYear vcnValidToMonth vcnHolder vcnPan vcnCVV | ##### Classes extended from OOB SAP (Hybris) Commerce platform | | | |----|----| | **Class** | **OOB Class** | | KPPaymentMethodCheckoutStepController | PaymentMethodCheckoutStepController | | KPSummaryCheckoutStepController | AbstractCheckoutStepController | | KlarnaResponsiveSummaryCheckoutStepValidator | AbstractCheckoutStepValidator | | KlarnaSummaryCheckoutStepValidator | AbstractCheckoutStepValidator | | KPAddressPopulator | AddressPopulator | | KPOrderPopulator | AbstractOrderPopulator | | KlarnaEventPublishingSubmitOrderStrategy | SubmitOrderStrategy | | KPPaymentTypeCheckoutStepController | AbstractCheckoutStepController | #### Klarna Payment Method Reference | | | | |----|----|----| | **Use Case** | **Class** | **Method** | | Create/Update payment session | DefaultKPPaymentFacade | getORcreateORUpdateSession | | Authorize Payment | DefaultKPPaymentFacade | getPaymentAuthorization | | Create Klarna Order | DefaultKPPaymentCheckoutFacade | saveKlarnaOrderId | | Cancel Klarna Order | KPOrderConfirmationController | orderConfirmation | #### KlarnapaymentAPI Method Reference | | | | |----------------------------|-----------|------------------------------------| | **Use Case** | **Class** | **Method** | | Get Klarna Payment session | Client | newPaymentsSessionsApi | | Authorize Payment | Client | newPaymentsOrdersApi | | Get Klarna Order by ID | Client | newOrderManagementOrdersApi | | Create payment Settlement | Client | newVirtualCreditCardSettlementsApi | | Delete Auth | | newPaymentsOrdersApi | | Capture Payment | | newOrderManagementCapturesApi | --- # Source: https://docs.klarna.com/resources/legal-and-compliance/more-solutions-guidelines/ad-policies-for-klarna-advertisers.md # Ad policies for Klarna advertisers ## Overview This Advertising Legal and Ethical Policy (“Policy”) applies globally to all Klarna advertising properties, including the Klarna App, Klarna.com, and any other Klarna owned channels (hereinafter “Klarna Properties”), and to all ads served through our advertising partners, and all ad types and implementations.  All creatives, advertisements and other material subject to this Policy must comply with all applicable laws and regulations. Klarna is not responsible for ensuring compliance with applicable laws and regulations, although advertisers may be required to submit documentation from an attorney affirming such compliance if deemed necessary by Klarna. While Klarna requires its advertisers to comply with this Policy, the content of the advertisements is the advertiser's responsibility. The advertiser is responsible for ensuring that all product claims, warranties, guarantees, discounts, pricing claims, or other assurances comply with applicable laws and regulations. **By placing the advertisements, the advertiser assumes all liability for and arising from the advertisements. ** ## Ad review and enforcement All ads that run on Klarna properties may be subject to automated and/or manual review to assess compliance with this Policy.  Repeated or serious violations of our policies may result in termination or suspension of your privileges to place advertising on Klarna Properties. Klarna reserves the right at any time, in its sole discretion, to deny approval, revoke approval, and/or require the elimination or revision of any advertisement or campaign. Klarna reserves the right to modify this Policy at any time without prior notice. ## Privacy policies and data protection requirements ### Privacy policies In accordance with IAB 3.0 standard terms: *XII. f. Privacy Policies*. Agency, Advertiser, and Media Company will post on their respective Web sites their privacy policies and adhere to their privacy policies, which will abide by applicable laws. Privacy Policies are required on all advertiser landing pages as well as on other pages of an advertiser's website that specifically collect personal information (e.g., name, e-mail address) or other advertising related information. ### Data collection within advertising Collection of Personal Information from within ad creatives, unless there is prior authorization and appropriate disclosure and notification to users is strictly prohibited. Where Personal Information is collected on a landing page, users should be directed to a secure landing page for such data collection. Personal information includes, but is not limited to, information about you that is personally identifiable like your name, address, email address, or phone number, and that is not otherwise publicly available. ## Third party and intellectual property rights ### General Advertisers are responsible for not infringing or violating the intellectual property rights or any other rights of third parties. Klarna reserves the right to remove any ads that we suspect may violate a third party’s intellectual property or other rights in our sole discretion. If you believe your trademark or copyright has been used improperly by an advertiser, please reach out to merchant@klarna.com. ### Klarna intellectual property Use of any Klarna intellectual property, including logos, trademarks, brand names on advertiser’s creatives and linking urls without express permission is prohibited. Requests may be reviewed on a case-by-case basis. ## Advertising content policy All copy must be legible, clear, and accurate so the consumer has sufficient and factual information prior to engaging with the content.  ### Anti-discrimination Advertising (ad text, images, videos, links and/or landing pages) that misrepresents, ridicules or attacks an individual or group on the basis of age, color, national origin, race, religion, gender, sexual orientation, or cognitive, sensory or physical disabilities, or otherwise violates this Policy or any anti-discrimination laws in any region in which the advertisement is shown is strictly prohibited. Discovery of violations of this provision may result in immediate termination of your privileges to place advertising on Klarna Properties. ### Community guidelines Advertising that promotes or displays violence, crime or obscenity or other forms of anti-social behavior, or is otherwise not in good taste, is not acceptable. Advertisements may not use disparaging language or imply that use of the advertised product or service will help avoid compliance with a law or promote illegal activity. 1. Advertising that features defamatory, libelous or threatening content or language is not acceptable. 2. Advertising that features potentially offensive content or language is not acceptable. This includes but is not limited to: - Ads and landing pages that leverage fear, tragic events, or salacious content. - Ads and landing pages that use inflammatory language or images that exacerbate sensitive social issues, incite hatred, or are fundamentally misleading or inaccurate. - Ads and landing pages that leverage sensitive or controversial political or cultural topics to promote commercial products or offers. - Ads that use race baiting, bigotry or similarly offensive techniques. - Viscerally impactful images such as close up images of medical conditions or unattractive conditions the product is meant to treat, blood, body parts, or bodily fluids. - Vulgar or offensive words or phrases. *Advertising that is associated with extreme user irritation, including but not limited to negative user feedback, may be removed from Klarna Properties and platforms without notice at Klarna’s sole discretion. * ### Competitive or comparative messaging Negative or unlawful competitive, comparative, or anti-competitive messaging is not acceptable. Messaging must be relevant and can indicate advantages (competitive features, pricing etc) of your product over a competitor’s. However, any messaging that contains disparaging content or otherwise violates comparative advertising laws and regulations is not acceptable. ### Sweepstakes and contests Random draw sweepstakes and skills contests may only be promoted if the contest/sweepstakes (i) does not constitute an illegal lottery, (ii) is only open to consumers over the age of majority (typically 18+) in the region in which the promotion occurs and (iii) otherwise complies with all applicable country, federal and state laws. Such programs include random drawings, trivia contests, word games, spelling bees, essay contests and photography contests. Advertisements for contests and sweepstakes must clearly and conspicuously disclose the material terms and conditions of participating and must not be false, deceptive or misleading. All promotions must clearly disclose that no purchase is necessary when legally required (e.g., United States). ### Prices and savings claims If an ad promotes a percentage savings, such as 10% off, the landing page should reflect the exact same offer (10% off) and not just the money savings. If the offer is only available for a selected range of products, this should be specified in the copy/ad itself to prevent consumers from being misled into thinking the offer applies to all products for that merchant. Offers that use seasonal messaging should only be used during the relevant promotional period, such as “Mother’s Day offers”, “Easter Deals” or “Back-to-School offers.” If the offer has a start and end date, those dates should be provided in the copy or offer terms and conditions. The landing page for the offer must also include any additional exclusions, limitations, or terms that are necessary for the consumer to be fully informed regarding what is being offered.  ### False or misleading claims Any and all advertising claims should be truthful, not deceptive or likely to deceive a consumer, accurate and substantiated. False or misleading claims are not acceptable. Advertisers may be asked to provide third-party substantiation to support certain claims. Klarna advises against using aggressive language or language that creates a sense of urgency for purchasing, such as “Hurry” or “Offer ends soon.” **Consumers should not be encouraged to spend outside of their means.**The ad should further not suggest or imply that a product is available if that product is not actually available at that time, or sold out. Advertisers may not falsely claim or imply affiliation with another business, government entity, manufacturer, or association. All ad components must be accurate and relevant to the ultimate offer. Landing pages must lead to a fully functional web page that renders properly on all devices. Landing pages must directly relate to both the ad text and the product that is ultimately offered to consumers. Don’t mislead users with the ad text, image or video, or the “sponsored by” label or any combination of the elements. Images or videos must be relevant, recognizable, and appropriate to the advertised product. There should be a clear, simple, and logical link between the supplied image or video and the ad message to users. ### Advertising to minors Klarna’s primary payment products are designed for users over the age of 18. Klarna does not permit the intentional serving of advertisements to consumers known to be under 18. ### Call To Action (CTA) A clear and concise CTA should be used to inform the consumer of the expected user journey after clicking on the ad. A CTA is not always required when on the Klarna website or mobile app, however it is advised for larger placements, such as hero placements or larger banners that have less restrictive space.  ### Language All copy and CTAs in ads shall be in the primary language of the locale in which they appear. All copy should use proper grammar and spelling.  ### Price reductions Any announcement of a price reduction/discount for a specific product should follow applicable laws and indicate the prior price. The prior price means the lowest price available for that product during a period of time not shorter than 30 days prior to the application of the price reduction or any period required by applicable law in the jurisdiction where the advertisement appears. ### Promotion of credit or financial services Promotion of credit or other financial services is ***strictly prohibited*** on all Klarna Properties. ### Deal and promotion terms If an ad includes a deal or promotion, the essential terms and conditions for such a deal or promotion should be clearly and conspicuously presented either in the ad itself, or available on the landing page one click away. Essential terms and conditions may include the maximum available discount amount, minimum spending limit, or restrictions on available dates, and any other information which could affect the consumer’s decision to make a purchase.  ### Labeling and disclosures It should be clear that the ad is an advertisement and marked respectively so consumers understand that this is a paid placement. When adding a specific disclosure to an ad to clarify a claim, always ensure any such disclosure is prominent and easy for a consumer to understand and includes all significant conditions. ### Age of the audience Klarna offers its products and services to consumers who are older than 18. Therefore, ads and disclosures must be directed at the consumers 18+ years old.  ## Prohibited services and products The following products or services are prohibited from being promoted in any advertisement or shown in any content due to legal and regulatory requirements in the markets where Klarna operates. These restrictions ensure compliance with applicable laws, industry regulations, and consumer protection standards:  | Category | Description | |--------|-----------| | Adult content and services | * Escort or prostitution services * Products related to bestiality, zoophilia, incest, and prostitution * Sex toys or related products * Pornography, nudity, or sexually explicit content * Personals for dating services | | Alcohol | * Alcohol and alcohol-related products | | Drugs and illegally derived substances and products | * Illegal or sensitive pharmaceutical drugs and substances (or substitutes to such) * Illegal products or services associated with illegal drugs * Substances designed to mimic illegal drugs | | Financial services | * Payment services considered to be competitors of Klarna or any credit products or other financial services * Practices and methods abusing trading for tax fraud or tax evasion * Pyramid schemes * Financial products or services, such as investment services, financial advice, money services including money transfer, currency exchange, virtual, digital, or cryptocurrencies (e.g., Bitcoin), binary options * Financial services provided without appropriate licenses as required by law.High risk securities, share dealing services (e.g., Tipser), Short term payday loans, timeshares | | Gambling | * Gambling, betting or lotteries | | Health and medical services | * Fat burners * Medical procedures * Diet pills and regimens * Nutraceuticals claiming unrealistic results * Self-diagnosis tests for diseases * Fertility clinics and fertility research * UV tanning equipment or services | | Illegal products or services | * Practices misleading or deceiving consumers or discarding or avoiding consumer protection laws * Services designed to promote infringements of intellectual property rights, e.g., by bonus programs for uploading unauthorized digital content and unauthorized file sharing or streaming * Digital downloads promoting illegal or unethical services * Content which is false or likely to mislead or deceive consumers, promises or suggests unrealistic outcomes, or violates consumer protection laws * Content that spreads misinformation, disinformation, or conspiracy theories * Advertising content that potentially encourages imitation of unsafe, inappropriate, or otherwise illegal behavior * Defamatory, libelous, or slanderous content and any misleading information * Unauthorized ticket reselling * Counterfeit products and illegally acquired goods, including knockoff products, brand-name replicas, goods wrongfully advertised as authentic, copyright infringements, services designed to promote infringements of intellectual property rights, e.g. by bonus programs for uploading unauthorized digital content and unauthorized file sharing or streaming, unlicensed copies. * Goods and services, or marketing of such, violating any law. * Orders, services and practices that relate to any form of illegal activity, including without limitation, money laundering, terrorist financing, human trafficking, political corruption, vat fraud, tax evasion, and illegal wildlife trafficking. * Illegal business methods, practices, products or services. * Practices misleading or deceiving consumers or discarding or avoiding consumer protection laws. * Practices or methods constituting acts of modern slavery in any part of a business or its supply chains. Such practices or methods include any deprivation of a person’s liberty in order to exploit them for personal or commercial gain. * Products and services provided without license as required by law. * Sanctioned goods or services, or goods or services originating from sanctioned countries or individuals, including travel to and accommodation in countries subject to sanctions. | | Religion | * Psychics, spiritual or religious services | | Tattoos | * Tattoos or body branding | | Tobacco | * Tobacco and tobacco-related products | | Weapons and hazardous materials | * Weapons, including knives (but excluding kitchen knives and cutlery) * Firearms and ammunition * Dual-use products, which may have a legitimate use but also an illegitimate use (e.g., global positioning satellites, missiles, nuclear technology, chemical and biological tools, night vision technology, thermal imaging, some models of drones, aluminum pipes with precise specifications, or certain kinds of ball bearings) | | Wildlife Trade | * Trade with protected animals or plants or products originating from protected animals or plants | ## Prohibited content  The following content restrictions apply due to advertising standards, legal requirements, and consumer protection laws across various regions. Even when promoting permitted products or services, advertisers must adhere to these content guidelines to ensure compliance and responsible marketing: - Aggressive marketing, including messaging which suggests the product or service being advertised is a necessity, or that the consumer is obligated or will be at a serious disadvantage if they do not purchase the product or service. Klarna does not allow manipulative or coercive advertising in any advertising where Klarna is the publisher. - Any person shown to be in a potentially dangerous situation, such as someone holding a weapon or an unattended child standing near the edge of a cliff. - Any imagery or messaging that is targeted directly to children under the age of 18. - Any imagery or messaging targeted at those with mental or medical health conditions.  - Express or implied claims about environmental benefits.  - Business practices that may cause brand or reputational harm to Klarna.  - The objectification of a person in a sexual manner to sell a product or service. Klarna maintains that all advertising shall contain ethical representation of subjects and will not tolerate exploitation of any kind. - Imagery that can be considered cruel or abusive, such as the mistreatment of animals or humans. - Content that glamorizes the use of drugs, cigarettes, cigars, tobacco or excessive consumption of alcohol. - Excessive violence or visual gore, such as blood or serious physical injury. - Exploitation or depiction of sensitive events, such as pandemics, natural disasters, wars or conflicts, or incidents of mass suffering. - Imagery or messaging that could be considered to be invasive to another person's privacy. - Any content or campaigns for or against a politician or political party or messaging targeted towards a particular political affiliation. - Content that infringes upon or violates the intellectual property rights of any third party.  - Content relating to controversial topics or current events. - Content that may be considered offensive or implying or attempting to generate a negative self-image.  - Outbound or inbound tele-marketing. - Pornography, nudity, or sexually explicit content. - Use of obscene language, including purposefully obscured profanity, such as “S\*#T” or commonly known acronyms such as “WTF”. - Use of promotions that do not meet professional and business standards (e.g. gimmicky use of words, numbers, letters, punctuation, or symbols such as FREE, f-r-e-e, and F₹€€!!) To prevent fraud and ensure advertising is fair to consumers, Klarna strictly prohibits such advertising tactics. - Advocating or demeaning a religion or use of religious symbols. - Discriminative content towards race, color, national origin, religion, disability, sex, gender, sexual orientation, age or similar category. - Content which is false or likely to mislead or deceive consumers, promises or suggests unrealistic outcomes, or violates consumer protection laws. Klarna does not tolerate advertising that is misleading or has the potential to mislead consumers. - Content that spreads misinformation, disinformation, or conspiracy theories  - Content featuring the unlawful use of workforce, including tax evasion. - Advertising content that potentially encourages imitation of unsafe, inappropriate or otherwise illegal behavior.  - Defamatory, libelous, or slanderous content and any misleading information.  - Ads must not disclose anyone’s personal data, network identity information, such as usernames, passwords, password protection answers, or a user's personal digital certificates.  ## Forbidden practices  Some of business practices are forbidden to be performed since it might affect Klarna’s reputation, business structure and, the most important, its consumers: - Abusing Klarna Ads Services (setting manipulation, circumvention of Klarna policies). - Online tracking technologies, such as web beacons, tracking pixels, etc., are strictly disallowed unless previously approved. Compliance with online privacy regulations and industry standards is required. It is entirely your responsibility as an advertiser to ensure compliance with applicable regulations. - Promotion of products or services that are designed to enable dishonest behavior (e.g. hacking, fishing, blackmail, or ads that inappropriately incentivize downloads or the manipulation, filtering or faking of reviews, feedback, taps, or downloads). - Advertisers may not process individuals’ personal data without an appropriate legal basis or process it in any other unlawful manner. Personal data should be handled with appropriate care and security measures in place. ## Prohibited jurisdictions and regions Klarna’s services may not be used by businesses registered or operating in the following jurisdictions. Additionally, Advertising is prohibited for any products or services for companies, websites, or other merchants for the sale of goods or services shipping from, or for the purchase of goods that would be shipped to consumers with a billing or shipping address in the below regions: - Afghanistan - Belarus - Central African Republic - Crimea - Cuba - Democratic Republic of the Congo - Donetsk - Guinea - Guinea Bissau - Haiti - Iran - Iraq - Kherson - Korea, North (Democratic People's Republic of Korea) - Lebanon - Libya - Luhansk - Mali - Myanmar - Nicaragua - Niger - Nigeria - Pakistan - Palestine - Russia - Somalia - South Sudan - Sudan - Syria - Venezuela - West Bank (Palestinian Territory) - Western Sahara - Yemen - Zaporizhzhia - Zimbabwe ## Complaints review process  In case of any external complaints from consumers or requests from authorities, merchants must immediately notify Klarna to investigate the risks and take mitigating measures if needed. The mitigation measures include Klarna’s right to cancel/remove the ad which breaches current laws and regulations or infringes third party rights.  *For all complaints, please reach out to your Klarna merchant representative, advertising service provider, advertising agency, or Klarna customer service at merchant@klarna.com.* --- # Source: https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/additional-features.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/payments-for-shopify/additional-features.md # Source: https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/additional-features.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/payments-for-shopify/additional-features.md # Source: https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/additional-features.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/payments-for-shopify/additional-features.md # Source: https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/additional-features.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/payments-for-shopify/additional-features.md # Source: https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/additional-features.md # Additional features ## Depending on the market and the details of your Klarna deal, you may be able to add some extra features to your store. United Kingdom,United States of America ## Dynamic promotional offers Klarna lets you dynamically trigger promotional credit offers. Your Klarna account manager can help you determine the criteria for custom offers and a standard naming convention that will be referred to when requesting such offers via our API. When initiating a payment session in which you want to offer custom financing, you have to include one or multiple promotional codes in the `custom_payment_method_id` array in the create session request. Finland,Norway,Sweden ## Using SmartPost with Klarna If you're using SmartPost as a shipping option, you must share the following details with Klarna when creating an order: - The SmartPost address in the `billing_address`\[ billing_address object when creating an order\]. - The phone number to which the SmartPost SMS PIN is sent. We use this phone number for risk assessment. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/payments/advanced-features.md # Advanced Features in Salesforce Commerce Cloud ## This section introduces Klarna’s ability to apply payment method-based promotions, allowing you to configure product, order, and shipping discounts based on payment choices. It also explains how Klarna’s API handles price adjustments and taxation, offers details on “Buy Online, Pickup In Store” (BOPIS) integration, and discusses subscription product configurations, including recurring order handling. ### Klarna Payment method based promotions Starting with the B2C 20.7 release, merchants can use payment methods as qualifiers for product, order, and shipping promotions. By default, when a promotion is configured to use a payment method as a qualifier, the total order amount is shown to the customer upon reaching the review page. This can cause the Klarna authorization call to be made for a higher amount than the final total. To resolve this, when a customer selects a payment option in the billing section, a backend call is triggered. This call recalculates the basket totals, including any applicable promotions, and updates the Klarna session details. Consequently, the Klarna iframe widgets and the mini summary section on the storefront are refreshed to display the final order details. For payment methods other than Klarna, this logic should be customized by the merchant to handle any third-party payment integrations. ### Price adjustment taxation handling Out of the box, the Klarna API sends product and shipping method details along with relevant discounts as separate line items, as shown below: ``` json "order lines": [ { "type": "discount", "name": "5 Off Ties Promotion" "reference": "682875540326M_$5_off_ties_promotion", "quantity": 1, "merchant_data": "5ties", "unit_price": -500, "tax_rate": 500, "total_amount": -500, "total_tax_amount": 0, "total_discount_amount": 0, "product_url": null, "image_url": null }, { "type": "physical", "name": "Checked Silk Tie", "reference": "682875540326M", "quantity": 1, "unit_price": 1919, "tax_rate": 500, "total_amount": 1919, "total_tax_amount": 68, "total_discount_amount": 0 } ``` #### Handling gross taxation with adjusted prices Merchants using gross taxation might opt to enable the “Tax Products and Shipping Only Based on Adjusted Price” preference. This preference is located under **Merchant Tools\> Site Preferences\> Pricing and Promotion**, and ensures that price adjustments are not taxed. The setting `kpPromoTaxation` has been introduced for this purpose. Merchants should update this setting to match their promotion configuration as follows: - **Price (Based on Price):**The product, shipping, and their discounts will be sent as separate line items. This is the default setting. - **Adjustment (Based on Adjusted Price):** When selected, the product or shipping method line item will be sent with the attribute `total_amount` matching the prorated price and the attribute `total_discount_amount` matching the total sum of all discounts for this item. ``` json "order lines": [ { "type": "physical", "name": "Checked Silk Tie", "reference": "682875540326M", "quantity": 1, "unit_price": 1919, "tax_rate": 2200, "total_amount": 1419, "total_tax_amount": 256, "total_discount_amount": 500, "product_url": null, "image_url": null } ``` Enabling this setting is not required for storefronts using net taxation, as the tax is not included in the product's base price. In such cases, the total order sales tax is sent to Klarna as a separate line item, not at the product or shipping line-item level. ### Buy online, pickup in store (BOPIS) When store pickup is enabled on the storefront, the integration sends store details to Klarna during the authorization request and when placing the Klarna order. Store information is only sent after the customer interacts with the Klarna payment method widgets. #### Address handling The store address(es) are included in the Enhanced Merchant Data (EMD) attachment under the `other_delivery_address` attribute when applicable. The handling of addresses in Klarna orders with store pickup is as follows: - **Orders with Only Store Pickup Shipments:** If there is no home delivery address, the shipping address in the Klarna order will be set to the first store shipment's details. - **Orders with Both Store Pickup and Home Delivery Shipments:**The home delivery address will be used as the shipping address in the Klarna calls. - **Orders with No Store Pickups:** No information is sent in the `other_delivery_address` attribute. ``` json { "attachment": { "content_type": "application/vnd.klarna.internal.emd-v2+json", "body": { "other_delivery_address": [{ "shipping_method": "store pick-up", "shipping_type": "normal", "first_name": "Test", "last_name": "Customer", "street_address": "1487 Bay St", "street_number": "", "postal_code": "01109", "city": "Springfield", "country": "US" }] } } } ``` For more information on the options, refer to the [Klarna API reference](https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/extra-merchant-data.md). ### Subscriptions #### Existing basket subscriptions The Klarna cartridge supports subscription handling, allowing merchants to offer products as subscriptions, manage subscription details, and handle recurring orders seamlessly. ##### Configuration Subscription details are configured at the product level. Products can be set as subscription-only, standard, or both. The trial period must be an integer value. ![ Product subscription configuration](ZvMitrVsGrYSv4_A_SFCC-Productsubscriptionconfiguration.jpeg) *Product subscription configuration* ##### Cart page There are two types of subscription products: - **Subscription-only Products**: These are automatically added to the shopping cart as subscription line items. - **Dual-purpose Products**: For products that can be either subscription or standard, users can select their preference on the cart page. ![ Subscription products on cart page](ZvMjC7VsGrYSv5AT_SFCC-Subscriptionproductsoncartpage.jpeg) *Subscription products on cart page* The checkout process will not proceed if the cart contains a mix of standard and subscription products with different trial periods, or if some products have a trial period while others do not. Dropdown menus with predefined values appear on the cart page when there is at least one subscription product in the cart. These values can be configured in the Administration panel under **Site Development\> System Object Types\> Basket - Attribute Definitions**. The attributes available for configuration are: - `kpSubscriptionFrequency` - `kpSubscriptionPeriod` ![ Subscriptions details in cart page](ZvMjY7VsGrYSv5Bu_SFCC-Subscriptionsdetailsincartpage.jpeg) *Subscriptions details in cart page* ##### Checkout Only logged-in users can complete a subscription checkout. Session intent is defined based on the basket content: - `tokenize`**tokenize**: Basket contains products with a trial period; user is not charged on order creation. - `buy_and_tokenize`**buy_and_tokenize**: Basket contains subscription products without a trial period. - `buy`**buy**: Basket contains only standard products, no subscription products. For intents `tokenize` and `buy_and_tokenize`, a Klarna customer token for recurring payments is created and stored in the customer profile for future use. Upon order creation, the user profile is updated with subscription data: 1. **token**: Subscription token. 2. **enabled**: Status of the subscription. 3. **nextChargeDate**: Calculated date for the next subscription charge. 4. **subscriptionPeriod**: Enumerated value representing the subscription period ('week', 'month', or 'year'). 5. **subscriptionFrequency**: Numeric value representing the frequency of the subscription (1, 2, 3, 4, 5, 6, 15). 6. **subscriptionProductID**: ID of the corresponding subscription product. 7. **lastOrderID**: ID of the last order for the subscription. ##### Account subscription dashboard Users can view a full list of their subscriptions in the My Account section. They can cancel subscriptions, which will be displayed with an Inactive status. The Cancel Subscription button deactivates the customer token, preventing further charges. ![ My Account Subscription dashboard](ZvMj97VsGrYSv5EK_sfcc-MyAccountSubscriptiondashboard.jpeg) *My Account Subscription dashboard* #### Recurring subscription order creation A back-end job processes recurring subscriptions for each user in SFCC if subscriptions exist. The job iterates through customers and checks for subscriptions due for payment on the same day. ##### Order creation process **Create new order**: Using data from`lastOrderID`, a new order is created, and a charge call is made to Klarna using the token and price from `lastOrderID`. **Update details on success**: On success, `nextChargeDate` is updated based on `subscriptionPeriod`, and `lastOrderID` is set to the ID of the newly placed order. The Subscription Dashboard is updated accordingly. ##### Handling failures **Retry mechanism**: Merchants can configure a retry mechanism with specific retry intervals. If retries fail, the subscription can be deactivated. - **Retry**: Boolean field (Yes/No). - **Number of retries**: Number of retries (1, 2, etc.). - **Retry frequency**: Interval in days (1, 2, etc.). **Cancel subscription**: If retry is disabled, the subscription is canceled. Orders with trial period subscriptions are paid after the trial period ends. On the next charge date, a new order is created with the channel type set to `SUBSCRIPTIONS`. #### New `inlineitem` subscripion ##### PDP Merchants can customize the PDP templates to display the subscription input and customize the KEC or add-to-bag button functionality to send these subscription details in the KEC or add to bag request. Additionally, merchants can choose in which custom attributes these subscription details should be stored for example, SFCC lineitem attribute. ![PDP](PDP.png) *PDP* Merchants can customize the cart templates to display the subscription details which the customer selected in PDP page. The subscription details can only be added from PDP and not from cart. ![Checkout](Checkout.png) *Checkout* ##### Checkout Both guest and logged-in customers can purchase subscription purchase. The subscription details for each line item are passed to KEC request. Session intent is defined based on the basket content: - `tokenize`: Basket contains subscription products with a trial period; user is not charged on order creation. Merchants should handle the lineitem unit price calculation. For trial products, the unit price should be set as zero. - `buy_and_default_tokenize`: Basket contains at least one subscription products without a trial period or both subscription and standard products. - `buy`: Basket contains only standard products, no subscription products. ===== Subscription object is added to each order line item as below: ``` json { "order_lines": [ { "type": "physical", "subscription": { "name": "Savings Subscription {{1234834}}", "interval": "MONTH", "interval_count": 1 }, "reference": "19-402", "name": "Prater Ink Cartridges", "quantity": 1, "unit_price": 360, "tax_rate": 0, "total_amount": 360, "total_discount_amount": 0, "total_tax_amount": 0 } ] } ``` Order `lineitem` sorting ===== The order line items are sorted in each session and order request payload according to priority, with frequency taking precedence, followed by amount. The interval and interval count are converted into days, and the line items are then organized by priority. Products with the longest duration in days are listed first, followed by standard products. For monthly periods, the duration is set to 30 days, and for yearly periods, it is set to 360 days. If two products have the same frequency, the product with the higher price will take priority. | **Interval** | **Converted days** | |--------------|--------------------| | Day | 1 day | | Week | 7 days | | Month | 30 days | | Year | 360 days | ## Compatibility This cartridge has been tested against API Version 22.6 (Compatibility Mode: 22.7) and SFRA version 7.0.0. ## Privacy and payment ### GDPR compliance The cartridge is compliant with GDPR recommendations and follows best practices to ensure only necessary Personally Identifiable Information (PII) is transmitted to authorize the payment method. For detailed guidelines, refer to the implementation best practices [here](https://docs.klarna.com/policies/payment-solutions-guidelines/eu). ### EMD (Extra Merchant Data) The cartridge supports sending additional information on the customer's past purchase history and "Buy Online, Pickup in Store" (BOPIS) store addresses when enabled in custom preferences under "Attachments" (`kpAttachments`). The types of data that can be sent as an attachment are detailed[here](https://docs.klarna.com/api/extra-merchant-data/). EMD is required for certain types of merchant orders and generally improves acceptance rates (e.g., `customer_account_info`: past interactions with the merchant store). EMD is included as part of the authorization step in the Commerce Cloud checkout. The data sent to Klarna is customizable and can be viewed in `int_klarna_payments/scripts/payments/additionalCustomerInfo.js`. This script should return a JSON string to be used as the value for the body sub-field of the attachment field as described [here](https://docs.klarna.com/api/extra-merchant-data/). **Example schema for additional customer information** If the example `additionalCustomerInfo.js` file is used unchanged, the data sent to Klarna follows this schema: ``` json { "$schema": "http://json-schema.org/draft-03/schema#", "id": "http://klarna.com/v2/emd#", "description": "Extended Merchant Data Payload Schema", "type": "object", "properties": { "customer_account_info": { "type": "array", "items": { "type": "object", "properties": { "unique_account_identifier": { "type": "string", "maxLength": 24 }, "account_registration_date": { "description": "ISO 8601 e.g. 2012-11-24T15:00", "type": "string", "format": "date-time", "pattern": "^[0-9]{4}-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9](:[0-5][0-9])?Z?$" }, "account_last_modified": { "description": "ISO 8601 e.g. 2012-11-24T15:00", "type": "string", "format": "date-time", "pattern": "^[0-9]{4}-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9](:[0-5][0-9])?Z?$" } } } }, "payment_history_full": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "unique_account_identifier": { "type": "string" }, "payment_option": { "type": "string", "enum": ["card", "direct banking", "non klarna credit", "sms", "other"] }, "number_paid_purchases": { "type": "integer" }, "total_amount_paid_purchases": { "type": "number" }, "date_of_last_paid_purchase": { "description": "ISO 8601 e.g. 2012-11-24T15:00", "type": "string", "format": "date-time", "pattern": "^[0-9]{4}-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9](:[0-5][0-9])?Z?$" }, "date_of_first_paid_purchase": { "description": "ISO 8601 e.g. 2012-11-24T15:00", "type": "string", "format": "date-time", "pattern": "^[0-9]{4}-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9](:[0-5][0-9])?Z?$" } } } }, "other_delivery_address": { "type": "array", "items": { "type": "object", "additionalProperties": false, "properties": { "shipping_method": { "type": "string", "enum": ["store pick-up", "pick-up point", "registered box", "unregistered box"] }, "shipping_type": { "type": "string", "enum": ["normal", "express"] }, "first_name": { "type": "string" }, "last_name": { "type": "string" }, "street_address": { "type": "string" }, "street_number": { "type": "string" }, "postal_code": { "type": "string" }, "city": { "type": "string" }, "country": { "type": "string" } } } } } } ``` **Example data** ``` json { "attachment": { "content_type": "application/vnd.klarna.internal.emd-v2+json", "body": { "customer_account_info": [{ "unique_account_identifier": "5509d9f7c8720c0e4575154b", "account_registration_date": "2015-03-18T20:03:03Z", "account_last_modified": "2015-03-18T20:03:03Z" }], "payment_history_full": [{ "unique_account_identifier": "5509d9f7c8720c0e4575154b", "payment_option": "card", "number_paid_purchases": 23, "total_amount_paid_purchases": 140023, "date_of_last_paid_purchase": "2015-03-18T20:03:03Z", "date_of_first_paid_purchase": "2015-03-18T20:03:03Z" }], "other_delivery_address": [{ "shipping_method": "store pick-up", "shipping_type": "normal", "first_name": "Test", "last_name": "Customer", "street_address": "1487 Bay St", "street_number": "", "postal_code": "01109", "city": "Springfield", "country": "US" }] } } } ``` When the customer uses Guest Checkout, the EMD sent includes `payment_history_full[0].unique_account_identifier` (cqcid value set by SFCC), and all other fields are empty. ### PCI-DSS compliance The virtual card (MCSv3) solution enables settlements using individual virtual cards issued against a Klarna order. To comply with PCI-DSS requirements, merchants must ensure that data is securely maintained and transmitted as part of their operation in their live store environment. The required steps must be completed in consultation with your payment service provider/acquirer before going live. Review the order export details required for virtual card-based Klarna orders in advance. Any historical decrypted PCI data should be expunged, regardless of the VCN validity date. **DO NOT SAVE UNENCRYPTED PCI DATA ON THE SERVER!** --- # Source: https://docs.klarna.com/conversion-boosters/express-checkout/integrate-express-checkout/mobile-sdk-integration/android.md # Integrate Express Checkout - Android ## This guide will show you how to use Klarna Mobile SDK to implement Express Checkout in your Android mobile application, providing a fast and simple shopping experience for your users. Please review [this brief guide](https://docs.klarna.com/conversion-boosters/express-checkout/before-you-start/) first to ensure you are prepared to offer this integration to your customers. ![Klarna Express Checkout Button|center|670x670px](kec-item-page.png) *Klarna Express Checkout Button|center|670x670px* ## Integration steps 1. **[Prepare](https://docs.klarna.com#prepare):** Make sure you have the credentials and setup for Klarna Express Checkout. 2. **[Present the button](https://docs.klarna.com#present-the-button-mobile-app):** (Mobile App) Create an instance of `KlarnaExpressCheckoutButton` with session parameters and present in your native app. 3. **[Handle authorization](https://docs.klarna.com#handle-authorization-mobile-app):** (Mobile App) Once the customer clicks the button and authorizes the payment, handle response from the SDK. 4. **[Create an order](https://docs.klarna.com#create-an-order-server-side):** (Server-side) Once a session is authorized, create an order with authorization token via your backend. ### **How it works** For a Mobile SDK integration your Payment Server and Mobile App must work together to offer one-click checkout experience: {{#mermaid: sequenceDiagram participant Consumer participant Merchant App participant Mobile SDK participant Merchant Server participant Klarna API Consumer->>Merchant App: Navigate to checkout, shopping cart, product or wishlist page Merchant App->>Mobile SDK: Create Express Checkout Button with session information Merchant App->>Merchant App: Display the Express Checkout Button Consumer->>Mobile SDK: Click the Express Checkout Button Note over Mobile SDK: Consumer completes to purchase flow. Mobile SDK-->>Merchant App: Provide authorization token (valid for 60 minutes) Merchant App->>Merchant Server: Sends the authorization token for creating order Merchant Server->>Klarna API: Create Order POST (setup/payments/v1/authorizations/{authorizationToken}/order) Klarna API-->>Merchant Server: Provide order_id and redirect_url Merchant Server-->>Merchant App: Provide order details Merchant App->>Consumer: Redirected to order confirmation screen }} ## Prepare ### Choose applicable placements The right placement of the Express button can significantly enhance your user experience, leading to higher conversion rates and increased sales. ![ You can place the Express checkout button at multiple stages of the shopping journey.](5a558ef7-52d7-4fad-a3fa-7abbde893601_PlacementOverview.jpeg) *You can place the Express checkout button at multiple stages of the shopping journey.* To learn more about placements, check out [this section](https://docs.klarna.com/conversion-boosters/express-checkout/additional-resources/button-placement/). ### Prerequisites Before you integrate Express checkout, check that you meet the following prerequisites: 1. Make sure to have a payment solution with Klarna. Before integrating Express checkout into your website, you need to have a merchant account with Klarna and [Klarna payments](https://docs.klarna.com/payments/web-payments/before-you-start/prepare-your-integration/#preapre-your-integration) or [Klarna checkout](https://docs.klarna.com/conversion-boosters/express-checkout/before-you-start/) integrated in your checkout.   2. Make sure to allowlist the domain of the page on which Express checkout will be integrated.If not all the domains are added to the allowlist, Express checkout will still load, however, the customer will see a "We couldn't load the next screen" error. To allowlist the domain URLs, follow these steps:  - Log into Klarna Merchant portal. If you want to test Express checkout, log into the playground Merchant portal. If you want to build a live integration, log into the production Merchant portal. - Once logged in, go to **Payment settings**\> **Client Identifiers**. In the **Allowed Origins for your integrations** section, click **Manage origins**.    - In the **Register new origin** field, add your domain’s URL. Then, click **Register**. The registered domain is now listed in **Allowed origins**. 3\. Generate a client identifier that will let you authenticate requests sent to Klarna: - Log into Klarna Merchant portal. - Once logged in, go to **Payment settings**\> **Client Identifiers**. - To generate a new client identifier, navigate to **Client Identifiers for your integrations** and click **Generate client identifier**.  If you’ve previously generated a client identifier for your store, you can use it to build your Express checkout integration. ## Set up your app ### Import the SDK #### Add the Repository Add the Klarna Mobile SDK maven repository: ### Kotlin ``` kotlin repositories { maven("https://x.klarnacdn.net/mobile-sdk/") } ``` ### Groovy ``` groovy repositories { maven { url 'https://x.klarnacdn.net/mobile-sdk/' } } ``` #### Add the Dependency Add the SDK as a dependency to your app: ### Kotlin ``` kotlin dependencies { implementation("com.klarna.mobile:sdk:2.x.x") } ``` ### Groovy ``` groovy dependencies { implementation 'com.klarna.mobile:sdk:2.x.x' } ``` To read more about Mobile SDK versioning policy, check out [this section.](https://docs.klarna.com#versioning-policy) ## **Present the button (Mobile App)** Create an instance of the `KlarnaExpressCheckoutButton` when your cart page or product detail page is loaded. This ensures that the button is readily available for user interaction. Depending on your integration setup, you can create and initiate the Express Checkout button using either a client-side session or a server-side session: - **Client-side session:** Use this method if you prefer to set a client ID from the Merchant Portal. This approach is typically used when the session management is handled entirely on the client side. You would need to provide the order details in this approach. - **Server-side session:** Choose this method if you have a client token generated by the backend for the server-side session. This is suitable when you want to manage sensitive session data on the server. You do not need to provide the order details with this approach. Once the button is created, add it to your screen. This involves adding the button to the appropriate view hierarchy in your application's user interface. ``` kotlin val sessionOptions: KlarnaExpressCheckoutSessionOptions = KlarnaExpressCheckoutSessionOptions.ClientSideSession( clientId =”myClientId”, autoFinalize = true, collectShippingAddress = true, sessionData = mySessionData ) val expressCheckoutButtonOptions = KlarnaExpressCheckoutButtonOptions( locale =”en-US”, sessionOptions = sessionOptions, styleConfiguration = styleConfiguration, environment = KlarnaEnvironment.PRODUCTION, region = KlarnaRegion.NA, theme = KlarnaTheme.LIGHT, callback = myCallback, loggingLevel = KlarnaLoggingLevel.Verbose ) val expressCheckoutButton = KlarnaExpressCheckoutButton( context = this, options = expressCheckoutButtonOptions ) expressCheckoutButton.layoutParams = LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT ) parent.addView(expressCheckoutButton) ``` #### Parameters ##### **KlarnaExpressCheckoutButton** | Param | Description | |----|----| | `Context` | The context of the Activity the button is in. | | `KlarnaExpressCheckoutButtonOptions` | Contains all the options for the button. | ##### **KlarnaExpressCheckoutButtonOptions** | Param | Description | |----|----| | `KlarnaExpressCheckoutSessionOptions` | Authorization options that will be used for authorization upon a user click. | | `KlarnaExpressCheckoutButtonCallback` | Callback that the merchant can use to get notified of the key events happening in the flow. | | `locale` | Locale of the button text. The default is “en-US”. | | `KlarnaExpressCheckoutButtonStyleConfiguration?` | Style configuration for the button, including button theme, button shape, and style. | | `KlarnaEnvironment` | Operating environment of the button. The default is \`PRODUCTION\`". | | `KlarnaRegion` | Geographical region for the button’s API requests. The default is \`NA\`. | | `KlarnaTheme` | Theme of the flow. The default is \`LIGHT\`. | | `KlarnaLoggingLevel` | Logging level of the integration. The default is \`off\`. | ##### **KlarnaExpressCheckoutSessionOptions.ClientSideSession** | Param | Type | Description | |----|----|----| | `clientId` | String | Partner client ID from Merchant Portal. | | `sessionData` | String | JSON string used to update the session. | | `autoFinalize` | Boolean | Whether the authorization should automatically be finalized. The default is true. | | `collectShippingAddress` | Boolean | Whether the merchant needs the customer's shipping address from Klarna. The default is false. | ##### **KlarnaExpressCheckoutSessionOptions.ServerSideSession** | Param | Type | Description | |----|----|----| | `clientToken` | String | Client token generated by the backend for the server-side session. | | `sessionData` | String | JSON string used to update the session. The default value is null. | | `autoFinalize` | Boolean | Whether the authorization should automatically be finalized. The default is true. | | `collectShippingAdress` | Boolean | Whether the merchant needs the customer's shipping address from Klarna. The default is false. | ##### **KlarnaExpressCheckoutButtonStyleConfiguration** | Param | Description | |----|----| | `KlarnaButtonTheme?` | Color theme of the button. The default is \`DARK\`. | | `KlarnaButtonShape?` | Shape of the button. The default is \`ROUNDED_RECT\`. | | `KlarnaButtonStyle?` | Style of the button. The default is \`FILLED\`. | ## **Handle authorization (Mobile App)** Once a customer clicks the Express Checkout button, the Klarna payment authorization process will begin. You must provide a callback object when creating the button, which will handle Klarna's response. This callback is essential for managing the payment flow and updating the UI based on the authorization result. ### Authorization Callback If the authorization is successful, you will receive an authorization token from the authorization response within the callback object. ``` kotlin override fun onAuthorized( view: KlarnaExpressCheckoutButton, response: KlarnaExpressCheckoutButtonAuthorizationResponse){ if (response.approved && !response.authorizationToken.isNullOrBlank()) { // authorization is successful, backend may create order } if (response.finalizeRequired) { // finalize call is required, only applicable if you are setting autoFinalize to false // use response.clientToken to finalize } } ``` #### Parameters ##### **KlarnaExpressCheckoutButtonAuthorizationResponse** | Param | Type | Description | |----|----|----| | `approved` | Boolean | Indicates whether the payment was approved. | | `showForm` | Boolean | Indicates whether the payment is still available for authorization. | | `finalizeRequired` | Boolean | Indicates whether the session requires finalization. | | `authorizationToken` | String | The authorization token for the payment, if applicable. | | `clientToken` | String | The client token for the session, if applicable, intended to be used for finalization. | | `sessionId` | String | The ID of the Klarna Payments session. | | `collectedShippingAddress` | String | Shipping address collected during the session, if applicable. | | `merchantReference1` | String | Merchant references provided in the session creation. | | `merchantReference2` | String | Additional merchant reference provided in the session creation. | #### Error Callback In case an error happen in the SDK or technical errors during authorization, SDK will notify you via the `onError` method: ``` kotlin override fun onError(view: KlarnaExpressCheckoutButton, error: KlarnaExpressCheckoutError) { // Handle different failure scenarios by checking the error name if (error.name == KlarnaExpressCheckoutError.AuthorizationFailed) { // Handle the AuthorizationFailed error println("Authorization failed: ${error.message}") } // ... } ``` ##### Parameters ###### **KlarnaExpressCheckoutError** | Param | Type | Description | |----|----|----| | `name` | String | Unique name of the error. | | `message` | String | Elaborate description of the error. | | `isFatal` | Boolean | Determines whether the error is fatal. If the error is fatal, the button should not be shown any further. | | `sessionId` | String | Mobile SDK’s session ID. | | `params` | String | A key-value map/dictionary of any additional error parameters. | The table below lists all the different error names defined as constant values in the `KlarnaExpressCheckoutError`: | Error Name | Description | |----|----| | `InvalidClientID` | Indicates that the client ID is not valid; for example, it is null or blank. | | `InvalidClientToken` | Indicates that the client ID is not valid. For example it is null or blank. | | `MissingCallbackReference` | Indicates that the callback reference is lost. | | `AlreadyInProgress` | Indicates that the Klarna Express Checkout flow is already in progress. | | `AuthorizationFailed` | Indicates that the authorization has failed. | | `ButtonRenderFailed` | Indicates that the button could not be rendered successfully. | | `InvalidAuthorizationResponseParams` | Indicates that the authorization response could not be parsed caused by invalid/missing params. | ### Finalize the session This is only required of `autoFinalize` is set to `false` in session options.If the session needs to be finalized, you’ll need to perform this last step to get an authorization token from your checkout confirmation screen. This can be done via [KlarnaPaymentView](https://docs.klarna.com), using the `clientToken` from `KlarnaExpressCheckoutButtonAuthorizationResponse` to initialize the view and calling `finalize` method of that view. ## **Create an order (Server-side)** Once you have the authorization token, you can [create an order](https://docs.klarna.com/api/payments/#operation/createOrder). When creating the order, make sure the shipping address provided in the request matches the collected shipping address returned alongside the authorization token. To continue with the purchase, you have to create an order in Klarna's system. This step takes place in the server side through the Klarna payments API. ### Create an order To create an order for a one-time payment, send a `POST` request to the `{apiUrl}/payments/v1/authorizations/{authorizationToken}/order` endpoint and include `authorization_token` in the path. For example, if the `authorization_token` is `b4bd3423-24e3`, send your request to the `{apiUrl}/payments/v1/authorizations/b4bd3423-24e3/order` endpoint. ``` json { "purchase_country": "US", "purchase_currency": "USD", "billing_address": { "given_name": "John", "family_name": "Doe", "email": "john@doe.com", "title": "Mr", "street_address": "Lombard St 10", "street_address2": "Apt 214", "postal_code": "90210", "city": "Beverly Hills", "region": "CA", "phone": "333444555", "country": "US" }, "shipping_address": { "given_name": "John", "family_name": "Doe", "email": "john@doe.com", "title": "Mr", "street_address": "Lombard St 10", "street_address2": "Apt 214", "postal_code": "90210", "city": "Beverly Hills", "region": "CA", "phone": "333444555", "country": "US" }, "order_amount": 10, "order_tax_amount": 0, "order_lines": [ { "type": "physical", "reference": "19-402-USA", "name": "Battery Power Pack", "quantity": 1, "unit_price": 10, "tax_rate": 0, "total_amount": 10, "total_discount_amount": 0, "total_tax_amount": 0, "product_url": "https://www.estore.com/products/f2a8d7e34", "image_url": "https://www.exampleobjects.com/logo.png" } ], "merchant_urls": { "confirmation": "https://example.com/confirmation", "notification": "https://example.com/pending" }, "merchant_reference1": "45aa52f387871e3a210645d4", } ``` ###### *A`POST` request to create an order for a one-time payment.* #### Success response When you receive a success response, the customer gets charged and the Klarna payments session is closed. As part of the response, you receive the following details: - `order_id`, an order identifier that you can later use to capture or refund the order using the [Order management API](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-3-create-an-order/) - `redirect_url`, a URL to which you redirect the customer. This isn't included in the response received if you didn't include the URL when [initiating a payment](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-1-initiate-a-payment/) - `fraud_status`, an indicator of whether the transaction is suspected to be legitimate or [fraudulent](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-3-create-an-order/#special-considerations-for-one-time-payments) - `authorized_payment_method`, the payment method selected by your customer for this purchase ``` json { "order_id": "3eaeb557-5e30-47f8-b840-b8d987f5945d", "redirect_url": "https://payments.klarna.com/redirect/...", "fraud_status": "ACCEPTED", "authorized_payment_method": "invoice" } ``` ###### *A success response to the order creation request for a one-time payment.* Send the customer browser to `redirect_url` provided in the response. Klarna places a cookie in the browser and redirects the customer back to the confirmation URL you provided when creating the session. This makes the checkout faster the next time the customer chooses to pay with Klarna. #### Error response If your request doesn't pass our validation, you'll receive an error response. The most common reasons why creating an order fails are: - placing the order more than 60 minutes after authorization - modifying purchase details after authorization without updating the payment session ``` json { "correlation_id": "6a9b1cb1-73a3-4936-a030-481ba4bb203b", "error_code": "ERROR_CODE", "error_messages": [ "ERROR_MESSAGE" ] } ``` ###### *An error response to the order creation request for a one-time payment.* Here are examples of common errors with troubleshooting suggestions. You can use the value in `correlation_id` to find entries related to the request under **Logs** in the Merchant portal. | Error code | Error message | Description | |----|----|----| | `NOT_FOUND` | `Invalid authorization token` | The authorization token has expired because the order was placed more than 60 minutes after authorization. To fix the error, [request a new `authorization_token`](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-3-create-an-order/#authorize-call) and use it to place the order. | | `BAD_VALUE` | `Not matching fields: [billing_address.postal_code]` | The data shared with Klarna in a previous step (`create_session`, `load()`, or `authorize()`) have been modified causing the validation to fail. | | `BAD_VALUE` | `Not matching fields: [Incorrect number of items in the cart. Expected: 2, Actual: 3]` | The order lines or the cart were updated after the `authorize()` call. Please ensure that the cart is kept as-is or send a new authorization request. | | `REJECTED` | `Rejected` | This is an edge case reason, but can be triggered in case the merchant is configured with being allowed to update the cart. This could be updated from the authorize to the place order in such a way that a new authorize is triggered. In this case this is rejected. | ## Button styling This section will help you customize the Express checkout button to ensure a seamless and trustworthy checkout experience, while leveraging Klarna’s strong brand to boost your conversions. Styling the Express checkout button is crucial for integrating it into your application in a way that complements your brand and encourages user engagement. To modify the style of the button, edit the source code as explained in this guide. ### Theme The theme defines the button’s color. You can change the theme by setting the value of the theme attribute. Apart from the default dark theme, you can apply the light theme to have the button displayed in white or choose auto mode so the theme is selected automatically based on the device’s configuration. The button’s default theme color is dark. As the theme attribute is optional, the default theme is applied both when you set the attribute to default or if you omit it from the source code altogether. There are three theme values available, `DARK` (default), `LIGHT` and `AUTO`. ![Dark theme (default)|center|320x320px](kec-button-roundedrect-dark.png) *Dark theme (default)|center|320x320px* ![Light theme|center|320x320px](kec-button-roundedrect-light.png) *Light theme|center|320x320px* ``` kotlin val buttonStyleConfiguration = KlarnaExpressCheckoutButtonStyleConfiguration( theme = KlarnaButtonTheme.DARK, shape = …, style = … ) ``` ### **Shape** Customizing the shape of the button to match your application’s look and feel is a key step in creating a visually cohesive and engaging user experience. To control the button's shape, change the value of the shape attribute. There are three shapes available with the Express checkout button: `ROUNDED_RECT` (default), `RECTANGLE` and `PILL`. ![KlarnaButtonShape.ROUNDED_RECT|center|320x320px](kec-button-roundedrect-dark.png) *KlarnaButtonShape.ROUNDED_RECT|center|320x320px* ![KlarnaButtonShape.PILL|center|320x320px](kec-button-pill-dark.png) *KlarnaButtonShape.PILL|center|320x320px* ![KlarnaButtonShape.RECTANGLE|center|320x320px](kec-button-rect-dark.png) *KlarnaButtonShape.RECTANGLE|center|320x320px* ``` kotlin val buttonStyleConfiguration = KlarnaExpressCheckoutButtonStyleConfiguration( theme = KlarnaButtonShape.ROUNDED_RECT, shape = …, style = … ) ``` ### **Style** Use the outlined style to make the button visible on all backgrounds. To apply this style, set the `KlarnaButtonStyle` attribute to `OUTLINED`, otherwise default value `FILLED` will be used instead. ![Outlined style|center|320x320px](kec-button-roundedrect-outlined.png) *Outlined style|center|320x320px* ``` kotlin val buttonStyleConfiguration = KlarnaExpressCheckoutButtonStyleConfiguration( style = KlarnaButtonStyle.OUTLINED, shape = …, theme = … ) ``` ## Optional ### Enable logging The SDK will log events and errors while it’s running, which you can read in **logcat** console. You can set the logging level for the SDK through the `loggingLevel` property of integration instance. ``` kotlin klarnaExpressCheckoutButton.loggingLevel = KlarnaLoggingLevel.Verbose ``` ## What's next Klarna Mobile SDK provides a full suite of mobile-first integrations, including Klarna products like:
![Pink_Standard_Consumer_(1).png](Pink_Standard_Consumer_(1).png) *Pink_Standard_Consumer_(1).png* ![Pink_Standard_Consumer_(2).png](Pink_Standard_Consumer_(2).png) *Pink_Standard_Consumer_(2).png* ![Android_native_checkout_.png](Android_native_checkout_.png) *Android_native_checkout_.png*

Sign in with Klarna

On-site Messaging

Payments

- **On-site Messaging**: Show contextual messaging let your customers know about the available payment options in pre-checkout: click [here](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/on-site-messaging-for-mobile/) to learn more. - **Sign in with Klarna**: Seamlessly identify and let users login via their Klarna account: click [here](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/mobile-integration/) to learn more. - **Payments**: Enhance your mobile app conversion with a seamless payment UX, click [here](https://docs.klarna.com) to learn more. Complete your integration with - [Order management](https://docs.klarna.com/payments/after-payments/order-management/before-you-start/what-is-order-management/) - [Settlements](https://docs.klarna.com/payments/after-payments/settlements/settlement-files/) - [End-to-end testing](https://docs.klarna.com/resources/developer-tools/testing-payments/test-cases/) - [Prepare for go live](https://docs.klarna.com/resources/developer-tools/testing-payments/go-live-checklist/) --- # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-hpp/api-documentation.md # Hosted Payment Page API This page will take you through the *Hosted Payment Page API* and explain how to interact with it and its concepts. Please make sure to understand why you should use the Hosted Payment Page and the Overview of the system before reading this documentation. The Hosted Payment Page works with a *Payment Provider* from the Klarna ecosystem, and you will need to create a *KP Session* before being able to create an *HPP Session*. A different integration guide is available for both platforms. - Read HPP with **Klarna Payments** integration guide In this document, the term *Payment Provider* refers to *Klarna Payments* and *Payment Session* refers to the corresponding *KP Session.* ## Ecosystem overview: components and objects **Klarna’s Hosted Payment Page** (*HPP*) requires that you integrate different server-side REST APIs from the Klarna environment and thus requires no client-side integration. The different APIs correspond to different Klarna products and have some defined objects that interact with each other. ![ Klarna Ecosystem](18970044-119b-4dc9-af79-fb1b9755d94c_HPP_components.jpeg) *Klarna Ecosystem* ### 1. Payment Provider API The *Hosted Payment Page* supports **Klarna Payments**, which will be referred to in this documentation as the *Payment Provider*. a. **Klarna Payments REST API**: create Payment Session, place Order - **KP Session**: a *Payment Session* on *Klarna Payments API*. It contains everything regarding the transaction and has a 48 hours lifetime. A *KP Session* is considered as *incomplete* until a *KP Authorization Token* has been used to create an *OM Order*. - **KP Authorization Token**: an authorization for the payment of a *KP Session* to the corresponding Consumer. The token is valid for 60 minutes and has to be used by your backend to create the corresponding *OM Order*. An authorization can be given multiple times to the same Consumer for the same *KP Session*, but only one can be used to create an *OM Order*. ### 2. Hosted Payment Page REST API The Hosted Payment Page REST API can be used to let Klarna host the client-side integration of Klarna Payments for you. You will have to create a Session and then distribute it. - **HPP Session**: a session on HPP that is linked to a *Payment Session*. When a *Payment Session* is being completed, canceled or expires, it is also the case for the *HPP Session*. An *HPP Session* has an unique URL where the Consumer can be redirected to and can be *distributed* via different distribution methods. ### 3. Order Management REST API: capture payment - **OM Order**: a due payment from the Consumer for defined goods. It is created using a *KP Authorization Token* with the *KP Session*. The *OM Order* will allow you to capture the payment when goods or service have been delivered, and manage the post purchase experience of the Consumer. In the Klarna Payments integration case, when placing the order with the *KP Authorization Token*, you can configure it to automatically capture the payment. In that case you won’t have to integrate the *Order Management API*outside of refunds. This should be limited to digital goods or when you limit it to some payment meth ## HPP Session ### Session Lifecycle ![ HPP Session Lifecycle](d64da141-0bfe-4c09-842b-158cdd13c7ff_HPP_lifecycle.jpeg) *HPP Session Lifecycle* ### Session Lifetime *KP Session* and *HPP Session* both have an expiration time, but the expiration is driven by the *Payment Session* which usually expires 48 hours after its creation. A Consumer will be able to pay on HPP until 1 hour before the *Payment Session* expiration. ## Authentication Klarna uses HTTP’s Basic auth to authenticate requests from Merchants. Use your API Credentials to add the corresponding HTTP headers to your requests, the credentials consist of two elements: - **Username**: a username linked to your Merchant ID at Klarna - **Password**: a unique password that is associated with the username Use your credentials to generate the token: Base64(username:password) | Username | DemoMerchant | |----|----| | Password | DemoPassword | | Calculated basic auth \|\| RGVtb01lcmNoYW50OkRlbW9QYXNzd29yZA== | | | Example of request | curl -X GET --header "Authorization: Basic RGVtb01lcmNoYW50OkRlbW9QYXNzd29yZA==" --header "Content-Type: application/json" | ## Environments and tests Klarna offers a test environment named Playground and a Production environment. The different APIs are available on each environment. URL structures are the same for both environment, targeted environment will be defined by the domain you are using. To be able to test your integration, you will need a Test Account. You can find more in our \[ environments and testing guidelines\]. ## API updates The HPP API follows the same rules as other Klarna public APIs, we try to update our APIs regularly in a non breaking way, ensuring backward compatibility. You can find more in our [API updates guidelines](https://docs.klarna.com/api/api-urls/#api-updates) and see how we define backward compatibility and non-breaking changes. ## Response codes - Accept any 2xx codes as success, do not code for a specific error response code - Interpret any 4xx as an error, do not code for a specific error response code - Interpret any 5xx as an error, do not code for a specific error response code --- # Source: https://docs.klarna.com/payments/in-store-payments/integrate-klarna-in-store/api-integration.md # In-store API integration ## Use Klarna API to integrate In-store with your store's solution. Klarna In-store uses the [Klarna payments](https://docs.klarna.com/payments/web-payments/before-you-start/what-is-klarna-payments.md) solution to make in-store payments possible. When integrating Klarna In-store with your system, you will receive all flavours of Scan QR: dynamic QR, payment link and static QR. Depending on your store setup, refer to one of the step-by-step guides: ## Dynamic QR and payment link Here’s the process in a nutshell: 1. As a partner, you create a payment session. 2. You share a QR code or a payment link with a customer who's buying in a physical store. 3. The customer scans the QR code or receives the payment link. 4. The customer completes the payment. 5. An order is placed and an order identifier is automatically created. ## Static QR You can also let your customers pay with Klarna by scanning a static, printed QR code. 1. The customer scans the QR code and receives a short code. 2. The customer provides the short code to the cashier, who, in turn, enters the short code into the point-of-sale system.  3. As a partner, you create a payment session with the short code. 4. The customer completes the payment. 5. An order is placed and an order identifier is automatically created. You can also use our API to \[ cancel the payment\] if it's no longer needed or if the session has expired on your end. Refer to the documentation for each step for technical details, call descriptions, and sample requests and responses. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/klarna-osm-app-for-shopify/app-block-placements.md # App Block placements ## Display Klarna On-Site Messaging on your Shopify store by installing the app and customizing dynamic or static placements across key pages for a tailored shopping experience. ## Prerequisites To add app block placements you need to first have [installed the Klarna On-Site Messaging app](https://docs.klarna.com/platform-solutions/shopify/klarna-osm-app-for-shopify/how-to-install-osm-shopify-app) correctly. You also need to have a theme that supports [Online Store 2.0](https://www.shopify.com/partners/blog/shopify-online-store) app blocks. For vintage themes please see [Vintage Ad Placements](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/vintage-ad-placements). ## Placements Placements are containers for the different messaging assets we offer. Placements are either dynamic, that is, the messaging is updated based on the purchase amount, or static, meaning that the messaging isn’t linked to the amount and isn’t updated dynamically. You can add placements to the following types of pages in your Shopify store: - **Product Page** supports amount-based (dynamic) and non-amount based (static) placements. - **Cart Page** supports amount-based (dynamic) and non-amount based (static) placements. - **Home Page** supports non-amount based (static) placements. - **Collections** **Page** supports non-amount based (static) placements. - **Static Page**supports non-amount based (static) placements. If you’re not sure which placements to pick, see the [answer in our Frequently asked questions](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/frequently-asked-questions).  ## Adding placements ### Open theme customizer You can navigate to App Blocks through the On-Site Messaging home page by clicking **Go to App Block Instructions** and then proceeding to click **Open customizer**. You can also navigate to **Store admin**\> **Sales channels**\> **Online store**, and click **Customize.** ![Shopify_-_Admin_-_Online_Store.png](Shopify_-_Admin_-_Online_Store.png) *Shopify_-_Admin_-_Online_Store.png* ### Add the Klarna app block and position it in the template From the select box in the top center of the theme editor, select the desired theme, for example, **Products**\> **Default product**. ![Shopify_-_Admin_-_Theme_editor_-_template_menu.png](Shopify_-_Admin_-_Theme_editor_-_template_menu.png) *Shopify_-_Admin_-_Theme_editor_-_template_menu.png* Then, in the left-side menu, use the **Add block** option to add a **Klarna Placement**, available under **APPS**, as shown in the screenshot. ![Shopify_-_Admin_-_Theme_editor_-_add_app_block.png](Shopify_-_Admin_-_Theme_editor_-_add_app_block.png) *Shopify_-_Admin_-_Theme_editor_-_add_app_block.png* If you are not able to find Klarna On-Site Messaging under APPS, you may need to instead use the [CSS method](https://docs.klarna.com/platform-solutions/shopify/klarna-osm-app-for-shopify/vintage-ad-placements) in the vintage ad placement installation method.After inserting the block, drag the **Klarna Placement** App Block to the desired location in the template, for example, below **Price**. ![After inserting the block, drag the Klarna Placement App Block to the desired location in the template.](Shopify_-_Admin_-_Theme_editor_-_add_app_block_-_SKOSM_block.png) *After inserting the block, drag theKlarna PlacementApp Block to the desired location in the template.* ### Select placement type and select theme You can edit the configuration options within the **Klarna Placement** app block by selecting between options in the side panel. You have a choice of: 1. **Placement type** - this determines the content and general design of the placment 2. **Theme** - applies some basic formatting 3. **Padding** 4. Message prefix Not sure which placement to choose? [Read our recommendations here](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/klarna-osm-app-for-shopify/frequently-asked-questions.md). Continue reading on this page to learn more about customizing the placements. ![The configuration options available within the Klarna Placement app block.](Shopify_-_Admin_-_Theme_editor_-_app_block_panel.png) *The configuration options available within the Klarna Placement app block.* ## Customizing placements If you want to customize the the placements in your Shopify store, you can do it in one of the following ways: 1. Edit the underlying CSS styling in your store’s source code, as described in the [Customize placements with CSS](https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/styling-on-site-messaging-with-css.md) article on Klarna.Docs. 2. Edit the placements in the Klarna Merchant portal, as described in the [Customize placements through Merchant portal](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/app-block-placements) article on Klarna.Docs. Note that only the **Custom** theme is customizable. If you use the default or dark theme, you won’t be able to see any customizations in the storefront. Some customization options, that is, changes in padding and alignment, affect the placement itself and not the contents of the placement. These options are available in the Klarna On-site messaging Shopify app in Shopify admin.  Customizations in the app and the Merchant portal impact the placement differently and you may need to apply the custom styling in both to see the desired result. Examples of such customization are the Merchant portal placement text alignment within the placement and the **Ad Position** alignment in the Klarna OSM Shopify app* *that affects the position of a placement on the page. Additionally, only selected Klarna placements support text alignment within the placement, and some themes may not honor the styling for placement alignment on the page. ## Locale and language Klarna’s On-site Messaging app ensures the currency your customers see in the placement matches the currency displayed on your storefront. Learn more [here](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/klarna-osm-app-for-shopify/frequently-asked-questions.md). ## Checkout Messaging - Available on Shopify+ Checkout On-site Messaging is only available for Shopify plus merchants, and you must reach out to merchant@klarna.com to have it added to your account. Ensure you have completed the steps outlined in the article [Install the On-site messaging app](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/how-to-install-osm-shopify-app) before proceeding with adding checkout messaging. You will also need to ensure you have upgraded to the [Shopify Checkout Extensibility](https://www.shopify.com/plus/upgrading-to-checkout-extensibility). From within the the Customizer, add a product to your cart. Then navigate to **Checkout and customer accounts**. ![Shopify_-_Theme_Customizer_-_Select_Customer_Accounts.png](Shopify_-_Theme_Customizer_-_Select_Customer_Accounts.png) *Shopify_-_Theme_Customizer_-_Select_Customer_Accounts.png* You will then land in the checkout. To add the placement on each page of the checkout, click **Add app block** and then click **Klarna On-site Messaging**. The app block will be added, and you will be able to set the Checkout Behavior. Toggle on **Include app block in Shop Pay**. Save the theme. ![Shopify_-_Admin_-_Theme_editor_-_Checkout_-_add_app_block_-_SKOSM.png](Shopify_-_Admin_-_Theme_editor_-_Checkout_-_add_app_block_-_SKOSM.png) *Shopify_-_Admin_-_Theme_editor_-_Checkout_-_add_app_block_-_SKOSM.png* The app block will be added, and you will be able to set the Checkout Behavior. Toggle on **Include app block in Shop Pay**. Save the theme. ![Shopify_-_Admin_-_Theme_editor_-_Checkout_-_SKOSM_block_setting.png](Shopify_-_Admin_-_Theme_editor_-_Checkout_-_SKOSM_block_setting.png) *Shopify_-_Admin_-_Theme_editor_-_Checkout_-_SKOSM_block_setting.png* Repeat these steps on each page of the checkout by navigating to the Shipping and Payment screens. Make sure to save the theme each time. ![Shopify_-_Admin_-_Theme_editor_-_Checkout_-_navigate.png](Shopify_-_Admin_-_Theme_editor_-_Checkout_-_navigate.png) *Shopify_-_Admin_-_Theme_editor_-_Checkout_-_navigate.png* Ensure that you have added the placement to the Payment Page, and that the **Include app block in Shop Pay** setting is toggled on. Save the theme. ![Shopify_-_Admin_-_Theme_editor_-_Checkout_-_Payment_page_-_SKOSM_app_block.png](Shopify_-_Admin_-_Theme_editor_-_Checkout_-_Payment_page_-_SKOSM_app_block.png) *Shopify_-_Admin_-_Theme_editor_-_Checkout_-_Payment_page_-_SKOSM_app_block.png* ### Checkout Placement Settings There are a few customization options available for the checkout placement. It can be enabled or disabled within the ShopPay checkout. We recommend this to be enabled as customers may struggle to navigate to Klarna from the ShopPay checkout without guidance. You can add this by clicking **Checkout behavior** in the app settings and checking the box **Include app block in Shop Pay**. We offer customized messaging for this purpose that can be enabled by reaching out to your partner success team or merchant@klarna.com. ![ An example of customized messaging in the ShopPay checkout.](ZtHB3EaF0TcGJlsM_image-89-.jpeg) *An example of customized messaging in the ShopPay checkout.* Error messaging in the settings are descriptive and will explain in what cases (and with which settings) the messaging will not show to your customers. An example of this is if a customer country is not enabled on your Klarna merchant ID. In such a case the messaging would not be displayed to customers in that country as they would not be able to proceed with Klarna as a payment method. --- # Source: https://docs.klarna.com/resources/legal-and-compliance/payment-solutions-guidelines/au.md # Legal and privacy (AU) ## AU legal & privacy guidelines for Klarna Payments: use only approved stores and clearly disclose pricing, delivery, returns, support and privacy terms. Australia When adding Klarna payments to your site, you need to consider privacy and data sharing aspects, and ensure your customer-facing terms reflect the cooperation with Klarna. Please be aware that Klarna Payments may only be utilized at stores (both online and in-store) that have received prior approval from Klarna. Usage of Klarna Payments in any store not authorized by Klarna could result in an obligation to repay any claims arising from such unauthorized use. ## Terms and conditions Ensure that your terms and conditions reflect your cooperation with Klarna. ## Compliance Requirements for your website As a merchant using Klarna to transact with your customers, it is crucial to meet, among other things, legal requirements on the merchant's website to ensure transparency and compliance with applicable consumer protection laws. Before a customer completes its purchase on your website, you must present the following information in a clear and easily accessible manner on your website. Please note that it is not sufficient to require customers to first contact you to receive this information, nor delay providing it until after the transaction is completed. **Product or Service Description** - Provide clear, detailed, and accurate descriptions of products or services, including essential characteristics, to ensure customer understanding. If you choose to include images or videos, they must also reflect a clear and honest representation of the products. **Total Price and Payment Information** - Clearly display the total price, including taxes, fees, and any additional charges (such as delivery or customs fees), and outline payment terms and available payment methods. **Delivery and Performance Details** - Specify estimated delivery times, shipping methods, and any geographical restrictions. For services, outline the timeline for service completion. **Return and Refund Policy** - Include a clear policy for returns, refunds, and exchanges, specifying conditions, timelines, and any associated costs. - If the goods or services turn out to be faulty or do not look or work as advertised, you must offer remedies to the customer, such as repair, replacement, or refund. Clearly state in your return policy that you will cover return shipping costs for incorrect or faulty items. - Clearly outline the types of products eligible for return, any exceptions (for example, perishable goods, digital downloads, custom-made items), and any specific conditions required (for example, in original packaging, with tags attached). - Describe the steps for initiating a return, such as contacting customer support, completing an online return form, or including a printed return slip with the item. Provide return shipping instructions, including address or instructions for any return pick-up services offered. **Customer Support and Dispute Resolution** - Describe the process for resolving disputes directly through the merchant, such as submitting a complaint or request via email or an online form, and outline the expected response timeline. Provide contact information for customer support and outline any internal or third-party dispute resolution options. **Digital Content or Subscription Details (if applicable)** - For digital services, specify any limitations on functionality, compatibility, and duration of access. For contracts of fixed duration or subscriptions, specify the length and conditions for renewal and termination. **Legal Rights and Warranties** - Mention statutory warranty rights and any additional commercial guarantees if provided. **Customer Reviews and Testimonials** - Ensure all customer reviews and testimonials on your website are genuine and transparent by: - not engaging in buying, selling, writing, or publishing fake reviews, - not offering incentives for positive reviews, - not suppressing or censoring negative reviews, - disclosing any insider relationships within reviews, - avoiding the creation of company-controlled review sites that falsely appear independent, and - refraining from trading in fake social media influence indicators. **Important Notice:** Non-compliance with these requirements may significantly impact the resolution of any disputes. Adhering to the guidelines listed above is essential for maintaining trust and accountability in your dealings with customers and ensuring a favorable outcome in dispute scenarios. **Klarna’s Buyers Protection Policy** Do not use Klarna’s Buyer’s Protection Policy in any promotional materials or website copy as an endorsement of the quality of your goods or your store. It is intended to reassure buyers about the purchase process, not to imply any endorsement of product quality or store reputation. ## Privacy policy Ensure that your privacy policy reflects your cooperation with Klarna. For your reference, you can view Klarna’s privacy policy [here](https://cdn.klarna.com/1.0/shared/content/legal/terms/0/en_au/privacy). --- # Source: https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/australia.md # Partner marketing legal guidelines - Australia For Klarna's Australia specific terms and conditions please visit: [](https://www.klarna.com/au/legal/merchants-general-terms-and-conditions/) **Keep it simple.** Don’t lose a customer because the payment instructions were too complicated, but do make it clear what you are offering. **Stand out for the right reason.** Highlight the payment option you offer, but be sure to be clear, fair and not misleading. **Be sensitive to the situation.** Consider what is going with your customers and in the wider market as a whole. Use this knowledge to decide how you promote and market Klarna in all your channels. One message does not fit all circumstances. **Don't encourage debt.** Do not encourage shoppers to spend outside of their means. Using phrases such as *‘strapped for cash?’*, *‘don’t wait until payday’* or *‘broke AF’* are unacceptable and irresponsible. You have an obligation to ensure your customers stay financially healthy. **Make sure your ads are socially responsible to consumers and society.** Offers or benefits should not be linked to credit marketing which are likely to make the credit offer attractive. ​*Klarna may review and monitor your advertising and marketing of Klarna's products and services, including through automated means, to ensure your marketing complies with applicable laws, rules, and regulations.* --- # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/other-actions/authorization-callback.md # Authorization callback ## To ensure optimization of the conversion rates, you should get an authorization token through a server-side callback. When Klarna approves a customer, [you receive an authorization token](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-2-checkout.md) that lets you place an order. While you would typically receive `authorization_token` as a response to the `authorize()` call, you are required to implement the server-side callback to a specific URL to receive the `authorization_token` and `session_id` in the backend. By using server-side authorization callback, you can create an order in case of any client-side communication issues. Payment methods that require complex customer interactions, for example switching between banking apps, are vulnerable to front-end communication issues. If communication breaks down, a valid authorization_token issued by Klarna payments may not reach the client, making placing an order impossible. This can lead to the customer being charged without the payment getting registered in your checkout. Such errors can affect your store's conversion rates if the customer believes they have completed an order but don't receive a confirmation from your side. {{#mermaid: sequenceDiagram autonumber participant C as Consumer participant M as Merchant participant KAPI as Klarna API participant KJS as Klarna.js C->>M:Nagivate to
checkout page M->>KAPI: Create
Klarna Payment session Note over M, KAPI: Sending "authorization" - Callback URL
"merchant_urls": {"authorization": "https://..."} KAPI->>M: Klarna payment
session response M->>KJS: Initialize
klarna.js M ->> KJS: Load the container C->>M: Select Klarna
in Payment selector and
clicks 'Pay' M->>KJS: Execute
Authorize call alt Authorization Callback KJS->>M: Provide authorization token via Callback URL (valid for 60 minutes) Note over M, KAPI: {
"authorization_token": "1eddf502-f3a0-45bf-b1fd-f2e3a2758200",
"session_id": "e4b81ca2-----"
} end M->>KAPI: Create Order POST {apiUrl}/payments/v1/authorizations/{authorizationToken}/order KAPI->>M: Provide order_id and redirect_url }} ## Activating callbacks When [initiating a payment](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-1-initiate-a-payment.md), include a URL in the `authorization` field of the `merchant_urls` object. Klarna payments calls this URL after a successful authorization. ``` json …. "merchant_urls": { "confirmation": "https://...", "notification": "https://...", "push": "https://..." "authorization": "https://..." }, ... ``` A sample `merchant_urls` object in the `create_session` request including the URL for receiving the callback in the `authorization` field. Klarna will invoke the URL provided in the authorization field once the session is authorized. ``` json { "authorization_token": "1eddf502-f3a0-45bf-b1fd-f2e3a2758200", "session_id": "e4b81ca2-0aae-4c16-bcb2-29a0a088a35b" } ``` A sample callback request from Klarna. ## Securing the callbacks You must provide the callback URL over HTTPS. To be able to authenticate that Klarna sent the callback, we recommend that you generate a one-time token only for this specific payment session. This lets you authenticate Klarna as the origin of the call made to you after a successful authorization. Additionally, you can include a secret token in the `authorization` URL to further enhance security: ``` json { "merchant_urls": { "authorization": "https://example.com/authCallbackEndpoint&secretToken=b37cda64-a6d8-11ec-b909-0242ac120002" } } ``` The value `b37cda64-a6d8-11ec-b909-0242ac120002` passed in the request can be generated by the integrator for every new session. By including this secret token, you can verify the authenticity of the callback request and ensure that it originates from Klarna. ## Merchant idempotence Merchants should implement idempotent handling of authorization callback requests from Klarna. Since Klarna will notify via the authorization callback that the authorization was approved and you may have also received the notification via the front end response, you should avoid creating duplicate orders on your side. By ensuring idempotence, you will be able to prevent unintended side effects and maintain consistency in order processing. ## Best effort callback delivery Klarna strives to consistently trigger the merchant authorization URL as effectively as possible. However, it's crucial to understand that delivery cannot be guaranteed 100% of the time. This uncertainty stems from various risks associated with the process of communication. Even with Klarna's commitment to the reliable transmission of callback requests, issues like network disruptions, server downtime, or other unexpected events can affect the successful receipt of callbacks. Therefore, merchants should be ready to manage the occasional failures or delays in receiving authorization callbacks. In the event of such failures, merchants have the option to use the [Read Session API operation](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/other-actions/check-the-details-of-a-payment-session.md) to access the most current session status. This approach helps merchants keep track of transaction statuses and ensure a smooth payment experience for the final customer. ## Additional information ### Successful callback response **Any status code response of the 2xx family (for example, 204) from your server to Klarna's callback is considered successful.** This indicates to Klarna that your server has successfully received and processed the callback. ### Request timeout **Klarna's callback to your server includes a 2-second timeout**: this consists of a 2-second connection timeout and a 2-second read timeout. It's crucial that your server is configured to handle the request within this period to prevent timeout errors. ### Retry mechanism for non-2xx responses If your server returns **a response outside the 2xx status code range (for example, 4xx, 5xx), Klarna will initiate a retry mechanism. Klarna will make up to 3 attempts in total** , with the delay between retries increasing exponentially, starting at 1 second. This means that failing to respond with a 2xx status code will lead to Klarna attempting the callback again at longer intervals. ### Handling multiple callbacks For responses other than 2xx, Klarna may send the same callback multiple times. Your system must be prepared to handle idempotent operations, ensuring that the same callback does not result in duplicate actions, such as creating the same order multiple times. See [more info](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/other-actions/authorization-callback.md) ### Multiple authorization processes In instances where an order is not placed following a callback, the customer might be required to undergo another authorization process. Klarna may send a new callback with a different `authorization_token` in such cases. Your system should be adaptable to manage these situations effectively. ### No authentication on callback URL **Do not implement any form of authentication for the callback URL you provide to Klarna.** This will ensure Klarna can seamlessly call your system without the need for credential exchange. --- # Source: https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/automatic-capture.md # Automatic capture ## What is automatic capture (auto-capture)? By default, all transactions successfully completed via Klarna Payment direct integrations will be finalized with an order created but not captured. This means that the customer has successfully completed a purchase but has not actually been charged for the order. In order to comply with Klarna's shipping policy and remain covered by the [Merchant Protection Program](https://www.klarna.com/international/merchant-protection-program/) , all orders should only be captured at the time of order fulfillment. In specific segments, orders are immediately fulfilled, and the final customer will gain access to their purchase on the spot. This is common for digital products or services. The automatic capture allows businesses in these particular categories to capture and charge the customer immediately at the time of purchase confirmation. ## Categories and exceptions allowed to use auto-capture Usage of automatic capture is restricted to the following use cases and business categories: - In-store - Digital products - Vouchers - Services & Events - Fulfilment of order within 24 hours from order creation **Merchants associated to any other category not mentioned above are required to get explicit approval from Klarna in order to implement it.** Multiple categories that are allowed to use automatic-capture are also required to send [addition information](https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/extra-merchant-data.md) based on the corresponding category. ## Integration considerations In order to enable automatic capture of an order, it is required to include `auto_capture`property in the `create_order` request and set it up to `true`**true** ``` json { "auto_capture": true, "purchase_country": "US", "purchase_currency": "USD", "billing_address": { "given_name": "John", "family_name": "Doe", "email": "john@doe.com", "title": "Mr", "street_address": "Lombard St 10", "street_address2": "Apt 214", "postal_code": "90210", "city": "Beverly Hills", "region": "CA", "phone": "333444555", "country": "US" }, "shipping_address": { "given_name": "John", "family_name": "Doe", "email": "john@doe.com", "title": "Mr", "street_address": "Lombard St 10", "street_address2": "Apt 214", "postal_code": "90210", "city": "Beverly Hills", "region": "CA", "phone": "333444555", "country": "US" }, "order_amount": 10, "order_tax_amount": 0, "order_lines": [ { "type": "physical", "reference": "19-402-USA", "name": "Battery Power Pack", "quantity": 1, "unit_price": 10, "tax_rate": 0, "total_amount": 10, "total_discount_amount": 0, "total_tax_amount": 0, "product_url": "https://www.estore.com/products/f2a8d7e34", "image_url": "https://www.exampleobjects.com/logo.png" } ], "merchant_urls": { "confirmation": "https://example.com/confirmation", "notification": "https://example.com/pending" }, "merchant_reference1": "45aa52f387871e3a210645d4", } ``` A POST request to create an order for a one-time payment with auto-capture. ### Integration via PSPs or Platforms Note that every partner may enable different support and configuration processes to enable and disable auto-capture. In particular cases, if the capability is enabled by default, you will be required to disabled it in order to be compliant with the requirements in Klarna's [Merchant Protection Program](https://www.klarna.com/international/merchant-protection-program/). Please see \[ here\] the specific documentation for the corresponding partner to understand particular requirements. --- # Source: https://docs.klarna.com/klarna-search/integrate-klarna-search/basic-product-data.md # Basic product data ### SKU/ID Use SKUs as IDs where possible. Since SKUs are unique, they can also help prevent you from accidentally reusing IDs which would result in products being discarded. - Good SKU: ABC123 - Poor SKU: 1 ### Name Any product variant or model should be clearly stated. Our search engine and filters work using the information in this field. Try to use keywords you want to be found for. - Good product name: Apple iPhone 12, 256GB, gray - Poor product name: iPhone 12 Your product name will be used to match your product to our products and customer search. Include the important details that define your product. Put the most important details first— customers will usually see only the first 70 or fewer characters (including spaces) of your title, depending on screen size. Ideally, keep within these character limits for accessibility reasons. Use keywords. These will help connect your product with a customers search and help them recognize what you’re selling. Your keywords could include these types of product details: - product name. - brand. - specific details about the product. Don't include info about discounts, sales or stock info in the name. ### Price The product's price should include the VAT. The currency should be stated. Use a comma or a period as the decimal marker. - Good price: \$25 - Poor price: 25 excluding VAT ### Shipping costs The product's shipping cost needs to combine all shipping-/order costs for the customer. For example, this can include the environmental, freight, or handling surcharge, as well as the packaging fee, and similar. - Example: \$5 ### Stock status For starters, there must be a buy/order button so that the customer can buy or order the product. That being said, we allow chain stores to display their offline prices if they’re in stock in their offline stores. However, in these cases, the products has to be tagged as "out of stock" in your product feed with us. If the product can’t be purchased/ordered online or offline at all, it can’t be included in your product feed at all. We don’t distinguish if the product is in local or remote storage by the merchant. Your stock status in the product feed should always be based on your online storage status. It can’t, for example, show the stock status for one of your offline stores. Pre-order products can’t be tagged as "in stock." Use "pre-order" or "out of stock" instead,” alongside "in stock/out of stock," "Yes/No" or the number of products in stock. - Good stock status: Yes, InStock, 100 - Poor stock status: Few, or N/A ### Delivery time The promised delivery time is the time of the order in the number of days. It's important that the delivery time in the feed corresponds to the info on your site. - Good delivery time: 5 working days - Poor delivery time: Varies ### Manufacturer The product manufacturer is used in our filters. - Example: Adidas ### Manufacturer SKU/MPN The manufacturer's unique article number is used by us for matching products. - Use the SKU assigned by the manufacturer. Unless you’re the manufacturer, don’t use a value that you’ve created. - Distinguish between variants and use the correct MPN for each product variant. Typically, each variant of a product (different colors or sizes) has its own manufacturer SKU, so make sure to submit the correct value. An exception is different sizes of apparel products, where all sizes often have the same MPN. - Example: 1170-0500 ### EAN/GTIN The EAN code is a unique barcode number. It’s used by us to automatically match many product types and make them searchable in the barcode scanner in our app. - Example: 0021299147573 ### Condition The condition of your product at time of sale. We support the following values: - **New** - The item is new, in its original packaging, and has never been opened or used. With the full original manufacturer's warranty and standard return policy. - **Used** - The item is used. For example, a display model/demo unit or because the packaging is damaged or completely missing. - **Refurbished** - The item is not new but has been inspected and tested to ensure that it feels like a new product. For example, defective parts have been replaced, but the item may still show signs of use. It may come with or without the original packaging. ### URL The URL to the product in your shop. It can also contain tracking parameters for analysis tools such as Google Analytics. - Example: ### Image URL The URL to the product image. Use a static URL. The one you submit shouldn’t be changed unless the actual image is moved or replaced. For example, don’t use URLs with timestamps, cache values or parts that can be changed each time you generate feed data. A change to the URL will result in download and reprocessing. The CMYK format isn’t supported. - Example: ### Category Use the full "breadcrumb trail" flow. Wherever possible, we recommend you include more granular categories as it classifies your product more precisely.  - Example: Shoes\> Sport Shoes\> Running Shoes Remember not to mix up different product types within the categories. One example is to avoid adding accessories for a coffee machine to the same category as the machines themselves. Use\> to separate multiple levels in a category. Also, include a space before and after the\> symbol.  - Example: Clothing\> Women\> Dresses For gender-specific products (e.g. clothes and perfume), it’s important to divide them up into Women, Men and Children. Our filters are partly based on the category names. - Good category name: Clothes\> Women\> Pants - Poor category name: Fashion & Clothes ### Description The detailed information about the product. Our search engine and filters work using these details in this field. Try to include the keywords you want to be found for. - Good product description: Red four-legged table with storage underneath. Ideal for living room or bedroom. Dimensions 100 x 50 cm. - Poor product description: Really attractive and practical! --- # Source: https://docs.klarna.com/conversion-boosters/on-site-messaging/before-you-start.md # Source: https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/before-you-start.md # Source: https://docs.klarna.com/conversion-boosters/express-checkout/before-you-start.md # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-hpp/before-you-start.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/before-you-start.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/vtex/before-you-start.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/before-you-start.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/before-you-start.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/prestashop/before-you-start.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/woocommerce/before-you-start.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/before-you-start.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/wix/before-you-start.md # Source: https://docs.klarna.com/platform-solutions/acquiring-partners/adyen/before-you-start.md # Before you start ## Leverage the Adyen-Klarna partnership to offer seamless payment experiences, with easy onboarding for existing Adyen users and flexible integration options for new businesses. ## Overview Adyen is a powerhouse in the realm of financial technology, providing an all-encompassing solution that caters to the needs of leading businesses across the globe. It's not just a payment processor; Adyen offers a seamless, end-to-end payment experience, combined with rich, data-driven insights and an array of financial products, all integrated into one global platform. This innovative approach enables businesses to expand their operations, enhance customer experiences, and achieve their strategic goals with unprecedented speed and efficiency. With Adyen, companies are equipped to navigate the complexities of the digital economy, making it the go-to partner for achieving scalable growth and success. ### New to Adyen and Klarna? [Find out how you can benefit from our partnership](https://www.klarna.com/international/business/adyen/). Once you’re ready to get started, contact Adyen to learn how to complete your integration. Klarna is supported through various Adyen integration types, including API-only integration, drop-in and components for web and mobile platforms, or third-party plug-ins. The integration journey varies depending on which type you have in place. To learn how to integrate the various Adyen integration types for Klarna Payments, please refer to Adyen's [Klarna integration guide](https://docs.adyen.com/payment-methods/klarna). For more general information about Adyen's different integration types, please refer to Adyen's [online payments](https://docs.adyen.com/online-payments) page. ### Already integrated with Adyen This documentation outlines different integration options and guides you through seamlessly adding Klarna to your checkout. Our best practices help you get the most out of your partnership with Klarna. ## Automatic onboarding via Adyen To add Klarna to your Adyen integration, follow these steps: 1. Log into your [Adyen Customer Area](https://authn-live.adyen.com/authn/ui/login?request=eyJBdXRoblJlcXVlc3QiOnsiYWN0aXZpdHlHcm91cCI6IkJPX0NBIiwiY3JlZHNSZWFzb24iOlsiTG9nZ2luZyBpbiB0byBhcHBsaWNhdGlvbiBjYSJdLCJmb3JjZU5ld1Nlc3Npb24iOiJmYWxzZSIsImZvcmdvdFBhc3N3b3JkVXJsIjoiaHR0cHM6XC9cL2NhLWxpdmUuYWR5ZW4uY29tXC9jYVwvbG9iYnlcL3Bhc3N3b3JkLXJlc2V0XC9mb3Jnb3QtcGFzc3dvcmQiLCJyZXF1ZXN0VGltZSI6IjIwMjMtMDEtMTZUMTU6MzY6MTIrMDE6MDAiLCJyZXF1ZXN0ZWRDcmVkZW50aWFscyI6W3siUmVxdWVzdGVkQ3JlZGVudGlhbCI6eyJhY2NlcHRlZEFjdGl2aXR5IjpbeyJBY2NlcHRlZEFjdGl2aXR5Ijp7ImFjdGl2aXR5R3JvdXAiOiJCT19DQSIsImFjdGl2aXR5VHlwZSI6IklNUExJQ0lUIiwibWlsbGlzZWNvbmRzQWdvIjo5MDAwMDB9fV0sInR5cGUiOiJQQVNTV09SRCJ9fSx7IlJlcXVlc3RlZENyZWRlbnRpYWwiOnsiYWNjZXB0ZWRBY3Rpdml0eSI6W3siQWNjZXB0ZWRBY3Rpdml0eSI6eyJhY3Rpdml0eUdyb3VwIjoiQk9fQ0EiLCJhY3Rpdml0eVR5cGUiOiJHUkFDRV9DT09LSUUiLCJtaWxsaXNlY29uZHNBZ28iOjB9fV0sInR5cGUiOiJUV09fRkFDVE9SIn19XSwicmVxdWVzdGluZ0FwcCI6ImNhIiwicmV0dXJuVXJsIjoiaHR0cHM6XC9cL2NhLWxpdmUuYWR5ZW4uY29tXC9jYVwvY2FcLyIsInNpZ25hdHVyZSI6IlYwMDJTY1JvYm85QlVRUW1zOEJtRmhzaTJsN1wvRXZxUVREMkd5T2xEbk11YzU0UjA9In19). 2. If you have multiple accounts, make sure you’ve selected the account to which you want to add Klarna. 3. Go to **Settings**\> **Payment methods**. 4. Click **Request payment methods**. 5. Enter the name **Klarna** and select **Klarna Pay Now**, **Klarna Pay Later**, and **Klarna Pay Over Time**. 6. Enter your details, then click **Submit** to complete the process. All the heavy lifting is done and you will receive a Klarna activation email within a minute. Depending on your Adyen integration, you may need to perform some additional steps to make Klarna available in your checkout. Please note that line items are required for payments request towards Adyen to initiate a Klarna session. For more details, please refer to Adyen's [Klarna integration guide](https://docs.adyen.com/payment-methods/klarna). --- # Source: https://docs.klarna.com/resources/developer-tools/testing-payments/before-you-test.md # Before you test ## Learn about the Klarna credentials required and data you need to have handy to test our solutions. ## What you can test In the test (playground) environment, you can test the integration of the following products in your online store: - [Klarna Payments](https://docs.klarna.com/payments/web-payments/before-you-start/what-is-klarna-payments/) lets you offer Klarna as a payment method to your customers. ### What to keep in mind Before you start testing the Klarna products, consider the following: - Our live (production) systems don't process the purchases completed in the playground environment. These test purchases won't result in invoices or fees. - Don’t use real personal data during testing. Depending on which country your store operates in, we offer [Sample customer data](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/) and [Sample payment data](https://docs.klarna.com/resources/developer-tools/sample-data/sample-payment-data/) that you can use. - In the playground environment, you can test all Klarna products. The products you see in production may differ from the ones available in the playground environment, depending on your contract. ### Klarna products in your store See what Klarna products look like when added to your store’s checkout or payment process. When testing your store's integration with Klarna, you can: - Test the payment process if you offer Klarna payment methods in your checkout. See the product documentation and the [Payments API reference](https://docs.klarna.com/api/payments/) reference to learn more. - Manage test orders in the playground [Merchant portal](https://portal.playground.klarna.com). Additionally, On-site messaging and Express Checkout each have a testing solution that lets you apply Klarna's branded elements to your playground store. See the product documentation for On-site messaging and Express Checkout to learn more about how to test them before going live. We recommend that you perform some end-to-end tests before you launch. Take a look [at the step-by-step test cases](https://docs.klarna.com/resources/developer-tools/testing-payments/test-cases/). If you integrate using third-party platforms, see the [platform integrations documentation](https://docs.klarna.com). ## Klarna Demo store To experience what buying with Klarna is like for your customers, go to our [Demo store](https://www.klarna.com/demo/). The demo store is an example website that shows what the shopping journey can look like to the customers and how Klarna payments, On-site messaging, and Express Checkout work. The data in the Demo store is not linked to your MID. The orders you create using Klarna APIs or in the playground Merchant portal are not visible in the Demo store. To start testing Klarna products, you need: - Access to the test [Merchant portal](https://docs.klarna.com/resources/business-tools/merchant-portal-guide/merchant-portal-user-guide/) - Test [API keys](https://docs.klarna.com) for Klarna Payments - [Client identifiers](https://docs.klarna.com) to configure and test On-site messaging and Express checkout solutions - [Sample customer data](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/) and [sample payment data](https://docs.klarna.com) ## Accessing the test Merchant portal To access the test Merchant portal, you can sign up to create a new test account or log in with a test existing account.  ### Creating a new test account To create a new test account, follow these steps: 1. Click the **Log in**button in the navigation bar of Klarna Docs. 2. Select the region of your credentials (for example, 🇪🇺 Europe). 3. Select **Playground** as the environment. 4. Click **Sign up**. 5. Type your email address and click **SIGN-UP**.You'll get a confirmation email at this address. 6. Open the confirmation email and click **Activate account**. 7. Finish setting up your account: - Accept the Terms & Conditions - Choose a new password. - Enter your name. - Log in to the Merchant portal. ### Using an existing test account To log in with an existing test account, follow these steps: 1. Go to the [Merchant portal login page](https://portal.klarna.com). 2. Type your email address and password, then click **Log In**. If you don’t have these credentials, see the [Create a new test account section](https://docs.klarna.com/resources/developer-tools/testing-payments/before-you-test/#accessing-the-test-merchant-portal-creating-a-new-test-account). If you forgot your password, use the reset function. ## Getting test credentials for APIs To test your Klarna API integration, you need a set of test credentials. Follow these steps to get the credentials: 1. Access the [test Merchant portal.](https://docs.klarna.com/resources/developer-tools/testing-payments/before-you-test/#accessing-the-test-merchant-portal) 2. Click [Payment settings](https://docs.klarna.com) in the left sidebar. 3. Select **Klarna API Keys** 4. Click the **Generate new Klarna API key**button. 5. Download the .txt file and close the dialog box.  You now have a `Key ID` (API Username) and a `Secret` (API password) to authenticate when testing the APIs. Note that the test keys will only work for requests you send to the playground [API URLs](https://docs.klarna.com/api/api-urls/#api-urls). The password is only displayed once. You will not be able to retrieve it after you close the dialog box. ## Sample data In the playground environment, you must never use any real-life data to test the integration. When you're asked to enter data when testing, please use the [Sample customer data](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/) we've prepared. To test the payment methods, use the [Sample payment data](https://docs.klarna.com/resources/developer-tools/sample-data/sample-payment-data/). ## Troubleshooting While we hope that your testing experience goes well, there might be times when you get a strange or unexpected response to an API call. You can troubleshoot with the help of [Logs in the Merchant portal](https://docs.klarna.com/resources/business-tools/merchant-portal-guide/payments/#developers-logs) in the Merchant portal. Logs contain the details about your playground store’s operations from the previous 7 days. You can filter the entries based on date and time, service, order ID, direction, and more. Each entry is accompanied by details that help you get to the bottom of each issue. ## Support If you need help understanding the logs or have any questions about the testing process, contact [Merchant support](https://www.klarna.com/merchant-support/). --- # Source: https://docs.klarna.com/payments/in-store-payments/additional-resources/best-practices-for-partners.md # Best practices for partners ## Follow our best practices to get the most out of your In-store integration. ## Add UI elements for each distribution status Here are some examples of the UI elements you can implement for each distribution status. ### Status: DISTRIBUTED Display the QR code so the customer can scan it. Make sure to set the display's brightness to maximum. ![Best_practices_QR_code.png](Best_practices_QR_code.png) *Best_practices_QR_code.png* ### Status: ACCESSED To notify the store personnel that the customer accessed a payment session, display a "Payment in progress" message. ![Best_practices_Loading.png](Best_practices_Loading.png) *Best_practices_Loading.png* ### Status: COMPLETED Once the customer completes a payment, display a "Payment is done" message. ![Best_practices_Succes.png](Best_practices_Succes.png) *Best_practices_Succes.png* ### Status: CANCELLED If the customer cancels a payment, display a "Payment is canceled" message. ![Best_practices_Cancelled.png](Best_practices_Cancelled.png) *Best_practices_Cancelled.png* ### Status: FAILED If a payment fails, display a “Something went wrong” message. We recommend that you also show the related session_id as this will help Klarna's support to easily identify what went wrong. ![Best_practices_error.png](Best_practices_error.png) *Best_practices_error.png* ## All statuses - To allow the customer to cancel the payment at any time, add a cancelation button to the UI. ![Best_practices_cancel_button.png](Best_practices_cancel_button.png) *Best_practices_cancel_button.png* - Display an additional dialog to make sure that the customer doesn't cancel the payment by accident. ![Best_practices_Cancel.png](Best_practices_Cancel.png) *Best_practices_Cancel.png* ## Set a payment session timeout Completing a transaction may take longer for new customers. For that reason, we recommend that you set a timeout on a payment session that allows the customers to log into Klarna using two-factor authentication after they scan the QR code. If you set a timeout, actively cancel a session after timeout so that the payment session doesn’t stay open for the full 46 hours. --- # Source: https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/additional-resources/best-practices.md # Best practices ## Follow these best practices to get the best results from your Sign in with Klarna integration. ## Key principles 1. The Sign in with Klarna button should always be placed: - wherever the merchant has account creation (sign up) and log in options. - wherever the merchant has other social sign in methods.
 2. The customer’s data provided by Sign in with Klarna should always be used to improve the customer’s experience: - to pre-fill the customer’s profile. - to pre-fill any form fields, especially during checkout, to prevent them from needing to manually enter in their information. - to personalize their shopping experience. 3. Help make Klarna the customer’s payment method. Klarna should always be offered to the customer either: - directly after creating an account with the merchant (for on-demand platforms), - or preselected at the checkout, or as the first option (for non on-demand platforms). 4. If the customer already has an account with the merchant using the same account info, such as email or mobile number, and now want to sign in with Klarna, the merchant should allow the customer to connect their accounts, rather than reject the sign in.
 5. Once the customer creates their account and is redirected back to the merchant’s platform, they should be taken directly to a personalized shopping experience, in a logged-in state. There shouldn’t be any additional steps after the customer creates their account. Avoid asking for the same information that was provided during account creation, and avoid asking customers to verify already verified information. ## Placement of the Sign in with Klarna Button Always place the Sign in with Klarna button wherever you have account creation (sign up) and log in options. ![image](ZoTskh5LeNNTwvSC_Frame2147228703.jpeg) Always place the Sign in with Klarna button wherever you have other social sign in methods. ![image](ZoU1sh5LeNNTwwJ1_Frame2147228704-1-.jpeg) ## Use of Customer Data Always utilize the data you collect to improve the customer’s experience. Use it to pre-fill the customer’s profile and checkout form fields: ![image](ZoTtDh5LeNNTwvSn_Frame2147228706.jpeg) ## Klarna as the payment method Klarna should always be offered to the customer either directly after creating an account with the merchant (for on-demand merchants), and for non-demand platforms Klarna should be preselected at the checkout, or presented as the first option. ### On-demand platforms (tokenized payments) Klarna should always be offered to the customer either directly after creating the account with the merchant. ![image](ZoTtWR5LeNNTwvSp_Frame2147228706-1-.jpeg) ### Regular checkout (Klarna payments) Klarna should be preselected at the checkout, or presented as the first option. ![image](ZoTthR5LeNNTwvSs_Frame2147228707.jpeg) ## Connect existing accounts if the customer already has an account with a merchant, based on matched account info such as email or mobile number, and now want to sign in with Klarna, they should allow that and merge the accounts in the back-end, rather than reject the sign in. This should allow the customer to be able to sign in to the connected account using both sign in methods. ![image](ZoTtsB5LeNNTwvSu_Frame2147228706-2-.jpeg) ## Optimize the customer’s first-time experience Once the customer creates their account and is redirected back to the merchant’s platform, they should be taken directly to a personalized shopping experience, in a logged-in state. ![image](ZoTt0B5LeNNTwvSv_Frame2147228706-3-.jpeg) There shouldn’t be any additional steps after the customer creates their account. Especially not asking for the same information that was provided during account creation, or asking to verify already verified details. --- # Source: https://docs.klarna.com/resources/legal-and-compliance/more-solutions-guidelines/billie-terms-and-conditions.md # Terms and conditions for Billie ## This article outlines the terms and conditions for use of Billie with your Klarna integration. ## Terms and conditions for the use of Billie B2B BNPL Klarna cooperates with Billie GmbH, Charlottenstraße 4, 10969 Berlin (“**Billie**”) in order to be able to offer Billie B2B BNPL. By using Billie B2B BNPL via Klarna you (the **Merchant**) agree to the below terms and conditions which are in addition to the terms applicable under your agreement with Klarna (the **Agreement**). Definitions and expressions used in the Agreement have the same meaning for the purpose of these terms unless the context clearly suggests otherwise.   **1. Transfer and Assignment of Claims** 1.1. If a Customer selects the product Billie B2B BNPL in the Merchant’s  checkout process, Billie will evaluate the Customer's creditworthiness on behalf of Klarna. For this purpose, the Merchant transmits various data fields agreed between the Parties to Klarna, including but not limited to the name and registered office or address of the Customer, the amount of the invoice, the contents of the shopping cart, if applicable, and the order details and history. Klarna shares this data with Billie so that Billie can perform the credit check of the Customer. If this check is positive, the Merchant sells the Claim from this Customer to Klarna and assigns the Claim to Klarna. Klarna immediately resells this Claim to Billie and assigns the Claim accordingly to Billie. To the extent needed, Billie may disclose the chain of assignment of the Claim to the Customer. 1.2 You acknowledge and agree that Klarna’s right to transfer, pledge or in any other way dispose over the Claims under the Agreement will apply accordingly to Billie. **2. Specific requirements relating to the Claim** 2.1 Upon request, you agree to send Klarna or Billie any relevant invoice documentation (including any contract, order, order confirmation and delivery note, proof of delivery). You agree to provide reasonable support if Klarna or Billie are unable to match a Customer's payment. 2.2 To the extent required, Klarna will provide you with sample clauses and texts (**Model Clauses**) to be included in your general terms and conditions. The Model Clauses will be linked in Billie's checkout-widget with a reference that these are the Merchant's own Terms and Conditions in relation to Billie B2B BNPL which means that it is not mandatory for the Merchant to include the Model Clauses in their terms and conditions. To the extent needed, you authorize Billie to link to the Model Clauses in the Billie checkout-widget and to display them to Customers as part of its Merchants terms and conditions.You acknowledge that Billie does not enter into a contractual relationship with the Customer by linking the Model Clauses as part of the merchants terms and conditions in Billie’s checkout-widget. 2.3  You agree to support Klarna and/or Billie in enforcing the Claim and all rights and claims derived from it. Upon request by Klarna, which can also be made by Billie on behalf of Klarna, you  will provide Klarna and/or Billie with all additional documents required to carry out the dunning process against the Customer and provide any relevant information within one month within one  week. **3. General responsibilities of the Merchant** 3.1 You agree to inform Klarna and/or Billie of any circumstances which you become aware of which relate to the risk of a Customer's insolvency or any other risk of an assigned Claim not being settled by the Customer. 3.2  To  the extent you do not meet your obligations to pay the sales tax for an assigned Claim and the tax office claims Klarna to pay the sales tax portion (e.g. in accordance with § 13 c UStG), the Merchant is obliged to reimburse this amount to Klarna. 3.3 You undertake to effectively retain title to delivered goods vis-à-vis the Customer until payment of the assigned claim. **4. Invoicing service** 4.1 Billie will prepare and send to the Customer a payment information or payment request and a cancellation invoice in the event of cancellations, refunds or the like after the acquisition of the Claim. You will provide Billie via Klarna with all necessary information such as company name, registered office, order number as well as the shopping cart and order value, VAT number of the Merchant as well as the Customer and VAT rates (together **Payment Information Data**) via the Klarna API for the creation of payment information, payment requests or cancellation invoices by Billie. You will ensure the accuracy of the Payment Information Data submitted to Klarna in this regard. You acknowledge that Klarna and Billie do not validate the transmitted Payment Information Data.  You acknowledge that the payment information or request for payment or cancellation invoice may not necessarily constitute VAT-compliant invoices. 4.2 In relation to Claims, you warrant that no Claim will exist against a related party. A related party is any company that has an interest in the Merchant, or in which the Merchant has an interest, or in which a shareholder of the Merchant has an interest, or whose agents are identical in whole or in part to those of the Merchant. 4.3 With regards to Swiss Claims, the Customer has duly agreed that the agreement with the Merchant regarding the underlying Swiss Claim is governed by Swiss substantive laws and that there are no contractual restrictions on assignments or set-offs.. **5.  Support** 5.1 Billie's technical support is available for all questions from the Merchant and the Customer about Billie B2B BNPL, and to solve any problems when selecting Billie B2B BNPL. Support can be reached during normal business hours at support_klarna@billie.io. **6. Billie Buyer Portal** 6.1 Klarna may offer Billie Buyer Portal services for Customers. The Billie Buyer Portal services means certain post-purchase services such as display of all of the  Customer’s orders or invoices that a Customer handles or receives via Billie and corresponding order payment statuses across various Merchants, change of payment methods e.g. wire transfer, direct debit or credit and payment terms which may be extended in the future; all subject to successful identification and risk scoring of the Customer by Billie. Modifications of payment methods and terms will be subject to a successful identification and risk scoring of the Customer by Billie according to its risk policies. Billie determines the features available via the Billie Buyer Portal including but not limited to the concrete payment methods and terms offered to Customers. **7. Data storage, usage and transfer** 7.1 In order to use Billie B2B BNPL, data must be transferred from Klarna to Billie. In addition, Billie itself collects data through website components hosted by Billie (e.g. "widget"). The data transfer from Klarna to Billie as well as the data processing and storage at Billie is required to offer Billie B2B BNPL. Billie's privacy policy for Customers is available at . Billie's privacy policy for Merchants is available at .  **8. Release from banking secrecy obligations in Austria** By using Billie B2B BNPL, you  expressly authorize Klarna Bank AB (publ), with reference to § 38 Abs 2 Z 5 BWG, to provide Billie GmbH, Charlottenstrasse 4, 10969 Berlin, registered in the Commercial Register Berlin Charlottenburg under HRB 182428 B, as well as partner companies of Billie GmbH (refinancing and collection partners) with all information in connection with my B2B contract existing with Klarna Bank AB or the Billie B2B BNPL and, if necessary, to provide copies of the documents. ## Model Clauses  **1. Acceptance Process** Purchase on account for business customers  via Klarna powered by Billie (**Billie B2B BNPL** or Billie Kauf auf Rechnung) The order is accepted by sending a declaration of acceptance in a separate e-mail or by delivery of the goods within three to four days. The declaration of acceptance by e-mail is sent by Billie GmbH, which has acquired the Claim against the business customer if the payment method Billie B2B BNPL  is selected. **2. Retention of Title** The goods and services underlying the business customer’s purchase remain the property of the Merchant until paid for in full. **3. Acquisition of Claim** Business customers have the option to pay the invoice amount by bank transfer after receipt of the goods and invoice ("purchase on account"). To offer such services, there is a cooperation with Klarna Bank AB ("Klarna"), which in turn cooperates with the financial service provider Billie GmbH ("Billie") to offer the payment method Billie B2B BNPL. In order to pay the invoice amount by bank transfer, a registration with Klarna is not required. After selecting the payment method during the ordering process, an address and credit check is performed by Billie. If such checks are successful, the order process can be carried out with the selected payment method and the Claim against the Customer is first assigned to Klarna and consecutively assigned from Klarna to Billie. The invoice amount shall be paid within the payment period indicated on the invoice and to the account, which will be communicated to the business customer as part of Billie's payment instructions. **4. Privacy** If the payment method Billie B2B BNPL is selected, an address and creditworthiness check will be conducted by Klarna as part of the ordering process, which will be carried out by Billie. For this purpose, the following data provided as part of the order, required for this address and credit check, are transmitted to Klarna, Billie and partner companies commissioned by Billie (e.g. credit information agencies, collection partners, etc.): - Personal data and contact information: Information on the identity of the customer (title, first and last name, telephone number, e-mail address) and the company in whose name the order is placed (company name and legal form, registration number and data, address and contact data, e-mail address, telephone number, shipping and billing addresses, customer number, tax number, VAT identification number, information on the industry and company size); - Transaction-related data: Invoice amount and payment term, information about products you order, such as order ID, quantity, shopping cart and billing information, existing customer status. This data is used by Klarna and Billie solely for the purpose of checking whether the payment method requested by the Customer is available and, if the check is successful, for processing this payment method. As part of this processing, Billie will send the Customer information about the status of the order and invoice details to the e-mail address provided during the ordering process. Klarna's Privacy Policy is available here: Billie's Privacy Policy is available here: . Both Privacy Policies apply in addition to our Privacy Policy and our General Terms & Conditions. **5. Payment requests, reminders and late fees** When selecting the payment method Billie B2B BNPL, Billie will send payment requests and payment reminders via email. Payments shall exclusively be made to the account specified herein. If a customer's payments cannot be clearly assigned, Billie has the right to offset incoming payments from a Customer against outstanding claims of the merchant against this Customer, whereby a payment is initially offset against the oldest outstanding claim. If there are several open claims of the same age, a payment will be credited proportionately to all claims. Overdue payments may entail late fees including administration fees incurred in dunning and collections processes and will be passed on the Customer. Such late fees will be added to the Customer’s outstanding balance and shall be immediately payable. **6. Support** Technical support in case of issues with the selection and implementation of Billie Services is provided by Billie. Billie support is available during business hours (Monday to Friday, 9 a.m. to 5 p.m., except on Berlin public holidays), at info@billie.io. ## Using the Merchant as a reference The Merchant grants Billie the right to name the Merchant as a reference in order to indicate the mutual commercial relationship. This is limited to naming the Merchant’s company name and usage of the Merchant’s company logo in marketing materials (e.g. company presentation) of any kind as well as on the website. The use of the Merchant’s logo and name for any purpose other than the above requires the Merchant’s prior written consent (email suffices). The Merchant is entitled to revoke the right to use its company name or logo at any time without further reason. Revocation must be in writing to marketing@billie.io. The rights of usage are granted free of charge. --- # Source: https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/australia/bnpl-promotion-rules-101.md # Source: https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/united-kingdom/bnpl-promotion-rules-101.md # Source: https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/united-states/bnpl-promotion-rules-101.md # Source: https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/norway/bnpl-promotion-rules-101.md # Source: https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/spain/bnpl-promotion-rules-101.md # Source: https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/ireland/bnpl-promotion-rules-101.md # Source: https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/canada/bnpl-promotion-rules-101.md # BNPL promotion rules-Canada ## Financial services are highly regulated. This means that Klarna and our merchants who advertise with us need to follow the laws and regulations that govern advertising financial products. The following advertising guidelines provide a general overview of the requirements you need to follow. Remember that it is also your responsibility to learn and understand the laws governing the advertising of financial products. If you ever have any questions or are unsure, please reach out to your Klarna marketing contact or us.comarketing.support@klarna.com. ## The basics of disclosures When advertising financial products, it is important that you make the right disclosures so that consumers can easily understand what is being advertised. You MUST include the disclosure. It MUST be easy for consumers to see. If you cannot put the disclosure directly next to the messaging, it must be on the same page using a reference text or reference symbol, or One click away using a hyperlink. Disclosures inform customers of actually available terms, they must be clear and conspicuous, they must be legible—no one should have to squint to read them: 8 pt. font size minimum is usually sufficient and contrast text with background color for full visibility. #### What if there is no space for a disclosure? If disclosures are separate from the messaging they modify, you need to connect the messaging and the disclosure together with one of the following: - **Hyperlink:** *Learn more.* - **Reference text:** *See footer for details.* - **Reference Symbol: (e.g., \*,†)** *If using a reference symbol, the claim ends with the reference symbol and the disclosure begins with the same reference symbol.* ## Legal disclosure table | Product Referenced | Example Advertising Messaging (list not exhaustive) | Required Disclosure | |----|----|----| | Pay in 4 | 4 interest-free payments of \$X | \*See Canadian payment [terms](https://cdn.klarna.com/1.0/shared/content/legal/terms/0/en_us/sliceitinx). A higher initial payment may be required for some consumers. | ## Social media disclosures If you use social media influencers, bloggers, or other third parties to advertise Klarna and your business, there is more you need to know! When social media influencers, bloggers, or other individuals receive any type of payment to endorse or otherwise mention a product (called an “endorsement”), they are required to disclose the existence of the relationship on the post where the endorsement was made. The Federal Trade Commission (FTC) has released a guide you can share with bloggers that explain in plain language when and where they need to make disclosures [here](https://https://www.ftc.gov/system/files/documents/plain-language/1001a-influencer-guide-508_1.pdf). There is also more information available to social media influencers and bloggers [here](https://www.ftc.gov/tips-advice/business-center/guidance/disclosures-101-social-media-influencers). When social media influencers and bloggers endorse Klarna’s products, they are endorsing a financial product. Therefore, they need to do two things. - **First**, they need to disclose their relationship with you and Klarna. There are many ways to do that, but the FTC has provided easy-to-understand guidelines that you can share with your social media influencers [here](https://www.ftc.gov/system/files/documents/plain-language/1001a-influencer-guide-508_1.pdf). - **Second**, they need to provide a link to more details so that the required disclosures related to the advertising are only one click away from the post. They can do this in one of two ways: - Link to the Klarna educational page on your site. - Link to the Klarna CA educational page [here](https://www.klarna.com/us/what-is-klarna/). ## Klarna educational page (Klarna website landing page) You should always have a Klarna educational page on your site. This page will educate your customers about Klarna’s products and make required disclaimers and disclosures. Your Klarna educational page can be automatically generated using Klarna’s On-Site Messaging tools, \[ using these guidelines\]. ## Guidance for email, video, and TV  ### Emails Emails with Klarna messaging must include disclosures as outlined in the disclosures section and on [the legal disclosures table.](https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/canada/bnpl-promotion-rules-101/) - The subject line and sender must be accurate and not misleading. - Marketing emails must include an opt-out mechanism, and cannot be sent to customers who have opted out of marketing emails. - Marketing emails must comply with the CASL requirements. - Emails with TILA trigger terms must include the full terms of repayment or a representative example in the email itself, not one click away. ### Video ad or a TV spot - All relevant legal disclosures must be made. - Disclosures can be verbal or shown on screen. - Disclosures must be legible to a reasonable person (8 pt. or larger). - Introduction of disclosures: Be sure they’re introduced at the same time as or before the trigger term, with enough video left to keep it on screen for the required length of time. - Disclosures can be over any visual as long as they’re visible at the bottom. - Disclosures need to be based on a reading time of 3 words/second. - For any videos/TV spots that mention trigger terms, a representative example needs to be included. Please follow the guidance provided in the Financing Guideline regarding trigger terms and representative examples. ### Guidance for phone calls or text messages If you advertise using phone calls or text messages, then you are subject to Canada's Anti-Spam Legislation (CASL) and the requirements of carriers. These laws and rules require prior express written consent to send advertising via (a) calls to traditional home, business, or wireless phones or (b) texts to wireless numbers, among numerous other requirements. For example, you may not contact anyone on the [national do not call registry](https://lnnte-dncl.gc.ca/en). The CASL and carrier requirements are complex, and violating them comes with the potential for lawsuits and fines. You should obtain the advice of your own lawyers before sending advertising via telephone or text. ## Also follow these general compliance points Do not use the following terms: - “*No fees*” or similar - “*No credit checks/Application*” - “*Free*” or similar If coupons/discounts/rewards are offered, they should be redeemable across all tender types, including Klarna. Avoid “*no money down*” deferral messages when advertising Klarna as a financing option. Depending on eligibility criteria, certain customers may be asked to make a down payment at checkout. If you are ever in doubt, contact your Klarna marketing contact or us.comarketing.support@klarna.com.  ## Consumer protection laws In addition to what we have covered so far, your advertising must also follow all of the laws that apply to financial advertising and advertising generally. This section summarizes key laws and regulations. #### A. Unfair, Deceptive, or Abusive Acts or Practices (UDAAP) Unfair, deceptive, or abusive acts and practices can cause significant financial injury to consumers, erode consumer confidence, and undermine the financial marketplace. UDAAP was established to prevent consumer harm by misleading or deceitful actions. There are both federal and state UDAAP laws and regulations. **What you need to do.** - Include all relevant information. - Be clear. - Be easy to understand. - Don’t create a false sense of urgency (e.g., Act Now!) - Don’t encourage debt. - Be honest. What else you need to know. - **Disclosures don’t eliminate UDAAP risk** - disclosures provide additional context. They do not negate misrepresentations, omissions, or other deceptive statements. - **Substantiate your claims** - You have to have a factual basis underlying statements about any product. - **You have to honor promotions & rebates** - All promotions offered must be honored, including any “risk free” trials, 0% APR financing, or money back guarantees. - **It doesn’t matter if you meant well** - Your intent does not matter. If you make a deceptive statement or cause harm to consumers, you committed an unfair or deceptive act. #### B. Fair lending Fair lending applies to the entire lifecycle of a loan, including advertisement of the credit product. The Equal Credit Opportunity Act (ECOA) is a law that requires credit products, like those offered by Klarna, to be advertised fairly to everyone. - Avoid discouraging individuals from applying. - Retailers cannot impose additional application requirements to the Klarna application process. - Target a broad demographic. - While a retailer may be inherently attractive to a particular demographic, the retailer should avoid targeting Klarna financing on a prohibited basis. Prohibited bases include race, color, religion, national origin sex/gender identity, marital status, age (provided the applicant has the capacity to contract) and income dependency on a public assistance program. #### C. CASL Canada’s anti-spam legislation (CASL) is the federal law dealing with spam and other electronic threats. It is meant to protect Canadians while ensuring that businesses can continue to compete in the global marketplace. - **Don’t use false or misleading header information.** Your “From,” “To,” “Reply to,” and routing information—including the originating domain name and email address—must be accurate and identify the person or business who initiated the message. - **Don’t use deceptive subject lines.** The subject line must accurately reflect the content of the message. - **Identify the message as an ad.** You must disclose clearly and conspicuously that your message is an advertisement. - **Tell recipients where you’re located.** Your message must include your valid physical postal address. This can be your current street address, a post office box you’ve registered with the U.S. Postal Service, or a private mailbox you’ve registered with a commercial mail receiving agency established under Postal Service regulations. - **Tell recipients where you’re located.**Your message must include your valid physical postal address. This can be your current street address, a post office box you’ve registered with the U.S. Postal Service, or a private mailbox you’ve registered with a commercial mail receiving agency established under Postal Service regulations. - **Tell recipients how to opt out of receiving future email from you.** Your message must include a clear and conspicuous explanation of how the recipient can opt out of getting email from you in the future. Craft the notice in a way that’s easy for an ordinary person to recognize, read, and understand. Creative use of type size, color, and location can improve clarity. Give a return email address or another easy internet-based way to allow people to communicate their choice to you. You may create a menu to allow a recipient to opt out of certain types of messages, but you must include the option to stop all commercial messages from you. Make sure your spam filter doesn’t block these opt-out requests. - **Honor opt-out requests promptly.** Any opt-out mechanism you offer must be able to process opt-out requests for at least 30 days after you send your message. You must honor a recipient’s opt-out request within 10 business days. You can’t charge a fee, require the recipient to give you any personally identifying information beyond an email address, or make the recipient take any step other than sending a reply email or visiting a single page on an Internet website as a condition for honoring an opt-out request. Once people have told you they don’t want to receive more messages from you, you can’t sell or transfer their email addresses, even in the form of a mailing list. The only exception is that you may transfer the addresses to a company you’ve hired to help you comply with CASL. --- # Source: https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/brand-guidelines.md # Brand guidelines ## Welcome to Klarna's brand guidelines. This section is your go-to resource for understanding and utilizing Klarna's key brand elements, such as our logos and the specifications for creating partner logo lockups. These elements are crucial for maintaining the integrity and consistency of Klarna's brand in your marketing communications. **To find specific information, use the navigation panel on the right. This will help you quickly locate the guidance you need on various topics related to our brand elements.** For comprehensive insights into our branding, including typography, color schemes, and overall art direction, please visit our [brand portal](https://brand.klarna.com/). Find [here](https://docs.klarna.com/assets/objects/Zn1RTJbWFbowe8Qo/Marketing_Guidelines_for_Partners.pdf) a creative guide tailored for partner marketing campaigns. Our brand assets are also available in SVG format on our [Brand Portal](https://locker.klarna.com/web/9da52f260227a7c9/brand-identity-svg-files/?viewType=grid). Please follow these guidelines to present the value of our partnership in a clear, consistent and impactful way. ## Klarna Assets for Checkout page If you are unable to retrieve the assets via our APIs, you can use the collection of Klarna logos provided here for building the checkout page. For [Express Checkout](https://docs.klarna.com/conversion-boosters/express-checkout/additional-resources/button-styling/) and [Sign in with Klarna](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/additional-resources/button-styling/), please follow their specific guidelines regarding logo usage and variants. ## - **Klarna assets for checkout page**: - **Badge**: Our main trademark only exists in Klarna Pink - **Clear space**: The badge's minimum clear space equals our wordmark's height. - **Minimum size**: Please follow the specific minimum sizes for each format. - **Wordmark pink**: Use the pink wordmark only on black backgrounds. - **Wordmark black**: Use the black wordmark only on light backgrounds. - **Wordmark white**: Use the white wordmark only on dark backgrounds. - **Clear space**: The logo's minimum clear space equals our wordmark's height.. - **Minimum size**: Please follow the specific minimum sizes for each format.. - **Pay with Klarna lockup (horizontal)**: Best suited to wider layouts. - **Pay with Klarna lockup (vertical)**: Best suited to narrow layouts. - **Dual logo lockup (horizontal)**: Best suited to wider layouts. - **Dual logo lockup (vertical)**: Best suited to narrow layouts. - **Pay with Klarna lockup (vertical)**: Best suited to narrow layouts. - **Dual logo lockup (horizontal)**: Best suited to wider layouts. - **Dual logo lockup (vertical)**: Best suited to narrow layouts. - **Pay with Klarna lockup (vertical)**: Best suited to narrow layouts. - **Pay with Klarna lockup (horizontal)**: Balance the lockup to equally present both logos, aligning yours within the guidance lines for visual equilibrium. - **Dual logo lockup (vertical)**: Balance the lockup to equally present both logos, aligning yours within the guidance lines for visual equilibrium. ## - **Dual logo lockup ( horizontal )**: The lockup's minimum clear space equals our wordmark's height. - **Dual logo lockup (vertical)**: The lockup's minimum clear space equals our wordmark's width. - ****: Don’t alter the colors of our logos. - ****: Don’t add effects or shadows to our logos. - ****: Don’t stretch, squeeze or rotate our logos. - ****: Don’t outline our logos. - ****: Don’t alter or create new lockups. - ****: Don’t color your logo in lockups. - ****: Don’t place the lockup over a busy background. - ****: Don’t size the logos in an unbalanced way, or space them unevenly. - ****: Don’t alter or create new lockups. --- # Source: https://docs.klarna.com/conversion-boosters/express-checkout/additional-resources/button-placement.md # Button placement ## This guide describes the available placements for the Express checkout button on your platform. The right placement of the Express button can significantly enhance your user experience, leading to higher conversion rates and increased sales. ![ You can place the Express checkout button at multiple stages of the shopping journey.](5a558ef7-52d7-4fad-a3fa-7abbde893601_PlacementOverview.jpeg " You can place the Express checkout button at multiple stages of the shopping journey.") ## Checkout page The most important placement of the button is on the checkout page itself. Position the Express checkout button as a primary option for completing the purchase. This placement is designed to enhance the user experience, as it reduces the number of steps needed to finalize the purchase, appealing to users seeking a quick and secure checkout experience. Highlight the benefits of using the Express checkout button with an appropriate label, for example, "Checkout faster" or "Express checkout". ![Place the button before your standard checkout.](KECCheckoutPlacement.jpeg "Place the button before your standard checkout.") ## Shopping cart In the shopping cart, choose the Express checkout button as the primary call to action over traditional checkout methods to reduce steps and decrease cart abandonment rates. ![Place the button on all shopping carts.](KECCartPlacement.jpeg "Place the button on all shopping carts.") ## Product pages Position the Express checkout button near other payment options or the “Add to cart” button to offer a seamless checkout alternative. ![Place the button on product detail pages.](KECProductPagePlacement.jpeg "Place the button on product detail pages.") ## Wishlists If your platform contains a wishlist or other curated lists of products, offer the Express checkout button as the primary call to action. This can turn contemplation into action. Offering a seamless transition from wishlist to purchase encourages users to make decisions based on items they have already expressed interest in, potentially increasing conversion rates. It's also recommended to provide the user with a functionality to deselect the items that they aren't ready to purchase from a wishlist. ![ Place the button below wishlisted items.](de5d2a14-99ca-416e-9671-23ba5606555a_KECWishlistPlacement.jpeg " Place the button below wishlisted items.") ## Optimizing for specific shopping moments These strategies are designed to optimize the placement of the Express checkout button across various scenarios, catering to the diverse needs of customers and maximizing the potential for conversions and satisfaction. ### Featured products Place the Express checkout button alongside featured products or promotions directly on the homepage to catch the user's interest immediately, and facilitate immediate action. ### Restocked products When notifying shoppers about an item becoming re-stocked, implement the Express checkout button in the notification email or on the product page to capture immediate interest and facilitate action. ### In-demand products Use prominent Express checkout buttons on flash sale pages or sections at the time they go on sale, ensuring that users can rapidly secure in-demand items. This approach can significantly enhance the user experience by reducing friction in high-pressure purchase situations. --- # Source: https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/additional-resources/button-styling.md # Source: https://docs.klarna.com/conversion-boosters/express-checkout/additional-resources/button-styling.md # Source: https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/additional-resources/button-styling.md # Source: https://docs.klarna.com/conversion-boosters/express-checkout/additional-resources/button-styling.md # Source: https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/additional-resources/button-styling.md # Source: https://docs.klarna.com/conversion-boosters/express-checkout/additional-resources/button-styling.md # Source: https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/additional-resources/button-styling.md # Source: https://docs.klarna.com/conversion-boosters/express-checkout/additional-resources/button-styling.md # Source: https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/additional-resources/button-styling.md # Button Styling ## This section explains how to adjust the Sign in with Klarna button to match your store’s look and feel while adhering to our brand requirements. The way you change the button's appearance depends on which method you've used to add the button to your platform: - **System-provided button**: Using the system-provided button is the simplest and most straightforward approach. This button comes pre-designed with Klarna's branding, ensuring immediate recognition and trust from users familiar with the Klarna payment experience. This section provides guidelines on how to effectively implement this button, focusing on placement, size, design consistency, and accessibility. By adhering to these recommendations, you can leverage the trusted Klarna brand to enhance your user’s experience, streamline the sign-in process, and potentially increase conversion rates. - **Custom button**:For those looking to maintain a cohesive brand experience across your platform while integrating Sign in with Klarna, creating a custom button offers flexibility and control. This option allows for adoption of Klarna's sign-in functionality to fit the unique style and layout of your site. ## System-provided button ### Theme The theme defines the button’s color. You can change the theme by setting the value of the `theme` attribute of the `Identity.button()` function.  Apart from the default dark theme, you can apply the light theme to have the button displayed in white, or the outlined theme to render the white button with an outline. ![ Apply styling to display the standard Sign in with Klarna button in different colors.](e7dc3339-8065-4b32-8eb7-6a8bdcccd0bb-SIWK-Theme-Examples.jpeg " Apply styling to display the standard Sign in with Klarna button in different colors.") #### Default theme (dark) The button’s default theme color is dark. As the `theme` attribute is optional, the default theme is applied both when you set the attribute to `default` or if you omit it from the source code altogether. We recommend using the default theme as it’s widely recognized by Klarna customers and looks good on light backgrounds. ![ Sign in with Klarna button in the default dark theme.](86b6e249-3df7-4392-bb67-9e7f1d16259e.jpeg " Sign in with Klarna button in the default dark theme.") ``` javascript const siwkButton = klarna.Identity.button({ scope: "openid offline_access payment:request:create profile:name", redirectUri: "http://localhost:3000/callback.html", theme: "default", }) ``` Sample code to render the default Sign in with Klarna button. #### Light theme Use the light theme to make the button visible on dark backgrounds. To apply the light theme, set the `theme` attribute to `light`. ![ Sign in with Klarna button in the light theme.](32cc335c-c2e7-499e-9444-94e2dc62554b-SIWK-Light-Button.jpeg " Sign in with Klarna button in the light theme.") ``` javascript const siwkButton = klarna.Identity.button({ scope: "openid offline_access payment:request:create profile:name", redirectUri: "http://localhost:3000/callback.html", theme: "light", }) ``` Sample code to render a white Sign in with Klarna button. #### Outlined theme Use the outlined theme to make the button visible on all backgrounds. To apply the this theme, set the `theme` attribute to `outlined`. ![ Sign in with Klarna button in the outlined theme.](a85a9402-35d4-4517-b61f-ae325a712b38-SIWK-Outlined-Butto.jpeg " Sign in with Klarna button in the outlined theme.") ``` javascript const siwkButton = klarna.Identity.button({ scope: "openid offline_access payment:request:create profile:name", redirectUri: "http://localhost:3000/callback.html", theme: "outlined", }) ``` Sample code to render a white, outlined Sign in with Klarna button. ### Button shape There are three shapes available with the Sign in with Klarna button: default, rectangle, or pill. To control the button's shape, change the value of the `shape` attribute. Customize the shape of the button to best suit your platform’s look and feel. ![ Apply styling to display the standard Sign in with Klarna button in different shapes.](0058388e-dee1-4812-a7a8-6f9a68c0c492-Shape-Examples.jpeg " Apply styling to display the standard Sign in with Klarna button in different shapes.") #### Default shape The default Sign in with Klarna button shape is a rectangle with rounded corners. To apply the default shape, set the `shape` attribute of the `Identity.button()` function to `default`. ![ Sign in with Klarna button in the default shape with rounded corners.](86b6e249-3df7-4392-bb67-9e7f1d16259e.jpeg " Sign in with Klarna button in the default shape with rounded corners.") ``` javascript const siwkButton = klarna.Identity.button({ scope: "openid offline_access payment:request:create profile:name", redirectUri: "http://localhost:3000/callback.html", shape: "default", }) ``` Sample code to render Sign in with Klarna button in the default shape. #### Rectangle shape To apply the rectangular shape with square corners, set the `shape` attribute of the `Identity.button()` function to `rect`. ![ Sign in with Klarna button in the rectangular shape.](b235b9d5-6f07-49c3-a5b5-7e568fac8634-SIWK-Rect-Button.jpeg " Sign in with Klarna button in the rectangular shape.") ``` javascript const siwkButton = klarna.Identity.button({ scope: "openid offline_access payment:request:create profile:name", redirectUri: "http://localhost:3000/callback.html", shape: "rect", }) ``` Sample code to render Sign in with Klarna button in the rectangular shape. #### Pill shape To apply the pill shape, set the `shape` attribute of the `Identity.button()` function to `pill`. ![ Sign in with Klarna button in the pill shape.](e8bb38ce-579a-4743-87b2-efdc6eda10b2.jpeg " Sign in with Klarna button in the pill shape.") ``` javascript const siwkButton = klarna.Identity.button({ scope: "openid offline_access payment:request:create profile:name", redirectUri: "http://localhost:3000/callback.html", shape: "pill", }) ``` Sample code to render Sign in with Klarna button in the pill shape. ### Badge alignment There are three ways you can choose to show the Klarna trademark on the button: badge, left icon or centered icon. To control the button's alignment, change the value of the `logoAlignment` attribute. ![ Apply styling to choose how the Klarna badge or icon is displayed on the Sign in with Klarna button.](c427a37c-cdc6-4037-94e3-59044df15925-Badge-Alignment-Examples.jpeg " Apply styling to choose how the Klarna badge or icon is displayed on the Sign in with Klarna button.") #### Default alignment The default Sign in with Klarna button alignment is the Klarna badge centered with text before. To apply the default shape, set the `logAlignment` attribute of the `Identity.button()` function to `default`. ![ Sign in with Klarna button with the default Klarna logo placement.](86b6e249-3df7-4392-bb67-9e7f1d16259e.jpeg " Sign in with Klarna button with the default Klarna logo placement.") ``` javascript const siwkButton = klarna.Identity.button({ scope: "openid offline_access payment:request:create profile:name", redirectUri: "http://localhost:3000/callback.html", logoAlignment: "default", }) ``` Sample code to render Sign in with Klarna button with the default badge alignment. #### Left icon alignment If you prefer to use the Klarna icon aligned to the left of the button, set the `logoAlignment` attribute of the `Identity.button()` function to `left`. ![ Sign in with Klarna button with the Klarna icon aligned to the left.](1e52dbc9-3c6b-4545-b1f7-e7136dd24d4e.jpeg " Sign in with Klarna button with the Klarna icon aligned to the left.") ``` javascript const siwkButton = klarna.Identity.button({ scope: "openid offline_access payment:request:create profile:name", redirectUri: "http://localhost:3000/callback.html", logoAlignment: "left", }) ``` Sample code to render Sign in with Klarna button with the Klarna icon aligned to the left. #### Centered icon alignment If you prefer to position the Klarna icon to the center with the text trailing, set the `logoAlignment` attribute of the `Identity.button()` function to `center`. ![ Sign in with Klarna button with the Klarna icon aligned to the center.](db4ba8b7-b7d9-4b58-a63c-5b03f8d35a87.jpeg " Sign in with Klarna button with the Klarna icon aligned to the center.") ``` javascript const siwkButton = klarna.Identity.button({ scope: "openid offline_access payment:request:create profile:name", redirectUri: "http://localhost:3000/callback.html", logoAlignment: "center", }) ``` Sample code to render Sign in with Klarna button with the icon aligned to the center. ### Resizing Button The "Sign in with Klarna" button provided by our Web SDK is designed to be flexible and adapt to various layouts. Below, we outline the default dimensions and the recommended minimum and maximum sizes for the button. #### Default Dimensions - Width: 335px - Height: 48px #### Minimum and Maximum Dimensions - Minimum Width: 48px - Minimum Height: 35px - Maximum Height: 60px #### Responsive Variants Based on Width The SIWK button's content dynamically changes based on its width. Here are the breakpoints and the respective button appearances: **Width\> 200px** - Displays the full text: "Continue with Klarna" (text "Continue with" + Klarna logo). **84px ≤ Width ≤ 200px** - Displays the "Klarna" logo only. **Width \< 84px** - Displays a compact version of the "Klarna" logo, featuring only the letter "K." ![](Resizing_Button_Preview.png "Resizing_Button_Preview.png") **Styling Instructions** - To adjust the button size, modify the width and height properties using CSS. - Ensure the button size remains within the defined constraints for optimal performance and usability. ``` css #klarna-identity-button { width: 150px; /* Adjust as needed */ height: 48px; /* Keep between 35px and 60px */ } ``` ## Creating a custom button ### Colors Centered around the iconic Klarna pink, our primary palette runs the show in our visual world. Friendly Klarna off white and bold Klarna black help create a balanced, approachable look. More details here. ![ The three colors that are key to Klarna's branding: Klarna pink (#FFA8CD), Klarna off white (#F9F8F5), and Klarna black (#0B051D).](42672f66-af79-421e-81d3-81299b6a1215_Colors.jpeg " The three colors that are key to Klarna's branding: Klarna pink (#FFA8CD), Klarna off white (#F9F8F5), and Klarna black (#0B051D).") #### Background We strongly advise to only use Klarna Black (hex value \#0B051D), white (hex value \#FFFFFF) or Klarna off white (hex value \#F9F8F5) for the button's background color. Don't use Klarna Pink and colors from your own brand as the background color. ![ Use Klarna black, white, or Klarna off white as the button's background color.](d351c7e1-ca58-4965-93aa-4c85638c514d.jpeg " Use Klarna black, white, or Klarna off white as the button's background color.") ![ Avoid using Klarna pink, your own brand colors, and gradients as background colors.](c74602f2-f3df-4214-906a-3e6696afd533-SIWK-Donts.jpeg " Avoid using Klarna pink, your own brand colors, and gradients as background colors.") ### Trademark Including Klarna’s trademark is essential to the success of the button as it creates instant recognizability. You can read more about the Klarna trademark and Klarna icon on the [Klarna brand guidelines](https://brand.klarna.com/) website. #### Badge We suggest using the Klarna badge whenever possible. ![image](aa3685ef-7953-4a7f-8ec4-76632a3362c4.jpeg) If you're using the Klarna badge in your custom button, make sure to leave clear space that corresponds to at least the height of our wordmark. ![ The minimum clear space for the badge is defined by the height of our wordmark.](ed4a87e2-3a3f-49bb-bead-d11877827e4.jpeg " The minimum clear space for the badge is defined by the height of our wordmark.") Download the Klarna badge from our [Brand Guidelines](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/brand-guidelines/) in your preferred format and color by clicking one of the thumbnails in the gallery below: #### Icon Limited space? Need the button to align with other sign in methods? Use the Klarna icon. ![ ](e0b72a9a-202b-441a-a84.jpeg " ") Find Klarna icon in your preferred format and color in [Klarna Brand site](https://brand.klarna.com/resources#assets) --- # Source: https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/canada.md # Partner marketing legal guidelines - Canada For Klarna’s Canada specific terms and conditions please visit: [](https://www.klarna.com/ca/legal/) **Keep it simple.** Don’t lose a customer because the payment instructions were too complicated, but do make it clear what you are offering. **Stand out for the right reason.** Highlight the payment option you offer, but be sure to be clear, fair and not misleading. **Be sensitive to the situation.** Consider what is going with your customers and in the wider market as a whole. Use this knowledge to decide how you promote and market Klarna in all your channels. One message does not fit all circumstances. **Don't encourage debt.** Do not encourage shoppers to spend outside of their means. Using phrases such as *‘strapped for cash?’*, *‘don’t wait until payday’* or *‘broke AF’* are unacceptable and irresponsible. You have an obligation to ensure your customers stay financially healthy. **Make sure your ads are socially responsible to consumers and society.**Offers or benefits should not be linked to credit marketing which are likely to make the credit offer attractive.**​*Klarna may review and monitor your advertising and marketing of Klarna's products and services, including through automated means, to ensure your marketing complies with applicable laws, rules, and regulations.*** ''' --- # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/other-actions/cancel-a-customer-token.md # Cancel a customer token ## You can cancel a customer token if it's no longer needed, for example, if a customer cancels their subscription. Once you cancel a token, it becomes unavailable and you can't restore it. If the customer signs up for your services in the future, you'll need to generate a new customer token. ## Cancelling a token To cancel a customer token, send a `PATCH` request to the [`{apiUrl}`](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/other-actions/cancel-a-customer-token.md)`/customer-token/v1/tokens/{customerToken}/status` endpoint. Specify the token identifier as the `customerToken` path parameter and set the `status` body parameter to `CANCELLED`. ``` json { "status": "CANCELLED" } ``` A sample request to cancel a customer token. ### Success response In response to your call, you'll get a confirmation that the token is being canceled. ``` json Token patch request has been accepted and is being processed. ``` A success response to the token cancelation request. ### Error response If a token can't be canceled, you'll get an error response. ``` json { "correlation_id": "6a9b1cb1-73a3-4936-a030-481ba4bb203b", "error_code": "ERROR_CODE", "error_messages": [ "ERROR_MESSAGE" ] } ``` An error response to the token cancelation request. Here are examples of common errors with troubleshooting suggestions. You can use the value in `correlation_id` to find entries related to the request under **Logs** in the Merchant portal. | Error code | Error message | Description | |----|----|----| | `NOT_FOUND` | `Invalid token ID` | A specified token doesn't exist. Check if the value in {`customerToken`} is correct, then try again. | | `BAD_VALUE` | `{incorrect field}` | Your request contains a value that isn't allowed. | --- # Source: https://docs.klarna.com/payments/in-store-payments/integrate-klarna-in-store/api-integration/cancel-a-payment.md # Cancel a payment ## You can cancel an ongoing payment session before the customer completes the payment. You can cancel the payment session if the customer decides not to finalize the purchase. We recommend that you cancel such sessions as soon as possible to ensure the session duration in your system and in Klarna’s match. While an In-store payment session expires in 46 hours, the session in your system may have a shorter expiration time. ## Canceling a payment To cancel a payment, send a `DELETE` request to the [`{apiURL}`](https://docs.klarna.com/api/api-urls/)`/payments/v1/sessions/{session_id}` endpoint. Provide the Klarna payments session ID as the `session_id` path parameter. When you cancel a session, a canceled status view will be displayed on the terminal. ![ The cancelation message is displayed after you cancel an in-store payment session.](d55f8323-c2d8-4166-b8dc-1f1ae82cac4c_In-store_payment_canceled_2023-05_01.jpeg) *The cancelation message is displayed after you cancel an in-store payment session.* --- # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/other-actions/cancel-an-authorization.md # Cancel an authorization ## Use the Klarna payments API to cancel an authorization and remove any customer debts gotten during the payment session. ## Requesting the release When a customer won't complete a purchase or you won't use the authorization token immediately, you can cancel the authorization. This action clears the customer's debt. To cancel an authorization, send a `DELETE`request with an empty request body to the `{apiUrl}/payments/v1/authorizations/{authorizationToken}` endpoint. Provide the authorization token you got from the [`authorize()` call](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/other-actions/cancel-an-authorization.md) as an {`authorizationToken`} parameter. Canceling an authorization might impact our credit assessment when attempting to generate a new one. ### Success response In response to your call, you receive a `204` status code corresponding to a successful but empty response. ``` json HTTP/1.1 204 No Content Content-Type: application/json Klarna-Correlation-Id: e19dc121-1276-419d-882a-c343d58fb9aa { } ``` Sample of a success response to cancel an authorization. ### Error response ​If the authorization token in your request is invalid, you get an error response. Ensure the `authorization_token` value you provided is correctly formatted and corresponds to an authorization that has not expired. ``` json { "correlation_id": "6a9b1cb1-73a3-4936-a030-481ba4bb203b", "error_code": "ERROR_CODE", "error_messages": [ "ERROR_MESSAGE" ] } ``` Sample of an error response to release an authorization. --- # Source: https://docs.klarna.com/payments/after-payments/order-management/manage-orders-in-the-merchant-portal/cancel-an-order.md # Cancel an order ## You can also cancel orders in the Merchant portal. Learn more about it from this guide. If your customer changes their mind and doesn't want to proceed with the purchase, you can cancel their order in the Merchant portal as long as you haven't captured it yet. When you cancel the order, we release the authorized amount, and no financial transactions take place. As a result, canceled orders won't show up in your statements. You can cancel orders individually in the Merchant portal by accessing the order details. By doing so, you release the order fulfillment, and your customers get to know that the order won't be shipped. After canceling an order, you can't make further changes to it. If needed, the Merchant portal allows you to recreate the canceled order as a new one. You can visualize a list of canceled orders and filter them out in the Merchant portal's **Orders** dashboard. If you want to read a step-by-step guide to cancel an order, visit the **Help**[Help](https://portal.klarna.com?help-page=article%3Ahow-do-i-cancel-an-order) section in the Merchant portal. The following image illustrates the canceling orders action in the Merchant portal: ![ Canceling an order in the Merchant portal.](cf24e065-22d6-4bfa-983c-830e2fe2fc66_Order+management_Merchant+portal_Canceling+an+order.jpeg) *Canceling an order in the Merchant portal.* --- # Source: https://docs.klarna.com/payments/after-payments/order-management/manage-orders-in-the-merchant-portal/capture-an-order.md # Capture an order ## Capture an order in the Merchant portal with just a few clicks. Capturing orders is a mandatory step in the order management process. This is how you let us know that you’ve fulfilled a specific order. Capturing ensures smooth transactions with your customers and enables us to transfer the order amount to your bank account. When you have sent the products or provided the services to your customers, you need to capture the total amount for the delivered items. You can perform two types of captures for Klarna orders: - **Full capture:**You deliver all items in one go and record the whole order amount after fulfilling it. - **Partial capture***:*You deliver the items in parts and record only the parts of the order amount corresponding to the deliveries. In this case, you accumulate partial captures until you complete the full order amount. In the Merchant portal, you can perform partial and full captures in a matter of clicks. When checking the details of an order, you can select some items to capture the order in parts. Otherwise, you can select all the items to capture the full order amount. For the remaining uncaptured items, you can edit their order lines. Each order line is a  list of details for each item. For example, quantity, unit prices, and discounts. We highly recommend you select the corresponding order lines when capturing items. [Order lines](https://portal.klarna.com?help-page=article%3Awhat-are-order-lines) are helpful to show capture details to your customers in the Klarna app and let us correctly map invoices when sending refunds. If you want to capture only a part of the order line, you can also use the Merchant portal to enter a specific amount instead of selecting items. After you perform a full or partial capture, we're ready to prepare a payout on your upcoming settlement and debit your customer if they haven’t already paid. If you want to read a step-by-step guide about how to capture an order, visit the **Help**[Help](https://portal.klarna.com?help-page=article%3Ahow-to-capture-an-order) section in the Merchant portal. The following image illustrates the order details and the different options to capture an order in the Merchant portal: ![ Capturing an order in the Merchant portal. ](cdb35a1e-cf35-41ca-bf97-00d52a0e6611_Order+management_merchant+portal_+capturing.jpeg) *Capturing an order in the Merchant portal.* --- # Source: https://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api/capture-and-track-orders.md # Capture and track orders ## Here you find details of the calls that enable you to capture your orders and add shipping information to track them. For each call, you can find a description, technical details, and sample requests and responses. ## Capture the full order amount Use the Order management API to fully capture an order. When you fulfill the order (for example, you have sent the products to your customer), you need to capture the total amount for the items through this API call. Capturing the full order amount triggers the payments we send to your bank account based on your contract. The following diagram depicts how this API call works: {{#mermaid: sequenceDiagram autonumber participant A as MERCHANT participant B as KLARNA A ->> B: POST /ordermanagement/v1/orders/{order_id}/captures note over A, B: Provide the capture amount (full or partial) alt SUCCESSFUL B -->> A: 201: Created includes capture_id, location else ERROR B -->> A: 403: correlation_id, error_code, error_message end }} You can use the same endpoint for making full and partial captures. For a full capture, you send the total order amount. For a partial capture, you only send the order amount corresponding to the items you shipped. To capture the full order amount, send a POST request to the [{apiUrl}](https://docs.klarna.com/api/ordermanagement/#operation/captureOrder)/ordermanagement/v1/orders/{order_id}/captures endpoint. Include the following in your request: **Header** - Klarna-Idempotency-Key : This header will guarantee the idempotency of the operation. The key should be unique and is recommended to be a UUID version 4. Retries of requests are safe to be applied in case of errors such as network errors, socket errors and timeouts. **Body** - captured_amount (required): the total order amount to be captured. It must be equal to the order_amount from the \[ order creation\] - reference (optional): Internal reference to the capture. This will be included in the settlement files. - description (optional): Description of the capture shown to the customer. - order_lines (optional): list of details associated with this capture. This is recommended if you want to show capture details in the Klarna's app - shipping_info (optional): shipping details such as company and tracking number. If you're shipping physical goods, you need to have shipping information available at this point. For more information, see the \[ Add shipping information section\]. ``` json { "captured_amount": 6000, "reference": "c9a94cf1-7126-4f55-92fa-4d34f416ed7f", "description": "Shipped the full order", "order_lines": [ { "type": "physical", "reference": "123050", "name": "Tomatoes", "quantity": 10, "quantity_unit": "kg", "unit_price": 600, "tax_rate": 2500, "total_amount": 6000, "total_tax_amount": 1200 } ], "shipping_info": [ { "shipping_company": "DHL US", "tracking_number": "1234567890", "return_shipping_company": "UPS", "return_tracking_number": "112233445566778899" } ] } ``` Sample request to capture an order. ### Success response If the request is successful, you'll receive a `201 Created` response including `capture_id` and `location` as HTTP response headers. ### Error response If your request contains errors, you'll receive an error response. Make sure the `order_id` is correct. You can use the `correlation_id` and the `order_id` values to troubleshoot the call in the Merchant portal logs section. ``` json { "correlation_id": "66782175-ae05-44fc-9eb3-eeceadbad271", "error_code": "NO_SUCH_ORDER", "error_messages": [ "string" ] } ``` Sample of an error response to capture an order. Ready to send this request? See the [API reference of this call.](https://docs.klarna.com/api/ordermanagement/#operation/captureOrder) ## Capture part of the order amount Use the Order management API to partially capture an order. When you partially fulfill the order (for example, you have sent some of the products to the customer but not all of them), you need to capture the amount for the sent items through this API call. You can use the same endpoint for making full and partial captures. For a full capture, you send the total order amount. For a partial capture, you only send the order amount corresponding to the items you sent. To capture a part of the order amount, send a POST request to the [{apiUrl}](https://docs.klarna.com/api/ordermanagement/#operation/captureOrder)`{apiUrl}/ordermanagement/v1/orders/{order_id}/captures` endpoint. Include the following in your request: **Header** - `Klarna-Idempotency-Key` : This header will guarantee the idempotency of the operation. The key should be unique and is recommended to be a UUID version 4. Retries of requests are safe to be applied in case of errors such as network errors, socket errors and timeouts. **Body** - `captured_amount` (required): the partial order amount to be captured. It must be less than the total order_amount - `reference` (optional): Internal reference to the capture. This will be included in the settlement files. - `description` (optional): Description of the capture shown to the customer. - `order_lines` (optional): list of details associated with this capture - `shipping_info` (optional): shipping details such as company and tracking number. If you're shipping physical goods, you need to have shipping information available at this point. For more information, see the \[ Add shipping information section\]. ``` json { "captured_amount": 6000, "reference": "2027d87e-c394-4b22-9cfd-f51f79482793", "description": "Shipped the full order", "order_lines": [ { "type": "physical", "reference": "123050", "name": "Tomatoes", "quantity": 10, "quantity_unit": "kg", "unit_price": 600, "tax_rate": 2500, "total_amount": 6000, "total_tax_amount": 1200 } ], "shipping_info": [ { "shipping_company": "DHL US", "tracking_number": "1234567890", "return_shipping_company": "UPS", "return_tracking_number": "112233445566778899" } ] } ``` Sample of a request to partially capture an order. ### Success response If the request is successful, you'll receive a `201 Created` response including `capture_id` and `location` as HTTP response headers. ### Error response If your request contains errors, you'll receive an error response. Make sure the `order_id` is correct. You can use the `correlation_id` and the `order_id` values to troubleshoot the call in the Merchant portal logs section. ``` json { "correlation_id": "66782175-ae05-44fc-9eb3-eeceadbad271", "error_code": "NO_SUCH_ORDER", "error_messages": [ "string" ] } ``` Sample of an error response to partially capture an order. Ready to send this request? See the [API reference of this call.](https://docs.klarna.com/api/ordermanagement/#operation/captureOrder) ## Check the details of a capture Use the Order management API to check the details of a capture. When you want to check the details of a capture, this API call provides you with capture information like shipping info, order lines, capture id, amount, and date. ### Retrieve capture details To check the capture details, send a `GET` request to the [{apiUrl}](https://docs.klarna.com/api/ordermanagement/#operation/getCapture)`{apiUrl}/ordermanagement/v1/orders/{order_id}/captures/{capture_id}` endpoint. Provide the `order_id` and the specific `capture_id` you want to know about. The `order_id` is the identifier you get in a successful response when placing a new order, and the `capture_id` is the identifier you get when successfully capturing an order. ### Success response In response to your call, you receive a data object containing the capture details. ``` json { "capture_id": "5b33ed47-79d0-4d76-99ea-4afaa7c8e552", "klarna_reference": "4K7Q6QF6-1", "captured_amount": 6000, "captured_at": "2017-01-10T10:31:17.973Z", "description": "Shipped the full order", "order_lines": [ { "reference": "123050", "type": "physical", "quantity": 10, "quantity_unit": "kg", "name": "Tomatoes", "total_amount": 6000, "unit_price": 600, "total_discount_amount": 0, "tax_rate": 2500, "total_tax_amount": 1200 } ], "refunded_amount": 0, "billing_address": { "given_name": "John", "family_name": "Doe", "title": "Mr", "street_address": "123 Fake St", "postal_code": "12345", "city": "New York", "region": "NY", "country": "US", "email": "john@doe.com", "phone": "123456" }, "shipping_address": { "given_name": "John", "family_name": "Doe", "title": "Mr", "street_address": "123 Fake St", "postal_code": "12345", "city": "New York", "region": "NY", "country": "US", "email": "john@doe.com", "phone": "123456" }, "shipping_info": [ { "shipping_company": "DHL US", "tracking_number": "1234567890", "return_shipping_company": "UPS", "return_tracking_number": "112233445566778899" } ] } ``` Sample of a success response to check capture details. ### Error response If your request contains errors, you'll receive an error response. Ensure the `order_id` and the `capture_id` values you provided are valid and correctly formatted. ``` json { "error_code": "NO_SUCH_ORDER", "error_messages": [ "Order 7849fd84-47dc-4919-a7ce-47b9f46156f cannot be found" ], "correlation_id": "f072554f-ef99-4b21-85da-633355aab998" } ``` Sample of an error response to check capture details. You can use the `correlation_id` and the `order_id` values to troubleshoot the call in the Merchant portal logs section. Ready to send this request? See the [API reference of this call.](https://docs.klarna.com/api/ordermanagement/#operation/getCapture) ## Add shipping information to capture Use the Order management API to add shipping information to an order and enable delivery tracking. When you want to add shipping details to an order, you have two ways to attach this information. One option is to send the shipping details in the request body when [capturing an order](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api/capture-and-track-orders.md). Another option is to send the shipping details after capturing the order, as explained in this API call. By adding the shipping details to an order, you make this information available to your customers so that they can keep [track of the delivery](https://docs.klarna.com/payments/after-payments/order-management/more-actions/delivery-tracking.md). To add the shipping information to a captured order, send a `POST` request to the [{apiUrl}](https://docs.klarna.com/api/ordermanagement/#operation/appendShippingInfo)`{apiUrl}/ordermanagement/v1/orders/{order_id}/captures/{capture_id}/shipping-info` endpoint. Provide `order_id` and `capture_id` as path parameters. The `order_id` is the identifier you get in a successful response when placing a new order, and the `capture_id` is the identifier you get when successfully capturing an order. Include the following required body parameters in your request: - `return_shipping_company`: name of the shipping company for the return shipment - `return_tracking_number`: tracking number that identifies the return shipment - `return_tracking_uri`: URL where the customer can track the return shipment - `shipping_company`: logistics company (carrier) managing the delivery. For more information, see the [carrier list.](https://docs.klarna.com/payments/after-payments/order-management/more-actions/klarna-carrier-partner-list.md) - `shipping_method`: method for delivering the goods - `tracking_number`: tracking number that identifies the shipment - `tracking_uri`: URI where the customer can track their shipment ``` json { "shipping_info": [ { "return_shipping_company": "DHL US", "return_tracking_number": "93456415674545679888", "return_tracking_uri": "http://shipping.example/findmypackage?93456415674545679888", "shipping_company": "DHL US", "shipping_method": "Home", "tracking_number": "63456415674545679874", "tracking_uri": "http://shipping.example/findmypackage?63456415674545679874" } ] } ``` Sample request to add shipping information. You can add shipping information for two different items in the same call. For example, suppose a single order includes two packages associated with two different shipments and tracking numbers; in that case, you have to send the `shipping_info` details for each item. You can learn more about shipping companies in the [Carrier partner section](https://docs.klarna.com/payments/after-payments/order-management/more-actions/klarna-carrier-partner-list.md). ### Success response If your request is successful, you'll receive a `204 No content` response. ### Error response If your request contains errors, you'll receive an error response. Ensure the `order_id` and the `capture_id` values you provided are valid and correctly formatted. You can use the `correlation_id` and the `order_id` values to troubleshoot the call in the Merchant portal logs section. ``` json { "error_code": "NO_SUCH_ORDER", "error_messages": [ "Order 7849fd84-47dc-4919-a7ce-47b9f46156f cannot be found. Shipping info cannot be added to capture 32904e4c-61d2-400e-9b77-b4a45d612." ], "correlation_id": "f072554f-ef99-4b21-85da-633355aab998" } ``` Sample of an error response to add shipping information. Ready to send this request? See the [API reference of this call.](https://docs.klarna.com/api/ordermanagement/#operation/appendShippingInfo) ## Send customer communications Use the Order management API to trigger a new send out of customer communication. When you want to inform your customers about changes in their orders, use this API call to trigger an email to the customer with the latest details. This is also useful when your customer didn't receive the payment instructions or invoice as expected, and you want to send the information. ### Trigger customer communications To trigger the send out of customer communications, send a `POST` request to the [{apiUrl}](https://docs.klarna.com/api/ordermanagement/#operation/triggerSendOut)`{apiUrl}/ordermanagement/v1/orders/{order_id}/captures/{capture_id}/trigger-send-out` endpoint. Provide `order_id` and `capture_id` as path parameters. The `order_id` is the identifier you get in a successful response when placing a new order, and the `capture_id` is the identifier you get when successfully capturing an order. You don't need a request body for this `POST` method. ### Success response If the request is successful, you'll receive a `204 No content` response. ### Error response If your request contains errors, you'll receive an error response. Ensure the `order_id` and the `capture_id` values you provided are valid and correctly formatted. ``` json { "error_code": "NO_SUCH_ORDER", "error_messages": [ "Order 7849fd84-47dc-4919-a7ce-47b9f46156f cannot be found." ], "correlation_id": "f072554f-ef99-4b21-85da-633355aab998" } ``` Sample of an error response to send customer communications. ​You can use the `correlation_id` and the `order_id` values to troubleshoot the call in the Merchant portal logs section. Ready to send this request? See the [API reference of this call.](https://docs.klarna.com/api/ordermanagement/#operation/triggerSendOut) --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/before-you-start/changelog.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/before-you-start/changelog.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/before-you-start/changelog.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/before-you-start/changelog.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/before-you-start/changelog.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/before-you-start/changelog.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/before-you-start/changelog.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/before-you-start/changelog.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/before-you-start/changelog.md # Changelog of SAP Commerce Cloud Add-on ## List of changes to the Klarna add-on for SAP Commerce Cloud. ### Versions | Version | Release Date | Notes | |-------|------------|-----| | 1.0 | July 2018 | * Introduced compatibility with Hybris 5.7, 6.3, 6.5, and 6.6. | | 2.0 | January 2019 | * Extended compatibility to include Hybris 6.9. | | 3.0 | June 2019 | * Added support for Hybris 1905. | | 5.0 | February 2020 | * Released a security patch. | | 6.0 | September 2020 | * Upgraded Klarna Payments SDK to version 4.0.1. * Updated the user agent. * Enhanced On-site Messaging. * Introduced support for the Oceania region. | | 7.0 | March 2021 | * Added support for SAP Commerce 2005. * Fixed issues related to email notifications, auto-capture, and data handling. * Updated documentation. | | 7.1 | January 2023 | * Added support for SAP Commerce 2205. | | 7.2 | August 2023 | * Introduced new methods for On-site Messaging. | | 8.0 | March 2024 | * Introduced Klarna Express Checkout with improved handling for multistep checkouts, redirects, order creation, and localized initialization. * Added new admin panel options to toggle the Express Checkout button and configure the Client Key. * Upgraded the On-site Messaging library and expanded customization options. | | 9.0 | October 2024 | * Launched “Sign in with Klarna.” * Improved Klarna credentials configuration, payment handling, and Express Checkout workflows. * Added an authorization callback feature. * Seamlessly migrated existing merchants to the new configurations for a robust, streamlined experience. | | 9.1 | January 2025 | * Changes to user agent. * Changes to authorization callback documentation. | --- # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/other-actions/check-the-details-of-a-customer-token.md # Check the details of a customer token ## Use the Klarna payments API to check the status and details of the payment method linked to a customer token. ## Get customer token details To get the details of a customer token, send a `GET` request with an empty request body to the `{apiUrl}/customer-token/v1/tokens/{customerToken}` endpoint. Provide the customer token as a `customerToken` path parameter. ### Success response ### In response to your call, you'll receive the customer token's status and the details of the associated payment method. ``` json { "card": { "brand": "VISA", "expiry_date": "12/2020", "masked_number": "**1234" }, "direct_debit": { "masked_number": "**124" }, "payment_method_type": "INVOICE", "status": "ACTIVE" } ``` A success response to the check customer token details request. ### Error response ### ​If the customer token in your request is invalid, you'll get an error response. Make sure that the `customerToken` in the path matches the `token_id` of the token you \[ created earlier\]. You can use the value in `correlation_id` to find entries related to the request in **Logs** in the Merchant portal. ``` json { "correlation_id": "6a9b1cb1-73a3-4936-a030-481ba4bb203b", "error_code": "NOT_FOUND", "error_messages": [ "Invalid customer-token ID" ] } ``` An error response to the check customer token details request. --- # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/other-actions/check-the-details-of-a-payment-session.md # Check the details of a payment session ## Use the Klarna payments API to check the details of a session at any time. ## Get session details To see the details of the session created when initiating a payment, send a `GET` request with an empty request body to the \[ {apiUrl}\]`{apiUrl}/payments/v1/sessions/{session_id}` endpoint. Provide the id of the session you want to revise as a `session_id` path parameter. We only share customer details after authorizing the session. ### Success response In response to your call, you receive all the data collected throughout the payment process associated with this session. ``` json Description: successful operation Headers: Status Code: 200 Content-Type: application/json { "billing_address": { "attention": "string", "city": "Beverly Hills", "country": "US", "email": "john@doe.com", "family_name": "Doe", "given_name": "John", "organization_name": "string", "phone": "333444555", "postal_code": "90210", "region": "CA", "street_address": "Lombard St 10", "street_address2": "Apt 214", "title": "Mr" }, "client_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ewogICJzZXNzaW9uX2lkIiA6ICIw", "customer": { "date_of_birth": "string", "gender": "string", "last_four_ssn": "string", "national_identification_number": "string", "organization_entity_type": "LIMITED_COMPANY", "organization_registration_id": "string", "title": "string", "type": "string", "vat_id": "string" }, "expires_at": "2038-01-19T03:14:07.000Z", "locale": "en-US", "merchant_urls": { "confirmation": "string", "notification": "string", "push": "string" }, "order_amount": 0, "order_lines": [ { "image_url": "https://www.exampleobjects.com/logo.png", "merchant_data": "{\"marketplace_seller_info\":[{\"product_category\":\"Women's Fashion\",\"product_name\":\"Women Sweatshirt\"}]}", "name": "Battery Power Pack", "product_identifiers": { "brand": "Intel", "category_path": "Electronics Store> Computers & Tablets> Desktops", "global_trade_item_number": "735858293167", "manufacturer_part_number": "BOXNUC5CPYH" }, "product_url": "https://www.estore.com/products/f2a8d7e34", "quantity": 0, "quantity_unit": "kg", "reference": "19-402-USA", "tax_rate": 0, "total_amount": 0, "total_discount_amount": 0, "total_tax_amount": 0, "type": "physical", "unit_price": 0 } ], "order_tax_amount": 0, "payment_method_categories": [ { "asset_urls": {}, "identifier": "klarna", "name": "Pay with Klarna" } ], "purchase_country": "US", "purchase_currency": "USD", "shipping_address": { "attention": "string", "city": "Beverly Hills", "country": "US", "email": "john@doe.com", "family_name": "Doe", "given_name": "John", "organization_name": "string", "phone": "333444555", "postal_code": "90210", "region": "CA", "street_address": "Lombard St 10", "street_address2": "Apt 214", "title": "Mr" }, "status": "complete" } ``` Sample of a successful response to check the session details. ### Error response If the session id in your request is invalid, you get an error response. Ensure the `session_id` value you provided is correctly formatted and corresponds to a session that has not expired. ``` json { "correlation_id": "6a9b1cb1-73a3-4936-a030-481ba4bb203b", "error_code": "ERROR_CODE", "error_messages": [ "ERROR_MESSAGE" ] } ``` Sample of an error to check the session details. You can use the correlation_id value to troubleshoot the call in the merchant portal logs app. --- # Source: https://docs.klarna.com/payments/mobile-payments/before-you-start/choose-your-integration.md # Choose your integration ## Integrate Klarna into your mobile app using the Klarna Mobile SDK, choosing between native or WebView options to balance seamless user experience with flexibility and security. ## Overview The Klarna Mobile SDK is the only recommended way to integrate Klarna products in mobile apps. It ensures optimal performance, security, and feature coverage across all supported platforms and regions. To guarantee a seamless customer experience and maintain integration quality over time, consider the following for all mobile applications: - Klarna Mobile SDK is the **primary integration approach** for full feature and product coverage, click here to get started on [iOS](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/klarna-payments/), [Android](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/native-view/) or [React Native](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/reactnative/native-view/). - If Mobile SDK usage is not possible, the only acceptable secondary approach is to use **[System WebViews](https://docs.klarna.com/payments/mobile-payments/before-you-start/introduction-mobile-integrations/)** (e.g. `SFSafariViewController`, `ASWebAuthenticationSession`, `Android Custom Tabs`). Embedded/Custom WebViews (e.g. WKWebView, Android WebView) are strictly prohibited. To ensure secure, reliable, and future-proof integrations, Klarna **does not support** Embedded WebViews for purchase flows. Use the Klarna Mobile SDK or System WebViews as described instead. ​There are different implementation approaches for checkout experience in mobile applications on top of different mobile frameworks and platforms. To address our integrators needs, Klarna Mobile SDK provides multiple alternative approaches to offer the best user experience in any kind of mobile app integration with tailored native APIs. For Klarna products such as **Sign in with Klarna** and **On-site Messaging** you can refer to their mobile integration guidelines: - [Sign in with Klarna on mobile](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/mobile-integration/) - [On-site Messaging on mobile](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/on-site-messaging-for-mobile/) ## Native Integrations You have a fully native app. You’ll likely want to add views and interact with Klarna content via APIs from your app. We call this a native integration. For these situations, the SDK offers a fully native API towards our products. As the SDK owns these views entirely, it can provide the best experience, offer direct native API interfaces and notify you when relevant events have occurred. For Klarna Payments, Mobile SDK offers **Payment View** integration and this is the integration that we recommend for most mobile applications. Native integrations are available for Klarna products in the Klarna Mobile SDK. ![native_integration_layers_numbers.png](native_integration_layers_numbers.png) *native_integration_layers_numbers.png* 1. **Checkout Screen:** Your native checkout screen and views 2. **Payment View:** Klarna Payment View with the payment widget ### Payment View Payment View integration of the Mobile SDK is the most straight forward solutions as it gives you native APIs to initiate a view and authorize the payment session. Upon completed authorization, it notifies you with the result in a callback and the whole flow is completed on the client side. #### Integration Steps How it works: At a high level, integrating Klarna Payments in your app involves a few key steps: 1. **Create a Klarna session** (Server-side) – Your server calls Klarna’s API to create a payment session with the customer’s order details. Klarna responds with a client_token that represents this session. 2. **Rendering the payment view** (Client-side) – Using the client_token, your app displays Klarna’s KlarnaPaymentView (a pre-built UI component) for the available payment method(s). This view is essentially Klarna’s payment widget optimized for mobile. 3. **Authorizing the session** (Client-side) – The customer reviews the Klarna payment option and confirms the payment. The SDK notifies your app (via callbacks) when the payment is authorized, providing an authorization_token if approval was successful. 4. **Creating an order** (Server-side) – Your server uses the authorization token to finalize the purchase by creating an order through Klarna’s API. Upon success, you can show an order confirmation in your app. These steps mirror Klarna’s web integration flow (session creation → render payment options → authorization → order creation), but the Mobile SDK makes it native. In the following sections, we’ll guide you through setting up the SDK on [iOS](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/klarna-payments/), [Android](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/native-view/) and [React Native](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/reactnative/native-view/), implementing the payment view, handling events, and completing the end-to-end flow. ![mobile-sdk-payments-diagram.png](mobile-sdk-payments-diagram.png) *mobile-sdk-payments-diagram.png* ## Continue to integrate Payment View now: - **Android integration**: Follow our guide for Android apps. - **iOS integration**: Follow our guide for iOS apps. - **React native integration**: Follow our guide for React native apps. - **Android integration**: Follow our guide for Android apps. - **iOS integration**: Follow our guide for iOS apps. - **React native integration**: Follow our guide for React native apps. - **Android integration**: Follow our guide for Android apps. - **iOS integration**: Follow our guide for iOS apps. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/prestashop/conversion-boosters/configuring-on-site-messaging.md # Configuring On-site messaging in Prestashop ### Activate On-site messaging The "On-site Messaging" section of the module contains configuration options and settings for Klarna On-site-Messaging. [On-site messaging](https://docs.klarna.com/conversion-boosters/on-site-messaging/before-you-start.md) is a way to let customers know that Klarna is available on your website. As of version 1.3.0+, On-site messaging is supported, for standard PrestaShop themes, such as [Classic](https://devdocs.prestashop-project.org/8/themes/).  Compatibility with non-standard themes is not guaranteed or supported. The **Client Identifier** is found in the [Klarna Merchant Portal](https://portal.klarna.com/), at Payments settings -\> Client identifier, or also from "Conversion boosters" top menu -\> On-site Messaging app -\> Installation. Ensure you copy it without quotes or whitespace. ![ Klarna Merchant Portal -> Client identifier](ZkNAoiol0Zci9Gi0_ClientIdentifiers.jpeg) *Klarna Merchant Portal -> Client identifier* Also, add your shop's domain in **Allowed origins** within **Client identifier** section. ![ Klarna Merchant Portal -> Allowed origin](af9e9cd4-44f4-4179-8287-87f3c7d49937-Allowed-origin.jpeg) *Klarna Merchant Portal -> Allowed origin* Paste the Client Identifier from the Klarna Merchant Portal in the **Client ID** field in the PrestaShop Klarna module, in the "Credentials" section. ![ PrestaShop Back Office -> Klarna module Credentials ](ZwbDuYF3NbkBXGbS_PrestaShopCredentials.jpeg) *PrestaShop Back Office -> Klarna module Credentials* Determine which placement types are desired; product and cart page placements are recommended. ![OSM configuration in Prestashop](ZwbGsYF3NbkBXGcD_PrestaShopOSM.jpeg) *OSM configuration in Prestashop* Data from the customer's browser for the shop (e.g. language and currency switcher) and shop data are used to determine the appropriate data-locale for the On-site messaging placement.   - For all non-EUR currency, the code matches currency and checks for supported language. Based on the customer's chosen language, the module returns a locale. The currency list has only one match for each country, so the module has predefined regions based on currency, e.g. if currency PLN is matched, Polish language is used, data-locale would be pl-PL. If any other language were to be used, en-PL would be returned instead as no other language is supported for the Poland region. - As EUR currency supports multiple regions, the logic is more complex. The module first uses the current billing country (e.g. if the customer entered address data in checkout). If the customer's country is not set, the module uses the default shop's country. Based on the country, the module searches for a region match. Then the module proceeds to check for language and returns a specific locale. For these cases, the module first respects the current country, so the region would not differ. (The module can't use language solely as language could be used in multiple countries. For example Belgium doesn't have a single national language so without respecting the country, Belgium region would never be used.) - On both cases if no match is found (neither currency, nor country), the module returns default locale en-\*\* based on what is configured in Klarna's settings. This locale on install will be set to default to the shop's country. Positioning of the displayed on-site messaging placement(s) on the shop page are not currently configurable within the module. This functionality may be added in the future, but a target date is not yet available. --- # Source: https://docs.klarna.com/platform-solutions/acquiring-partners/stripe/conversion-boosters/considerations-for-conversion-boosters.md # Source: https://docs.klarna.com/platform-solutions/acquiring-partners/adyen/conversion-boosters/considerations-for-conversion-boosters.md # Considerations for Conversion boosters with Adyen ## Klarna On-site messaging Use Klarna’s On-site messaging to raise awareness of Klarna's flexible payment options and other benefits throughout the shopping journey. With only a few lines of code, you’ll have our dynamic messaging up and running in no time. And the result? You’ll get an uplift in average order value, improve conversion, and expand your customer base.  Klarna On-site messaging isn’t currently integrated by Adyen, but you can add it by following the [Klarna documentation](https://docs.klarna.com/on-site-messaging). You’ll have access to **On-site messaging** in the Klarna Merchant portal. For more information, reach out to Klarna partner support. ## Express button Simplify the checkout experience and give your customers a fast and convenient way to shop with Klarna, even if it’s their first time visiting your website. Adding our Express button is an effortless way to increase conversion.  Express button isn’t currently integrated by Adyen, but you can add it by following the [Klarna documentation](https://docs.klarna.com/express-button.md). For more information, reach out to Klarna partner support. When integrating Express button, don’t collect the customer’s billing address again as Klarna will provide the details back to you via a callback. ## Branding For a smoooth post-purchase experience, the right brand configuration is a must. If you want to update your store's branding information, you can do so through the Klarna merchant portal. --- # Source: https://docs.klarna.com/resources/business-tools/merchant-portal-guide/conversion-boosters.md # Conversion boosters ## Get started This page will offer you some shortcuts so you can easily unlock the full power of Klarna: - Brand manager - On-site messaging - Express checkout - Sign in with Klarna ### Plugin setup If you are using any of the e-commerce platforms listed here, you can utilize our plugins to enable payments and access boost features. Simply click on one of the available platforms, and you will be redirected to start the enablement process. ## Brand Manager In the Brand Manager app, you will be able to configure how you want your brand to be presented to the customers throughout their shopping journey such as in the payment page, notifications or in the Klarna app. You can choose: - Brand name - Homepage URL for your website - URL for your Instagram profile - URL for your Facebook profile - Your own logo that will be displayed in the Klarna app - Background picture and logo that will appear in your profile as a Klarna merchantSimply upload the images and fill out the text fields and click save at the bottom of the page. Simply upload the images and fill out the text fields and click **Save** at the bottom of the page. ![ Brand manager screen](ZsNkMUaF0TcGJEVQ_MP-BrandManager.jpeg) *Brand manager screen* ## On-site messaging OSM enables you to add tailored messaging to your website and turn visitor into shoppers by delivering messages like Klarnas’ flexible payment options or incentivising products like Deals, Rewards Club. With OSM you can let shoppers know about the different payment options you have available as they browse your website. Knowing what financing options are available early on can influence the purchase decision. In this app you can find three sections: - **Installation:**in this section you can obtain the codes needed to install the messaging in your product page. - **Placements:** here you have the option to personalise and download the different options that Klarna offers for the messages. - **Updates:** in this section you will find any updates that might happen regarding on-site messaging and that you will be able to implement in your website. For example, new designs for the messages that indicate to your clients that you offer Klarna as a payment method. ### Placements In the placements page you can choose the different messages you want to include in your website. You can choose messages by store (if you have more than one), country and language. In the placements tab, under each option for the different messages, you also have the possibility of customising according to the ‘look and feel’ of your own website. That way, it will be fully integrated to what you already display in it. You can choose font, color and size of the text. ### Updates Here you can find the latest updates regarding installation, integration and placements so that the OSM on your website is up-to-date! Once the OSM is all set up, the Klarna payment options will be showed to the customer prior to their checkout on your website depending on the placing. ## Express Checkout Express checkout helps you uplift conversion and minimize cart abandonment. By pre-filling customers’ details, it allows you to treat your shoppers to a faster, more enjoyable shopping experience. In this section, you will find all the necessary tools to enable this feature on your website. - **Allowlisting**: in this section, you can perform the allowlisting of your domain. - **Installation**:  in this section, you can obtain the client identifier, the JS library and the codes needed to install Express checkout on your site. ## Sign in with Klarna Sign in with Klarna is a social login feature designed for shopping. It allows customers to easily and securely sign up for your platform using their Klarna account information. In this section, you will find direct access to our integration guidelines for enabling this feature on your site. --- # Source: https://docs.klarna.com/resources/legal-and-compliance/policies-and-term-of-service/cooperation-agreement-conditions.md # Cooperation agreement complementary conditions ## These clauses ensure that the cooperation agreement remains robust and adaptable, reducing the risk of misunderstandings and fostering a resilient partnership. When entering into a partnership with Klarna, a well-structured agreement lays the foundation for a successful, collaborative business relationship. In this page you will find additional provisions that clarify the original agreement and addresses specific scenarios. ## Stop order/fraud or suspicious circumstances  In the event Klarna discovers fraud or suspicious circumstances relating to a transaction, Klarna may instruct the Merchant to stop the order process and/or shipping. The Merchant agrees to follow Klarna’s instructions immediately upon receipt, so long as such instructions are provided within twenty-four (24) hours of Capture of the applicable Claim. The Merchant shall notify the Customer of any stop request at the Customer’s contact details (e.g. email address, telephone number and/or address) as approved by Klarna at the time of order. ### Repayment for Claims involving related parties Klarna has the right to be repaid by the Merchant for any Claim that arises from a transaction involving a person or entity reasonably considered to share a financial interest with the Merchant. This includes, but is not limited to, affiliated companies, as well as any owner, board member, senior executive, or employee of the Merchant or its affiliates. This repayment obligation does not apply where the transaction was conducted in the ordinary course of business, on commercially reasonable terms, and in the absence of any indicators suggesting an improper purpose, a conflict of interest, or fraud, as determined by Klarna in its sole discretion. ## Security Interests in the Claim The Parties agree that when the Claim is created Klarna shall be exclusively entitled to all security interests related to the Claim, e.g. any retention of title in the goods delivered. For clarity, if a Claim is retransferred from Klarna to the Merchant, all security interests relating to such Claim will also be retransferred.  ## Service Charges for Direct, Card, and Other Non-Integrated Transactions The Service Charges will be applicable to all Claims that are Captured via (i) a direct API Integration (Direct); (ii) a one-time use virtual card Integration (Virtual Card); (iii) a Klarna -branded card product (such card and Virtual Card together are referred to herein as a Card); or (iv) any other payment solution outside of the Integration (together with a Card, a Non-Integrated Transaction). Unless otherwise stated in the Agreement, for Non-Integrated Transactions, Merchant will pay the Service Charge(s) as set forth in the Agreement irrespective of the indicated Integration type. For any Claims that are processed as payment network transactions (i.e. Visa), such Claims will be processed  pursuant to the terms and conditions of applicable third party operators of payment networks (Third Party Payment Option Providers), and the terms and conditions of any applicable agreement(s) between Merchant and its acquiring bank. The Merchant will be responsible for any interchange or similar processing fees charged by the applicable Third Party Payment Option Provider related to the use of commercial credit or debit products in connection with the Shopping Solutions. ## Late Payment and Recovery Cost Compensation By using Klarna’s services, you acknowledge and accept that Klarna may apply statutory interest on overdue amounts and claim compensation for recovery costs in accordance with the laws governing commercial transactions in the relevant jurisdiction. Where a merchant fails to pay an invoice by its due date, Klarna may, where permitted by applicable law, claim the following: - **Fixed recovery compensation** to compensate Klarna for its own recovery costs (e.g. administrative and collection efforts); - **Statutory interest** on the overdue amount; and - **Reimbursement of any additional reasonable recovery costs** incurred due to the delay in payment. **Applicable Fixed Recovery Compensation Amounts (by currency)** Where permitted by local law, Klarna applies the following fixed recovery compensation amounts based on the currency of the invoice, regardless of the merchant’s country of incorporation: - CZK: 1,200 CZK - DKK: 310 DKK - EUR: 40 EUR - GBP: 40 GBP - HUF: 13,500 HUF - NOK: 460 NOK - PLN: 150 PLN - RON: 180 RON - SEK: 450 SEK ## Credit Assessments Klarna will perform credit assessments of each respective customer and the merchant.  ## Prohibited Activities – Security and Performance Testing and Use of Purchase Power Data Purchase Power Data is any data used by Klarna to determine a consumer's spending ability or any data related to granting credit. You as a Merchant acknowledge and agree that you shall not, and shall ensure that your employees, contractors, agents, or any third parties acting on your behalf do not, conduct or attempt to conduct any form of vulnerability scanning, penetration testing, performance testing, stress testing, denial-of-service simulation, or any other activity intended to probe, scan, or test the vulnerability of any Klarna systems, networks, APIs, services, or infrastructure, whether in production or non-production environments, without Klarna’s prior written consent. You as a Merchant accept that any such unauthorized activity will be deemed a material breach of your  agreement concerning the integration and use of Klarna and Klarna’s Services. You as a Merchant further accept and agree that you are acting as a Processor as regards Purchase Power Data and are only entitled to use said data for the sole purpose of facilitating transactions. Under no circumstances may you utilise this Purchase Power Data for any other purpose, including but not limited to modelling or analytical purposes. Additionally, you must delete such information without undue delay upon Klarna's request. Notwithstanding the foregoing, the Merchant may conduct limited performance testing solely within Klarna’s playground / test environment, provided that such testing complies with the specific guidelines and restrictions issued by Klarna. Klarna reserves the right to take any remedial or protective actions it deems necessary in response to such breach, including without limitation immediate suspension of Services, withholding of payments, and pursuit of legal remedies. --- # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-hpp/api-documentation/create-session.md # Create session with Hosted Payment Page - API Details When you have created a *Payment Session* with the *Payment Provider*’s API, you will be able to create an **HPP Session**. This *HPP Session* will let you show the Payment Provider’s interface to the Consumer without any iframe integration on your website. The HPP Session is deeply linked to the *Payment Session*, both Sessions will have a tied lifecycle meaning that the *HPP Session* will expire 1 hour before the *Payment Session*, see session lifetime. Additionally, when the *Payment Session* status is updated, *HPP Session*’s one is too. Multiple *HPP Sessions*can be linked to the same *KP Session*if you need to have multiple customization at the same time, although it is considered as a bad practice. This is not the case with a*KCO Order*and may lead to unexpected behaviors. All the customization of the appearance of the Hosted Payment Page is done in this call, see ourcustomization guide. | **Description** | **Creates a session with HPP-API** | |----|----| | Reference | For a full explanation of required and accepted (optional) parameters, check HPP Create Session Options below. | | Url structure | /hpp/v1/sessions | | Example | curl -X POST --header "Authorization: Basic " --header "Content-Type: application/json" --header “Cache-Control: no-cache” --data “” | ## Examples ### Request for Klarna Payments (KP) ``` json { "payment_session_url": "https:///payments/v1/sessions/", "merchant_urls": { "success": "https://example.com/success?token=&sid={{session_id}}&authorization_token={{authorization_token}}", "cancel": "https://example.com/cancel?token=&sid={{session_id}}", "back": "https://example.com/back?token=&sid={{session_id}}", "failure": "https://example.com/fail?token=&sid={{session_id}}", "error": "https://example.com/error?token=&sid={{session_id}}" } } ``` ### Request for Klarna Payments (KP) with Place Order ``` json { "payment_session_url": "https:///payments/v1/sessions/", "merchant_urls": { "success": "https://example.com/success?token=&sid={{session_id}}ℴ_id={{order_id}}", "cancel": "https://example.com/cancel?token=&sid={{session_id}}", "back": "https://example.com/back?token=&sid={{session_id}}", "failure": "https://example.com/fail?token=&sid={{session_id}}", "error": "https://example.com/error?token=&sid={{session_id}}" }, "options": { "place_order_mode": "PLACE_ORDER" } } ``` ### HPP Session Creation Response ``` json { "session_id": "", "redirect_url": "https://pay.klarna.com/eu/hpp/payments/2OCkffK", "session_url": "https://api.klarna.com/hpp/v1/sessions/", "qr_code_url": "https://pay.klarna.com/eu/hpp/payments//qr", "distribution_url": "https://api.klarna.com/hpp/v1/sessions//distribution", "expires_at": "2019-05-29T08:22:05.563Z", "distribution_module": { "token": "", "standalone_url": "https://pay.klarna.com/eu/hpp/distributions/?profile_id={{profile_id}}&view_id={{view_id}}", "generation_url": "https://api.playground.klarna.com/hpp/v1/sessions//distribution-module/token" } } ``` The integration layer should use the URLs sent back in the create session call when interacting with the HPP Session as the structure of the URLs may change. Do not recreate URLs by generating a made up structure. ## How to create the Request ### Payment Session URL After creating the **KP Session** or **KCO Order** you need to compute the corresponding URL to one of them. To do so, simply use the URL that you are using to access them via API. | Payment Provider | URL Structure | |----|----| | Klarna Payments | /payments/v1/sessions/ | Exact domain names for environments and regions can be found in our environments and testing guidelines. ### Merchants URLs Merchant URLs are used to redirect the Consumer’s browser to your website after a successful payment, a rejection or a cancellation by the Consumer. When you let success, cancel or failure empty or null, the Consumer will be shown a generic action confirmation page. See our customization guide to get to see how these pages look like. When error is empty or null, the failure definition will be used. On all of these links you can use placeholders to get more context on the transaction, for example the  tag will be replaced by the identifier of the HPP Session. | **Name** | **Requirement** | **Usage** | |----|----|----| | success | Optional | Consumer will get redirected there after a successful authorization of payment for both KP and KCO. When using KP as Payment Provider, a place holder will be required to get the KP Authorization Token to place the order. | | cancel | Optional | Consumer will get redirected there when clicking on the cancellation button. *[See back button versus cancel button chapter](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-hpp/before-you-start/distribute-session/#cancel-and-back-what-are-the-differences).* | | back | Optional | Consumer will get redirected there when clicking on the back button. *[See back button versus cancel button chapter.](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-hpp/before-you-start/distribute-session/#cancel-and-back-what-are-the-differences)* | | failure | Optional | Consumer will get redirected there when payment is refused by Klarna. If an error occurs and noerrorURL was given, then the consumer will also get redirect to this URL. | | error | Optional | Consumer will get redirected there when an error occurred in the flow. If this parameter is not set and afailureURL is present, the Consumer will get redirected there. | | status_update | Optional | Url that will be used for callbacks. [Learn more about callbacks](https://docs.klarna.com/payments/other-products/hosted-payment-page/api-documentation/status-callbacks/). | | Tag | Place holder usage | |---|------------------| | | The identifier of the HPP Session. | | | Authorization token to use to place the order with KP API. This placeholder works only for KP as Payment Provider in a success URL. | | | Order identifier to use to handle post-purchase experience. This placeholder works only for KCO or when usingplace_order_modewith KP as Payment Provider. | ### Branding Customization You can use optional parameters to customize the look and feel of the Hosted Payment Page to better match your own brand. Please refer to our customization page. All customization parameters are described in our customization guide for the Hosted Payment Page. ### Payment provider specific parameters #### Klarna Payments The **Klarna Payments** integration has some specific parameters that you can pass to the HPP Session creation call to better configure what the consumer will see. Please read our KP integration guide. ## How to interpret the Response The *HPP Session* is created on a successful response. It contains different URLs that you may use to interact with depending on the way you intend to distribute the *Payment Page*. It is recommended to use these links directly and to avoid recreating them in your backend as the way they are defined may change without notice. | Field Key | Type | Description | |---------|----|-----------| | session_id | String | Generated identifier for the Session, referenced as HPP Session ID afterwards. | | session_url | API Endpoint URL | Use this URL to read the HPP Session you just created. This endpoint requires Merchant Credentials to accept requests. | | distribution_url | API Endpoint URL | Use this URL to distribute to your Consumer the HPP Session you just created by Email or SMS. Learn more in the [distribution of the HPP Session chapter](https://docs.klarna.com/payments/other-products/hosted-payment-page/api-documentation/distribute-session/) . This endpoint requires Merchant Credentials to accept requests. | | redirect_url | Public URL | Use this URL to redirect directly the Consumer’s browser to the Payment Page or the HPP Session you just created. Learn more in the [distribution of the HPP Session chapter](https://docs.klarna.com/payments/other-products/hosted-payment-page/api-documentation/distribute-session/) . | | qr_code_url | Public URL | Use this URL to display a QR Code to your Consumer, so that they will access the Payment Page or the HPP Session you just created by scanning it with their phone. Learn more in the [distribution of the HPP Session chapter](https://docs.klarna.com/payments/other-products/hosted-payment-page/api-documentation/distribute-session/) . | | expires_at | Date | Date when this session will not be able for the consumer to pay anymore. You can read more about lifetime in our [session lifetime article](https://docs.klarna.com/payments/other-products/hosted-payment-page/api-documentation/#hpp-session-session-lifetime) . [Dates format is described here](https://docs.klarna.com/api/api-urls/#data-types) . | | distribution_module | Object containing following fields: * token * standalone_url * generation_url | Distribution module data | --- # Source: https://docs.klarna.com/payments/web-payments/before-you-start/data-requirements/customer-data-requirements.md # Customer data requirements for authorize() ## This section describes the customer data we require to place an order, depending on the purchase country. ## Why do we care? As we offer credit to your customers, we need to have enough data to do a proper risk and fraud assessment. This is only possible if we have high-quality customer data in a standardized format. Klarna’s services may not be used by businesses registered or operating in some jurisdictions. Additionally, Klarna’s services may not be used to process payments for the sale of goods or services shipping from, or for the purchase of goods that would be shipped to consumers with a billing or shipping address in the specific regions.  See full list of [Prohibited Jurisdictions and Regions](https://docs.klarna.com) hereFinally, but not less important, we also need to manage customer data to ensure the best customer experience in the order management process. Ensure customer information is not sent before confirming the intention to pay with Klarna to remain GDPR compliant. This confirmation typically occurs at the time of [authorization](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-2-checkout/). ## Adding billing and shipping address Klarna payments API can handle both billing and shipping addresses separately. If you don't provide a shipping address, we duplicate the billing address and use it as the shipping address in our customer data. ### Risk assessment During our assessment, the fraud risk might be higher if: - The billing and shipping addresses are different. - The customer of the billing and shipping addresses is different. ## Adding customer data throughout the session The customer data you send us in later calls after `authorize()` is merged with the data you entered previously. ## Data per country Depending on the data standards of each country, we require different information per country market. To ensure a friendly customer experience, you need to properly provide the customer details in the mandatory fields. `street_address2` is only to add extra details to the address, such as the floor and the apartment number. Send the main address information in the regular `street_address` field. **The following Unicode blocks are supported for all markets except Greek** [BASIC_LATIN](https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block)) [LATIN_1_SUPPLEMENT](https://en.wikipedia.org/wiki/Latin-1_Supplement) [LATIN_EXTENDED_A](https://en.wikipedia.org/wiki/Latin_Extended-A) [PHONETIC_EXTENSIONS](https://en.wikipedia.org/wiki/Phonetic_Extensions) **The following Unicode blocks are supported for the Greek market** [BASIC_LATIN](https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block)) [GREEK](https://en.wikipedia.org/wiki/Greek_and_Coptic) [GREEK_EXTENDED](https://en.wikipedia.org/wiki/Greek_Extended) **Additionally, characters are also matched against the following Unicode categories** [Li](https://www.compart.com/en/unicode/category/Ll) (Lower case characters) [Lu](https://www.compart.com/en/unicode/category/Lu) (Upper case characters) [Nd](https://www.compart.com/en/unicode/category/Nd) (Decimal digit number characters) Note that any characters that don't belong to the categories above are considered special characters. The characters allowed in each field are listed in the market overview tables below. ### Europe Sweden,Finland,Norway,Denmark ### Sweden, Norway, Finland, and Denmark

Customer details

Requierement level

Comment

email

Optional for authorize() operation

Must include @ and domain. Pattern: ''(?^[a-zA-Z0-9!#$%&'+/=?^_`{|}

~-]+(?:\.[a-zA-Z0-9!#$%&'+/=?^_`{|}

~-]+)*)@(?(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+(?[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$))''

postal_code

Optional for authorize() operation

Validation according to Universal Postal Union addressing systems.

national_identification_number

Depending on the payment method. If not added, Klarna will collect the details in the purchase flow.

Necessary for all credit payment methods and Pay Now.

given_name

Optional for authorize() operation

Customers given name in UTF-8 encoding. Cannot be only numbers, must be more than 1 character. Allowed special characters: -'’.°ºᵃª

family_name

Optional for authorize() operation

Customers family name in UTF-8 encoding. Cannot be only numbers, must be more than 1 character. Allowed special characters: -'’.°ºᵃª

street_address

Optional for authorize() operation

Street name and number following Universal Postal Union addressing systems Allowed special characters: -'´`",.:;#&/()+@ °ºᵃª_ \

care_of

Optional for authorize() operation

To address the order to another recipient. B2C purchases only.

city

Optional for authorize() operation

City field according to the market.

phone

Optional for authorize() operation

Follow the standards defined in https://github.com/googlei18n/libphonenumber

gender

Derived

Derived from PNO

date_of_birth

Derived

Derived from PNO

United Kingdom ### United Kingdom

Customer details

Requierement level

Comment

- email

|Optional for authorize() operation

Must include @ and domain. Pattern: ''(?^[a-zA-Z0-9!#$%&'+/=?^_`{|}

~-]+(?:\.[a-zA-Z0-9!#$%&'+/=?^_`{|}

~-]+)*)@(?(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+(?[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$))''

- postal_code

|Optional for authorize() operation

Validation according to Universal Postal Union addressing systems.

- title

|Optional for authorize() operation

Mr, Ms

date_of_birth

|Depending on the payment method. If not added, Klarna will collect the details in the purchase flow.

Necessary for all credit payment methods and Pay Now.

given_name

|Optional for authorize() operation

Customers given name in UTF-8 encoding. Cannot be only numbers, must be more than 1 character. Allowed special characters: -'’.°ºᵃª

family_name

|Optional for authorize() operation

Customers family name in UTF-8 encoding. Cannot be only numbers, must be more than 1 character. Allowed special characters: -'’.°ºᵃª

street_address

|Optional for authorize() operation

Street name and number following Universal Postal Union addressing systems Allowed special characters: -'´`",.:;#&/()+@ °ºᵃª_ \

street_address2

|Optional for authorize() operation

Second address line. Allowed special characters: -'´`",.:;#&/()+@ °ºᵃª_ \

city

|Optional for authorize() operation

City field according to the market.

phone

|Optional for authorize() operation

Follow the standards defined in https://github.com/googlei18n/libphonenumber

gender

|Derived

Derived from title

Ireland ### Ireland

Customer details

Requierement level

Comment

email

|Optional for authorize() operation

Must include @ and domain. Pattern: ''(?^[a-zA-Z0-9!#$%&'+/=?^_`{|}

~-]+(?:\.[a-zA-Z0-9!#$%&'+/=?^_`{|}

~-]+)*)@(?(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+(?[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$))''

postal_code (eircode)

|Optional for authorize() operation

Validation according to Universal Postal Union addressing systems

date_of_birth

|Depending on the payment method. If not added, Klarna will collect the details in the purchase flow.

Necessary for all credit payment methods and Pay Now.

given_name

|Optional for authorize() operation

Customers given name in UTF-8 encoding. Cannot be only numbers, must be more than 1 character. Allowed special characters: -'’.°ºᵃª

family_name

|Optional for authorize() operation

Customers family name in UTF-8 encoding. Cannot be only numbers, must be more than 1 character. Allowed special characters: -'’.°ºᵃª

street_address

|Optional for authorize() operation

Street name and number following Universal Postal Union addressing systems Allowed special characters: -'´`",.:;#&/()+@ °ºᵃª_ \

street_address2

|Optional for authorize() operation

Second address line. Allowed special characters: -'´`",.:;#&/()+@ °ºᵃª_ \

city

|Optional for authorize() operation

City field according to the market.

region

|Optional for authorize() operation

County, E.G "Antrim".

phone

|Optional for authorize() operation

Follow the standards defined in https://github.com/googlei18n/libphonenumber

Germany,Austria,Switzerland,Netherlands,Belgium ### Germany, Austria, Switzerland, Netherlands and Belgium

Customer details

Requierement level

Comment

email

|Optional for authorize() operation

Must include @ and domain. Pattern: ''(?^[a-zA-Z0-9!#$%&'+/=?^_`{|}

~-]+(?:\.[a-zA-Z0-9!#$%&'+/=?^_`{|}

~-]+)*)@(?(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+(?[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$))''

postal_code

|Optional for authorize() operation

Validation according to Universal Postal Union addressing systems.

date_of_birth

|Depending on the payment method. If not added, Klarna will collect the details in the purchase flow.

Necessary for all credit payment methods.

title

|Optional for authorize() operation

de:“Herr”, “Frau”; de_CH: “Herr, “Frau”; it_CH: “Sig.", “Sig.ra”; fr_CH: “M", “Mme”; nl: “Dhr.", “Mevr.”; nl_BE: “Dhr”, “Mevr”; fr_BE: “M", “Mme”

given_name

|Optional for authorize() operation

Customers given name in UTF-8 encoding. Cannot be only numbers, must be more than 1 character. Allowed special characters: -'’.°ºᵃª

family_name

|Optional for authorize() operation

Customers family name in UTF-8 encoding. Cannot be only numbers, must be more than 1 character. Allowed special characters: -'’.°ºᵃª

street_address

|Optional for authorize() operation

Street name and number following Universal Postal Union addressing systems Allowed special characters: -'´`",.:;#&/()+@ °ºᵃª_ \

care_of

|Optional for authorize() operation

To address the order to another recipient. B2C purchases only.

city

|Optional for authorize() operation

City field according to the market.

phone

|Optional for authorize() operation

Follow the standards defined in https://github.com/googlei18n/libphonenumber

> gender

|

| Derived from title.

France,Spain,Portugal,Poland ### France, Spain, Portugal and Poland

Customer details

Requierement level

Comment

email

|Optional for authorize() operation

Must include @ and domain. Pattern: ''(?^[a-zA-Z0-9!#$%&'+/=?^_`{|}

~-]+(?:\.[a-zA-Z0-9!#$%&'+/=?^_`{|}

~-]+)*)@(?(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+(?[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$))''

postal_code

|Optional for authorize() operation

Validation according to Universal Postal Union addressing systems.

date_of_birth

|Depending on the payment method. If not added, Klarna will collect the details in the purchase flow.

Necessary for all credit payment methods.

place_of_birth

|Depending on the payment method. If not added, Klarna will collect the details in the purchase flow.

Necessary for all credit payment methods.

given_name

|Optional for authorize() operation

Customers given name in UTF-8 encoding. Cannot be only numbers, must be more than 1 character. Allowed special characters: -'’.°ºᵃª

family_name

|Optional for authorize() operation

Customers family name in UTF-8 encoding. Cannot be only numbers, must be more than 1 character. Allowed special characters: -'’.°ºᵃª

street_address

|Optional for authorize() operation

Street name and number following Universal Postal Union addressing systems Allowed special characters: -'´`",.:;#&/()+@ °ºᵃª_ \

street_address2

|Optional for authorize() operation

Second address line. Allowed special characters: -'´`",.:;#&/()+@ °ºᵃª_ \

city

|Optional for authorize() operation

City field according to the market.

phone

|Optional for authorize() operation

Follow the standards defined in https://github.com/googlei18n/libphonenumber

Italy ### Italy

Customer details

Requierement level

Comment

email

|Optional for authorize() operation

Must include @ and domain. Pattern: ''(?^[a-zA-Z0-9!#$%&'+/=?^_`{|}

~-]+(?:\.[a-zA-Z0-9!#$%&'+/=?^_`{|}

~-]+)*)@(?(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+(?[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$))''

postal_code

|Optional for authorize() operation

Validation according to Universal Postal Union addressing systems.

date_of_birth

|Depending on the payment method. If not added, Klarna will collect the details in the purchase flow.

Necessary for all credit payment methods.

place_of_birth

|Depending on the payment method. If not added, Klarna will collect the details in the purchase flow.

Necessary for all credit payment methods.

given_name

|Optional for authorize() operation

Customers given name in UTF-8 encoding. Cannot be only numbers, must be more than 1 character. Allowed special characters: -'’.°ºᵃª

family_name

|Optional for authorize() operation

Customers family name in UTF-8 encoding. Cannot be only numbers, must be more than 1 character. Allowed special characters: -'’.°ºᵃª

street_address

|Optional for authorize() operation

Street name and number following Universal Postal Union addressing systems Allowed special characters: -'´`",.:;#&/()+@ °ºᵃª_ \

street_address2

|Optional for authorize() operation

Second address line. Allowed special characters: -'´`",.:;#&/()+@ °ºᵃª_ \

city

|Optional for authorize() operation

City field according to the market.

region

|Optional for authorize() operation

Province in 2 letter format e.g "AG".

phone

|Optional for authorize() operation

Follow the standards defined in https://github.com/googlei18n/libphonenumber

Greece,Czech Republic,Hungary,Slovakia ### Greece, Czech Republic, Hungary and Slovakia

Customer Details

Requierement level

Comment

email

|Optional for authorize() operation

Must include @ and domain. Pattern: ''(?^[a-zA-Z0-9!#$%&'+/=?^_`{|}

~-]+(?:\.[a-zA-Z0-9!#$%&'+/=?^_`{|}

~-]+)*)@(?(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+(?[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$))''

postal_code

|Optional for authorize() operation

Validation according to Universal Postal Union addressing systems.

date_of_birth

|Depending on the payment method. If not added, Klarna will collect the details in the purchase flow.

Necessary for all credit payment methods.

given_name

|Optional for authorize() operation

Customers given name in UTF-8 encoding. Cannot be only numbers, must be more than 1 character. Allowed special characters: -'’.°ºᵃª

family_name

|Optional for authorize() operation

Customers family name in UTF-8 encoding. Cannot be only numbers, must be more than 1 character. Allowed special characters: -'’.°ºᵃª

street_address

|Optional for authorize() operation

Street name and number following Universal Postal Union addressing systems Allowed special characters: -'´`",.:;#&/()+@ °ºᵃª_ \

street_address2

|Optional for authorize() operation

Second address line. Allowed special characters: -'´`",.:;#&/()+@ °ºᵃª_ \

city

|Optional for authorize() operation

City field according to the market.

phone

|Optional for authorize() operation

Follow the standards defined in https://github.com/googlei18n/libphonenumber

Romania ### Romania

Customer Details

Requierement level

Comment

email

|Optional for authorize() operation

Must include @ and domain. Pattern: (?^[a-zA-Z0-9!#$%&'+/=?^_`{|}

~-]+(?:\.[a-zA-Z0-9!#$%&'+/=?^_`{|}

~-]+)*)@(?(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+(?[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$))

postal_code

|Optional for authorize() operation

Validation according to Universal Postal Union addressing systems.

date_of_birth

|Depending on the payment method. If not added, Klarna will collect the details in the purchase flow.

Necessary for all credit payment methods.

given_name

|Optional for authorize() operation

Customers given name in UTF-8 encoding. Cannot be only numbers, must be more than 1 character. Allowed special characters: -'’.°ºᵃª Letters with diacritics are allowed.

family_name

|Optional for authorize() operation

Customers given name in UTF-8 encoding. Cannot be only numbers, must be more than 1 character. Allowed special characters: -'’.°ºᵃª Letters with diacritics are allowed.

street_address

|Optional for authorize() operation

Street name and number following Universal Postal Union addressing systems Allowed special characters: -'´`",.:;#&/()+@ °ºᵃª_ \ Letters with diacritics are allowed.

street_address2

|Optional for authorize() operation

Street name and number. Allowed special characters: -'´`",.:;#&/()+@ °ºᵃª_ \ Letters with diacritics are allowed.

city

|Optional for authorize() operation

City field according to the market. Letters with diacritics are allowed.

region

|Optional for authorize() operation

Postal address region (or sector for addresses in Bucharest). For example Cluj (region) or Sector 6 (sector). Letters with diacritics are allowed.

phone

Optional for authorize() operation

Follow the standards defined in https://github.com/googlei18n/libphonenumber

## Americas United States of America,Canada,Mexico ### United States, Canada and Mexico

Customer details

Requierement level

Comment

email

|Optional for authorize() operation

Must include @ and domain. Pattern: ''(?^[a-zA-Z0-9!#$%&'+/=?^_`{|}

~-]+(?:\.[a-zA-Z0-9!#$%&'+/=?^_`{|}

~-]+)*)@(?(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+(?[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$))''

postal_code

|Optional for authorize() operation

Validation according to Universal Postal Union addressing systems.

date_of_birth

|Depending on the payment method. If not added, Klarna will collect the details in the purchase flow.

Necessary for all credit payment methods.

given_name

|Optional for authorize() operation

Customers given name in UTF-8 encoding. Cannot be only numbers, must be more than 1 character. Allowed special characters: -'’.°ºᵃª

family_name

|Optional for authorize() operation

Customers family name in UTF-8 encoding. Cannot be only numbers, must be more than 1 character. Allowed special characters: -'’.°ºᵃª

street_address

|Optional for authorize() operation

Street name and number following Universal Postal Union addressing systems Allowed special characters: -'´`",.:;#&/()+@ °ºᵃª_ \

street_address2

|Optional for authorize() operation

Address line 2, apartment, suite, for example, apt 2. Allowed special characters: -'´`",.:;#&/()+@ °ºᵃª_ \

region

|Optional for authorize() operation

For US: Two-letter state code in ISO 3166-1 alpha-2 format. For example, “CA” for California For Canada: Two-letter province code , for example, "ON" for Ontario. For Mexico: Two/three-letter format (ISO 3166-1 alpha-2) for the state. For example, “CDMX” for Ciudad de Mexico, "JAL" for Jalisco, "NL" for Nuevo León.

city

|Optional for authorize() operation

City field according to the market.

phone

|Optional for authorize() operation

Follow the standards defined inhttps://github.com/googlei18n/libphonenumber

## Asia and Oceania Australia,New Zealand ### Australia and New Zealand

Customer details

Requierement level

Comment

email

|Optional for authorize() operation

Must include @ and domain. Pattern: ''(?^[a-zA-Z0-9!#$%&'+/=?^_`{|}

~-]+(?:\.[a-zA-Z0-9!#$%&'+/=?^_`{|}

~-]+)*)@(?(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+(?[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$))''

postal_code

|Optional for authorize() operation

Validation according to Universal Postal Union addressing systems.

date_of_birth

|Depending on the payment method. If not added, Klarna will collect the details in the purchase flow.

Necessary for all credit payment methods.

given_name

|Optional for authorize() operation

Customers given name in UTF-8 encoding. Cannot be only numbers, must be more than 1 character. Allowed special characters: -'’.°ºᵃª

family_name

|Optional for authorize() operation

Customers family name in UTF-8 encoding. Cannot be only numbers, must be more than 1 character. Allowed special characters: -'’.°ºᵃª

street_address

|Optional for authorize() operation

Street name and number following Universal Postal Union addressing systems Allowed special characters: -'´`",.:;#&/()+@ °ºᵃª_ \

street_address2

|Optional for authorize() operation

Second address line. Allowed special characters: -'´`",.:;#&/()+@ °ºᵃª_ \

region

|Optional for authorize() operation

For AU: State code in ISO 3166-2 format, for example, “QLD” for Queensland, “WA” for “Western Australia”. For NZ: Suburb e.g ​​"Avondale"

city

|Optional for authorize() operation

City field according to the market.

phone

|Optional for authorize() operation

Follow the standards defined in https://github.com/googlei18n/libphonenumber

--- # Source: https://docs.klarna.com/payments/after-payments/disputes/evidence-gathering/customer-evidence-gathering.md # Customer evidence gathering ## In this article, you'll find a clear guide on what evidence customers need to raise a dispute. When a customer raises a dispute, they need to provide Klarna with valid evidence to support their claim. The specific information required varies based on the nature of the dispute (dispute reason) to ensure it's relevant to the issue at hand. If the necessary evidence is provided and the matter isn't resolved within the set timelines, an investigation might be initiated. ## Report a problem Once the customer has agreed to the conditions to raise a dispute Klarna will request further information regarding the Merchant contact. In this step, the customer provides Klarna with a basic Proof of contact. | Question | Response | |--------|--------| | “When did you contact the store?” | ( not possible to select dates before capture ) | | “How did you contact the store” | * Sent an email or text message * Through phone * Written communication * On Seller website | | “What was the store’s response?” | * Store agrees to assist with my problem * Store was not available * Store’s response was not as expected * Store was not able to help | | “Proof of contact & response” | ( recommended but not mandatory at this stage of the process ) | Once the customer has provided Klarna with a basic Proof of Contact they need to provide information specific to their problem. Below is a breakdown per dispute reason. ### Goods not received (full or part order) | Customer issue | Requested information | |--------------|---------------------| | I refused the delivery | N/A ( Customer instructed to contact the Merchant ) | | The item hasn't reached me | * “When is your expected delivery date?” * “Do you have the shipping tracking information” Yes * Comment No * Store did not provide” * “I misplaced it” | | "The item was delivered to the wrong shipping address" | * Proof of delivery to the wrong shipping address | | "The item was not available during a store pick up" | * “When did you visit the store to pick up the items?” | | "I missed to pick up my item" | * “When was the original pick up date?” | ### Faulty goods (item different or significantly not as described) | Customer issue | Requested information | |--------------|---------------------| | "I received a damaged or defective item" | * Description of damage or defect * Proof of damage or defect | | "I received an item that has missing part(s)" | * Description of missing part(s) * Proof of damage of missing part(s) | | "I received an item that is not as described" | * Comment * Attachment * Size * Color * Material * Style or patterns * Specification in the item * Completely different item | ### Incorrect invoice | Costumer issue | Requested Information | |--------------|---------------------| | "My item amount is wrong" | * “Add the items” * “Select type of product” * “Expected refund / item price” * “Item URL” * “Order confirmation” | | "Discount was not applied" | * “Add the items” * “Select type of product” * “Expected refund / item price” * “Item URL” * “Order confirmation” | | "Shipping Fees is wrong" | * “Expected refund / item price” | | Other | * “Add the items” * “Select type of product” * “Expected refund / item price” * “Item URL” * “Order confirmation” | ## Report a return Before being able to report a return the customer is obligated to confirm the conditions listed below:' - Confirmation of adherence to the Merchants return policy - “I will return the goods to by X date” - “I confirm that I have informed about the return” ### Return | Costumer issue | Requested information | |--------------|---------------------| | "What do you want to return?" | * Select item(s) | | "The item was returned by mail" | * Do you have a Tracking Number of your Return? Yes * Tracking ID * Shipping Carrier * Date of Return No | | "The item was returned in-store" | * Please provide receipt or reference no of the payment * Store Address you returned the item(s) at * When did you return the item(s)? * Any additional information about the return (Optional) | | "I have not returned the item(s)" | N/A ( Customer informed of Timeline to initiate a return ) | --- # Source: https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/customer-identity-cloud.md # Customer Identity Cloud ## You can display the Sign in with Klarna by enabling it via one of our Customer Identity Cloud providers. Sign in with Klarna is available natively on the [Auth0 platform](https://marketplace.auth0.com/integrations/klarna-social-connection), in their marketplace. It is also supported by other platforms, where you can add it using a custom OpenID connect configuration. Here is the list of verified platforms with Klarna. - Azure AD B2C - Google Firebase - AWS Cognito - Cidaas If your Customer Identity Cloud provider isn't listed, please reach out to us. --- # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-hpp/before-you-start/customization.md # Customization When creating an HPP Session you have some optional parameters that will let you modify the look and feel of Klarna’s Hosted Payment Page in order to better match your own branding. ## Overview ### Standard version ![klarna docs image](30d325c0-7bcc-4b5d-a601-61f04acba131_HPP_desktop_no_custom.jpeg)image ![klarna docs image](6a7717be-29a8-4a3a-b3ad-c812285cb013_HPP_mobile_no_custom.jpeg)image ### Customized ![klarna docs image](647d82c9-3596-463a-b60d-48de620c585e_HPP_desktop_custom.jpeg)image ![klarna docs image](d7eba885-4658-4728-9898-0acabf1a1fdb_HPP_mobile_custom.jpeg)image ## Generic confirmation pages When creating an HPP Session you can define the URL that you want the Consumer to be redirected to after making an action on the payment page. These URLs are in the merchant_urls block, but they are also optional. When you don’t put any value in there, generic pages are displayed to the Consumer. ### Success ![klarna docs image](063f9280-e7fd-4b88-b188-4548e75fe120_HPP_pages_payment.jpeg)image Failure ![klarna docs image](94877411-a8df-4377-9f93-6871e2193208_HPP_pages_failure.jpeg)image Cancellation ![klarna docs image](18dcc8bf-1bb7-4005-8a2d-bbc363002b65_HPP_pages_cancellation.jpeg)image ## Parameters A description of the options that can be passed to HPP. All of these are optional, some default to a sensible value if omitted in the call. ![klarna docs image](34fcc3f0-f511-47b1-bd44-d4c369908f03_HPP_customization.jpeg)image ## Logo and Feature image When provided your logo and feature image will appear on the Hosted Payment Page, their positions will depend on the Consumer’s browser capacities as HPP as different responsive designs. Both can be configured through the merchant portal. Merchants can try their setup in playground as well as production environment. It may take sometime for the changes to reflect on HPP. Logo configuration is documented at Merchant Branding Configuration Page ### Background Images Use this parameter to send a list of images to use as backgrounds on the payment page. HPP will use the image that fits the better to the Consumer’s browser capacities using the width parameter given. Images have to be served over HTTPS to avoid all kind of security warning on the Consumer’s browser. | Key | background_images | |-------------|-------------------------------------------------------| | Description | A list of images to be used as the background for HPP | | Type | Array | | Default | none | | **Parameter** | Type | Usage | |---------------|--------|---------------------------------------------| | url | String | Url of the image, must be served over HTTPS | | width | Int | Width of the screen the image works best on | ### Example Code: Background Images ``` json { "options": { "background_images": [ { "url": "https://example.com/background.jpg", "width": 1280 }, { "url": "https://example.com/background_small.jpg", "width": 480 } ] } } ``` ### Page Title Use this parameter to modify the title of the Hosted Payment Page. This title is shown in the page and as header of the Consumer’s browser. As it is defined by you, you are responsible of its localization to the Locale of the Consumer. | **Key** | **page_title** | |-------------|-----------------------------------------| | Description | Title on top of the Hosted Payment Page | | Type | String | | Default | Complete your purchase | ### Example Code: Page ``` json { "options": { "page_title": "Complete your purchase" } } ``` ### Complete purchase button labeling Depending on the kind of goods you are selling, use this parameter to change the label of the button on which the Consumer will click to finalize the purchase. Label is localized in the locale of the Session. | **Key** | **purchase_type** | |----|----| | Description | Purchase type, reflected in the complete purchase button on the bottom of HPP | | Type | Enum | | Accepted values | BOOK,BUY,CONTINUE,DOWNLOAD,ORDER,RENT,SUBSCRIBE,PAY | | Default | BUY | | Value | Button label in English | |-----------|-------------------------| | BOOK | Book | | BUY | Buy | | CONTINUE | Continue | | DOWNLOAD | Download | | ORDER | Order | | RENT | Rent | | SUBSCRIBE | Subscribe | | PAY | Pay | ### Example Code: Purchase type ``` json { "options": { "purchase_type": "buy" } } ``` ### Back Button Labeling Use this parameter to enable the user to go back to purchase page while providing the flexibility to you to end or keep alive the purchase session. When provided, a “Go Back” button will be displayed on the page instead of a “Cancel” button and the consumer will get redirected to this url on clicking on the go back button. See back button versus cancel button chapter for more information. | Key | back | |----|----| | Description | Redirection url on back button click | | Type | String | | Default | There is no back button by default. If this parameter is not provided, a cancel button will be displayed. | ### Example Code: Back URL ``` json { "merchant_urls": { "back": "https://example.com/back?token=&sid={{session_id}}" } } ``` ### Styling of payment methods Documented in the KP docs --- # Source: https://docs.klarna.com/payments/after-payments/order-management/manage-orders-in-the-merchant-portal/customize-order-settings.md # Customize order settings ## Set up the order notifications and reports you want to receive. Use the Merchant portal to customize the order notifications and reports as you prefer. In the **Order settings** section, you can easily make the configurations that better fit your business needs. Here's what you can customize regarding your order notifications: - **Notifications enablement:**Turn on and off the notifications feature. - **Notification preferences:**Specify the stores, time zone, language, and currency for the notifications you'd like to receive. - **Order category:**Select if you want to receive notifications for new, expiring, and unacknowledged orders. - **Notification timing:**Tell us if you prefer daily or weekly notifications. Regarding your order reports, you can set up specific stores and order creation dates to export the tracking information. The following image illustrates the order settings you can customize in the Merchant portal. ![ Customizing order settings in the Merchant portal. ](a51d8129-e354-40d6-bc62-6548d94c96f5_Order+management_Merchant+portal_Notification+settings.jpeg) *Customizing order settings in the Merchant portal.* --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/customize-placements.md # Customize placements ## This article outlines how you can customize the Klarna On-site messaging placements to better fit your store’s look and feel. If you want to customize the the placements in your Shopify store, you can do it in one of the following ways: - Edit the underlying CSS styling in your store’s source code, as described in the [Customize placements with CSS](https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/styling-on-site-messaging-with-css.md) article on Klarna.Docs. - Edit the placements in the Klarna Merchant portal, as described in the [Customize placements through Merchant portal](https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/styling-on-site-messaging-with-css.md) article on Klarna.Docs. Note that only the default light theme is customizable. If you use the dark theme, you won’t be able to see any customizations in the storefront. Some customization options, that is, changes in padding and alignment, affect the placement itself and not the contents of the placement. These options are available in the Klarna On-site messaging Shopify app in Shopify admin.  Customizations in the app and the Merchant portal impact the placement differently and you may need to apply the custom styling in both to see the desired result. Examples of such customization are the Merchant portal placement text alignment within the placement and the **Ad Position** alignment in the Klarna OSM Shopify appthat affects the position of a placement on the page. Additionally, only selected Klarna placements support text alignment within the placement, and some themes may not honor the styling for placement alignment on the page. --- # Source: https://docs.klarna.com/platform-solutions/acquiring-partners/stripe/payments/data-handling.md # Source: https://docs.klarna.com/platform-solutions/acquiring-partners/adyen/payments/data-handling.md # Data handling with Adyen ## Address & phone validation Make sure to validate all addresses and phone numbers before sharing them with Adyen. Rejections due to mismatched or incorrect addresses late in the process can have a negative impact on acceptance rates, so ensuring these are correct early on is critical. ## Tax handling with discounts You need to declare the tax amounts and VAT for your Klarna orders. It’s crucial to declare discounts and taxes correctly. Make sure to follow the [invoice lines and discounts guidance in Adyen Docs](https://docs.adyen.com/payment-methods/klarna/invoice-lines) to avoid integration issues. ## Extra merchant data (EMD) [Extra merchant data](https://docs.klarna.com/api/payments/#operation/createCreditSession!path=attachment&t=request) is a set of additional information typically unavailable during the checkout flow. This information may consist of data about the customer performing the transaction, the products or services associated with the transaction, or the seller and their affiliates. Depending on the business category or the type of goods you sell, sending EMD data may be a mandatory requirement.  Here are some examples of business categories where sending EMD is mandatory: - Travel (flight, train, bus, car rental, hotel) - Marketplaces - Tickets and events  - Subscriptions - Vouchers and gift cards ## Product and image URLs You can share the [`imageUrl`](https://docs.klarna.com/api/payments/#operation/createOrder!path=order_lines/image_url&t=request) and the [`productUrl`](https://docs.klarna.com/api/payments/#operation/createOrder!path=order_lines/product_url&t=request) with Adyen. This lets Klarna use these resources in your communication with the customer to improve the post-purchase experience in the Klarna app. This helps the end customer to visualize the purchase they have made. --- # Source: https://docs.klarna.com/payments/after-payments/order-management/more-actions/delivery-tracking.md # Delivery tracking ## Read this article to learn how to offer delivery tracking information to your customers. If you bought something using Klarna and have questions about your delivery, please contact **`support@klarna.com`**. This section only contains technical details for partners integrating Klarna into an online store. When your customers want to see the delivery status of the goods they paid with Klarna, they can check our [Klarna app](https://www.klarna.com/us/klarna-app/) to track the delivery. The Klarna app offers a smooth and intuitive way for your customers to track the entire shipping lifecycle and get notifications throughout the different stages (for example, when the goods are in transit or ready to pick up). ![ Tracking information in the Klarna app.](f4c44cc5-c7ba-42d2-9fbf-27c796434b0a_Delivery+tracking_order+management.jpeg) *Tracking information in the Klarna app.* ## Benefits Some benefits of enabling delivery tracking are: - Offering a smooth post-purchase experience to your customers - Increasing customer satisfaction and loyalty - Increasing the successful delivery rate - Reducing customer service workload ## Enabling delivery tracking To enable delivery tracking, you have to send us the shipping information, including details of the carrier that manages your deliveries. This way, we communicate to your customers the delivery updates through the Klarna app. We integrate with hundreds of [carriers](https://docs.klarna.com/payments/after-payments/order-management/more-actions/klarna-carrier-partner-list/) to provide your customers with the best possible post-purchase experience. To share tracking information with us, you have to: 1. [Identify your carrier partner](https://docs.klarna.com/payments/after-payments/order-management/more-actions/delivery-tracking/#enabling-delivery-tracking-identifying-your-carrier-partner). 2. [Send us the information through the Order management API.](https://docs.klarna.com/payments/after-payments/order-management/more-actions/delivery-tracking/#enabling-delivery-tracking-sending-the-information) 3. [Validate your integration](https://docs.klarna.com/payments/after-payments/order-management/more-actions/delivery-tracking/#enabling-delivery-tracking-validating-your-integration). ### Identifying your carrier partner The first step is identifying the carrier partner (logistic company) that manages your deliveries. We integrate with global companies such as \*\*DHL\*\*, \*\*UPS\*\*, \*\*FedEx\*\*, \*\*DPD\*\* \*\*DHL\*\*, \*\*UPS\*\*, \*\*FedEx\*\*, \*\*DPD\*\* and nationwide carriers such as \*\*OnTrac\*\*, \*\*Australia Post\*\*, \*\*Canada Post\*\*, \*\*La Poste\*\*, and \*\*Correos\*\*. To see a complete list of our partners, check the [carriers section.](https://docs.klarna.com/payments/after-payments/order-management/more-actions/klarna-carrier-partner-list/) If you have any questions about Klarna carrier partners, contact **`logistics+integration@klarna.com`** While some carriers are recognized globally by their corporate entity brand (for example, DHL or DPD), some others use subsidiaries. If you have questions about your carrier's services, contact your carrier directly. ### Sending the information Once you've identified the carrier that manages your deliveries, you're ready to go with the implementation. You can send us details for one or multiple deliveries using the following endpoints of the Order management API: - [Capture an order](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api/capture-and-track-orders/) - (`POST {apiUrl}/ordermanagement/v1/orders/{order_id}/captures`[{apiUrl}](https://docs.klarna.com/api/ordermanagement/#operation/captureOrder)/ordermanagement/v1/orders/{order_id}/captures) - [Add shipping information](https://docs.klarna.com/payments/after-payments/order-management/more-actions/delivery-tracking/) - (`POST `[`{apiUrl}`](https://docs.klarna.com/api/ordermanagement/#operation/appendShippingInfo)`/ordermanagement/v1/orders/{order_id}/captures/{capture_id}/shipping-info)` Include the `shipping_info` parameter in your request. It's an array containing two attributes: - **`shipping_company`**(required): The carrier (logistics company) managing the delivery. You can find the list of `shipping_company` values in the second column of the [carrier partner list](https://docs.klarna.com/payments/after-payments/order-management/more-actions/klarna-carrier-partner-list/). - **`tracking_number`**(required): The identifier that the carrier provided to fetch further delivery updates. The following is an example of a request with the information you have to send us. ``` json "shipping_info": [ { "shipping_company": "dhl-express", "tracking_number": "JJII1234567890234234234", } ] ``` Sample of a request to send the shipping information. You can add details for more than one delivery. For example, suppose a single order contains two packages with two different tracking numbers. In that case, you have to send us the information for each package. The following is an example of a request including two deliveries. ``` json "shipping_info": [ { "shipping_company": "fedex", "tracking_number": "941741365856", }, { "shipping_company": "ups", "tracking_number": "1Z83V552YW00095703", } ] ``` Sample of a request to send the shipping information for two different deliveries. #### Special cases There are special cases when delivery tracking is not possible. You don't have to send us shipping information in your API call in the following cases: - **Non-trackable deliveries:**The products might be shipped using a non-trackable postal product (for example, a regular letter). - **Non-physical products:**For non-physical products, there are no physical deliveries. - **Own delivery infrastructure:**We can't track your deliveries if you deliver the goods via your own delivery infrastructure or couriers. - **Picking up products at a store:**For **Click and collect** or other In-store purchases, you don't need to include any shipping information in your API call. When a shipping company delivers the goods to the store and the shipment is trackable, you need to send the shipping information as usual. Want to go further? The APIs enable you to send us more information such as shipping method and tracking URI, which can improve your customer's post-purchase experience. For more details, see our [API documentation](https://docs.klarna.com/api/ordermanagement/). ### Validating your integration We don't perform any data validation at the moment of the API call. The data processing we run happens asynchronously in the background. This means that, for example, the call won't fail if the tracking number we receive is invalid. For this reason, you need to contact us to validate your integration after sending us the shipping information. Read the following section to learn about our contact and support channels. #### Contact and support If you want to validate your integration or have any questions about it, our Klarna Logistics team is ready to help you. Contact **`logistics+integration@klarna.com`** and include the following information in your email: - As a subject, use *Delivery tracking integration: {merchant name}\*\*Delivery tracking integration: {merchant name}*'. - As an email body, disclose your online store's URL and your Klarna's eStore ID/merchant ID. - Include the order number to validate the integration. You can also contact [Merchant support](https://www.klarna.com/merchant-support/) for any other questions regarding your integration. --- # Source: https://docs.klarna.com/resources/legal-and-compliance/policies-and-term-of-service/deprecation-policy.md # Deprecation policy As a Klarna connected merchant, you have the right to use Klarna’s web service, SDKs and modules in order to handle your transactions with Klarna. This policy explains to what extent Klarna develops and supports them. The table below will explain the different statuses we use: ![Services status](089e7796-989f-4629-949c-bd062bc6bfd4_FOOTER_deprecation-policy.jpeg) *Services status* ## API Deprecation within Klarna’s API’s can be split into two different types; API versions and API calls. An API version is determined by breaking changes within the API and API Calls is determined by functionalities for communication towards Klarna. ### Deprecation of API versions Full support is always given to the latest API version. If a new API version is released by Klarna, the previous version with full support will be legacy. The old legacy version will be deprecated. A Deprecated version will be removed from Klarna’s system within a timeframe set by Klarna, minimum of 6 months. Affected users will be informed. ### Deprecation of API calls Klarna can from time to time deprecate specific calls from existing API versions and may replace them with newer and better API calls. When a call has been set as Legacy, the new call replacing is hereinafter treated as Full Support and shall be used with all new integrations towards Klarna. A Deprecated call will be removed from Klarna’s system within a timeframe set by Klarna, minimum of 6 months. Affected users will be informed. ## SDKs Full support is always given to the most recent version and the programming language version that the SDK is developed for. If a new minor version is released by Klarna, the previous version with full support will be legacy. The old legacy version will be dropped down to deprecated. A Deprecated library will be supported, during a limited timeframe set by Klarna, minimum of 6 months. Affected users will be informed. We follow semantic versioning as detailed by [semver.org](http://semver.org/). ## Modules Full support is always given to the most recent official Klarna module version and platform versions that the particular module is developed for. If a new platform version makes it impossible for the module to support the new and the old version, a new module with Full support will be developed. The old Legacy version will be dropped down to Deprecated. A Deprecated module will be supported, according to table 1, during a limited timeframe set by Klarna, minimum of 6 months. Affected users will be informed. ### Example of support status | Klarna module version | Supported platform version | Klarna module status | |-----------------------|----------------------------|----------------------| | 4.2.x | 1.7.0.2 | Full support | | 4.1.x | 1.7.0.1, 1.6.0, 1.6.2 | Legacy | | 4.0.x | 1.6.2, 1.6.0, 1.5 | Deprecated | --- # Source: https://docs.klarna.com/klarna-search/integrate-klarna-search/detailed-product-data.md # Detailed product data | Field | Description | |-----|-----------| | AdultContent | Indicate if a product includes sexually suggestive content (yes/no). | | AgeGroup | The demographic for which your product is intended. | | Bundled | Indicates a product is a merchant-defined custom group of different products featuring one main product (yes/no). | | Sale Price | The product sale price including VAT. The currency should be stated. Use a comma or a period as the decimal marker. Keep empty if the product is not on sale. Information in this column will override your original Price column. The length of your sale period. When you specify the sale price effective date (in combination with a sale_price attribute), we can display your sale price and the sale period directly in your listings. The sale price effective date can be specified in several ways, and you can define it with a specific time. * 2024-11-24T13:00-0800/2024-11-29T15:30-0800 (typical) * 2024-11-07T00:00:00+02:00/2024-12-07T23:59:59+01:00 (with a colon in the timezone) * 2024-11-07T00:00:00Z/2024-12-07T23:59:59Z (UTC timezone represented with a Z) * 2024-11-24T13:00:00-0800/2024-11-29T15:30:00-0800 (with seconds) * 2024-11-24/2024-11-29 (Without time and timezone, defaults to 00:00/23:59 UTC) * 2024-11-24T13:00/2024-11-29T15:30 (With time but no timezone, defaults to UTC) If the time is not specified on your product offer, the sale price will start at 00:00 (midnight) on the start date and end at 23:59 on the end date (UTC). | | Color | Your product’s color(s). | | EnergyEfficiencyClass | Your product’s energy label. | | Gender | The gender for which your product is intended. | | Condition | The condition of your product at time of sale. We support the following values: * New- The item is new, in its original packaging, and has never been opened/used. With full original manufacture warranty and standard return policy. * Used- The item is used. For example, a display model/demo unit or because the packaging is damaged or completely missing. * Refurbished- The item is not new but has been inspected and tested to ensure that it feels like a new product. For example, defective parts have been replaced, but the item may still show signs of use. It may come with or without the original packaging. | | GroupId | The ID for a group of products that come in different versions (variants). | | Material | Your product’s fabric or material. | | Multipack | The number of identical products sold within a merchant-defined multipack (yes/no). | | Pattern | Your product’s pattern or graphic print. | | Size | Your product’s size. | | SizeSystem | The country of the size system used by your product | --- # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-hpp/api-documentation/disable-session.md # Disable Session with Hosted Payment Page - API Details If for any reason the payment session has to be canceled (expiration of an offer, order was paid using another payment method, etc), the HPP API gives to the Merchant the possibility to disable an **HPP Session**. To do that, it is required to send a delete request on the HPP Session resource. The URL of this resource is the session_url that you got back in the [create session response](https://docs.klarna.com/payments/other-products/hosted-payment-page/api-documentation/create-session.md). When an HPP Session has been disabled by the Merchant, the Consumer will get an explicit error message when using a previous link that has been distributed. If the Consumer was still on the payment page while the session was disabled, they will get a *Page Not Found* error as soon as they do an action. The value of the status of the *HPP Session* will now be *DISABLED* and this status is definitive. [Read our guide on HPP Session statuses →](https://docs.klarna.com/payments/other-products/hosted-payment-page/before-you-start/tracking-session-status.md) | **Description** | **Disable an HPP Session** | |----|----| | Reference | For a full list of returned values, please read API Reference. | | Url structure | | | Operation | DELETE | | Example | curl -X "DELETE" --header "Authorization: Basic " | ## Examples This operation doesn’t require any body as a request and won’t send any body as response. --- # Source: https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/discounts.md # Discounts with Klarna Payments ## Most common discount types can be deducted through Klarna payments. Find all information below on vouchers, codes, gift cards and loyalty clubs, including integration and VAT handling. ## Discount voucher or code A discount code or voucher gives the customer a right to get a price reduction, either in absolute value or as a percentage off. A product's final price is the tax basis for the VAT and the tax rate stays the same. For example, if the product is reduced by 10%, the absolute value of the VAT is also reduced by 10%. Klarna payments supports value-based and percentage discounts. They can be applied for specific items or across entire orders. Currently, Klarna doesn't support the user interface to digest discounts, but they can be applied to the order lines. For percentage reductions, the discounts and taxes can either be added as positive values per order line as `total_discount_amount` or as separate order lines with negative amounts. The formula for calculating the tax amount is *total_amount* - *total_amount* \* 10000 / (10000 + *tax_rate*). ### Example of a discount per order line The order is placed for a white t-shirt discounted by 20% at a tax rate of 25%. ``` json { ... "name": "white t-shirt", "quantity": 1, "reference": "12-345-ABC", "tax_rate": 2500, "total_amount": 25000, "total_discount_amount": 5000, "total_tax_amount": 5000, "type": "physical", "unit_price": 30000 } ``` ### Example of a fixed \$10-discount as a separate order line ``` json { ... "name": "10 USD discount", "quantity": 1, "reference": "12-345-ABC-discount", "tax_rate": 2500, "total_amount": -1000, "total_tax_amount": -200, "type": "physical", "unit_price": -1000 } ``` ### Example of a buy-2-for-3 deal ``` json { ... "name": "buy 2 for 3 discount", "quantity": 1, "reference": "buy 2 get 3-discount", "tax_rate": 2500, "total_amount": - {3*item price - 2*item}, "total_tax_amount": - {total_amount*0.2), "type": "discount", "unit_price": -{3*item price - 2*item} } ``` ## Gift cards Gift cards can be used to purchase any item from the merchant that issued them. Unlike vouchers and codes above, gift cards have a face-value assigned to them, meaning that someone paid for the purchase of that value. Hence, the purchase of a gift card can be seen as a currency exchange, so no VAT is triggered at this point. The VAT needs to be calculated only upon redemption of the gift card. Gift cards are most commonly categorized as so-called multi-purpose vouchers, meaning that they allow purchases for products with different tax rates. Since the tax amount can't be predicted until purchase, the redemption of a gift card inside Klarna payments should be through a separate order line with a negative amount and the VAT set to 0. ## Loyalty clubs There are many different types of loyalty clubs and schemes, so evaluation needs to be done on a case-to-case basis. Most often, customers collect points for their purchases that they can then exchange for bonus checks. The bonus checks should be handled similarly to a code or voucher, meaning the price and VAT should be reduced subsequently to the applied bonus points. Please reach out to [Klarna Merchant support](https://www.klarna.com/merchant-support?utm_source=devportal&utm_medium=web&utm_campaign=support-link&utm_content=footer) for help. ## Store credit Store credit is used when a customer returns an item that was already paid for and does not get a cash refund for it. This only applies to store credit that is created outside of Klarna’s payment methods. In this case the store credit should be treated as a gift card, meaning as a new negative order line with the VAT set to 0. Issuing the store credit isn't subject to taxation, only the subsequent purchase with it will trigger VAT. ### Example from store_credit and gift_cards in the order lines ``` json "order_lines" : [ { "type" : "gift_card", "reference" : "654", "name" : "gift card", "quantity" : 1, "quantity_unit" : "euro", "unit_price" : -300, "tax_rate" : 1000, "total_amount" : -300, "total_tax_amount" : -27 }, { "type" : "store_credit", "reference" : "987", "name" : "store credit", "quantity" : 1, "quantity_unit" : "euro", "unit_price" : -500, "tax_rate" : 0, "total_amount" : -500, "total_tax_amount" : 0 } ] ``` --- # Source: https://docs.klarna.com/payments/after-payments/disputes/dispute-returns-improvement-guide.md # Dispute returns improvement guide ## If you, the Merchant, are looking for ways to improve your dispute handling, quality and customer satisfaction, here are a few easy tips for you, the Merchant, on how to optimize the process to your benefit. ## Returns Returns are an inevitable part of the purchase lifecycle. Handling them well ensures that customers maintain trust in you, the Merchant, and Klarna while minimizing errands and disputes. Below you, the Merchant, will find best practices for handling returns and fees, and providing customers up front information and communication. ### Improving Customer Return Experience To enhance your customer's return experience and prevent disputes, we recommend implementing the following steps: - **Self-Service Return Option**: Always offer a self-service return option with clear instructions. This could include: - A return label in the package - A QR code on the confirmation page with a prepaid label - **No Return Fees:** Never charge fees for returns. - **Domestic Return Address:** Always provide a local return address. - **Prompt Return Registration:** Register the return as soon as you receive it. - **Confirmation Email:** Send a confirmation email immediately after the customer registers the return. This email should include: - Date of return receipt - Item(s) returned - Expected refund amount - Refund method - Expected refund timeline - **Clear Return Information:** Display your return policy and a FAQ section about returns prominently on your website. This should cover: - Items eligible for return - Return process - Expected refund timeline - **Responsive Customer Service:** Ensure your Customer Service team can respond to inquiries within 2 business days and are well-versed in return information: - Return process - Reasons for return denial - Return registration confirmation - Expected refund timeline By following these steps you, the Merchant, can make the return process more transparent and user-friendly, leading to improved customer satisfaction and fewer disputes. ## Goods Not Received In the world of online shopping, providing accurate and transparent information to customers is paramount. This section emphasizes best practices for you, the Merchant, including tracking information sent to customers, efficient order handling, and the importance of effective communication on your website. By prioritizing these aspects, you can significantly improve customer satisfaction, reduce disputes, and enhance their operational efficiency. ### Preventing Goods Not Received Experiences  Prioritizing well organized order and delivery handling can help prevent goods not received, thus reducing errands and disputes. We recommend the following best practices: - **Quick Delivery:** Deliver items to customers within 20 days of order date. - **Accurate Order Capture:** This should occur at the time of shipment. If you send multiple packages (partially fulfill the order), capture the amount for only the sent items. - **Thorough Cart Page:** The cart page is a great first place for customers to get shipping information such as: - Shipping options and costs - Additional shipping or customs fees - Estimated arrival time - **Send Confirmation Emails:** Providing information to customers upfront can reduce errands. It is best practice to send customers confirmation emails when: - Order has been placed (order confirmation) - Order has been shipped - **Share Tracking ID:** Providing customers with a traceable tracking ID empowers them to track orders independently. Tracking ID can be made available to customers either via: - Order confirmation email - Order shipped email - **Clear Shipping Information:** Share easy-to-locate details for customers to check. We recommend clearly stating in your website’s Frequently Asked Questions: - Order processing time prior to shipment - Typical shipping timeline - Typical delivery timeline per country / region - How you provide the tracking ID - **Effective Goods Not Received Support**: Give customers the ability to easily report goods not received issues. We recommend: - Providing the reporting process via a dedicated email address or user-friendly form - In website FAQs, explain how customers can report a problem or return and its process - In website FAQs, inform customers when and how to contact Klarna - **Knowledgeable Customer Service:** Ensure your representatives respond to inquiries within 2 business days and that they can provide: - Order and delivery confirmations - Expected delivery timelines / tracking ID - How to report issues with you - When and how to contact Klarna ## Faulty Goods Faulty products, or significant deviations, can taint the shopping experience and negatively impact customers trust in you, the Merchant, and Klarna. In this section we highlight key areas for you, the Merchant, to ensure product quality and customer satisfaction. Accurate product descriptions, a precise definition of faulty goods, and a simple reporting process empower customers to make informed decisions. Through evidence submission and swift resolution, partners should address issues efficiently, either offering refunds or replacements. ### Avoiding Issues with Faulty Goods The following best practices will help drastically reduce customer complaints around faulty goods disputes: - **Accurate Product Descriptions**: Provide detailed and accurate product descriptions, including specifications and high-quality images. This information should be visible to customers while shopping and during checkout. - **Define Faulty Goods:** Provide a clearly stated policy that defines faulty or defective goods and explain how you handle these situations. - **Provide Reporting Process**Customers should be able to easily report faulty or defective goods: - Through their account. - By contacting your customer service. - **Swift Resolution:** You should swiftly process customer requests for faulty products by: - Issuing a refund. - Sending a replacement at your own expense - **Customer Service Support**Your customer service should be responsive and provide a first response within 2 business days to address any questions or concerns about product quality, incorrect items, and refund confirmations. You should be able to take necessary actions to correct any issues. ## Incorrect Invoice When customers purchase online it’s important to be transparent and ensure that they know what they are paying for. When a customer has completed their order, they do not want any surprises when they see the invoice later on. Customers need to understand what items have been added to the cart. In the event of upselling you, the Merchant, has to make sure that the customer is aware of what is happening, can see the added products and prices in checkout. If hidden fees are added to the total order amount, or if it’s not clearly stated that a discount has been added, questions will most likely be directed to Klarna and you, the Merchant. Not only does this confuse customers, it can also make them lose trust as they might feel that they have been fooled. Because of this, it’s important for you, the Merchant, to ensure a detailed checkout summary. By following these best practices the partner can reduce both operational costs and disputes.  ### Ensuring accurate invoices The following best practices will help drastically reduce customer invoice questions and incorrect invoice disputes: - **Remove Out of Stock Items:** It is best practice to regularly update your website to reflect current item availability. To help customers further, you could show an estimated item restock time and provide a notification option. - **Ensure Accurate Checkout:** Clearly present goods before checkout and include: - Accurate items, pictures, descriptions, sizes, quantities, and prices - Accurate order total with any discounts, promotions, or fees listed - Note of any upselling and ability to skip or remove - **State Subscription Services:** If you offer subscription services, we suggest clearly stating this prior to purchase completion to prevent canceled orders and disputes. - **Prevent Duplicate Orders**: Implement necessary security measures during the checkout process. Confirm successful order submission with a confirmation pop-up or message. - **Send Order Confirmation Email:** Soon after order completion, send a confirmation email to customers with an order summary showing: - Order number - Accurate items, pictures, descriptions, sizes, quantities, and prices - Accurate order total with any discounts, promotions, and fees listed - If shipping in multiple packages, note that this will create multiple statements with the Klarna order - **Send Accurate Orders to Klarna:** Send Klarna the same item names, photos, and order details shown on your website and in your order confirmation emails. This ensures accurate expectations and avoids errands and disputes. - **Share Incorrect Invoice Information:** Clearly state in your website FAQs that customers should reach out to you with incorrect invoice and duplicate order concerns. Customer questions that should be referred to Klarna: - Payments and due dates - How to dispute orders in the Klarna app - Refunds (only if you have registered a return to the order - **Knowledgeable Customer Service:** Ensure your representatives respond to customer inquiries within 2 business days and are able to answer questions regarding: - Out of stock items - Incorrect invoice concerns - Duplicate order issues - Take needed action - When to reach out to you versus Klarna --- # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-hpp/before-you-start/distribute-session.md # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-hpp/api-documentation/distribute-session.md # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-hpp/before-you-start/distribute-session.md # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-hpp/api-documentation/distribute-session.md # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-hpp/before-you-start/distribute-session.md # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-hpp/api-documentation/distribute-session.md # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-hpp/before-you-start/distribute-session.md # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-hpp/api-documentation/distribute-session.md # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-hpp/before-you-start/distribute-session.md # Distribute Session with Hosted Payment Page After creating the HPP Session, it will be necessary to get the Consumer to access it so that they can complete the payment. This distribution of the HPP Session will change depending on the use case you are trying to achieve. Technical constraints are defined by the use case (eCommerce, In-store, or Telesales) and would most likely be covered by these cases: 1. **The Consumer is already on a website that you own.** You are able to redirect their browser to the Hosted Payment Page. This use case is the easiest to fulfill and you can directly read our chapter on **Redirection**. Usually, this means that you are in a regular eCommerce setup where the consumer goes through a Checkout experience. 2. **The Consumer is interacting with your system indirectly**, for example, a phone call, SMS, or an email. In all of these cases, you will need to get the Consumer to use a web browser to actually access the Hosted Payment Page, and for that, you can use our advanced distribution mechanisms. 3. **The Consumer is interacting with your system using a shared device**, for example, a Kiosk in a store. As Privacy standards are not met, it is also required to use advanced distribution mechanisms. ## Redirection - eCommerce ![ eCommerce Flow of HPP with Klarna Payments](cbcd1d7e-5077-45a2-8a12-9bb3c101b309_HPP_with-kp-ecommerce.jpeg) *eCommerce Flow of HPP with Klarna Payments* When creating the *HPP Session* you get back a redirection_url that can be used by a Consumer to access the *Payment Page*. You just need to redirect the Consumer to this URL. If you expect the Consumer to be redirected to your own website after completing the payment, or by going back or cancelling, you will need to pass in Merchant URLs in the Create Session call. This distribution mechanism is usually used in an eCommerce ecosystem and is not really adapted to In-store or Telesales. Please be aware that redirection is not always guaranteed. For example, when consumer closes HPP window before redirection happened. This means that as soon as place_order/capture_order mode is used it is advised to keep track of the HPP session status by [polling an HPP's read endpoint or via callback mechanism](https://docs.klarna.com/hosted-payment-page/get-started/tracking-session-status/). | Name | Usage | |----|----| | success | Consumer will get redirected there after a successful authorization of payment. Consumer may have seen a confirmation from Klarna before getting redirected, but it is mandatory that the integrator displays information about the payment that has just been authorized. | | failure | Consumer will get redirected there when payment was refused by Klarna. If an error occurs and no error URL was given, then the consumer will also get redirected to this URL. They will have seen a message explaining the reasons for a decline from Klarna beforehand. | | back | Consumer will get redirected there when clicking on the back button. This URL is recommended in an eCommerce flow and any cancel will be treated as abackURL. When consumers get redirected to the back URL, they can still access to the Payment Page, meaning that it is up to the integrator to actually disable the session if needed. This URL may be used by the consumer to correct any information that was wrongly formatted (ex: date of birth). | | cancel | Consumer will get redirected there when clicking on the cancellation button. This URL can’t be used in an eCommerce flow and will be considered as a back URL, meaning that the session won’t be cancelled. *See back button versus cancel button chapter.* | | error | Consumer will get redirected there when an error occurred in the flow. If this parameter is not set and a failure URL is present, the Consumer will get redirected to the failure one and the integrator won’t be able to tell the difference between an error and a decline. | ### Cancel and Back - what are the differences It is not possible to use both back and cancel options simultaneously, because the user interface will be adapted to use one of them: - When consumer has a back button on the page, then the Payment Page is still reachable after clicking on the button. It means that they can come back with their browser, or that you can redirect them back to the same redirect_url without changing anything. - When consumer has a cancel button on the page, they will get prompted to validate that they want to actually cancel the payment. If they do so, then the HPP Session will now be in a CANCELLED state and the consumer won’t be able to interact with the payment anymore. You can find out more on the difference between the IN_PROGRESS and CANCELLED states on our guide to track the HPP session status. **When on eCommerce**, the value for the cancel URL is systematically considered as a back URL and consumers will always be able to go back to the Payment Page. ## Distribution to consumer device - In-store, Telesales ![ eCommerce Flow of HPP with Klarna Payments](a2b8f633-fdcd-440c-ac86-125a508eaa51_HPP_with-kp-distribution.jpeg) *eCommerce Flow of HPP with Klarna Payments* With the HPP API you can create payment flows that are asynchronous or where you don’t own any website, for example for an In-store payment. You will be able to send payment requests to consumers by e-mail or letting them read a QR code displayed on a screen. Depending on the use case and whether it is programmatically driven or human driven, you may choose to integrate with our distribution APIs or using our Distribution Module. ### Distribution Module The Distribution Module is the recommended way to create flows where payment links are distributed by an operator. An operator can be a store associate, a telesales person or the consumers themselves. This user interface is future proof and will let Klarna optimize for the smooothest experience. ![ Video of a Self Checkout integration](647d2345-d645-4928-8238-95f56bf7d3ee_HPP_distribution-module-self-checkout.gif) *Video of a Self Checkout integration* This interface implements all the best practices to get the link delivered to the end Consumer the fastest possible. It supports an interface for a seller (staff, sale associate, clerk) as well as one that is directed to the consumer themselves in a self-checkout context. After the integration, you will be able to update the features of the interface without making any changes to your code using our profiles mechanism. All it requires is a web application or an application capable of displaying web pages. \[ Read our integration guide for the Distribution Module\]→ ## Distribution using APIs - Automated payment flows For integrations where payment links are sent automatically, or legacy systems that can’t open any web page, you can integrate with our APIs directly. #### E-mail Use the distribution endpoint if you want to distribute to the Consumer a link to the *Hosted Payment Page* either by e-mail. A message will be sent directly to the Consumer and will be localised to the Consumer’s language, it will contain a link. When using the link, the Consumer will see the specific *Hosted Payment Page*. The phone number or e-mail address will be used by Klarna to try to pre-fill the Consumer if they already used Klarna before and agreed to be pre-filled, which will increase the speed of the payment. [Read our API reference on distributing the session by e-mail](https://docs.klarna.com/payments/other-products/hosted-payment-page/api-documentation/distribute-session/)→ ## QR Code A qr_code_url is provided back in the creation call of the *HPP Session*, this URL is a public URL that can be displayed on every browser and doesn’t need any authentication. You can embedded this picture in a display that can be seen by the Consumer, who would be able for example to read the QR Code using they mobile phone. The link embedded in the QR Code is leading to the *Payment Page* of the *HPP Session*. They will then be able to proceed to payment. ![ QR code leading to the Hosted Payment Page](7b21a61e-2c74-4627-9aa3-98327ce64780_HPP_distribution-qr.jpeg) *QR code leading to the Hosted Payment Page* --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/vtex/payments/enable-klarna-payment-methods.md # Enable Klarna Payment via Vtex ## This section covers the installation, configuration, and management of the Klarna Payments App in VTEX. It includes step-by-step instructions for setting up Klarna as a payment provider, handling orders, and moving to production. ## Overview The **Klarna Payments App** integrates with **VTEX**, enabling Klarna as a payment option at checkout. This allows merchants to accept payments through Klarna and manage orders using basic **[Order Management](https://docs.klarna.com/platform-solutions/e-commerce-platforms/vtex/payments/managing-klarna-orders/)** functionalities, such as capturing payments, processing refunds, and canceling transactions. The following diagram provide a detailed overview of how **Klarna Payments** functions within the VTEX platform. {{#mermaid: sequenceDiagram title Klarna Payments App for VTEX participant Customer participant VTEX_Storefront participant KP_App participant Klarna participant VTEX_Back_Office Customer->>VTEX_Storefront: 1. Goes to checkout and clicks "Buy" VTEX_Storefront->>KP_App: 2. Sends basket and customer information KP_App->>Klarna: 3. Calls `create session` API Klarna-->>KP_App: 4. Returns `session_id` KP_App->>Klarna: 5. Creates `HPP session` using `session_id` Note right of KP_App: `place_order_mode = PLACE_ORDER` Klarna-->>KP_App: 6. Returns `HPP URL` KP_App->>Customer: 7. Redirects to Klarna Hosted Payment Page (HPP) Customer->>Klarna: 8. Authenticates & authorizes payment Klarna-->>KP_App: 9. Sends notification to `merchant_urls` alt **Successful authorization** Note over Klarna, KP_App: Contains `session_id`, `status`, and `order_id` KP_App->>VTEX_Back_Office: 10. Sends order data for order creation VTEX_Back_Office->>VTEX_Storefront: 11. Creates VTEX order KP_App->>VTEX_Storefront: 12. Redirects customer to VTEX VTEX_Storefront->>Customer: 13. Displays order confirmation message else **Failed authorization** Note over Klarna, KP_App: Contains `session_id` and `status` KP_App->>VTEX_Storefront: 10. Redirects customer to VTEX VTEX_Storefront->>Customer: 11. Displays error message end }} ## Installing the Klarna Payments app To enable Klarna as a payment provider in your VTEX store, you must install the Klarna Payments App. ### **Step 1: Install the app** 1. Open a terminal and log in to your VTEX account using the **VTEX IO CLI**. 2. Run the following command to install the Klarna Payments App: `vtex install klarnapartnerglobal.klarna-payments@2.0.4` 3. Once installed, go to **VTEX Admin\> Apps** and verify that Klarna Payments appears under Installed Apps. ### Step 2: Configuration In **VTEX Admin**, navigate to **Apps\> Klarna Payments** and click on 'Edit' ![Navigate to KP app on VTEX](Group_93VTEX_-_KP_-.png) *Navigate to KP app on VTEX* Select the **region** where your store operates (for example, North America, Europe). ![VTEX KP app configuration - region selection](Group_94VTEX_-_KP_-.png) *VTEX KP app configuration - region selection* ​For the **allow all countries** toggle: - **Switch the Allow all countries toggle ON** if you operate in all the Klarna markets of the selected region. ![Allow all countries toggle ON](Group_95VTEX_-_KP_-.png) *Allow all countries toggle ON* - **If you  only operate in some of the region  markets**, **switch the toggle OFF** and select the markets where you operate in the dropdown. ![specific markets selection](Group_96VTEX_-_KP_-.png) *specific markets selection* ​**Test Mode:** Set depending on the Klarna environment you want to use: - **On** – Uses Klarna’s **Playground (test) environment**. - **Off** – Uses Klarna’s **Production environment**. ![Environment toggle](Group_97VTEX_-_KP_-.png) *Environment toggle* ​​Click **Save** to apply the changes. ## **Adding Klarna to the checkout page** After installing Klarna Payments, you must add it as a payment provider in VTEX. ### **Step 1: Enable Klarna as a payment provider** Go to **VTEX Admin\> Store Settings\> Payments\> Providers** and click **New Provider** ![Adding Klarna as payment provider on VTEX](Group_99VTEX_-_Provider_-.png) *Adding Klarna as payment provider on VTEX* Search and select **KlarnaPayments**. ![Select Klarna Payments as provider](Group_100VTEX_-_Provider_-.png) *Select Klarna Payments as provider* ​Enter the required credentials: - **Application Key (API User)** - **Application Token (API Password)** ![Entering Klarna API credentials on VTEX](Group_101VTEX_-_Provider_-.png) *Entering Klarna API credentials on VTEX* ​Enter a **name** for you to easily identify the Klarna provider configuration. ![Enter an easy to identify name to the Klarna provider configuration](Group_102VTEX_-_Provider_-.png) *Enter an easy to identify name to the Klarna provider configuration* The **Enable test mode** setting determines whether the provider configuration applies to the **VTEX test environment** or the **VTEX production environment**. ![Enable test mode - Provider configuration -VTEX](Enable_Klarna_Payment_via_Vtex_1740767549705.png) *Enable test mode - Provider configuration -VTEX* Click **Save** to complete the setup. Important!Ensure that the Klarna credentials entered in the provider configuration match the Klarna environment selected in the Klarna Payments App. Using Playground credentials with the Production environment, or vice versa, will result in authentication errors. ### **Step 2: Configure payment conditions** Go to **VTEX Admin\> Store Settings\> Settings\> Payment Conditions** and click the "**+**" button to add a new condition. ![Adding a new payment condition](Group_104VTEX_-_Provider_-.png) *Adding a new payment condition* ​Look for **Klarna** and select it**.** ![Select Klarna](Group_105VTEX_-_Provider_-.png) *Select Klarna* ​Enter a name for the Klarna payment condition ![Enter name for payment condition](Group_106VTEX_-_Provider.png) *Enter name for payment condition* ​Change the status to **Active**, this will enable Klarna in the checkout page. ![Set to active](Group_107VTEX_-_Provider.png) *Set to active* In **Process with provider**, select the provider configuration you created in the previous step. ![Select Karna's provider configuration created in previous step](Group_108VTEX_-_Provider_-.png) *Select Karna's provider configuration created in previous step* ​Click **Save**. Now Klarna should be displayed at checkout as payment option ![Save](Group_109VTEX_-_Provider_-.png) *Save* ​ ## Testing Testing is a crucial step in ensuring that the Klarna Payments App functions correctly on the VTEX platform. It's recommended to conduct thorough testing in the Playground environment, in test mode, before going live. ### Key differences between test and production environments | **Feature** | **Test Environment (Playground)** | **Production Environment** | |----|----|----| | **Order processing time** | Up to 60 minutes for test transactions to process in VTEX. | Around 30 seconds for live transactions. | | **Auto-capture behavior** | Orders are auto-captured in 24 hours unless manually captured. | Klarna follows standard capture rules. | | **Credentials required** | Playground API credentials must be used. | Production API credentials must be used. | | **Payment processing** | No actual money is exchanged. | Live payments with real funds. | ## **Final checklist before going live** Before switching to production, confirm the following: - Klarna Payments is **configured correctly** with production API credentials. - Test orders have been successfully processed in the **playground environment**. - Klarna appears as a **payment option in checkout**. - Klarna’s **[order management](https://docs.klarna.com/platform-solutions/e-commerce-platforms/vtex/payments/managing-klarna-orders/) functions** (capture, refund, cancel) have been tested. - Your store’s **payment conditions** correctly allow Klarna for supported markets. Once all steps are verified, Klarna Payments is ready to process live transactions. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/vtex/conversion-boosters/enable-on-site-messaging.md # Enable On Site Messaging via Vtex ## Klarna’s **On-site messaging** enhances customer engagement and boosts conversions by displaying Klarna’s flexible payment options throughout the shopping experience. This section provides step-by-step guidance on installing, configuring, and optimizing Klarna On-site messaging in VTEX. ## **Activating On-site messaging in Klarna merchant portal** Before setting up On-Site Messaging in VTEX, you need to activate it in the Klarna Merchant Portal and retrieve your **Client Identifier**. ### **Steps to activate On-site messaging in Klarna merchant portal** **Log in to the Klarna Merchant Portal** using your merchant credentials and navigate to **Conversion boosters\> On-site messaging**, select the appropriate **store** from the dropdown menu, and click **Get started**. ![OSM merchant portal](MP_-_OSM.png) *OSM merchant portal* A pop up will appear asking you to **register the origin domain** of the store where you will be using On-site Messaging, enter the origin and click **Register**. ![Register origin](Register_origin.png) *Register origin* Your **Client Identifier** will be generated. Copy it as you will need it to configure OSM in VTEX. ![Client ID for OSM in merchant portal](Enable_On_Site_Messaging_via_Vtex_1740778816378.png) *Client ID for OSM in merchant portal* ## **Installing Klarna On-site messaging app in VTEX** To enable Klarna’s On-site Messaging in VTEX, you need to install the app. 1. Open a terminal and log in to your **VTEX account** using the **VTEX IO CLI**. 2. Run the following command to install the Klarna OSM App: `vtex install klarnapartnerglobal.klarna-osm@2.0.0` 3. Once installed, go to **VTEX Admin\> Apps** and verify that Klarna OSM appears under Installed Apps. ## **Configuring Klarna On-site messaging** Once the Klarna OSM app is installed, you need to configure it in VTEX. ### **Steps to configure Klarna On-site messaging** In **VTEX Admin**, navigate to **Apps\> Installed Apps\> Klarna On-Site Messaging**, then click **Edit** to unlock the configuration fields. ![Navigate to OSM app](Enable_On_Site_Messaging_via_Vtex_1740779289488.png) *Navigate to OSM app* Enable **On-Site messaging** by toggling **Enable OSM** on. ![Enable OSM](Enable_On_Site_Messaging_via_Vtex_1740779355551.png) *Enable OSM* Enter your **Client ID** retrieved from the Klarna Merchant Portal. ![Enable_On_Site_Messaging_via_Vtex_1740779419744.png](Enable_On_Site_Messaging_via_Vtex_1740779419744.png) *Enable_On_Site_Messaging_via_Vtex_1740779419744.png* Choose a **language (locale)** for the messaging, and select a **design theme**: - **Default** → Light background. ![default theme OSM](default_theme_OSM.png) *default theme OSM* - **Dark** → Dark background. ![Dark theme OSM](Dark_theme.png) *Dark theme OSM* ![language and theme](Enable_On_Site_Messaging_via_Vtex_1740779516881.png) *language and theme* **Test Mode:** Set depending on the Klarna environment you want to use: - **On** – Uses Klarna’s Playground (test) environment. - **Off** – Uses Klarna’s Production environment. ![Test mode toggle](Enable_On_Site_Messaging_via_Vtex_1740779839564.png) *Test mode toggle* Toggle on or off the placements you want to use in your store.Important Enabling the toggle in the Klarna OSM app **only activates the placement settings**. You must still **manually insert the placement blocks** into your store’s theme for the messaging to appear. For detailed instructions, refer to the next section of this guide. ![Placements OSM](Placements_OSM.png) *Placements OSM* ​Click **Save** to apply the changes. ![Save OSM config](Enable_On_Site_Messaging_via_Vtex_1740780042186.png) *Save OSM config* ### Placements To display Klarna’s On-site Messaging in your store, you need to **enable placements** in the Klarna OSM app and **insert placement blocks** into your store’s theme. #### **Insert placement blocks in your store theme** Identify the **placement theme block name**, which appears in parentheses next to each placement in the Klarna OSM configuration. ![Placement blocks](Enable_On_Site_Messaging_via_Vtex_1740785485074.png) *Placement blocks* To learn more about the different types of placements check [this article](https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/placements.md). Open your **VTEX Store Theme** configuration. ``` json { "flex-layout.col#right-col": { "children": [ "product-name", "Klarna-osm.product-credit-promotion-badge", "Klarna-osm.product-credit-promotion-auto-size", "buy-button" ] } } ``` Add the **placement block** to the appropriate store sections as specified in the [VTEX documentation](https://developers.vtex.com/docs/guides/vtex-io-documentation-4-declaring-a-theme-block#step-2-using-your-new-theme-block). Once the placement blocks are added, Klarna’s On-Site Messaging should be visible in your store. ![OSM Placement on VTEX PDP](Enable_On_Site_Messaging_via_Vtex_1740785958477.png) *OSM Placement on VTEX PDP* ImportantIf the placements do not appear: - Ensure **Klarna OSM is enabled** in the app configuration. - Verify that the **correct placement blocks** are added to your store theme. - Double-check the **Client ID** entered in the Klarna OSM settings. By completing these steps, Klarna’s messaging will be successfully integrated into your VTEX store. --- # Source: https://docs.klarna.com/resources/developer-tools/error-handling/error-codes-and-messages-for-klarna-payments.md # Error codes and messages for Klarna Payments ## Check out our usual error messages and what they mean ## Summary of possible errors | **HTTPS status code** | **Error code** | |-----------------------|-----------------------| | 400 | BAD_REQUEST | | 400 | BAD_VALUE | | 403 | INVALID_OPERATION | | 403 | MERCHANT_INACTIVE | | 403 | REJECTED | | 404 | NOT_FOUND | | 404 | SESSION_COMPLETED | | 409 | BAD_VALUE | | 500 | INTERNAL_SERVER_ERROR | ## Details of possible errors ### 400 - BAD_REQUEST `BAD_REQUEST` error could be precent in any type of request. | **Error message** | **Description** | **Handling error** | |----|----|----| | `[]` | The server cannot or will not process the request due to something that is perceived to be a client error. | | ### 400 - BAD_VALUE This is one of the most frequent errors, the**error message**will indicate which specific property needs to be reviewed and fixed. see the table below for some examples of error messages. `BAD_VALUE` error could be present in multiple requests and depending in which operation the error occurs the customer will have a different impact during the purchase journey: - `create_session`: Klarna's content can't be displayed, and customer is unable to use Klarna. - `update_session`: The customer won’t be able to proceed until the session's details have been fixed. - `create_order`: The customer proceeded with the payment or credit flow successfully, but order creation failed afterwards. Depending on the integration the customer might see the order incorrectly as completed, or the customer can be instructed to try again. - `create_token`: The customer proceeded with the authorization flow successfully, but create_token call had invalid details, and the customer couldn't be tokenized for recurring purchases. | **Error message** | **Description** | **Handling error** | |----|----|----| | `[BAD_VALUE : order_lines[X].tax_rate]` | Error message on the validation criteria for the tax calculation. The tax rate indicated should be aligned with tax values shared in other properties since Klarna will perform validations on it. | See [how to handle tax in Klarna Payments](https://docs.klarna.com/payments/web-payments/additional-resources/error-handling-and-validations/tax-handling/) | | `[BAD_VALUE : order_lines[X].total_tax_amount]` | There is an error in the tax amounts for an specific order line \[X\]. Tax amounts should add up over all order lines since Klarna will perform validations on it. | See [how to handle tax in Klarna Payments](https://docs.klarna.com/payments/web-payments/additional-resources/error-handling-and-validations/tax-handling/) | | `[BAD_VALUE : order_tax_amount]` | There is an error in the tax amounts. total order tax amounts should add up over all order lines since Klarna will perform validations on it. | See [how to handle tax in Klarna Payments](https://docs.klarna.com/payments/web-payments/additional-resources/error-handling-and-validations/tax-handling/) | | `[BAD_VALUE : order_lines]` | Order lines sent may be malformed, don't follow our guidelines, violate API field restrictions or completely missing. | Refer to the [Klarna payments API reference](https://docs.klarna.com/api/payments/) for details on expected formats. | | `[BAD_VALUE : purchase_currency]` | The currency in your payment request not formatted correctly or doesn't apply for a certain locale. | locale and `currency` values in the request should be supported by Klarna. Refer to our [Klarna documentation](https://docs.klarna.com/klarna-payments/in-depth-knowledge/puchase-countries-currencies-locales/) for compatible combinations. | | `[BAD_VALUE : billing_address.{fields}, shipping_address.{fields}]` | A field in the billing_address or shipping_address object in your payment request is not formatted correctly. | Read more about [customer data requirements](https://docs.klarna.com/klarna-payments/in-depth-knowledge/customer-data-requirements/). | | `[BAD_VALUE : attachment.attachment]` | The attachment object is used for [EMD](https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/extra-merchant-data/) (extra merchant data). This error means that the data sent in the attachment object does not follow Klarna's requirements. | See [Attachment Schema](https://docs.klarna.com/api/attachment-schema/) doc for detail documentation on formats expected for EMD. | | `[BAD_VALUE: locale]` | The locale in your payment request is not compatible. | `locale` parameter sent in the request should follow expected format and values. Read more about [locale and language](https://docs.klarna.com/payments/web-payments/before-you-start/data-requirements/puchase-countries-currencies-locales/). | If the error message indicates an issue in order amount or order lines, compare the latest successfully sent details with the details in create_order call to see what changes caused the error. Discounts, coupons, shipping fees and taxes applied on the checkout page can sometimes cause incorrect calculations. ### 401 - UNAUTHORIZED | **Error message** | **Description** | **Handling error** | |----|----|----| | `[]` | Typically indicates that the credentials used for the authentication are invalid. | Review the credentials being used. If multiple credentials were created ensure you are using the latest one. See more information about [authentication](https://docs.klarna.com/api/authentication/). | ### 403 - INVALID_OPERATION | **Error message** | **Description** | **Error Handling** | |----|----|----| | `[Authorization token already consumed]` | The operation is not allowed or configured for the MID. | | | `[Not allowed to create customer token for intent buy]` | The operation is not allowed or configured for the MID. Not all payments methods allow the creation of customer tokens. | Read more about recurring payments. | | `[]` | The operation is not allowed or configured for the MID. | | ### 403 - MERCHANT_INACTIVE | **Error message** | **Description** | **Handling error** | |----|----|----| | `[]` | The MID has not been activated. | Contact your Delivery manager or [Merchant support](https://www.klarna.com/uk/business/contact-merchant-support/) to get it active. | ### 403 - REJECTED | **Error message** | **Description** | **Handling error** | |----|----|----| | `[Rejected]` | Authorization has not been approved by Klarna. | | ### 404 - NOT_FOUND `NOT_FOUND` error could be present in multiple requests and depending in which operation the error occurs the customer will have a different impact during the purchase journey: - `update_session`: Often invisible for the customer if the merchant creates a new session for the customer directly after failed session update attempt. - `authorize`: The customer sees an error message, and is prompted to start over. | **Error message** | **Description** | **Error Handling** | |----|----|----| | `[Invalid session id]` | The session id used in the operation is not valid. Typically occurs when the session has expired, but the merchant still tries to update the session. The merchant often creates a new session for the customer automatically. | This could be due to multiple reasons as [expired sessions](https://docs.klarna.com/klarna-payments/integrate-with-klarna-payments/step-1-initiate-a-payment/) or IP mismatches. | | `[Invalid authorization token]` | Typically occurs when the authorization token has expired or a new one has been created. | To fix the error, [request a new authorization token](https://docs.klarna.com/klarna-payments/integrate-with-klarna-payments/step-2-check-out/22-get-authorization/#authorize-call) or make sure you are using the most recent token. | | `[Authorization cannot be deleted]` | | | ### 404 - SESSION_COMPLETED `SESSION_COMPLETED` error could be present in `autorize` request and it is invisible to the customer. | **Error message** | **Description** | **Handling error** | |----|----|----| | `[Session has already been completed]` | The session already has a successful order created, no pre-purchase operations allowed (such as *update_session*, *authorize() and create_order*). The error is often triggered when authorization callback is in use, but it's invisible to the customer, as redirection to order confirmation page occurs quickly after successful authorization callback. | | ### 409 - BAD_VALUE | **Error message** | **Description** | **Handling error** | |----|----|----| | `[Not matching fields...]` | The data shared with Klarna in a previous step (such as *create_session*, *load()*, or *authorize()*) have been modified causing the validation to fail. | | | `[The order has been already completed with different request body]` | | | ### 500 - INTERNAL_SERVER_ERROR | **Error message** | **Description** | **Handling error** | |----|----|----| | `[Internal error]` Something went wrong internally. | | | --- # Source: https://docs.klarna.com/resources/developer-tools/error-handling/error-codes-and-messages-for-order-management.md # Error codes and messages for Order Management ## Check out our usual error messages and what they mean ## Summary of possible errors | **HTTPS status code** | **Error code** | |-----------------------|-------------------------| | 400 | NOT_FOUND | | 403 | XXX_NOT_ALLOWED | | 404 | NO_SUCH_XXX | | 404 | NOT_FOUND | | 409 | CONFLICT | | 413 | REQUEST_TOO_LARGE | | 422 | UNPROCESSABLE_ENTITY | | 422 | INVALID_ADDRESS | | 429 | TOO_MANY_REQUESTS | | 500 | INTERNAL_SERVER_ERROR | | 500 | UNEXPECTED_ERROR | | 502/503/504 | TEMPORARILY_UNAVAILABLE | ## Details of possible errors ### 400 - NOT_FOUND | **Error message** | **Description** | **Handling error** | |----|----|----| | `[Refund xxxxxxx-xxxx-xxxxxxxxxxxxxxx cannot be found for order xxxxxxx-xxxx-xxxxxxxxxxxxxxx]` | This is an invalid request. | Refer to the [OpenAPI documentation](https://spec.openapis.org/oas/latest.html) to check validation rules. | ### 403 - CAPTURE_NOT_ALLOWED `CAPTURE_NOT_ALLOWED` error is only present as response to `capture` request. There are multiple reasons for this error to occur depending on these the customer may not get the products and the merchant won't get settled for the order. The customer might have to place the same order again. | **Error message** | **Description** | **Error handling** | |----|----|----| | `[Capture not allowed]` | The order might be cancelled or expired, or the captured amount might be higher than the remaining authorized amount. | | ### 403 - CANCEL_NOT_ALLOWED `CANCEL_NOT_ALLOWED` error is only present as response to `cancel` request. | **Error message** | **Description** | **Error handling** | |----|----|----| | `[Order has previous captures. Cancel not possible]` | Once an order is captured, it can not be cancelled anymore. For more information, see our [Escalation and retry policy.](https://docs.klarna.com/api/escalation-and-retry-policy.md) | | ### 403 - NOT_ALLOWED NOT_ALLOWED error could be present in the following requests: - `release_authorization` - `extend_authorization_time` - `update_authorization` - `update_order_customer_details` - `update_merchant_references` Depending on the operation this error can affect the customer communication, shipping details or authorization expire time. | **Error message** | **Description** | **Error handling** | |----|----|----| | `[Resulting authorization amount xxx cannot be less than the captured amount xxx for order. Order authorization cannot be updated]` | The capture amount must always be higher than the authorized amount. | See our [Escalation and retry policy.](https://docs.klarna.com/api/escalation-and-retry-policy.md) | ### 403 - REFUND_NOT_ALLOWED REFUND_NOT_ALLOWED error is only present as response to `refund` request. If the order has already been cancelled or fully refunded, the failed refund call doesn't have any impact on the customer. In cases where the attempted refunded amount is greater than the captured amount, the whole refund might fail, and customer's money be left with the merchant. | **Error message** | **Description** | **Error handling** | |----|----|----| | `[Order has no captures. Refund not possible]` | An order or value can only be refunded if it has been previously captured or partially captured. | See our [Escalation and retry policy.](https://docs.klarna.com/api/escalation-and-retry-policy.md) | ### 404 - NO_SUCH_ORDER `NO_SUCH_ORDER` error is only present as response to `capture` request. | **Error message** | **Description** | **Handling error** | |----|----|----| | `[Order xxxxxxx-xxxx-xxxxxxxxxxxxxxx cannot be found]` | The requested resource (order, capture, or refund) could not be found. Check if their IDs are correct. | Check if their IDs are correct. | ### 404 - NO_SUCH_CAPTURE | **Error message** | **Description** | **Handling error** | |----|----|----| | `[Capture could not be found. Shipping info cannot be added to capture xxxxxxx-xxxx-xxxxxxxxxxxxxxx]` | The requested resource (order, capture, or refund) could not be found. | Check if their IDs are correct. | ### ### 404 - NOT_FOUND | **Error message** | **Description** | **Handling error** | |----|----|----| | `[Refund xxxxxxx-xxxx-xxxxxxxxxxxxxxx cannot be found for order xxxxxxx-xxxx-xxxxxxxxxxxxxxx]` | The requested resource (order, capture, or refund) could not be found. | Check if their IDs are correct. | ### 409 - CONFLICT | **Error message** | **Description** | **Handling error** | |----|----|----| | `[]` | This request conflicts with the current state of the target resource. | See our [Escalation and retry policy.](https://docs.klarna.com/api/escalation-and-retry-policy.md) | ### 413 - REQUEST_TOO_LARGE | **Error message** | **Description** | **Handling error** | |----|----|----| | `[Request is too large]` | This request is too large. | Refer to the [OpenAPI documentation](https://spec.openapis.org/oas/latest.html)to see if the request is valid. | ### 422 - INVALID_ADDRESS | **Error message** | **Description** | **Handling error** | |----|----|----| | `[The shipping and/or billing address is invalid]` | The service is unable to process this request. | Refer to the [OpenAPI documentation](https://spec.openapis.org/oas/latest.html) to see if the request is valid. | ### 422 - UNPROCESSABLE_ENTITY | **Error message** | **Description** | **Handling error** | |----|----|----| | `[The size of theshipping_info/shipping_companyvalue must be between 0 and 100]` | The service is unable to process this request. | Refer to the [OpenAPI documentation](https://spec.openapis.org/oas/latest.html) to see if the request is valid. | ### 429 - TOO_MANY_REQUESTS | **Error message** | **Description** | **Handling error** | |----|----|----| | `[Too many requests]` | We received too many requests in a given amount of time (rate limiting). | For more information, see the [Rate limit guide](https://docs.klarna.com/api/rate-limit.md). | ### 500 - INTERNAL_SERVER_ERROR / UNEXPECTED_ERROR | **Error message** | **Description** | **Handling error** | |----|----|----| | `[Unexpected server error]` | An unexpected server error occurred. | For more information, see our [Escalation and retry policy.](https://docs.klarna.com/api/escalation-and-retry-policy.md) | ### 503/503/504 - TEMPORARILY_UNAVAILABLE | **Error message** | **Description** | **Handling error** | |----|----|----| | `[Temporarily unavailable]` | The service is temporarily unavailable. | For more information, see our [Escalation and retry policy.](https://docs.klarna.com/api/escalation-and-retry-policy.md) | --- # Source: https://docs.klarna.com/resources/developer-tools/error-handling/error-codes-and-messages.md # Error codes and messages Klarna's API relies on standard HTTP response codes to signal the success or failure of a request. When an API call is successful, Klarna will respond with a 2xx status code and when the API call fails Klarna will respond with a 4xx or 5xx status code together with a response body containing an error object with the error code, an array of error messages and a unique correlation id to be used to identify the request. - `2xx` codes indicate success. - `4xx` codes indicate an an error on the client side (e.g., missing parameters or failed transactions). - `5xx` codes indicate server-side errors. In order to deep dive on error make sure you check `PSP logs dashboard` or `Klarna Developers Logs`app in Merchant Portal for error messages to see what's exactly wrong in the details. --- # Source: https://docs.klarna.com/resources/legal-and-compliance/payment-solutions-guidelines/eu.md # Legal and data protection (EU) ## Understand Klarna Payments requirements for address data protection and data sharing, use required “order with obligation to pay” button wording, and present T&Cs clearly. When adding Klarna Payments to your site, you need to consider - Data protection and data sharing aspects - Required wording on order confirmation button to ensure legal obligation to pay - T&C information Please seek legal advice to ensure compliance with applicable regulations. Please be aware that Klarna Payments may only be utilized at stores (both online and in-store) that have received prior approval from Klarna. Usage of Klarna Payments in any store not authorized by Klarna could result in an obligation to repay any claims arising from such unauthorized use. ## Customer data sharing National and EU rules such as the GDPR sets certain limits to how and when you may share customer identifying information with Klarna. If you share personal data with Klarna you need to explain this in your privacy notice and link to [Klarna’s privacy notice](https://www.klarna.com/international/privacy-policy/) there. Below is an example of what that could look like in your existing privacy notice (the specific data categories transferred to be added, and text to be translated into your local language) ### Draft privacy notice text “In order to offer you Klarna’s payment methods, we might in the checkout pass your personal data in the form of contact and order details to Klarna, in order for Klarna to assess whether you qualify for their payment methods and to tailor those payment methods for you. Your personal data transferred is processed in line with [Klarna’s own privacy notice](https://www.klarna.com/international/privacy-policy/).” ## Required wording on the order confirmation button A court ruling (case [C-249-21](https://curia.europa.eu/juris/document/document.jsf;jsessionid=9ACC03E87EFACF086CFD7E76B8E7E16F?text=&docid=257497&pageIndex=0&doclang=en&mode=req&dir=&occ=first∂=1&cid=10733020)) has established a principle regarding what copy needs to be displayed on the order confirmation button in retailers' checkout in order to legally obligate the consumer to pay. It is not enough to just state “order”; it needs to combine an order with the obligation to pay, similar to wording like “order and pay”. It is the responsibility of each individual online retailer who has integrated Klarna Payments to ensure compliance with the above-mentioned principle since the retailer controls the order confirmation button. More information can be found in **[KP Best Practices - payment widget](https://docs.klarna.com)**. ## Terms and conditions Ensure that your terms and conditions reflect your cooperation with Klarna, and that you comply with applicable laws. ## Compliance Requirements for your website As a merchant, it is crucial to meet, among other things, the following legal requirements on your website to ensure transparency and compliance with our merchant agreement and relevant consumer protection laws (*UK Consumer Rights Act 2015, German Civil Code, Swedish Law on Distance Contracts and Off-Premises Contracts*).  Please ensure the information is presented clearly and understandably: **Contact Information:** - Provide your registered business address. - List an active email address and telephone number to facilitate reliable customer contact. **Product Information:** - Ensure all product descriptions are accurate and give a true representation of the items you are selling. If you choose to include images or videos, they must also reflect a clear and honest representation of the products. **Delivery Information:** - Detail the method of delivery, estimated shipping times, and any other relevant shipping information. **Right of Withdrawal:** - Clearly outline the consumer's right to withdraw from a purchase. - Provide a withdrawal form and specify that the withdrawal date is determined by the customer's declaration, not your response. **Return Instructions:** - Offer clear instructions on how to return a product. It’s insufficient to require customers to contact you for this information. Include the return address and any other steps, such as packaging requirements, etc, to follow. **Costs of Return:** - Clearly disclose if the consumer is responsible for the return costs in cases of withdrawal, unless the return is due to an incorrect or faulty item being sent, in which case you cover the return costs. **Use of Klarna’s Buyer's Protection:** - Do not use Klarna’s Buyer’s Protection in any promotional materials or website copy as an endorsement of the quality of your goods or your store. It is intended to reassure buyers about the purchase process, not to imply any endorsement of product quality or store reputation. **Important Notice:** Non-compliance with these requirements may significantly impact the resolution of any disputes. Adhering to the guidelines listed above is essential for maintaining trust and accountability in your dealings with customers and ensuring a favorable outcome in dispute scenarios. Finland ## Presentation considerations for Finland (FI) Please note that you as a seller of goods and services in Finland, among others, need to adhere to the Finnish consumer protection act (Sw; Konsumentskyddslag 20.1.1978/38) chapter 6 § 12 b when integrating Klarna Payment Method in your checkout. This rule dictates how payments methods should be presented and sorted at checkout. If you have Klarna as a single payment method on checkout, we recommend that you list the Klarna option first. If you have a need to showcase certain payment options as individual options, then you should list Pay now options first, and thereafter credit options including card payments. Sweden ## Presentation considerations for Sweden (SE) ### English #### **New consumer credit legislation - March 2025** Starting from 1 March 2025, new credit regulations will be implemented in Sweden, impacting how credit is extended and marketed. Here are the essential details you need to know: **Credit Extension Limitations**: Customers opting for financing will have the opportunity to either snooze or convert their loan terms only once before the payment's due date. It's important to note that not all customers will automatically qualify for a loan conversion. **Marketing Obligations for Credit Agreements**: In line with guidelines from Konsumentverket, all credit agreement promotions must include clear, upfront disclosures about the costs associated with borrowing. Advertisements must feature a bold headline stating, “Borrowing costs money!” Followed by the following risk information, “If you are unable to repay your debt on time, you risk receiving a payment default record, which can complicate future attempts to rent housing, sign subscription contracts, and secure new loans.” Additionally, advertisements should guide customers to municipal budget and debt counseling services, with contact information accessible at konsumentverket.se. **Disclosure Requirements:** - The mandatory notice should be accompanied by a symbol, which needs to be as tall as three lines of text and appear in red. - If the marketing message is conveyed verbally, the term “notice” should be used in place of the symbol. - The notice should be clearly displayed in black text on a white background unless adjustments are made for digital devices set to dark mode. Konsumenverket Example: ![Draft:KV_Visual_Example_of_Disclosure.png](Draft:KV_Visual_Example_of_Disclosure.png) *Draft:KV_Visual_Example_of_Disclosure.png* EN Translation: **Borrowing costs money!** If you cannot repay the debt on time, you risk a payment default. This may lead to difficulties in renting housing, signing contracts, and obtaining new loans. For support, contact budget and debt counseling in your municipality. Contact details are available at konsumentverket.se. \*\*\* These new regulations are designed to enhance transparency in credit marketing and safeguard customers by providing them with essential information to make informed financial decisions. ​**New credit legislation July 2020 - How you will be impacted** New legislation has been adopted by the Swedish Parliament stating that if both credit and debit payment options are offered by a merchant, the debit option(s) must be presented before the credit option(s) in the checkout. This law takes effect 1 July 2020. Here’s what you need to know if you have the following payment & checkout options: ![klarna docs image](b5824945-85fb-4dd7-b38a-ca07749f788d_se_credit_legislation_en.jpeg)image **Klarna Payments (KP) with no debit options: No action required.** You are only required to make sure a debit option is placed as the first option if you offer it as a payment method. **Klarna Payment (KP) with debit options: Action required.** As a merchant, you are in control of the order in which payment methods are organized inside your checkout and will need to take steps to comply with the new law. *Continue reading for more details on how KCO will be presented, and what actions we recommend if you have KP with debit options.* #### What the new law means New legislation ([Regeringens proposition](https://www.regeringen.se/490096/contentassets/c2bd6b562fe242fe91cad0bd669bd96a/presentation-av-betalningssatt-vid-marknadsforing-av-betaltjanster-online-prop.-20192079.pdf)) adopted by the Swedish Parliament will take effect on 1 July 2020, and will only be applicable to Sweden. The law sets requirements on the presentation of payment methods in online checkouts, enforcing debit payment options to be displayed before any credit payment options, if both are available. Obligations in the new regulation apply to any parties who present or process payment methods. This includes: merchants, partners, and Payment Service Providers (PSP) like banks. To navigate the new changes, we’ve published guidelines, to help our merchants and partners to ensure compliance with the legal requirements. #### What does this mean for me as a merchant? The impact for you as a merchant will depend on what payment methods you offer and what checkout solution you use. The new legislation does not require merchants to provide debit payment methods, but does regulate how to present them in an online checkout if you do. Below is an overview of Klarna payment methods, and how each categorizes in terms of credit or debit options. ![klarna docs image](747228ea-8ec5-4719-9c9e-14c2c6788aac_can_be_presented_en.jpeg)image #### What do I need to do to be prepared? **Merchants with Klarna Payments (KP)** If you offer Klarna Payments in your checkout, Klarna cannot control the order or logic in which the payment methods are presented. Therefore, as a merchant you are solely responsible to ensure your checkout is compliant and lawful according to the new legislation before it enters into force (1 July 2020). If you have Klarna Payments (KP) and multiple Klarna payment methods within the same widget then we will manage the logic of sorting these. If a debit payment option exists then that will be displayed first. Credit payment methods that include interest rate will always be displayed as the last option if others exist. If the multiple Klarna payment methods are placed in different widgets then we cannot control in what order they will be sorted. **Klarna will discontinue support of Klarna Payment Methods (KPM) as of September 2020. Action recommended.** Klarna will no longer be supporting KPM as of September 2020. For automatic updates (including legal compliance), we recommend all merchants move to Klarna Payments (KP). Please reach out to your Klarna account manager to get more information about pricing and how to transfer to Klarna Payments. ### Swedish #### **Ny konsumentkreditlagstiftning – mars 2025** Från och med den 1 mars 2025 kommer nya kreditregler i Sverige, vilket påverkar hur krediter beviljas och marknadsförs. Här är de viktigaste detaljerna du behöver känna till: **Begränsningar vid kreditgivning:** Kunder som väljer finansiering kommer att ha möjlighet att antingen skjuta upp eller ändra sina lånevillkor endast en gång innan betalningsförfallodagen. Det är viktigt att notera att inte alla kunder automatiskt kommer att kvalificera sig för en låneomvandling. **Marknadsföringskrav för kreditavtal:** I enlighet med Konsumentverkets riktlinjer måste all marknadsföring av kreditavtal innehålla tydliga och framträdande uppgifter om kostnaderna för att låna pengar. Reklam måste ha en tydlig rubrik med texten: **”Att låna kostar pengar!”** följt av följande riskinformation: *"Om du inte kan betala din skuld i tid riskerar du att få en betalningsanmärkning, vilket kan försvåra framtida möjligheter att hyra bostad, teckna abonnemang och ta nya lån."* Dessutom ska annonser hänvisa kunder till kommunal budget- och skuldrådgivning, med kontaktuppgifter tillgängliga på **konsumentverket.se**. ### Informationskrav - Den obligatoriska varningen ska åtföljas av en symbol, som ska vara lika hög som tre rader text och visas i röd färg. - Om marknadsföringsbudskapet framförs muntligt ska termen **"varning"** användas istället för symbolen. - Varningen ska tydligt visas med svart text på vit bakgrund, om inte justeringar görs för digitala enheter i mörkt läge. **Exempel från Konsumentverket:** ![Draft:KV_Visual_Example_of_Disclosure.png](Draft:KV_Visual_Example_of_Disclosure.png) *Draft:KV_Visual_Example_of_Disclosure.png* ​Dessa nya regler är utformade för att öka transparensen inom kreditmarknadsföring och skydda kunder genom att ge dem nödvändig information för att fatta välgrundade ekonomiska beslut. #### **Så påverkas du av den nya kreditlagen - juli 2020** Sveriges riksdag har tidigare i år beslutat om en ny kreditlag. Den innebär i korthet att om det finns både ett kredit- och ett direktbetalningsalternativ i kassan så får inte kreditalternativet visas först eller redan vara ifyllt. Lagen träder i kraft den första juli 2020. Här är vad du behöver veta om du har följande betalnings- och kassalternativ: ![klarna docs image](4ae45d52-f1a0-4e5c-8111-34122c32e7d8_se_credit_legislation_se.jpeg)image **Klarna Payments (KP) utan något direktbetalningsalternativ. Du behöver inte vidta några åtgärder.** Du måste bara se till att ett direktbetalningsalternativ är det första alternativet om du erbjuder det som betalningsmetod. **Klarna Payment (KP) med ett direktbetalningsalternativ: Du måste vidta åtgärder.** Som e-handlare med Klarna Payment (KP) har du kontroll över ordningen på betalningsmetoderna som du har i din kassa och kommer därför att behöva vidta åtgärder för att följa den nya lagen. *Fortsätt läsa för mer information om hur KCO kommer att presenteras och vilka åtgärder vi rekommenderar för dig som har KP med direktbetalningsalternativ.* #### Vad den nya lagen innebär Den nya kreditlagen som Sveriges riksdag har antagit ([Regeringens proposition](https://www.regeringen.se/490096/contentassets/c2bd6b562fe242fe91cad0bd669bd96a/presentation-av-betalningssatt-vid-marknadsforing-av-betaltjanster-online-prop.-20192079.pdf)) kommer att träda i kraft den första juli 2020 och kommer endast att tillämpas i Sverige. Lagen ställer krav på hur olika betalningsmetoder presenteras i kassan, och den tvingar e-handlare att visa ett direktbetalningsalternativ före kreditalternativ, om båda alternativen finns tillgängliga i kassan. Skyldigheterna i den nya lagen gäller alla parter som presenterar eller behandlar betalningsmetoder. Detta inkluderar: e-handlare, partners och betalningstjänstleverantörer (PSP) såsom banker. För att kunna navigera i ändringarna har vi skapat riktlinjer för att hjälpa våra e-handlare och partners att anpassa sig så att de nya lagliga kraven uppfylls. #### Vad innebär det här för mig som handlare? Exakt hur du påverkas beror på vilka betalningsmetoder som du erbjuder och vilken kassalösning som du har valt. Den nya lagen kräver inte att en handlare måste erbjuda ett direktbetalningsalternativ, utan styr hur betalningsalternativen presenteras i kassan. Nedan finns en översikt över Klarna betalningsmetoder, och hur de kategoriseras i termer av kredit- eller direktbetalningsalternativ. ![klarna docs image](f41e69e3-bbd4-43f8-88c0-eb96774da689_can_be_presented_se.jpeg)image #### Vad behöver jag förbereda? **Handlare med Klarna Payments (KP)** Om ni erbjuder Klarna Payments i er kassa så kan inte Klarna kontrollera i vilken ordning betalningsalterntiven presenteras. Det innebär att det är den enskilda handlaren som är ensam ansvarig för att se till att er kassa är kompatibel och följer den nya lagstiftningen innan den träder i kraft (1 juli 2020). Om ni har Klarna Payments (KP) och flertalet betalningsmetoder via Klarna inom samma modul så kommer Klarna att sortera dessa. Om det finns ett direktbetalningsalternativ så kommer det att presenteras först. Kreditalternativ som inkluderar ränta kommer alltid att att presenteras sist om det finns andra val tillgängliga. Om flera betalningssätt med Klarna är placerade i olika moduler kan Klarna ej kontrollera i vilken ordning de presenteras. **Klarna kommer att sluta stödja Klarna betalningsmetoder (KPM) från och med september 2020. Åtgärd rekommenderas.** Klarna kommer inte längre att stödja KPM från och med september 2020. För att få automatiska uppdateringar (inklusive juridisk efterlevnad) rekommenderar vi att alla handlare migrerar till Klarna Payments (KP). Prata gärna med din kontakt på Klarna för att få mer information om priser och hur du flyttar över till Klarna Payments. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/conversion-boosters/express-checkout.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/conversion-boosters/express-checkout.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/conversion-boosters/express-checkout.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/conversion-boosters/express-checkout.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/conversion-boosters/express-checkout.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/conversion-boosters/express-checkout.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/conversion-boosters/express-checkout.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/conversion-boosters/express-checkout.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/conversion-boosters/express-checkout.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/conversion-boosters/express-checkout.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/conversion-boosters/express-checkout.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/conversion-boosters/express-checkout.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/conversion-boosters/express-checkout.md # Express Checkout on SAP Commerce Cloud ## This guide provides step-by-step instructions to install and configure the Klarna On-Site Messaging (KOSM) add-on for SAP Commerce. ### Use Cases #### Express checkout from Cart and Mini Cart - The **Klarna Express Checkout button** is available on the Cart page and Mini Cart popup. - Clicking the button sends Klarna an authorization request with cart details. - After validation: - A popup prompts customers to input their phone number and verification code. - Klarna responds with an authorization token, which redirects customers to the merchant’s site. #### Express checkout from PDP - The Klarna Express Checkout button on PDP creates a **new session cart** regardless of any existing cart. - Upon clicking: - The selected product is added to the new cart. - Cart details are sent to Klarna in the payload for further processing. #### Multistep checkout - Suitable for merchants with an **Order Review page**. - Requires two steps: 1. **Authorize call**: Sends cart details and receives a client token. 2. **Finalize call**: Converts the client token into an authorization token. - Customers can modify their details (e.g., address) on the review page. Acknowledgeable popups are displayed if significant cart value changes occur. - Use the `autoFinalize: false` parameter during the authorize call to enable multistep checkout. **Note:** - Delivery mode is not part of Klarna's profile. Merchants must programmatically assign a delivery mode based on the selected shipping address. - Redirect customers to the **Order Review page** before order placement. ### Key functionalities #### Finalize and create order Multistep checkout flow: 1. Customer clicks **Place Order**, initiating the finalize call using the client token from the authorize call. 2. Klarna provides an authorization token in the response, completing the payment flow. 3. Updated order details are submitted during the finalize call, ensuring accuracy in payment. #### Collect shipping address The `collectShippingAddress` parameter governs whether Klarna collects and shares the shipping address: - `true`: - Klarna provides a shipping address, which is applied as both billing and delivery addresses in the cart. - Guest users are created using the email provided. - `false`: - Customers must add their address on the merchant’s site. - Logged-in customers skip re-entering payment details, as Klarna Express Checkout remains preselected. - Guest users without Klarna-provided email addresses are redirected to the login page. **Note:** Set `collectShippingAddress` to `true` for a seamless express checkout experience. ### Installation and activation #### Add-on installation KEC does not require a separate installation if Klarna is already integrated. However, ensure: 1. Perform a **clean build** and system update in the SAP Commerce Backoffice. 2. Validate the inclusion of the `KlarnaExpCheckoutConfig` table in the database schema. #### Mandatory code changes Update the storefront extension files to enable Klarna Express Checkout functionality. **1. Update `master.tag`** Add the following snippet to load Klarna's script and configure Klarna Express Checkout buttons: ``` jsp ``` **2. Update `productDetailsPanel.tag`** Add code to display the Klarna Express Checkout button on the PDP: ``` jsp
``` **3. Update `cartDisplay.jsp` and `cartPopup.jsp`** Embed code for button visibility on the Cart page and Mini Cart: ``` jsp
``` **4. Update `acc.checkout.js`** Prevent duplicate form submissions by commenting out: ``` jsp // $('#placeOrderForm1').submit(); ``` ### Configuration #### Configure Klarna Express Checkout in Backoffice 1\. Navigate to **SAP Commerce Backoffice\> Klarna\> Klarna Express Checkout**. ![Express_Checkout_on_SAP_Commerce_Cloud_1737653124460.png](Express_Checkout_on_SAP_Commerce_Cloud_1737653124460.png) *Express_Checkout_on_SAP_Commerce_Cloud_1737653124460.png* ​2. Create a new Klarna Express Checkout configuration: - Fill in fields like *Code*, *Placements*, *Theme*, and *Button Shape*. - Save the configuration. ![Express_Checkout_on_SAP_Commerce_Cloud_1737653219420.png](Express_Checkout_on_SAP_Commerce_Cloud_1737653219420.png) *Express_Checkout_on_SAP_Commerce_Cloud_1737653219420.png* #### Map KEC to common configurations 1. Go to **Klarna\> Common Configuration**. 2. Assign the newly created Klarna Express Checkout configuration under **Klarna Express Checkout Configuration**. 3. Save the changes. ![Express_Checkout_on_SAP_Commerce_Cloud_1737653239206.png](Express_Checkout_on_SAP_Commerce_Cloud_1737653239206.png) *Express_Checkout_on_SAP_Commerce_Cloud_1737653239206.png* **Note**: Ensure active **Klarna Payments (KP)** configuration exists for the same base store, as Klarna Express Checkout relies on Klarna Payments settings for order creation. ### Klarna Express Checkout configuration fields | **Attribute** | **Mandatory** | **Description** | |----|----|----| | Code | Yes | Input any name/code. This will be the internal reference used to recognise and manage KEC configuration within SAP Commerce. | | Active | Yes | Check to activate KEC configuration; leave unchecked for it to remain inactive. | | Button Theme | No | Colour theme of the KEC button: default/light/dark | | Button Shape | No | Shape of the KEC button: default/rect/pill | --- # Source: https://docs.klarna.com/payments/after-payments/order-management/more-actions/extend-customer-due-date-pricing.md # Extend payment date pricing ## Here you can find the fees for extending the payment due date, according to the purchase's country. When you want to give your customers more time to pay for their purchase, you have to [extend the order's due date](https://docs.klarna.com/payments/after-payments/order-management/more-actions/extend-customer-due-date-pricing.md). The order extension increases the credit costs, so we charge a fee. The following table shows the countries where extending the customer’s payment date is available and its corresponding fee. The options presented here might vary. ## Quick access Select the country you want to check. | | | | |----|----|----| | [Austria](https://docs.klarna.com/payments/after-payments/order-management/more-actions/extend-customer-due-date-pricing.md) 🇦🇹 | [Belgium](https://docs.klarna.com/payments/after-payments/order-management/more-actions/extend-customer-due-date-pricing.md) 🇧🇪 | [Denmark](https://docs.klarna.com/payments/after-payments/order-management/more-actions/extend-customer-due-date-pricing.md) 🇩🇰 | | [Germany](https://docs.klarna.com/payments/after-payments/order-management/more-actions/extend-customer-due-date-pricing.md) 🇩🇪 | [Finland](https://docs.klarna.com/payments/after-payments/order-management/more-actions/extend-customer-due-date-pricing.md) 🇫🇮 | [Netherlands](https://docs.klarna.com/payments/after-payments/order-management/more-actions/extend-customer-due-date-pricing.md) 🇳🇱 | | [Norway](https://docs.klarna.com/payments/after-payments/order-management/more-actions/extend-customer-due-date-pricing.md) 🇳🇴 | [Sweden](https://docs.klarna.com/payments/after-payments/order-management/more-actions/extend-customer-due-date-pricing.md) 🇸🇪 | [United Kingdom](https://docs.klarna.com/payments/after-payments/order-management/more-actions/extend-customer-due-date-pricing.md) 🇬🇧 | - Free option is only available once per order. - In Sweden, the price doesn't include VAT and we'll apply it on top of these fees. ## Austria | Option | Order value (EUR) | Fee (EUR) | |---------|---------------------------|-----------| | 2 days | All | 0.00\* | | 10 days | All | 1.00 | | 30 days | Order value \< 300 | 1.99 | | 30 days | 300 \< order value \< 750 | 4.99 | | 30 days | Order value\> 750 | 7.99 | | 60 days | Order value \< 300 | 4.99 | | 60 days | 300 \< order value \< 750 | 9.99 | | 60 days | Order value\> 750 | 12.99 | ## Belgium | Option | Order value (EUR) | Fee (EUR) | |---------|---------------------------|-----------| | 2 days | All | 0.00\* | | 10 days | All | 1.00 | | 30 days | Order value \< 300 | 1.99 | | 30 days | 300 \< order value \< 750 | 4.99 | | 30 days | Order value\> 750 | 7.99 | | 60 days | Order value \< 300 | 4.99 | | 60 days | 300 \< order value \< 750 | 9.99 | | 60 days | Order value\> 750 | 12.99 | ## Denmark | Option | Order value (DKK) | Fee (DKK) | |---------|-----------------------------|-----------| | 2 days | All | 0.00\* | | 10 days | All | 10.00 | | 30 days | Order value \< 3000 | 19.00 | | 30 days | 3000 \< order value \< 7500 | 49.00 | | 30 days | Order value\> 7500 | 79.00 | | 60 days | Order value \< 3000 | 49.00 | | 60 days | 3000 \< order value \< 7500 | 99.00 | | 60 days | Order value\> 7500 | 129.00 | ## Germany | Option | Order value (EUR) | Fee (EUR) | |---------|---------------------------|-----------| | 2 days | All | 0.00\* | | 10 days | All | 1.00 | | 30 days | Order value \< 300 | 1.99 | | 30 days | 300 \< order value \< 750 | 4.99 | | 30 days | Order value\> 750 | 7.99 | | 60 days | Order value \< 300 | 4.99 | | 60 days | 300 \< order value \< 750 | 9.99 | | 60 days | Order value\> 750 | 12.99 | ## Finland | Option | Order value (EUR) | Fee (EUR) | |---------|---------------------------|-----------| | 2 days | All | 0.00 | | 10 days | All | 1.00 | | 30 days | Order value \< 300 | 1.99 | | 30 days | 300 \< order value \< 750 | 4.99 | | 30 days | Order value\> 750 | 7.99 | | 60 days | Order value \< 300 | 4.99 | | 60 days | 300 \< order value \< 750 | 9.99 | | 60 days | Order value\> 750 | 12.99 | ## Netherlands | Option | Order value (EUR) | Fee (EUR) | |---------|---------------------------|-----------| | 2 days | All | 0.00\* | | 10 days | All | 1.00 | | 30 days | Order value \< 300 | 1.99 | | 30 days | 300 \< order value \< 750 | 4.99 | | 30 days | Order value\> 750 | 7.99 | | 60 days | Order value \< 300 | 4.99 | | 60 days | 300 \< order value \< 750 | 9.99 | | 60 days | Order value\> 750 | 12.99 | ## Norway | Option | Order value (NOK) | Fee (NOK) | |---------|-----------------------------|-----------| | 2 days | All | 0.00\* | | 10 days | All | 10.00 | | 30 days | Order value \< 3000 | 19.00 | | 30 days | 3000 \< order value \< 7500 | 49.00 | | 30 days | Order value\> 7500 | 79.00 | | 60 days | Order value \< 3000 | 49.00 | | 60 days | 3000 \< order value \< 7500 | 99.00 | | 60 days | Order value\> 7500 | 129.00 | ## Sweden | Option | Order value (SEK) | Fee\*\* (SEK) | |---------|----------------------------|---------------| | 2 days | All | 0.00\* | | 10 days | All | 10.00 | | 30 days | Order value \< 3000 | 19.00 | | 30 days | 3000 \< Order Value ≤ 7500 | 49.00 | | 30 days | Order Value\> 7500 | 79.00 | | 60 days | Order value \< 3000 | 49.00 | | 60 days | 3000 \< Order Value ≤ 7500 | 99.00 | | 60 days | Order Value\> 7500 | 129.00 | ## United Kingdom | Option | Order value (GBP) | Fee (GBP) | |---------|--------------------------|-----------| | 2 days | All | 0.00\* | | 10 days | All | 1.00 | | 30 days | Order Value ≤ 300 | 1.99 | | 30 days | 300 \< Order Value ≤ 750 | 4.99 | | 30 days | Order Value\> 750 | 7.99 | | 60 days | Order Value ≤ 300 | 4.99 | | 60 days | 300 \< Order Value ≤ 750 | 9.99 | | 60 days | Order Value\> 750 | 12.99 | --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/extended-access-in-osm-app.md # Extended Access features in the Klarna On-site messaging Shopify app ## This article explains how you can grant additional access to the Klarna On-site messaging Shopify app in order to benefit from some features not available in the app by default. We’re continuously developing additional features for the Klarna On-site messaging (OSM) Shopify app to help mitigate the [constraints of the Klarna payments integration](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/known-constraints.md). The features included in the extended accesses for the Klarna OSM Shopify app allow us to gather additional information about orders placed with Klarna in your store. These extended access features are enabled by default when you install the On-Site messaging app, but can be disabled by deselecting the Extended Access option in the app settings. To use **Extended Access** features, you need a direct Klarna integration via the Klarna app. ![ Extend Access is an optional configuration that provides additional permissions to enhance the Klarna On-site messaging app’s functionalities.](ff93388b-4422-4bd9-ace7-af6217f0358b-Extended-Access.jpeg) *Extend Access is an optional configuration that provides additional permissions to enhance the Klarna On-site messaging app’s functionalities.* With Extended Access, the Klarna OSM Shopify app has access to protected customer data, such as the Shopify order details. We access minimal data as needed for the following additional features: - As of October 11, 2022, the Klarna OSM Shopify app queries the Shopify order to update Klarna’s `merchant_reference_1` field with the corresponding [Shopify order name](https://shopify.dev/api/admin-graphql/2022-10/objects/Order#field-order-name). - As of November 3, 2022, the Klarna order ID is added as a Shopify order note on the Shopify backend. - As of September 20, 2023, a Klarna tag is added to Shopify orders placed through Klarna. - Additional order line data, that is, a product URL and image URL, are added to the Klarna order shortly after the order is placed. - The inventory is checked to prevent product oversells. As of May 2023, this feature is available for selected merchants with extended access. If you want to enable this feature, contact your regional [Klarna merchant support](http://klarna.com/merchant-support) team. ## Action required to access new features ![ When extending access for the Klarna On-site messaging Shopify app, you'll see the details of the access changes.](664171b8-2f3a-42be-8395-3df7f3ded31d_Update-Klarna-On-Site-Messaging.jpeg) *When extending access for the Klarna On-site messaging Shopify app, you'll see the details of the access changes.* ![ When Extended Access is enabled in a Shopify store, additional order details are visible in the Merchant portal, for example, the Shopify order ID as Reference and an image of the product.](fce1974e-cd0f-4ff0-b741-Screenshot.jpeg) *When Extended Access is enabled in a Shopify store, additional order details are visible in the Merchant portal, for example, the Shopify order ID asReferenceand an image of the product.* **To summarize**: - The Klarna On-site messaging (OSM) Shopify app has extended access features that gather additional information about orders placed with Klarna in your store. - Enabling extended access grants the app permission to access protected customer data and provides enhanced functionalities for the Klarna OSM Shopify app. - Extended access can be enabled or disabled in the app settings by selecting or deselecting the Extended Access option in the app's dashboard. --- # Source: https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/extended-authorization-expiration.md # Extended authorization expiration ## Support longer fulfillment times with an extended authorisation. In certain business models and market segments, the fulfillment of online orders may take longer due to the nature of the products offered. These extended timelines are clearly communicated upfront to manage customer expectations and highlight the unique value of the products. Some examples include: - **Businesses specializing in handmade creations**, such as artisanal crafts, bespoke jewelry, or custom furniture, often require additional time to produce each item with care and precision. - **Companies offering personalized or made-to-order products**, like monogrammed clothing, custom artwork, or tailored skincare solutions, need extra time to process specifications and complete customization. - **Small-batch or limited-edition production models**, often seen in boutique fashion or gourmet food businesses, may experience longer fulfillment times due to limited resources or intentional production pacing. For these use cases, Klarna sets a default predefined authorization period of up to 180 days instead of the standard 28 days. This allows enough time to complete fulfillment and capture the order. This configuration is define during the onboarding to Klarna services. ## Ad hoc authorization extension In the case of a merchant where the fulfillment time is typically within the standard 28 days for Klarna authorization, but there is a rare or exceptional situation that genuinely requires more time to fulfill an order before it expires, you can extend the authorization period using the Order Management API. This option is designed to provide flexibility when unexpected delays occur—not as a routine practice.To extend an order’s authorization, the system adds your account's configured expiration period to the date you initiate the extension. For example, if an order is placed on January 1 and your account has a 28-day expiration period, extending the order on January 15 will move the new expiration date to February 13. Keep in mind: - Extending an order multiple times on the same day will result in the same expiration date. - You can only extend an order within 180 days of its creation. - Once an order expires, it can no longer be extended via this API. - Orders placed using the "Pay Now by Card" method cannot be extended. - In the U.S., orders using the "Financing" payment method ("Slice it 2.0" or "Fixed Sum Credit") are also not eligible for extension. To extend an order, send a **POST** request to the following endpoint: `{apiUrl}/ordermanagement/v1/orders/{order_id}/extend-authorization-time` Provide `order_id` as a path parameter. The `order_id` is the identifier you get in a successful response when \[ placing a new order\]. You don't need a request body for this `POST` method. **Use this feature judiciously, and only when absolutely necessary.** ### Success response If the request is successful, you'll receive a 204 No content response. ### Error response ​If your request contains errors, you'll receive an error response. Make sure the order is not expired or canceled and the `order_id` is correct. ``` json { "error_code": "NOT_ALLOWED", "error_messages": [ "Order is expired. Authorization time cannot be extended." ], "correlation_id": "ef30ffe5-5c42-485a-85b6-8aeb24689bc8" } ``` Sample of an error response to extend order authorization. ​You can use the `correlation_id` and the `order_id` values to troubleshoot the call in the Merchant portal logs section. Ready to send this request? See the [API reference of this call.](https://docs.klarna.com/api/ordermanagement/#operation/extendAuthorizationTime) --- # Source: https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/extra-merchant-data.md # Extra merchant data for Klarna Payments ## Learn about all the additional information about your customer you can send. Depending on the merchant segment and/or the services available to consumers, Klarna may require additional information regarding the customer, the merchant and/or the purchase. This information, referred to as extra merchant data (EMD), consist of data that is typically not available at the checkout, but which enables Klarna to complete an assertive risk assessment, enable new promotional products and improve conversion rates for a boost in performance. While in some scenarios sharing EMD is optional and only connected to the enablement of new solutions (depending on the business category or the type of goods sold), certain segments or use cases will require you to provide Klarna with specific EMD packages. It is *mandatory* for you as a merchant to provide Klarna with the required EMD data points if you operate within the following segments or if any of these use cases apply to you: | Segment and other use cases | EMD required | Details | |---------------------------|------------|-------| | Marketplace | * marketplace_seller_info | when enabling marketplace services and creating an order for a sub-seller, you are required to shared information about the sub-seller including the category of the products being sold and the id of the seller. | | Travel | * air_reservation_details * train_reservation_details * bus_reservation_details * ferry_reservation_details * car_rental_reservation_details * hotel_reservation_details * trip_reservation_details | if you are selling services associated to travel segment, you are required to provide information about the passengers and the itinerary to be booked via the applicable EMD for the service provided. | | Ticketing | * event | if you are selling ticket to an event, you have to provide information about the event. | | Subscriptions and On-Demand | * customer_tokens | if you are selling subscriptions or enabling recurring payments, you are required to provide [subscription object and customer info information](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/tokenized-payments/subscriptions-and-on-demand/) . | | Selling in physical store | * in_store_payment | for any segment, if the purchase is done in a physical store you are required to send the EMD to allow appropriated risk analysis of the transaction and properly identify the location of the purchase. | | Registered checkout and Klarna deals | * customer_account_info * payment_history_full * payment_history_simple | in the case you enable consumers to register to your site, EMD will allow us to identify your returning consumers and enhance the services offered even if they have no previous history paying with Klarna as well as unlock targeted campaigns. | | Pick up in store | * other_delivery_address | for any segment, if the consumer is allowed to buy online and pick up the product in a physical store, then you are required to send the EMD to allow appropriated risk analysis of the transaction. | Additionally to these use cases, depending on the risk evaluation during the merchant onboarding process, we might request additional information to be provided through a specific EMD appendix. Find out more about the different data fields for each package by checking the [attachments specification](https://docs.klarna.com/api/attachment-schema/#attachment-schema). ## How to send EMD You need to include the extra merchant data in an attachment property of the payload when \[ getting authorization\] or \[ updating a session\]. {{#mermaid: sequenceDiagram autonumber participant C as Consumer participant M as Merchant participant KAPI as Klarna API participant KJS as Klarna.js C->>M:Nagivate to
checkout page M->>KAPI: Create
Klarna Payment session Note over M, KAPI: Sending "Extra Merchant Data" in this call might make the implementation
not GDPR compliant for the EU market (NO CUSTOMER DETAILS) KAPI->>M: Klarna payment
session response M->>KJS: Initialize
klarna.js M ->> KJS: Load the container C->>M: Select Klarna
in Payment selector and
clicks 'Pay' M->>KJS: Execute
Authorize call Note over M, KJS: Preferred call to send the "Extra Merchant Data" KJS->>M: Provide authorization token (valid for 60 minutes) M->>KAPI: Create Order POST {apiUrl}/payments/v1/authorizations/{authorizationToken}/order Note over M, KAPI: "Extra Merchant Data" is not validated at this stage KAPI->>M: Provide order_id and redirect_url }} Add the relevant data based on the specification and your product vertical. See use cases in the following section to find examples per each vertical. To know which product vertical is right for you, [contact merchant support](https://www.klarna.com/merchant-support/). ## Use Cases ### Travel For travel segment, EMD is a mandatory requirement and merchants should send one or more of the following packages: `air_reservation_details`, `bus_reservation_details`, `train_reservation_details`, `ferry_reservation_details` and/or `hotel_reservation_details`. In exceptional cases, due to the business model nature of close “trip packages” and/or “trip based on registered travellers”, in this scenario you may not be able to provide all data requested in the above packages, in case EMD attachment `trip_reservation_details` will enable you to share available information. #### air_reservation_details This Package should be included as part of the integration when the transactions includes air reservations. ``` json "attachment": { "content_type": "application/vnd.klarna.internal.emd-v2+json", "body": "{\"air_reservation_details\":[{\"pnr\":\"Y2YWJD\",\"itinerary\":[{\"departure\":\"AMS\",\"departure_city\":\"Amsterdam\",\"arrival\":\"LHR\",\"arrival_city\":\"London\",\"carrier\":\"KL\",\"segment_price\":2000,\"departure_date\":\"2022-08-06T19:50:00Z\",\"ticket_delivery_method\":\"email\",\"ticket_delivery_recipient\":\"john.doe@email.com\",\"passenger_id\":[1,2,3],\"class\":\"business\"},{\"departure\":\"LHR\",\"departure_city\":\"London\",\"arrival\":\"AMS\",\"arrival_city\":\"Amsterdam\",\"carrier\":\"KL\",\"segment_price\":2000,\"departure_date\":\"2022-08-20T16:45:00Z\",\"ticket_delivery_method\":\"email\",\"ticket_delivery_recipient\":\"john.doe@email.com\",\"passenger_id\":[1,2,3],\"class\":\"business\"}],\"insurance\":[{\"insurance_company\":\"AON\",\"insurance_type\":\"cancellation\",\"insurance_price\":200}],\"passengers\":[{\"id\":1,\"title\":\"mr\",\"first_name\":\"John\",\"last_name\":\"Doe\"},{\"id\":2,\"title\":\"mrs\",\"first_name\":\"Jane\",\"last_name\":\"Doe\"},{\"id\":3,\"title\":\"\",\"first_name\":\"Josh\",\"last_name\":\"Doe\"}],\"affiliate_name\":\"Booking.com\"}]}" } ``` #### bus_reservation_details This Package should be included as part of the integration when the transactions includes bus reservations. ``` json "attachment": { "content_type": "application/vnd.klarna.internal.emd-v2+json", "body": "{\"bus_reservation_details\":[{\"pnr\":\"121r2sx121\",\"itinerary\":[{\"departure_city\":\"Amsterdam\",\"arrival_city\":\"London\",\"carrier\":\"Eurolines\",\"segment_price\":2000,\"departure_date\":\"2022-08-06T19:50:00Z\",\"ticket_delivery_method\":\"email\",\"ticket_delivery_recipient\":\"john.doe@email.com\",\"passenger_id\":[1,2,3],\"class\":\"1st\"},{\"departure_city\":\"London\",\"arrival_city\":\"Amsterdam\",\"carrier\":\"Eurolines\",\"segment_price\":2000,\"departure_date\":\"2022-08-20T16:45:00Z\",\"ticket_delivery_method\":\"email\",\"ticket_delivery_recipient\":\"john.doe@email.com\",\"passenger_id\":[1,2,3],\"class\":\"1st\"}],\"insurance\":[{\"insurance_company\":\"AON\",\"insurance_type\":\"cancellation\",\"insurance_price\":200}],\"passengers\":[{\"id\":1,\"title\":\"mr\",\"first_name\":\"John\",\"last_name\":\"Doe\"},{\"id\":2,\"title\":\"mrs\",\"first_name\":\"Jane\",\"last_name\":\"Doe\"},{\"id\":3,\"title\":\"\",\"first_name\":\"Josh\",\"last_name\":\"Doe\"}],\"affiliate_name\":\"eurolines.de\"}]}" } ``` #### train_reservation_details This Package should be included as part of the integration when the transactions includes train reservations. ``` json "attachment": { "content_type": "application/vnd.klarna.internal.emd-v2+json", "body": "{\"train_reservation_details\":[{\"pnr\":\"121r2sx121\",\"itinerary\":[{\"departure_city\":\"Amsterdam\",\"arrival_city\":\"London\",\"carrier\":\"Eurostar\",\"segment_price\":2000,\"departure_date\":\"2022-08-06T19:50:00Z\",\"ticket_delivery_method\":\"email\",\"ticket_delivery_recipient\":\"john.doe@email.com\",\"passenger_id\":[1,2,3],\"class\":\"1st\"},{\"departure_city\":\"London\",\"arrival_city\":\"Amsterdam\",\"carrier\":\"Eurostar\",\"segment_price\":2000,\"departure_date\":\"2022-08-20T16:45:00Z\",\"ticket_delivery_method\":\"email\",\"ticket_delivery_recipient\":\"john.doe@email.com\",\"passenger_id\":[1,2,3],\"class\":\"1st\"}],\"insurance\":[{\"insurance_company\":\"AON\",\"insurance_type\":\"cancellation\",\"insurance_price\":200}],\"passengers\":[{\"id\":1,\"title\":\"mr\",\"first_name\":\"John\",\"last_name\":\"Doe\"},{\"id\":2,\"title\":\"mrs\",\"first_name\":\"Jane\",\"last_name\":\"Doe\"},{\"id\":3,\"title\":\"\",\"first_name\":\"Josh\",\"last_name\":\"Doe\"}],\"affiliate_name\":\"eurostar.com\"}]}" } ``` #### ferry_reservation_details This Package should be included as part of the integration when the transactions includes ferry reservations. ``` json "attachment": { "content_type": "application/vnd.klarna.internal.emd-v2+json", "body": "{\"ferry_reservation_details\":[{\"pnr\":\"121r2sx121\",\"itinerary\":[{\"departure_city\":\"Calais\",\"arrival_city\":\"Dover\",\"carrier\":\"P&O\",\"segment_price\":2000,\"departure_date\":\"2022-08-06T19:50:00Z\",\"ticket_delivery_method\":\"email\",\"ticket_delivery_recipient\":\"john.doe@email.com\",\"passenger_id\":[1,2,3],\"class\":\"1st\"},{\"departure_city\":\"Dover\",\"arrival_city\":\"Calais\",\"carrier\":\"P&O\",\"segment_price\":2000,\"departure_date\":\"2022-08-20T16:45:00Z\",\"ticket_delivery_method\":\"email\",\"ticket_delivery_recipient\":\"john.doe@email.com\",\"passenger_id\":[1,2,3],\"class\":\"1st\"}],\"insurance\":[{\"insurance_company\":\"AON\",\"insurance_type\":\"cancellation\",\"insurance_price\":200}],\"passengers\":[{\"id\":1,\"title\":\"mr\",\"first_name\":\"John\",\"last_name\":\"Doe\"},{\"id\":2,\"title\":\"mrs\",\"first_name\":\"Jane\",\"last_name\":\"Doe\"},{\"id\":3,\"title\":\"\",\"first_name\":\"Josh\",\"last_name\":\"Doe\"}],\"affiliate_name\":\"poferries.com\"}]}" } ``` #### car_rental_reservation_details This Package should be included as part of the integration when the transactions included car rental reservations. ``` json "attachment": { "content_type": "application/vnd.klarna.internal.emd-v2+json", "body": "{\"car_rental_reservation_details\": [{\"pnr\": \"3411qsxqed23123\",\"car_rental_itinerary\": [{\"rental_company\": \"Hertz\",\"drivers_id\": [1,2],\"pick_up_location\": {\"street_address\": \"Aankomstpassage Amsterdam (Schiphol)\",\"postal_code\": \"1118 AA\",\"city\": \"Schiphol\",\"country\": \"NL\"},\"start_time\": \"2022-08-20T16:45:00Z\",\"drop_off_location\": {\"street_address\": \"Aankomstpassage Amsterdam (Schiphol)\",\"postal_code\": \"1118 AA\",\"city\": \"Schiphol\",\"country\": \"NL\"},\"end_time\": \"2022-08-25T16:45:00Z\",\"car_price\": 700,\"class\": \"economy\"}],\"insurance\": [{\"insurance_company\":\"AON\",\"insurance_type\":\"cancellation\",\"insurance_price\":2000}],\"drivers\": [{\"id\":1,\"title\":\"mr\",\"first_name\":\"John\",\"last_name\":\"Doe\"},{\"id\":2,\"title\":\"mrs\",\"first_name\":\"Jane\",\"last_name\":\"Doe\"}],\"affiliate_name\": \"hertz.com\"}]}" } ``` #### hotel_reservation_details This Package should be included as part of the integration when the transactions included hotel reservations. ``` json "attachment": { "content_type": "application/vnd.klarna.internal.emd-v2+json", "body": "{\"hotel_reservation_details\":[{\"pnr\":\"20qsx2121\",\"hotel_itinerary\": [{\"hotel_name\": \"Hotel ltd.\",\"address\": {\"street_address\":\"New Burlington St 10\",\"postal_code\": \"W1B 1JA\",\"city\": \"London\",\"country\": \"GB\"},\"start_time\": \"2022-08-06T19:50:00Z\",\"end_time\": \"2022-08-20T22:00:00Z\",\"number_of_rooms\": 1,\"ticket_delivery_method\": \"email\",\"ticket_delivery_recipient\": \"john.doe@email.com\",\"hotel_price\": 23050,\"class\":\"Presidential Suite\",\"passenger_id\": [1,2]}],\"insurance\":[{\"insurance_company\":\"AON\",\"insurance_type\":\"cancellation\",\"insurance_price\":200}],\"passengers\":[{\"id\": 1,\"title\":\"mr\",\"first_name\": \"John\",\"last_name\": \"Doe\"},{\"id\": 2,\"title\":\"mrs\",\"first_name\": \"Jane\",\"last_name\": \"Doe\"}],\"affiliate_name\":\"Hotels.com\"}]}" } ``` #### trip_reservation_details This Package should be included as part of the integration when the transactions includes ferry reservations. This package does not replace `air_reservation_details`, `hotel_reservation_details` nor any other travel related package. It should only be used when you are not able provide detailed information for the services included. ``` json "attachment": { "content_type": "application/vnd.klarna.internal.emd-v2+json", "body": "{\"trip_reservation_details\":[{\"trip_itinerary\":{\"initial_country\":\"France\",\"initial_city\":\"Calais\",\"final_country\":\"England\",\"final_city\":\"Dover\",\"start_time\":\"2022-08-06T19:50:00Z\",\"end_time\":\"2022-08-15T19:50:00Z\"},\"trip_passengers\":[{\"id\":1,\"first_name\":\"John\",\"last_name\":\"Doe\",\"birth_date\":\"1980-05-10\",\"email\":\"johndoe@email.com\",\"unique_id\":\"AYY12345\",\"main_passenger\":\"true\"},{\"id\":2,\"title\":\"mrs\",\"first_name\":\"Jane\",\"last_name\":\"Doe\",\"birth_date\":\"1982-10-05\",\"email\":\"janedoe@email.com\",\"unique_id\":\"AYY98765\",\"main_passenger\":\"false\"}],\"min_age\":\"21\",\"max_age\":\"60\",\"services\":{\"travel_insurance\":\"true\",\"hotel\":\"true\",\"flight\":\"true\",\"cancelation_service\":\"true\",\"shared_room\":\"false\"},\"affiliate_name\":\"WEROAD\"}]}" } ``` ### Marketplace #### marketplace_seller_info This Package allows Klarna to identify transactions that were generated via a marketplace and includes information for risk evaluation of the corresponding sellers.  ``` json "attachment": { "content_type": "application/vnd.klarna.internal.emd-v2+json", "body": "{\"marketplace_seller_info\":[{\"unique_account_identifier_seller\":{\"pno\":\"12121231242\",\"email\":\"markeplace_merchant@email.com\",\"other\":\"passthrough data\"},\"sub_merchant_id\":\"1234567890qwertyuiopasdfg\",\"sub_merchant_name\":\"Marketbrick Ltd.\",\"sub_merchant_postal_code\":\"11010\",\"product_category\":\"Computers\",\"product_name\":\"Acer 5400\",\"account_registration_date\":\"2020-06-10T12:02:21Z\",\"account_last_modified\":{\"password\":\"2020-06-10T12:02:21Z\",\"email\":\"2020-06-10T12:02:21Z\",\"listing\":\"2020-06-10T12:02:21Z\",\"login\":\"2020-06-10T12:02:21Z\",\"address\":\"2020-06-10T12:02:21Z\"},\"seller_rating\":4.5,\"number_of_trades\":34,\"volume_of_trades\":4500}]}" } ``` ### Registered checkout and Klarna deals #### customer_account_info, payment_history_full and payment_history_simple Allow Klarna to identify users that previously created an account in your store website and differentiate from shoppers using*Gues*t checkout flows.  The following example shows how to send EMD including `costumer_account_info` and `payment_history_full`: ``` json "attachment":{ "content_type":"application/vnd.klarna.internal.emd-v2+json", "body":"{\"payment_history_full\":[{\"unique_account_identifier\":\"1234567890qwertyuiopasdfg\",\"number_paid_purchases\":5,\"payment_option\": \"other\",\"total_amount_paid_purchases\":412134,\"date_of_first_paid_purchase\":\"2021-06-10T12:10:43Z\",\"date_of_last_paid_purchase\":\"2022-05-11T12:43:56Z\"},{\"unique_account_identifier\":\"1234567890qwertyuiopasdfg\",\"number_paid_purchases\":30,\"payment_option\": \"non klarna credit\",\"total_amount_paid_purchases\":123210,\"date_of_first_paid_purchase\":\"2022-01-02T10:23:10Z\",\"date_of_last_paid_purchase\":\"2022-11-09T16:52:41Z\"}],\"customer_account_info\":[{\"unique_account_identifier\":\"1234567890qwertyuiopasdfg\",\"account_registration_date\":\"2021-06-10T12:02:21Z\",\"account_last_modified\":\"2021-07-10T12:02:21Z\"}]}" } ``` In case that not all properties are available to share `payment_history_full` it is recommended to implement `payment_history_simple` package instead. `payment_history_simple` *exampl*e: ``` json "attachment": { "content_type": "application/vnd.klarna.internal.emd-v2+json", "body": "{\"payment_history_simple\":[{\"unique_account_identifier\":\"1234567890qwertyuiopasdfg\",\"paid_before\":true}]}" } ``` ### Ticketing #### event This Package should be included as part of the integration when the transactions included tickets for events such as concerts, amusement parks, etc. ``` json "attachment": { "content_type": "application/vnd.klarna.internal.emd-v2+json", "body": "{\"event\": [{\"event_name\": \"Lady Gaga, the Chromatica Ball\",\"event_company\": \"Ticketmaster\",\"genre_of_event\": \"Music concert\",\"arena_name\": \"Gelredome\",\"arena_location\": {\"street_address\": \"Batavierenweg 25\",\"postal_code\": \"6841 HN\",\"city\": \"Arnhem\",\"country\": \"NL\"},\"start_time\": \"2023-07-26T20:45:00Z\",\"end_time\": \"2023-07-26T22:45:00Z\",\"access_controlled_venue\": true,\"ticket_delivery_method\": \"email\",\"ticket_delivery_recipient\": \"john@email.com\",\"affiliate_name\": \"Ticketmaster\"}]}" } ``` ### Subscriptions and On-Demand #### customer_tokens This Package should be included as part of the integration when the transactions included subscriptions for customers. ``` json "attachment": { "content_type": "application/vnd.klarna.internal.emd-v2+json", "body": "{\"customer_tokens\":[{\"avg_order_value\":10000, \"avg_purchase_frequency_count\":1, \"avg_purchase_frequency_interval\":\"MONTH\", \"min_order_value\":10000, \"max_order_value\":10000}]}" } ``` ### Vouchers and Digital Products #### voucher This Package should be included as part of the integration when the transactions includes vouchers or digital products ### Voucher example ``` json "attachment": { "content_type": "application/vnd.klarna.internal.emd-v2+json", "body": "{\"voucher\":[{\"voucher_name\":\"The View from The Shard & Glass of Champagne for Two\",\"voucher_company\":\"The Shard\",\"start_time\":\"2024-08-23T23:00:00Z\",\"end_time\":\"2024-11-24T23:59:59Z\",\"affiliate_name\":\"Virgin Experience\"}]}" } ``` ### Digital Product example ``` json "attachment": { "content_type": "application/vnd.klarna.internal.emd-v2+json", "body": "{\"voucher\":[{\"voucher_name\":\"Google Analytics 101\",\"voucher_company\":\"The School\",\"start_time\":\"2024-08-23T23:00:00Z\",\"end_time\":\"2024-11-24T23:59:59Z\",\"affiliate_name\":\"Business Education\"}]}" } ``` ### Selling in physical store #### in_store_payment This package should be included as part of an integration when the purchase is done at a physical store. ``` json "attachment": { "content_type": "application/vnd.klarna.internal.emd-v2+json", "body": "{\"in_store_payment\": [{\"store_info\": {\"merchant_store_id\": \"LONDON12\",\"store_terminal_id\":\"AD12342D\",\"store_address\": {\"street_address\":\"New Burlington St 10\",\"postal_code\": \"W1B 1JA\",\"city\": \"London\",\"country\": \"GB\"}}}]}" } ``` ### Pick up in store #### other_delivery_address This package should be included as part of an integration when delivery will be done on an alternative non-residential address such as pick-up in a store or in a pick-up point. ``` json "attachment": { "content_type": "application/vnd.klarna.internal.emd-v2+json", "body": "{\"other_delivery_address\":[{\"shipping_method\":\"store pick-up\",\"shipping_type\":\"express\",\"first_name\":\"Test\",\"last_name\":\"Person\",\"street_address\":\"Rue La Fayette\",\"street_number\":\"40\",\"postal_code\":\"75009\",\"city\":\"Paris\",\"country\":\"FR\"}]}" } ``` It is not required to duplicate the address information, include only the store/pick-up point address in the API object `shipping_address` and submit EMD attachment `other_delivery_address` detailing `shipping_method` See the alternatives below: ### Address on shipping_address only ``` json Klarna.Payments.authorize( {}, { … "shipping_address":{ "email":"klarna.test@klarna.com", "given_name":"Klarna", "family_name":"Test", "phone":"+16145555555", "street_address":"100 N. High Street", "street_address2":"Suite 300", "city":"Columbus", "region":"OH", "postal_code":"43215", "country":"US" } "attachment": { "content_type": "application/vnd.klarna.internal.emd-v2+json", "body": "{\"other_delivery_address\":[{\"shipping_method\":\"store pick-up\",\"shipping_type\":\"express\"}]}" } ``` ### Address on shipping_address and EMD ``` json Klarna.Payments.authorize( {}, { … "shipping_address":{ "email":"klarna.test@klarna.com", "given_name":"Klarna", "family_name":"Test", "phone":"+16145555555", "street_address":"100 N. High Street", "street_address2":"Suite 300", "city":"Columbus", "region":"OH", "postal_code":"43215", "country":"US" } "attachment": { "content_type": "application/vnd.klarna.internal.emd-v2+json", "body": "{\"other_delivery_address\":[{\"shipping_method\":\"store pick-up\",\"shipping_type\":\"express\",\"first_name\":\"Klarna\",\"last_name\":\"Test\",\"street_address\":\"N. High Street\",\"street_number\":\"100\",\"postal_code\":\"43215\",\"city\":\"Columbus\",\"country\":\"US\"}]}" } ``` If the you will be sending the address in EMD attachment this should not be different than the `shipping_address` API object. --- # Source: https://docs.klarna.com/klarna-search/before-you-start/faq.md # Klarna search FAQ ## Updates, price files and information ### How can I fix incorrect information or the name of a particular product? A lot of the information we display comes directly from the merchants. So, if you find an error, it’s quite probable that something is wrong in the merchant's product feeds. We would be grateful if you could report incorrect information to us via email. ### How can I change incorrect company information? Please contact our customer support team and they will assist you. ### Why aren’t recently updated prices visible? When a merchant makes a change to its site or in the price file, this means we have to import the file again before the changes are displayed. The file is imported automatically every day, but we can also schedule the file to be imported several times a day or do it manually straight away if you request it. If you’ve added/removed columns in a price file or rebuilt your site, this can cause our import of your file to not work as it should. That’s why it’s a good idea to be proactive and inform us of such changes in advance so we can adapt to them. Things you should know about price updates: - Prices or product information that’s already visible will be updated immediately after we import the price file or site. - It can take around 24 hours for new products to appear on the site after importing the price file. - If you add or change products, categories or make other important updates, please let us know. We can then speed up the process and make sure everything runs as smoothly and correctly as possible. Always consult with us before you restructure or make major changes to your site or price file. ### What happens if we change our price file or site without informing you? If you simply add new products, categories or other existing information to the price file or on the site, this shouldn’t cause any problems. But if you make significant changes to the structure of your site/price file, there is a risk that products will disappear from our site or that there may be problems when we try to import the file or site. If you make changes in the field for each product's unique article number (SKU), this means that each product must be recreated in our database. As a result, this means the accrued popularity (number of clicks) for those products will disappear. Please always inform us if you’re planning major or important changes. We’ll then make sure that everything’s in order and runs as smoothly and correctly as possible. ### Why does it take a while before new products appear? It varies how long it takes from a product being added to the website, or included in your price file, to become visible. This can depend on a range of things. It can take up to 24 hours before new products are displayed. And if these are completely new categories, it can take longer. If you add or change products, categories or make other important updates, it’s always best to let us know. We can then speed up the process and make sure it’s as smooth and correct as possible. We strongly recommend that you provide the manufacturer's barcode number (EAN) or article number (MSKU) in your price file or on your site. This means that matching to the right product on our site will be automatic, and that updates will be quicker. ### How often do you import our site or price file? Your site or price file is imported 1-4 times per day. The number of times we import the file depends on how much system resources the data collection takes. If you have preferences about the times for importing the price file, we’re happy to accommodate these. Prices or information about products that are already live will be updated immediately after we import the price file or site. ### Why are several of our products missing images? It might be that the links, which we load with your images, have stopped working. Or, if you’ve replaced the images on existing image links, we might need to re-upload them to our system. Another possible reason is that we simply don’t support your image format. Make sure you always have clear and correct product images, as this increases your chances of more clicks. Please contact us if you have problems with your images. ### Why are the prices on my products so far down the list? The most likely explanation is that you either have a higher product price than many of your competitors, or that we have no shipping costs for the product. When price-sorting for products that include shipping costs, products without shipping costs always end up at the bottom. There are also products that we’ve not yet created a sorted price comparison for. These products are not sorted in ascending price order, but are instead based on, among other things, relevance. ### Why does the listing look different in certain categories? We strive to display products in a way that users appreciate the most. This means that the default selection for some categories is in list view, primarily consisting of text. For other categories, the default selection for product images may have a more prominent position in a grid view. For all products where we have a price comparison, the standard setting is to show the lowest price at the top, excluding shipping costs. The products then follow in ascending order of price. Customers can always change how the list is sorted—for example, you can sort the list by lowest price including shipping costs, or by shortest delivery time. ## Searches and product categorization ### Why can't I find the product I'm looking for? The easiest way to find what you’re looking for is to type your query in the search bar at the top of the site. You can enter the brand, model or type of product you’re looking for. A product can also be found in several categories, or within a different category from where the search leads to.  ### Why do our products sometimes end up in the wrong category? We match every product category with the merchant to the category that has the best match. In some cases, the content of the merchant's category doesn’t mirror the title. For example, a category entitled "Mobile phones" can also include accessories for mobile phones. In this case, there is a risk that these will not be in the right category.  Be clear with your product categorization and make sure you don’t mix up product types. This is to avoid products ending up categorized incorrectly, or that they can’t be listed at all. Of course, we always strive to make sure that everything is correct, but we can’t guarantee 100% accuracy. If you think that a product is incorrectly categorized, simply contact us and we will try to find a solution. ## Clicks, tracking and conversions ### Why have all my products disappeared? Of course, we have procedures to avoid this, but unfortunately we can’t guarantee that it’ll never happen. If a merchant disappears, it’s normally due to one of the following reasons: - Your price file can no longer be found on the specified link. - Your price file has changed in a way that means our import no longer works. - Your site has changed in a way that means our import no longer works. - Your categories have changed and now require new manual matching by us. - You have reached your monthly spend limit. Always consult with us before you restructure or make major changes to your site or price file. ### According to you, our store has received a certain number of clicks. Yet, why does Google Analytics show a different figure? It’s common for data to be different in Google Analytics compared with our figures. This is because Google Analytics shows sessions and not clicks—and clicks are what we count and invoice for. This means that customers can click on several of your product links during a short period of time, and this will still be registered as a single session by Google Analytics. It’s very common for our users to click on more than one link from the same merchant—that’s why it’s not unusual to have more clicks than sessions. We also have protection against "robot clicks." This means that all clicks that take place within 10 seconds on a merchant’s product are always recorded as a single click in our systems. ### Why has the number of clicks to my shop reduced? A reduction in traffic can have many different causes. A few of the common ones are: - The number of products on your site or in your price file have been reduced, or the matching of the categories is problematic. - Your products have insufficient information to be matched. - There have been complications during the import of your site or price file. - The number of competitors in your merchant's segment has increased and reduced your share of the total clicks. - Your prices are no longer among the cheapest. ### Why do we generally have low conversions, or on particular products? There are many different reasons for low conversions, and this often varies quite a lot from merchant to merchant. Feel free to contact us if you have questions about your conversions, and we can perform an analysis for your store. A few probable causes are listed below: - The prices don’t match. If a higher price is displayed on the merchant's page, there’s a risk that the customer will abandon the purchase. - The majority of our visitors use mobile. If your site is not customized for a mobile user experience, there’s a risk that visitors won’t purchase anything. - It’s a hassle to pay. If the purchase process is complicated or unclear, or if you lack an established payment method, some visitors won’t buy from you. - You charge additional fees. If there are shipping costs, handling charges or similar fees that aren’t visible, there’s a risk that the customer will abandon the purchase. - Product information or images are unclear or incorrect. - The stock status is not correct. If a product is shown as in stock but is out of stock on the merchant's homepage, the customer will probably find another merchant. - Popular products that are out of stock can get lots of clicks despite being described as out of stock. This is sometimes because the customer wants to double-check that the stock status is correct. - The customer may feel less confident in making a purchase because of an unprofessional impression of the page.  - The company information on the merchant site is incomplete or poorly written. - The requested delivery methods by the customer are missing. Analyze your business and speak with us if you want to improve your conversions. --- # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/other-actions/finalize-an-authorization.md # Finalize an authorization ## Use the Klarna JavaScript SDK to finalize an authorization. In a multistep checkout, your customer can change any order details after the payment selection step (for example, on an order review page). If you have a multistep checkout and you `authorize` Klarna at the payment selection step, you might need to `finalize` the purchase with Klarna when your customer has reviewed the order. The authorization of the purchase must always happen at the end of the purchase when the customer clicks the **Buy** button. To finalize a purchase in a multistep checkout, use the `authorize` call at the payment selection step and the `finalize` call when the customer clicks the **Buy** button. You need to finalize the authorization only if you have a multistep checkout. If you're starting a new Klarna payments integration, we recommend that you authorize the purchase at the very last step in your checkout. ## Authorize() call During the authorization step, call authorize with the auto_finalize parameter set to false. In this way, you indicate that there's an upcoming finalization step in your checkout. ``` javascript Klarna.Payments.authorize( { payment_method_category: 'klarna', auto_finalize: false}, {}, function(res) { // proceed to next checkout page. The finalize_required property in the response indicates // if finalize is needed or not. // // res = { // show_form: true, // approved: true, // finalize_required: true // } }) ``` Sample of the `authorize()` for finalizing the authorization. ## Finalize() call If the response of the authorize call indicated that `finalize_required` is `true` you need to call `finalize()` when the customer reaches the last page at checkout to finish the purchase. This call triggers the actual authorization and returns the `authorization_token`. ``` javascript Klarna.Payments.finalize( {payment_method_category: 'klarna'}, {}, function(res) { // res = { // show_form: true, // approved: true, // authorization_token: ... // } }) ``` Sample of the `finalize()` for finalizing the authorization. ### Responses In a successful response, you get an `authorization_token` to create an order. For more details about the possible responses, see the [Get authorization](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-2-checkout/#get-authorization) section of the documentation. --- # Source: https://docs.klarna.com/resources/legal-and-compliance/policies-and-term-of-service/financing-domestic-premises-suppliers.md # Financing for Domestic Premises Suppliers Please note that Domestic Premises Suppliers (DPS) as  defined by the FCA, are not eligible to offer our Financing product. --- # Source: https://docs.klarna.com/payments/mobile-payments/additional-resources/flows-and-error-handling.md # Payment Flows and Error Handling ​This page outlines the steps and flows integrators may need to understand when integrating the SDK. It will additionally provide some code snippets and try to expand on how error handling and potential custom flows may work. ## Klarna Payment View Integration ### Overview End to end integration of the Klarna Payment View integrationconsists of 4 steps; 1. Creating a session (Server-side) 2. Rendering the payment view (Client-side) 3. Authorizing the session (Client-side) 4. Creating an order (Server-side) ### Server-side Operations #### Creating a session When the user is ready to check out, your app will want to render Klarna’s payment views. These views provide customers with information about Klarna as a payment option. Before rendering these views, your backend will need to create what we call a “Payment Session” with Klarna. This payment session contains details about your prospective order and customer. A session also contains a Client Token that identifies the session to the SDK. This step is identical to how you do it when integrating Klarna Payments on the web. You can read more about it [here](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-1-initiate-a-payment.md). #### Creating an order Once the authorization is done, you will be handed an authorization token from the SDK, with this token you backend will be able to create an order via the Klarna Payments APIs. This stage is performed in your backend. As with session creation, we offer more details about this in our documentation about Klarna Payments [here](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-3-create-an-order.md). ##### Purchase confirmation After a successful authorization and order creation, you can render your native mobile confirmation screen inside you app as desired and let the customers know that their purchase has been completed. ### Client-side Operations The integration on client side can be broken down into roughly two parts: - When the user enters checkout and Klarna appears as a payment option. - When the user logs into their user account in an emerging window and selects a Klarna payment method there, Klarna needs to evaluate if the user is eligible to pay with the selected payment method. ### Init & Load Flow When a user enters a checkout view or a view that should show Klarna as a payment option. #### Diagram {{#mermaid: sequenceDiagram autonumber participant U as User participant M as Merchant's App participant SDK as In-App SDK U->>M: Arrives to checkout view M->>M: Creates payment view M->>SDK: Calls initialize() alt Fatal initialization error SDK->>M: Calls error callback (fatal) M->>M: Hides/Removes payment view else Non-fatal initialization error SDK->>M: Calls error callback (non-fatal) M->>M: Corrects the error. May call initialize() again end alt Successful initialization SDK->>M: Calls initialize callback M->>SDK: Calls load() alt Fatal load error SDK->>M: Calls error callback (fatal) M->>M: Hides/Removes payment view else Non-fatal load error SDK->>M: Calls error callback (non-fatal) M->>M: Corrects the error. May call initialize() again else Successful load SDK->>M: Calls load callback. Payment view is visible. end end }} - Common errors include using an invalid session token. \*\* Common errors include sending in invalid order information or billing information. Error callback has an error object with an invalidFields parameter. #### Some Notes When receiving an error message, you may check the isFatal parameter to determine whether the error is “final”, and Klarna shouldn’t be made available to customers. ### Authorization Flow When a user confirms they want to pay with Klarna. #### Diagram {{#mermaid: sequenceDiagram autonumber participant U as User participant M as Merchant's App participant SDK as In-App SDK U->>M: Taps buy/checkout M->>SDK: Calls Authorize() SDK->>SDK: Renders authorization dialog (if necessary) alt Success flow U->>SDK: Completes authorization flow successfully SDK->>M: Calls authorization callback with authorization token M->>M: Submits authorization token to Klarna end alt Cancel flow U->>SDK: Cancels authorization flow (taps x). Payments method is still available SDK->>M: Calls authorization callback without authorization token M->>M: Stays in the checkout view end alt Reject flow U->>SDK: User is rejected in authorization flow. Payment method is not available. SDK->>M: Calls error callback with show_form=false M->>M: Hides the payment method end }} #### Some Notes Authorization is successful when: 1. You have an authorization token *and* 2. You have approved == true #### Code Example ### Android ``` kotlin override fun onAuthorized(view: KlarnaPaymentView, approved: Boolean, authToken: String?, finalizedRequired: Boolean?) { val success = !authToken.isNullOrBlank() && approved if (success) { // User successfully completed the auth. flow. // Send the auth token to Klarna. } else { // User closed the payment window (tap x). // Merchant may keep payment view in checkout view. } } override fun onErrorOccurred(view: KlarnaPaymentView, error: KlarnaPaymentsSDKError) { if(error.name == "ShowFormFalseError"){ // User is rejected in auth flow or payment method is not available. // Merchant may hide Klarna as payment option, as it's not available to the user. } } ``` ### iOS ``` swift func klarnaAuthorized(paymentView: KlarnaPaymentView, approved: Bool, authToken: String?, finalizeRequired: Bool) { if let token = authToken, approved == true { // Authorization approved! Send token to backend and create an order. } else { // User tapped close button, or maybe merchant may need to call finalize(). } } func klarnaFailed(inPaymentView paymentView: KlarnaPaymentView, withError error: KlarnaPaymentError) { if error.name == "ShowFormFalseError" { // Klarna has determined that the customer is not eligible for this // payment method. // // This is final. Merchant may hide/remove this payment view. Should // not call authorize() again. } } ``` ## Error Handling following errors might occur during the payment flow: ## Invalid Client Token ### Description: This error happens when the client token used to initialize the SDK is invalid for any reason. Merchant should make sure that the client token value is not expired or tampered with. ### Report: When this error occurs, merchant’s app will receive an error in the onErrorOccurred callback method that contains this information: - action: Initialize - name: InvalidClientTokenError - message: Error performing Klarna.Payments.init(). ### Handling: Merchant can fix this error by getting a valid client token and calling the init method again. ### Android ``` kotlin override fun onErrorOccurred(view: KlarnaPaymentView, error: KlarnaPaymentsSDKError) { if(error.name == "InvalidClientTokenError"){ // Client token used to initialize the SDK is invalid. // Merchant should get a valid client token and use it to initialize the SDK again. } } ``` ### iOS ``` swift func klarnaFailed(inPaymentView paymentView: KlarnaPaymentView, withError error: KlarnaPaymentError) { if error.name == "InvalidClientTokenError" { // Client token used to initialize the SDK is invalid. // Merchant should get a valid client token and use it to initialize the SDK again. } } ``` ## Invalid Payment Method ### Description: This error happens when the payment method is invalid and is not available for this session. You must ensure that the payment method is the same value as in the `payment_method_categories` parameter that is inside the response object when\[ initiating a payment\]. The most common value is `KlarnaPaymentCategory(“klarna”),`but there might be cases when you encounter one of these other values: - `KlarnaPaymentCategory.PAY_NOW (“pay_now”)` - `KlarnaPaymentCategory.PAY_LATER (“pay_later”)` - `KlarnaPaymentCategory.SLICE_IT (“pay_over_time”)` ### Report: When this error occurs, the merchant’s app will receive an error in the onErrorOccurred callback method after calling the load function. The error contains this information: - action: Load - name: ShowFormFalseError - message: Error performing Klarna.Payments.load(). ### Handling: This error is fatal, meaning that the merchant cannot fix it and call the load function again. Merchant should hide the payment view, set a valid payment method and start the SDK again by calling the init function. ### Android ``` kotlin override fun onErrorOccurred(view: KlarnaPaymentView, error: KlarnaPaymentsSDKError) { if(error.action == "Load" && error.name == "ShowFormFalseError"){ // The selected payment method is invalid. // Merchant should set a valid payment method for SDK and initialize the SDK again. } } ``` ### iOS ``` swift func klarnaFailed(inPaymentView paymentView: KlarnaPaymentView, withError error: KlarnaPaymentError) { if error.action == "Load" && error.name == "ShowFormFalseError" { // The selected payment method is invalid. // Merchant should set a valid payment method for SDK and initialize the SDK again. } } ``` ## Invalid Card Information ### Description: This error happens when the user sets invalid card information when authorizing the payment. ### Report: When this error occurs, merchant’s app will receive the onAuthorized callback method with these parameters: - approved: false - authToken: null ### Handling: Merchant can keep the payment view. User will see error messages on the card information field(s) and have to review the submitted information and try again. ### Android ``` kotlin override fun onAuthorized(view: KlarnaPaymentView, approved: Boolean, authToken: String?, finalizedRequired: Boolean? ) { val success = !authToken.isNullOrBlank() && approved if (success) { // User successfully completed the auth. flow. // Send the auth token to Klarna. } else { // User provided invalid card information. // Merchant may keep the payment view in checkout view. } } ``` ### iOS ``` swift func klarnaAuthorized(paymentView: KlarnaPaymentView, approved: Bool, authToken: String?, finalizeRequired: Bool) { if let token = authToken, approved == true { // Authorization approved! Send token to backend and create an order. } else { // User provided invalid card information. // Merchant may keep the payment view in checkout view. } } ``` ## User Cancels The Authorization ### Description: This error happens when the user closes the authorization window. ### Report: When this error occurs, merchant’s app will receive the onAuthorized callback method with these parameters: - approved: false - authToken: null ### Handling: Merchant keeps the payment view and the user can continue with the payment again. ### Android ``` kotlin override fun onAuthorized(view: KlarnaPaymentView, approved: Boolean, authToken: String?, finalizedRequired: Boolean? ) { val success = !authToken.isNullOrBlank() && approved if (success) { // User successfully completed the auth. flow. // Send the auth token to Klarna. } else { // User closed the authorization window. // Merchant may keep the payment view in checkout view. } } ``` ### iOS ``` swift func klarnaAuthorized(paymentView: KlarnaPaymentView, approved: Bool, authToken: String?, finalizeRequired: Bool) { if let token = authToken, approved == true { // Authorization approved! Send token to backend and create an order. } else { // User closed the authorization window. // Merchant may keep the payment view in checkout view. } } ``` ## Missing or Invalid Fields in Authorize Data ### Description: This error happens when the merchant doesn’t send some of the required billing or shipping information fields or sends invalid data when calling the authorize function on SDK. ### Report: If this error occurs, Klarna will show an error message to the user saying that some of the information is missing and might ask for the missing information then. In this case the user can fill the information and proceed. Otherwise, the user will acknowledge the error and close the payment view. In the latter case, this error is treated exactly like the user cancel the authorization flow and the merchant’s app will receive the onAuthorized callback method with these parameters: - approved: false - authToken: null ### Handling: Merchant should fix the error by sending all the required information to the authorize method and continue. ### Android ``` kotlin override fun onAuthorized(view: KlarnaPaymentView, approved: Boolean, authToken: String?, finalizedRequired: Boolean? ) { val success = !authToken.isNullOrBlank() && approved if (success) { // User successfully completed the auth. flow. // Send the auth token to Klarna. } else { // Authorize information is missing some of the required fields. // Merchant may keep the payment view in checkout view and call the // authorize function with valid information. } } ``` ### iOS ``` swift func klarnaAuthorized(paymentView: KlarnaPaymentView, approved: Bool, authToken: String?, finalizeRequired: Bool) { if let token = authToken, approved == true { // Authorization approved! Send token to backend and create an order. } else { // Authorize information is missing some of the required fields. // Merchant may keep the payment view in checkout view and call the // authorize function with valid information. } } ``` ## User Getting Rejected on Authorize ### Description: This error happens when a user gets rejected by Klarna. This error is fatal and can’t be fixed by the merchant. ### Report: When this error occurs, merchant’s app will receive an error in the onErrorOccurred callback method containing this information: - action: Authorize - name: ShowFormFalseError - message: Error performing Klarna.Payments.authorize(). ### Handling: Since this is a fatal error, merchant should remove the Klarna view and stop the payment process. ### Android ``` kotlin override fun onErrorOccurred(view: KlarnaPaymentView, error: KlarnaPaymentsSDKError) { if(error.action == "Authorize" && error.name == "ShowFormFalseError"){ // user is rejected when authorizing the payment. // Merchant should remove the Klarna view and stop the payment process. } } ``` ### iOS ``` swift func klarnaFailed(inPaymentView paymentView: KlarnaPaymentView, withError error: KlarnaPaymentError) { if error.action == "Authorize" && error.name == "ShowFormFalseError" { // user is rejected when authorizing the payment. // Merchant should remove the Klarna view and stop the payment process. } } ``` ## FAQ About Standalone Integration **Q**: What is the finalizeRequired parameter in the callback? **A**: Some payment methods’ authorize() processes consist of two steps. By default, Klarna does both at once. When you call authorize() with autoFinalize = false, the aforementioned two steps are split into individual calls (authorize() and finalize()). In that case, if you receive finalizeRequired == true, you need to call finalize() to receive an authorization token. **Q**: Can I set the return URL in the application to ? **A**: Anything that triggers a return to the application to the same view works. Ideally, don’t trigger a navigation and let the SDK evaluate whether the authorization flow is complete. It’ll close any dialogs it was presenting and call either your authorized or error callbacks. **Q**: (iOS) I created a Payment View and added my event listener but nothing is happening when I call init(), etc. **A**: The Payment View contains a web view which actually shows Klarna as a payment option. On some versions of iOS, the web view needs to be added to the view hierarchy for it to function. Make sure you’ve also added the PaymentView to one of your app’s view’s before you call init(). ## General Mobile SDK Errors In the process of integrating the Mobile SDK, you may encounter various general errors, irrespective of the specific integration you are working on. To identify the error, you can refer to the **error.name** field. Below is a comprehensive list of general error names, which are predefined in the Mobile SDK's generic error class known as **KlarnaMobileSDKError**. Each error is accompanied by an explanation of its meaning and guidance on how to appropriately respond to it: - **KlarnaMobileSDKError.SDK_NOT_AVAILABLE:** This error indicates that, for various reasons such as the specific integration, device model, or OS version, the Mobile SDK is currently unavailable. Consider this error as critical, and refrain from proceeding with the use of Klarna Mobile SDK at this point. Instead, switch to an alternative solution. If you encounter this error unexpectedly, please reach out to us for further assistance. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/klarna-osm-app-for-shopify/frequently-asked-questions.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/wix/payments/frequently-asked-questions.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/klarna-osm-app-for-shopify/frequently-asked-questions.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/wix/payments/frequently-asked-questions.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/klarna-osm-app-for-shopify/frequently-asked-questions.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/wix/payments/frequently-asked-questions.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/klarna-osm-app-for-shopify/frequently-asked-questions.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/wix/payments/frequently-asked-questions.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/klarna-osm-app-for-shopify/frequently-asked-questions.md # Shopify FAQ ## Get answers to common questions about Klarna’s On-site Messaging App for Shopify, including integration, localization, and customization to match your store’s branding. ## Which placement should I pick? See our recommendations below! | **Placement** | **Best for** | **Use on** | **Additional Info** | |----|----|----|----| | `credit-promotion-badge` `credit-promotion-auto-size` | \| Showing customers the price breakdown and available Klarna Payment methods | Product page, cart page | Dynamically updates when the price changes For best results, put the placement close to the product price or cart total Will not work on homepage or collections pages | | `info-page` | \| Explaining how Klarna works to new customers | FAQ page, or use this placement on a page of its own | You cannot customize the images in this placement | | `top-strip-promotion-auto-size` `top-strip-promotion-standard` `top-strip-promotion-badge` | \| Announcing that Klarna is available on any page | Header section, but can be used on any page | To add this to your header while using app blocks, you must add a section in the header ​​​​​You can use this placement on product pages if the app has difficulty picking up the correct variant price | | `footer-promotion-auto-size` | \| Displaying Klarna with other available payment options | Footer section section, but can be used on any page | To add this to your footer while using app blocks, you must add a section in the footer | | `homepage-promotion-tall` ​`homepage-promotion-wide` ​`homepage-promotion-box` | \| Displaying Klarna during product/brand discovery | Collection pages, home pages | | | `sidebar-promotion-auto-size` | \| Displaying Klarna during product/brand discovery | Collection pages, home pages | | ## How does Klarna On-site Messaging show the correct language and currency to my customers? Klarna’s On-site Messaging app ensures the currency your customers see in the placement matches the currency displayed on your storefront. The app uses information from your Shopify store ([localization object](https://shopify.dev/docs/api/liquid/objects/localization) and [cart currency](https://shopify.dev/docs/api/liquid/objects/cart#cart-currency)) to show the correct language and currency. When customers are shopping your site in different countries, the language and currency of Klarna On-Site messaging will update automatically.  If it is not possible to change the currency/country of your store, Klarna On-site Messaging will use the default market from your Shopify settings. If your customer is browsing your site in a currency and country combination that does not match [Klarna’s strict locale mappings](https://docs.klarna.com/payments/web-payments/before-you-start/data-requirements/puchase-countries-currencies-locales.md), the Klarna placement will not show.   In addition, Klarna On-site messaging will only show in countries where you can offer Klarna, and will only display the Klarna payment options that are configured on your account. - Klarna Payments app: your store can only transact in the base currency of your store, and On-site Messaging placements will only show in the country/countries where that currency is used - Klarna for Shopify Payments: On-site messaging placements will show for the markets/currencies you have enabled. The placement will disappear if you select a country or currency where you do not offer Klarna. This ensures that you are displaying Klarna placements to customers who can use it for their purchase. In addition, different markets require different legal disclaimers. Klarna On-site messaging will automatically include the appropriate disclaimers, terms & conditions, and privacy policy for each market. ## How do I customize Klarna placements? You can customize the placements’ font, layout, and other display options to match your brand’s look and feel. You cannot customize the copy inside of the placements. The Klarna On-site Messaging app allows you to apply very basic changes including - Theme: Default, Dark, Custom - Padding - Message prefix: no prefix, “Or”, “or” Merchants using the Klarna Payments app can further customize the placement by following these instructions in the [Merchant Portal](https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/osm-customise-merchant-portal.md) or by using [CSS styling](https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/styling-on-site-messaging-with-css.md). Merchants using Klarna for Shopify Payments can only use CSS styling. Note that if you’re customizing placement in the Merchant Portal, you have to select the default theme in the Klarna On-site messaging (OSM) Shopify app. The placements in the dark theme aren't customizable. ## Does the Klarna placement update the price breakdowns automatically? Yes! However the only placements that update automatically are ***credit-promotion-auto-size*** and ***credit-promotion badge***. These display price-based information to the customers. The rest of the placements do not contain price breakdowns, and therefore do not update. **For product pages**: On-site messaging is updated when a different variant is selected. If that isn’t working on your storefront, see [the entry in our troubleshooting guide](https://docs.klarna.com/platform-solutions/shopify/klarna-osm-app-for-shopify/troubleshooting). On-site messaging is ***not*** updated when the product ***quantity*** is changed. **For the cart page:** On-site messaging is updated when product quantities are updated and the page is refreshed. The price breakdown is based on the total cart amount. If On-site messaging isn’t updated on cart quantity changes, you can update the to directly call the JavaScript function, and pass the value of the new purchase amount. ``` javascript window.KOSMApp.updatePurchaseAmount(updatedPurchaseAmount); ``` A sample JavaScript function to update On-site messaging with a new purchase amount. ## Where can I find the placement data on my storefront page? To see all instances of the `klarna-placement` HTML element, open your browser’s **Developer tools**\> **Elements** tab. You won’t see the `klarna-placement` element directly in the HTML source of the page as the placements get injected into the DOM by JavaScript when a page is loaded. ## Can I exclude certain products from On-site messaging? **App blocks placements (theme editor)**: you can assign a Klarna app block placement to individual product templates. This can be used to only display Klarna for certain products. **Vintage placements (Auto Picker,Drag and drop, and CSS)**: the Klarna placement will be displayed for all products. ## Why is the app rating low? We are continuously improving our products and services to make sure that merchants like you have a smooth experience adding Klarna to your stores. While the app rating isn’t as good as we’d like, we’ll continue working hard to earn your positive reviews. If you use the app, we would appreciate your [feedback in the Shopify App store](https://apps.shopify.com/klarna-on-site-messaging#reviews). For the best experience using the On-site Messaging app, we highly recommend using a theme supporting [Shopify's Online Store 2.0 architecture](https://www.shopify.com/partners/blog/shopify-online-store). You can find solutions to common OSM issues in our  [troubleshooting guide](https://docs.klarna.com/platform-solutions/shopify/klarna-osm-app-for-shopify/troubleshooting). If you still need help to resolve the problem in your store, your region’s Klarna merchant support team is [always here to support you](https://docs.klarna.com/platform-solutions/shopify/support). --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/payments/general-settings.md # Settings used by Klarna on Adobe Commerce ## Learn which settings available in Adobe Commerce settings are used by the Klarna extension. The [Adobe Commerce Admin](https://experienceleague.adobe.com/docs/commerce-admin/start/admin/admin.html) lets you configure and manage your store. Not all configuration options available in Admin impact Klarna. Klarna uses the following key settings: - Klarna payment method setup - Catalog and cart price rule - Currency - Delivery methods - Products - Shop URL - Taxes: rules, zones, rates, and calculation configurations ## Klarna payment method setup Once you’ve installed the extension from the Adobe Commerce marketplace, you need to set up some settings for Klarna in the Admin so that the payment method is usable. The most important settings are related to the Klarna API. Apart from that, there are other settings to configure so that Klarna will operate smoothly in your store. You can find Klarna's configuration in the Admin in **Stores**\> **Configuration**\> **Sales**\> **Payment Methods**\> **Klarna**: ![Group_41_(1).png](Group_41_(1).png) *Group_41_(1).png* ![Additional Klarna settings are available in the Payment Methods menu in the Admin.](Group_51.png) *Additional Klarna settings are available in the Payment Methods menu in the Admin.* ## Catalog and cart price rule With catalog and cart price rules you can allow your customers to buy products at reduced prices. You can find the price rules in **Marketing**\> **Promotions**. ![You can apply the catalog and cart price rules to make the products in your store available at reduced prices.](Group_52.png) *You can apply the catalog and cart price rules to make the products in your store available at reduced prices.* Since the rules have an impact on the price of a product and the shipping costs, it also affects creating orders with Klarna. Klarna takesthese rules into account and sends the adjusted prices through the API. ## Currency Using Klarna requires the correct currency setup. You can find the currency configuration options in **Stores**\> **Configuration**\> **General**\> **Currency Setup**. ![Group_41_(1).png](Group_41_(1).png) *Group_41_(1).png* ![Configure the currency that will be sent to Klarna.](Group_71_(1).png) *Configure the currency that will be sent to Klarna.* The selected **Currency value** will be sent through the Klarna API. If the currency configuration is incorrect, Klarna API requests may fail. For example, if a customer places an order with the billing address in Germany, but the currency is the US Dollar, the request will fail. In this case, a currency mismatch error between the address and the currency is returned and the desired Klarna product can’t be used. ## Delivery methods When a customer reaches the checkout, they can choose the desired delivery method for their order. You can configure this setting in **Stores**\> **Configuration**\> **Sales**\> **Delivery Methods**. ![Choose the delivery methods for Klarna orders placed in your Adobe Commerce store.|center](Group_72.png) *Choose the delivery methods for Klarna orders placed in your Adobe Commerce store.|center* The selected Delivery method can affect the total order value. Klarna takes this into account and this shipping cost information is sent to Klarna via the API integration. ## Products To sell something in an online shop, products have to be configured. You can set up products in **Catalog**\> **Products**. ![Add, remove, and edit products in the Catalog menu in the Admin.](Group_73.png) *Add, remove, and edit products in the Catalog menu in the Admin.* Having the correct product configuration is critical as some information, for example, price, tax, and customer name, is passed to Klarna via the API during the Klarna order creation process. The details are later visible in the [Klarna merchant portal](https://portal.klarna.com). ## Shop URL The shop’s URL must be correctly configured so that the correct URL is used on all store pages. Klarna uses the base URL setting to ensure our products work correctly. For example, Klarna needs a secure base URL for API callbacks and if the URL isn’t correct, Klarna won’t work correctly. You can set the base URL in **Stores**\> **Configuration**\> **Web**. ![The URL options of a store are available in the Configuration menu in the Adobe Commerce Admin.](Group_74.png) *The URL options of a store are available in theConfigurationmenu in the Adobe Commerce Admin.* ## Taxes Tax settings are important to make sure you're following the tax rules of your country. You need to set them up in 3 places: - To configure tax zones and tax rates, go to **Stores**\> **Tax Zones and Rates**. ![Group_80.png](Group_80.png) *Group_80.png* - To configure tax rules, go to **Stores**\> **Tax Rules**. ![Group_80_(1).png](Group_80_(1).png) *Group_80_(1).png* - To configure tax calculations, go to **Stores**\> **Configuration**\> **Sales**\> **Tax**. ![Group_41_(1).png](Group_41_(1).png) *Group_41_(1).png* ![You can change various tax settings of your products in the Admin.|center](Group_81.png) *You can change various tax settings of your products in the Admin.|center* Each of these settings plays a part when you're creating an order with Klarna. The tax calculation settings are especially important because they determine how taxes are applied and how prices for products and delivery are calculated. Klarna takes these settings into account and sends the prices through the API. --- # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/get-started.md # Source: https://docs.klarna.com/platform-solutions/acquiring-partners/stripe/get-started.md # Before you start with Stripe ## Add Klarna by adjusting the settings in the Stripe Dashboard. ## Overview Stripe is a cutting-edge online payment processing platform designed to power commerce for businesses of all sizes, from new startups to global enterprises. Renowned for its simplicity, security, and scalability, Stripe enables companies to accept payments, conduct financial transactions, and manage their revenue streams with unparalleled ease. Its robust suite of APIs allows for seamless integration into websites and mobile applications, offering a smooth and customizable checkout experience for customers. Beyond just processing payments, Stripe is a comprehensive ecosystem that supports a wide range of financial services, including billing, fraud prevention, and business management tools. By constantly innovating and expanding its capabilities, Stripe not only meets the current demands of digital commerce but also anticipates the future needs of the industry, making it an indispensable partner for businesses looking to thrive in the online economy. ### New to Stripe and Klarna? [Find out how](https://www.klarna.com/us/business/platforms-and-partners/stripe/) you can benefit from our partnership. Once you’re ready to get started, [open a Stripe account](https://dashboard.stripe.com/register) - **Klarna is automatically added as a payment method**. If you have any issues, or if you've previously disabled Klarna, check out our [Enable Klarna via Stripe Dashboard](https://docs.klarna.com/platform-solutions/acquiring-partners/stripe/get-started/#enable-klarna-with-stripe) guide. ### Already integrated with Stripe This document outlines different integration options and guides you through how to seamlessly add Klarna to your checkout once you have a Stripe account. Our best practices help you get the most out of your partnership with Klarna. If you're looking to open a Stripe account, refer to their [Start Now](https://stripe.com/lp/start-now) guide. ## Enable Klarna with Stripe ### Use connectors to integrate with Stripe You can activate Klarna via plugins or platform integrations. The integration journey will vary depending on the platform you’re on. For more information about different plugins and platforms, visit the [Stripe Connectors](https://stripe.com/docs/plugins) page. ### Enable Klarna via Stripe Dashboard To add Klarna to your Stripe integration, follow these steps: 1. Sign in to the [Stripe Dashboard](https://dashboard.stripe.com/). 2. Go to **Settings**\> **Payments**\> **Payment methods**. 3. Confirm your logo, brand info, and contact emails are up to date. These details are shared with Klarna when you enable us as a payment method. 4. (Optional) Toggle **Test mode** in your Stripe Dashboard to test the integration and customer flow without creating live transactions. 5. On the list of payment methods, find **Klarna** and click **Turn on**. 6. Review Stripe's [best practices](https://docs.stripe.com/payments/klarna/best-practices) to optimize conversion and get the most out of Klarna. All the heavy lifting is done with the data you’ve already entered into your Stripe account. Klarna will be active within minutes. To learn more about adding Klarna to your Stripe account, head over to [Stripe documentation](https://stripe.com/docs/payments/klarna). --- # Source: https://docs.klarna.com/resources/business-tools/glossary.md # Klarna Docs Glossary ## Understand the key terms used in our documentation. ## A - G ### Acquiring Partner Licensed and regulated company that processes payments by Customers to Partners via the Klarna Payment Services. As detailed in the corresponding Klarna Network Distribution Agreement, the Acquiring Partner is responsible for conducting the necessary and applicable Know-Your-Customer (“KYC”) and Anti-Money Laundering (“AML”) checks required to onboard Partners. They facilitate the authorization, settlement, and management of Klarna transactions, and continuously monitor Partners. Any term defined in the respective Klarna Network Distribution Agreement shall retain its meaning throughout the Klarna Network Rules unless explicitly stated otherwise ### Action An action when referring to the tasks you can perform with our APIs. *Example: Some of the actions you can perform with the Order Management API are canceling and refunding an order.* ### Allowlist Sometimes called a "whitelist". A list of files, programs, and/or systems that are permitted to run or have access to a database. Some e-commerce platforms may require that Klarna APIs or IP addresses be explicitly allowlisted by the user. ### Authorization token Identifier of a purchase authorization received as response of an **[Authorize() call](https://docs.klarna.com/klarna-payments/integrate-with-klarna-payments/step-2-checkout.md)**. Allows to continue the creation of the order and finalise the purchase flow. ### API An Application Program Interfaces (API) is a software intermediary that makes it possible for application programs to interact with each other and share data. ### Chargeback A customer's request to return funds paid to a merchant. Typically, chargebacks occur after the merchant has refused a refund. After a chargeback is initiated, the merchant can dispute it in some cases. If a dispute is allowed, the merchant should provide all necessary documents to Klarna or to the payment processor in case of enable Klarna via a Distribution Partner. ### Claim Refers to the right to collect payment from the respective Customer.  ### Customer Also referred to as a "consumer" or "shopper". Public who are making purchases online or in-store using the Klarna Payment Services to pay for their purchases. ### Dispute A Klarna dispute arises when a Customer contests their obligation to settle payment(s) for purchases made from a Partner. These cases are categorized into different dispute reasons. ### Distribution Partner An entity that has been authorized by Klarna to market, distribute, resell, or undertake necessary actions to extend the availability of Klarna's products and services within broader or more specific markets. ### Fraud assessment Klarna's review process to make sure an order is placed by a real person and is safe to fulfill. It involves confirming the order details, and verifying the customer's identity. ## H - N ### Hosted payment page (HPP) A webpage, popup, or embedded section of a checkout that a customer is redirected to in order to pay and complete their purchase. This page is "hosted" - meaning it belongs to and is maintained by - a third-party. When customers select Klarna as their payment option in a partner's checkout, they will be redirected to a new page (or be shown a popup window) where they can complete their purchase with Klarna. After the purchase is completed, the customer is redirected back to the partner's "Order Complete" page. ### Identifiers Only identifiers generated by Klarna will be exposed through properties suffixed with `_id`. Identifiers generated by partners will be accepted through properties suffixed with`_reference`. ### In-app Electronic payments made by customers via mobile apps. These payments may utilise either native mobile APIs or web pages optimised for mobile (also called as *mobile web*). ### In-store Used to refer to transactions that occurs in a traditional physical store. Brick-and-mortar ### Klarna payments Klarna product that enables to offering of Klarna payment methods as part of an e-commerce website and create orders. ### Merchant Merchants are businesses or business owners who are selling goods or services. ### Merchant Category Code The **Merchant Category Code (MCC) is a** four-digit number that is used to classify the type of goods or services offered by a business. ### Merchant ID Once a merchant creates an account with Klarna, they are assigned a Merchant ID and is a several-digit code unique to that business, which allows partners to be easily identified in our system. The Merchant ID is unique per environment, therefore a merchant may have multiple merchant ids to cover for playground and productions as well as may have multiples merchant ids to differentiate different websites or regions. ### Merchant portal The Klarna Merchant Portal is the Klarna back office portal for our partners. Partners are able to view and manage orders, access settlement information, update payment information, and more while signed into the Klarna Merchant Portal. ## O - T ### On-site messaging Klarna solution that enables merchants to implement dynamic messages in their e-commerce websites. ### One-time payments Payments that only happen once, and are not charged again. Most purchases are one-time payments. ### Order management Klarna product that enables to handle orders previously created and take actions on it such as captures, cancelations and refunds. ### Partner A business entity that uses Klarna's Product Suite (e.g. payments, placements, identity, express checkout or advertising services) through an active Klarna business account independently of the type of the integration being used.  Partners are usually businesses or business owners who are selling goods or services (i.e. merchants). ### Partner Portal Klarna’s online platform for all Partners. It provides resources, documentation, and support for integrating services from Klarna’s Product Suite. Partners can access technical guides, API documentation, integration tools, receive updates on new features, and opt into specific payment programs. ### Payload In computing and telecommunications, the payload is the part of transmitted data that is the actual intended message. The payload excludes any headers or metadata sent solely to facilitate payload delivery. ### Payment Provisioning involves the transfer of money from one account to another. ### Playground environment Traditionally called "sandbox". Playground environment is "test" version of a website or system, where users are able to use the features without repercussion. Klarna offers a free playground environment of our system, which includes access to "test" versions of our integration and Merchant Portal. This allows merchants to walk through the integration process, make test orders, and view Klarna on their sites - without needing a live Klarna account! For more information about playground environments, [click here](https://docs.klarna.com/resources/test-environment.md). ### Production environment The "live" version of a website or system. For a merchant selling online, this refers to the public website, where customer go to make real purchases. Merchants partnered with Klarna gain access to the Klarna production environment after signing up. This includes access to the live integrations, so that customers can make orders on your site using Klarna as the payment method; and access to the live Merchant Portal, where you can manage both your orders and your account. ### PSP PSP stands for Payment Service Provider. Payment Service Providers are companies that enable partners to access a wide variety of payment options for their customers, while managing their orders and payments efficiently. ### Recurring payments Payments that are charged multiple times, at regular intervals. Subscriptions are an example of a recurring payment. ### Settlement "Settlement" in the context of Klarna refers to the process of transferring funds from Klarna to a partner or merchant. ## U - Z ### Webhook Automated notifications sent from one aplplication to another when something happens. A webhook is an HTTP-based callback function that allows lightweight, event-driven communication between systems. --- # Source: https://docs.klarna.com/resources/developer-tools/testing-payments/go-live-checklist.md # Go-live checklist ## Before you go live, follow this checklist to make sure you're ready to start accepting Klarna payments. Before letting your customers pay with Klarna in your online store, it's important you ensure your integration meets our standards and complies with local regulations. Make sure to follow our \[ Klarna payments\] integration best practices to get the most out of your partnership with Klarna. ## Let customers know Klarna is available on your website To maximize your business impact with our partnership, include the following Klarna assets on your website. ### Klarna logos and banners ✓ Integrate the Klarna logo or banner in the header or footer. Make sure it's always up to date using the top-strip or footer from [On-site messaging](https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/placements/#faq-placement) platform available via the Merchant portal. ✓ Alternatively, you can download static marketing assets for the specific market from Marketing Tools section. ### Messaging on the product page ✓ Use Klarna's [On-site messaging](https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/placements/#faq-placement) to raise awareness of flexible payment options with Klarna early in the consumer journey. Add the credit promotion placement close to the product price, following the [On-site messaging](https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/placements/#faq-placement) best practices. You can customize the layout of the placement in the Merchant portal to better fit your product page's overall design. ### Messaging on the cart page ✓ Use Klarna's [On-site messaging](https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/placements/#faq-placement) to inform your customers of the available payment options on the cart page. Add the credit promotion placement close to the product price, following the On-site messaging best practices. You can customize the layout of the placement in the Merchant portal to better fit your product page's overall design. ## Reflect your partnership with Klarna in legal texts To stay compliant with Klarna's legal requirements, make sure that your website contains information about our partnership. ### Terms and conditions ✓ Reflect your partnership with Klarna on your Terms and conditions page. Please also link to Klarna's shopping terms and data privacy notice for the relevant market and product. - Consider [Legal and data protection requirements for Europe](https://docs.klarna.com/resources/legal-and-compliance/payment-solutions-guidelines/eu/) - Consider [Legal and data protection requirements for North America](https://docs.klarna.com/resources/legal-and-compliance/payment-solutions-guidelines/us/) - Consider [Legal and data protection requirements for Asia](https://docs.klarna.com/resources/legal-and-compliance/payment-solutions-guidelines/au/) ### Privacy policy ✓ Reflect your partnership with Klarna in your data privacy statement. Please also link to Klarna's data privacy notice for the relevant market. ## Help the customers understand your partnership with Klarna To help your customers understand payments with Klarna, make sure to provide clear information about Klarna on your website and in post-purchase communications. ### Klarna frequently asked questions ✓ In your customer-facing Frequently asked questions (FAQs), include clear information about Klarna and the available payment methods. Use the FAQ placement from our [On-site messaging](https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/placements/#faq-placement) platform available via the Merchant portal to tell your customers everything they want to know about buying with Klarna. ✓ Alternatively, include Klarna in your FAQs and link to [Klarna's customer support](https://www.klarna.com/customer-service/) for the relevant market. ✓ Alternatively, create your own Klarna FAQs page. `   - Add the information about Klarna payment methods and a link to `[`Klarna's customer support`](https://www.klarna.com/customer-service/)` to make it as smooth as possible for the customers to get in touch with Klarna.` `   - Use marketing assets to keep your FAQ compliant with our marketing guidelines.` ### Post-purchase communications ✓ Include Klarna payment information, for example, the Klarna order ID (`order_id`), and the Klarna logotype, along with a link to [Klarna's customer support](https://www.klarna.com/customer-service/) and a link to the [Klarna app](https://www.klarna.com/us/klarna-app/), in your order confirmation and shipping confirmation emails. ✓ If you send out a separate invoice, remove any bank details not to confuse your customers as the payment is handled by Klarna. ## Set up your production account and prepare for the go-live After you've completed and [tested the integration](https://docs.klarna.com/resources/developer-tools/testing-payments/test-cases/) in playground, perform the following actions before the go-live. ### Activate your production account ✓ Once the contract is signed and the production merchant IDs (MIDs) are created, you'll receive an activation email for your production Merchant portal access. Activate your user account. ### Update your branding information in the Merchant portal Have customers see you in the best light across Klarna's ecosystem, including our smoooth app. ✓ Add your logo, background image, feature image, and the links to your social channels in **Branding** in the Merchant portal. To learn more, go to [brand configuration guidelines](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/brand-guidelines/) ### Get your production API credentials ✓ Repeat the steps to [generate the API credentials](https://docs.klarna.com/resources/developer-tools/testing-payments/before-you-test/#getting-test-credentials-for-apis), this time in the production Merchant portal. ✓ Save the generated username and password and forward it to your development team. --- # Source: https://docs.klarna.com/payments/mobile-payments/integrate-without-mobile-sdk/ios/hosted-payment-page.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-without-mobile-sdk/android/hosted-payment-page.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-without-mobile-sdk/ios/hosted-payment-page.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-without-mobile-sdk/android/hosted-payment-page.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-without-mobile-sdk/ios/hosted-payment-page.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-without-mobile-sdk/android/hosted-payment-page.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-without-mobile-sdk/ios/hosted-payment-page.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-without-mobile-sdk/android/hosted-payment-page.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-without-mobile-sdk/ios/hosted-payment-page.md # Hosted Payment Page - iOS ## If the recommended integration approach of Klarna Mobile SDK is not possible, the guide below will guide you through how to integrate the Hosted Payment Page in your mobile app without the Mobile SDK.
![ios-native-checkout-postselection-nowidget.png](ios-native-checkout-postselection-nowidget.png) *ios-native-checkout-postselection-nowidget.png* ![ios-system-webview-opf-shield.png](ios-system-webview-opf-shield.png) *ios-system-webview-opf-shield.png* ![4_overview.png](4_overview.png) *4_overview.png*

Your native checkout screen when Klarna is selected as payment method.

Hosted Payment Page flow starts when customer confirms to Continue with Klarna.

Your native order confirmation screen after a successful payment.

#### Integration Steps - **Prepare:** Make sure you have the credentials for Klarna Payments and get to know how the flow works - **Create session** (Server-side): Create Payments and Hosted Payment Page session from your backend and pass `redirect_url` to your app. - **Set up your app:** (Mobile App): Set up return URL to your application. - **Present Hosted Payment Page** (Mobile App): Present Klarna Hosted Payment Page using System WebView. - **Retrieve session result** (Server-side or Redirect): Receive session result by reading session status from API or redirection to your URLs. - **Create an order** (Server-side): Create an order with Klarna Payments API ## Prepare This guide will lead you through all the steps required to accept payments with **Klarna Payments**using the **Hosted Payment Page**. At the end, you will be able to accept payments with Klarna without hosting any web component in your app. Klarna still recommends Klarna Mobile SDK as first choice for Hosted Payment Page integrations, [WebView integrations](https://docs.klarna.com#webview-integrations) can be utilized instead of System WebViews in such cases. ### Prerequisites Before you start integrating Klarna payments, there are a few things you need to prepare in advance: - Access to the Merchant portal - To access the test Merchant portal, you can [sign up to create a new test account](https://docs.klarna.com/resources/developer-tools/testing-payments/before-you-test/#accessing-the-test-merchant-portal-creating-a-new-test-account) or log in with a test existing account. - API keys for the Klarna Payments API - To test your Klarna API integration, you need a set of [test credentials](https://docs.klarna.com/resources/developer-tools/testing-payments/before-you-test/#getting-test-credentials-for-apis). - [The API reference](https://docs.klarna.com/api/payments/). You can download the Open API specification for the Klarna payments API and use the specification to [generate](https://openapi-generator.tech/) an API SDK for your programming language. - [Sample customer data](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/) and [sample payment data](https://docs.klarna.com/resources/developer-tools/sample-data/sample-payment-data/) ### How it works You will find here the usual integration flow of the Hosted Payment Page using a Klarna Payments session. In this flow, actors are defined as follow: - **Consumer**: a physical person that wants to buy something. - **Browser**: the browser that the **Consumer** is able to control, for example on a desktop or a mobile. - **Merchant Backend**: your backend that will do the API calls to HPP, KP and Order Management. - **HPP**: the Hosted Payment Page API - **Klarna Payments**: the Klarna Payments API ### Sequence where you host a part of the Consumer flow {{#mermaid: sequenceDiagram autonumber participant A as Consumer participant B as Browser participant C as Merchant Backend participant D as HPP participant E as Klarna Payments A -->> C: Intent of buying. May be given on website, by phone call, etc C ->> E: Create session E -->>C: session C ->>D: Create session D ->>C: URL to redirect to alt Synchronous flow C -->>B: Redirection to redirect_url else Asynchronous flow C -> D: Distribute session, method D -->>A: SMS or e-mail containing an url A ->>B: Reads and click end B ->>D: Request url D -->>B: HPP with Merchant's customization note over A,E: Consumer will be able to see basic order details, choose payment methos if none is enforced. If he is a Klarna user,
he will be able to pay in a few click and benefit from our Smoooth experience. B ->>D: Presses pay button D -->>B: Redirection to merchant_urls.success with authorization_token or order_id B ->>C: Requires success alt Custom place order note over A,E: When place_order_mode is not defined, you get an authorization_token and need to place the order. The token has a limited lifespan (usually 1 hour) C ->>E: Place order with authorization_token end C -->>B: Order confirmation }} 1. **Your consumer wants to proceed to a payment** using one of Klarna’s payment methods: depending on the integration, this interaction can be on a website when the Consumer choose to pay with Klarna, with a telesales by phone… 2. **Create sessions on Klarna Payments and Hosted Payment Page** a\. **Create a Payment session on Klarna Payments**: After receiving this consumer intent, create a Payment session with Klarna Payments API. b. **Associate the Payment session to an Hosted Page session**: Using the session identifier provided by Klarna Payments API, create the corresponding HPP session. 1. **Distribution of the Payment session to your consumer** - a\. **Distribution can be done by yourself**, using a redirection URL given by HPP. - b\. **Request that HPP distribute** the Payment session directly to your Consumer. 2. *\[Invisible step for you\]* **Consumer gets to Hosted Payment Page**: Consumer goes to the Payment page using the received link, either by you or by SMS/Email received from Klarna. 3. *\[Invisible step for you\]* **Authorization of payment**: When the Consumer presses the buy button on the Payment page, payment authorization will be given to the Consumer. HPP will proceed to the redirection of the Consumer to your Backend using the URL given in the session creation. 4. **Confirmation and Authorization Token** - a\. **Redirection of the Consumer after a successful authorization**: The Consumer’s browser is redirected to the success URL you defined. - b\. **Validation of the HPP Session outcome**: Depending on your HPP Session, you will be able to retrieve an authorization_token or an order_id from the URL parameters, but you can also checks the HPP Session status using our endpoint. The authorization_token will let you place the order manually, whereas the order_id will let you do the post-purchase experience. 5. **Place the order**: By not defining any place_order_mode when creating the HPP Session, you will need to place an order using the Authorization Token you just got. This will let you check that everything is still correct before validating the payment. This returns you an order_id that will let you do the post-purchase experience. 6. **Confirmation of the order**: You should show the customer that the payment authorization is successful and that the order has been validated. 7. *\[This step can be asynchronous\]* **Capture payment**: When you want the payment to actually happen, usually when goods are shipped, use the Order Management API to capture the amount on the order. When creating the KP Session, you can also ask the capture to be automatic. ### Success flow After a successful authorization, the Consumer’s browser will be redirected to your success URL defined when you created the HPP session (see Step 3). HPP will use merchant_urls.success to generate the URL, it should contain the authorization_token or order_id depending on your place_order_mode, but can also use some additional parameters. Please see HPP Create Session Parameters and Options for dynamic parameters. ### Rejection and cancellation flows When the Consumer decides to abort the process or gets rejected by Klarna for payment authorization, the Consumer’s browser is redirected to one of the URLs defined when you created the HPP session (see Step 3). - merchant_urls.failure: Consumer is redirected there after being refused by Klarna. - merchant_urls.cancel: Consumer is redirected there after clicking on the Cancel button. Please see [HPP Create Session Parameters and Options](https://docs.klarna.com/payments/other-products/hosted-payment-page/api-documentation/create-session/) for dynamic parameters. ### Alternative Sequence: no hosting of the Consumer flow This alternative sequence is almost the same except that you don’t need to host any page that should be shown to the Consumer. As you can’t rely on any redirection to get the status of the session, your backend needs to poll the HPP API to get it. You can decide whether you want to host these pages by yourself or rely on HPP ones by defining the merchant_urls. You can give HPP a success url but not a cancellation one. {{#mermaid: sequenceDiagram autonumber participant A as Consumer participant B as Browser participant C as Merchant Backend participant D as Klarna Payments participant E as HPP A -->> C: Intent of buying. May be given on website, by phone call, in-store etc C ->> D: Create session D -->>C: session C ->>E: Create session E ->>C: URL to redirect to C ->>E: Distribute session, method E -->>A: SMS or e-mail containing an url A ->>B: Reads and click B ->>E: Request url E -->>B: HPP with Merchant's customization note over A,E: Consumer will be able to see basic order details, choose payment methos if none is enforced. If he is a Klarna user,
he will be able to pay in a few click and benefit from our Smoooth experience. B ->>E: Presses pay button note over A,E: When initiated without a value for merchant_urls.success, HPP will render a basic payment confirmation page to the consumer. E -->>B: Display of payment confirmation page note over A,E: Your backend should poll the session status until the status is COMPLETE C ->>E: Get session status E -->>C: status = COMPLETE with authorization_token or order_id alt Custom place order note over A,E: When place_order_mode is not defined, you get an authorization_token and need to place the order. The token has a limited lifespan (usually 1 hour) C ->>D: Place order with authorization_token end }} **6. b. Confirmation and Authorization Token** **Polling to get the successful outcome**: The Consumer’s browser is shown a simple payment confirmation page, your Backend will need to get the Authorization Token using HPP API. that you will need to use to place the order if the order is still valid. ### Success flow After a successful authorization, the read session endpoint will give you the status of the Session and the Authorization Token to place the order with. ### Rejection and cancellation flows When the Consumer decides to abort the process or gets rejected by Klarna for payment authorization, the status of the session will also be updated. The Consumer will see a simple cancel or rejection page. ## Create Session ### Klarna Payments Session The first step is to create a **KP Session** with the **Klarna Payment API** in order to be able to host it using the **Hosted Payment Page API**. This is where you are going to define all you know already about your Consumer, what is the content of the order and the metadata associated to the purchase. This call corresponds to **Step 2a**in the sequence diagram. | **Description** | **Creates a session with KP-API** | |----|----| | Reference | For a full list of accepted (optional) parameters, possible returns and error codes you can reference the KP-API documentation | | Url structure | | | Example | curl -X POST /payments/v1/sessions --header "Authorization: Basic " --header "Content-Type: application/json" --header “Cache-Control: no-cache” --data “” | ### Create a session KP: Request ``` json { "purchase_country": "us", "purchase_currency": "usd", "locale": "en-US", "order_amount": 20000, "order_tax_amount": 0, "order_lines": [ { "image_url": "https://www.exampleobjects.com/logo.png", "type": "physical", "reference": "Could be a Product Id or SKU #", "name": "Cool Bike", "quantity": 1, "unit_price": 20000, "tax_rate": 0, "total_amount": 20000, "total_discount_amount": 0, "total_tax_amount": 0 } ], "billing_address": { "given_name": "John", "family_name": "Doe", "email": "email+require_signup@example.com", "title": "Mr", "street_address": "2425 Example Rd", "street_address2": "", "postal_code": "43221", "city": "Columbus", "region": "OH", "phone": "6145675309", "country": "US" } } ``` ### Create a session KP: Response ``` json { "session_id" : "", "client_token" : "", // Ignore this field when using KP with HPP "payment_method_categories": [ { "identifier": "pay_later", "name": "Pay later.", "asset_urls": { "descriptive": "https://x.klarnacdn.net/payment-method/assets/badges/generic/klarna.svg", "standard": "https://x.klarnacdn.net/payment-method/assets/badges/generic/klarna.svg" } } ] } ``` ### How to create the Request Please read the session creation guide of **Klarna Payments API** to get all details on fields and how you can use them. As you will use the Hosted Payment Page API to host your KP Session, you don’t need to read the step after. As you won’t own and host the page that displays Klarna Payments’ Client, you have to respect additional guidelines that will depend on the use case of your integration see see special rules . Depending on your integration use case (ie *eCommerce*, *In Store*or*Telesales*), you may have to respect some guidelines when creating the KP Session, see \[ special rules\]. #### How to interpret the Response The KP Session is created on a successful response. On the fields present in it, only the session_id is useful when KP is used with Hosted Payment Page API. You will have to use it to build HPP’s `payment_session_url`. [`https://api.klarna.com/payments/v1/sessions/`](https://api.klarna.com/payments/v1/sessions/) ### Hosted Payment Page Session The second step is to create the **HPP Session** using the **KP Session** you have just created. Sessions will have a tied lifecycle meaning that the HPP Session will expire 1 hour before the KP Session, see session lifetimes. Multiple HPP Sessions can be linked to the same KP Session if you need to have multiple customization at the same time, although it is considered as a bad practice. This call corresponds to **Step 2b**in the sequence diagram. ### How to create the Request Please read the [session creation call reference of HPP](https://docs.klarna.com/payments/other-products/hosted-payment-page/api-documentation/create-session/)**session creation call reference of HPP** to get all details on fields and how you can use them. As you will use the Hosted Payment Page API to host a KP Session, you have additional options that you can use. #### Specific Klarna Payments parameters when creating an HPP Session A successful HPP Session can lead to three different outcomes for the KP Session, depending on your use-case and the flexibility needed by your integration upon Customer’s authorization. Use this to speed up your integration and let HPP do the work for you: - **Authorized Payment** (default): the Consumer selected a payment method and was authorized by Klarna for the order amount of the KP Session. Your service will get an authorization_token back and will need to use it to *Place an Order* with KP API. One of the reason for you to choose this mode is if you want to make additional validation after the consumer was authorized and before actually placing the order (for example, stock management). In some cases, you may use the token to place an order on a lower amount. This could also let you create customer token for recurring payments. - **Placed Order**: the Consumer selected a payment method, was authorized by Klarna and HPP automatically placed the corresponding order. Your service will get an order_id back, you will then need to *Capture Order* with the Order Management API. Capturing order should happen when goods are sent to the customer. Klarna creates the order even in case of failed redirection to merchant_urls.success. Keep track of the HPP session status using by [polling HPP's read endpoint or via callback mechanism.](https://docs.klarna.com/hosted-payment-page/get-started/tracking-session-status/) - **Captured Order**: the Consumer selected a payment method, was authorized by Klarna and HPP automatically placed the corresponding order and captured it. Your service will get an order_id back, you won’t need any additional call. This option should be used when goods are directly given to the Consumer (Digital goods, In-store…). Klarna creates the order even in case of failed redirection to merchant_urls.success. Keep track of the HPP session status using by [polling HPP's read endpoint or via callback mechanism.](https://docs.klarna.com/hosted-payment-page/get-started/tracking-session-status/) The call corresponding to **Step 7**in the sequence diagram becomes obsolete when using PLACE_ORDER or CAPTURE_ORDER as a values for place_order_mode. | Key | **place_order_mode** | |----|----| | Description | Defines the outcome of the KP Session when the HPP Session is successful. | | Type | List values from an Enum | | Default Value | NONE | | Accepted Values | NONE, PLACE_ORDER, CAPTURE_ORDER | ``` json { "options": { "place_order_mode": "CAPTURE_ORDER" } } ``` **Payment Methods and Categories** **NOTE: We're introducing a new customer purchase flow where we handle everything related to the payment widget, so you don't have to worry about it. If you're using the new purchase flow, skip this section. Otherwise, if you still handle the widget, read more about it in this section.** HPP lets you define what *Payment Method Categories* should be made available to the Consumer when seeing the Klarna Payment Widget on HPP. Payment Categories are *Pay Now*, *Pay Later* or *Slice It (Pay over time)*, and will differ depending on what Products are available for you at Klarna. When you create a *KP Session* in **Step 2a**, *Klarna Payments API* sends you back as a result all available payment categories for the *KP Session*. You have to use this values to configure the *HPP Session*. This parameter will define what the Consumer will when first loading the Payment Page. 1. Display only one Payment Method Category using the field payment_method_category 2. Display a defined list of Payment Method Categories using the field payment_method_categories 3. Display all available Payment Method Categories by omitting both parameters Defining both fields payment_method_category and payment_method_categories at the same time will end up in a refused request. #### 1. Display only one Payment Method Category | Key | payment_method_category | |----|----| | Description | Consumer will be able to select a Payment Method from a single Category. The value has to be one of the payment categories sent back by KP API when creating the*KP Session*. | | Type | Enum | | Accepted Values | PAY_NOW, PAY_LATER, PAY_OVER_TIME, DIRECT_DEBIT, DIRECT_BANK_TRANSFER | ``` json { "options": { "payment_method_category": "pay_later" } } ``` #### 2. Display a list of Payment Method Categories | Key | payment_method_categories | |----|----| | Description | Consumer will be able to select a Payment Method from a list of Categories. Values have to be one of the payment categories sent back by KP API when creating the*KP Session*. | | Type | List values from an Enum | | Accepted Values | PAY_NOW, PAY_LATER, PAY_OVER_TIME, DIRECT_DEBIT, DIRECT_BANK_TRANSFER | ``` json { "options": { "payment_method_categories": [ "pay_later", "pay_now" ] } } ``` #### 3. Display all available Payment Method Categories When none of the above parameters are given on the create call, all the available payment categories will be made available to the consumer. When activated, the *Fallback flow* will make sure that the Consumer is declined for all payment categories of the *KP Session* before going through the *Rejection flow*. In combination with the two first initial display options, it is possible to activate a **fallback flow** that will happen only when the Consumer is declined for the payment categories that were defined. This *fallback* works as follow: 1. The KP Session is created and *Pay Now*, *Pay Later* and *Slice It* are all available 2. The HPP Session is created with the *Slice It* category because the Consumer’s choice has been made before going to HPP 3. The Consumer arrives on the Payment Page and sees only *Slice It* options. The Consumer applies for one of the *Slice It* options and for some reason gets declined 4. The *fallback flow* isn’t activated (default behavior) or has already happened, the Consumer will go through the *Rejection flow*. The *fallback flow*may be transparent for the Consumer and is not a guarantee of authorization. The Consumer may be declined for additional payment method categories while applying for one. | Key | payment_fallback | |----|----| | Description | When true, the *Fallback flow*will make sure that the Consumer is declined for all payment categories of the *KP Session*before going through the*Rejection flow*. | | Type | Boolean | | Accepted Values | true, false | ``` json { "options": { "payment_method_categories": [ "pay_later", "pay_now" ] } } ``` ## Set up your app ### Return URL Klarna purchase flows might require authorizations in other applications (e.g. bank apps) or do a handover to the Klarna app. In such cases, a return URL to your application ensures seamless return to the flow in your app, hence setting up a return URL is required. It is expected that redirects to this URL should only open your application without any changes in the UI state, ensuring the customer can continue the flow prior to external navigation. You can set up a Return URL app scheme to your application by [configuring a custom URL scheme](https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app).**Important:** The return URL string passed to Klarna must include `://` after the scheme name. For example, if you defined `myApp` as the scheme, you must use `"myApp://"` as the return URL argument to Klarna.To avoid a Klarna specific app scheme, you can use a host in a common scheme for Klarna redirects, e.g. `myApp://klarna-redirect` , this can allow you to differentiate and handle these redirect in your handler. Considering the return URL is a constant value in `Constants.klarnaReturnUrl`, you can handle redirects to your return URL as such: ### SceneDelegate ``` swift func scene(_ scene: UIScene, openURLContexts URLContexts: Set) { guard let url = URLContexts.first?.url else { return } if (url.absoluteString.starts(with: Constants.klarnaReturnUrl.absoluteString)) { // This is a return URL for Klarna – skip deep linking return } // This was not a return URL for Klarna } ``` ### AppDelegate ``` swift func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool { if (url.absoluteString.starts(with: Constants.klarnaReturnUrl.absoluteString)) { // This is a return URL for Klarna – skip deep linking return true } // This was not a return URL for Klarna return false } ``` ### SwiftUI ``` swift @main struct MyApp: App { var body: some Scene { WindowGroup { // This is the root content view of your application AppContentView() .onOpenURL { incomingURL in if (url.absoluteString.starts(with: Constants.klarnaReturnUrl.absoluteString)) { // This is a return URL for Klarna – skip deep linking return } // This was not a return URL for Klarna } } } } ``` When creating a payment session, make sure you backend sets [`merchant_urls.``app_return_url`](https://docs.klarna.com/api/payments/#operation/createCreditSession!path=merchant_urls/app_return_url&t=request) to return URL set up for the app. ## Present Hosted Payment Page After you create the sessions and set up your application, you can now present Hosted Payment Page in your application using the [`redirect_url`](https://docs.klarna.com/api/hpp-merchant/#operation/createHppSession!c=201&path=redirect_url&t=response) from API response and System WebViews.
![ios-native-checkout-postselection-nowidget.png](ios-native-checkout-postselection-nowidget.png) *ios-native-checkout-postselection-nowidget.png* ![ios-system-webview-opf-shield.png](ios-system-webview-opf-shield.png) *ios-system-webview-opf-shield.png*

Your native checkout page before Hosted Payment Page.

Hosted Payment Page in System WebView.

### Present System WebViews On iOS, system WebViews are typically implemented using [`ASWebAuthenticationSession`](https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession) or [`SFSafariViewController`](https://developer.apple.com/documentation/safariservices/sfsafariviewcontroller). While they appear similar from the customer's perspective, they differ significantly in how they handle session and cookie management. **`ASWebAuthenticationSession`** supports cookie and session sharing with the Safari browser by default. This capability is crucial for Klarna, as it allows us to recognize returning customers across the device and deliver a smoother checkout experience.In contrast, **`SFSafariViewController`** does **not** support session persistence or cookie sharing. Therefore, we require the use of **`ASWebAuthenticationSession`** with [prefersEphemeralWebBrowserSession](https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession/prefersephemeralwebbrowsersession) set to **false**, ensuring sessions are persistent and shared with Safari. Start `ASWebAuthenticationSession` with `redirect_url` from Hosted Payment Page session response: ### iOS 12+ ``` swift let session: ASWebAuthenticationSession = ASWebAuthenticationSession( url: sessionUrl, // redirect_url of the Hosted Payment Page session callbackURLScheme: callbackUrl // your completion URL from merchant_urls set for Hosted Payment Page session ) { url, error in guard error == nil else { // Handle error return } guard let url = url else { // Handle invalid closures return } // Handle redirect to callback URL } session.presentationContextProvider = self session.prefersEphemeralWebBrowserSession = false session.start() ``` ### iOS 17.4+ - Custom Scheme Callback ``` swift let session: ASWebAuthenticationSession = ASWebAuthenticationSession( url: sessionUrl, // redirect_url of the Hosted Payment Page session callback: .customScheme(callbackUrl) // your completion URL from merchant_urls set for Hosted Payment Page session ) { url, error in guard error == nil else { // Handle error return } guard let url = url else { // Handle invalid closures return } // Handle redirect to callback URL } session.presentationContextProvider = self session.prefersEphemeralWebBrowserSession = false session.start() ``` ### iOS 17.4+ - HTTPS Callback ``` swift let session: ASWebAuthenticationSession = ASWebAuthenticationSession( url: sessionUrl, // redirect_url of the Hosted Payment Page session callback: .https(host: "merchant.com", path: "/callback") // your completion URL from merchant_urls set for Hosted Payment Page session ) { url, error in guard error == nil else { // Handle error return } guard let url = url else { // Handle invalid closures return } // Handle redirect to callback URL } session.presentationContextProvider = self session.prefersEphemeralWebBrowserSession = false session.start() ``` Implement `ASWebAuthenticationPresentationContextProviding` to provide a `ASPresentationAnchor` to the session: ``` swift extension YourViewController: ASWebAuthenticationPresentationContextProviding { func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor { return self.view.window ?? ASPresentationAnchor() } } ``` ![ios_hpp_sign_in.png](ios_hpp_sign_in.png) *ios_hpp_sign_in.png* Enabling shared cookies and device wide single login experience for Klarna will result in user accepting to allow login via "klarna.com" on iOS. This is a common practice, and we expect almost all iOS users to be familiar with it and accept accordingly. #### Redirect back to your app ##### Redirect from your Merchant URLs To get the user back to your application from System WebViews, you can redirect to `callbackURLScheme` /`callback` set for `ASWebAuthenticationSession` from the pages you set up as [`merchant_urls`](https://docs.klarna.com/api/hpp-merchant/#operation/createHppSession!path=merchant_urls&t=request), as those will be loaded in the System WebView.
![ios-system-webview-opf-shield.png](ios-system-webview-opf-shield.png) *ios-system-webview-opf-shield.png* ![ios-system-webview-confirmation.png](ios-system-webview-confirmation.png) *ios-system-webview-confirmation.png*

Hosted Payment Page in System WebView.

Your confirmation page in System WebView.

##### Redirect directly from Hosted Payment Page You can also set `ASWebAuthenticationSession.Callback` by using `[`[`https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession/callback/https(host:path`](https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession/callback/https(host:path)`:) .``https(host:path:)``]` to your `merchant_urls` set to the Hosted Payment Page session and listen to redirects directly from your native application - preventing those from loading in the System WebView and handling session result natively. HTTPS callback URLs for ASWebAuthenticationSession are only supported on iOS 17.4 and above.
![ios-system-webview-opf-shield.png](ios-system-webview-opf-shield.png) *ios-system-webview-opf-shield.png* ![4_overview.png](4_overview.png) *4_overview.png*

Hosted Payment Page in System WebView.

Your native confirmation page.

## Retrieve session result Once the Consumer has completed the flow on HPP, the status of the HPP Session will change to reflect the outcome of their actions. Your system will then need to retrieve this outcome to be able to act on it, either by placing an order on Klarna Payment, creating a consumer token, or just storing the order_id that was created by HPP for post-purchase purposes. The outcome of the HPP Session can be retrieved either via the redirection of the Consumer to your own website or by making an API Call to get the status of the session. #### 4. a. From the Consumer redirection You can get the outcome of the KP Session from the link that the Consumer will be redirected to as stated in our redirection guide. It is still advised to make a call to the HPP API to get the exact state of the HPP Session and not rely only on the consumer redirection. Parameters that will be required to handle the outcome are given to you by replacing the place holders you have set up in the merchant_urls.success at the creation of the HPP Session. You just need to extract the values from there. This call corresponds to **Step 6a**in the sequence diagram. It is advised to use both method to make sure that your system is actually placing the order whenever the Consumer has gotten a confirmation of payment by Klarna. - On create call: [`https://example.com/success?sid=`](https://example.com/success?sid=)`&authorization_token=` - When user gets redirect: [`https://example.com/success?sid=39a1c773-bafd-754d-af1f-b30c592f1267&authorization_token=a1a8f727-2756-6058-bd3c-40069be0994b`](https://example.com/success?sid=39a1c773-bafd-754d-af1f-b30c592f1267&authorization_token=a1a8f727-2756-6058-bd3c-40069be0994b) - On create call: [`https://example.com/success?sid=`](https://example.com/success?sid=)`&oder_id=` - When user gets redirect: [`https://example.com/success?sid=39a1c773-bafd-754d-af1f-b30c592f1267&oder_id=a1a8f727-2756-6058-bd3c-40069be0994b`](https://example.com/success?sid=39a1c773-bafd-754d-af1f-b30c592f1267&oder_id=a1a8f727-2756-6058-bd3c-40069be0994b) #### 4. b. From the HPP Session Status This token can be retrieved by making a read session call to the HPP API or registering for callback. You can for example use a polling mechanism to check the status of the session. When the HPP Session gets successful because your Consumer gets an authorization, the status will change to `COMPLETE`. Depending on the value of `place_order_mode`, you will be able to extract the `authorization_token` from the server response or directly the `order_id` if the order is placed by HPP. Please read our track session status guide to get all details on how you can get the status of the session. ## Create an order The HPP Session was completed successfully and you need now to act depending on your parameters. - With `place_order_mode` to its default value (`NONE`), you now need to place an Order with Klarna Payments API. - With `place_order_mode` set to `PLACE_ORDER`, you will need to store the order_id to capture the payment once the goods are shipped. - With `place_order_mode` set to `CAPTURE_ORDER`, you need only to store the order_id to do post-purchase operations such as refunds. #### 5. a. Place Order with Klarna Payments API As described in the objects overview, when a Consumer gets a *Payment Authorization*, your backend will need to use a **KP Authorization Token** to place the Order. Now that the Consumer has gotten an Authorization from Klarna for the Payment, you have to use the Authorization Token that you retrieved in the redirection to Place the Order. After this call, Klarna will consider that the Order is actually valid and that you will be able to capture the payment when the goods are being delivered. Please read the place order guide of Klarna Payments to get all details. Depending on your integration use case (ie *eCommerce*,*In Store*or *Telesales*), you may have to respect some guidelines when placing the order, see special rules. To ease your integration and depending on your use case, you can count on the auto_capture feature of the KP API to automatically capture the order after its creation. Please read the place order guide of Klarna Payments to get all details. This call corresponds to **Step 7**in the sequence diagram. ### Place order request ``` json { "purchase_country": "GB", "purchase_currency": "GBP", "locale": "en-GB", "order_amount": 57064, "order_tax_amount": 9511, "order_lines": [ { "image_url": "https://www.exampleobjects.com/logo.png", "type": "physical", "reference": "Could be a Product Id or SKU #", "name": "Cool Bike", "quantity": 1, "unit_price": 20000, "tax_rate": 0, "total_amount": 20000, "total_discount_amount": 0, "total_tax_amount": 0 } ] } ``` ### Place order response ``` json { "order_id": "41c001ca-f6d4-4240-bbc5-5d2c036a2de4", "fraud_status": "ACCEPTED" } ``` ### 5. b. Capture Payment with Order Management API Orders that are created without auto_capture will need to be captured using the **Order Management API**. This can happen when you create the Order by yourself (see previous step) or when you use CAPTURE_ORDER as place_order_mode value. No payment will occur until the order has been captured. This is for use in transactions where the purchased goods are not immediately delivered but are made available at a later time. Please read the capture guide of Order Management to get all details. ## What's next Klarna Mobile SDK provides a full suite of mobile-first integrations, including Klarna products like:
![Pink_Standard_Consumer_(1).png](Pink_Standard_Consumer_(1).png) *Pink_Standard_Consumer_(1).png* ![Pink_Standard_Consumer_(2).png](Pink_Standard_Consumer_(2).png) *Pink_Standard_Consumer_(2).png* ![Pink_Standard_Consumer_(3).png](Pink_Standard_Consumer_(3).png) *Pink_Standard_Consumer_(3).png*

Sign in with Klarna

On-site Messaging

Express Checkout

- **On-site Messaging**: Show contextual messaging let your customers know about the available payment options in pre-checkout: click [here](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/mobile-integration/) to learn more. - **Sign in with Klarna**: Seamlessly identify and let users login via their Klarna account: click [here](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/on-site-messaging-for-mobile/) to learn more. - **Express Checkout**: Accelerate your checkout process and boost conversion by offering a one-click checkout, click [here](https://docs.klarna.com/conversion-boosters/express-checkout/before-you-start/) to learn more. Complete your integration with - [Order management](https://docs.klarna.com/payments/after-payments/order-management/before-you-start/what-is-order-management/) - [Settlements](https://docs.klarna.com/payments/after-payments/settlements/settlement-files/) - [End-to-end testing](https://docs.klarna.com/resources/developer-tools/testing-payments/test-cases/) - [Prepare for go live](https://docs.klarna.com/resources/developer-tools/testing-payments/go-live-checklist/)
--- # Source: https://docs.klarna.com/payments/after-payments/settlements/additional-resources/how-to-adjust-settlements-reports.md # How to customize settlements reports ## The Report Configurator in the Settlements App allows you to customize the CSV and PDF reports to suit you and your accounting system. You can set up individual report configurations per Merchant ID and delivery channel (API, Settlements App, SFTP). Configuration options (selection): - change the CSV delimiter - change date and amount formats - add signs to negative amounts - remove the total section - receive the reports for all your MIDs in the same SFTP directory (by default reports are published in individual accounts per MID) - Add or remove fields, like initial payment method or detailed transaction type (exposing the type of fee that has been charged) - Include consumer VAT information (the VAT on the products or services sold to your customers) By clicking the “**Configure reports**” button on the right, you will get to the configuration page. ![klarna docs image](0a5b94cb-5871-465e-8da8-11fa5c6b8d10_SP_merchant-portal-report-configurator.gif)image --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/prestashop/conversion-boosters/how-to-enable-express-checkout-in-prestashop.md # How to enable Express checkout in PrestaShop ## This guide explains how to add Express Checkout to your PrestaShop store. ## What is Express Checkout? Express Checkout gives your customers a fast and convenient way to purchase with Klarna. Partners who have integrated Express Checkout see an improved customer experience, increased conversion rates, and a higher average order value. To learn more about Express Checkout, refer to the [product documentation](https://docs.klarna.com/express-checkout/). ![ When you add Express Checkout to the store, a button prompting customers to pay with Klarna is displayed in checkout.](51bda528-9267-4a78-87d7-5718d61482fa-KEC-Example.jpeg) *When you add Express Checkout to the store, a button prompting customers to pay with Klarna is displayed in checkout.* ## Prerequisites To be able to offer Express Checkout, you have to first enable Klarna in your PrestaShop store by installing the [Klarna Payments for Prestashop](https://docs.klarna.com/platform-solutions/e-commerce-platforms/prestashop/payments/klarna-payments-in-prestashop/) plugin. ## Install Express Checkout in PrestaShop To install Express checkout in a PrestaShop store, follow these steps: 1\. In the **Klarna Merchant portal**, go to **Payment settings**\> **Client identifiers**. There you can click **Manage origins** and enter your store's URL in the **Register new origin** section. 2\. Proceed to add your store's URL to the allow list (**Register new origin**) and to generate the Klarna Client ID. ![ To use Express Checkout in your Prestashop store, you have to allowlist your store's URL.](4d4622ee-d3d5-447e-9cbd-0193cdd2a65d_Whitelisting.jpeg) *To use Express Checkout in your Prestashop store, you have to allowlist your store's URL.* Later, you can also manage your **Allowed origins for your integrations** in **Payment settings**\> **Client identifiers**. There you can click **Manage origins** and enter your store's URL in the **Register new origin** section. ![ You can manage allowed origins in Payment settings.](af9e9cd4-44f4-4179-8287-87f3c7d49937-Allowed-origin.jpeg) *You can manage allowed origins in Payment settings.* 3\. Click on **Generate client identifier** in the Client identifiers menu, then copy it from the **Client ID**field. ![ The generated Client ID links your Klarna merchant account to your PrestaShop store.](b1f1f769-0f32-4b2f-81b4-83555781d458-image.jpeg) *The generatedClient IDlinks your Klarna merchant account to your PrestaShop store.* 4\. In your PrestaShop admin, go to the "Credentials" section for the Klarna plugin settings, paste the **Client ID** you copied in the **Klarna Client Identifier** field. Make sure the ID doesn't contain any quotes or whitespace. ![ A screenshot of the PrestaShop Klarna payment plugin settings for Klarna Express Checkout.](ZuNNdbVsGrYSvUK4_ExpressCheckoutforPrestaShop.jpeg) *A screenshot of the PrestaShop Klarna payment plugin settings for Klarna Express Checkout.* 5\. Toggle the **Enable Klarna Express Checkout** option to enable the Express Checkout in the Klarna payments plugin. ## Customize the Express Checkout button You can customize the Express Checkout button by choosing a [theme](https://docs.klarna.com/conversion-boosters/express-checkout/additional-resources/button-styling/#theme) and a [shape](https://docs.klarna.com/conversion-boosters/express-checkout/additional-resources/button-styling/#button-shape). The styling options are available in the PrestaShop plugin settings. 6\. From the **Theme** dropdown, select a theme for the button — dark, light, or outlined. 7\. From the **Shape** dropdown, select a shape for the button — rounded, pill, rectangular. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/shopify-payments/how-to-enable-klarna-for-shopify-payments.md # How to enable Klarna in Shopify Payments ## Enhance your Shopify store’s checkout experience by integrating Klarna through Shopify Payments, following simple activation steps after Klarna’s business approval. ## Activate Klarna on Shopify Payments ![Shopify_payments_Klarna_activation.png](Shopify_payments_Klarna_activation.png) *Shopify_payments_Klarna_activation.png* Klarna reviews your business details before you can accept payments with Klarna When Klarna reviews and approves your business, you receive an update in the Payments section of your Shopify admin. Then customers can check out using Klarna payment options. In some markets Klarna is enabled by default (as in the screenshot above), whereas in some markets you will need to follow the instructions below to activate Klarna. ### Desktop 1. From your Shopify admin, go to Settings\> [Payments](https://admin.shopify.com/settings/payments). 2. In the Shopify Payments section, click Manage. 3. In Payment methods, toggle Klarna to activate the payment method. 4. Click Save. ### Mobile #### iPhone 1. From the [Shopify app](https://www.shopify.com/install/detect), tap the … button, and then tap Settings. 2. In the Store settings section, tap Payments. 3. In the Shopify Payments section, tap Manage. 4. In Payment methods, toggle Klarna to activate the payment method. 5. Tap Save. #### Android 1. From the [Shopify app](https://www.shopify.com/install/detect), tap the … button, and then tap Settings. 2. In the Store settings section, tap Payments. 3. In the Shopify Payments section, tap Manage. 4. In Payment methods, toggle Klarna to activate the payment method. 5. Tap Save. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/woocommerce/payments/woopayments/how-to-enable-klarna-for-woopayments.md # How to enable Klarna in WooPayments ## This article provides guidelines on enabling Klarna in WooPayments. ## Prerequisites In order to enable Klarna via WooPayments, you must first have signed up for and installed WooPayments. Installing WooPayments You can read more about WooPayments [here](https://woocommerce.com/products/woopayments/). ## Enabling Klarna ![Enabling Klarna in WooPayments](How_to_enable_Klarna_in_Woo_Payments_1753449816923.png) *Enabling Klarna in WooPayments* Klarna will be enabled by default when you are installing WooPayments. If you are already using WooPayments you can check that Klarna is enabled within payment methods. ![Klarna in payments settings in WooPayments](How_to_enable_Klarna_in_Woo_Payments_1753450513056.png) *Klarna in payments settings in WooPayments* If you see the notification in the image above, this means you already have Klarna enabled through another plugin. We recommend to only have Klarna enabled as a payment method through one plugin to avoid customer confusion. However, you can still use the official Klarna plugin to boost your sales further by enabling On-site messaging, Sign in with Klarna and Express Checkout. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/prestashop/conversion-boosters/how-to-enable-sign-in-with-klarna-in-prestashop.md # How to enable Sign in with Klarna in PrestaShop ## This guide explains how to add Sign in with Klarna to your PrestaShop store. ![klarna docs image](e7dc3339-8065-4b32-8eb7-6a8bdcccd0bb-SIWK-Theme-Examples.jpeg)image ## What is Sign in with Klarna? Sign in with Klarna (SIWK) speeds up your sign-in, sign-up, and checkout processes by leveraging existing Klarna accounts. Pre-saved shopper and payment data is automatically populated for a low-friction shopping experience that minimizes drop-off and results in higher conversion and sales. To learn more about Sign in with Klarna, refer to the [product documentation](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/before-you-start/). ## Prerequisites To be able to offer Sign in with Klarna, you have to first enable Klarna in your PrestaShop store by installing the [Klarna Payments for PrestaShop](https://docs.klarna.com/platform-solutions/e-commerce-platforms/prestashop/payments/klarna-payments-on-prestashop/) plugin. After that, you will need to complete the required configuration details for Sign in with Klarna in the [Klarna Merchant Portal](https://portal.klarna.com), such as privacy, terms, redirect URLs, and scopes. ## Configuration in PrestaShop ### Redirect URL The Redirect URL is built for your shop, available when Sign in with Klarna for PrestaShop is enabled. The Redirect URL pattern is **** ; note that this callback URL must be publicly accessible via your shop server. ### Required Customer Data & Additional Customer Data Some scopes are required for the PrestaShop integration, including: Email Address, Phone number, and Full name. These scopes are not configurable in the Klarna settings in your shop admin and **must match** the enabled scopes as set in the Klarna Merchant Portal; other scopes are optional and configurable. ### Styling There are multiple styling options that can be configured, including Theme, Shape, and Alignment. You can read more about the button styling configurations [here](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/additional-resources/button-styling/). ![ Settings related to Sign in with Klarna enablement in Prestashop.](ZvQA07VsGrYSv8J3_SIWKforPrestaShop.jpeg) *Settings related to Sign in with Klarna enablement in Prestashop.* ### Placements Sign in with Klarna will only display on your shop once some placements are enabled. There are three page types where Sign in with Klarna are available for the integration: Authentication and Cart pages. Where to place the Sign in with Klarna button: - Always place the button wherever the user can sign in or create an account, such as the Sign-in page and the Account creation page. - Place the button where users are asked to provide profile information, such as the Cart page. ### Best Practices Position the button in the section of the page before the manual alternative and include 'or' and a divider between the Klarna button and the manual alternative, to clearly indicate that 'Continue with Klarna' is an alternative option. Once the customer creates their account and is redirected back to your site, they should be taken back to your site in a logged in state to continue their journey, either exploring your site, or checking out. There shouldn’t be any additional steps after the customer creates their account, especially not asking for the same information that was provided during account creation, or asking to verify already verified details. More best practices can be found [here](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/additional-resources/best-practices/). ### Troubleshooting tips #### Button doesn’t show on storefront - Verify your account credentials, particularly client id and API key, are accurate - Verify [your shop domain is](https://docs.klarna.com/resources/business-tools/merchant-portal-guide/settings/#client-identifiers)set as an Allowed Origin in [Klarna Merchant Portal](https://portal.klarna.com) #### Klarna modal opens, and immediately closes - Verify the scopes within [Klarna Merchant Portal](https://portal.klarna.com) are the same or greater than the scopes within your shop backoffice --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/woocommerce/conversion-boosters/how-to-enable-sign-in-with-klarna-in-woocommerce.md # How to enable Sign in with Klarna in WooCommerce ## This guide explains how to add Sign in with Klarna to your WooCommerce store. ![klarna docs image](e7dc3339-8065-4b32-8eb7-6a8bdcccd0bb-SIWK-Theme-Examples.jpeg)image ## What is Sign in with Klarna? Sign in with Klarna (SIWK) speeds up your sign-in, sign-up, and checkout processes by leveraging existing Klarna accounts. Pre-saved shopper and payment data is automatically populated for a low-friction shopping experience that minimizes drop-off and results in higher conversion and sales. To learn more about Sign in with Klarna, refer to the [product documentation](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/before-you-start.md). Additional plugin documentation for SIWK for WooCommerce [here](https://docs.krokedil.com/klarna-payments-for-woocommerce/get-started/sign-in-with-klarna/). ## Prerequisites To be able to offer Sign in with Klarna, you first need to have the [Klarna for WooCommerce plugin](https://woocommerce.com/document/klarna-payments) installed and active in your shop. After that, you will need to complete the required configuration details for Sign in with Klarna in the [Klarna Merchant Portal](https://portal.klarna.com/), such as privacy, terms, redirect URLs, and scopes. ## Configuration in WooCommerce ### Redirect URL The Redirect URL is built for your shop, available when Sign in with Klarna for WooCommerce is enabled. The Redirect URL pattern is ; note that this callback URL must be publicly accessible via your shop server. ### Required Customer Data & Additional Customer Data Some scopes are required for the WooCommerce integration, including: Email Address, Phone number, and Full name. These scopes are not configurable in the Klarna settings in your shop admin and must match the enabled scopes as set in the Klarna Merchant Portal; other scopes are optional and configurable. ### Styling There are multiple styling options that can be configured, including Theme, Shape, and Alignment. You can read more about the button styling configurations \[ here\]. ![ Settings related to Sign in with Klarna enablement in WooCommerce.](ZxqA7oF3NbkBYAWC_siwkforwoocommerce.jpeg) *Settings related to Sign in with Klarna enablement in WooCommerce.* ### Placements Sign in with Klarna will only display on your shop once some placements are enabled. There are three page types where Sign in with Klarna are available for the integration: Authentication and Cart pages. Where to place the Sign in with Klarna button: Always place the button wherever the user can sign in or create an account, such as the Sign-in page and the Account creation page. Place the button where users are asked to provide profile information, such as the Cart page. ### Best Practices Position the button in the section of the page before the manual alternative and include 'or' and a divider between the Klarna button and the manual alternative, to clearly indicate that 'Continue with Klarna' is an alternative option. Once the customer creates their account and is redirected back to your site, they should be taken back to your site in a logged in state to continue their journey, either exploring your site, or checking out. There shouldn’t be any additional steps after the customer creates their account, especially not asking for the same information that was provided during account creation, or asking to verify already verified details. More best practices can be found [here](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/additional-resources/best-practices.md). --- # Source: https://docs.klarna.com/payments/after-payments/settlements/additional-resources/how-to-get-settlement-reports-via-sftp.md # How to get settlement reports via SFTP ==Learn how to create SFTP credentials and connect to the Klarna SFTP. Once you have set up your credentials, the next settlement CSV reports will be automatically uploaded to your account. Optionally you can use the “Configure Reports” option in the Settlements App to additionally receive PDF reports or customize your CSV reports. Additionally, you can choose to receive the reports of all your merchant IDs (MIDs) in the same SFTP account, by changing the SFTP target directories. Settlement reports are kept in the SFTP account for 90 days. After that period, they are deleted automatically.== ### Manage SFTP Credentials Visit the [Settings App](https://docs.klarna.com/resources/business-tools/merchant-portal-guide/payments/settings) in the Merchant Portal and create credentials for the merchant ID. Make sure to save the .txt file which contains the username, password and ports. | Regional Merchant Portal | Link to the SFTP credential service | |----|----| | Europe | [](https://portal.klarna.com/settings/sftp-credentials) | | United States of America and Canada | [](https://portal.klarna.com/settings/sftp-credentials) | | Australia and Asia Pacific | [](https://portal.klarna.com/settings/sftp-credentials) | ![klarna docs image](69410f6a-fc5f-460d-8496-acf232b03519_FIRE-sftp-credentials.gif)image Once you have set up your credentials, the next settlement reports will be automatically uploaded to your account. ### Configuration Use the below settings for connecting to the Klarna SFTP in production and playground (testing environment). | Option | Production | Playground | |----|----|----| | Address | merchants.sftp.klarna.com | sftp.playground.klarna.net | | Protocol | SFTP | SFTP | | Port | 4001 | 4001 | | Username & Password | As provided by the SFTP credential self-service in the Merchant Portal Settings App. [See section above.](https://docs.klarna.com/settlement-reports/tutorials/how-to-get-settlement-reports-via-sftp) | As provided by the SFTP credential self-service in the Merchant Portal Settings App. [See section above.](https://docs.klarna.com/settlement-reports/tutorials/how-to-get-settlement-reports-via-sftp) | ### File names The file name of the Settlement Report from the SFTP includes the unique Payment Reference for the payout, and the timestamp of report generation day (00:00:00) in UTC: paymentReference.TimeStamp.format Example: 123456789_20180809T000226_0.csv In this example, 123456789, is the Payment Reference for this payout. This payment reference is also included in the Settlement Report’s header. The second part 20180809T000000+0000, is the timestamp of the report generation day. It is in UTC and bound to the start of the day. **Note:** The Merchant Portal and Settlements API are using a different naming convention: settlement.paymentReference.format **Temporary files:** Please Ignore `.tmp` suffixed files, for `23456789_20180809`T000226_0.csv These are reports that are currently being created. ### Manually upload settlement reports to your SFTP account You might want to manually upload a CSV or PDF report to your SFTP account. For example, after changing the report structure with the Report Configurator. Simply click on the respective payment reference in the Settlements table and choose to "Send to SFTP". ![klarna docs image](7f853bf8-bb1b-4ad6-a9be-59f6ecb2681c_fire-send-to-sftp.gif)image --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/how-to-handle-customer-data.md # How to handle customer data ## This article provides guidance on handling customer data in the Shopify Checkout. It explains which are the required fields to prevent errors with Klarna payments. ## Email should be set as required in Shopify Checkout Klarna payments requires the customer’s name, phone, and email address to place most Klarna orders. If the customer's email address isn't shared with Klarna upon redirection from Shopify to the Klarna payment page, the customer will receive an error message from Klarna and will need to return to the Shopify checkout to enter their email. To avoid this error, we recommend that you choose **Email** for the **Customer contact method**, which you can configure in the store's **Shopify admin**\> **Settings**\> **Checkout and accounts**\> **Customer contact method**[Customer contact method](https://help.shopify.com/manual/orders/notifications/sms-notifications) section. [Read more about contact options in Shopify documentation](https://help.shopify.com/en/manual/orders/notifications). You can set up a field for the customer to enter their phone number as a required field so that the customer’s phone number is also captured when you enable this setting. ![ Choose Email for the Customer contact method.](2c692c35-5e5f-4483-83ba-b06c2aada253_shopify-customer-contact-method.jpeg) *ChooseEmailfor the Customer contact method.* ## First and last name should be set as required in Shopify Checkout Klarna requires both the first and last name of the customer, so verify that this option has been selected for the **Customer information** setting. ![ First and last name are required.](614d190f-bf0d-4eb8-91f9-5286bcc28926_First-and-last-name-required.jpeg) *First and last name are required.* ## Klarna requests consumers to enter their phone number With the new Shopify payments app integration, Shopify doesn’t share the [customer's shipping phone number](https://shopify.dev/apps/payments/processing-a-payment#request-body-example) with payment integrations. If a customer isn't logged into their Shopify account, Shopify will share either, but not both, the email or phone number, whichever the customer enters in the first **Contact information field** on the first page of Shopify checkout, as shown in the screenshot below.  If the customer is logged into their Shopify account, Shopify will share both the email and the phone number.  Since a Klarna session can’t be started without an email, we recommend that you configure email as required in checkout. When email is required, the customer’s phone number may not be shared by Shopify, and Klarna will have to request, via a modal, for the customer to enter their phone number. ![ TheContact information field can be configured as Email required or Email or mobile phone number.](d1e99397-614b-4c50-89af-07c083f4dbc3_Shopify-checkout-email-or-phone.jpeg) *TheContact informationfield can be configured asEmail requiredorEmail or mobile phone number.* Read more about [customer data in Shopify documentation](https://shopify.dev/docs/apps/payments/implementation/process-a-payment/offsite#customer-hash) **In summary:** - Klarna payments requires the customer’s name, phone, and email address to place orders. - To avoid errors during the payment process, ensure that the email, first name, and last name are set as required in the Shopify checkout. - Make sure the **Customer contact method** is set to **Email** so that the customer doesn’t need to return to Shopify checkout to enter their email manually. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/woocommerce/conversion-boosters/how-to-install-express-checkout-in-woocommerce.md # How to install Express Checkout in WooCommerce ## This guide explains how to add Express Checkout to your WooCommerce store. ## What is Express Checkout? Express Checkout gives your customers a fast and convenient way to purchase with Klarna. Partners who have integrated Express Checkout see an improved customer experience, increased conversion rates, and a higher AOV. To learn more about Express Checkout, refer to the [product documentation](https://docs.klarna.com/express-checkout). ![ When you add Express Checkout to the store, a button prompting customers to pay with Klarna is displayed in checkout.](51bda528-9267-4a78-87d7-5718d61482fa-KEC-Example.jpeg) *When you add Express Checkout to the store, a button prompting customers to pay with Klarna is displayed in checkout.* ## Prerequisites To be able to offer Express Checkout, you have to first enable Klarna in your WooCommerce store by installing the [Klarna for WooCommerce](https://wordpress.org/plugins/klarna-payments-for-woocommerce/) plugin. ## Install Express Checkout in WooCommerce Express Checkout is applied to both product and cart pages for a Woo shop, dependent upon compatibility with the shop's theme. To install Express checkout in a WooCommerce store, follow these steps: 1. In the **Klarna Merchant portal**, go to **Payment settings**\> **Client identifiers**. There you can click **Manage origins** and enter your store's URL in the **Register new origin** section. 2. Proceed to add your store's URL to the allow list (**Register new origin**) and to generate the Klarna Client ID. ![ To use Express Checkout in your WooCommerce store, you have to allowlist your store's URL.](4d4622ee-d3d5-447e-9cbd-0193cdd2a65d_Whitelisting.jpeg) *To use Express Checkout in your WooCommerce store, you have to allowlist your store's URL.* Later, you can also manage your **Allowed origins for your integrations** in **Payment settings**\> **Client identifiers**. There you can click **Manage origins** and enter your store's URL in the **Register new origin** section. ![ You can manage Allowed origins for your integrations in Payment settings.](af9e9cd4-44f4-4179-8287-87f3c7d49937-Allowed-origin.jpeg) *You can manage Allowed origins for your integrations in Payment settings.* 3\. Click on **Generate client identifier** in the Client identifiers menu and then copy it from the **Client ID**field. ![ The generated Client ID links your Klarna merchant account to your WooCommerce store.](b1f1f769-0f32-4b2f-81b4-83555781d458-image.jpeg) *The generatedClient IDlinks your Klarna merchant account to your WooCommerce store.* 4\. In your WooCommerce admin, in the **Credentials**section, paste the **Client ID** you copied in the **Client Id** field. Make sure the ID doesn't contain any quotes or whitespace. 5. In the Express Checkout section, check the **Enable Klarna Express Checkout** checkbox to enable the Express Checkout in the Klarna plugin. ![klarna docs image](ZwPblrVsGrYSwcjn_image-11.jpeg)image ## Customize the Express Checkout button You can customize the Express Checkout button by choosing a [theme](https://docs.klarna.com/conversion-boosters/express-checkout/additional-resources/button-styling.md) and a [shape](https://docs.klarna.com/conversion-boosters/express-checkout/additional-resources/button-styling.md). The styling options are available in the WooCommerce plugin settings. 1. From the **Theme** dropdown, select a [theme](https://docs.klarna.com/conversion-boosters/express-checkout/additional-resources/button-styling.md) for the button — dark, light, or outlined. 2. From the **Shape** dropdown, select a [shape](https://docs.klarna.com/conversion-boosters/express-checkout/additional-resources/button-styling.md) for the button — rounded, rectangular, or pill. 3. Select the **Placements**: product and/or cart pages. To learn more about Express Checkout in the Klarna plugin for WooCommerce, refer to the [Krokedil documentation](https://docs.krokedil.com/klarna-payments-for-woocommerce/get-started/klarna-express-checkout/). --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/payments-for-shopify/how-to-install-klarna-payments-on-shopify.md # Installing Klarna Payments for Shopify ## Successfully integrate Klarna Payments with your Shopify store by following the step-by-step installation guide, verifying store setup, and ensuring required customer details for smooth transactions. In order to go live with Klarna payments on Shopify, you need to log in into the Klarna Merchant portal. If you don’t yet have a Klarna merchant account, you can sign up [here](https://portal.klarna.com/products/signup/basic-info). Once the below steps are started, we recommend that you complete at the minimum steps 1 through 4 to avoid a [partial entry in Klarna's database, which results in an incomplete integration](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/troubleshoot-your-installation/#installation-and-merchant-portal-issues-unexpected-error-when-trying-to-complete-the-integration).Make sure you are logged in to the correct Shopify store. Once a store is associated with a merchant ID, that merchant ID will be blocked from use for another store. Each Shopify store must have its own unique Klarna merchant ID. If you connect Klarna to the wrong Shopify store, deactivate the payment method and uninstall the app. [Wait 48 hours](https://shopify.dev/apps/webhooks/configuration/mandatory-webhooks#shop-redact) for the association to be removed, and then try the installation over again. If you are stuck, reach out to Merchant support. ## Installation steps ### Step 1: Log into Shopify & check your settings, and log into Klarna Merchant Portal Make sure your Shopify settings are ready to work with Klarna. Navigate to **Shopify admin**\> **Settings**\> **Checkout** 1. Under **Customer Contact Method**, select only **Email**. If the customer's email address isn't shared with Klarna, the customer will receive an error message from Klarna and will need to return to the Shopify checkout to enter their email. [Read more about contact options in Shopify documentation](https://help.shopify.com/en/manual/orders/notifications). 2. Under **Customer Information\> Full Name** select **Require** **first and last name** 3. Under **Customer Information\> Shipping address phone number** select **Required** ![Ensure these settings are selected before you integrate with Klarna.](Shopify_-_Admin_-_Checkout_Settings.png) *Ensure these settings are selected before you integrate with Klarna.* **Everything is now ready!** Log into both your Shopify admin as the full account owner and the Klarna Merchant portal. Follow the steps below, or watch [this video](https://www.youtube.com/watch?v=6DMr3a75VuY) to learn how to install the app. ### Step 2: Navigate to Integration Guides\> Shopify In the [Klarna Merchant Portal](https://portal.klarna.com/integration-guides), click the **Integration guides** from the left side navigation. Click the **Shopify** option. If you don't have the **Integration guides** option displayed for your account when logged into Klarna Merchant portal, contact Merchant Support. ![Start the installation by choosing Shopify in the Klarna Merchant portal Integration guides.|365x365px](Klarna_-_MP_-_IG_-_Partner_Selection.png) *Start the installation by choosingShopifyin the Klarna Merchant portalIntegration guides.|365x365px* ### Step 3: Start the Installation Click **Continue** to start the integration process. Then click **Install Klarna Shopify Application.** Note: while this app is a public app, it isn't listed in the [Shopify app store](https://apps.shopify.com/), and won’t be displayed in your store's **Apps** menu like other apps, which is expected for Shopify new payments apps. ![Click Install Shopify Klarna Application to start the installation process|320x320px](Klarna_-_MP_-_IG_-_Shopify_-_Install_app.png) *ClickInstall Shopify Klarna Applicationto start the installation process|320x320px* ### Step 4: Install the app in Shopify You will then be redirected to Shopify. Click **Install** on the first page you land on, and click **Install** on the next page as well. ![Click Install to continue installing Klarna Payments to your store. |320x320px](Shopify_-_KP_App_-_Install.png) *ClickInstallto continue installing Klarna Payments to your store. |320x320px* ### Step 5: Generate Credentials & Verify Integration Generate and connect new [Klarna API credentials](https://docs.klarna.com/resources/developer-tools/testing-payments/before-you-test/#getting-test-credentials-for-apis). Download these API credentials to your local computer, even though you won't need to use them anywhere. This step is required to move forward. In this step, the integration is verified. ![Click Generate and connect credentials to connect your store to Klarna. Then click Continue integration. |320x320px](Klarna_-_MP_-_IG_-_Shopify_-_Generate_Credentials.png) *ClickGenerate and connect credentialsto connect your store to Klarna. Then clickContinue integration.|320x320px* Click **Verify integration** to check that your Klarna Shopify integration is set up correctly. ![Click Verify integration to check that your Klarna Shopify integration is set up correctly.|320x320px](Klarna_-_MP_-_IG_-_Shopify_-_Verify_Integration.png) *ClickVerify integrationto check that your Klarna Shopify integration is set up correctly.|320x320px* ### Step 6: Activate Klarna Click **Next**, and you will land on the **Activate** page. Click **Next** again to be redirected to Shopify to activate Klarna in your checkout. ![To activate the Klarna payment method in your checkout, you’ll be redirected to your Shopify store admin.|320x320px](Klarna_-_MP_-_IG_-_Shopify_-_Activate.png) *To activate the Klarna payment method in your checkout, you’ll be redirected to your Shopify store admin.|320x320px* Activating the payment method in your store enables Klarna to display in checkout. Make sure to verify that Klarna loads successfully though as this step does no validation if the integration was completed successfully. ![Activate Klarna in your Shopify store.|320x320px](Shopify_-_Admin_-_Activate_Klarna.png) *Activate Klarna in your Shopify store.|320x320px* ### Step 7: Check that Klarna appears in the checkout **Klarna is now live in your Shopify store!** Check the integration by adding a product to your cart. Navigate to your checkout page, and see if the Klarna radio button appears. Click the **Pay Now** or **Complete** button to make sure the Klarna payment flow starts. Placing a [test order](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-in-the-merchant-portal/capture-an-order/) isn't necessary, but you can learn how place test orders here. Alternative payment methods will not show if logged in to ShopPay. If you are logged in to ShopPay, no alternative payment methods will show. Klarna does not have an express button. ### What next? **Next, we recommend you to proceed with installing the Klarna On-Site Messaging app to further boost your sales through Klarna.** [Learn about the Klarna On-Site Messaging app here.](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/how-to-install-osm-shopify-app/) ## Deactivating & uninstalling Klarna from Shopify Deactivating Klarna means that Klarna will no longer appear in the checkout to your customers. If you uninstall the payments app completely, you will remove Klarna from the checkout, and you will not be able to manage any of your existing Klarna orders. To remove Klarna from your Shopify checkout, deactivate the alternative payment method in **Shopify admin**\> **Settings**\> **Payments**. We do not recommend uninstalling the app until all Klarna orders have been finalized, or your return window has passed for all existing Klarna orders. You will not be able to process refunds or captures if the app is completely uninstalled. After uninstalling the app, you need to wait for 48 hours until you can reinstall Klarna again through the Merchant Portal. ![ An example of Klarna in Payments settings where the red deactivate button needs to be clicked to uninstall Klarna|320x320px](Zp4dOx5LeNNTxVv1_image-75.jpeg) *An example of Klarna in Payments settings where the red deactivate button needs to be clicked to uninstall Klarna|320x320px* ## Appearance in checkout: Language, locale, and translations Klarna configures the translations for the Klarna payment method. For each supported language, one translation is available. Read more about it [in the Shopify documentation](https://shopify.dev/apps/payments/creating-a-payments-app/creating-a-payments-app#payments-app-extension-configuration-fields). Remember that you will only be able to offer Klarna in the base currency of your Shopify store - multiple currencies on a single Shopify store are not supported with the direct integration. Note the following rules which govern which translation is displayed in the checkout: - The displayed translation isn't determined by the customer's country or storefront language. - The translation used in the store's checkout is determined by the store's single checkout language, which is configured in the store’s Shopify admin under **Settings**\> **Checkout and accounts**\> **Manage checkout language**. The following table shows translated payment method name in each language: | **Language** | **Translated payment method name** | |--------------|-------------------------------------------| | Czech | Klarna - Zaplať ve 3 splátkách | | Danish | Klarna - Betal nu eller senere | | Dutch | Klarna - Betaal nu of betaal later | | English | Klarna - Flexible payments | | Finnish | Klarna - Maksa heti tai myöhemmin | | French | Klarna - Payer maintenant, ou plus tard | | German | Klarna - Sofort oder später bezahlen | | Greek | Klarna - 3 άτοκες δόσεις | | Hungary | Klarna - Fizetés most vagy fizetés később | | Italian | Klarna - Paga in 3 rate | | Norwegian | Klarna - Betal nå eller senere | | Polish | Klarna - Kup teraz, zapłać później | | Portuguese | Klarna - 3 pagamentos sem juros | | Spanish | Klarna - Paga a plazos sin intereses | | Swedish | Klarna - Betala nu eller senare | Currently, payment methods can’t be renamed for Shopify Plus merchants via custom scripts. This is a known constraint and you can [read more about it in this Klarna.Docs article](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/known-constraints/#4-renaming-the-payment-method-isnt-supported). You can, however, use third party apps such as Payfy or BSure Checkout Rules to rename the payment method. ### Language and locale The locale for Klarna payments hosted payment page is set based on the store's language concatenated with the customer's billing address country. For example, the English language selected for a customer with a US billing address entered in Shopify checkout would result in a request locale of en-US when Klarna payments is loaded. If the requested locale is supported by Klarna payments, per [Available purchase countries, currencies and locales,](https://docs.klarna.com/klarna-payments/in-depth-knowledge/puchase-countries-currencies-locales/) the locale will be honored. If the locale isn't supported, English is used as a fallback. Locale isn't configurable in Klarna. You can configure your store's language in the Shopify admin under **Settings**\> **Languages**. One way to check a store's Shopify language is via the browser’s developer tools, for example, by entering Shopify.locale in your browser's developer tools’ **Console**, as shown on the following snippet. ``` http Shopify.locale ``` Enter Shopify.locale in the Developer tools' console to check a Shopify store's language. ![ You can check a store's Shopify language in your console.|740x740px](ZkIv2kFLKBtrW0xU_locale.jpeg) *You can check a store's Shopify language in your console.|740x740px* --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/wix/conversion-boosters/how-to-install-on-site-messaging-on-wix.md # How to install On-site messaging on Wix ## This article provides a step-by-step guide on installing Klarna On-site messaging in your Wix store. ## Install Klarna-branded messaging With On-site messaging, you can let your customers know about the available payment options as they browse your online store, even before they decide to buy. You can include Klarna-branded tailored messaging throughout the purchase journey of your online store. To install Klarna On-site messaging, you have to manually add [Javascript code for Klarna On-site messaging](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/integrate-using-klarna-web-sdk.md) to any page of the website except your product page, which has its own Wix built-in messaging. Head to our [marketing guidelines](https://docs.klarna.com/marketing) page to get more information on including Klarna messaging throughout your customer journey. ## Install Wix built-in messaging Besides Klarna On-site messaging, Wix has built-in functionality called **Price breakdown widget**[Price breakdown widget](https://support.wix.com/en/article/accepting-payments-in-installments-bnpl#about-installment-payment-options) for installment payment options. This is a semi-static message box on the product page. The widget currently supports only some payment methods. This widget is live and is automatically added to Wix stores if the region includes the supported payment method. With this solution, there is no action needed from your end.  The built-in widget [doesn’t support all languages](https://support.wix.com/en/article/request-displaying-installment-payment-bnpl-price-breakdown-in-other-languages). If the language is not supported, the widget is displayed by default in English. Currently, there’s no available feature to [configure the widget](https://support.wix.com/en/article/request-hiding-installment-payment-bnpl-price-breakdown-on-your-product-page)in the Wix store admin. For detailed Wix documentation, see [here](https://support.wix.com/en/article/wix-editor-adding-code-to-your-site). **In summary:** - You can manually add Klarna On-site messaging (via JavaScript code) to inform customers about payment options in your online store. - Wix offers built-in messaging for installment payment options, automatically added to specific regions. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/woocommerce/conversion-boosters/how-to-install-on-site-messaging-on-woocommerce.md # How to install On-site messaging on WooCommerce ## This article provides guidelines on installing and configuring On-site messaging in your WooCommerce store. ![An example of an on-site messaging placement.](ZrH83kaF0TcGItiD_Onsitemessagingx.jpeg) *An example of an on-site messaging placement.* On-site messaging can be enabled by any merchant using Klarna as a payment method (either via the Klarna plugin or via a PSP) and having access to the Klarna Merchant Portal to retrieve the client identifier needed to enable this feature. As of v3.5.0 for Klarna Payments for WooCommerce, On-site messaging is included in the Klarna Payments plugin; if previously a shop using Klarna Payments had the On-site messaging plugin separately, that On-site messaging plugin can be removed from the shop. ## Configuration To configure On-site messaging on WooCommerce, follow the next guidelines:  - Find the On-site messaging configuration settings and options at the bottom of the Klarna payments plugin settings. - Go to **[Klarna Merchant portal](https://portal.klarna.com/?utm_source=klarnadocs&utm_campaign=woocommerce)**\> **Conversion boosters**\> **Plugin setup**\> **WooCommerce**page to find the **Client identifier**. - Copy the Client identifier, without quotes or whitespace, and paste it into the **Client ID** field within the Klarna WooCommerce plugin admin configuration. - Select the checkbox to enable the Product and/or Cart page placements in the Klarna plugin. - Find the placement data keys in **Merchant portal**\> **On-site messaging**\> **Placements**. - For the placement you'd like to use, copy the name of the placement. Paste it into the plugin settings for the Product placement data key field and/or the Cart placement data key field. - Select a location in the On-Site messaging placement dropdown. This uses standard WooCommerce page locations. For detailed documentation of On-site messaging for WooCommerce, see [here](https://docs.krokedil.com/klarna-for-woocommerce/additional-klarna-plugins/klarna-on-site-messaging/). ## How to customize the placement theme Most Klarna placements that contain the messages have predefined themes (light -which is the default- and dark) and some can be customized.  If a placement accepts customization, you can see the **Custom design** button at the upper right side of the page in the Merchant portal.  The customization choices in the Klarna WooCommerce plugin include these options:  - Light = default - Dark = dark - Custom = custom design Because of accessibility standards, you can not fully customize all the aspects of the placements. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/klarna-osm-app-for-shopify/how-to-install-osm-shopify-app.md # How to install the Shopify On-site messaging app ## Read this guide to learn how to add the Klarna On-site messaging Shopify app to your Shopify store. ## Prerequisites Before you begin, you must integrate Klarna Payments or enable Klarna for Shopify Payments. The On-Site Messaging app will rely on your integration to connect to your store. We highly recommend that you are using [Online Store 2.0](https://www.shopify.com/partners/blog/shopify-online-store) and that you have upgraded to Checkout Extensibility for the best experience using this app. This installation guide is applicable for stores compatible with the Klarna OSM Shopify app. If your store isn’t compatible with the app, you can install Klarna On-site messaging manually using JavaScript. For more details, refer to the [manual OSM installation guide](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/manual-osm-shopify-integration/). ## 1. Install the Klarna On-site messaging Shopify app - Install the Klarna On-site messaging app from the [Shopify App Store](https://apps.shopify.com/klarna-on-site-messaging). - Click Install App. - Grant permissions and confirm installation. ## 2. Connect your account After installing the app, Klarna will try to connect your account automatically. If we detect your myshopify.com domain in our system, we'll link your store for you. If not, follow these steps to connect manually: - In your Shopify Admin, go to: 
**Apps**\> **Klarna On-site Messaging**\> **Settings** - Enter your Klarna Merchant ID (MID) - Click Connect ![ A Klarna merchant account linked to a Shopify store.](a962fb0e-fdbe-472d-b0c7-710c7a83ede3_Klarna_Shopify_OSM_Account_setup_2023_08-01.jpeg) *A Klarna merchant account linked to a Shopify store.* You can find your Klarna MID in the Klarna Merchant Portal and it starts with a K, N or A and is followed by 6-7 digits. If you are not integrating Klarna Payments directly through Klarna please reach out to your payment partner for this. If you are getting a 404 error, please follow the steps [outlined here](https://docs.klarna.com/platform-solutions/shopify/klarna-osm-app-for-shopify/troubleshooting/#common-warnings-and-errors-error-request-failed-with-the-status-code-404) to troubleshoot. ## 3. Add placements The final step is to add placements. If your store uses a theme that supports [Online Store 2.0](https://www.shopify.com/partners/blog/shopify-online-store) app blocks, follow the [App Blocks Guide](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/app-block-placements/)Vintage themes are no longer supported. ## Extended Access The extended access setting enhances your Klarna integration allow us to gather additional information about orders placed with Klarna in your store and display it to the customer. These extended access features are enabled by default when you install the On-Site messaging app, but can be disabled by deselecting the Extended Access option in the app settings. We access minimal data as needed for the following additional features: - Updating Klarna’s merchant_reference_1 field with the corresponding [Shopify order name](https://shopify.dev/api/admin-graphql/2022-10/objects/Order#field-order-name). This allows us to display the correct order ID to your customers in the Klarna app. This also makes it easier for you and Klarna support teams to find orders quickly and easily in our systems if needed. (October 11, 2022) - The Klarna order ID is added as a Shopify order note on the Shopify backend. This is also helpful information you can provide to Klarna merchant support if needed. (November 3, 2022) - A Klarna tag is added to Shopify orders placed through Klarna. (September 20, 2023) - Product URL and image URL are added to the Klarna order shortly after the order is placed. This allows your customers to see their order details in the Klarna app and emails from Klarna. You can manage the **Extended Access** setting in **Apps**\> **Klarna On-site Messaging**\> **Settings.** ![ Extend Access is an optional configuration that provides additional permissions to enhance the Klarna On-site messaging app’s functionalities.](ff93388b-4422-4bd9-ace7-af6217f0358b-Extended-Access.jpeg " Extend Access is an optional configuration that provides additional permissions to enhance the Klarna On-site messaging app’s functionalities.") When Extended Access is enabled in a Shopify store, additional order details are visible in the Merchant portal, for example, the Shopify order ID as **Reference** and an image of the product. ![klarna docs image](fbd97a86-b42f-445b-a402-aa1a68b02117-SKOSM+Ext-Access.jpg)image ## Uninstalling the Klarna On-Site Messaging App If you no longer want to use the Klarna On-site messaging (OSM) Shopify app in your store, do the following to remove all inserted code for your store: 1. Disconnect the account from the Klarna OSM Shopify app in **Shopify admin**\> **Settings**\> **Apps**. 2. Delete the app from **Shopify admin**\> **Apps** as shown on the screenshot below. ![Uninstalling the Klarna On-site messaging app from a Shopify store.](uninstall_the_app_in_Shopify.png) *Uninstalling the Klarna On-site messaging app from a Shopify store.* Deleting the Klarna OSM Shopify app removes all code from your store. You can confirm the code is deleted by viewing the HTML source and searching for the following code elements: - To check that the JavaScript libraries loaded in your store have been deleted, search for the asyncLoad function in the source code. - To check that the placement code has been deleted, search for the klarna-placement HTML element in the source code. If you already removed the Klarna On-site messaging Shopify app, but the KlarnaThemeGlobals code was not removed from your theme (if added to your theme prior to 2022-Dec-13), you can manually remove it from the theme.liquid file in your **Shopify admin**\> **Sales channels**\> **Online Store**\> **Themes**\> **…**\> **Edit code**. --- # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-sdk/how-to-integrate-klarna-payments.md # How to integrate Klarna Payments ## The end-to-end process to make a payment with Klarna involves three main steps. In order to enable Klarna in your e-commerce you need to complete the following 3 steps: 1. **[Initiate a payment](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-1-initiate-a-payment.md)** creates a session that identifies the purchase towards Klarna. 2. **[Check out](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-2-checkout.md)** displays Klarna as a payment method and authorizes the purchase. 3. **[Create an order](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-3-create-an-order.md)** uses the authorized payment from the previous step and creates an order. The payment process has slight variations according to each [scenario](https://docs.klarna.com/payments/web-payments/before-you-start/what-is-klarna-payments.md) one-time or recurring payments. The following sections present a high-level description of the payment process in each scenario. ## Initiate a payment The payment process starts when you create a session towards Klarna. With an active session, you are able to show Klarna as a payment method in your checkout. This session identifies the payment and is unique for the order life cycle. It also dictates which payment methods are available, depending on the purchase country and the cart's amount. Creating a session takes place in the server side. You have to send a request to the Klarna payments API. As a response, you get a `client_token` (JSON Web Token), useful for the following step. ### One-time payments scenario You need to specify in the API request that the created session is for a one-time payment. The `intent` parameter should contain the values that are valid for this scenario. ### Recurring payments scenario You need to specify in the API request that the created session is for a recurring payment. The `intent` parameter should contain the values that are valid for this scenario. For more technical details, see [Step 1: Initiate a payment](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-1-initiate-a-payment.md). ## Check out When you create the purchase session, your customer can see Klarna as a payment method in your checkout and go ahead with the purchase. This step consists of two actions: 1. displaying the Klarna widget 2. authorizing the purchase. **Displaying the Klarna widget** The wigdet displays Klarna as an option to pay. If the customer selects it, they have to log into [user account](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data.md) to then chose their preferred payment method. You have to load the Klarna widget along with other payment methods you offer in your checkout. Displaying the widget takes place in the client side. You need to make a request using Klarna's Javascript SDK and pass the `client_token` from the previous step. **Authorizing the purchase** When your customer selects to pay with Klarna, you have to request authorization from our side before going ahead. Authorizing the purchase takes place in the client side. You need to make a request using the Klarna's Javascript SDK. As a response, you receive an`authorization_token,` useful for the following step. When you call authorize(), the Klarna window opens for your customers and here they need to log into their user account to be able to select a payment method for their purchase. Then, we run a payment method flow including operations on the specific purchase and customer like collecting funding source, underwriting, and running fraud assessments. We use the order and customer information, make an assessment, and authorize the purchase. ### Scenarios In this step, your customers see in the widget Klarna as a single payment option and there is no major difference depending on the scenario, one-time or recurring payments. After they log into user account, they can see the different payment methods. For more technical details, see [Step 2: Check out.](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-2-checkout.md) ## Create an order To continue with the purchase, you have to create an order in Klarna's system. This step takes place in the server side through the Klarna payments API. ### One-time payments scenario For one-time payments, you send an API request, including the `authorization_token` from the previous step and a URL pointing to the confirmation page for your customer. This request creates an order in Klarna’s system. Once you create an order, the payment session is closed. ### Recurring payments scenario Creating an order for recurring payments comprises two sub-steps: 1. generating a customer token 2. placing the order. **Generating `customer_token`** Generate a `customer_token` to use it any time you need to place an order. The `customer_token` identifies your customer and their preferred payment method. To generate the `customer_token`, you send an API request, including the `authorization_token` from the previous step. **Placing the order** The `customer_token`allows you to create an order on behalf of your customer without the need for their confirmation at the moment of the payment. You can place the order anytime by sending an API request, including the `customer_token` and the order details. For more technical details, see [Step 3: Create an order](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-3-create-an-order.md). --- # Source: https://docs.klarna.com/payments/mobile-payments/additional-resources/hybrid-overview.md # Hybrid Overview Our goal with the hybrid integration is to allow you to use your own web views and enhance your users’ experience when interacting with Klarna’s products. ## Four Steps to Integrate Our iOS and Android SDKs hold weak references to your web views, don’t override any part of of your implementation or modify your web views in any way. Because of this, we ask you to perform some minor integration work to make your users’ experience as pleasant as possible. This consists of four steps: 1. Initialization. 2. Adding web views to the SDK. 3. Notifying the SDK when something occurs in the web view. 4. Handling events from the SDK. ![klarna docs image](39f92e36-336b-41c8-a5c2-45cbbfce93b1_INAPP_hybrid-diagram.jpeg)image This guide will lead you through the steps below. If you’re ready to start your implementation, you can follow the [iOS guide here](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/hybrid.md), and the [Android guide here](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/hybrid.md). ### STEP-BY-STEP ## Initializing the SDK You can initialize the SDK by creating an instance of it. You’ll need to provide a return URL and an event listener. You’ll only need one instance, regardless of how many web views you have. Both for your convenience and ours (if debugging is necessary), try to initialize it as late in your application’s flow as possible. ## Adding Web Views You should provide a reference to the web views that the SDK will observe. The SDK will hold a weak reference and it’ll stop running if it loses its reference to your web view. ## Notifying the SDK There are two occasions in which we need you to notify the SDK: ### Before a Navigation Starts in Your Web View The Klarna components you render in the web view contain links. If the components run in a web view associated with the SDK, these links will instead open: - As native dialogs. - In an in-app browser. - If there’s no choice, in an external browser (Safari or Chrome). This way, there is no possibility that a Klarna component performs a navigation inside your web view. However, there are cases when Klarna components might display 3rd-party content (e.g. some terms from a customer’s bank) which may also contain links. In these cases, Klarna can’t override the aforementioned navigation behavior. Because of this, we ask you to notify the SDK before a navigation occurs. If the SDK recognizes the URL as one that the customer should *not* navigate to, it’ll notify your app so it can stop this navigation from happening. ### After a Navigation Has Been Performed in Your Web View The SDK communicates with the Klarna components in the web view in several ways: On iOS: - Creating a bridging object in the UIWebView's JavaScript context. - Adding a WKScriptMessageHandler to a WKWebView. On Android: - Creating a message channel (API 23 and above). - Creating a bridging object in your WebViews's context (below API 23). Some of these solutions stop working if the web view navigates to a new page. So, to “re-enable” communications between your web view and the SDK, we ask you to notify us when a new page has loaded. ## Handling Events We ask you to implement an event listener so the SDK can notify your app when specific events have occurred in the web view. It’ll notify you of two types of events: ### Fullscreen Events It’ll notify you when a Klarna component inside the web view will or did perform a transition to/from a full-screen state. You can read more about this [here](https://docs.klarna.com/payments/mobile-payments/before-you-start/fullscreen-in-hybrid). ### Errors We will also notify you when an error has occurred. --- # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/hybrid.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/hybrid.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/hybrid.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/hybrid.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/hybrid.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/hybrid.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/hybrid.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/hybrid.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/hybrid.md # Hybrid - Android ## ​​​You can hook up your web view to the SDK in only a few steps and immediately provide a much more pleasant experience when using Klarna products on mobile.
![hybrid_android_checkout.png](hybrid_android_checkout.png) *hybrid_android_checkout.png* ![3_overview.png](3_overview.png) *3_overview.png* ![hybrid_android_confirmation.png](hybrid_android_confirmation.png) *hybrid_android_confirmation.png*

Your checkout screen when Klarna is selected as payment method.

Klarna purchase flow starts when customer confirms to Continue with Klarna.

Your order confirmation screen after a successful payment.

#### Integration Steps - [Prepare](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/hybrid.md): Make sure you have a web checkout integrated with Klarna Payments. - [Set up your app](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/hybrid.md) (Mobile App): Set up return URL to your application. - [Present your web checkout](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/hybrid.md) (Mobile App): Present you web checkout using System WebView. ## Prepare This guide will lead you through all the steps required to accept Klarna Payments in your mobile app using your web integration. At the end, you will be able to accept payments with Klarna with very few native changes.This guide assumes that you already have a web checkout integrated with Klarna Payments and you intend to use it in your mobile application. If you haven't done such web integration, we suggest you to check the [web payments documentation](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-2-checkout.md). ## Set up your app ### Import the SDK #### Add the Repository Add the Klarna Mobile SDK maven repository: ### Kotlin ``` kotlin repositories { maven("https://x.klarnacdn.net/mobile-sdk/") } ``` ### Groovy ``` groovy repositories { maven { url 'https://x.klarnacdn.net/mobile-sdk/' } } ``` #### Add the Dependency Add the SDK as a dependency to your app: ### Kotlin ``` kotlin dependencies { implementation("com.klarna.mobile:sdk:2.x.x") } ``` ### Groovy ``` groovy dependencies { implementation 'com.klarna.mobile:sdk:2.x.x' } ``` To read more about Mobile SDK versioning policy, check out [this section.](https://docs.klarna.com) ### Set up your app #### Return URL Klarna purchase flows might require authorizations in other applications (e.g. bank apps) or do a handover to the Klarna app. In such cases, a return URL to your application ensures seamless return to the flow in your app, hence setting up a return URL is required. It is expected that redirects to this URL should only open your application without any changes in the UI state, ensuring the customer can continue the flow prior to external navigation. You can read more about how deep links and intent filters work [on the Android Developers site](https://developer.android.com/training/app-links/deep-linking). You can set up a Return URL app scheme for your application by registering an `intent-filter` for the Activity you integrated Klarna, in your app’s `AndroidManifest.xml`: ``` xml ``` **Important:** Construct the return URL string passed to Klarna by combining the attributes defined in your 's `` tags, following the standard URL format: `://` ``` kotlin override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) intent?.data?.let { uri -> if (uri.host == Contants.klarnaReturnUrl.host && uri.host == Contants.klarnaReturnUrl.host) { // This is a return URL for Klarna – skip deep linking return } // This was not a return URL for Klarna } } ``` The hosting `Activity` should be using `launchMode` of type `singleTask` or `singleTop` to prevent a new instance from being created when returning from an external application. ## Present your web checkout ### Create a WebView In order to use your web integration in the app, first step would be to create a WebView for loading your checkout URLs. You can simply do this by initiating the WebView first. #### Retrieve WebView inflated from XML ``` swift val webView = findViewById(R.id.webView) webView.webViewClient = this webView.loadUrl("https://www.merchant.com/checkout") // Load your checkout page where Klarna Payments is integrated ``` #### Create a new WebView from code ``` kotlin webView = WebView(context) webView.webViewClient = this webView.loadUrl("https://www.merchant.com/checkout") // Load your checkout page where Klarna Payments is integrated ``` Having an implementation for `WebViewClient` is important as you will need it in the following steps. ### Create an Hybrid SDK instance Initialize the Hybrid SDK by creating a new instance of `KlarnaHybridSDK`. You should hold a strong reference to the SDK. It will deallocate all its resources if you null it. You only need a single instance of the SDK, regardless of how many web views you have, but if you need to, you can create several SDKs. ``` kotlin val hybridSDK = KlarnaHybridSDK(returnUrl, null, null) hybridSDK.eventHandler = this ``` ### Creating an Instance | **Param** | **Type** | **Description** | |----|----|----| | returnUrl | String | A URL that the SDK can use to return customers to your app. | | eventCallback | KlarnaEventCallback? | Event Callback interface that will notify you about messages and errors. This is not required as you will be using the KlarnaEventHandler. | | fullscreenEventCallback | KlarnaFullscreenEventCallback? | Fullscreen event Callback interface that will notify you about fullscreen transition events. This is not required. | ### KlarnaEventHandler The SDK will notify you of events and errors via event callback object that you’ll need to implement. The SDK also notifies you about different events during fullscreen transition via fullscreen event callback. You will need to implement the `KlarnaEventHandler` interface in order to receive events and errors from the SDK. This will let your app be notified about relevant events and errors that happen inside the web view that the SDK is observing. ``` kotlin class MyActivity: AppCompatActivity(), KlarnaEventHandler { override fun onEvent(klarnaComponent: KlarnaComponent, event: KlarnaProductEvent) { // Implementation for dispatched event } override fun onError(klarnaComponent: KlarnaComponent, error: KlarnaMobileSDKError) { // Implementation for encountered error } } ``` ### Add your WebView You need to add the web views that the SDK should track. The SDK will hold weak references to these web views, so if they’re deallocated, the SDK will lose track of them. ``` kotlin hybridSDK.addWebView(webView) ``` ### Notify the SDK There are two instances at which you’ll need to notify the SDK of events in your web view (as we don’t override your `WebViewClient`). #### Before a Navigation You should notify the SDK about upcoming navigations by calling the SDK’s `shouldFollowNavigation` from your `WebViewClient`. ``` kotlin class MyWebViewClient(): WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean { return !hybridSDK.shouldFollowNavigation(url) } } ``` #### After a Navigation You need to notify the SDK after a page has loaded by calling the SDK’s `newPageLoad` from your `WebViewClient`. ``` kotlin class MyWebViewClient(): WebViewClient() { override fun onPageFinished(view: WebView, url: String) { hybridSDK.newPageLoad(view) } } ``` As you are re-using your web integration, this integration approach assumes that you have implemented order creation via the integration that exists in web. Hence, this documentation does not cover this step, if you would like to learn more about authorizing a session and creating an order in web, check out these documentations: - [Web Payments: Authorization callback](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-2-checkout.md) - [Web Payments: Creating an order](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-3-create-an-order.md) ### Optional ### Enable logging The SDK will log events and errors while it’s running, which you can read in **logcat** console. You can set the logging level for the SDK through the `loggingLevel` property of integration instance. ``` swift hybridSdk.loggingLevel = KlarnaLoggingLevel.Verbose ``` #### KlarnaLoggingLevel | Value | Description | |----------------------------|------------------------------------| | KlarnaLoggingLevel.Off | No logging | | KlarnaLoggingLevel.Error | Log error messages only | | KlarnaLoggingLevel.Verbose | Log all messages (debug and error) | ## What's next Klarna Mobile SDK provides a full suite of mobile-first integrations, including Klarna products like:
![Pink_Standard_Consumer_(1).png](Pink_Standard_Consumer_(1).png) *Pink_Standard_Consumer_(1).png* ![Pink_Standard_Consumer_(2).png](Pink_Standard_Consumer_(2).png) *Pink_Standard_Consumer_(2).png* ![Pink_Standard_Consumer_(3).png](Pink_Standard_Consumer_(3).png) *Pink_Standard_Consumer_(3).png*

Sign in with Klarna

On-site Messaging

Express Checkout

- **On-site Messaging**: Show contextual messaging let your customers know about the available payment options in pre-checkout: click [here](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/mobile-integration.md) to learn more. - **Sign in with Klarna**: Seamlessly identify and let users login via their Klarna account: click [here](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/on-site-messaging-for-mobile.md) to learn more. - **Express Checkout**: Accelerate your checkout process and boost conversion by offering a one-click checkout, click [here](https://docs.klarna.com/conversion-boosters/express-checkout/before-you-start.md) to learn more (Mobile SDK support available soon). Complete your integration with - [Order management](https://docs.klarna.com/payments/after-payments/order-management/before-you-start/what-is-order-management.md) - [Settlements](https://docs.klarna.com/payments/after-payments/settlements/settlement-files.md) - [End-to-end testing](https://docs.klarna.com/resources/developer-tools/testing-payments/test-cases.md) - [Prepare for go live](https://docs.klarna.com/resources/developer-tools/testing-payments/go-live-checklist.md)
--- # Source: https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/in-store-marketing.md # In-store marketing Elevate your retail game with Klarna In-Store, offering customers the flexibility to shop now and pay later right from your physical locations. Attract a new audience, increase sales, and build loyalty with Klarna's seamless payment solutions. By placing signage in high-visibility areas you're actively showcasing the benefits of combining your products with Klarna's payment methods. Capture your shoppers' attention. We're here to make it easy for you. Ordering your in-store signage is straightforward. Detailed instructions for registering an account and ordering signage to promote Klarna's flexible payment options are available [here](https://docs.klarna.com/in-store/for-merchants-start-selling-with-klarna-in-store/ordering-in-store-signage.md). --- # Source: https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/united-kingdom/influencer-promotion-rules.md # Source: https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/ireland/influencer-promotion-rules.md # Influencer promotion rules ## If you use social media influencers, bloggers, or other third parties to advertise Klarna and your business, there is more you need to know! When social media influencers, bloggers, or other individuals receive any type of payment to endorse or otherwise mention a product (called an **“endorsement”**), they are required to disclose the existence of the relationship on the post where the endorsement was made. The commercial relationship must be made clear and clearly labelled or identifiable as paid-for content. The relevant labels/ terms will vary depending on the type of relationship with the influencer, it is imperative to follow the Klarna marketing guideline and toolkit (links below).  For clarity we’ve included a brief summary of the Klarna approved terms below. Please note they should always be CAPITALISED and prominent. Positioning of the term varies depending on media platform and format, all details available in the Influencer marketing whitepaper. See below link for more information.  | Term | Definition | |----|----| | \[ADVERT\] | Paid deliverable with a level of editorial control by brand. Post featuring a gifted product whereby the influencer has had a monetary relationship with the brand in the last 12 months. | | \[AFFILIATE ADVERT\] | Financial benefit to the influencer. | | \[GIFTED\] | Organic gifting by brand.No editorial control. Not guaranteed to post. No previous monetary relationship in the last 12 months. | - Access the Influencer marketing whitepaper [here](https://www.klarna.com/assets/sites/3/2021/05/28131845/Final-Klarna-Influencer-Council-Whitepaper.pdf) - Access Klarna’s asset tool kit [here](https://drive.google.com/drive/u/0/folders/1bSY3p_CNzeWPuDHoJ1RiHAyog6A3dVr0) - Access Influencer council site [here](https://www.klarna.com/uk/the-influencer-council/) The guidance on the appropriate use of social media for BNPL product promotions is located [here](https://www.fca.org.uk/publication/finalised-guidance/fg15-04.pdf) for more information. --- # Source: https://docs.klarna.com/payments/in-store-payments/integrate-klarna-in-store/api-integration/initiate-an-in-store-payment.md # Initiate an in-store payment ## This guide walks you through initiating a payment and letting your customers pay with Klarna in your physical store. ## Start a payment session If you're an existing e-commerce partner, you may already be familiar with the [Klarna payments API](https://docs.klarna.com/api/payments/#operation/createCreditSession). The request and actions described in this guide use the same API, modified for the in-store scenario. To let your customer pay with Klarna in a physical store, start a new Klarna payments session by sending a `POST` request to the [`{apiURL}`](https://docs.klarna.com/api/api-urls/)`/payments/v1/sessions endpoint`. ### Sample request To start an in-store payment session, include the following in your request: - the `acquiring_channel` parameter set to `in_store` to indicate the payment will happen in a physical store - the `distribution` object, including the distribution method set to `one_qr` and the URL that will receive status updates A sample request to initiate an in-store payment session. ### With Short Code ``` json { "acquiring_channel": "in_store", "purchase_country": "SE", "purchase_currency": "SEK", "locale": "en-SE", "merchant_reference1": "ON4711", "order_amount": 18000, "order_tax_amount": 3000, "order_lines": [ { "image_url": "https://www.exampleobjects.com/logo.png", "type": "physical", "reference": "Could be a Product Id or SKU #", "name": "Cool Bike", "quantity": 1, "unit_price": 20000, "tax_rate": 2000, "total_amount": 18000, "total_discount_amount": 2000, "total_tax_amount": 3000 } ], "attachment": { "content_type": "application/vnd.klarna.internal.emd-v2+json", "body": "{\"in_store_payment\": [{\"store_info\": {\"merchant_store_id\":\"Example Shop\",\"store_terminal_id\":\"POS1232\",\"store_address\": {\"street_address\":\"drottninggatan\",\"street_number\":\"12\",\"postal_code\": \"23451\",\"city\": \"Stockholm\",\"country\": \"SE\"}}}]}" }, "distribution": { "method": "one_qr", "short_code": "2005", "callback_urls": { "status_update": "https://example.com/callback" } } } ``` ### Without short code ``` json { "acquiring_channel": "in_store", "purchase_country": "SE", "purchase_currency": "SEK", "locale": "en-SE", "merchant_reference1": "ON4711", "order_amount": 18000, "order_tax_amount": 3000, "order_lines": [ { "image_url": "https://www.exampleobjects.com/logo.png", "type": "physical", "reference": "Could be a Product Id or SKU #", "name": "Cool Bike", "quantity": 1, "unit_price": 20000, "tax_rate": 2000, "total_amount": 18000, "total_discount_amount": 2000, "total_tax_amount": 3000 } ], "attachment": { "content_type": "application/vnd.klarna.internal.emd-v2+json", "body": "{\"in_store_payment\": [{\"store_info\": {\"merchant_store_id\":\"Example Shop\",\"store_terminal_id\":\"POS1232\",\"store_address\": {\"street_address\":\"drottninggatan\",\"street_number\":\"12\",\"postal_code\": \"23451\",\"city\": \"Stockholm\",\"country\": \"SE\"}}}]}" }, "distribution": { "method": "one_qr", "callback_urls": { "status_update": "https://example.com/callback" } } } ``` ## Extra merchant data When initiating a payment session, it is required to send EMD as part of the request similar to the sample request. [This guide](https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/extra-merchant-data.md) describes how to send all \[:~:text=Array-,store_info,-object required EMD\] data in the request. ### Sending customer data In some cases, you might want to send billing address when creating a payment session in order to improve the payment experience at the point of sale, for example by pre-filling the checkout form with information that is already know and reducing the need for the customer to manually fill in all fields. ``` json { "acquiring_channel": "in_store", "purchase_country": "SE", "purchase_currency": "SEK", "locale": "en-SE", "merchant_reference1": "ON4711", "order_amount": 18000, "order_tax_amount": 3000, "order_lines": [ { "image_url": "https://www.exampleobjects.com/logo.png", "type": "physical", "reference": "Could be a Product Id or SKU #", "name": "Cool Bike", "quantity": 1, "unit_price": 20000, "tax_rate": 2000, "total_amount": 18000, "total_discount_amount": 2000, "total_tax_amount": 3000 } ], "attachment": { "content_type": "application/vnd.klarna.internal.emd-v2+json", "body": "{\"in_store_payment\": [{\"store_info\": {\"merchant_store_id\":\"Example Shop\",\"store_terminal_id\":\"POS1232\",\"store_address\": {\"street_address\":\"drottninggatan\",\"street_number\":\"12\",\"postal_code\": \"23451\",\"city\": \"Stockholm\",\"country\": \"SE\"}}}]}" }, "distribution": { "method": "one_qr", "short_code": "2005", "callback_urls": { "status_update": "https://example.com/callback" } }, "billing_address": { "attention": "Attn", "city": "Stockholm", "country": "SE", "email": "test.sam@test.com", "family_name": "Andersson", "given_name": "Sven", "organization_name": "string", "phone": "+46705465131", "postal_code": "12865", "region": "", "street_address": "Kungsgatan 45", "street_address2": "Floor 22 / Flat 2", "title": "Mr." } } ``` In this case, please include the following to send billing address. You can refer to [create a session](https://docs.klarna.com/api/payments/#operation/createCreditSession) for a full list of supported request information. - The billing_address object to send billing address information ## Distribution object | Parameter | Type | Required or optional | Description | |----|----|----|----| | `method` | string | | | | `short_code` | string | optional, populate only when short code is available | A numerical code consisting of 2–20 digits that links a payment session with the customer. The code is displayed on the customer’s device when they scan a static QR code. The cashier enters the code into the device at the till. Then, the short code is included in a POST request to the Klarna payments API. | | `callback_urls` | object | optional | Include this object if you want to use a webhook instead of polling to get the distribution result. | | `status_update` | string | optional | The URL to which the status updates will be sent. | ### Success response In response to your request, you receive: - `session_id`, a payment session identifier. - `payment_method_categories`, an array that lists the available payment methods. This information is returned by the API, but you don’t need to take any actions related to it. - the `distribution` object, containing `result_url` which needs to be called to receive the QR (link to Monitor the status page) ``` json { "session_id" : "{session_id}", "payment_method_categories": [ { "identifier": "klarna", "name": "Pay with Klarna", "asset_urls": { "descriptive": "https://x.klarnacdn.net/payment-method/…", "standard": "https://x.klarnacdn.net/payment-method/…" } } ], "distribution": { "result_url":"https://api.klarna.com/iss/v1/distributions/{session_id}" } } ``` *A sample success response to initiate an in-store payment session request.* ## Error handling The errors listed below can occur when you initialize a payment session, learn more in [Error handling guide](https://docs.klarna.com/resources/developer-tools/error-handling/error-codes-and-messages-for-klarna-payments.md). You can retrieve the error from the distribution result endpoint or by subscribing to a webhook. | Error code | Description | Action to take | |----|----|----| | `BAD_REQUEST` | The shortcode should be within the limits and integers only. Otherwise any of the fields needs to be in appropriate format. | Create request with an appropriate input | | `PERMISSION_DENIED` | API credentials are incorrect and permission is not available | Don’t retry the session and contact Klarna’s merchant support. | | `UNKNOWN` | System error | Don’t retry the session and contact Klarna’s merchant support. | --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/payments/installation.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/payments/installation.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/payments/installation.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/payments/installation.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/payments/installation.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/payments/installation.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/payments/installation.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/payments/installation.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/payments/installation.md # Installation of SAP Commerce Cloud Add-on ## This guide will help you install Klarna add-ons for SAP Commerce Suite to enable Klarna payment solutions. Follow the steps outlined below to ensure a successful installation. ### Installation steps #### Step 1: Download and unpack the add-on 1. **Download the add-on archive**: Obtain it from [Klarna’s GitHub repository](https://github.com/klarna/SAP-Commerce-klarna-payments). 2. **Unpack the archive**: Extract the contents and move these folders to `/bin/custom`: - `klarnapaymentaddon` - `klarnapayment` - `klarnapaymentapi` - `klarnapaymentbackoffice` - For B2B implementations, also include `klarnapaymentb2baddon`. #### Step 2: Update localextensions.xml 1\. **Verify existing extensions**: Ensure `addonsupport` is present: ``` xml ``` 2\. **Add Klarna extensions**: ``` xml ``` For B2B, add: ``` xml ``` #### Step 3: Stop the server and prepare the environment 1. **Stop the server**: - **Embedded mode**: Press `Ctrl+C`. - **Service mode**: - **Windows**: `hybrisserver.bat stop` - **Unix**: `./hybrisserver.sh stop` 2. **Set up the environment**: Navigate to `/bin/platform` and run: - **Windows**: `setantenv.bat` - **Unix**: `./setantenv.sh` #### Step 4: Install the add-on - For general installation: ``` xml ant addoninstall -Daddonnames="klarnapaymentaddon" -DaddonStorefront.yacceleratorstorefront="yacceleratorstorefront" ``` - For B2B installation: ``` xml ant addoninstall -Daddonnames="klarnapaymentb2baddon" -DaddonStorefront.yacceleratorstorefront="yb2bacceleratorstorefront" ``` **Note:** Depending on your SAP Commerce version, you might need to install `liveeditaddon` and `b2ccheckoutaddon`. Verify the storefront name for your project. ### Verification #### Confirm extensions in localextensions.xml Verify these extensions are present: - `addonsupport` - `klarnapaymentaddon` - `klarnapayment` - `klarnapaymentapi` - `klarnapaymentbackoffice` - For B2B: `klarnapaymentb2baddon` **Verify storefront integration:** Confirm the target storefront extension is listed. ### Configuration #### Callback URLs Add the following configurations to `project.properties` in the `klarnapayment` extension: - `klarnapayment.merchant.url.confirmation=`[`https://`](https://)`/klarna/order/confirmation` - `klarnapayment.merchant.url.notification=`[`https://`](https://)`/klarna/payment/checkout/pending-update` - `klarnacheckout.merchant.url.authorization=`[`https://`](https://)`/klarna/payment/auth-callback` For site-specific configurations: - `klarnapayment.merchant.url.confirmation.=`[`https://`](https://)`/klarna/order/confirmation`* - `klarnapayment.merchant.url.notification.=`[`https://`](https://)`/klarna/payment/checkout/pending-update`* - `klarnacheckout.merchant.url.authorization.``=`[`https://`](https://)`/klarna/payment/auth-callback` #### Skipping CSRF verification Add this to `local.properties`: ``` java csrf.allowed.url.patterns=/[^/]+(/[^?]*)+(sop/response)$,/[^/]+(/[^?]*)+(merchant_callback)$,/[^/]+(/[^?]*)+(hop/response)$,/[^/]+(/[^?]*)+(language)$,/[^/]+(/[^?]*)+(currency)$,/[^/]+(/[^?]*)+(push)$,/[^/]+(/[^?]*)+(pending-update)$,/[^/]+(/[^?]*)+(confirmation)$,/[^/]+(/[^?]*)+(auth-callback)$ ``` #### Email server settings Configure email settings in `local.properties`: ``` java mail.from= mail.replyto= mail.smtp.server= mail.smtp.port= mail.smtp.user= mail.smtp.password= mail.use.tls=true ``` #### User agent configuration For efficient support and issue identification we highly recommend to set user-agent and region-specific settings: shoporplatform= # Example: SAP_Comm platformversion= # Example: 1905 modulename= # Example: KP moduleversion= # Example: 9.0 #### Klarna Market and Klarna Region Configuration for site Configure the Market and the Region specific to each site: klarna.market.country.= # E.g. klarna.market.country.apparel-uk=GB klarna.market.region.= # E.g. klarna.market.region.apparel-uk=EU #### Currency Conversion If multiple currencies are applicable on the merchant site, ensure that the out-of-box settings for the conversion factor and delivery cost are properly configured. These values are used to send the cost in the purchased currency converted value to Klarna. Adjust these configurations based on your specific project requirements to ensure smooth operation and support from Klarna. #### Order Failed Notification When an order is successfully processed by Klarna but the placement fails in SAP, an email notification is sent to the merchant. The recipient's email address is configured in the Klarna settings within the back office. The email content for this notification is managed using the `FailedOrder_Email_Template.impex` file, located in `\klarnapayment\resources\klarnapayment\email_impex\`. This impex file must be loaded after the server starts. Merchants have the flexibility to modify the email content, specifically the CMS component `OrderFailedEmailBody`, either by editing the impex file or through the back office at a later time. #### Mandatory Code Changes ##### **Adding Klarna Payment Tag** Add this tag to the Merchant Payment JSP (e.g., `silentOrderPostPage.jsp`): ``` jsp <%@ taglib prefix="klarnapayment" tagdir="/WEB-INF/tags/addons/klarnapaymentaddon/responsive/" %> ... ``` ##### **Modifying CheckoutOrderSummary Tag** Update the `checkoutOrderSummary.tag` file to include: ``` jsp <%@ taglib prefix="klarnacheckout" tagdir="/WEB-INF/tags/addons/klarnapaymentaddon/responsive/checkout" %> ``` ##### **Customizing Payment Info Tag** If using a customized `paymentInfo.tag`, include hidden parameters from the add-on. ##### **Adding Date of Birth field** Include the following in `kpBillingAddressFormElements.tag`: ``` jsp
``` ##### **Updating JavaScript** - **Form names:** Modify `acc.klarnapayment.js` to match the form name on your page. Example: ``` javascript checkPaymentSelected: function () { klarnaData = {}; $("form input:radio[name='paymentMethod']").click(function () { var paymentMethod = $('input[type=radio][name=paymentMethod]:checked').val(); if (paymentMethod == 'card') { $('.submit_silentOrderPostForm').bind('click'); $('#klarna_container').empty(); $('#klarna_billing').hide(); $('#silentOrderPostForm').show(); ACC.silentorderpost.bindSubmitSilentOrderPostForm(); } else { $('#klarna_container').empty(); $('.submit_silentOrderPostForm').unbind('click'); ACC.klarnaPayment.bindPaymentsubmit(); $('#silentOrderPostForm').hide(); $('#klarna_billing').show(); kpUpdateSessionUrl = $("#updateSessionUrl").val(); getKlarnaFormUrl = $("#getKlarnaFormUrl").val(); paymentOption = paymentMethod; var clientToken = $("#clientToken").val(); ACC.klarnaPayment.getKlarnaPaymentForm(clientToken); } }); } ``` Example form name in s`ilentOrderPostPage.jsp`: ``` jsp ``` - **Submit Button Class:** Update the submit button class if it differs in your implementation. ``` javascript bindPaymentsubmit: function () { $('.submit_silentOrderPostForm').click(function () { // your logic here }); } ``` ##### **Updating Default Checkout URL** Modify the constant in `KlarnaPaymentActiveFilter`: ``` java public final static String DEFAULT_CHECKOUT_URL = "/checkout/multi/summary/placeOrder"; ``` ##### **B2B Implementation - Payment Type Selection** For B2B implementations using b2bacceleratoraddon, modify the paymentTypeForm.tag file to display Klarna Payment Type by replacing: ``` jsp ``` With: ``` jsp ``` ### Rebuild and update the system 1\. **Rebuild the system**: Navigate to `/bin/platform` and run: `ant clean all` 2. **Update the system**: ![Installation_of_SAP_Commerce_Cloud_Add-on_1736959658192.png](Installation_of_SAP_Commerce_Cloud_Add-on_1736959658192.png) *Installation_of_SAP_Commerce_Cloud_Add-on_1736959658192.png* - Open the Hybris Administration Console (HAC). - Go to **Platform\> Update**. - Under **General Settings**, select: - Update running system - Clear HMC configuration (for versions \< 5.7) - Create essential data - Localize types - Under **Project Data Settings**, check all Klarna extensions. - Click **Update** to apply changes. ### Unit Test Implementation #### JUnit Tests JUnit test classes are located in the `testsrc` folder of both the `klarnapayment` and `klarnapayment` extensions. Mock test classes for all supported Klarna API calls are available in the `klarnapaymentapi` extension. #### Integration Test The `KlarnaClientConnectionTest` integration test class is implemented in the `klarnapaymentapi` extension. This class is used to test the connection to the Klarna server after initial tests. **Steps:** 1. **Update Credentials**: Modify the `KlarnaClientConnectionTest` class with valid merchant test (playground) credentials. This helps identify any issues with authentication or payment session creation during server startup. 2. **Verify Connection**: Upon starting the server, look for the log message: `Klarna Integration Connection Test Successful`. This confirms that SAP Commerce has successfully connected to Klarna. 3. **Production Use**: If using this feature in production, ensure to remove the Klarna production API credentials from the test class to maintain security. ### Uninstalling the add-on #### **Step 1: Stop the SAP Commerce Server** If the server is running, stop it using one of the following methods: - **Windows:** Run `hybrisserver.bat stop` - **Unix/Linux:** Run `./hybrisserver.sh stop` Refer to the Installation section for additional details if needed. #### **Step 2: Set Up the Environment** Navigate to `/bin/platform` and run the appropriate environment setup script: - **Windows:** `setantenv.bat` - **Unix/Linux:** `./setantenv.sh` **Note:** This step is necessary only if the environment setup has not already been applied in the current terminal session. #### **Step 3: Uninstall the Add-on** Run the following command in `/bin/platform` to remove the add-on: #### Step 4: **Remove Extensions** 1. Open `/config/localextensions.xml`. 2. Delete the following lines: ``` xml ``` #### **Step 5: Delete Extension Folders** Remove the corresponding extension folders from `/bin/custom`: - `klarnapaymentaddon` - `klarnapayment` - `klarnapaymentapi` - `klarnapaymentbackoffice` #### **Step 6: Remove Payment Page References** 1. Open your payment page files. 2. Locate and delete the following lines: ``` jsp <%@ taglib prefix="klarnapayment" tagdir="/WEB-INF/tags/addons/klarnapaymentaddon/responsive/" %> ``` #### **Step 7: Rebuild and Restart the System** 1. Rebuild the system using the following command: `ant clean build` 2. Restart the SAP Commerce server. #### **Step 8: Update SAP Commerce** 1. Open a web browser and navigate to `HAC → Platform → Update`. 2. Under **General Settings**, check the following boxes: - Update running system - Clear the hMC configuration from the database - Create essential data - Localize types 3. Click the **Update** button to complete the process. ------------------------------------------------------------------------ ### Appendix #### Troubleshooting ##### **Verify Klarna configuration** Ensure the Klarna configuration is correctly set up for the current base store: - **Base Store Configuration:** - Verify that the Klarna configuration is correctly assigned to the active base store. - Confirm that the configuration is marked as **active**. - **Regional Settings:** - Check that the purchase country, language, and currency settings are valid for the selected base store. - Ensure these settings align with Klarna's supported regions. ##### **Resolve ItemType conflicts** Conflicts with `ItemType` definitions may occur in the latest versions of SAP Commerce (2005 and 2011), particularly based on the installation recipe. It is advised to review and adjust the ItemType definitions to resolve any conflicts. #### Klarna markets and regions table | | | | |----------------|------------------|------------| | **Market** | **Country Code** | **Region** | | Australia | AU | OC | | Austria | AT | EU | | Belgium | BE | EU | | Canada | CA | NA | | Czech Republic | CZ | EU | | Denmark | DK | EU | | Finland | FI | EU | | France | FR | EU | | Germany | DE | EU | | Greece | GR | EU | | Hungary | HU | EU | | Ireland | IE | EU | | Italy | IT | EU | | Mexico | MX | NA | | Netherlands | NL | EU | | New Zealand | NZ | OC | | Norway | NO | EU | | Poland | PL | EU | | Portugal | PT | EU | | Romania | RO | EU | | Slovakia | SK | EU | | Spain | ES | EU | | Sweden | SE | EU | | Switzerland | CH | EU | | United Kingdom | GB | EU | | United States | US | NA | ### Modifying the order confirmation email SAP Commerce sends an order confirmation email to customers once an order is placed. However, since Klarna handles payment instructions and notifications directly with the customer, it is recommended to customize the **Payment Details** section of the confirmation email to clarify the following points: 1. Payment has not been taken yet (except for Pay Now methods). 2. Customers will receive updates directly from Klarna. 3. Purchases and payments can be tracked via the Klarna App. Additionally, you can configure the payment method to display as **"Purchased with Klarna"** in the order confirmation email. To achieve this, follow these steps: #### **Step 1: Modify Email Template Message Properties** - Locate sample message properties in the following folder: `/klarnapaymentaddon/resources/klarnapaymentaddon/messages` - Modify existing properties or add new ones as needed. - Ensure the updated property file is included in the **EmailTemplate**. #### **Step 2: Edit the Email Template** **Using Backoffice:** 1. **Log in to Backoffice:** Use an administrator account to log in to Backoffice. 2. **Navigate to the Email Template:** - Go to **WCMS → Page Templates**. - Find and select the email template to modify. - Optionally, right-click and select **Edit in new window**. 3. **Edit the HTML Email Template:** - Select the **Email** tab. - Double-click on **Html Email Template**. 4. **Update HTML Content:** Modify the **Template Script** with the required Klarna-specific updates. ##### **Using HMC:** 1. **Log in to HMC:** Use an administrator account to log in to HMC. 2. **Navigate to the Email Template:** - Go to **WCMS → Page Templates**. - Find and select the email template to modify. - Optionally, right-click and select **Edit in new window**. 3. **Edit the HTML Email Template:** - Select the **Email** tab. - Right-click on **Html Email Template** and choose **Edit in new window**. 4. **Update HTML Content:** Modify the **Template Script** with the required changes to reflect the Klarna-specific instructions. 5. **Synchronize Changes:** - Navigate to **Catalog → Catalog Management Tools → Synchronization**. - Select the catalog version to synchronize. - Click **Next** and then **Start** to complete synchronization.
--- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/wix/payments/installing-klarna-payments-on-wix.md # Installing Klarna payments in Wix ## This article provides a step-by-step guide on installing Klarna payments in your Wix store. There are two ways to enable Klarna Payments on Wix: 1) By onboarding directly with Klarna and enabling Klarna as outlined below. 2) [By enabling Klarna in Wix Payments](https://support.wix.com/en/article/wix-payments-adding-klarna-as-a-payment-method) (only available for US merchants). To install Klarna as a payment provider in your Wix store, follow these three easy steps: 1. **Sign up with Klarna**: - a\. [Create a merchant account](https://portal.klarna.com/signup) and sign up with Klarna. 2. **Get and save your Klarna API credentials: ** - a\. Go to the **Settings** section in the [Merchant portal](https://auth.eu.portal.klarna.com/auth/realms/merchants/protocol/openid-connect/auth?client_id=merchant-portal&redirect_uri=https://portal.klarna.com/&state=fbfa3747-5417-4d8e-99b7-f52c7cc593ad&response_mode=fragment&response_type=code&scope=openid&nonce=b083feee-1d13-41ba-8f08-9f06a1e76428&code_challenge=XUC5Fu2cjqHWVcrVWP2OR2JD0JQ9zqsRGidwAFDaq_8&code_challenge_method=S256).  - b\. Download and open the file. The Klarna API credentials consist of a Username and password and you'll need them in the next step. ![ API keys consist of a username and password that will be needed to enable Klarna in Wix.](Zpd5vB5LeNNTxOTJ_image-74-.jpeg) *API keys consist of a username and password that will be needed to enable Klarna in Wix.* 1. **Connect Klarna to your Wix store:** - a\. Navigate to the **Accept Payments** tab within your dashboard settings. - b\. Click on **See More Payment Options\> Connect** next to **Klarna**. - c\. Enter your Klarna API credentials (username and password) and click on **Connect**. For detailed documentation of Klarna payments for Wix, see [here](https://support.wix.com/en/article/connecting-klarna-as-a-payment-provider). **In summary:** - To install Klarna payments in your Wix store, you need to log into the Klarna Merchant portal with your Klarna Merchant account. - Then, get and save your Klarna API credentials from the Merchant portal. - Finally, connect Klarna in your Wix store's dashboard settings. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/cartridge-installation/installing-on-sfra.md # Installing the cartridge on SFRA stores ## This guide provides detailed instructions to install the cartridge on Salesforce Commerce Cloud (SFCC) SFRA stores. The Klarna Payments LINK Cartridge contains two cartridges required for full functionality. Controller and SFRA support are separated into two distinct cartridges, facilitating the installation and use of either of the following models: - `int_klarna_payments`**int_klarna_payments**: Implements the core storefront functionality. - `int_klarna_payments_sfra`**int_klarna_payments_sfra**: Implements the storefront functionality with SFRA code. From version 24.5.0 of the cartridge SFRA 7 is supported. If you are using SFRA 6, additionally to the steps on this guide please make sure you modify the files specified in the [user guide](https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/before-you-start/user-guide.md). ## Setup of Business Manager ### Cartridge Upload & Assignment 1\. Import the `int_klarna_payments` cartridge into the SCC Studio Workspace: - In SFCC Studio, click **File\> Import\> General\> Existing Projects** into Workspace. - Browse to the directory where you saved the `int_klarna_payments` cartridge. - Click Finish. - Click OK when prompted to link the cartridge to the sandbox. 2\. Import the `int_klarna_payments_sfra` cartridge into the SCC Studio Workspace: - In SFCC Studio, click **File\> Import\> General\> Existing Projects** into Workspace. - Browse to the directory where you saved the `int_klarna_payments_sfra` cartridge. - Click Finish. - Click OK when prompted to link the cartridge to the sandbox. 3\. Prepend the Klarna cartridges to the effective site cartridge path: - Log into the SFCC Business Manager. - Click **Administration\> Sites\> Manage Sites**. - Select the desired site. - Click on the Settings tab. - Prepend `int_klarna_payments_sfra:int_klarna_payments` to the Cartridges field. - Click Apply. ![ Effective Cartridge Path](ZropmEaF0TcGI3gr_SFCC-Cartridgeuploadandassignment.jpeg) *Effective Cartridge Path* ### Metadata Import 1. Go to the main directory **metadata** folder, review the site-template content, and edit if needed. (*The site template is prepared to set up “SiteGenesis” and “RefArch” sites. You may want to change that to your actual sites and delete the ones that are not needed.*) 2. Zip the directory to create the `site-template.zip` installation package. 3. Log into the SFCC Business Manager. 4. Click **Administration\> Sites Development\> Site Import & Export**. 5. Browse to the directory where you saved the `site-template.zip`. 6. Click **Upload**. 7. Select the uploaded site zip and click **Import**. Review the default `service.xml` file in the `site-template.zip` and update the configuration for ***Playground*** and***Production*** accordingly before importing. ### Build Klarna JS & CSS Update the path to your base SFRA installation in the `package.json` file from the same root folder if necessary. ``` javascript /** * Call Credit Card Authorization Hook (for VCN settlement) * @param {dw.order.order}.ord ``` **Example Path Configuration** Ensure the correct path to the SFRA cartridge is configured. Run the following commands from the root folder of the Klarna repository: - `npm run compile:scss` to compile the SCSS files. - `npm run compile:js` to build the Klarna-specific JavaScript files. ## Configuration As of version 24.4.0, the cartridge configuration process has changed. If you are using a version older than 24.4.0, please refer to the **Deprecated Features** section of the **[Changelog](https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/before-you-start/changelog.md)** for detailed information on the configuration changes. ### Single Klarna API Credentials per Site 1. Click **Merchant Tools\> Site Preferences\> Custom Preferences\> Klarna Activation** 2. Enter `client_id` to activate OSM and KEC. 3. Enter API Username and password. 4. Select the region where your site operates. 5. Select the markets on which Klarna should be available. 6. To select the Klarna environment, in the field **Run plugin in test mode** - select ***yes*** for playground or***no*** for production. ![ Klarna activation site preference](Zroya0aF0TcGI3kz_SFCC-ConfigureKlarnaActivationsitepreferenceforsingleKlarnaAPIcredentialspersite.jpeg) *Klarna activation site preference* ### Multiple Klarna API Credentials per Site 1. In SFCC Business Manager, click **Merchant Tools\> Custom Objects\> Custom Object Editor**. 2. Set the **Object Type** dropdown to **Klarna Activation.** 3. Enter**Klarna activation key**, this will be the name of the custom object, we recommend using a name meaningful to you, easy to identify. 4. Enter the required fields as mentioned in the **Klarna Activation** section. 5. Repeat for the other regions or markets as necessary. ![ Klarna Activation Custom Object](Zro0dUaF0TcGI3lw_SFCC-KlarnaActivationCustomobject.jpeg) *Klarna Activation Custom Object* ## Extended Controllers | Controller | Start Node | Remarks | |----|----|----| | `Checkout.js` | `Begin` | Extended to call Klarna session manager | | `CheckoutServices.js` | `Get,` `SubmitPayment,` `PlaceOrder` | Klarna payment method/category and totals are being stored | | `CheckoutShippingServices.js` | `SubmitShipping, ToggleMultiShipping` | Calling the Klarna session manager | | `Order.js` | `Confirm` | Extending Klarna order data to view data | ## Template Updates The templates have been updated to support On-site Messaging and Address Forms for Klarna. These templates are intended for reference, but you can customize them to suit your specific needs. Please ensure that the final review and sign-off align with your project requirements and contractual agreements. ## Jobs ### Job “OrderCleanUp” (Optional) This one-time clean-up job is applicable only to merchants integrated with Klarna Payments cartridge version earlier than 19.1.6, utilizing (or previously used) virtual card-based settlement (VCN) and stored decrypted card details within Business Manager. The job iterates over orders with status `Exported` and the attribute `custom.kpIsVCN=true` to remove sensitive details saved in fields `kpVCNPAN`, `kpVCNCSC`, `kpVCNExpirationMonth`, and `kpVCNExpirationYear` from previous releases. No parameters are passed to the script. Upon successful run, the job logs the result of processed orders in the custom debug log located in `webdav/Sites/Logs`. You will receive a message indicating the processed orders count for each storefront or a message indicating that there are no orders needing update. In case of an error, the cause of the failure (message and stack trace) will be logged in the standard error log. ### Setting Up a Job Step by Step: Ensure that you have access to the SFCC Business Manager and that the `jobs.xml` configuration file is prepared and accessible. ### Import the Job Configuration (1) Log into the SFCC Business Manager, and go to **Administration\> Operations\> Import & Export**. Click on the Import button, and browse for the `jobs.xml` file and select it for import. ![ Job Steps](Zr3KykaF0TcGI89-_image-4-.jpeg) *Job Steps* The default scope included in the XML file is for RefArch. If you have multiple sites using this functionality, you need to configure each site as a separate flow within this file. ### Add a Sequential Flow (2) After the job import is complete, navigate to the flow section within the job, and scroll down to the bottom of the current flow. Click on the **Add a sequential flow** button. This action will create a new flow under the current job configuration. ![ Add a new job](Zr3LA0aF0TcGI8-D_image-5-.jpeg) *Add a new job* ### Configure the Job Step (3) In the newly added flow, click on the **Configure** a step button. When the flyout appears, search for the term **script**, and select the `ExecuteScriptModule` from the list. ![ Configure Step](Zr3LkkaF0TcGI8-g_image-6-.jpeg) *Configure Step* ### Populate the Step Fields (4) Enter the step details: - **ID**: Provide a meaningful and unique name for this job step. Ensure that the name is unique across all flows to avoid saving errors. - **ExecuteScriptModule.Module**: Specify the location of the `OrderCleanUpJob.js` file. The default path is `int_klarna_payments/cartridge/scripts/job/OrderCleanUpJob.js`, but this can vary depending on where the script is placed. - **ExecuteScriptModule.FunctionName**: Leave this field as execute. Click on the **Assign** button to save the step configuration. ![  Configure step content](Zr3MJkaF0TcGI8-8_image-7-.jpeg) *Configure step content* ### Assign to the Correct Site Scope (5) - **Select the Site Scope:**Click on **Organization** within the step configuration flyout, and choose **Specific Sites** from the drop-down menu. - **Assign to the Relevant Site:**From the list of sites, select the appropriate site ID (e.g., SiteGenesisGlobal), and click on **Assign** to apply the configuration to the selected site. ![ Job scope content](Zr3MvUaF0TcGI8_f_image-9-.jpeg) *Job scope content* Repeat steps 1-5 for each site/storefront that you have using Klarna VCN and need additional configuration. This ensures that the clean-up job runs for all relevant sites and removes sensitive data as required. ### Job “RecurringOrders” The `RecurringOrders` job is designed to process subscription entries for all customers. The job performs the following functions: - **Eligibility Check**: It verifies that the subscription is enabled and that either the `nextChargeDate` or `nextRetryDate` matches the current date. - **Order Creation**: It creates new Salesforce Commerce Cloud (SFCC) orders for eligible subscriptions, replacing the old ones. - **Trial Period Handling**: It processes orders with expiring trial periods for charges. **Configuration** By default, the job is set to run on the **RefArch** site, as specified in the `jobs.xml` file. This setting can be modified either in the `jobs.xml` file or through the storefront configuration. The job consists of a single step, `createOrder`, with the following configuration: - **ExecuteScriptModule.Module**: `int_klarna_payments/cartridge/scripts/job/RecurringOrdersJob.js` - **ExecuteScriptModule.FunctionName**: `execute` The job operates at site level. Ensure your configuration matches these details to maintain the proper functionality of the RecurringOrders job. ![ RecurringOrders Job](ZrzWzkaF0TcGI7xs_SFCC-RecurringOrdersJobs.jpeg) *RecurringOrders Job* ## Custom Code The Storefront Reference Architecture (SFRA) does not require modifications to the core cartridge to enable any of the LINK integration cartridges. The `int_klarna_payments_sfra` cartridge follows Salesforce's best practices. Below are two cases where changes may be applicable: ### checkout.js (Optional) **app_storefront_base\cartridge\client\default\js\checkout\checkout.js** After placing an order, every customer is redirected to Klarna and then sent back to the site with the order confirmation page. To prevent sending any additional URL parameters to Klarna, follow these steps: ![ Changes in checkout.js](ZrzXW0aF0TcGI7x9_SFCC-Changesincheckout.jpeg) *Changes in checkout.js* ### cart.js (Required) **app_storefront_base\cartridge\client\default\js\cart\cart.js** To get updates for the cart On-Site Messaging (OSM) widget, make the following changes in cart.js or in your app cartridge. In the updateCartTotals(data) function, add the following code at the bottom: ``` javascript if (data.totals.klarnaTotal) { $('klarna-placement').attr('data-purchase-amount', data.totals.klarnaTotal); if (window.Klarna && window.Klarna.OnsiteMessaging) { window.Klarna.OnsiteMessaging.refresh(); } } ``` ![ Changes in cart.js](ZrzYCEaF0TcGI7yi_SFCC-Changesincart.jpeg) *Changes in cart.js* Ensure these modifications are implemented to maintain proper integration with Klarna's services. ### **int*klarna_payments\cartridge\scripts\subscription\subscriptionHelperExtension.js*** #### `getPaymentIntent()` Merchants can extend the `getPaymentIntent()` function to implement their own logic for setting the payment intent, taking into account trial/non-trial and standard products in the basket. ![getPayment()](getPayment().png) *getPayment()* #### `buildItemSubscriptionObj()` Merchants can extend the function `buildItemSubscriptionObj()` function to implement their own logic for identifying subscription products and subsequently creating the subscription object, which should then be included in the order lines object. ![buildItemSubscriptionObj()](buildItemSubscriptionObj().png) *buildItemSubscriptionObj()* #### `getLineItemSubscriptionData()` Merchants can extend the function getLineItemSubscriptionData() function to implement their own logic for retrieving the line item subscription products. ![getLineItemSubscriptionData()](getLineItemSubscriptionData().png) *getLineItemSubscriptionData()* ## Integration with Other Payment Cartridges This section is relevant if there are other payment cartridge integrations within the cartridge path besides Klarna Payments SFRA. Regardless of the order of those cartridges in the cartridge path, certain templates need to be overwritten by adding a new if condition and including the correct sub-template. The templates that require modifications are: - `\templates\default\checkout\billing\paymentOptions\paymentOptionsContent.isml` - `\templates\default\checkout\billing\paymentOptions\paymentOptionsSummary.isml` - `\templates\default\checkout\billing\paymentOptions\paymentOptionsTabs.isml` If the website owner requires PayPal as well as Klarna, each of these templates must be copied to a new custom cartridge. The example below shows the new code for the `paymentOptionsContent.isml` template: ``` markdown ... ``` The same applies to the other two templates (`paymentOptionsSummary.isml` and `paymentOptionsTabs.isml`). ## External Interfaces All requests are made through Klarna’s REST API and are encrypted using SHA-256 with the shared secret provided by Klarna. Only HTTPS is allowed, and JSON is used for all communications. For a full reference guide, along with the resource structure for requests and responses, refer to \[ Klarna Payments API\]. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/cartridge-installation/installing-on-sitegenesis.md # Installing the cartridge on SiteGenesis Stores ## This guide provides detailed instructions to install the cartridge on Salesforce Commerce Cloud (SFCC) SiteGenesis stores. The Klarna Payments LINK Cartridge contains two cartridges required for full functionality. Controller and SiteGenesis support are separated into two distinct cartridges, facilitating the installation and use of either model: - `int_klarna_payments`**int_klarna_payments**: Implements the core storefront functionality. - `int_klarna_payments_controllers`**int_klarna_payments_controllers**: Implements the storefront functionality with SG code. ## Setup of business manager ### Cartridge upload and assignment 1\. Import the `int_klarna_payments` cartridge into the SCC Studio Workspace: - In SFCC Studio, click **File\> Import\> General\> Existing Projects** into Workspace. - Browse to the directory where you saved the `int_klarna_payments` cartridge. - Click Finish. - Click OK when prompted to link the cartridge to the sandbox. 2\. Import the `int_klarna_payments_controllers` cartridge into the SCC Studio Workspace: - In SFCC Studio, click **File\> Import\> General\> Existing Projects** into Workspace. - Browse to the directory where you saved the `int_klarna_payments_controllers` cartridge. - Click Finish. - Click OK when prompted to link the cartridge to the sandbox. 3\. Prepend the Klarna cartridges to the effective site cartridge path: - Log into the SFCC Business Manager. - Click **Administration\> Sites\> Manage Sites**. - Select the desired site. - Click on the Settings tab. - Prepend `int_klarna_payments_controllers:int_klarna_payments` to the Cartridges field. - Click Apply. ![ Effective Cartridge Path](ZropmEaF0TcGI3gr_SFCC-Cartridgeuploadandassignment.jpeg) *Effective Cartridge Path* ### Metadata import 1. Go to the main directory **metadata** folder, review the site-template content, and edit if needed. (*The site template is prepared to set up “SiteGenesis” and “RefArch” sites. You may want to change that to your actual sites and delete the ones that are not needed.*) 2. Zip the directory to create the `site-template.zip` installation package. 3. Log into the SFCC Business Manager. 4. Click **Administration\> Sites Development\> Site Import & Export**. 5. Browse to the directory where you saved the `site-template.zip`. 6. Click **Upload**. 7. Select the uploaded site zip and click **Import**. Review the default `service.xml` file in the `site-template.zip` and update the configuration for ***Playground*** and***Production*** accordingly before importing. ## Configuration As of version 24.4.0, the cartridge configuration process has changed. If you are using a version older than 24.4.0, please refer to the **Deprecated Features** section of the **[Changelog](https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/before-you-start/changelog.md)** for detailed information on the configuration changes. ### Single Klarna API credentials per site 1. Click **Merchant Tools\> Site Preferences\> Custom Preferences\> Klarna Activation** 2. Enter `client_id` to activate OSM and KEC. 3. Enter API Username and password. 4. Select the region where your site operates. 5. Select the markets on which Klarna should be available. 6. To select the Klarna environment, in the field **Run plugin in test mode** - select ***yes*** for playground or***no*** for production ![ Klarna activation site preference](Zroya0aF0TcGI3kz_SFCC-ConfigureKlarnaActivationsitepreferenceforsingleKlarnaAPIcredentialspersite.jpeg) *Klarna activation site preference* ### Multiple Klarna API credentials per site 1. In SFCC Business Manager, click **Merchant Tools\> Custom Objects\> Custom Object Editor**. 2. Set the **Object Type** dropdown to **Klarna Activation.** 3. Enter**Klarna activation key**, this will be the name of the custom object, we recommend using a name meaningful to you, easy to identify. 4. Enter the required fields as mentioned in the **Klarna Activation** section. 5. Repeat for the other regions or markets as necessary. ![ Klarna Activation Custom Object](Zro0dUaF0TcGI3lw_SFCC-KlarnaActivationCustomobject.jpeg) *Klarna Activation Custom Object* ## Extended controllers | Controller | Start Node | Remarks | |----|----|----| | `Checkout.js` | `Begin` | Extended to call Klarna session manager | | `CheckoutServices.js` | `Get,` `SubmitPayment,` `PlaceOrder` | Klarna payment method/category and totals are being stored | | `CheckoutShippingServices.js` | `SubmitShipping, ToggleMultiShipping` | Calling the Klarna session manager | | `Order.js` | `Confirm` | Extending Klarna order data to view data | ## Template updates The templates have been updated to support On-site Messaging and Address Forms for Klarna. These templates are intended for reference, but you can customize them to suit your specific needs. Please ensure that the final review and sign-off align with your project requirements and contractual agreements. ## Jobs ### Job “OrderCleanUp” (Optional) This one-time clean-up job is applicable only to merchants integrated with Klarna Payments cartridge version earlier than 19.1.6, utilizing (or previously used) virtual card-based settlement (VCN) and stored decrypted card details within Business Manager. The job iterates over orders with status `Exported` and the attribute `custom.kpIsVCN=true` to remove sensitive details saved in fields `kpVCNPAN`, `kpVCNCSC`, `kpVCNExpirationMonth`, and `kpVCNExpirationYear` from previous releases. No parameters are passed to the script. Upon successful run, the job logs the result of processed orders in the custom debug log located in `webdav/Sites/Logs`. You will receive a message indicating the processed orders count for each storefront or a message indicating that there are no orders needing update. In case of an error, the cause of the failure (message and stack trace) will be logged in the standard error log. ### Setting up a job step by step: Ensure that you have access to the SFCC Business Manager and that the `jobs.xml` configuration file is prepared and accessible. ### Import the job configuration (1) Log into the SFCC Business Manager, and go to **Administration\> Operations\> Import & Export**. Click on the Import button, and browse for the `jobs.xml` file and select it for import. ![ Job Steps](Zr3KykaF0TcGI89-_image-4-.jpeg) *Job Steps* The default scope included in the XML file is for RefArch. If you have multiple sites using this functionality, you need to configure each site as a separate flow within this file. ### Add a sequential flow (2) After the job import is complete, navigate to the flow section within the job, and scroll down to the bottom of the current flow. Click on the **Add a sequential flow** button. This action will create a new flow under the current job configuration. ![ Add a new job](Zr3LA0aF0TcGI8-D_image-5-.jpeg) *Add a new job* ### Configure the job step (3) In the newly added flow, click on the **Configure** a step button. When the flyout appears, search for the term **script**, and select the `ExecuteScriptModule` from the list. ![ Configure Step](Zr3LkkaF0TcGI8-g_image-6-.jpeg) *Configure Step* ### Populate the step fields (4) Enter the step details: - **ID**: Provide a meaningful and unique name for this job step. Ensure that the name is unique across all flows to avoid saving errors. - **ExecuteScriptModule.Module**: Specify the location of the `OrderCleanUpJob.js` file. The default path is `int_klarna_payments/cartridge/scripts/job/OrderCleanUpJob.js`, but this can vary depending on where the script is placed. - **ExecuteScriptModule.FunctionName**: Leave this field as execute. Click on the **Assign** button to save the step configuration. \[\[ - Configure Step content\|center\|thumb\| `Configure step content]]` ### Assign to the correct site scope (5) - **Select the Site Scope:**Click on **Organization** within the step configuration flyout, and choose **Specific Sites** from the drop-down menu. - **Assign to the Relevant Site:**From the list of sites, select the appropriate site ID (e.g., SiteGenesisGlobal), and click on **Assign** to apply the configuration to the selected site. ![ Job scope content](Zr3MvUaF0TcGI8_f_image-9-.jpeg) *Job scope content* Repeat steps 1-5 for each site/storefront that you have using Klarna VCN and need additional configuration. This ensures that the clean-up job runs for all relevant sites and removes sensitive data as required. ### The job RecurringOrders The `RecurringOrders` job is designed to process subscription entries for all customers. The job performs the following functions: - **Eligibility Check**: It verifies that the subscription is enabled and that either the `nextChargeDate` or `nextRetryDate` matches the current date. - **Order Creation**: It creates new Salesforce Commerce Cloud (SFCC) orders for eligible subscriptions, replacing the old ones. - **Trial Period Handling**: It processes orders with expiring trial periods for charges. **Configuration** By default, the job is set to run on the **RefArch** site, as specified in the `jobs.xml` file. This setting can be modified either in the `jobs.xml` file or through the storefront configuration. The job consists of a single step, `createOrder`, with the following configuration: - **ExecuteScriptModule.Module**: `int_klarna_payments/cartridge/scripts/job/RecurringOrdersJob.js` - **ExecuteScriptModule.FunctionName**: `execute` The job operates at site level. Ensure your configuration matches these details to maintain the proper functionality of the RecurringOrders job. ![ RecurringOrders Job](ZrzWzkaF0TcGI7xs_SFCC-RecurringOrdersJobs.jpeg) *RecurringOrders Job* ## Custom code Integration may vary based on the storefront version. Site Genesis version 105.0.0 is used as a reference to demonstrate Klarna integration. ### Template modifications The following template changes should be made regardless of whether a controller or a pipeline integration approach are being used: - `default/checkout/summary/summary.isml` - `default/checkout/billing/billing.isml` - `default/checkout/billing/paymentmethods.isml` - `default/checkout/shipping/minishipments.isml` - `default/components/header/header.isml` - `default/components/footer/footer.isml` - `default/components/footer/footer_UI.isml` - `default/product/producttopcontentPS.isml` - `default/product/productcontent.isml` - `default/product/productcontent.isml` - `default/checkout/cart/cart.isml` - `default/mail/orderconfirmation.isml` - `default/components/order/ordrdetailsemail.isml` - `default/checkout/cart/minicart.isml` - `js/pages/cart.js 79` - `default/checkout/shipping/singleshipping.isml 82` - `scripts/cart/ValidateCartForCheckout.js 83` - `scripts/util/Resource.ds 84` - `js/pages/account.js 84` - `default/account/orders.isml 87` - `default/checkout/components/minicheckout_address.isml 87` - `js/minicart.js` #### default/checkout/summary/summary.isml Add the following code before the closing tag at the end of the file: ``` markdown ```isml \``` ``` ![ Modifications in summary.isml](Zr4p-0aF0TcGI951_SFCC-Modificationsinsummary.jpeg) *Modifications in summary.isml* Update the condition on line 232, for the finalize script include: ``` markdown ```isml \``` ``` ![ Modifications in summary.isml content](Zr4q3kaF0TcGI96d_sfcc-Modificationsinsummary.jpeg) *Modifications in summary.isml content* Ensure the updated condition for the finalize script is applied correctly to handle both the finalize and express checkout scenarios. #### default/checkout/billing/billing.isml Add the following code before the closing tag at the end of the file: ``` markdown ```isml \``` ``` ![ Modifications to billing.isml](ZsMhMUaF0TcGJDNQ_SFCC-billingisml.jpeg) *Modifications to billing.isml* #### default/checkout/billing/paymentmethods.isml Add the following code after `
hide
\``` ``` ![ Modifications to paymentmethods.isml](ZsMhvEaF0TcGJDNb_SFCC-Modificationsinpaymentmethods.jpeg) *Modifications to paymentmethods.isml* Add the following code after the tag, close to line 28: ``` markdown ```isml \``` ``` ![ Modifications to paymentmethods.isml content](ZsMiFUaF0TcGJDNl_SFCC-Modificationsinpaymentmethods.jpeg) *Modifications to paymentmethods.isml content* Add the following code before the closing tag, close to line 150: ``` markdown ```isml Klarna Payments -------------------------------------------------------- \``` ``` ![ Modifications in paymentmethods.isml content](ZsMl20aF0TcGJDPc_SFCC-Modificationsinminishipments.jpeg) *Modifications in paymentmethods.isml content* #### default/checkout/shipping/minishipments.isml To integrate Klarna Payments into the `minishipments.isml` file, follow these steps: Add the following code at the beginning of the `minishipments.isml` file. This step includes the necessary Klarna Payments modules for the mini shipments template. ``` markdown ```isml \``` ``` ![ Modifications to paymentmethods.isml](ZsMkLEaF0TcGJDOd_SFCC-Modificationsinpaymentmethods.jpeg) *Modifications to paymentmethods.isml* After the line containing,add the code below. This step adds the Klarna Payment Address Helper, which manages the shipment and shipping address. ``` markdown ```isml \``` ``` ![ Modifications to minishipments.isml content](ZsM3aEaF0TcGJDfB_SFCC-Modificationsinminishipments.jpeg) *Modifications to minishipments.isml content* #### default/components/header/header.isml Add the following code before the script tag: ``` markdown ```isml \``` ``` #### default/components/footer/footer.isml Add the following code right after the end tag and before the tag: ``` markdown ```isml
--- # Source: https://docs.klarna.com/conversion-boosters/express-checkout/integrate-express-checkout/integrate-multistep-express-checkout.md # Integrate multistep Express checkout ## Learn how to integrate the multistep Express checkout to support more robust checkout options. Follow the web integration guide to add the multistep Express checkout to your website. Not sure if the multistep checkout is the best option for your store? Refer to the [Before you start](https://docs.klarna.com/conversion-boosters/express-checkout/before-you-start/) article to make sure you offer your customers the best checkout experience. ## Overview  The process of creating a multistep Express checkout consists of six main steps: 1. Initializing and display the Express checkout button 2. Handling the authorization response 3. Initializing Klarna payments JavaScript SDK in checkout 4. Finalizing the authorization 5. Handling finalization callback 6. Creating an order ## Integration steps ### 1. Initialize and display the Express checkout button Load the Klarna payments JavaScript library when the cart page or a product detail page is loaded. Ensure the library is included only once to prevent conflicts. ``` html ``` Then, implement the `klarnaAsyncCallback` function where you initialize the Express checkout. Implement the `klarnaAsyncCallback` before importing the library. This way you ensure it will be invoked when the library is loaded. Within `klarnaAsyncCallback`,include the logic to:  1. Initialize Klarna’s JavaScript SDK providing your client identifier as `client_id`, get your `client_id` from the Merchant portal. Refer to the [Before you start](https://docs.klarna.com/conversion-boosters/express-checkout/before-you-start/) article for instructions on how to generate your client_id. 2. Load the button in a chosen container using a `load()` function. To help debug any issues that occur when loading the button, implement the [`load()` callback](https://docs.klarna.com/conversion-boosters/express-checkout/integrate-express-checkout/integrate-multistep-express-checkout/#responses). 3. Handle the `on_click` event, in which you start the payment authorization process by calling the `authorize()` function. Keep the following best practices in mind: - When initiating the authorization, make sure that the format of the `orderPayload` is the same as the body of the request [to create a Klarna payments session.](https://docs.klarna.com/api/payments/#operation/createCreditSession)  - Avoid having multiple nested asynchronous calls before invoking authorization. The `orderPayload` object can contain all information allowed in the [Klarna payments API](https://docs.klarna.com/api/payments/#operation/createCreditSession), for example, merchant references, merchant URLs, or extra merchant data.  Here’s an example of code that initializes the Klarna JavaScript library and renders the Express checkout button on a cart or a product detail page: ``` html ``` The table below lists the attributes of the `load()` function’s configuration object. | Attribute | Required | Description | |---------|--------|-----------| | `container` | Yes | `container` represents the location where you want the Express checkout button to be displayed. In this attribute, you can specify either: * aCSS selector, for example,#my-component-id,.my-component-class * anelement-type object directly, for example,document.createElement('div') | | `on_click` | Yes | The function passed in this attribute will be executed when the Express checkout button is clicked. It will receive the `authorize()` function, which has to be invoked to start the Express checkout flow. The `authorize()` function acts similarly to `authorize()` in a standard [ Klarna payments] integration. | | `theme` | No | The [color theme](https://docs.klarna.com/conversion-boosters/express-checkout/additional-resources/button-styling/#theme) of the button. The possible values are `default` , `light` , and `dark` . If the value isn't specified, `default` is used. | | `shape` | No | The [shape](https://docs.klarna.com/express-checkout/additional-resources/button-styling/#button-shape#button-shape) of the button. The possible values are `default` , `rect` , and `pill` . If the value isn't specified, `default` is used. | | `locale` | No | The language of the button text. If not specified, the browser's language will be used. | The value of locale passed in the `authorize()` function’s configuration object defines the language of the button text. On the other hand, the value of [locale](https://docs.klarna.com/api/payments/#operation/createCreditSession!path=locale&t=request) passed to `authorize()` inside the `orderPayload` defines the language of the purchase flow. Learn more about [locale formats](https://docs.klarna.com/api/data-types/#locale--country) in Klarna APIs. The table below lists the attributes for the `authorize()` function’s configuration object. | Attribute | Required | Description | |----|----|----| | `collect_shipping_address` | Yes | Informs Express checkout whether you need the customer's shipping address from Klarna.  The default value is `false`. | | `auto_finalize` | No | Allows you to specify whether the authorization should automatically be finalized when the user clicks the Express button. In multistep Express checkout, make sure to always set `auto_finalize` to `false` to keep the authorization process open until the purchase is finalized. The default value is `true`. | #### Create the payment session on your backend to better align with your app's design (optional) If creating the session server-side better fits your app’s architecture, follow these steps: 1. Create a new [Payment session](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-1-initiate-a-payment/) 2. Provide the `client_token` receive in the [create session response](https://docs.klarna.com/api/payments/#operation/createCreditSession!c=200&path=client_token&t=response) to the `Klarna.Payments.Buttons.init` function. 3. You don't have to provide order details in the `authorize` function. 4. The rest of the implementation stays the same. ``` html ``` **You can programmatically start the flow if you prefer to render your own button for better alignment with your other Express checkout buttons.** ``` javascript window.klarnaAsyncCallback = function () { window.Klarna.Payments.Buttons.init({ client_id: '', }).authorize( { collect_shipping_address: true, auto_finalize: true, }, order_payload, (result) => { // The result, if successful, contains authorization_token. } ); } ``` ### 2. Handle the authorization response  In the multistep checkout, after the customer completes the first step, you’ll receive the `authorize()` call response with the `finalize_required` flag set to `true` and the `client_token` necessary to resume the authorization at checkout.  Redirect the customer to the checkout and pre-fill all necessary fields with the customer data returned in the authorize() response call. ``` javascript { "show_form": true, "approved": true, "finalize_required": true, "client_token": "1eddf502-f3a0-45bf-b1fd-f2e3a2758200", "session_id": "e4b81ca2-0aae-4c16-bcb2-29a0a088a35b", "collected_shipping_address": { // if collect_shipping_address was set to true "attention": "Attn", "city": "London", "country": "GB", "email": "test.sam@test.com", "family_name": "Andersson", "given_name": "Adam", "organization_name": "string", "phone": "+44795465131" }, "payment_method_categories": [ { "asset_urls": { "descriptive": "https://x.klarnacdn.net/payment-method/assets/badges/generic/klarna.svg", "standard": "https://x.klarnacdn.net/payment-method/assets/badges/generic/klarna.svg" }, "identifier": "pay_now", "name": "Pay now" }, { "asset_urls": { "descriptive": "https://x.klarnacdn.net/payment-method/assets/badges/generic/klarna.svg", "standard": "https://x.klarnacdn.net/payment-method/assets/badges/generic/klarna.svg" }, "identifier": "pay_later", "name": "Pay in 30 days" } ] } ``` An example of a response from the client-side authorize() call. ### 3. Initialize Klarna payments JavaScript SDK in checkout When the customer navigates to another page or reloads the current one, you need to initialize the Klarna payments library with the `client_token` you got from the authorization response. This will keep the authorized session open. ``` javascript ``` An example of Klarna's JavaScript SDK and a call that initializes the SDK on the checkout page. ### 4. Finalize the authorization To authorize the purchase, you need the `authorization_token`. To get the `authorization_token`, call the `Klarna.Payments.finalize()`\[ Klarna.Payments.finalize()\] function during the final purchase step.  If changes were made in the order payload, for example, to the order amount or shipping address, you have to submit them when calling `Klarna.Payments.finalize()`. ``` javascript Klarna.Payments.finalize({}, orderPayload, function (res) { // res = { // show_form: true, // approved: true, // authorization_token: "b4bd3423-24e3", // collected_shipping_address: {...} // } }); ``` An example of a `Klarna.Payments.finalize()` call. ### 5. Handle the finalization callback If the purchase is authorized successfully, you’ll receive the `authorization_token` in the client-side `finalize()` response, the [authorization callback](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/other-actions/authorization-callback/), or by [getting the payment details from Klarna payments API.](https://docs.klarna.com/api/payments/#operation/readCreditSession) You need the `authorization_token` to create an order in the final step. Here’s an example of a response from the client-side `authorize()` function: ``` javascript { "show_form": true, "approved": true, "finalize_required": false, "authorization_token": "0eb73d2c-d55a-5358-9080-ddc3903e3941", "session_id": "e4b81ca2-0aae-4c16-bcb2-29a0a088a35b", } ``` ​Here’s an example of a response from the authorization callback: ``` javascript { "authorization_token": "1eddf502-f3a0-45bf-b1fd-f2e3a2758200", "session_id": "e4b81ca2-0aae-4c16-bcb2-29a0a088a35b", } ``` ### 6. Create an order Once you have the `authorization_token`, [create the order](https://docs.klarna.com/api/payments/#operation/createOrder). When creating the order, make sure the order payload is the same as the one sent in the `finalize()` call. --- # Source: https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging.md # Integrate On-site messaging ## Learn how you can add On-site messaging. Get a glimpse of what each integration option offers and start implementing. ## Integration with e-commerce platforms plugins You can also use On-site messaging to promote Klarna payment methods if your website runs on a third-party platform: - [Adobe commerce](https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/conversion-boosters/on-site-messaging/) - [Prestashop](https://docs.klarna.com/platform-solutions/prestashop/on-site-messaging/) - [Salesforce Commerce Cloud](https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/conversion-boosters/on-site-messaging/) - [Shopify](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/how-to-install-osm-shopify-app/) - [Woocommerce](https://docs.klarna.com/platform-solutions/woocommerce/how-to-install-on-site-messaging-on-woocommerce/) - [Wix](https://docs.klarna.com/platform-solutions/e-commerce-platforms/wix/conversion-boosters/how-to-install-on-site-messaging-on-wix/) ## Web SDK integration The On-site messaging JavaScript library consists of code snippets you can add to your website. The snippets contain your individual data-client-id to ensure that the messaging reflects the payment methods you offer to your customers. Follow [the implementation guide](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/) to activate, install, and customize On-site messaging. ## Mobile integration for Android & iOS apps Want to add On-site messaging to your mobile apps? Explore our [Mobile SDK documentation for On-site messaging](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/on-site-messaging-for-mobile/), we offer dedicated solutions for both [iOS](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/on-site-messaging-for-mobile/on-site-messaging-for-ios/) and [Android.](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/on-site-messaging-for-mobile/on-site-messaging-for-android/) --- # Source: https://docs.klarna.com/conversion-boosters/express-checkout/integrate-express-checkout/integrate-one-step-express-checkout.md # Integrate one-step Express checkout ## Learn how to integrate the one-step Express checkout for a fast and simple shopping journey. Follow the web integration guide to add the one-step Express checkout to your website. Not sure if the one-step checkout is the best option for your store? Refer to the [Before you start](https://docs.klarna.com/conversion-boosters/express-checkout/before-you-start/) article to make sure you offer your customers the best checkout experience. ## Overview  The process of creating a one-step Express checkout consists of three main steps: 1. Initializing and display Express checkout button 2. Handling the authorization response 3. Creating an order ## Integration steps ### 1. Initialize and display the Express checkout button Load the Klarna payments JavaScript library when the cart page or a product detail page is loaded. Ensure the library is included only once to prevent conflicts. ``` html ``` Then, implement the `klarnaAsyncCallback` function where you initialize Express checkout. Implement the `klarnaAsyncCallback` before importing the library. This way you ensure it will be invoked when the library is loaded. Within `klarnaAsyncCallback`,include the logic to:  1. Initialize Klarna’s JavaScript SDK providing your client identifier as `client_id`, get your `client_id` from the Merchant portal. Refer to the [Before you start](https://docs.klarna.com/conversion-boosters/express-checkout/before-you-start/) article for instructions. 2. Load the button in a chosen container using a `load()` function. To help debug any issues that occur when loading the button, implement the [`load()` callback](https://docs.klarna.com/conversion-boosters/express-checkout/integrate-express-checkout/integrate-one-step-express-checkout/#responses). 3. Handle the `on_click` event, in which you start the payment authorization process by calling the `authorize()` function. Keep the following best practices in mind: - When initiating the authorization, make sure that the format of the `orderPayload` is the same as the body of the request [to create a Klarna payments session.](https://docs.klarna.com/api/payments/#operation/createCreditSession)  - Always invoke the `authorize()` callback that you receive in `on_click`.  - Avoid having multiple nested asynchronous calls before invoking authorization. The order payload object can contain all information allowed in the Klarna payments API, for example, merchant references, merchant URLs, and extra merchant data.  Here’s an example of code that initializes the Klarna JavaScript library and renders the Express checkout button on a cart or a product detail page: ``` html ``` The table below lists the attributes of the `load()` function’s configuration object. | Attribute | Required | Description | |---------|--------|-----------| | `container` | Yes | `container` represents the location where you want the Express checkout button to be displayed. In this attribute, you can specify either: * aCSS selector, for example,#my-component-id,.my-component-class * anelement-type object directly, for example,document.createElement('div') | | `on_click` | Yes | The function passed in this attribute will be executed when the Express checkout button is clicked. It will receive the `authorize()` function, which has to be invoked to start the Express checkout flow. The `authorize()` function acts similarly to `authorize()` in a standard [ Klarna payments] integration. | | `theme` | No | The [color theme](https://docs.klarna.com/conversion-boosters/express-checkout/additional-resources/button-styling/#theme) of the button. The possible values are `default` , `light` , and `dark` . If the value isn't specified, `default` is used. | | `shape` | No | The [shape](https://docs.klarna.com/conversion-boosters/express-checkout/additional-resources/button-styling/#button-shape) of the button.  The possible values are `default` , `rect` , and `pill` . If the value isn't specified, `default` is used. | | `locale` | No | The language of the button text. If not specified, the browser's language will be used. | The value of locale passed in the `authorize()` function’s configuration object defines the language of the button text. On the other hand, the value of [locale](https://docs.klarna.com/api/payments/#operation/createCreditSession!path=locale&t=request) passed to `authorize()` inside the `orderPayload` defines the language of the purchase flow. Learn more about [locale formats](https://docs.klarna.com/api/data-types/#locale--country) in Klarna APIs. The table below lists the attributes for the `authorize()` function’s configuration object. | Attribute | Required | Description | |----|----|----| | `collect_shipping_address` | Yes | Informs Express checkout whether you need the customer's shipping address from Klarna.  The default value is `false`. | | `auto_finalize` | No | Allows you to specify whether the authorization should automatically be finalized when the customer clicks the Express button.  In one-step Express checkout, set `auto_finalize` to `true`. Otherwise, the purchase won’t be authorized automatically. The default value is `true`. If you omit this attribute, the order will be authorized automatically. | #### You can also create the Payments session on your backend if it is more aligned with your app's design. 1. Create a new [Payments session](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-1-initiate-a-payment/) 2. Provide the client_token receive from Payments api to the `Klarna.Payments.Buttons.init` function. 3. You don't have to provide order details in the `authorize` function. 4. The rest of the implementation looks the same ``` html ``` #### You can programmatically start the flow if you prefer to render your own button for better alignment with your other Express checkout buttons. ``` javascript window.klarnaAsyncCallback = function () { window.Klarna.Payments.Buttons.init({ client_id: '', }).authorize( { collect_shipping_address: true, auto_finalize: true, }, order_payload, (result) => { // The result, if successful, contains authorization_token. } ); } ``` ### 2. Handle the authorization response  If the authorization is successful, you will receive the `authorization_token` from the client-side `authorize()` response, in the [authorization callback](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/other-actions/authorization-callback/), or by [getting the payment details from Klarna payments API.](https://docs.klarna.com/api/payments/#operation/readCreditSession) Here’s an example of a response from the client-side `authorize()` call. ``` javascript { "show_form": true, "approved": true, "finalize_required": false, "authorization_token": "1eddf502-f3a0-45bf-b1fd-f2e3a2758200", "session_id": "e4b81ca2-0aae-4c16-bcb2-29a0a088a35b", "collected_shipping_address": { // if collect_shipping_address was set to true "attention": "Attn", "city": "London", "country": "GB", "email": "test.sam@test.com", "family_name": "Andersson", "given_name": "Adam", "organization_name": "string", "phone": "+44795465131", }, "merchant_reference1": "" // if provided "merchant_reference2": "" // if provided } ``` This example shows a response from the authorization callback. ``` javascript { "authorization_token": "1eddf502-f3a0-45bf-b1fd-f2e3a2758200", "session_id": "e4b81ca2-0aae-4c16-bcb2-29a0a088a35b", "merchant_reference1": "" // if provided "merchant_reference2": "" // if provided } ``` ### 3. Create an order Once you have the `authorization_token`, [create an order](https://docs.klarna.com/api/payments/#operation/createOrder). When creating the order, make sure the shipping address provided in the API request matches the collected shipping address returned alongside the `authorization_token`*.***.** --- # Source: https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/integrate-using-klarna-web-sdk.md # Integrate using Klarna Web SDK ## Here you can find the steps, examples, and code snippets you require for On-site messaging integration using our JavaScript library. To add On-site messaging to your website, you first need to activate the feature in the [Klarna merchant portal](https://docs.klarna.com/resources/business-tools/merchant-portal-guide/conversion-boosters/) and check that you've all [prerequisites](https://docs.klarna.com/conversion-boosters/on-site-messaging/before-you-start/) covered. If your site's On-site Messaging was set up prior to January 2024, take a look at our [guide](https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/migration-to-the-new-klarna-websdk/) to migrate to the new WedSDK. ## Step 1: Activation ### 1. Log in to the Merchant portal Log in to the Merchant portal using one of the following links: - [Merchant portal (production environment)](https://portal.klarna.com/) - [Merchant portal playground (test environment)](https://portal.playground.klarna.com) ![ The login screen of the Merchant portal.](1cd86b60-b490-44d3-ba29-ed31aba2be69_OSM_Login_2022-11_01.jpeg) *The login screen of the Merchant portal.* To try out the feature, perform a test integration in the test (playground) environment, then follow the [Step 6](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/integrate-using-klarna-web-sdk/#step-2-implementation-6-publish-the-changes-to-your-website) to complete the integration in the live (production) environment. The changes you make in the playground environment won't impact your production integration. ### 2. Go to On-site messaging app Once you're logged in, go to the **Conversion boosters** section on top or use the On-site messaging shortcut in the **Tools** section. ![ On-site messaging shortcuts in the Merchant portal.](e035b839-148f-45a3-a3ad-59e2a95a0835_Screenshot+2024-02-28+at+11.56.17.jpeg) *On-site messaging shortcuts in the Merchant portal.* ### 3. Select the store to be configured Now you can see the On-site messaging app on the sidebar. If you have access to multiple entities with the same user, select the corresponding one from the **dropdown selector**. The selector displays **Partner Accounts** or **Stores**, depending on your setup. Then click **Get started** to begin the activation. ![klarna docs image](b0d82dfa-b1b4-429b-8e6a-b0cd33e029cb_Screenshot+2024-02-28+at+11.36.36.jpeg)image ### 4. Allowlisting your domain You can now allowlisting the origin domain where our Web SDK will be used. ![klarna docs image](411ad715-0d61-4ebc-96b8-273e720d01d4_Screenshot+2024-02-28+at+11.36.55.jpeg)image ## Step 2: Install JavaScript library #### 1. Go to Installation Once you've allowlisted your origin, you will have access to your client identifier and the snippets you need to implement on your website. ![ Click on Client Identifiers page to manage them.](70f2e262-7bcb-46bc-8c8e-988e8cfed45d_Screenshot+2024-02-29+at+10.37.48.jpeg) *Click onClient Identifiers pageto manage them.* ### 2. Copy the installation snippet and add it to your website. In **Add installation code**, go to **Web SDK** tab and click **Copy to clipboard** to copy the JavaScript library code snippet and insert the copied snippet in your website's source code right after the opening   tag. ![klarna docs image](e3b5d019-4459-4eca-b1e3-b3aa839ae72c_Screenshot+2024-02-29+at+10.54.03.jpeg)image This library is the core of On-site messaging integration as it lets your website communicate with On-site messaging. The library renders the On-site messaging content in the placement tags. ###### *An example of an HTML file with the JavaScript library snippet. **You have to copy your own script from the Merchant portal**.* ``` html My store ``` You need to add this web SDK only once, if you installed Express checkout before, skip step 2. and go directly to the step 3. ## Step 3: Add dynamic placements ### 1. View available placements Once you've installed the JavaScript library, it's time to add placements. A placement is an HTML tag with all the attributes required to display messaging on your website. You can think of it as the container for the messaging that the JavaScript library delivers. Some placements require the purchase amount to display the message. Placements are available in Merchant portal. Go to **On-site messaging** and click **Placements**. You'll see all the placements available for your configuration. ![klarna docs image](999e2654-904c-4596-a1b9-438af04bbdd8_Screenshot+2024-02-29+at+11.26.03.jpeg)image If you're promoting Klarna in multiple countries use the **Region**& **Country**dropdowns to view the relevant placement for each country. You can also check the tags out in the [Placements section](https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/placements/) of our documentation. If you're testing your integration in the test (playground) environment, a **TEST DRIVE** badge appears on each placement. ### 2. Copy the placement code Find the placement you want to add to your website, then click **Copy to clipboard**. ![klarna docs image](d70ed1ac-a6fd-49f9-9638-52d494ad7d7d_Screenshot+2024-02-29+at+11.28.03.jpeg)image The numerical values in the placement preview are placeholders and aren't representative of the true values you see in a live integration. ### 3. Add the placement to your website You can now add the copied tag to your website. Insert placement code snippets **where you want the messaging to appear**. ###### *An HTML example with JavaScript library and a placement tag installed. When integrating, you have to copy your own placement tags from the Merchant portal as they're generated specifically for your configuration.* ``` html My store ... ``` You can modify the look and feel of the On-site messaging placements. Use any of the two available ways to do so: [using CSS on your website](https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/styling-on-site-messaging-with-css/) or \[ using Klarna's Merchant Portal\]. ### 4. Publish the changes to your website You're now ready to publish the messaging to your site. Before the go-live: - You can also [customize the content](https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/styling-on-site-messaging-with-css/) to match your store's look and feel. - Replace the playground JavaScript library snippet. Your client ID is different in playground and production. If you don't replace the snippet, the changes won't be visible in your production environment. ![klarna docs image](f65cdd76-5270-4974-8967-241313455e86_osm_go_live.jpeg)image ## Step 4: Go live After you complete the integration in the test (playground) environment, follow these steps to display messaging in your live store. ### 1. Replace the playground JavaScript library snippet Log in to the [Merchant portal (production environment)](https://portal.klarna.com/) and go to **On-site messaging**\> **Installation**. ![klarna docs image](f65cdd76-5270-4974-8967-241313455e86_osm_go_live.jpeg)image Copy the installation snippet and insert it in place of the snippet you previously copied from the playground environment. Don't skip this step as your client ID is different in playground and production. If you don't replace the snippet, the changes won't be visible in your production environment. ### 2. Customize styling for placements in production If you've created any custom styles for placements in the playground environment and want to use them in production, you have to create them from scratch in the production Merchant portal. Currently, it is not possible to copy them between playground and production. You don't have to replace the placement code snippets. ![klarna docs image](b9e8fd7b-32ff-480e-8a69-78e537aeb29d_custom-design.jpeg)image ### 3. Disclose tracking technologies used by Klarna Web SDK If you choose to integrate the Klarna Web SDK on your website, for example but not limited to, to enable Klarna’s conversion boosters or other similar features, you are responsible for informing your users about the tracking technologies employed. This information must be provided prior to any tracking taking place, for instance via a cookie banner or similar mechanism. You must disclose both strictly necessary tracking technologies and any specific technologies used by the Klarna Web SDK, including details such as name, purpose, provider, use of local storage, and retention period. You may use the below wording as is, or adapt it to align with your existing cookie banner or privacy policy, provided the information remains complete, accurate, and compliant with applicable laws: *Strictly necessary cookies are necessary for the website to function and cannot be switched off in our systems. They are usually only set in response to actions made by you which amount to a request for services, such as setting your privacy preferences, logging in or filling in forms. For the purpose of ensuring service security and prevention of fraud, we do also collect device fingerprints, including, but not limited to, your browser name, IP address, time zone and language preference and service availability.* | Name | Purpose | Supplier (first/ third) | Session/ Persistent/local | Expiry | |----|----|----|----|----| | \_\_klarna_sdk_klarna-shopping-session | This cookie is used to ensure service security, service availability, and to prevent fraud. | Third party | Local storage | 48h | ### 4. Validate if the integration is working as expected ## Troubleshooting integration Something doesn't look quite right? Th the frequent integration errors and frequently ask ### I'm not happy with the loading time Take a look at our \[ Best practices\] for tips about improving the loading time. ### On-site messaging is not loading on my page - Check that your and script tags are valid HTML. - Make sure you're only loading 1 instance of the JavaScript library per page. - Check that you're using the snippet with the right `data-client-id` from the correct environment. - On-site messaging is connected to your payment methods, so make sure everything is enabled and that Klarna payments is loaded on your checkout page. - Often, the purchase amount isn't correct. Make sure you're sending the correct purchase amount in minor units. - If all the above is working, check the network requests to js.klarna.com. Look for errors and 204s to find minor errors that keep On-site messaging from loading. ### Links on the placements sometimes are unclickable on mobile devices On-site messaging is rendered inside shadow DOM to improve loading times. Using the Fastclick library makes the elements unclickable inside shadow DOM. This is a [known issue](https://github.com/ftlabs/fastclick/issues/604). Here are some ways to fix the issue: - Remove the FastClick library (optimal solution). - Add the `needsclick` class to all shadowhost divs. Shadowhost divs of On-site messaging are added dynamically by the On-site messaging script while processing the placements. You have to observe the change and add the `needsclick` class only after a shadowhost div is appended. To query the elements where the `needsclick` class should be added, run the following: ###### *Querying elements that require a `needsclick` class.* ``` javascript const elements = document.querySelectorAll('klarna-placement div') ``` --- # Source: https://docs.klarna.com/payments/get-started/integration-checklist.md # Klarna Payments Integration Checklist Follow this checklist to ensure a complete integration of **Klarna Payments** for web, mobile, and in-store channels. This guide covers a direct integration with Klarna’s APIs and progresses from initial setup to production readiness, highlighting key decisions and best practices. ## 1. Set up your Klarna account and credentials - **Create a Klarna test account**: Sign up for a [Klarna developer account](https://docs.klarna.com/resources/developer-tools/testing-payments/before-you-test/#accessing-the-test-merchant-portal) and access the Klarna test Merchant Portal. - **Generate API credentials**: Use the [API key generation instructions](https://docs.klarna.com/resources/developer-tools/testing-payments/before-you-test/#getting-test-credentials-for-apis) to retrieve your test and live credentials. - **Get the correct API endpoints**: Refer to the [API base URLs page](https://docs.klarna.com/api/api-urls/) for the correct environment and regional endpoints. - **Enable the Klarna test environment**: Use the [Playground environment](https://docs.klarna.com/api/api-urls/#base-urls---testing-playground) for testing. - **Familiarize yourself with Klarna’s API docs**: Visit the [Klarna API documentation](https://docs.klarna.com/api/payments/) to understand endpoints, data models, and error handling. ## 2. Choose your integration approach - **Select your platform(s)**: Klarna supports Web, Mobile (iOS/Android), and In-store Payments. See [the Payments overview](https://docs.klarna.com). - **Plan your Web integration**: Klarna offers solutions for [in-line integration](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-sdk/how-to-integrate-klarna-payments/) and [hosted payment page](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-hpp/before-you-start/). - **Plan your Mobile integration**: Use Klarna’s [Mobile SDKs](https://docs.klarna.com/payments/mobile-payments/before-you-start/introduction-mobile-integrations/) or embed the Web integration via WebView. - **Plan your In-store integration**: Use Klarna’s [In-store API](https://docs.klarna.com/payments/in-store-payments/before-you-start/what-is-klarna-in-store/) for QR-code-based or link-based payments. - **Decide on payment scenarios**: See [Recurring Payments guide](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/tokenized-payments/subscriptions-and-on-demand/) for how to handle subscriptions or repeat purchases. ## 3. Build your Online Payments integration Implement Klarna Payments using the in-line widget integration for Web and the Klarna Mobile SDKs for iOS and Android. ### Web (in-line widget) - [Initiate a payment](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-sdk/step-1-initiate-a-payment/) creates a session that identifies the purchase towards Klarna. - [Check out](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-sdk/step-2-checkout/) displays Klarna as a payment method and authorizes the purchase. - [Create an order](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-sdk/step-3-create-an-order/) uses the authorized payment from the previous step and creates an order. - The payment process has slight variations according to each [scenario](https://docs.klarna.com/payments/web-payments/before-you-start/what-is-klarna-payments/#payment-scenarios) one-time or recurring payments. ### Mobile (native SDKs) - **Set up**: Install the Klarna SDK for [iOS](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/native-view/) or [Android](https://docs.klarna.com) using your platform’s package manager. - **Initiate payment** (Server-side): Your backend [creates a payment session](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-sdk/step-1-initiate-a-payment/) and passes the `client_token` to your app. - **Render payment view** (Mobile App): [Present Klarna’s native view](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/native-view/#render-payment-view-mobile-app) to display Klarna in your checkout. - **Authorize the session** (Mobile App): [Trigger the authorization](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/native-view/#authorize-the-session-mobile-app) through the SDK and handle the callback. - **Create an order** (Server-side): Use the resulting `authorization_token` in your backend to finalize the payment and [create an order](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-sdk/step-3-create-an-order/) . ## 4. Build your Post Purchase integration - **View and change orders**: Use the Order management API to [read and update the details of an order](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api/view-and-change-orders/). - **Capture and track orders**: [capture your orders](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api/capture-and-track-orders/) and add shipping information for tracking. - **Refund orders and manage authorizations**: [refund and manage orders](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api/refund-orders-and-manage-authorizations/) efficiently using the Klarna Order Management API. - **Reconcile settlements**: Settlement reports are provided via the [Merchant Portal Settlements App](https://docs.klarna.com/payments/after-payments/settlements/settlement-files/), the [Settlements API](https://docs.klarna.com/api/settlements/) or via a [pre-configured SFTP](https://docs.klarna.com/payments/after-payments/settlements/additional-resources/how-to-get-settlement-reports-via-sftp/). - **Customer support readiness**: Learn [dispute handling](https://docs.klarna.com) and refund workflows. ## 5. Test and optimize your integration - **Exercise all test scenarios**: Complete these [End-to-end test cases](https://docs.klarna.com/resources/developer-tools/testing-payments/test-cases/) in Playground. - **Follow Klarna’s UX guidelines**: Implement Klarna's [UX Guidelines](https://docs.klarna.com) and improve your conversion with [On-site messaging](https://docs.klarna.com/conversion-boosters/on-site-messaging/before-you-start/), [Express checkout](https://docs.klarna.com/conversion-boosters/express-checkout/before-you-start/) and [Sign in with Klarna](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/before-you-start/). - **Verify frontend behavior**: Test Klarna widget or SDK behavior on all platforms. - **Escalation and retry policy**: [Ensure all backend calls](https://docs.klarna.com/api/escalation-and-retry-policy/) are as robust and fail-safe as possible. - **Test failure and recovery paths**: Simulate expired sessions and API errors. See [error codes reference](https://docs.klarna.com/resources/developer-tools/error-handling/error-codes-and-messages-for-klarna-payments/). - **Review in the Merchant Portal**: Use the [Playground portal](https://docs.klarna.com/resources/developer-tools/testing-payments/before-you-test/) to validate test transactions. - **Performance and fallback testing**: Performance test your integration, considering Klarna's [rate limit policy](https://docs.klarna.com/api/rate-limit/) and [SLAs](https://docs.klarna.com/api/klarna-service-level/). - **Security testing**: Ensure no credentials or PII are exposed. All traffic must use HTTPS. ## 6. Go live and monitor - **Obtain production API credentials**: Use [the live API key](https://docs.klarna.com/resources/developer-tools/testing-payments/go-live-checklist/#set-up-your-production-account-and-prepare-for-the-go-live) in production. - **Run final verification in production mode**: Complete the [go-live checklist](https://docs.klarna.com/resources/developer-tools/testing-payments/go-live-checklist/) in production. - **Review compliance and legal requirements**: Ensure checkout and messaging comply with [design and legal standards](https://docs.klarna.com/resources/legal-and-compliance/payment-solutions-guidelines/eu/). - **Implement Klarna branding**: Add [Klarna promotional assets](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/marketing-for-integrated-partners/) to your site. - **Monitor orders and payments**: Check that all orders appear and payouts reconcile. For more information, see the [Klarna Payments documentation](https://docs.klarna.com). --- # Source: https://docs.klarna.com/payments/after-payments/order-management/before-you-start/integration-options.md # Integration options ## Now that you're ready to use Order management, learn the different integration options. Get a glimpse of the options you have to access Order management and perform different actions on your orders. If you have yet to decide which is the best integration option for your business, see the [Touchpoints section.](https://docs.klarna.com/payments/after-payments/order-management/before-you-start/what-is-order-management/#touchpoints) ## Order management API The Order management API consists of endpoints for handling an order after your customer has completed the purchase. Use the API to perform all actions related to managing your orders. ### Authentication Order management API uses HTTP basic authentication. To authenticate, use your [API credentials](https://docs.klarna.com/resources/business-tools/merchant-portal-guide/settings/) that consist of: - a username linked to your Merchant ID at Klarna - a password associated with your username You can use the same set of credentials for multiple Klarna APIs, including Order management and Klarna payments. If you're using an API platform to store your credentials, you can add them in relevant fields. Otherwise, ensure to include the Base64-encoded *username:password* in the Authorization header field of each API request, as shown below. ``` http Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ= ``` *Authorization request header with Base64-encoded credentials.* ## Merchant portal The [Merchant portal](https://docs.klarna.com/resources/business-tools/merchant-portal-guide/merchant-portal-user-guide/) is an alternative way of managing orders through a user interface. For more details about the Merchant portal and API credentials, see the \[ Before you start section.\] ## Platform solutions You can also use Order management if your online store runs on a third-party platform, such as Shopify or Magento. For more information about third-party integrations, see the [Platform solutions documentation.](https://docs.klarna.com/platform-solutions/) --- # Source: https://docs.klarna.com/payments/mobile-payments/before-you-start/introduction-mobile-integrations.md # Introduction to Mobile Integrations ## Learn the recommended method for integrating Klarna’s Mobile SDK to enable a secure and seamless checkout with full feature support. Understand how to use System Webviews as an alternative and why Embedded/Custom WebViews are not allowed. ## Overview The Klarna Mobile SDK is the recommended way to integrate Klarna products in mobile apps. It ensures optimal performance, security, and feature coverage across all supported platforms and regions. To guarantee a seamless customer experience and maintain integration quality over time, consider the following for all mobile applications: - Klarna Mobile SDK is the **primary integration approach** for full feature and product coverage, click here to get started with your Mobile SDK integration on [iOS](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/native-view/), [Android](https://docs.klarna.com) or [React Native](https://docs.klarna.com). - If Mobile SDK usage is not possible, the only acceptable secondary approach is to use System WebViews (e.g. ASWebAuthenticationSession, Chrome Custom Tabs), click here to [get started](https://docs.klarna.com/payments/mobile-payments/klarna-payments-in-native-apps-without-sdk/) with your System WebViews integration. - Embedded/Custom WebViews (e.g. WKWebView, Android WebView) are **strictly prohibited.** **Why this matters:** Custom WebViews break important payment features like 3D Secure, SSO, and bank redirects, introduce severe security risks, and degrade the customer experience. SDK and System WebViews ensure all features work reliably and securely. ## Klarna Mobile SDK (Recommended) Klarna’s Mobile SDK is the official toolkit for integrating Klarna products into native iOS and Android apps. It enables you to offer Klarna’s payment methods with a seamless in-app user experience. The SDK is designed to provide the optimal integration and, under the hood, the SDK handles web-based flows in a mobile-friendly way to reduce friction (e.g. handling cookies, opening bank apps, etc.) compared to a basic WebView integration for a superior customer experience across all mobile platforms.
![Pink_Standard_Consumer_(1).png](Pink_Standard_Consumer_(1).png) *Pink_Standard_Consumer_(1).png* ![Pink_Standard_Consumer_(2).png](Pink_Standard_Consumer_(2).png) *Pink_Standard_Consumer_(2).png* ![Pink_Standard_Consumer_(3).png](Pink_Standard_Consumer_(3).png) *Pink_Standard_Consumer_(3).png* ![KP_full_checkout.png](KP_full_checkout.png) *KP_full_checkout.png*

Sign in with Klarna

On-site Messaging

Express Checkout

Klarna Payments

Klarna Mobile SDK provides a full suite of mobile-first integrations, including Klarna products like: - **Klarna Payments**: Render Klarna’s payment methods with a native interface and a flexible UI, click here to get started with your integration on [iOS](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/native-view/), [Android](https://docs.klarna.com) or [React Native](https://docs.klarna.com) and follow the [Mobile SDK Guidelines](https://docs.klarna.com/payments/mobile-payments/before-you-start/mobile-sdk-guidelines/) for the best performance. - **On-site Messaging**: Show contextual messaging and let your customers know about the available payment options in pre-checkout. Click [here](https://docs.klarna.com/conversion-boosters/on-site-messaging/before-you-start/) to learn more. - **Sign in with Klarna**: Seamlessly identify and let users login via their Klarna account. Click [here](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/before-you-start/) to learn more. - **Express Checkout**: Accelerate your checkout process and boost conversion by offering a one-click checkout. Click [here](https://docs.klarna.com/conversion-boosters/express-checkout/before-you-start/) to learn more. All functionality is wrapped in a single SDK package per platform (iOS, Android, React Native), designed to be lightweight, secure, and developer-friendly. Once Klarna Mobile SDK is integrated into your app, you're covered. The SDK is continuously updated to support new features, system changes, and Klarna platform updates — no additional workarounds required. Just keep the SDK up to date to stay compatible. Learn more in the [Klarna Mobile SDK Guidelines](https://docs.klarna.com/payments/mobile-payments/before-you-start/mobile-sdk-guidelines/). ## System WebViews (Alternative to the SDK) System WebViews are browser-like WebViews supported via actual mobile browsers (Safari on iOS, Chrome and other browsers on Android). These WebViews provide a secure browser context inside mobile applications and support various other browser features like app redirects, browser tabs etc. out of the box. Hence, with the provided security and feature set, these are the preferred alternative to the Klarna Mobile SDK. Integration of System WebViews are provided via [CustomTabs](https://developer.chrome.com/docs/android/custom-tabs) on Android and [ASWebAuthenticationSession](https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession) on iOS. Due to the support for device wide login experience, Klarna **requires** the usage of`ASWebAuthenticationSession` on iOS. This means that the following approaches are also **prohibited**: - Usage of [SFSafariViewController](https://developer.apple.com/documentation/safariservices/sfsafariviewcontroller) - Usage of ephemeral web sessions - `prefersEphemeralWebBrowserSession = true` (iOS) - `setEphemeralBrowsingEnabled(true)` (Android) ## Embedded/Custom WebViews (**Prohibited**) Embedded WebViews (such as WKWebView or Android WebView) offer customization but come with significant trade-offs: limited functionality, poor compatibility with modern authentication flows, and inherent security risks. These limitations often result in broken user experiences and increased integration complexity.To ensure secure, reliable, and future-proof integrations, **Klarna does not support Embedded WebViews for purchase flows**. Use the Klarna Mobile SDK or System WebViews as described instead.Klarna Mobile SDK offers WebView Integrations to enhance your WebViews, allowing Klarna purchase flows to be rendered securely, supporting all of the SDK features. You can learn more about SDK integrations [here](https://docs.klarna.com). ## Feature support with different Mobile Integration approaches | **Feature** | **Klarna Mobile SDK (Recommended)** | **System WebViews\*** | **Embedded WebViews (Prohibited)** | |----|----|----|----| | Remember Returning Customers | Fully Supported | Fully Supported | Requires Integration Effort | | Device Wide Login Experience | Fully Supported | Fully Supported \*\* | Not Supported | | Application Redirects | Fully Supported | Fully Supported | Requires Integration Effort | | Redirect Back From Applications | Fully Supported | Requires Integration Effort | Requires Integration Effort | | Camera Access for ID Verification | Fully Supported | Fully Supported | Requires Integration Effort | | Secure Browser Context | Fully Supported | Fully Supported | Not Supported | | File Sharing and Download for T&C | Fully Supported | Fully Supported | Requires Integration Effort | | Passkeys | Fully Supported | Fully Supported | Not Supported | **\*** ASWebAuthenticationSession (iOS) & Custom Tabs (Android) ​**\*\*** Setting `prefersEphemeralWebBrowserSession` (iOS) or `setEphemeralBrowsingEnabled` (Android) to `true` does not support the “Unified Device Login Experience.” --- # Source: https://docs.klarna.com/conversion-boosters/express-checkout/integrate-express-checkout/mobile-sdk-integration/ios.md # Integrate Express Checkout - iOS ## This guide will show you how to use Klarna Mobile SDK to implement Express Checkout in your iOS mobile application, providing a fast and simple shopping experience for your users. Please review [this brief guide](https://docs.klarna.com/conversion-boosters/express-checkout/before-you-start/) first to ensure you are prepared to offer this integration to your customers. ![Klarna Express Checkout Button|center|670x670px](kec-item-page.png) *Klarna Express Checkout Button|center|670x670px* ## Integration steps 1. **[Prepare](https://docs.klarna.com#prepare):** Make sure you have the credentials and setup for Klarna Express Checkout. 2. **[Present the button](https://docs.klarna.com#present-the-button-mobile-app):** (Mobile App) Create an instance of KlarnaExpressCheckoutButton with session parameters and present in your native app. 3. **[Handle authorization](https://docs.klarna.com#handle-authorization-mobile-app):** (Mobile App) Once the customer clicks the button and authorizes the payment, handle response from the SDK. 4. **[Create an order](https://docs.klarna.com#create-an-order-server-side):** (Server-side) Once a session is authorized, create an order with authorization token via your backend. ### **How it works** For a Mobile SDK integration your Payment Server and Mobile App must work together to offer one-click checkout experience: {{#mermaid: sequenceDiagram participant Consumer participant Merchant App participant Mobile SDK participant Merchant Server participant Klarna API Consumer->>Merchant App: Navigate to checkout, shopping cart, product or wishlist page Merchant App->>Mobile SDK: Create Express Checkout Button with session information Merchant App->>Merchant App: Display the Express Checkout Button Consumer->>Mobile SDK: Click the Express Checkout Button Note over Mobile SDK: Consumer completes to purchase flow. Mobile SDK-->>Merchant App: Provide authorization token (valid for 60 minutes) Merchant App->>Merchant Server: Sends the authorization token for creating order Merchant Server->>Klarna API: Create Order POST (setup/payments/v1/authorizations/{authorizationToken}/order) Klarna API-->>Merchant Server: Provide order_id and redirect_url Merchant Server-->>Merchant App: Provide order details Merchant App->>Consumer: Redirected to order confirmation screen }} ## Prepare ### Choose applicable placements The right placement of the Express button can significantly enhance your user experience, leading to higher conversion rates and increased sales. ![ You can place the Express checkout button at multiple stages of the shopping journey.](5a558ef7-52d7-4fad-a3fa-7abbde893601_PlacementOverview.jpeg) *You can place the Express checkout button at multiple stages of the shopping journey.* To learn more about placements, check out [this section](https://docs.klarna.com/conversion-boosters/express-checkout/additional-resources/button-placement/). ### Prerequisites Before you integrate Express checkout, check that you meet the following prerequisites: 1. Make sure to have a payment solution with Klarna. Before integrating Express checkout into your website, you need to have a merchant account with Klarna and [Klarna payments](https://docs.klarna.com/payments/web-payments/before-you-start/prepare-your-integration/#preapre-your-integration) or [Klarna checkout](https://docs.klarna.com/conversion-boosters/express-checkout/before-you-start/) integrated in your checkout.   2. Make sure to allowlist the domain of the page on which Express checkout will be integrated.If not all the domains are added to the allowlist, Express checkout will still load, however, the customer will see a "We couldn't load the next screen" error. To allowlist the domain URLs, follow these steps:  - Log into Klarna Merchant portal. If you want to test Express checkout, log into the playground Merchant portal. If you want to build a live integration, log into the production Merchant portal. - Once logged in, go to **Payment settings**\> **Client Identifiers**. In the **Allowed Origins for your integrations** section, click **Manage origins**.    - In the **Register new origin** field, add your domain’s URL. Then, click **Register**. The registered domain is now listed in **Allowed origins**. 3\. Generate a client identifier that will let you authenticate requests sent to Klarna: - Log into Klarna Merchant portal. - Once logged in, go to **Payment settings**\> **Client Identifiers**. - To generate a new client identifier, navigate to **Client Identifiers for your integrations** and click **Generate client identifier**.  If you’ve previously generated a client identifier for your store, you can use it to build your Express checkout integration. ## Set up your app ### Import the SDK #### Swift Package Manager In Xcode, navigate to **File** → **Swift Packages** → **Add Package Dependency** and enter the repository URL: [`https://github.com/klarna/klarna-mobile-sdk-spm`](https://github.com/klarna/klarna-mobile-sdk-spm) In **Version**, Select *Up to Next Major* and take the default option. Then choose `KlarnaMobileSDK` in the **Package Product** column. #### Cocoapods If you’re using Cocoapods, you can add the SDK by adding the dependency to your Podfile: pod "KlarnaMobileSDK" Followed by performing: pod install You should then be able to import the `KlarnaMobileSDK` module in your workspace. #### Carthage If you’re using Carthage, you can add the SDK to your Cartfile as below: binary "https://raw.githubusercontent.com/klarna/klarna-mobile-sdk/master/KlarnaMobileSDK.json" Followed by performing: carthage update --use-xcframeworks You should be then able to add the `XCFramework` to your project. To read more about Mobile SDK versioning policy, check out [this section.](https://docs.klarna.com#versioning-policy) ### Set up your app #### Return URL Klarna purchase flows might require authorizations in other applications (e.g. bank apps) or do a handover to the Klarna app. In such cases, a return URL to your application ensures seamless return to the flow in your app, hence setting up a return URL is required. It is expected that redirects to this URL should only open your application without any changes in the UI state, ensuring the customer can continue the flow prior to external navigation. You can set up a Return URL app scheme to your application by [configuring a custom URL scheme](https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app).**Important:** The return URL string passed to Klarna must include `://` after the scheme name. For example, if you defined `myApp` as the scheme, you must use `"myApp://"` as the return URL argument to Klarna.To avoid a Klarna specific app scheme, you can use a host in a common scheme for Klarna redirects, e.g. `myApp://klarna-redirect` , this can allow you to differentiate and handle these redirect in your handler. Considering the return URL is a constant value in `Constants.klarnaReturnUrl`, you can handle redirects to your return URL as such: ### SceneDelegate ``` swift func scene(_ scene: UIScene, openURLContexts URLContexts: Set) { guard let url = URLContexts.first?.url else { return } if (url.absoluteString.starts(with: Constants.klarnaReturnUrl.absoluteString)) { // This is a return URL for Klarna – skip deep linking return } // This was not a return URL for Klarna } ``` ### AppDelegate ``` swift func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool { if (url.absoluteString.starts(with: Constants.klarnaReturnUrl.absoluteString)) { // This is a return URL for Klarna – skip deep linking return true } // This was not a return URL for Klarna return false } ``` ### SwiftUI ``` swift @main struct MyApp: App { var body: some Scene { WindowGroup { // This is the root content view of your application AppContentView() .onOpenURL { incomingURL in if (url.absoluteString.starts(with: Constants.klarnaReturnUrl.absoluteString)) { // This is a return URL for Klarna – skip deep linking return } // This was not a return URL for Klarna } } } } ``` #### Klarna App Queries Klarna flows on mobile utilize Application Queries for Klarna app schemes to offer seamless app handover experience to customers. In order for the SDK to check availability of the Klarna app, we need you to enable querying Klarna app on the device by adding Klarna app schemes to [LSApplicationQueriesSchemes](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/LaunchServicesKeys.html#//apple_ref/doc/plist/info/LSApplicationQueriesSchemes). This can be configured easily in XCode by going to your project setting and under "Info"(alternatively this is also available in your `Info.plist` file) you should see an entry list for `Queried URL Schemes`, this list should contain the `klarna` and `klarnaconsent` schemes: ![mobile-sdk-queried-url-schemes-xcode.png](mobile-sdk-queried-url-schemes-xcode.png) *mobile-sdk-queried-url-schemes-xcode.png* ## **Present the button (Mobile App)** Create an instance of the `KlarnaExpressCheckoutButton` when your cart page or product detail page is loaded. This ensures that the button is readily available for user interaction. Depending on your integration setup, you can create and initiate the Express Checkout button using either a Client-Side Session or a Server-Side Session: - **Client-Side session:** Use this method if you prefer to set a partner client ID from the Merchant Portal. This approach is typically used when the session management is handled entirely on the client side. You would need to provide the order details in this approach. - **Server-Side session:** Choose this method if you have a client token generated by the backend for the server-side session. This is suitable when you want to manage sensitive session data on the server. You do not need to provide the order details with this approach. Once the button is created, add it to your screen. This involves adding the button to the appropriate view hierarchy in your application's user interface: ``` swift let options = KlarnaExpressCheckoutButtonOptions( sessionOptions: KlarnaExpressCheckoutSessionOptions.ClientSideSession( clientId: "myClientId", sessionData: mySessionData, autoFinalize: true, collectShippingAddress: true ), returnUrl: "myApp://", delegate: self, locale:"en-US", buttonTheme: .dark, buttonShape: .pill, buttonStyle: .filled, theme: .light, environment: .production, region: .na ) let button = KlarnaExpressCheckoutButton(options: options) // Add as subview button.translatesAutoresizingMaskIntoConstraints = false view.addSubview(button) ``` #### Parameters ##### **KlarnaExpressCheckoutButton** | Param | Description | |----|----| | `KlarnaExpressCheckoutButtonOptions` | Contains all the options for the button. | ##### **KlarnaExpressCheckoutButtonOptions** | Param | Description | |----|----| | `KlarnaExpressCheckoutSessionOptions` | Authorization options that will be used for authorization upon a user click. | | `returnUrl` | URL that will be used to navigate users back to the application from external apps and browsers. | | `KlarnaExpressCheckoutButtonDelegate` | delegate that the merchant can use to get notified of the key events happening in the flow. | | `locale` | Locale of the button text.  List of supported locales: [Klarna Docs - Purchase country, locale, and currency](https://docs.klarna.com/klarna-payments/before-you-start/data-requirements/puchase-countries-currencies-locales/#data-mapping) The default is “en-US”. | | `KlarnaExpressCheckoutButtonStyleConfiguration?` | Style configuration for the button, including button theme, button shape, and whether the button is outlined or not. The default theme is \`dark\`, default shape is \`rounded_rect\` and default style is \`filled\`. | | `KlarnaEnvironment?` | Operating environment of the button. The default is \`production\`. | | `KlarnaRegion?` | Geographical region for the button’s API requests. The default is \`na\`. | | `KlarnaTheme?` | Theme of the flow. The default is \`light\`. | | `KlarnaLoggingLevel?` | Logging level of the integration. The default is \`off\`. | ##### **KlarnaExpressCheckoutSessionOptions.ClientSideSession** | Param | Type | Description | |----|----|----| | `clientId` | String | Partner client ID from Merchant Portal. | | `sessionData` | String | JSON string used to update the session. | | `autoFinalize` | Boolean | Whether the authorization should automatically be finalized. The default is true. | | `collectShippingAddress` | Boolean | Whether the merchant needs the customer's shipping address from Klarna. The default is false. | ##### **KlarnaExpressCheckoutSessionOptions.ServerSideSession** | Param | Type | Description | |----|----|----| | `clientToken` | String | Client token generated by the backend for the server-side session. | | `sessionData` | String? | JSON string used to update the session. The default is null. | | `autoFinalize` | Boolean | Whether the authorization should automatically be finalized. The default is true. | | `collectShippingAddress` | Boolean | Whether the merchant needs the customer's shipping address from Klarna. The default is false. | ##### **KlarnaExpressCheckoutButtonStyleConfiguration** | Param | Description | |----|----| | `theme` | Color theme of the button. The default is \`dark\`. | | `shape` | Shape of the button. The default is \`rounded_rect\`. | | `style` | Style of the button. The default is \`filled\`. | ## **Handle authorization (Mobile App)** Once a customer clicks the Express Checkout button, the Klarna payment authorization process will begin. You must provide a delegate object when creating the button, which will handle Klarna's response. This delegate is essential for managing the payment flow and updating the UI based on the authorization result. If the authorization is successful, you will receive an authorization token from the authorization response within the delegate object. ### **Authorization Callback** ``` swift func onAuthorized(view: KlarnaMobileSDK.KlarnaExpressCheckoutButton, response: KlarnaMobileSDK.KlarnaExpressCheckoutButtonAuthorizationResponse) { if let token = response.authorizationToken, approved { // authorization is successful, backend may create order } if response.finalizeRequired { // finalize call is required, only applicable if you are setting autoFinalize to false // use response.clientToken to finalize } } ``` #### Parameters ##### **KlarnaExpressCheckoutButtonAuthorizationResponse** | Param | Type | Description | |----|----|----| | `approved` | Bool | Indicates whether the payment was approved. | | `showForm` | Bool | Indicates whether the payment is still available for authorization. | | `finalizeRequired` | Bool | Indicates whether the session requires finalization. | | `authorizationToken` | String? | The authorization token for the payment, if applicable. | | `clientToken` | String? | The client token for the session, if applicable, intended to be used for finalization. | | `sessionId` | String | The ID of the Klarna Payments session. | | `collectedShippingAddress` | String? | Shipping address collected during the session, if applicable. | | `merchantReference1` | String? | Merchant references provided in the session creation. | | `merchantReference2` | String? | Additional merchant reference provided in the session creation. | ##### Error Callback ``` swift func onError(view: KlarnaMobileSDK.KlarnaExpressCheckoutButton, error: KlarnaMobileSDK.KlarnaError) { // Handle different failure scenarios by checking the error name if (error.name == KlarnaExpressCheckoutError.AuthorizationFailed) { // The authorization process has failed. showMessage(error.message) } // ... } ``` #### Parameters ##### **KlarnaError** Represents an error that has occurred in the Klarna Express Checkout Button. | Param | Type | Description | |----|----|----| | `name` | String | Unique name of the error. | | `message` | String | Elaborate description of the error. | | `isFatal` | Bool | Determines whether the error is fatal. If the error is fatal, the button should not be shown any further. | | `sessionId` | String? | Mobile SDK’s session ID. | | `params` | Map\ | A key-value map/dictionary of any additional error parameters. | The table below lists all the different error names defined as constant values in the KlarnaExpressCheckoutButtonError: | Error Name | Description | |----|----| | `InvalidClientID` | Indicates that the client ID is not valid; for example, it is null or blank. | | `InvalidClientToken` | Indicates that the client ID is not valid. For example it is null or blank. | | `MissingDelegateReference` | Indicates that the delegate reference is lost. | | `AlreadyInProgress` | Indicates that the Klarna Express Checkout flow is already in progress. | | `AuthorizationFailed` | Indicates that the authorization has failed. | | `ButtonRenderFailed` | Indicates that the button could not be rendered successfully. | | `InvalidAuthorizationResponseParams` | Indicates that the authorization response could not be parsed caused by invalid/missing params. | ### Finalize the session This is only required of `autoFinalize` is set to `false` in session options.If the session needs to be finalized, you’ll need to perform this last step to get an authorization token from your checkout confirmation screen. This can be done via [KlarnaPaymentView](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/native-view/), using the `clientToken` from `KlarnaExpressCheckoutButtonAuthorizationResponse` to initialize the view and calling `finalize` method of that view. ## **Create an order (Server-side)** Once you have the authorization token, you can [create an order](https://docs.klarna.com/api/payments/#operation/createOrder). When creating the order, make sure the shipping address provided in the request matches the collected shipping address returned alongside the authorization token. To continue with the purchase, you have to create an order in Klarna's system. This step takes place in the server side through the Klarna payments API. ### Create an order To create an order for a one-time payment, send a `POST` request to the `{apiUrl}/payments/v1/authorizations/{authorizationToken}/order` endpoint and include `authorization_token` in the path. For example, if the `authorization_token` is `b4bd3423-24e3`, send your request to the `{apiUrl}/payments/v1/authorizations/b4bd3423-24e3/order` endpoint. ``` json { "purchase_country": "US", "purchase_currency": "USD", "billing_address": { "given_name": "John", "family_name": "Doe", "email": "john@doe.com", "title": "Mr", "street_address": "Lombard St 10", "street_address2": "Apt 214", "postal_code": "90210", "city": "Beverly Hills", "region": "CA", "phone": "333444555", "country": "US" }, "shipping_address": { "given_name": "John", "family_name": "Doe", "email": "john@doe.com", "title": "Mr", "street_address": "Lombard St 10", "street_address2": "Apt 214", "postal_code": "90210", "city": "Beverly Hills", "region": "CA", "phone": "333444555", "country": "US" }, "order_amount": 10, "order_tax_amount": 0, "order_lines": [ { "type": "physical", "reference": "19-402-USA", "name": "Battery Power Pack", "quantity": 1, "unit_price": 10, "tax_rate": 0, "total_amount": 10, "total_discount_amount": 0, "total_tax_amount": 0, "product_url": "https://www.estore.com/products/f2a8d7e34", "image_url": "https://www.exampleobjects.com/logo.png" } ], "merchant_urls": { "confirmation": "https://example.com/confirmation", "notification": "https://example.com/pending" }, "merchant_reference1": "45aa52f387871e3a210645d4", } ``` ###### *A`POST` request to create an order for a one-time payment.* #### Success response When you receive a success response, the customer gets charged and the Klarna payments session is closed. As part of the response, you receive the following details: - `order_id`, an order identifier that you can later use to capture or refund the order using the [Order management API](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-3-create-an-order/) - `redirect_url`, a URL to which you redirect the customer. This isn't included in the response received if you didn't include the URL when [initiating a payment](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-1-initiate-a-payment/) - `fraud_status`, an indicator of whether the transaction is suspected to be legitimate or [fraudulent](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-3-create-an-order/#special-considerations-for-one-time-payments) - `authorized_payment_method`, the payment method selected by your customer for this purchase ``` json { "order_id": "3eaeb557-5e30-47f8-b840-b8d987f5945d", "redirect_url": "https://payments.klarna.com/redirect/...", "fraud_status": "ACCEPTED", "authorized_payment_method": "invoice" } ``` ###### *A success response to the order creation request for a one-time payment.* Send the customer browser to `redirect_url` provided in the response. Klarna places a cookie in the browser and redirects the customer back to the confirmation URL you provided when creating the session. This makes the checkout faster the next time the customer chooses to pay with Klarna. #### Error response If your request doesn't pass our validation, you'll receive an error response. The most common reasons why creating an order fails are: - placing the order more than 60 minutes after authorization - modifying purchase details after authorization without updating the payment session ``` json { "correlation_id": "6a9b1cb1-73a3-4936-a030-481ba4bb203b", "error_code": "ERROR_CODE", "error_messages": [ "ERROR_MESSAGE" ] } ``` ###### *An error response to the order creation request for a one-time payment.* Here are examples of common errors with troubleshooting suggestions. You can use the value in `correlation_id` to find entries related to the request under **Logs** in the Merchant portal. | Error code | Error message | Description | |----|----|----| | `NOT_FOUND` | `Invalid authorization token` | The authorization token has expired because the order was placed more than 60 minutes after authorization. To fix the error, [request a new `authorization_token`](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-3-create-an-order/#authorize-call) and use it to place the order. | | `BAD_VALUE` | `Not matching fields: [billing_address.postal_code]` | The data shared with Klarna in a previous step (`create_session`, `load()`, or `authorize()`) have been modified causing the validation to fail. | | `BAD_VALUE` | `Not matching fields: [Incorrect number of items in the cart. Expected: 2, Actual: 3]` | The order lines or the cart were updated after the `authorize()` call. Please ensure that the cart is kept as-is or send a new authorization request. | | `REJECTED` | `Rejected` | This is an edge case reason, but can be triggered in case the merchant is configured with being allowed to update the cart. This could be updated from the authorize to the place order in such a way that a new authorize is triggered. In this case this is rejected. | ## Button Styling This section will help you customize the Express checkout button to ensure a seamless and trustworthy checkout experience, while leveraging Klarna’s strong brand to boost your conversions. Styling the Express checkout button is crucial for integrating it into your application in a way that complements your brand and encourages user engagement. To modify the style of the button, edit the source code as explained in this guide. ### Theme The theme defines the button’s color. You can change the theme by setting the value of the theme attribute. Apart from the default dark theme, you can apply the light theme to have the button displayed in white or choose auto mode so the theme is selected automatically based on the device’s configuration. ​The button’s default theme color is dark. As the theme attribute is optional, the default theme is applied both when you set the attribute to default or if you omit it from the source code altogether. There are three theme values available, dark (default), light and auto. ![Dark theme (default)|center|320x320px](kec-button-roundedrect-dark.png) *Dark theme (default)|center|320x320px* ![Light theme|center|320x320px](kec-button-roundedrect-light.png) *Light theme|center|320x320px* ``` kotlin let buttonStyleConfiguration = KlarnaExpressCheckoutButtonStyleConfiguration( theme = KlarnaButtonTheme.dark, shape = …, style = … ) ``` ### **Shape** Customizing the shape of the button to match your application’s look and feel is a key step in creating a visually cohesive and engaging user experience. To control the button's shape, change the value of the shape attribute. There are three shapes available with the Express checkout button: `rounded_rect` (default), `rectangle` and `pill`. ![KlarnaButtonShape.rounded_rect|center|320x320px](kec-button-roundedrect-dark.png) *KlarnaButtonShape.rounded_rect|center|320x320px* ![KlarnaButtonShape.pill|center|320x320px](kec-button-pill-dark.png) *KlarnaButtonShape.pill|center|320x320px* ![KlarnaButtonShape.rectangle|center|320x320px](kec-button-rect-dark.png) *KlarnaButtonShape.rectangle|center|320x320px* ``` kotlin let buttonStyleConfiguration = KlarnaExpressCheckoutButtonStyleConfiguration( theme = KlarnaButtonShape.rounded_rect, shape = …, style = … ) ``` ### **Style** Use the outlined style to make the button visible on all backgrounds. To apply this style, set the `KlarnaButtonStyle` attribute to `outlined`, otherwise default value filled will be used instead. ![Outlined style|center|320x320px](kec-button-roundedrect-outlined.png) *Outlined style|center|320x320px* ``` kotlin let buttonStyleConfiguration = KlarnaExpressCheckoutButtonStyleConfiguration( style = KlarnaButtonStyle.outlined, shape = …, theme = … ) ``` ## Optional ### Enable logging The SDK will log events and errors while it’s running, which you can read in **XCode** console. You can set the logging level for the SDK through the `loggingLevel` property of integration instance. ``` swift klarnaExpressCheckoutButton.loggingLevel = .verbose ``` #### KlarnaLoggingLevel | **Name** | **Description** | |------------------------------|------------------------------------------| | `KlarnaLoggingLevel.off` | Nothing will be logged into console. | | `KlarnaLoggingLevel.error` | Only errors will be logged into console. | | `KlarnaLoggingLevel.verbose` | Everything will be logged into console. | ## What's next Klarna Mobile SDK provides a full suite of mobile-first integrations, including Klarna products like:
![Pink_Standard_Consumer_(1).png](Pink_Standard_Consumer_(1).png) *Pink_Standard_Consumer_(1).png* ![Pink_Standard_Consumer_(2).png](Pink_Standard_Consumer_(2).png) *Pink_Standard_Consumer_(2).png* ![ios_native_checkout.png](ios_native_checkout.png) *ios_native_checkout.png*

Sign in with Klarna

On-site Messaging

Payments

- **On-site Messaging**: Show contextual messaging let your customers know about the available payment options in pre-checkout: click [here](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/on-site-messaging-for-mobile/) to learn more. - **Sign in with Klarna**: Seamlessly identify and let users login via their Klarna account: click [here](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/mobile-integration/) to learn more. - **Payments**: Enhance your mobile app conversion with a seamless payment UX, click [here](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/native-view/) to learn more. Complete your integration with - [Order management](https://docs.klarna.com/payments/after-payments/order-management/before-you-start/what-is-order-management/) - [Settlements](https://docs.klarna.com/payments/after-payments/settlements/settlement-files/) - [End-to-end testing](https://docs.klarna.com/resources/developer-tools/testing-payments/test-cases/) - [Prepare for go live](https://docs.klarna.com/resources/developer-tools/testing-payments/go-live-checklist/)
--- # Source: https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/ireland.md # Partner marketing legal guidelines - Ireland For Klarna’s Ireland specific Terms and Conditions please visit: [klarna.com/ie/terms-and-conditions/](https://www.klarna.com/ie/terms-and-conditions/) **Keep it simple.** Don’t lose a customer because the payment instructions were too complicated, but do make it clear what you are offering. **Stand out for the right reason.** Highlight the payment option you offer, but be sure to be clear, fair and not misleading. **Be sensitive to the situation.** Consider what is going with your customers and in the wider market as a whole. Use this knowledge to decide how you promote and market Klarna in all your channels. One message does not fit all circumstances. **Don't encourage debt.** Do not encourage shoppers to spend outside of their means. Using phrases such as *‘strapped for cash?’*, *‘don’t wait until payday’* or *‘broke AF’* are unacceptable and irresponsible. You have an obligation to ensure your customers stay financially healthy. **Make sure your ads are socially responsible to consumers and society.** Offers or benefits should not be linked to credit marketing which are likely to make the credit offer attractive. ​*Klarna may review and monitor your advertising and marketing of Klarna's products and services, including through automated means, to ensure your marketing complies with applicable laws, rules, and regulations.* **** --- # Source: https://docs.klarna.com/payments/after-payments/order-management/more-actions/klarna-carrier-partner-list.md # Carrier partner list ## Learn which carriers work with us to deliver the goods to your customers. Here you can find the carriers (logistics companies) that help us deliver the goods to your customers through the best possible post-purchase experience. When sending shipping information, you have to let us know the carrier that manages your deliveries. For more details about sending the carrier information, see the sections Adding shipping information and [Delivery tracking](https://docs.klarna.com/payments/after-payments/order-management/more-actions/delivery-tracking/). The following table lists the carriers' names and their associated code. You have to send this code as the value of the `shipping_company` parameter when sending your carrier's information. | Carrier | `shipping_company` | |----------------------------------------|-----------------------------| | 17 Post Service | 17postservice | | 2ebox | 2ebox | | 2go | 2go | | 4-72 Entregando | 4-72 | | 4PX | 4px | | Best Express | 800bestex | | 99minutos | 99minutos | | AAA Cooper | aaa-cooper | | AB Custom Group | abcustom | | ABF Freight | abf | | ABX Express | abxexpress-my | | aCommerce | aCommerce | | ACS Courier | acscourier | | ACS Worldwide Express | acsworldwide | | Ader | aderonline | | Adicional Logistics | adicional | | ADSOne | adsone | | A Duie Pyle | aduiepyle | | Mexico AeroFlash | aeroflash | | Aeronet | aeronet | | Aersure | aersure | | Agility | agility | | Rivo | air-canada | | AIR21 | air21 | | Airpak Express | airpak-express | | Airspeed International Corporation | airspeed | | AlfaTrex | alfatrex | | Allied Express (FTP) | allied-express-ftp | | Allied Express | alliedexpress | | ALLJOY Logistics | alljoy | | alphaFAST | alphafast | | Always Express | always-express | | Amazon | amazon-fba-us | | Amstan Logistics | amstan | | An Post | an-post | | Andreani | andreani | | Anjun | anjun | | ANSERX | anserx | | Antron Express | antron | | AO Logistics | ao-courier | | AO Deutschland | ao-deutschland | | APC Postal Logistics | apc | | APC Overnight | apc-overnight | | APC Overnight Consignment Number | apc-overnight-connum | | APG eCommerce Solutions | apg | | Aprisa Express | aprisaexpress | | Aquiline | aquiline | | Aramex | aramex | | Arco Spedizioni SP | arco-spedizioni | | ARK Logistics | ark-logistics | | Arrow XL | arrowxl | | Asendia Germany | asendia-de | | Asendia HK | asendia-hk | | Asendia UK | asendia-uk | | Asendia USA | asendia-usa | | ASIGNA | asigna | | ASM - GLS Spain | asm | | AuPost China | aupost-china | | Australia Post | australia-post | | Austrian Post (Express) | austrian-post | | Österreichische Post | austrian-post-registered | | Averitt Express | averitt | | B2C Europe | b2ceurope | | Barq | barqexp | | Belpost | belpost | | Bert Transport | bert-fr | | Best | besttransport-sftp | | Best Way Parcel | bestwayparcel | | Bulgarian Post | bgpost | | JP BH Pošta | bh-posta | | B&H Worldwide | bh-worldwide | | BirdSystem | birdsystem | | BJS Two-man | bjshomedelivery-ftp | | Blink | blink | | Bluecare Express | bluecare | | Bluedart | bluedart | | Blue Star | bluestar | | Blue Express | bluex | | Bneed | bneed | | Bond | bond | | Bonds Couriers | bondscouriers | | Border Express | borderexpress | | Boxberry | box-berry | | BoxC | boxc | | Bpost | bpost | | Bpost International | bpost-international | | Brazil Correios | brazil-correios | | Bring | bring | | Brouwer Transport en Logistiek B.V. | brouwer-transport | | BRT Bartolini | brt-it | | Buylogic | buylogic | | CAE Delivers | cae-delivers | | AliExpress Standard Shipping | cainiao | | Cambodia Post | cambodia-post | | Canada Post | canada-post | | Canpar Express | canpar | | Capital Transport | capital | | Caribou | caribou | | Carriers | carriers | | Carry Flap | carry-flap | | CBL Logistica | cbl-logistica | | CDEK | cdek | | CDEK TR | cdek-tr | | CDL Last Mile | cdldelivers | | Celeritas Transporte | celeritas | | Cello Square | cello-square | | Česká Pošta | ceska-posta | | CEVA Logistics | ceva | | CEVA Package | ceva-tracking | | CFL Logistics | cfl-logistics | | CGS Express | cgs-express | | Champion Logistics | champion-logistics | | China EMS | china-ems | | Chine Post | chine-post | | Chit Chats | chinachats | | C.H. Robinson | chrobinson | | Chronopost France | chronopost-france | | DPD Portugal | chronopost-portugal | | City-Link Express | citylinkexpress | | CJ GLS | cj-gls | | CJ Logistics International(Hong Kong) | cj-hk-international | | CJ Korea Express | cj-korea-thai | | CJ Century | cj-malaysia | | CJ Century (International) | cj-malaysia-international | | CJ Transnational Philippines | cj-philippines | | CJ Logistics International | cjlogistics | | CJ Packet | cjpacket | | CL E-Logistics Solutions Limited | cle-logistics | | Clevy Links | clevy-links | | Cloudwish Asia | cloudwish-asia | | CND Express | cndexpress | | CNE Express | cnexps | | CNWANGTONG | cnwangtong | | Colis Privé | colis-prive | | Colissimo | colissimo | | CollectCo | collectco | | Collect+ | collectplus | | Collivery | collivery | | CometTech | comet-tech | | Con-way Freight | con-way | | Continental | continental | | Copa Airlines Courier | copa-courier | | Cope Sensitive Freight | cope | | Corporate Couriers | corporatecouriers-webhook | | Correos de Mexico | correos-de-mexico | | Correos Express | correosexpress | | Correos Express (API) | correosexpress-api | | Cosmetics Now | costmeticsnow | | Courant Plus | courant-plus | | Urbanfox | courex | | Courier Plus | courier-plus | | Courier IT | courierit | | CourierPost | courierpost | | Couriers Please | couriers-please | | cPacket | cpacket | | Captain Express International | cpex | | Croshot | croshot | | CSE | cse | | CTC Express | ctc-express | | Cubyn | cubyn | | Cuckoo Express | cuckooexpress | | Cyprus Post | cyprus-post | | DACHSER | dachser | | Shanghai Aqrum Chemical Logistics | dajin | | Danske Fragtmænd | danske-fragt | | DAO365 | dao365 | | Dawn Wing | dawnwing | | Dayton Freight | dayton-freight | | DB Schenker Ombudsleverans | dbschenker-privpak | | DB Schenker | dbschenker-se | | DB Schenker Sweden | dbschenker-sv | | DD Express Courier | ddexpress | | Delcart | delcart-in | | Delhivery | delhivery | | delivere | delivere | | Deliveryontime Logistics | deliveryontime | | Delnext | delnext | | Deltec Courier | deltec-courier | | DemandShip | demandship | | Innovel | descartes | | Designer Transport | designertransport-webhook | | Destiny Transportation | destiny | | Detrack | detrack | | Deutsche Post | deutsch-post | | DEX-I | dex-i | | DHL Standard | dhl | | DHL Active Tracing | dhl-active-tracing | | DHL Benelux | dhl-benelux | | DHL 2-Mann-Handling | dhl-deliverit | | DHL Spain Domestic | dhl-es | | DHL Express | dhl-express | | DHL Freight | dhl-freight | | Deutsche Post DHL | dhl-germany | | Deutsche Post DHL (FTP) | dhl-germany-ftp | | DHL Global Forwarding | dhl-global-forwarding | | DHL Global Forwarding API | dhl-global-forwarding-api | | DHL eCommerce US | dhl-global-mail | | DHL eCommerce Asia | dhl-global-mail-asia | | DHL eCommerce Asia (API) | dhl-global-mail-asia-api | | DHL Hong Kong | dhl-hk | | DHL Netherlands | dhl-nl | | DHL Express - Piece ID | dhl-pieceid | | DHL Poland Domestic | dhl-poland | | DHL - Reference number | dhl-reference | | DHL Supply Chain Australia | dhl-supply-chain-au | | DHL Supply Chain Indonesia | dhl-supplychain-id | | DHL Supply chain India | dhl-supplychain-in | | DHL Parcel Spain | dhlparcel-es | | DHL Parcel NL | dhlparcel-nl | | DHL Parcel UK | dhlparcel-uk | | Dicom | dicom | | Dimerco Express Group | dimerco | | Direct Couriers | directcouriers | | Direct Freight Express | directfreight-au-ref | | Directlog | directlog | | DMM Network | dmm-network | | DMSMatrix | dms-matrix | | DNJ Express | dnj-express | | Doora Logistics | doora | | DoorDash | doordash-webhook | | Dotzot | dotzot | | DPD | dpd | | DPD Germany | dpd-de | | DPD France | dpd-fr-reference | | DPD HK | dpd-hk | | DPD Hungary | dpd-hungary | | DPD Ireland | dpd-ireland | | DPD Poland | dpd-poland | | DPD Romania | dpd-ro | | DPD Russia | dpd-ru | | DPD UK | dpd-uk | | DPE Express | dpe-express | | DPE South Africa | dpe-za | | DPEX | dpex | | DSV | dsv | | DTDC India | dtdc | | DTDC Australia | dtdc-au | | DTDC Express Global PTE LTD | dtdc-express | | DX | dx | | DX (B2B) | dx-b2b-connum | | DX Freight | dx-freight | | DX (SFTP) | dx-sftp | | Daylight Transport, LLC | dylt | | Dynamic Logistics | dynamic-logistics | | Early Bird | earlybird | | Easy Mail | easy-mail | | Chukou1 | ec-firstclass | | Ecargo | ecargo-asia | | Echo | echo | | ECMSGlobal | ecms | | Ecom Express | ecom-express | | eFEx | efex | | EFS Asia | efs | | Ekart | ekart | | Yilian (Elian) Supply Chain | elian-post | | ELogistica | elogistica | | ELTA Hellenic Post | elta-courier | | Emirates Post | emirates-post | | EMPS Express | empsexpress | | Endeavour Delivery | endeavour-delivery | | Ensenda | ensenda | | Envialia | envialia | | Envialia Reference | envialia-reference | | EP-Box | ep-box | | eParcel Korea | eparcel-kr | | Equick China | equick-cn | | Eshipping | eshipping | | Estafeta | estafeta | | Estes | estes | | Etomars | etomars | | eTotal Solution Limited | etotal | | RETS express | ets-express | | EU Fleet Solutions | eu-fleet-solutions | | Eurodis | eurodis | | DPD France - Exapaq | exapaq | | Expeditors | expeditors | | Expeditors API | expeditors-api | | Expeditors API Reference | expeditors-api-ref | | Expresssale | expresssale | | EZship | ezship | | FAN Courier | fan | | FAR international | far-international | | Fastrak Services | fastrak-th | | Fasttrack | fasttrack | | Aramex Australia | fastway-au | | Fastway Ireland | fastway-ireland | | Fastway New Zealand | fastway-nz | | Fastway South Africa | fastway-za | | FedEx | fedex | | Fedex Cross Border | fedex-crossborder | | FedEx International MailService | fedex-fims | | FedEx Freight | fedex-freight | | FedEx UK | fedex-uk | | FERCAM Logistics & Transport | fercam | | Fetchr | fetchr | | Fetchr | fetchr-webhook | | First Flight Couriers | first-flight | | First Logistics | first-logistics | | FirstMile | firstmile | | FitzMark | fitzmark-api | | Flash Express | flashexpress | | Flyt Express | flytexpress | | FMX | fmx | | Fonsen Logistics | fonsen | | forrun | forrun | | Freightquote by C.H. Robinson | freightquote | | Frete Rápido | freterapido | | Furdeco | furdeco | | Falcon Express | fxtran | | Gati-KWE | gati-kwe | | GBA Services | gba | | GBS-Broker | gbs-broker | | GDEX | gdex | | Gel Express Logistik | gel-express | | GEM Worldwide | gemworldwide | | Go! Express & Logistics | general-overnight | | GEODIS | geodis-calberson-fr | | Geodis E-space | geodis-espace | | Giao hàng nhanh | ghn | | Gio Express | gio-express | | Tai Wan Global Business | global-express | | GlobalTranz | globaltranz | | Globegistics Inc. | globegistics | | Glovo | glovo | | GLS | gls | | GLS Croatia | gls-croatia | | GLS Czech Republic | gls-cz | | GLS Denmark | gls-da | | GLS Italy | gls-italy | | GLS Netherlands | gls-netherlands | | GLS Slovakia | gls-slovakia | | GLS Slovenia | gls-slovenia | | GLS Spain | gls-spain | | GoFly | gofly | | GOFO Express | gofo-express | | GoJavas | gojavas | | Grab | grab-webhook | | Greyhound | greyhound | | GSI Express | gsi-express | | GSO | gso | | HCT Logistics | hct-logistics | | Haidaibao | hdb | | Haidaibao Box | hdb-box | | Hellmann | hellmann | | Helthjem | helthjem | | Hermesworld | hermes | | Hermes Germany | hermes-de | | Hermes Italy | hermes-it | | Hua Han Logistics | hh-exp | | Hipshipper | hipshipper | | Qingdao HKD International Logistics | hkd | | Holisol | holisol | | Home Delivery Solutions | home-delivery-solutions | | Home Logistics | homelogistics | | HomeRunner | homerunner | | Hong Kong Post | hong-kong-post | | Hrvatska Pošta | hrvatska-posta | | HSM Global | hsm-global | | Hunter Express | hunter-express | | Huodull | huodull | | HX Express | hx-express | | i-dika | i-dika | | i-parcel | i-parcel | | iCumulus | icumulus | | IDEX | idexpress | | IDS Logistics | ids-logistics | | IMEX Global Solutions | imexglobalsolutions | | IML | iml | | IMX Mail | imxmail | | India Post Domestic | india-post | | India Post International | india-post-int | | Indopaket | indopaket | | Inexpost | inexpost | | InPost Paczkomaty | inpost-paczkomaty | | Instabox | instabox | | Intel-Valley | intel-valley | | Intelipost | intelipost | | DPD Local | interlink-express | | DPD Local reference | interlink-express-reference | | International Seur | international-seur | | International Seur API | international-seur-api | | Interparcel Australia | interparcel-au | | Interparcel New Zealand | interparcel-nz | | Interparcel UK | interparcel-uk | | Internet Express | intexpress | | Israel Post | israel-post | | Israel Post Domestic | israel-post-domestic | | Italy SDA | italy-sda | | Ivoy | ivoy-webhook | | J-Net | j-net | | Jam Express | jam-express | | Janco Ecommerce | janco | | Janio Asia | janio | | Japan Post | japan-post | | Jayon Express | jayonexpress | | JCEX | jcex | | Jersey Post | jersey-post | | Jet-Ship Worldwide | jet-ship | | 金斗云物流 | jindouyun | | JINSUNG TRADING | jinsung | | JNE | jne | | JNE (API) | jne-api | | Jocom | jocom | | Joom Logistics | joom-logistics | | JS EXPRESS | js-express | | J&T Express Malaysia | jtexpress | | JX | jx | | K1 Express | k1-express | | Kangaroo Worldwide Express | kangaroo-my | | KEC | kec | | Kerry eCommerce | kerry-ecommerce | | Kerry Express Thailand | kerry-logistics | | Kerry TJ Logistics | kerrytj | | Kerry Express Vietnam | kerryttc-vn | | KGM Hub | kgmhub | | Kiala | kiala | | Kuehne+Nagel | kn | | KNAirlink Aerospace Domestic Network | knuk | | Korea Post EMS | korea-post | | Korea Post | kpost | | Kronos Express | kronos | | KURASI | kurasi | | KWE Global | kwe-global | | Shenzhen Jinghuada Logistics | kwt | | Kua Yue Express | ky-express | | La Poste | la-poste-colissimo | | Lalamove | lalamove | | Landmark Global | landmark-global | | Landmark Global Reference | landmark-global-reference | | Lao Post | lao-post | | LaserShip | lasership | | Latvijas Pasts | latvijas-pasts | | leader | leader | | Legion Express | legion-express | | LexShip | lexship | | LHT Express | lht-express | | LICCARDI EXPRESS COURIER | liccardi-express | | Liefery | liefery | | Lietuvos Paštas | lietuvos-pastas | | Line Clear Express | line | | Link Bridge | linkbridge | | Lion Parcel | lion-parcel | | Livrapide | livrapide | | Locus | locus-webhook | | Transgroup | logistyx-transgroup | | Logwin Logistics | logwin-logistics | | Lone Star Overnight | lonestar | | Loomis Express | loomis-express | | Lotte Global Logistics | lotte | | LTIAN EXP | ltianexp | | LTL | ltl | | Logistic Worldwide Express | lwe-hk | | M Xpress Sdn Bhd | m-xpress | | Magyar Posta | magyar-posta | | Mail Boxes Etc. | mail-box-etc | | MailAmericas | mailamericas | | MailPlus | mailplus | | MailPlus Japan | mailplus-jp | | Mainfreight | mainfreight | | Mainway | mainway | | POS Malaysia | malaysia-post | | Malaysia Post | malaysia-post-posdaftar | | Mara Xpress | mara-xpress | | Matdespatch | matdespatch | | Matkahuolto | matkahuolto | | Groupe Mazet | mazet | | MBW Courier Inc. | mbw | | Megasave | megasave | | Mexico Redpack | mexico-redpack | | Mexico Senda Express | mexico-senda-express | | MGLOBAL | mglobal | | Midland | midland | | Mikropakket | mikropakket | | Mikropakket Belgium | mikropakket-be | | Milkman | milkman | | MISUMI Group Inc. | misumi-cn | | Mondial Relay | mondialrelay | | Mondial Relay Spain - Punto Pack | mondialrelay-es | | Mondial Relay France | mondialrelay-fr | | MRW | mrw-spain | | MUDITA | mudita | | M&X cargo | mx-cargo | | MXE Express | mxe | | Evri | myhermes-uk | | Mypostonline | mypostonline | | NACEX | nacex | | NACEX Spain | nacex-spain | | Nanjing Woyuan | nanjingwoyuan | | Naqel Express | naqel-express | | National Sameday | national-sameday | | Nationex | nationex | | Nationwide Express | nationwide-my | | NZ Post | new-zealand-post | | Neway Transport | neway | | Newgistics | newgistics | | Newgistics API | newgisticsapi | | New Zealand Couriers | newzealand-couriers | | Nhans Solutions | nhans-solutions | | Nightline | nightline | | Nim Express | nim-express | | Ninja Van | ninjavan | | Ninja Van Indonesia | ninjavan-id | | Ninja Van Malaysia | ninjavan-my | | Ninja Van Philippines | ninjavan-philippines | | Ninja Van Thailand | ninjavan-thai | | Ninjavan Webhook | ninjavan-webhook | | NiPost | nipost | | Norsk Global | norsk-global | | Nova Poshta | nova-poshta | | Nova Poshta (International) | nova-poshtaint | | Sequoialog | nowlog-api | | Nox NachtExpress | nox-nachtexpress | | NOX NightTimeExpress | nox-night-time-express | | NTL logistics | ntl | | OCA Argentina | oca-ar | | OCS ANA Group | ocs | | OCS WORLDWIDE | ocs-worldwide | | OkayParcel | okayparcel | | Old Dominion Freight Line | old-dominion | | Omni Parcel | omniparcel | | Omniva | omniva | | One click delivery services | oneclick | | One World Express | oneworldexpress | | OnTrac | ontrac | | FedEx Poland Domestic | opek | | OSM Worldwide | osm-worldwide | | Paack | paack-webhook | | Packlink | packlink | | Packs | packs | | PAL Express Limited | palexpress | | Palletways | palletways | | Pan-Asia International | pan-asia | | Pandu Logistics | pandulogistics | | Panther | panther | | Panther Order Number | panther-order-number | | Panther Reference | panther-reference | | Paper Express | paper-express | | Paperfly Private Limited | paperfly | | Paquetexpress | paquetexpress | | Parcel Force | parcel-force | | Parcel2Go | parcel2go | | Parcelled.in | parcelled-in | | PARCEL ONE | parcelone | | ParcelPal | parcelpal-webhook | | ParcelPoint | parcelpoint | | Parcel Post Singapore | parcelpost-sg | | Park N Parcel | parknparcel | | PCF Final Mile | pcfcorp | | PFC Express | pfcexpress | | PFL | pflogistics | | Pickupp Hong Kong | pickup | | Pickupp Malaysia | pickupp-mys | | Pickupp Singapore | pickupp-sgp | | Pickupp Vietnam | pickupp-vnm | | PIL Logistics | pil-logistics | | Pilot Freight Services | pilot-freight | | Pitney Bowes | pitney-bowes | | PITT OHIO | pittohio | | PIXSELL LOGISTICS | pixsell | | Planzer Group | planzer | | Poczta Polska | poczta-polska | | Pony express | pony-express | | CTT | portugal-ctt | | Portugal Seur | portugal-seur | | Post Serbia | post-serbia | | Post of Slovenia | post-slovenia | | Post56 | post56 | | Poșta Română | posta-romana | | Poste Italiane | poste-italiane | | Poste Italiane Paccocelere | poste-italiane-paccocelere | | Posten Norge | posten-norge | | Posti | posti | | PostNL | postnl | | PostNL International 3S | postnl-3s | | PostNL International | postnl-international | | PostNord | postnord | | Iceland Post | postur-is | | PayPal Package | ppbyb | | Professional Parcel Logistics | ppl | | Premo | premo | | Prima Multi Cipta | primamulticipta | | Professional Couriers | professional-couriers | | ProMed Delivery, Inc. | promeddelivery | | PTS Tracking | pts | | PTT Posta | ptt-posta | | Purolator | purolator | | Purolator International | purolator-international | | QualityPost | qualitypost | | Quantium | quantium | | Qxpress | qxpress | | Raben | raben-group | | RAF Philippines | raf | | RaidereX | raiderex | | RAM | ramgroup-za | | Red Carpet Logistics | rcl | | Red je Pakketje | redjepakketje | | Redur Spain | redur-es | | Relais Colis | relaiscolis | | Rincos | rincos | | RL Carriers | rl-carriers | | Roadbull Logistics | roadbull | | Roadrunner Transport Service | roadrunner-freight | | Rocket Parcel International | rocketparcel | | Royal Mail | royal-mail | | RoyalShipments | royalshipments | | RPD2man Deliveries | rpd2man | | RPX Indonesia | rpx | | RPX Logistics | rpxlogistics | | RPX Online | rpxonline | | RRD International Logistics U.S.A | rrdonnelley | | Russian Post | russian-post | | Ruston | ruston | | RZY Express | rzyexpress | | One Saar for IT | saee | | Safexpress | safexpress | | Sagawa | sagawa | | Saia LTL Freight | saia-freight | | SAILPOST | sailpost | | SAP EXPRESS | sap-express | | South African Post Office | sapo | | Saudi Post | saudi-post | | Scudex Express | scudex-express | | Southeastern Freight Lines | sefl | | Seino | seino | | SEKO Worldwide, LLC | seko-sftp | | SEKO Logistics | sekologistics | | Sending ES | sending | | Sendit | sendit | | Sendle | sendle | | SF Express | sf-express | | SF Express (Webhook) | sf-express-webhook | | SF International | sfb2c | | SFC | sfc | | SFC Service | sfcservice | | Zeek | sfplus-webhook | | Ship It Asia | ship-it-asia | | SHIPA | shipa | | Shippify, Inc | shippify | | Shippit | shippit | | Shiptor | shiptor | | ShopfansRU LLC | shopfans | | Shree Maruti Courier Services | shree-maruti | | Shree Tirupati Courier | shreetirupati | | Teliway SIC Express | sic-teliway | | J&T Express Singapore | simplypost | | Singapore Post | singapore-post | | Singapore Speedpost | singapore-speedpost | | Siodemka | siodemka | | Slovenská pošta | sk-posta | | SkyPostal | sky-postal | | SkyBox | skybox | | SkyNet Malaysia | skynet | | Skynet World Wide Express South Africa | skynet-za | | SkyNet Worldwide Express | skynetworldwide | | SkyNet Worldwide Express UAE | skynetworldwide-uae | | Skynet Worldwide Express UK | skynetworldwide-uk | | SMG Direct | smg-express | | Smooth Parcel | smooth | | SMSA Express | smsa-express | | Sonic Transportation & Logistics | sonictl | | Correos de España | spain-correos-es | | SEUR | spanish-seur | | Spanish Seur API | spanish-seur-api | | SEUR | spanish-seur-ftp | | Specialised Freight | specialisedfreight-za | | Spectran | spectran | | Speed Couriers | speedcouriers-gr | | Spee-Dee Delivery | speedee | | Speedex | speedex | | Speedex Courier | speedexcourier | | Speedy | speedy | | Spoton Logistics | spoton | | Spring GDS | spring-gds | | SPRINT PACK | sprint-pack | | SRE Korea | srekorea | | Stallion Express | stallionexpress | | StarTrack | star-track | | Star Track Courier | star-track-courier | | StarTrack Express | star-track-express | | STARKEN | starken | | STO Express | sto | | STONE3PL | stone3pl | | Sutton Transport | sutton | | Swiss Post | swiss-post | | Sunyou Post | sypost | | DPEX China | szdpex | | SZENDEX | szendex | | Taiwan Post | taiwan-post | | TAQBIN Hong Kong | taqbin-hk | | Yamato Japan | taqbin-jp | | TAQBIN Malaysia | taqbin-my | | TAQBIN Singapore | taqbin-sg | | TAQBIN Taiwan | taqbin-taiwan | | TONDA GLOBAL | tarrive | | Geniki Taxydromiki | taxydromiki | | Tazmanian Freight Systems | tazmanian-freight | | TCK Express | tck-express | | TCS | tcs | | Tecor Transport | tecor | | TFM Xpress | tfm | | TForce Final Mile | tforce-finalmile | | Kerry Express Hong Kong | tgx | | Thailand Thai Post | thailand-post | | The Courier Guy | thecourierguy | | TDG – The Delivery Group | thedeliverygroup | | SortHub | thenile-webhook | | Tiki | tiki | | TIPSA | tipsa | | TNT | tnt | | TNT Australia | tnt-au | | TNT-Click Italy | tnt-click | | TNT France | tnt-fr | | TNT Italy | tnt-it | | TNT Reference | tnt-reference | | TNT UK | tnt-uk | | TNT UK Reference | tnt-uk-reference | | Nexive | tntpost-it | | Toll IPEC | toll-ipec | | Toll New Zealand | toll-nz | | Toll Priority | toll-priority | | Tolos | tolos | | Tophatter Express | tophatterexpress | | TopYou | topyou | | Total Express | total-express | | tourline | tourline | | Tourline Express | tourline-reference | | Trackon Couriers | trackon | | TrakPak | trakpak | | Trans Kargo Internasional | trans-kargo | | TransMission | transmission-nl | | Trunkrs | trunkrs-webhook | | Tuffnells Parcels Express | tuffnells | | Tuffnells Parcels Express- Reference | tuffnells-reference | | UBI Smart Parcel | ubi-logistics | | United Delivery Service | uds | | UK Mail | uk-mail | | UkrPoshta | ukrposhta | | UniUni | uniuni | | UP-express | up-express | | UPS | ups | | UPS API | ups-api | | UPS Freight | ups-freight | | UPS Mail Innovations | ups-mi | | Urgent Cargus | urgent-cargus | | USF Reddaway | usf-reddaway | | uShip | uship | | USPS | usps | | USPS Informed Visibility - Webhook | usps-webhook | | Viaxpress | via-express | | ViettelPost | viettelpost | | VIR Transport | virtransport | | VIWO IoT | viwo | | Vietnam Post | vnpost | | Vietnam Post EMS | vnpost-ems | | VOX. | vox | | Wahana | wahana | | WanbExpress | wanbexpress | | Watkins Shepard | watkins-shepard | | Weaship | weaship | | WeDo Logistics | wedo | | WePost Logistics | wepost | | West Bank Courier | westbank-courier | | Whistl | whistl | | Wise Express | wise-express | | Wiseloads | wiseloads | | WishPost | wishpost | | Wizmo | wizmo | | WMG Delivery | wmg | | wnDirect | wndirect | | Ximex Delivery Express | xde-webhook | | XDP Express | xdp-uk | | XDP Express Reference | xdp-uk-reference | | Xend Express | xend | | XL Express | xl-express | | Xpedigo | xpedigo | | Xpert Delivery | xpert-delivery | | LTL Shipping | xpo-logistics | | Xpost.ph | xpost | | XpressBees | xpressbees | | Xpressen | xpressen-dk | | XQ Express | xq-express | | Yakit | yakit | | Yamato Hong Kong Shipments | yamato-hk | | Yanwen | yanwen | | YDH express | ydh-express | | 英诺供应链 | yingnuo-logistics | | Yodel | yodel | | Yodel International | yodel-international | | YRC | yrc | | YTO Express | yto | | Yunda Express | yundaex | | YunExpress | yunexpress | | Yurtici Kargo | yurtici-kargo | | Huahang Express | yycom | | Zajil Express Company | zajil-express | | Zeleris | zeleris | | ZeptoExpress | zepto-express | | Ziing Final Mile | ziingfinalmile | | Zinc | zinc | | ZJS International | zjs-express | | ZTO Express | zto-express | | Zyllem | zyllem | --- # Source: https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/klarna-deals-promotions.md # Klarna deals promotions ## Incentivize Klarna shoppers and boost conversion with an auto-applied deal on your site that is seamless to use. ## What is a Klarna deal? A **Klarna deal** is a discount that is automatically applied at the checkout when paying with Klarna at your store. This solution can be offered both in your site and/or across Klarna ecosystem. This capability allows you to strategically influence customer decisions at the point of purchase, boosting conversion as well as driving returning shoppers transactions. Klarna deals can be leveraged both on one time purchases as well as for subscriptions and on-demand payments. ### Prerequisites In order to enable Klarna deals in your website you need to: - Due to local legal regulations, to enable Klarna deals in UK, you must offer Pay Now as a payment method.  - [On-site messaging standard implementation](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging.md) in product and cart pages on your site to allow enablement of Klarna deal messaging. *If On-site messaging is not enabled on your site, you need to promote Klarna deal either on site banner and/or the product page.* - If you wish to gate the Klarna deal only to **new customers to your brand**, Extra Merchant Data will be required to allow identification of new customer. Learn more in the [next sections](https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/klarna-deals-promotions.md) - If you wish to offer a**discount only based on what the customer is buying**, `order_lines` implementation will be required in order to allow assortment inclusion or exclusion feature of Klarna deals. Learn more in the [next sections](https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/klarna-deals-promotions.md) ## Shopper experience Klarna deals enables an fully embedded user experience by leveraging existing On-site messaging placements as well Klarna payment widget presentation at the checkout to communicate active deals when paying with Klarna. ![ Enable a seamless user experience across the entire shopping journey](Zo0HSx5LeNNTw7mx_KlarnaDealsflow.jpeg) *Enable a seamless user experience across the entire shopping journey* ## Campaign configuration If you are already accepting Klarna as payment method in your store and you have On-site messaging enabled, Klarna deals is available out of the box and can be easily enabled by your Klarna representative with not additional technical effort on your side. When configuring a Klarna deal campaign, you will be able to define the following parameters according to your campaign needs: **Discount type:**  - proportional (e.g. 25% off) - fixed (e.g. \$25 off) **Time frame**: - start date for campaign - end date for campaign **Capping and minimun:** - Minimum order amount to unlock deal (orders above \$100) - Max discount amount that is granted (e.g. \$20) **Budget Control:** - Maximum budget for the campaign. - Budget capping to stop the campaign when reached **Audience segmentation**: - Opened to all customers checking out with Klarna. - New to Klarna only - New to Merchant only **Assortment exclusion or inclusion to consider:** - Product brand - Product category - Product name - Product ID or reference ## Audience segmentation When setting-up a Klarna deal that will be offered on your website there are three possible segmentations possible to determine who will get the discount. - **All users**: where everyone paying with Klarna on the merchant site will get access to the deal. - **New to Klarna:** where only users paying with Klarna for the first time or who didn't make a purchase in the past 12 months will get access to the deal. - **New to merchant:**where only users who never paid with the merchant before will get access to the deal. This is a key feature when you are looking to acquire new customers by offering discounts only to users who never shopped at your store before directly at the point of checkout, regardless if they have paid with Klarna before or not. There are no additional technical requirements to enable **All users**and**New to Klarna**segmentation. To enable **New to merchant**segmentation it is required that you send **“Extra Merchant Data”** (EMD) as part of their integration with Klarna, as early as possible in the checkout flow (i.e. on create_session). ### Extra Merchant Data for Klarna deals **Extra Merchant Data** (EMD) are additional data points that you can share with Klarna and that is not typically available during the checkout flow. This information may consist of data about the consumer performing the transaction, the product/services associated with the transaction or about the seller and their affiliates. Understand more about EMD and how to send it in [our guidelines](https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/extra-merchant-data.md) For Klarna deals you will be require to send at least one of the following 2 “packages”: - `payment_history_simple`: this package’s properties tell us if the user paid before or not in your store. - `payment_history_full`: this package’s properties tell us the number of purchases the user made at your store. ## Assortment exclusion or inclusion The assortment exclusion or inclusion feature allows you to selectively exclude or include certain products or categories from the discount offerings. This feature provides greater control and flexibility over the deals and promotions displayed to customers. For this feature to be enable, `order_lines` should be [shared during the session creation.](https://docs.klarna.com/api/payments/#operation/createCreditSession!path=order_lines&t=request) ### Order lines for Klarna deals The following fields are the ones that can be leveraged for building the assortment logic - `name`**name**: in some cases brand names are also present as part of the product name, in that case, `name` could also be used to do brand exclusion. - `reference`**reference** and `product_url`**product_url**: reference can be SKU (e.g 7365638) - `brand`**brand** for exclusion or inclusion of the products based on their brand. - `category_path`**category_path** for exclusion or inclusion based on specific category. Assortment exclusion or inclusion feature is highly dependent of the `order_lines` quality, for example if `category_path` data point is not received, a Klarna deal can’t be configured for a category exclusion. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/conversion-boosters/klarna-express-button.md # Express button ## Express button gives shoppers a fast and convenient way to buy with Klarna. ## How does Express button work? When a customer click on the Express button and successfully signs in, they will be redirected to checkout with: - Pre-filled customer and address data - Default shipping method (first available by sort order set in **Admin Stores**\> **Configuration**\> **Sales**\> **Delivery Methods**) - Klarna as a preselected payment method The checkout experience is designed and optimized for the Klarna payments integration flow. For more information about Express button, \[ refer to the product documentation\]. Before you enable Express button in your store, complete the [prerequisites](https://docs.klarna.com/express-button/) including [allowlisting production merchant IDs](https://docs.klarna.com/express-button/#allowlisting). ## Configuration To enable Express button in your store, go to **Stores**\> **Configuration**\> **Sales**\> **Payment Methods**\> **Klarna**\> **Klarna Express Button**: ![Screenshot of the configuration.](40507a1f-ExpressButton_Magento_Cart.jpeg) *Screenshot of the configuration.* In this menu, apart from enabling the button, you can also change the button’s design. For more details, refer to the [Express button customization guide](https://docs.klarna.com/conversion-boosters/express-checkout/additional-resources/button-styling/). ![ You can customize the Express button's design to match your store's look-and-feel.](f20d1c34-ebd0-40d2-ad04-16f716abbeac_Magento.jpeg) *You can customize the Express button's design to match your store's look-and-feel.* --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/klarna-osm-app-for-shopify.md # Klarna On-site messaging app for Shopify ## Learn how to display Klarna’s On-site messaging in your Shopify store. [Klarna On-site messaging](https://apps.shopify.com/klarna-on-site-messaging) (OSM) is a free, public app available in the [Shopify app store](https://apps.shopify.com/). This app allows you to add customized promotional messaging and inform your customers about their purchase power with Klarna before reaching the checkout. You can use the Klarna OSM app with any Shopify + Klarna integration that uses a Shopify theme, for example, a \[ direct integration\], [Shopify Payments](https://help.shopify.com/en/manual/payments/shopify-payments/local-payment-methods/klarna), or [Mollie](https://help.mollie.com/hc/en-us/sections/12840599723666). If you’ve integrated Klarna through [Global-e](https://www.global-e.com/klarna-partnership), you need to install Klarna OSM manually as the Klarna OSM app doesn’t support this integration method. Before you install and configure the On-site messaging app, [integrate Klarna with your Shopify store](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/ways-to-integrate-on-shopify) either directly through Klarna as an alternative payment method, or through another integration option. To preview the app’s integration and functionality, take a look at the video available [in the Shopify app store](https://apps.shopify.com/klarna-on-site-messaging). ## Privacy policy Get familiar with our privacy policy [available on Klarna.com](https://www.klarna.com/uk/privacy/). ### Legal compliance Please test to verify that product prices are correctly updated within the Klarna On-site messaging, specifically when different priced variants are selected. The placement should be refreshed by the app when the variant is updated by the customer, but this feature isn’t compatible with some themes. For more details, see our [troubleshooting guide](https://docs.klarna.com/platform-solutions/shopify/on-site-messaging-app-for-shopify/policies-and-support). --- # Source: https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/klarna-payments-in-native-apps-without-sdk.md # Klarna Payments Webview ## This section content outline known issues when integrating Klarna Payments in the merchant iOS and Android Apps without Klarna SDK. Providing a troubleshooting guide and recommended actions and implementation patterns for your app developers to ensure that Klarna Payments flow works properly. In case your mobile app is integrated with Klarna Payments and it is not using Klarna SDK, the payment flow could be interrupted getting the customer experience “stuck” on a page with the animated Klarna logo and not allowing to proceed with the payment. ​In order to understand what might cause the issue described above please ask your engineering team to follow the steps below. It is important to have all of the recommendations below implemented to make sure that Klarna Payments flow is working correctly. ## Use OAuth2-compatible webview component **This step is recommended for best performance.** If your application has integration with "*Sign In with Google"*or*any other social sign-in provider*, we recommend using the same webview component for running the Klarna Payments flow. In detail it means: - Use [ASWebAuthenticationSession](https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession) on iOS - Use [CustomTabs](https://developer.chrome.com/docs/android/custom-tabs) on Android ## Allow all Klarna domains to be loaded in your application It is best to allow ‘**\*.klarna.com**’ domains to be loaded in your webview, but if you need to have a specific list, use the following: - js.klarna.com - pay.klarna.com - payments.klarna.com - login.klarna.com ### Example If you are using the \`[react-native-webview](https://github.com/react-native-webview/react-native-webview/tree/master)\` library, it is configured in the \`[originWhitelist](https://github.com/react-native-webview/react-native-webview/blob/master/docs/Reference.md#originwhitelist)\` property and in the \`[onShouldStartLoadWithRequest](https://github.com/react-native-webview/react-native-webview/blob/master/docs/Reference.md#onshouldstartloadwithrequest)\` property. ## Allow redirects It is crucial that your webview does not block any response codes, like 302 and 303 that are commonly used for browser redirections. Klarna Payments flow relies on this capability in order to run correctly. ### Example If you are using the \`[react-native-webview](https://github.com/react-native-webview/react-native-webview/tree/master)\` library, check that you allow both Klarna Domains and the redirect status codes in the \`[onShouldStartLoadWithRequest](https://github.com/react-native-webview/react-native-webview/blob/master/docs/Reference.md#onshouldstartloadwithrequest)\` handler and \`[onNavigationStateChange](https://github.com/react-native-webview/react-native-webview/blob/master/docs/Reference.md#onnavigationstatechange)\` handler. ## Allow running OAuth2 flows Klarna Payments flow uses OAuth2 protocol to securely log the user in, so it is crucial that this flow is not blocked in your webview component. OAuth2 protocol is an industry standard for running user login flows, used by Google, Apple, Facebook and others. ### Example If you are using the \`[react-native-webview](https://github.com/react-native-webview/react-native-webview/tree/master)\` library, check that you allow both Klarna Domains and the redirect status codes in the \`[onShouldStartLoadWithRequest](https://github.com/react-native-webview/react-native-webview/blob/master/docs/Reference.md#onshouldstartloadwithrequest)\` handler and \`[onNavigationStateChange](https://github.com/react-native-webview/react-native-webview/blob/master/docs/Reference.md#onnavigationstatechange)\` handler. ## Allow InlineMediaPlayback for identification and verification flows Klarna Payments flow requires the capability to perform real time **identification and verification** **(ID&V)** for fraud prevention, underwriting, and KYC purposes, so it is crucial that your webview has the required configurations to support ID&V. ### Example To provide correct ID&V flows, standard user agent info is crucial. If there’s a need to customize user agent, the customized info should be added at the end of the standard user agent without overwriting it, as below: Mozilla/[version] ([system and browser information]) [platform details] [engine details] [browser details]; example.app/[version] If you’re using an iframe to integrate with Klarna, it’s **not recommended**. But if you do, check that you configure the following permissions correctly: If you are using the \`[react-native-webview](https://github.com/react-native-webview/react-native-webview/tree/master)\` library, check that you configure the following 2 properties correctly as below: - `allowsInlineMediaPlayback` = **true** - `mediaPlaybackRequiresUserAction` = **false** And also apply the changes suggested below for each platform. For **iOS** app, 1 - Set the permissions below in the Info.plist file as below: NSCameraUsageDescription Camera Access NSLocationWhenInUseUsageDescription Location Access 2 - \[Native App only\] Set WKWebView configuration as below example: func createWebView() -> WKWebView { let config = WKWebViewConfiguration() config.allowsInlineMediaPlayback = true config.mediaTypesRequiringUserActionForPlayback = [] let webview = WKWebView(frame: .zero, configuration: config) return webview } For **Android** app, 1 - Update permission setting in AndroidManifest.xml as below, 2 - \[Native App only\] Allow runtime permissions requests while accessing camera from the webview by setting WebChromeClient to your WebView and implementing **'[onPermissionRequest](https://developer.android.com/reference/kotlin/android/webkit/WebChromeClient#onpermissionrequest)** callback. Example of a WebChromeClient implementation would look similar to the following: The code snippet accepts that requestPermissions method is using a callback, checking the current state of the permissions and requesting consent of the user if needed. public class CustomWebChromeClient : WebChromeClient() { override fun onPermissionRequest(request: PermissionRequest?) { if (Build.VERSION.SDK_INT>= Build.VERSION_CODES.LOLLIPOP) { val requiredPermissions = getRequiredPermissions(request) requestPermissions(requiredPermissions) { accepted -> if (accepted) { request?.grant(request.resources) } else { request?.deny() } } } else { super.onPermissionRequest(request) } } @RequiresApi(Build.VERSION_CODES.LOLLIPOP) fun getRequiredPermissions(request: PermissionRequest?): Collection { val cameraNeeded = request?.resources?.asList() ?.contains(PermissionRequest.RESOURCE_VIDEO_CAPTURE) == true val audioNeeded = request?.resources?.asList() ?.contains(PermissionRequest.RESOURCE_AUDIO_CAPTURE) == true val permissions = mutableListOf() if (cameraNeeded) permissions.add(Manifest.permission.CAMERA) if (audioNeeded) permissions.add(Manifest.permission.RECORD_AUDIO) return permissions } } 3 - \[Native App only\] Make sure to also enable playback without user input via WebView settings. webview.settings.mediaPlaybackRequiresUserGesture = false --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/prestashop/payments/klarna-payments-in-prestashop.md # Klarna Payments in PrestaShop ## This page explains how to set up and configure the Klarna Payments module in your PrestaShop store. ## Overview The Klarna Payments module connects your PrestaShop store to Klarna and gives you full control over setup, styling, payment capture, and order management. It supports sandbox and live environments, automatic status sync, multilingual checkout, and partial captures or refunds, all handled directly from your PrestaShop admin. ## Installation There are two ways to install Klarna Payments in PrestaShop: ### Option 1: Upload via PrestaShop Back Office 1. Go to **Modules\> Module Manager** 2. Click **Upload a module** 3. Select or drag the file `klarnapayments.zip` 4. After upload, click **Configure** ### Option 2: Install via FTP 1. Extract `klarnapayments.zip` 2. Upload the **klarnapayments/** folder to your server’s **/modules/** directory 3. Log into the Back Office 4. Go to **Modules\> Module Catalog** 5. Search for **Klarna Payments** and click **Install** ## Configuration After installation, go to **Modules\> Module Manager**, search for **Klarna Official**, and click **Configure**. ![Klarna module on PrestaShop back office](Find_Klarna_module_on_PrestaShop_back_office.png) *Klarna module on PrestaShop back office* ### Add your Klarna credentials #### **1. Select the environment** ![Klarna module environment](Klarna_module_environment.png) *Klarna module environment* Mark the option **Run Klarna module in test mode** to choose whether the module uses the Klarna **test** or **production** environment. Enable this option for test orders, or disable it for real transactions (production). By default, this option is unmarked. Always confirm you’re using the correct environment when testing or going live. #### **2. Add Klarna API credentials** ![Adding API credentials on Klarna module](Adding_API_credentials_on_Klarna_module.png) *Adding API credentials on Klarna module* Paste the API **username** and **password** you generated in the Klarna Playground or Merchant Portal. Also select the correct **API endpoint** (region) that matches your Klarna merchant account. #### **3. Save credentials and verify connection** After saving your credentials, a green checkmark confirms the connection succeeded. ![Successfully saving credentials](Successfully_saving_credentials.png) *Successfully saving credentials* If credentials are incorrect or the environment is wrong, you’ll see a red notification. ![Error saving API credentials](Error_saving_API_credentials.png) *Error saving API credentials* ### Enable Klarna Payments ![Enable Klarna Payments](Enable_Klarna_Payments.png) *Enable Klarna Payments* In the **Klarna Payments** section, enable Klarna Payments if you have a direct merchant account with Klarna and want to add Klarna as a payment method in your checkout. This option uses Klarna API credentials created in the Klarna Merchant Portal.Important If you’re using Klarna through a payment service provider (Stripe, Adyen, Mollie, etc.), don’t enable Klarna Payments through this module. Instead, activate Klarna directly with the PSP. ### Map order statuses Go to the **PrestaShop order settings** and map the Klarna order statuses to the corresponding statuses in your PrestaShop store. ![Mapping order statuses](Mapping_order_statuses.png) *Mapping order statuses* | **Status for:** | **Suggested status on PrestaShop** | **Definition** | |----|----|----| | New orders | `Payment accepted` | Payment authorized / order created | | Captured orders | `Shipped` | Full payment amount captured | | Canceled orders | `Canceled` | Payment cancelled | | Refunded orders | `Refunded` | Refunded | | Partially captured orders | `Partially captured` | Partial payment amount captured | Default mapping Note You can adjust these based on your store’s fulfillment process. #### Capture upon fulfillment This section shows how to automate Klarna capture when a PrestaShop order reaches a certain status, like **Shipped**. To enable: 1. Check the **Capture upon fulfillment** option 2. Select the status(es) that should trigger the capture (e.g. shipped, partially captured, etc.) 3. Save the configuration ![Capture upon fulfillment](Capture_upon_fulfillment.png) *Capture upon fulfillment* Once active, Klarna captures the order when the status changes. ## Additional settings ![Additional settings](Additional_settings.png) *Additional settings* #### Debug mode Enable **debug mode** if you want to log full API requests and responses during testing. You can view logs in the **Logs** tab.Important Turn this off in production environments to avoid unnecessary data capture. #### Automatic order status change You can choose if Klarna should auto-update PrestaShop order statuses. - If enabled: Klarna updates PrestaShop status once per order - If disabled: Klarna creates the order, but status changes are manual #### Hosted payments page (HPP) Redirects customers to a Klarna hosted page to complete their payment. This option improves compatibility with third-party or one-page checkout modules and is enabled automatically when an OPC module is detected. #### B2B mode Enable B2B mode to send customer’s company details to Klarna. #### Default country Select the fallback country for Klarna to use if the customer’s locale can’t be detected from their checkout address. ## Next steps - [Managing Klarna orders on PrestaShop](https://docs.klarna.com/platform-solutions/e-commerce-platforms/prestashop/payments/order-management-in-prestashop/) - [Set up On-site messaging](https://docs.klarna.com/platform-solutions/e-commerce-platforms/prestashop/conversion-boosters/configuring-on-site-messaging/) - [Enable Express Checkout](https://docs.klarna.com/platform-solutions/e-commerce-platforms/prestashop/conversion-boosters/how-to-enable-express-checkout-in-prestashop/) - [Enable Sign in with Klarna](https://docs.klarna.com/platform-solutions/e-commerce-platforms/prestashop/conversion-boosters/how-to-enable-sign-in-with-klarna-in-prestashop/) --- # Source: https://docs.klarna.com/payments/web-payments/additional-resources/klarna-payments-sdk-reference.md # Klarna payments SDK reference ## This is the library reference for the Klarna payments JavaScript SDK. Here you can find a description of the different methods, their required parameters, and their returns. ## init() This method initializes the Klarna payments library. It is mandatory and expects the `client_token` received when \[ initiating a payment\]. For more information about initializing the JavaScript SDK, see the [check out](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-2-checkout.md) section. ### Example Here's an example of the `init()` call: ``` javascript try { Klarna.Payments.init({ client_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.dtxWM6MIcgoeMgH87tGvsNDY6cHWL6MGW4LeYvnm1JA' }) } catch (e) { // Handle error. } ``` Initializing the Klarna Payments JS library using the `init()` method. ### Parameters The init() method uses the following parameter: **`options`** (Object) | Property name | Description | |----|----| | `options.client_token` (String) | The client token received when \[ initiating a payment\]. | ### Returns `InvalidClientTokenError:` If `options.client_token` is not a valid [JSON Web Token](https://jwt.io/). ## load()~callback This callback occurs with the result of the `load()` call. For more examples of the potential responses, see the [Displaying the widget article](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-2-checkout.md). ### Example Here's an example of the `load()` callback: | Outcome | Response | |---------------------|------------------------| | Successful response | `{ show_form: true }` | | Error response | `{ show_form: false }` | ### Parameters The parameters for this method are the following: **`res (Object)`** Response | Property name | Description | |----|----| | `res.show_form` (Boolean) | If `true`, you should display the widget, if `false` you can decide to hide it from the user. | | `res.error` (Object) | If there are any adjustable errors, these are displayed here. | ## load() Display the Klarna widget in your checkout using the `load()` call. For more information, see the [Displaying the widget article](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-2-checkout.md). ### Example Here are the example of the `load()` call: ### One payment method category ``` javascript try { Klarna.Payments.init({ client_token: '...' }) Klarna.Payments.load({ container: '#klarna-payments-container', payment_method_category: 'pay_later' }, { // Data to be updated billing_address: { // ... } }, function (res) { // load~callback // ... }) } catch (e) { // Handle error. The load~callback will have been called // with "{ show_form: false }" at this point. } ``` ### Multiple payment method categories ``` javascript try { Klarna.Payments.init({ client_token: '...' }) Klarna.Payments.load({ container: '#klarna-payments-container', payment_method_categories: ['pay_now', 'pay_later'], instance_id: 'klarna-widget' }, { // Data to be updated billing_address: { // ... } }, function (res) { // load~callback // ... }) } catch (e) { // Handle error. The load~callback will have been called // with "{ show_form: false }" at this point. } ``` ### Parameters The parameters for this method are the following: **`options`** (Object) | Property name | Description | |----|----| | `options.container` (HTMLElement or String) | The container to render the application. It should be an HTML element or a valid CSS selector. | | `options.preferred_payment_method` (String) | The payment method to be pre-selected, if possible. | | `options.payment_method_category` (String) | The category of payment methods to be loaded. This value is used later to refer to the widget when calling `authorize()`. Using `payment_method_category` lets you load one payment method per widget. To load multiple payment methods, use the `payment_method_categories` property instead. | | `options.payment_method_categories` (Array) | The categories of payment methods to be loaded. Use this property instead of payment_method_category to load multiple payment methods. When using the `payment_method_categories` array, include an additional string, `instance_id`, for each `container` element. | **`data`** (Object) An optional object with data to update on the session. **`callback`** (load~callback) A function that will be called when the pre-assessment is completed. If you don't specify any payment methods categories in the load() call, the payment methods loaded in the widget will correspond to those returned in the response to the [initiate a payment session request](https://docs.klarna.com/payments/web-payments/additional-resources/klarna-payments-sdk-reference.md). ### Returns - `ApplicationNotInitializedError`: If `load()` is called without options and/or prior to `init().` - `InvalidContainerSelectorError`: If `options.container` is neither an HTML element nor a valid CSS selector. - `PaymentMethodCategoryNotProvidedError`: If `options.payment_method_category` is not provided as a parameter in the `load()` call. - `PreferredPaymentMethodNotSupportedError`: If `options.preferred_payment_method` is not supported. ## loadPaymentReview() This method only applies to the US market and is only relevant if you have a multi-step checkout with an order review page. If your checkout enables the customer to review the order after the payment step, you can also share in this review page the payment method your customer selected previously. For this, Klarna offers a payment review widget. ### Example Here's an example of the `loadPaymentReview()` call: ``` javascript try { Klarna.Payments.init({ client_token: '...' }) Klarna.Payments.loadPaymentReview({ container: '#klarna-payments-container' }, function (res) { // loadPaymentReview~callback // ... }) } catch (e) { // Handle error. The loadPaymentReview~callback will have been called // with "{ show_form: false }" at this point. } ``` Using the `loadPaymentReview()` method. ### Parameters The parameter for this method is the following: **`options`** (Object) | Property name | Description | |----|----| | `options.container` (HTMLElement or String) | The container to render the application. Should be an HTML element or valid CSS selector. | ### Returns: - `ApplicationNotInitializedError`: If called without `options` and/or prior to `init()`. - `OperationNotSupportedError`: If the operation is not supported for the current purchase country. - `InvalidContainerSelectorError`: If `options.container` is neither an HTML element nor a valid CSS selector. ## loadPaymentReview()~callback This call occurs with the result of the `loadPaymentReview` operation. ### Parameters The parameter for this method is the following: **`res`** (Object) Response | Property name | Description | |----|----| | `res.show_form` (Boolean) | A boolean indicating the result of the pre-assessment. | ## authorize()~callback This callback occurs with the result of the `authorize()` call. For more information, see the [Get authorization section](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/other-actions/authorization-callback.md). ### Examples The following are examples of this method: **`res`** (Object) Response | | | |----|----| | Successful authorization | `{ authorization_token: "b4bd3423-24e3", approved: true, javascript show_form: true }` | | Authorization that requires finalization | `{ approved: true, show_form: true, finalize_required: true }` | | Rejected authorization with fixable errors | `{ approved: false, show_form: true, error: {invalid_fields: ["billing_address.email"] } }` | | Rejected authorization with no-fixable errors | `{ approved: false, show_form: false}` | ### Parameters The parameters for this method are the following: **`res`** (Object) Response | Property name | Description | |----|----| | `res.authorization_token` (String) | If the purchase is approved, this token is needed to place an order or to create a customer token. | | `res.show_form` (Boolean) | A boolean indicating whether to keep showing the form or to remove it. | | `res.approved`(Boolean) | A boolean indicating the result of the credit assessment. | | `res.finalize_required`(Boolean) | A boolean indicating that the finalize method should be called in order to complete the authorization. | | `res.error` (Object) | Object specifying an error. Only available in case of fixable errors. | ## authorize() This call triggers the credit risk and fraud assessment in Klarna’s system to decide whether or not to accept the purchase. For more information, see the [Get authorization section](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-2-checkout.md). After a successful authorization, an order can be created within 60 minutes. ### Examples Here are the examples of the `authorize()` call: ### One payment method category ``` javascript try { Klarna.Payments.authorize({ payment_method_category: 'pay_later' }, { // Data to be updated billing_address: { // ... } }, function (res) { // authorize~callback // ... }) } catch (e) { // Handle error. The authorize~callback will have been called // with "{ show_form: false, approved: false }" at this point. } ``` ### Multiple payment method categories ``` javascript try { Klarna.Payments.authorize({ container: '#klarna-payments-container', payment_method_categories: ['pay_now', 'pay_later'], instance_id: 'klarna-widget' }, { // Data to be updated billing_address: { // ... } }, function (res) { // authorize~callback // ... }) } catch (e) { // Handle error. The authorize~callback will have been called // with "{ show_form: false, approved: false }" at this point. } ``` ### Parameters The parameters for this method are the following: **`options`** (Object) | Property name | Description | |----|----| | `options.auto_finalize` (Boolean) | An optional flag to turn off auto-finalization for the direct bank transfer payment method. | | `options.payment_method_category` (String) | The payment method category that was provided in the previous `load()`[load()](https://docs.klarna.com/payments/web-payments/additional-resources/klarna-payments-sdk-reference.md) call. If you don't provide this property in the `authorize()` call, but provided it in the corresponding `load()` call, the authorization will fail. | | `options.payment_method_categories` (Array) | The array of payment method categories that was provided in the previous `load()`[load()](https://docs.klarna.com/payments/web-payments/additional-resources/klarna-payments-sdk-reference.md) call. When using the `payment_method_categories` array, include an additional string, `instance_id`, for each `container` element. If you don't provide this property in the `authorize()` call, but provided it in the corresponding `load()` call, the authorization will fail. | **data** (Object) - An optional object with data to update on the session. **callback** (authorize~callback) - A function to be called when the authorization is completed. ### Returns - `PaymentMethodCategoryNotSupportedError`: If `options.payment_method_category` is not supported. - `ApplicationNotLoadedError`: If called prior to `load()`. ## reauthorize()~callback This callback occurs with the result of a reauthorization. ### Examples The following are examples of this method: | | | |----|----| | Successful reauthorization | `{ authorization_token: "b4bd3423-24e3", approved: true }` | | Rejected reauthorization | `{ approved: false }` | | Rejected reauthorization due to an invalid update | `{ approved: false, error: { invalid_fields: ["billing_address.email"] } }` | Reauthorize currently also includes `{ show_form: true/false }` in the response. This is deprecated. Instead, only an `{ approved: true, authorization_token: string }` response is correct for any action for reauthorizing. ### Parameters The parameters for this method are the following: **`res`** (Object) Response | Property name | Description | |----|----| | `res.show_form` (Boolean) | A boolean indicating whether to keep showing the form or to remove it. | | `res.authorization_token` (String) | If credit is approved, this token is needed to place an order or create a customer token. | | `res.approved` (Boolean) | A boolean indicating the result of the credit assessment. | | `res.error` (Object) | Only available in case of fixable errors. | ## reauthorize() You need to get a reauthorization if your customer made a change in the order. This applies to multi-step checkouts, where you offer a review page after selecting the payment method. The `authorization_token` you received originally is only valid for that specific state of the order. If you attempt to place an order without doing a reauthorize, it will fail. If the payment method widget is still visible, use a regular `authorize()` call instead. We suggest you trigger reauthorize once the customer clicks to complete the order. As with `authorize()`, you can provide an optional update object including all order details. It is also possible to start with a server-side session update per REST API, followed by an empty client-side call to reauthorize. The reauthorize call may trigger your customer confirmation on changed financing details. The integration should wait for the callback function. If it happens on a different page than where you originally ran `init()`, you need to initialize the SDK before doing reauthorize. ### Examples Here's an example of the `reauthorize()` call: ``` javascript try { Klarna.Payments.init({ client_token: '...' }) Klarna.Payments.reauthorize({ payment_method_category: 'pay_later' }, { // Data to be updated billing_address: { // ... } }, function (res) { // reauthorize~callback // ... }) } catch (e) { // Handle error. The reauthorize~callback will have been called // with "{ show_form: false, approved: false }" at this point. } ``` Using the reauthorize() call. ### Parameters The parameters for this method are the following: **`options`** (Object) | Property name | Description | |----|----| | `options.payment_method_category` (String) | The category of payment methods to be loaded. Only one can be included. | **data** (Object) - An optional object with data to update on the session. **callback** (authorize~callback) - A function that will be called when the reauthorization is completed. ### Returns - `ApplicationNotInitializedError`: If called prior to `init()`. - `PaymentMethodCategoryNotSupportedError`: If `options.payment_method_category` is not supported. - `PaymentMethodCategoryNotProvidedError`: If `options.payment_method_category` is not provided when required. ## finalize()~callback This callback occurs with the result of the `finalize()` operation. For more information, see the [Finalize an authorization section](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/other-actions/finalize-an-authorization.md). This is only relevant if you have a multi-step checkout and are offering direct debit through Klarna’s widget. ### Examples The following are examples of this method: | Outcome | Response | |----|----| | Successful finalization | `{ authorization_token: "b4bd3423-24e3", approved: true, show_form: true }` | | Rejected or aborted finalization | `{ approved: false, show_form: false }` | | Rejected finalization due to an invalid update | `{ approved: false, show_form: true, error: { invalid_fields: ["billing_address.email"] } }` | ### Parameters The parameters for this method are the following: **`res`** (Object) Response | Property name | Description | |----|----| | `res.show_form`(Boolean) | A boolean indicating whether to keep showing the form or to remove it. | | `res.authorization_token`(String) | If the purchase is approved, this token is needed to place an order or create a customer token. | | `res.approved` (Boolean) | A boolean indicating the result of the credit assessment. | | `res.error`(Object) | Only available in case of fixable errors. | ## finalize() Finalizing the authorization is required for some payment methods. For more information, see the [Finalize an authorization section](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/other-actions/finalize-an-authorization.md). This section is only relevant if you have a multi-step checkout and offer direct debit in the Klarna widget. ### Example Here's an example of the `finalize()` call: ``` javascript try { Klarna.Payments.init({ client_token: '...' }) Klarna.Payments.finalize({ payment_method_category: 'pay_later' }, { // Data to be updated billing_address: { // ... } }, function (res) { // finalize~callback // ... }) } catch (e) { // Handle error. The finalize~callback will have been called // with "{ show_form: false, approved: false }" at this point. } ``` Using the `finalize()` call. ### Parameters The parameter for this method are the following: **`options`** (Object) | Property name | Description | |----|----| | `options.payment_method_category` (String) | The payment method category that was provided in the previous load() call. | **data** (Object) An optional object with data to update on the session. **callback** (finalize~callback) A function that will be called when the finalization is completed. ### Returns - `ApplicationNotInitializedError`: If called prior to `init().` - `ApplicationNotLoadedError`: If called prior to `load().` - `PaymentMethodCategoryNotProvidedError`: If `options.payment_method_category` is not provided when required. - `PaymentMethodCategoryNotSupportedError`: If `options.payment_method_category` is not supported. ## on()~eventHandler This `eventHandler` occurs whenever the associated event is emitted inside Klarna payments. ### Parameters The parameter for this method is the following: **`payload`** - The payload may vary between events. ## on() This method registers an event handler for the given `eventName`. The events are triggered internally in Klarna payments. The supported events are: | Event | Comment | |----|----| | `heightChanged` | Emitted when the height of the iframe changes. The registered event handler is called with the new height (in pixels) as a number (integer). | | `fullscreenOverlayShown` | Emitted when the fullscreen overlay is shown. | | `fullscreenOverlayHidden` | Emitted when the fullscreen overlay is hidden. | ### Example Here's an example of the `on()` call: ``` javascript Klarna.Payments.on('heightChanged', function (newHeight) { console.log('got new iframe height', newHeight) }) ``` Sample event listener definition for `heightChanged.` ### Parameters The parameters for this method are the following: | Name | Description | |----|----| | `eventName` (String) | The name of the event to which you want to subscribe. | | `eventHandler` (on~eventHandler) | The function that should be called when the event is emitted. | ### Returns **`EventNotSupportedError:`**If trying to register an unsupported event. ## off() This method unregisters an event handler for the given `eventName`. ### Example ``` javascript var theEventHandler = function () { ... } Klarna.Payments.on('heightChanged', theEventHandler) // unregister this specific listener for heightChanged Klarna.Payments.off('heightChanged', theEventHandler) // unregister _all_ listeners for heightChanged Klarna.Payments.off('heightChanged') ``` De-registering event listeners. ### Parameters The parameters for this method are the following: | Name | Description | |----|----| | `eventName` (String) | The name of the event to which you want to subscribe. | | `eventHandler` (on~eventHandler) | The function that was previously registered for the `eventName`. Omit if you want to unregister all handlers for the `eventName`. | --- # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/klarna-standalone-webview-integration.md # Klarna WebView - Android ## In this step-by-step guide you will learn how to integrate the KlarnaStandaloneWebView into your Android app.
![hybrid_android_checkout.png](hybrid_android_checkout.png) *hybrid_android_checkout.png* ![3_overview.png](3_overview.png) *3_overview.png* ![hybrid_android_confirmation.png](hybrid_android_confirmation.png) *hybrid_android_confirmation.png*

Your checkout screen when Klarna is selected as payment method.

Klarna purchase flow starts when customer confirms to Continue with Klarna.

Your order confirmation screen after a successful payment.

​ #### Integration Steps - [Prepare](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/klarna-standalone-webview-integration.md): Make sure you have a web checkout integrated with Klarna Payments. - [Set up your app](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/klarna-standalone-webview-integration.md) (Mobile App): Set up return URL to your application. - [Present your web checkout](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/klarna-standalone-webview-integration.md) (Mobile App): Present you web checkout using System WebView. ## Prepare This guide will lead you through all the steps required to accept Klarna Payments in your mobile app using your web integration. At the end, you will be able to accept payments with Klarna with very few native changes.This guide assumes that you already have a web checkout integrated with Klarna Payments and you intend to use it in your mobile application. If you haven't done such web integration, we suggest you to check the [web payments documentation](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-2-checkout.md). ## Set up your app ### Import the SDK #### Add the Repository Add the Klarna Mobile SDK maven repository: ### Kotlin ``` kotlin repositories { maven("https://x.klarnacdn.net/mobile-sdk/") } ``` ### Groovy ``` groovy repositories { maven { url 'https://x.klarnacdn.net/mobile-sdk/' } } ``` #### Add the Dependency Add the SDK as a dependency to your app: ### Kotlin ``` kotlin dependencies { implementation("com.klarna.mobile:sdk:2.x.x") } ``` ### Groovy ``` groovy dependencies { implementation 'com.klarna.mobile:sdk:2.x.x' } ``` To read more about Mobile SDK versioning policy, check out [this section.](https://docs.klarna.com) ### Set up your app #### Return URL Klarna purchase flows might require authorizations in other applications (e.g. bank apps) or do a handover to the Klarna app. In such cases, a return URL to your application ensures seamless return to the flow in your app, hence setting up a return URL is required. It is expected that redirects to this URL should only open your application without any changes in the UI state, ensuring the customer can continue the flow prior to external navigation. You can read more about how deep links and intent filters work [on the Android Developers site](https://developer.android.com/training/app-links/deep-linking). You can set up a Return URL app scheme for your application by registering an `intent-filter` for the Activity you integrated Klarna, in your app’s `AndroidManifest.xml`: ``` xml ``` **Important:** Construct the return URL string passed to Klarna by combining the attributes defined in your 's `` tags, following the standard URL format: `://` ``` kotlin override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) intent?.data?.let { uri -> if (uri.host == Contants.klarnaReturnUrl.host && uri.host == Contants.klarnaReturnUrl.host) { // This is a return URL for Klarna – skip deep linking return } // This was not a return URL for Klarna } } ``` The hosting `Activity` should be using `launchMode` of type `singleTask` or `singleTop` to prevent a new instance from being created when returning from an external application. ## Present your web checkout ### Create Klarna WebView To add the `KlarnaStandaloneWebView` to your app's layout, there are two distinct ways. The following sections provide a detailed explanation of each approach. #### Creating the View from XML You can add the `KlarnaStandaloneWebView` to your XML layout as below. ``` xml ``` ``` kotlin val klarnaWebView = findViewById(R.id.webView) ``` #### Creating the View from Code If you instead want to create the `KlarnaStandaloneWebView` in code, you can use its constructor to create an instance and then add it to your layout. ``` kotlin val klarnaStandaloneWebView = KlarnaStandaloneWebView( context = ..., attrs = ..., defStyleAttr = ..., webViewClient = ..., eventHandler = ..., environment = ..., region = ..., theme = ..., resourceEndpoint = ..., returnURL = ... ) ``` In the following table you can see the parameters that the constructor expects. The required parameters are marked with an asterisk. | Parameter | Type | Description | |----|----|----| | context | Context | The context of the Activity the KlarnaStandaloneWebView is in. | | attrs | AttributeSet | The AtttributeSet that you usually pass when creating a View from code. Its default value is null. | | defStyleAttr | Int | An integer value that you usually pass when creating a View from code. Its default value is 0. | | returnURL | String | The return URL which is used for navigating users back to your app if necessary. | | webViewClient | KlarnaStandaloneWebViewClient | It's used to receive callbacks from the `KlarnaStandaloneWebView`. Its default value is null. | | eventHandler | KlarnaEventHandler | It's used to get notified of Klarna-related events. Its default value is null. | | environment | KlarnaEnvironment | An enumeration that is used to configure the endpoints and other behaviors that the `KlarnaStandaloneWebView` will be operating with. Its default value is null which means the environment will be `production` by default. | | region | KlarnaRegion | An enumeration that defines the regional API endpoints to which the `KlarnaStandaloneWebView` will send/receive requests. Its default value is null which means the region will be `EU` by default. | | theme | KlarnaTheme | An enumeration that defines the theming for the Klarna-related components that are displayed inside the KlarnaStandaloneWebView. Its default value is null which means it will be `light` by default. | | resourceEndpoint | KlarnaResourceEndpoint | An enumeration that defines the cloud provider to which the KlarnaStandaloneWebView will send/receive requests. Please note that this should not be changed or overridden. It's default value is null. | ### Load your checkout page `KlarnaStandaloneWebView` is just like any other WebView component, thus you can easily load your web checkout or any other web page with it. ``` kotlin klarnaWebView.loadUrl("https://www.merchant.com/checkout") // Load your checkout page where Klarna Payments is integrated ``` ## Optional ### Additional Methods As previously mentioned, the `KlarnaStandaloneWebView` can be perceived as a specialized `WebView` developed specifically for displaying Klarna-related content. Consequently, it inherits many methods and properties from the standard `WebView` with the addition of some Klarna-specific methods and properties. In essence, this means that while the `KlarnaStandaloneWebView` functions similarly to a typical `WebView` and maintains its broad functionality, it also includes certain distinct features that cater specifically to the Klarna content, enhancing its usability and performance within a Klarna context. ### WebView Methods and Properties Below is a set of methods from the `KlarnaStandaloneWebView`that are also available in a standard `WebView`. Please be aware that this list is not comprehensive, serving only as a highlight of commonly shared methods: - `loadUrl` - `postUrl` - `loadData` - `loadDataWithBaseUrl` - `reload` - `stopLoading` - `goBack` - `goForward` - `canGoBack` - `canGoForward` - `clearCache` ### Klarna-specific Methods and Properties Below is a set of methods and properties from the `KlarnaStandaloneWebView` that are Klarna-specific. Please be aware that this list is not exhaustive. - `eventHandler`: a mutable property that allows setting or getting the `KlarnaEventHandler`. - `loggingLevel`: a mutable property that allows setting or getting the `KlarnaLoggingLevel`. You can use this property to set the logging level of the `KlarnaStandaloneWebView`. - `productOptions`: a mutable property that allows setting the options for some of the Klarna products. - `sendEvent`: a method that can be used to send a message to a Klarna component which is loaded in the `KlarnaStandaloneWebView`. ### Enable logging The SDK will log events and errors while it’s running, which you can read in **logcat** console. You can set the logging level for the SDK through the `loggingLevel` property of integration instance. ``` swift klarnaWebView.loggingLevel = KlarnaLoggingLevel.Verbose ``` #### KlarnaLoggingLevel | Value | Description | |----------------------------|------------------------------------| | KlarnaLoggingLevel.Off | No logging | | KlarnaLoggingLevel.Error | Log error messages only | | KlarnaLoggingLevel.Verbose | Log all messages (debug and error) | ## What's next Klarna Mobile SDK provides a full suite of mobile-first integrations, including Klarna products like:
![Pink_Standard_Consumer_(1).png](Pink_Standard_Consumer_(1).png) *Pink_Standard_Consumer_(1).png* ![Pink_Standard_Consumer_(2).png](Pink_Standard_Consumer_(2).png) *Pink_Standard_Consumer_(2).png* ![Pink_Standard_Consumer_(3).png](Pink_Standard_Consumer_(3).png) *Pink_Standard_Consumer_(3).png*

Sign in with Klarna

On-site Messaging

Express Checkout

- **On-site Messaging**: Show contextual messaging let your customers know about the available payment options in pre-checkout: click [here](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/mobile-integration.md) to learn more. - **Sign in with Klarna**: Seamlessly identify and let users login via their Klarna account: click [here](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/on-site-messaging-for-mobile.md) to learn more. - **Express Checkout**: Accelerate your checkout process and boost conversion by offering a one-click checkout, click [here](https://docs.klarna.com/conversion-boosters/express-checkout/before-you-start.md) to learn more (Mobile SDK support available soon). Complete your integration with - [Order management](https://docs.klarna.com/payments/after-payments/order-management/before-you-start/what-is-order-management.md) - [Settlements](https://docs.klarna.com/payments/after-payments/settlements/settlement-files.md) - [End-to-end testing](https://docs.klarna.com/resources/developer-tools/testing-payments/test-cases.md) - [Prepare for go live](https://docs.klarna.com/resources/developer-tools/testing-payments/go-live-checklist.md)
--- # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/reactnative/klarna-webview.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/klarna-webview.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/reactnative/klarna-webview.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/klarna-webview.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/reactnative/klarna-webview.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/klarna-webview.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/reactnative/klarna-webview.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/klarna-webview.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/reactnative/klarna-webview.md # Klarna WebView - React Native ## This guide will walk you through the steps required to add the Klarna WebView to your React Native app and how to use it.
![Hybrd_ios_checkout.png](Hybrd_ios_checkout.png) *Hybrd_ios_checkout.png* ![3_overview.png](3_overview.png) *3_overview.png* ![hybrid_confirmation.png](hybrid_confirmation.png) *hybrid_confirmation.png*

Your checkout screen when Klarna is selected as payment method.

Klarna purchase flow starts when customer confirms to Continue with Klarna.

Your order confirmation screen after a successful payment.

#### Integration Steps - [Prepare](https://docs.klarna.com#prepare): Make sure you have a web checkout integrated with Klarna Payments. - [Set up your app](https://docs.klarna.com#set-up-your-app) (Mobile App): Set up return URL to your application. - [Present your web checkout](https://docs.klarna.com#present-your-web-checkout) (Mobile App): Present you web checkout using Klarna WebView from Mobile SDK. ## Prepare This guide will lead you through all the steps required to accept Klarna Payments in your mobile app using your web integration. At the end, you will be able to accept payments with Klarna with very few native changes.This guide assumes that you already have a web checkout integrated with Klarna Payments and you intend to use it in your mobile application. If you haven't done such web integration, we suggest you to check the [web payments documentation](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-sdk/step-2-checkout/). ## Setup your app ### Package Managers #### NPM If you want to add the SDK via `npm` use the following to add library dependency: ``` bash npm install react-native-klarna-inapp-sdk --save ``` #### Yarn If you are using yarn, then use the following to add library dependency: ``` shell yarn add react-native-klarna-inapp-sdk ``` For installing native dependencies for iOS, go to your `ios` directory and run `pod install`. ### Android You need to add a reference to the repository in your own app’s build.gradle which can be done by adding the lines between the comments below: ``` groovy allprojects { repositories { ... // Required configuration to fetch native Android SDK maven { url 'https://x.klarnacdn.net/mobile-sdk/' } } } ``` #### Return URL Mobile SDK integrations might, at some point, open third-party applications. To automatically return the user, these third-party applications need to know how to build a return intent or URL. To do that, you’ll need to provide the SDK with what we call the “Return URL” parameter. If you haven’t done so already, follow this [documentation](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/get-started/) for Android and this [documentation](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/get-started/) for iOS. ### iOS #### Return URL Klarna purchase flows might require authorizations in other applications (e.g. bank apps) or do a handover to the Klarna app. In such cases, a return URL to your application ensures seamless return to the flow in your app, hence setting up a return URL is required. It is expected that redirects to this URL should only open your application without any changes in the UI state, ensuring the customer can continue the flow prior to external navigation. You can set up a Return URL app scheme to your application by [configuring a custom URL scheme](https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app).**Important:** The return URL string passed to Klarna must include `://` after the scheme name. For example, if you defined `myApp` as the scheme, you must use `"myApp://"` as the return URL argument to Klarna.To avoid a Klarna specific app scheme, you can use a host in a common scheme for Klarna redirects, e.g. `myApp://klarna-redirect` , this can allow you to differentiate and handle these redirect in your handler. Considering the return URL is a constant value in `Constants.klarnaReturnUrl`, you can handle redirects to your return URL as such: ### SceneDelegate ``` swift func scene(_ scene: UIScene, openURLContexts URLContexts: Set) { guard let url = URLContexts.first?.url else { return } if (url.absoluteString.starts(with: Constants.klarnaReturnUrl.absoluteString)) { // This is a return URL for Klarna – skip deep linking return } // This was not a return URL for Klarna } ``` ### AppDelegate ``` swift func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool { if (url.absoluteString.starts(with: Constants.klarnaReturnUrl.absoluteString)) { // This is a return URL for Klarna – skip deep linking return true } // This was not a return URL for Klarna return false } ``` ### SwiftUI ``` swift @main struct MyApp: App { var body: some Scene { WindowGroup { // This is the root content view of your application AppContentView() .onOpenURL { incomingURL in if (url.absoluteString.starts(with: Constants.klarnaReturnUrl.absoluteString)) { // This is a return URL for Klarna – skip deep linking return } // This was not a return URL for Klarna } } } } ``` #### Klarna App URL Queries Klarna flows on mobile utilize Application Queries for Klarna app schemes to offer seamless app handover experience to customers. In order for the SDK to check availability of the Klarna app, we need you to enable querying Klarna app on the device by adding Klarna app schemes to [LSApplicationQueriesSchemes](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/LaunchServicesKeys.html#//apple_ref/doc/plist/info/LSApplicationQueriesSchemes). This can be configured easily in XCode by going to your project setting and under "Info"(alternatively this is also available in your `Info.plist` file) you should see an entry list for `Queried URL Schemes`, this list should contain the `klarna` and `klarnaconsent` schemes: ![mobile-sdk-queried-url-schemes-xcode.png](mobile-sdk-queried-url-schemes-xcode.png) *mobile-sdk-queried-url-schemes-xcode.png* ## Present your web checkout ### Create Klarna WebView After adding the required dependency you can import the `KlarnaStandaloneWebView` component and use it like so: ``` typescript import { KlarnaStandaloneWebView, KlarnaWebViewKlarnaMessageEvent, KlarnaWebViewError, KlarnaWebViewNavigationEvent, KlarnaWebViewProgressEvent, KlarnaWebViewRenderProcessGoneEvent, } from 'react-native-klarna-inapp-sdk'; const klarnaStandaloneWebViewRef = useRef(null); const MyKlarnaStandaloneWebView = () => { return ( { // Do something }} onLoadEnd={(event: KlarnaWebViewNavigationEvent) => { // Do something }} onError={(event: KlarnaWebViewError) => { // Do something }} onLoadProgress={(event: KlarnaWebViewProgressEvent) => { // Do something }} onKlarnaMessage={(event: KlarnaWebViewKlarnaMessageEvent) => { // Do something }} onRenderProcessGone={(event: KlarnaWebViewRenderProcessGoneEvent) => { // Do something }} /> ); }; ``` In what follows we will go through all the props and methods of the `KlarnaStandaloneWebView` component. | Param | Type | Description | |-----|----|-----------| | returnUrl | String | App scheme URL as defined in set up to return from external applications. | | overScrollMode |
  • always
  • never
  • content
| This is an optional Android-only prop that allows setting the over scroll mode of the web view. Default is `always` . | | bounces | boolean | This is an optional iOS-only boolean prop that allows controlling whether the web view's scroll view bounces past the edge of content and back again. If not provided, the default value will be `true` . | | style | `ViewStyle` | You can use it to style the `KlarnaStandaloneWebView` . | | onLoadStart | function | This prop is an optional lambda that is called when `KlarnaStandaloneWebView` starts loading/reloading a URL. The lambda has an instance of type `KlarnaWebViewNavigationEvent` as its only parameter. | | onLoadEnd | function | This prop is an optional lambda that is called when `KlarnaStandaloneWebView` finishes loading a URL. The lambda has an instance of type KlarnaWebViewNavigationEvent as its only parameter. | | onLoadProgress | function | This prop is an optional lambda that is called when `KlarnaStandaloneWebView` is loading a URL. The lambda has an instance of type `KlarnaWebViewProgressEvent` as its only parameter. | | onError | function | This is an optional lambda that is called when `KlarnaStandaloneWebView` fails to load a URL. The lambda has an instance of type KlarnaWebViewError as its only parameter. | | onKlarnaMessage | function | This is an optional lambda that is called when KlarnaStandaloneWebView receives a message from a Klarna component. The lambda has an instance of type KlarnaWebViewKlarnaMessageEvent as its only parameter. | | onRenderProcessGone | function | This is an optional Android-only prop that is called when `KlarnaStandaloneWebView` 's process crashes or is killed by the OS. The lambda has an instance of type `KlarnaWebViewRenderProcessGoneEvent` as its only parameter. | ## Load your checkout page `KlarnaStandaloneWebView` is just like any other WebView component, thus you can easily load your web checkout or any other web page with it. ``` typescript klarnaWebViewRef.current.load("https://www.merchant.com/checkout") // Load your checkout page where Klarna Payments is integrated ``` ## Optional ### Additional Methods As previously mentioned, the `KlarnaStandaloneWebView` can be perceived as a specialized `WebView` developed specifically for displaying Klarna-related content. Consequently, it inherits methods and properties from the standard `WebView` with the addition of some Klarna-specific methods and properties. In essence, this means that while the `KlarnaStandaloneWebView` functions similarly to a typical `WebView` and maintains its functionality, it also includes certain distinct features that cater specifically to the Klarna content, enhancing its usability and performance within a Klarna context. ### WebView Methods and Properties Below is a set of methods from the `KlarnaStandaloneWebView` that are available: - `loadUrl` - `reload` - `goBack` - `goForward` ## What's next Klarna Mobile SDK provides a full suite of mobile-first integrations, including Klarna products like:
![Pink_Standard_Consumer_(1).png](Pink_Standard_Consumer_(1).png) *Pink_Standard_Consumer_(1).png* ![Pink_Standard_Consumer_(2).png](Pink_Standard_Consumer_(2).png) *Pink_Standard_Consumer_(2).png* ![Pink_Standard_Consumer_(3).png](Pink_Standard_Consumer_(3).png) *Pink_Standard_Consumer_(3).png*

Sign in with Klarna

On-site Messaging

Express Checkout

- **On-site Messaging**: Show contextual messaging let your customers know about the available payment options in pre-checkout: click [here](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/on-site-messaging-for-mobile/) to learn more. - **Sign in with Klarna**: Seamlessly identify and let users login via their Klarna account: click [here](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/mobile-integration/) to learn more. - **Express Checkout**: Accelerate your checkout process and boost conversion by offering a one-click checkout, click [here](https://docs.klarna.com/conversion-boosters/express-checkout/before-you-start/) to learn more (Mobile SDK support available soon). Complete your integration with - [Order management](https://docs.klarna.com/payments/after-payments/order-management/before-you-start/what-is-order-management/) - [Settlements](https://docs.klarna.com/payments/after-payments/settlements/settlement-files/) - [End-to-end testing](https://docs.klarna.com/resources/developer-tools/testing-payments/test-cases/) - [Prepare for go live](https://docs.klarna.com/resources/developer-tools/testing-payments/go-live-checklist/)
--- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/known-constraints.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/known-constraints.md # Known constraints for Klarna Payments in Shopify ## Read about some limitations that can affect your Klarna with Shopify integration. ## 1. Klarna Payments accepts orders only for customer billing addresses in the markets that match the store base currency - Currently, Klarna Payments accepts orders only for customers with billing addresses in the markets that match the currency of the order. See the [list of supported markets and currencies in Klarna payments documentation](https://docs.klarna.com/payments/web-payments/before-you-start/data-requirements/puchase-countries-currencies-locales.md). - Customers in non-supported markets based on the order's currency are shown an error message on Klarna payment page load that the Klarna order can’t be placed or an error in Shopify checkout ("Your payment can’t be processed for technical reasons. Try again or use a different payment method."), depending upon the Klarna account configuration and Shopify store settings, for example, when theKlarna account doesn't support the store's single base currency. - Shopify limits Klarna payments as an alternative payment method, the same for all alternative payments methods, to always transact only in the store’s single base currency, [as documented in this Shopify help article](https://help.shopify.com/en/manual/payments/shopify-payments/multi-currency/conversions#shopify-payments-and-other-payment-providers). Even if the store displays prices in multiple currencies, including in checkout or using Shopify Markets, Shopify will update the order's currency to the store's single base currency when redirecting to the alternative payment provider.  - If you need to support multiple currencies with Klarna, you can use multiple Shopify stores or an alternative checkout, for example, [Global-e](https://www.global-e.com/). - For example, if the store base currency is SEK, Klarna payments will be able to accept orders for customers whose billing country is Sweden. Customers with addresses in other countries will see an error message, for example one shown in the screenshot below. The exact error message may differ depending on region and Klarna product (for example: "We can't offer you this payment method right now" or “Option not available”.) For stores with base currency of EUR, Klarna can accept orders for multiple regions which transact in EUR. For other countries, a single region is supported for each currency. ![ The exact error message may differ based on region and other data.](9679d839-68a5-4d25-8835-6edcca9536b8_shopify.jpeg) *The exact error message may differ based on region and other data.* ## 2. Klarna requests customers to enter their phone number Even if customers previously entered their phone number in Shopify checkout, Shopify may not share that phone number with payments integrations when email is required in checkout. Thus [Klarna may ask the customer to enter their phone number again](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/how-to-handle-customer-data.md). ## 3. Renaming the payment method isn’t supported While some [Shopify custom script code](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/shopify-plus-custom-scripts) works for payment methods integrated via Shopify's new payments app integrations, [renaming the payment method isn’t currently supported by Shopify](https://community.shopify.com/c/payments-shipping-and/can-you-add-or-change-the-name-of-payment-options/m-p/2040190), as payment providers can configure translations for the payment method name. With the new Klarna payment integration for Shopify, translations aren’t needed since the name "Klarna" works in any language. You can find the list of translated payment method names in [this article](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/language-locale-and-translations.md). ## 4. Klarna logo is not supported to be automatically included in theme footer Currently, the payment method footer injection isn’t supported by Shopify's new payments platform. As a workaround, instead of using liquid code `shop.enabled_payment_types`[shop.enabled_payment_types](https://shopify.dev/api/liquid/objects/shop#shop-enabled_payment_types), you may update your store's footer theme code directly, for example, by adding the code below, but you'll need to test what works for your store's specific theme. You can also refer to [another solution posted in the Shopify community](https://community.shopify.com/c/shopify-design/klarna-logo-doesn-t-show-in-footer/m-p/1589308). ``` ruby {% assign enabled_payment_types = 'paymenttype1,paymenttype2,klarna' | remove: ' ' | split: ',' %} ``` Use this code to update your store's footer theme. ## 5. The amount paid by the customer to Klarna doesn't match the Shopify order total If customers update a related, but different Shopify session separately from the Shopify session used to place the Klarna order, the order totals between the Shopify and Klarna orders may not match, but the **Paid by customer** amount for the Shopify order should always match the Klarna order total. While not ideal, this is working as expected and designed. Make sure to only fulfill order line items paid for by the customer. ![ The Shopify amount should always match the Klarna order total.](14a33393-3606-4c96-be11-59b944533084_Screenshot.jpeg) *The Shopify amount should always match the Klarna order total.* ## Feedback and support If you need additional support, please reach out to [your region's Merchant Support team](http://klarna.com/merchant-support). [The Shopify community](https://community.shopify.com/) is a good place for Shopify questions, support, and feedback, in addition to [the Shopify help center](https://help.shopify.com/). --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/payments/kp-overview.md # Klarna payments -Adobe Commerce ## Learn about the features offered by Klarna payments in the Klarna Adobe Commerce extension. ## Overview The Klarna payments extension lets you add any of Klarna's payment methods to your checkout page in Adobe Commerce. The key features supported by Klarna payments in the extension are: - Availability in all [markets](https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/payments/kp-overview.md) where Klarna is available - All [payment methods](https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/payments/kp-overview.md) available in each market - [Authorization callback](https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/payments/kp-overview.md) - [Business to business (B2B)](https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/payments/kp-overview.md) purchases - [Extra merchant data (EMD](https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/payments/kp-overview.md)) - [Merchant references](https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/payments/kp-overview.md) - \[ Klarna payments GraphQL\] The following features are currently not supported: - [Recurring payments and tokenization](https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/subscriptions-and-on-demand) - [Store views for multi-currency support](https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/payments/kp-overview.md) - [Deferred Total Calculation](https://experienceleague.adobe.com/en/docs/commerce-operations/performance-best-practices/high-throughput-order-processing#deferred-total-calculation) - this Adobe Commerce feature is not currently supported for the Klarna payments integration, but will be reviewed in the future for support if reasonable. For more information about Klarna payments, refer to the [dedicated section](https://docs.klarna.com/klarna-payments) of our product documentation. **Prerequisite**: When using the Klarna m2-klarna Adobe Commerce extension, for a direct integration of Klarna Payments, you will need a Klarna merchant account, for which you can [sign up here](https://klarna.com/signup). ## Markets Klarna payments can be used in all markets where Klarna is available without any technical restrictions, including North America, Europe, and Oceania. For a detailed list of supported countries [here](https://docs.klarna.com/payments/web-payments/before-you-start/data-requirements/puchase-countries-currencies-locales.md). The store has to be configured to match the market's specifics, for example, the correct tax and currency settings. Once that’s configured, the Klarna payments API has to be configured in the Admin\> **Stores**\> **Configuration**\> **Sales**\> **Payment Methods**\> **Klarna**\> **General settings**. ![ Edit the shop's admin settings to enable Klarna payments](ZwamYIF3NbkBXFEU_ACGeneralsettings.jpeg) *Edit the shop's admin settings to enable Klarna payments* ## Payment methods The Klarna extension support all Klarna’s payment methods. Klarna handles the configuration of the payment methods within Klarna, so you don’t need to configure individual payment method settings in the shop or in the extension. You can also use Klarna payments in Adobe Commerce's Progressive Web Apps (PWA) environment. The extension’s configuration in PWA is the same as the configuration of Klarna payments in a non-Adobe Commerce PWA environment. However, an additional request must be sent to a specific endpoint in the extension in the PWA environment. [Learn more about Adobe Commerce's PWA environment](https://developer.adobe.com/commerce/pwa-studio/). ## Authorization callback Introduced in [m2-klarna extension version 2.0.5](https://commercemarketplace.adobe.com/klarna-m2-klarna.html#product.info.details.release_notes) (released May 2023), the authorization callback supports server-side communication for the creation of Klarna payments orders, as client-side order creation may not be successful for all orders. While orders may still be created successfully for many orders via the client-side authorization (e.g. if the shop doesn't accept the server-side authorization callback), client-side order creation cannot cover all order scenarios fully, thus the server-side authorization callback is *required*to be able to successfully complete all order creation scenarios. For more about the Klarna Payments authorization callbacks, refer to the [Authorization callbacks article](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/other-actions/authorization-callback.md). The shop's web server must allow public access for Klarna to call the shop's authorization callback provided within the m2-klarna extension: ** url}/checkout/klarna/authorize?dryRun=true** It is important this request from Klarna can reach the shop's functional code for the authorization data to be processed; the request should not be blocked by security interceptors, e.g. CAPTCHA, Cloudfare, etc. You can confirm public access by calling the API by sending a POST request,e.g. with cURL. Any response other than the pattern of the example below means the endpoint is not accessible functionally. Even if the response is 200, if the response does not include the "message" param, the endpoint is not functional. ``` http curl --request POST \ --url 'https://{shop url}/checkout/klarna/authorize?dryRun=true' \ --header 'Accept: application/json' \ --header 'Content-Type: application/json' ``` authorize dryRun request ``` http { "code": 200 "message": "The {full path to the url} is accessible.", "timestamp": {request timestamp} } ``` authorize dryRun success response (with variable data bracketed) ## Business to business (B2B) Klarna payments allows business to business (B2B) purchases. The following updates are required for B2B purchases to work: 1. B2B must be enabled by Klarna for the Merchant ID (MID). 2. You have to enable B2B in the Admin. You can find the configuration option in **Stores**\> **Configuration**\> **Sales**\> **Payment Methods**\> **Klarna**\> **Klarna Payments**. Since currently there’s no supported Adobe Commerce standard selector for customers to flag the order as business to consumer (B2C) or B2B, an order is only considered a B2B one when a customer enters data in the **Company Name** billing address field. ![ You can enable B2B payments in the Klarna Payments settings in the Adobe Commerce Admin.](Zwam74F3NbkBXFGa_ACKlarnaPaymentsconfiguration.jpeg) *You can enable B2B payments in the Klarna Payments settings in the Adobe Commerce Admin.* ## Extra merchant data (EMD) In some cases, we require additional information regarding the customer and the purchase in order to make a correct risk assessment. This information, called Extra merchant data (EMD), may consist of data about the customer performing the transaction, the product/services associated with the transaction, or the seller and their affiliates. The following method returns the request instance, which is later converted to an array and sent as a request to Klarna: ``` php \Klarna\Kp\Model\Api\Builder\Request::generateCreateSessionRequest() \Klarna\Kp\Model\Api\Builder\Request::generateUpdateSessionRequest() \Klarna\Kp\Model\Api\Builder\Request::generatePlaceOrderRequest() ``` It returns the instance `Klarna\Kp\Api\Data\RequestInterface` (`Klarna\Kp\Model\Api\Request`). To add EMD, create an [after plugin](https://developer.adobe.com/commerce/php/development/components/plugins/#after-methods) on this method. To insert the EMD in the request, use the `setAttachment` method on the request instance. ## Merchant references To include [merchant_reference1](https://docs.klarna.com/api/payments/#operation/createOrder!path=merchant_reference1&t=request) and [merchant_reference2](https://docs.klarna.com/api/payments/#operation/createOrder!path=merchant_reference2&t=request) data fields, for example, to match the order's merchant references as included in Klarna's settlement files, you can create an [after plugin](https://developer.adobe.com/commerce/php/development/components/plugins/#after-methods) for the \Klarna\Kp\Model\Api\Builder\Nodes\MerchantReferences::addToRequest() method. ## Configuration You can quickly enable Klarna payments in the Admin by changing a few settings. Before proceeding, make sure you have your \[ API credentials set up\]. ### Steps to configure Klarna payments To configure Klarna payments in the Klarna extension, follow these steps: 1. In the Adobe Commerce Admin, go to **Stores**\> **Configuration**\> **Sales**\> **Payment Methods**\> **Klarna**\> **General Settings** 2. Expand the **Klarna Payments** section and set **Enable** to *Yes*. 4\. If your Klarna account supports business to business (B2B) payments, set **Enable B2B** to *Yes*. Note the following: - Since currently there’s no supported Adobe Commerce standard selector for customers to flag the order as business to consumer (B2C) or B2B, an order is only considered a B2B one when a customer enters data in the **Company Name** billing address field. - Your Merchant ID (MID) has to be enabled for B2B by Klarna. This option is currently available only is selected regions. ## Multiple step checkout If you customize checkout to consist of multiple steps or pages and offer payment methods that pull funds directly from the customer, for example, a direct bank transfer, you have to appropriately customize the Klarna payments integration to finalize the authorization, as covered in the [authorization guide](https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/payments/kp-overview.md). ## GraphQL checkouts Headless e-commerce architecture is based on a headless content management system (CMS) that stores, manages, and delivers content without a front end and only through an API. On a headless platform, the front end (or the head) has been decoupled and removed, leaving only the back end. Back-end developers use APIs to deliver things like products, blog posts, or customer reviews. Front-end developers work on how to present that content using any framework they desire. GraphQL is a query language developers can use to retrieve data from a server. Adobe Commerce uses GraphQL as an alternative way of retrieving front-end information. For more information about GraphQL, refer to the [GraphQL checkout tutorial](https://devdocs.magento.com/guides/v2.3/graphql/tutorials/checkout/index.html). ### Workflow Klarna payments requires cart information to initiate the payment session. For this reason, the below steps can be executed only after a cart has been created. Please follow Adobe's [GraphQL checkout tutorial](https://devdocs.magento.com/guides/v2.4/graphql/tutorials/checkout/index.html) to create a cart. 1. The Progressive Web App (PWA) client calls the [`createKlarnaPaymentsSession`](https://devdocs.magento.com/guides/v2.4/graphql/mutations/create-klarna-payments-session.html) mutation to generate the `client_token` and retrieve a list of `payment_categories`.This step can be executed at any time after the cart is created. However, we recommend that you add products to the cart and set the billing address, shipping address, and shipping method on the cart before you perform this step. 2. Adobe Commerce forwards the request to Klarna. 3. Klarna returns the `client_token` and the `payment_categories` available to the customer. 4. Adobe Commerce forwards the token to the client. 5. The client sends the cart query to retrieve the available payment methods. 6. Adobe Commerce must always retrieve the latest status information from Klarna before returning the Klarna payments method as an option to the customer. This is important to ensure that the latest available payment options are always shown to the customer. 7. Klarna returns an updated list of `payment_categories`. 8. Adobe Commerce returns all available payment methods, including Klarna payment methods. 9. The PWA client renders the Klarna payment widget.The PWA client uses the `client_token` and `payment_categories` to initialize the [Klarna payments JavaScript SDK](https://docs.klarna.com/payments/web-payments/additional-resources/klarna-payments-sdk-reference.md). 10. The PWA client sends the [authorization](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-2-checkout.md) directly to Klarna.On the checkout page, the customer selects Klarna as the payment method and clicks **Place Order**. When this happens, the PWA client must send the `authorize()` call to Klarna. Then, the customer follows the authorization steps on the Klarna inline modal. During this phase, the communication between the PWA client and Klarna is handled directly by the Klarna Payments JS SDK. 11. Klarna returns the `authorization_token` in response to the authorize call. Note: that [Klarna m2-klarna extension flow is built to handle Klarna sharing the authorization_token either (or both) via client side or server side calls](https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/payments/kp-overview.md), but the Klarna authorization callback can be optional for graphQL with [PPP-1503 (v3.1.1+](https://commercemarketplace.adobe.com/klarna-m2-klarna.html#product.info.details.release_notes)) 12. Set the payment method providing the `authorization_token` as part of the [`setPaymentMethodOnCart`](https://devdocs.magento.com/guides/v2.4/graphql/mutations/set-payment-method.html) mutation.The client uses the [`setPaymentMethodOnCart`](https://devdocs.magento.com/guides/v2.4/graphql/mutations/set-payment-method.html) mutation to set the payment method to `klarna_`. The `authorization_token` is passed in the klarna object. 13. Adobe Commerce returns an updated cart object. 14. The PWA client runs the [`placeOrder`](https://developer.adobe.com/commerce/webapi/graphql/schema/cart/mutations/place-order/) mutation. 15. Adobe Commerce sends the place order request to Klarna. 16. Klarna sends the response to Adobe Commerce. 17. Adobe Commerce creates an order and sends an order ID in response to the [`placeOrder`](https://developer.adobe.com/commerce/webapi/graphql/schema/cart/mutations/place-order/) mutation. {{#mermaid: sequenceDiagram autonumber participant A as Client participant B as Adobe Commerce participant C as Klarna Payments alt Initialization A ->> B: Run the createKlarnaPaymentsSession mutation B ->> C: Adobe Commerce forwards the request C ->>B: Klarna returns the client_token and payment_categories B ->>A: Adobe Commerce forwards the response else Widget rendering A ->>B: Get available payment methods B ->>C: Get latest status C ->>B: Klarna returns latest status B ->>A: Available payment methods A ->>A: PWA renders KP widget else Authorization A ->>C: PWA client sends the authorize() directly to Klarna C ->>A: Klarna returns the authorization_token else Set payment method on created A ->>B: Set the payment method providing the authorization_token B ->>A: Adobe Commerce returns an updated Cart Object else Place order A ->>B: Run the placeOrder mutation B ->>C: Adobe Commerce sends the place order request to Klarna C ->>B: Klarna sends the response to Adobe Commerce B ->>A: Adobe Commerce creates the order end }} ### Cart updates During the purchase flow, the cart can be updated by adding additional products, applying coupons, and changing the billing or shipping address. All these events might cause a change in Klarna options for the specific customer. In order to always present customers with the latest available payment options provided by Klarna, the PWA client must: 1. Perform a cart update. 2. Adobe Commerce returns an updated cart object. 3. Send the cart query to retrieve the latest available payment methods. 4. Adobe Commerce sends another request to Klarna with the latest information available from the cart. 5. Klarna returns a new list of payment methods. Note that the list might contain different options for the customer. 6. Adobe Commerce returns an updated cart object. 7. [Reload the widget](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-2-checkout.md) on the client side. {{#mermaid: sequenceDiagram autonumber participant A as Client participant B as Adobe Commerce participant C as Klarna Payments alt Cart Update A ->> B: Perform cart update (e.g. add product, apply coupon...) B ->> A: Adobe Commerce returns an updated Cart Object else Widget reloading A ->>B: Get available payment methods B ->>C: Get latest status C ->>B: Klarna returns latest status B ->>A: Available payment methods A ->>A: PWA renders KP widget end }} When you set the payment method to Klarna in the [`setPaymentMethodOnCart`](https://devdocs.magento.com/guides/v2.4/graphql/mutations/set-payment-method.html) mutation, the payment_method object must contain a klarna object. #### Examples The following example shows the [`setPaymentMethodOnCart`](https://devdocs.magento.com/guides/v2.4/graphql/mutations/set-payment-method.html) mutation constructed for the Klarna payment method. **Request** ``` null mutation { setPaymentMethodOnCart(input: { cart_id: "3WxC8gQn4Fbo55yqVLSiUFJ9fmEwnlxG" payment_method: { code: "klarna_pay_later" klarna: { authorization_token: "e9abc610-6748-256f-a506-355626551326" } } }) { cart { selected_payment_method { code } } } ``` A sample `setPaymentMethodOnCart` mutation for the Klarna payment method. **Response** ``` null { "data": { "setPaymentMethodOnCart": { "cart": { "selected_payment_method": { "code": "klarna_pay_later" } } } } } ``` A sample response to the `setPaymentMethodOnCart` mutation. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/language-locale-and-translations.md # Language, locale, and translations ## This article explains how language, locale, and translations work for the Klarna payment method in Shopify. ## Payment method name translations in the checkout Klarna configures the translations for the Klarna payment method. For each supported language, one translation is available. Read more about it [in the Shopify documentation](https://shopify.dev/apps/payments/creating-a-payments-app/creating-a-payments-app#payments-app-extension-configuration-fields). Note the following rules which govern which translation is displayed in the checkout: - The displayed translation isn't determined by the customer's country or storefront language. - The translation used in the store's checkout is determined by the store's single checkout language, which is configured in the store’s Shopify admin under **Settings**\> **Checkout and accounts**\> **Manage checkout language**. The following table shows translated payment method name in each language: | **Language** | **Translated payment method name** | |--------------|-------------------------------------------| | Czech | Klarna - Zaplať ve 3 splátkách | | Danish | Klarna - Betal nu eller senere | | Dutch | Klarna - Betaal nu of betaal later | | English | Klarna - Flexible payments | | Finnish | Klarna - Maksa heti tai myöhemmin | | French | Klarna - Payer maintenant, ou plus tard | | German | Klarna - Sofort oder später bezahlen | | Greek | Klarna - 3 άτοκες δόσεις | | Hungarian | Klarna - Fizetés most vagy fizetés később | | Italian | Klarna - Paga in 3 rate | | Norwegian | Klarna - Betal nå eller senere | | Polish | Klarna - Kup teraz, zapłać później | | Portugese | Klarna - 3 pagamentos sem juros | | Spanish | Klarna - Paga a plazos sin intereses | | Swedish | Klarna - Betala nu eller senare | Currently, payment methods can’t be renamed for Shopify Plus merchants via custom scripts. This is a known constraint and you can [read more about it in this Klarna.Docs article](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/known-constraints/#4-renaming-the-payment-method-isnt-supported). Prior to July 2022, the payment method name was *Klarna*. ## Language and locale The locale for Klarna payments hosted payment page is set based on the store's language concatenated with the customer's billing address country. For example, the English language selected for a customer with a US billing address entered in Shopify checkout would result in a request locale of `en-US` when Klarna payments is loaded. If the requested locale is supported by Klarna payments, per [Available purchase countries, currencies and locales,](https://docs.klarna.com/klarna-payments/in-depth-knowledge/puchase-countries-currencies-locales/) the locale will be honored. If the locale isn't supported, English is used as a fallback. Locale isn't configurable in Klarna. You can configure your store's language in the Shopify admin under **Settings**\> **Languages**. One way to check a store's Shopify language is via the browser’s developer tools, for example, by entering `Shopify.locale` in your browser's developer tools’ **Console**, as shown on the following snippet. ``` http Shopify.locale ``` Enter Shopify.locale in the Developer tools' console to check a Shopify store's language. ![ You can check a store's Shopify language in your console.](c69dee66-5042-433d-a39c-bb93d1399bff_Shopifylocale.jpeg) *You can check a store's Shopify language in your console.* **In summary:** - Klarna provides translations for the Klarna payment method. - For each supported language, one translation is available determined by the store's checkout language configuration.  - The locale for Klarna Payments' hosted payment page is associated with the store's language and the customer's billing address country.  - Locale configuration is available in the Shopify admin settings. --- # Source: https://docs.klarna.com/payments/after-payments/order-management/manage-orders-in-the-merchant-portal.md # Manage orders in the Merchant portal ## Here you'll find an overview of the main actions related to orders that you can perform in the Merchant portal. The [Merchant portal](https://docs.klarna.com/resources/business-tools/merchant-portal-guide/merchant-portal-user-guide.md) is your one-stop shop to manage everything with Klarna: from daily operations to growing your store. It’s your all-in-one business assistant, helpful for simplifying your business management, acquiring new customers, and facilitating your commercial growth. The Merchant portal is one of the touchpoints we offer to help you handle your order operations. With this tool, you can perform mandatory tasks to complete the purchase journey when integrating our products. But that's not all; the Merchant portal also offers a range of services and additional order tasks to ensure a seamless customer experience. If you want to learn about Merchant portal access and credentials, see [How do I log into the Merchant portal.](https://www.klarna.com/us/business/merchant-support/how-do-i-log-into-the-merchant-portal/) For more information about other ways to handle your orders, see the [Touchpoints](https://docs.klarna.com/payments/after-payments/order-management/before-you-start/what-is-order-management.md) section. In this section, you can find an overview of the main order actions you can perform in the Merchant portal: - [Access your orders](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-in-the-merchant-portal/access-your-orders.md) - [Navigate the orders dashboard](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-in-the-merchant-portal/navigate-the-orders-dashboard.md) - [Configure order settings](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-in-the-merchant-portal.md) - [Capture an order](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-in-the-merchant-portal/capture-an-order.md) - [Cancel an order](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-in-the-merchant-portal/cancel-an-order.md) - [Refund an order](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-in-the-merchant-portal/refund-an-order.md) - [Update an order](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-in-the-merchant-portal/update-an-order.md) Besides, we include a [list of additional actions](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-in-the-merchant-portal/other-actions.md) you can perform to offer the best customer post-purchase experience and adequate support. You'll find images illustrating the different actions. These images include records not from real data but from testing data. This documentation covers high-level descriptions of the order actions. If you're looking for step-by-step guides to perform these actions, visit the **Help**[Help](https://portal.klarna.com?help-page=article%3Aorders) section in the Merchant portal. --- # Source: https://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api.md # Manage orders with the API ## Here you can find everything you need to integrate Order management using our API. The actions you can execute on Klarna orders are grouped into three main categories: - View and change orders - Capture and track orders - Refund and extend orders In this section, you can find technical details of the API calls per category. Here are examples of common errors with troubleshooting suggestions: | HTTP status code | Error code | Error message | Description | |----------------|----------|-------------|-----------| | * `502` * 503 * `504` | * `TEMPORARILY_UNAVAILABLE` | * "Temporarily unavailable". | The service is temporarily unavailable. For more information, see our [Escalation and retry policy.](https://docs.klarna.com/api/escalation-and-retry-policy/#escalation--retry-policy) | | * `500` | * `INTERNAL_SERVER_ERROR` * `UNEXPECTED_ERROR` | * "Unexpected server error". | An unexpected server error occurred. For more information, see our [Escalation and retry policy.](https://docs.klarna.com/api/escalation-and-retry-policy/#escalation--retry-policy) | | * `429` | * `TOO_MANY_REQUESTS` | * "Too many requests". | We received too many requests in a given amount of time (rate limiting). For more information, see the [Rate limit guide](https://docs.klarna.com/api/rate-limit/#rate-limit) . | | * `422` | * `UNPROCESSABLE_ENTITY` * `INVALID_ADDRESS` | * "The size of the `shipping_info/shipping_company` value must be between 0 and 100". * "The shipping and/or billing address is invalid". | The service is unable to process this request. Refer to the [OpenAPI documentation](https://spec.openapis.org/oas/latest.html) to see if the request is valid. | | * `413` | * `REQUEST_TOO_LARGE` | * "Request is too large". | This request is too large. Refer to the [OpenAPI documentation](https://spec.openapis.org/oas/latest.html) to see if the request is valid. | | * `409` | * `CONFLICT` | N/A | This request conflicts with the current state of the target resource. For more information, see our [Escalation and retry policy.](https://docs.klarna.com/api/escalation-and-retry-policy/#escalation--retry-policy) | | * `403` | * `NOT_ALLOWED` * REFUND_NOT_ALLOWED * `CANCEL_NOT_ALLOWED` | * "Resulting authorization amount 7000 cannot be less than the captured amount 8000 for order. Order authorization cannot be updated". * "Order has no captures. Refund not possible". * "Order has previous captures. Cancel not possible". | This operation is not allowed based on business rules. For more information, see our [Escalation and retry policy.](https://docs.klarna.com/api/escalation-and-retry-policy/#escalation--retry-policy) | | * `404` | * `NO_SUCH_ORDER` * NO_SUCH_CAPTURE * `NOT_FOUND` | * "Order 5ef9a5b3-6c08-42e1-91a3-065dcae5c5dd cannot be found". * "Capture could not be found. Shipping info cannot be added to capture d25fb1a0-a6d9-4a65-8dac-cd7fb3a8dd24". * "Refund ec2119a1-cbb9-40a3-8fb8-ad7b7c109c87 cannot be found for order 5ef9a5b3-6c08-42e1-91a3-065dcae5c5dd". | The requested resource (order, capture, or refund) could not be found. Check if their IDs are correct. | | * `400` | * `NOT_FOUND` | * "Refund ec2119a1-cbb9-40a3-8fb8-ad7b7c109c87 cannot be found for order 5ef9a5b3-6c08-42e1-91a3-065dcae5c5dd". | This is an invalid request. Refer to the [OpenAPI documentation](https://spec.openapis.org/oas/latest.html) to check validation rules. | --- # Source: https://docs.klarna.com/payments/in-store-payments/integrate-klarna-in-store/api-integration/manage-refunds.md # Manage refunds in-store ## Learn how to process refunds for in-store purchases. ## Manage refunds using API Klarna returns an order identifier (`order_id`) as part of the distribution results. You’ll need `order_id` to refund the purchase using the [Order management API](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api/refund-orders-and-manage-authorizations/). #### Best practices - Use the `Klarna-Idempotency-Key` HTTP header when implementing refunds through the API, in order to prevent duplicate refund requests at the point of sale from happening in case of network issues. - Include the `order_lines[]` for the items to be refunded if included in the payment session initially. We recommend you store the Klarna `order_id` and link it to the transaction reference number generated by the point of sale and stored as the `merchant_reference1` parameter. You can also print the transaction reference number on the customer’s receipt. Customers who want to get a refund for an in-store purchase have to present the receipt. The store associate can retrieve the transaction reference and enter it on the point of sale device, which can then derive the Klarna `order_id` and the order amount required to submit a refund using the Order management API. ![ An example of a customer receipt showing merchant's and Klarna's reference numbers.](dfd80552-15a6-4ef4-b42c-5f7f14353697_In-store_receipt_2023_05-01.jpeg) *An example of a customer receipt showing merchant's and Klarna's reference numbers.* ## Manage refunds in Merchant portal Another element to add to the receipt is the shorter Klarna reference value (`klarna_reference`) returned in the distribution results. The store associate can use this value to find the corresponding transaction directly in **Orders** in the [Merchant portal](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-in-the-merchant-portal/navigate-the-orders-dashboard/). ![ The Klarna reference value helps the store staff identify orders in Merchant portal.](Ordermanagementdashboard.jpeg) *The Klarna reference value helps the store staff identify orders in Merchant portal.* --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/vtex/payments/managing-klarna-orders.md # Managing Klarna orders with Vtex ## This section explains how to capture payments, process refunds, cancel transactions, and release uncaptured amounts for Klarna orders through the VTEX back office. ## Available order management actions Once Klarna has authorized a payment, you can manage the order through VTEX. The following actions are supported: - **Capture:** - Finalizes the payment and charges the customer. - The Klarna app for VTEX only supports **full capture** or **one partial capture**, multiple partial captures are not currently supported. - **Refund:** - Issues a refund for an order. - VTEX **only refunds the value of the products**. To refund tax, shipping, or additional charges, these must be specified as an additional amount in the refund request. - **Cancel:** - Cancels an order before it is captured. - If an order is authorized but not yet captured, cancellation releases the authorized funds back to the customer. - **Release uncaptured amount:** - If an order is modified (lower amount than the amount authorized) **before capture**, the Klarna Payments App automatically adjusts the captured amount to the new order total and releases any uncaptured funds. ## Klarna and VTEX order status mapping VTEX order actions trigger specific status updates in Klarna. The table below outlines how these actions map between VTEX and Klarna: | **Order action on VTEX** | **What happens on Klarna** | |----|----| | Return/Refund | Klarna refunds the order. | | Invoice/Capture | Klarna captures the full amount specified by VTEX. If less than the authorized amount, Klarna releases the remaining funds automatically. | | Cancel | Klarna cancels the order. | | Partially Captured | Klarna refunds the reminder of the order. | | Expired | No action is possible. | | Closed | No action is possible. | --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/manual-osm-shopify-integration.md # Manual On-site messaging ## This guide covers the manual integration of Klarna On-site messaging with a Shopify store when the app isn’t compatible with your store. The manual integration is considered custom merchant code. You should use it only when it has been confirmed that the On-site messaging app can’t work inyour Shopify store. You’re responsible for supporting and maintaining the custom code if you choose to integrate OSM manually. If the Klarna On-site messaging (OSM) Shopify app isn’t compatible with your store, you can integrate Klarna On-site messaging manually or use a combination of the app and custom code. If you’re integrating Klarna On-site messaging manually, you can choose to either use custom code for all features, or use a combination of the Klarna OSM Shopify app’s features with some custom code for JavaScript functions and refreshing placements. To make sure on-site messaging complies with legal requirements, make sure that your custom code includes functions that refresh the placements when variants change. ## 1. Get the On-site messaging JavaScript library from Klarna To add the JavaScript library to your Shopify store, you have to first retrieve the URL of a JavaScript library specific to your Merchant ID (MID). You can find the URL in the [Klarna Merchant portal](https://portal.klarna.com/). ## 2. Use API to add the Klarna On-site messaging JavaScript library to the Shopify store Once you know the URL of the JavaScript library specific to your MID, you have to add it to your Shopify store by sending a POST request to Shopify’s API. ``` json { "script_tag": { "event": "onload", "src": "https:\/\/na-library.klarnaservices.com\/merchant.js?data-client-id=711111-222222-333333" } } ``` An example body of a `POST` request to the Shopify API that adds a new script to a Shopify store. You can find full documentation about using a POST request to add JavaScript to a Shopify store in the [article on Shopify’s developer documentation page](https://help.shopify.com/en/api/reference/online_store/scripttag). Below is an example body of a POST request that adds a new script tag file to a Shopify store. For example, if the URL of your Shopify store is **, the file containing the OSM script can be added to . ## 3. Add placement tags to the theme Once you’ve added the Klarna On-site messaging JavaScript library to your store, you have to insert placement tags into the correct theme files. ``` html ``` Example placement code for a Shopify theme. The specific files to be updated with the OSM placement tags differ between Shopify themes. For example, if you’re using the *Brooklyn* theme, both the klarna-placement tag and refresh code are put into the product.liquid file. The correct liquid variable for the product price, which also depends on the store’s theme, must be used for the placement. In the example code, current_variant.price is the correct variable. Depending on your store’s theme and section of code, you may use variant.price, current_variant.price, or another liquid variable.  You can find the placement code snippets in **Klarna Merchant portal**\> **On-site messaging**\> **Placements**. ## 4. Add code to refresh placements when product variants change If the products in your store have variants, you also need to add code to update the placement when a customer selects a different variant. Here's an example of code to refresh placements: ``` javascript document.getElementsByTagName("klarna-placement")[0].setAttribute("data-purchase-amount", variant.price); window.KlarnaOnsiteService = window.KlarnaOnsiteService || [] window.KlarnaOnsiteService.push({ eventName: 'refresh-placements' }) ``` An example code that forces placements to be refreshed when a product variant changes. We've documented this in detail in the [frequently asked questions](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/frequently-asked-questions) **To summarize:** - The Klarna On-site messaging (OSM) Shopify app may not be compatible with all stores, but manual integration is possible. - Integrating Klarna On-site messaging manually requires adding the JavaScript library to the Shopify store using API and inserting placement tags into the correct theme files. - Custom code is necessary to refresh placements when product variants change, ensuring compliance with legal requirements. --- # Source: https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/marketing-for-integrated-partners.md # Marketing for integrated partners ## Welcome to the Klarna partner marketing hub – your essential guide for seamlessly integrating Klarna into your marketing efforts. As our partner, you have access to a full suite of tools and information designed to help you effectively showcase Klarna's payment solutions to your customers. ### Here's a snapshot of what's available: **Brand guidelines and assets:** - Logos and trademarks - Partner logo lockups - Pre-approved messaging - Ready-made advertising banners - Ready-made email templates **In-store activation instructions** **Klarna landing page implementation guidance** **Compliance guidance and promotion best practices** ![Screenshot_2025-05-05_at_13.32.08.png](Screenshot_2025-05-05_at_13.32.08.png) *Screenshot_2025-05-05_at_13.32.08.png* {{CardList |id=marketing_guidelines |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=Partnership branding guidelines |image=Zn1RTJbWFbowe8Qo_Marketing_Guidelines_for_Partners.pdf |downloadBehaviour=null |contentType=Partnership branding guidelines |assetSize=8286018 }} }} ### When marketing with Klarna, it's crucial to adhere to these best practices - **Use approved messaging:** Rely on Klarna-approved messaging to maintain clarity and prevent misinterpretation of our products and terms. - **Promote responsible spending:** Advocate for sensible shopping habits and refrain from suggesting that customers spend beyond their means.  - **Keep it clear and informative:** Aim for messaging that is simple, transparent, and educational, especially during the checkout process to ensure customer comprehension. - **Utilize pre-made assets**: Leverage our downloadable banners and templates to save time and ensure message consistency. - **Avoid exaggeration:**Refrain from overstating the benefits or sharing personal opinions about financial products. Be careful not to appear as giving financial advice. - **Be sensitive and contextual:** Always take into account the wider economic context and individual customer circumstances when promoting Klarna across different media. --- # Source: https://docs.klarna.com/payments/after-payments/disputes/evidence-gathering/merchant-evidence-gathering.md # Merchant evidence gathering ## In this article, you will find a clear guide for evidence gathering process and what evidence you need to provide to defend a dispute. ## What is evidence? When a customer raises a dispute, they need to provide Klarna with valid evidence to support their claim. The specific information required varies based on the nature of the dispute (dispute reason) to ensure it is relevant to the issue at hand. If the necessary evidence is provided and the matter is not resolved between merchant and customer within the set timelines, an investigation might be initiated from Klarna's side and the dispute will show for you under `"Open disputes"` in the Disputes App when you are using the Merchant portal App flow, on the other hand, if you are using the email flow you will receive an email with a link to the webform. ## Report a problem ### Goods not received (full or part order) We will request the shipping information (shipping date, carrier, and tracking number) and the proof of delivery from you (including delivery time, address, and name of receiver). In addition you will be asked to select the delivery method that suits your order. These have been categorized into three categories: - Physical Goods, - Intangible Goods - On Demand/Food Delivery Each category includes requests tailored to get the most relevant information pertaining to your dispute. Please note that **you should only select the category that applies to your order.** For `Goods not Received` disputes the main piece of evidence is a valid Proof of Delivery (POD). This document provides us with enough detail to confirm the goods have been correctly delivered to the customer as ordered. Depending on the type of goods and how they are delivered this POD can look different. We expect you to provide a POD as an attachment, it is not sufficient to provide a tracking link. The POD must meet the requirements set out in the Merchant Protection Program. Klarna cannot accept other evidence on its own, for example forwarding emails from customers saying they received the goods. You can of course provide this in addition to a POD, but without a valid POD the dispute will be decided in favor of the customer. In general if the customer does not accept the delivery of the order or does not pick-up the goods, they will be sent back. However, this is not a valid use of the right of withdrawal (in the EU) nor is it considered a valid return. The customer is expected to accept delivery and follow the right of withdrawal and/or the store's return policy. If a customer has not accepted the delivery make sure this information is included either in the POD or in the response to Klarna. | **Category** | **Documentation** | |----|----| | **Physical goods** | The tracking ID of the delivery | | **Physical goods** | The address to which the order was delivered | | **Physical goods** | The Date the order was delivered | | **Physical goods** | The delivery status of the parcel (optional) | | **Physical goods** | One piece of additional evidence to prove the entire order was delivered. Options include, but are not limited to, packing list or delivery note, weight of items and parcel etc. | | **Physical goods** | A signature from the customer showing the item was received (for orders\>750 EUR) (optional) | | **Intangible Goods** | The date the order was sent | | **Intangible Goods** | The email address the order was sent to (optional) | | **Intangible Goods** | The IP the order was sent to (optional) | | **Intangible Goods** | Any evidence the item was received, accessed or used (optional) | | **On Demand/Food Delivery** | The customer's name (optional) | | **On Demand/Food Delivery** | The customer's name (optional) | | **On Demand/Food Delivery** | The date and time of delivery (optional) | | **On Demand/Food Delivery** | The delivery status of the parcel (optional) | | **On Demand/Food Delivery** | The address to which the order was delivered (optional) | | **On Demand/Food Delivery** | The delivery choice (optional) | | **Request** | **Response options** | |----------------------------------------|------------------------------| | **Tracking ID** | (Open text field) | | **Which shipping company was used?** | (drop-down) | | **Shipping date** | (dd/mm/yyyy) | | **Add reply** | (optional - open text field) | | **Add proof of delivery (max. 7.3MB)** | (mandatory) | | **Attachment (max. 7.3MB)** | (optional) | ### Faulty goods (item different or significantly not as described) These are usually the most complex disputes. Questions we commonly ask are “Have you been in contact with the customer?” and “Have you come to an agreement?” (such as refunding the faulty goods or resending the product). Accepted evidence includes: - Proof that the claim has been solved - Explanation of why the claim is invalid - Offer of resolution (repair, replacement, refund) - Prepaid return label | **Request** | **Response options** | |-----------------------------|------------------------------| | **Add reply** | (optional - open text field) | | **Attachment (max. 7.3MB)** | (optional) | ### Incorrect invoice We will request evidence from you to prove that the invoice is correct. This dispute reason can include a variety of scenarios, including missing discounts, wrong price, return not registered, cancellation or invalid fees. For example if a customer claims that a discount is missing (backed up by evidence) you need to prove why the discount was not applicable. | **Request** | **Response options** | |-----------------------------|------------------------------| | **Add reply** | (optional - open text field) | | **Attachment (max. 7.3MB)** | (optional) | ## Report a return ### Return We will ask you if you received the return. If you did, please make sure to adjust the invoice of the related order. If you received the return but do not accept it, make sure to explain your reasoning in the comment section (´Add reply´). If you have not received the return, but the customer used your return label, please check on the status and give a more detailed response than return not received. If the customer used your label, you are liable for the return, even if it is lost in transit. If you have more information about the return, for example the tracking ID belongs to a different order, an empty box was returned, wrong items were returned, etc. please make sure to clearly state this in your response. If you provide customers with a pre-paid return label and the customer has not used it, please include this information in your response. Please note that if you select the option indicating that you will make adjustments to the statement you are committing to performing a refund equal to the disputed amount. If you do not perform said refund within 96 hours of responding, we will perform an automatic chargeback of the disputed amount. | Request | Response options | |-------|----------------| | Have you received the return?* | * Yes, will make changes to the order * Yes, but not accepted (Please specify why) * Return not received | | Add reply | (optional - open text field) | | Attachment (max. 7.3MB) | (optional) | --- # Source: https://docs.klarna.com/resources/business-tools/merchant-portal-guide/merchant-portal-user-guide.md # Merchant Portal Homepage Klarna’s **Merchant Portal** is the online platform where you will be able to manage all of the details associated with your Klarna account, from managing orders, downloading settlement reports, searching for marketing assets or displaying the on-site messaging on your platform. Depending on how you were onboarded to Klarna, you might not be able to see all the apps available within the portal. The portal is connected via API with your own e-commerce platform, which means that any action performed in an order in your backend, will be communicated automatically to the portal, making the management easier and more efficient. In that way, you don't need to modify your normal order management process.  Be aware that any action performed manually in Merchant Portal, won’t be reflected in your backend. ## Overview Access to Merchant portal tools are enabled via 3 main areas as highlighted in the following image: 1. **Top bar** 2. **Side menu** 3. **Main page** ![ 1- Green area highlights the Top bar 2- Pink area highlights the Side menu 3- Blue area highlights the Main page](ZrOitUaF0TcGIwfM.jpeg) *1- Green area highlights theTop bar2- Pink area highlights theSide menu3- Blue area highlights theMain page* ## Top bar The top bar in the portal will allow you to access additional features based on business areas, as well as a self-service help tool. ![klarna docs image](2bf9dcb9-c395-428e-8c16-7546909d7-Payments.jpeg)image ### Payments This section will enable you to: - View all transactions made with Klarna as a payment method, along with the status of each one. - Manage orders and perform actions such as cancellations, captures, and delayed payments. - Handle disputes. - Generate reports for payouts made by Klarna. Learn more about it [here](https://docs.klarna.com/resources/business-tools/merchant-portal-guide/payments.md). ### Conversion boosters This section will enable you to: - Activate solutions for dynamic placements. - Activate Express checkout. - Activate Sign in with Klarna. Learn more about it [here](https://docs.klarna.com/resources/business-tools/merchant-portal-guide/conversion-boosters.md). ### Growth marketing This section will enable you to: - Activate solutions for advertising and promotion within Klarna ecosystems. Learn more about it \[ here\]. ### Profile The last option available in this area will be labeled with the username. From here, you will be able to update your preferred setup for language and timezone and access your Profile settings. ![klarna docs image](ZqO4Th5LeNNTxh0m.jpeg)image The Profile section is where you can update your name, reset password, update the two-factor authentication method and review the Cookie Policy. ![klarna docs image](ZqO7JB5LeNNTxh12.jpeg)image ## Side menu ### Apps In the grey column on the left, you will find various apps available for you in Merchant Portal, such as orders, settlements, disputes, branding, etc. ### Support The Support section provides access to our Merchant Support team. You can reach them by sending an email with your request or issue, and they will respond as soon as possible. ### Payment settings Access this section to manage all settings related to your account. More info [here](https://docs.klarna.com/resources/business-tools/merchant-portal-guide/payments/settings.md). **Note:** API credentials, SFTP credentials and bank account details are sensitive data, please share them always in a secure way. ### Klarna Docs Enables direct access to Klarna public technical documentation. ## Main page In the home page, you will instantly see a summary of your account within the payments, conversion boosters, or growth marketing sections. ### Terms and conditions Lastly, in the footer of merchant portal there will be always available a link to Merchant Portal terms and conditions. You can also see them [here](https://portal.klarna.com/terms-and-conditions). ### Get support ​At the bottom left corner, you will find the Get Support button, which is a self-service feature inside the merchant portal that provides support and guidance on how to use all features and related topics. ![klarna docs image](ZrOjuUaF0TcGIwgGt.jpeg)image --- # Source: https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/migration-to-the-new-klarna-websdk.md # Migration to the new Klarna WebSDK ​Klarna is introducing a new WebSDK that aims to streamline the integration process and offer a more robust, fast and safe solution for partners. Although designed to be backward compatible, some changes might be necessary depending on your setup. Below are the steps to ensure a smooth transition. ## Step 1: Update the Script Tag Replace your existing ''' ``` Please do not use lib.js for new integrations. ### New Implementation ``` html ``` The value of data-client-id would be different and would look like **klarna\_{env}\_client\_{longString}**which you can copy from Merchant Portal ## Step 2: Modify Styling if Using ::parts API If you're using the **::parts** API for styling, update the selectors. **Old:** ``` html #placementID *::part(osm-container) { /* Your CSS rules here */ } ``` **New:** ``` html #placementID::part(osm-container) { /* Your CSS rules here */ } ``` ## Step 3: Register your origin domain Login to Merchant Portal and navigate to **Conversion boosters** to allow your domain origin. ![](411ad715-0d61-4ebc-96b8-273e720d01d4_Screenshot+2024-02-28+at+11.36.55.jpeg) ## Step 4: Modify CSP rules if you have set CSP If you're using CSP (Content Security Policy), you will need to whitelist **js.klarna.com**. For for more details and examples please follow the steps from [Integrate using Klarna Web SDK](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/integrate-using-klarna-web-sdk/) --- # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/tokenized-payments/mixed-payments.md # Mixed payments ## Learn more about Mixed payments here. ## What is Mixed payments? Mixed Payments allows customers to make one-time purchases and add an additional service during checkout. Customers can choose any available payment option within Klarna ecosystem for their initial purchase and tokenize another payment option for future transactions. Common scenarios: - **Mixed basket**: Includes a one-time product and a monthly subscription. - **Additional charge**: Includes a one-time product with an additional service charged separately. ### How to enable The Mixed payments flow is enabled by the customer token, with the `intent` set to `buy_and_default_tokenize` during the payment session. For further instructions on using the customer token with the correct `intent` and how to group multiple line items, refer to the FAQ below. If you want to learn more about customer tokens, check out this [section](https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/subscriptions-and-on-demand/). ### What can I do with a customer token for Mixed payments? You can use the Klarna payments API to perform three actions related to a customer token: 1. [Create an order](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/tokenized-payments/subscriptions-and-on-demand/) in a payment session with `intent` set to `buy_and_default_tokenize`. 2. [Check the details](https://docs.klarna.com/klarna-payments/integrate-with-klarna-payments/other-actions/check-the-details-of-a-customer-token/) of a customer token. 3. [Cancel](https://docs.klarna.com/klarna-payments/integrate-with-klarna-payments/other-actions/cancel-a-customer-token/) a customer token. In the case of Mixed payments, Klarna will not tokenize the chosen payment option at checkout. Instead, Klarna aims to tokenize a Pay Now option based on the selected payment method (funding source). **For example:** If a customer selects Pay-in-4 (backed by a card) for their initial purchase, Pay Now (backed by the same card) will be tokenized for the additional item. Similarly, if a customer chooses Financing (backed by direct debit) for their initial purchase, Klarna will tokenize a Pay Now version of direct debit. If a payment option is selected that does not have a payment method (funding source) (e.g., Pay Later Invoice or Direct Bank Transfer), Pay Later 30 will be tokenized. ### How do I combine the mixed products in the same basket? We recommend creating a session with separate line items. This means only passing the one-time line item during the `create_session` call, allowing the customer to first pay for their one-time item within the Klarna flow. Upon successful authorization, the customer token is created and shared with you for any subsequent charges. These additional charges will contain the second line item and be charged by the same merchant id or another. Use this approach when: - The additional line item has legal constraints for the use of credit (e.g., insurances that may only be settled via debit). - A customer token is \[? shared\] among several merchant ids. ## Sharing subscription details with Klarna ### Example 1: One-time purchase + subscription 1. [Create session](https://docs.klarna.com/api/payments/#operation/createCreditSession) - `intent`: `buy_and_default_tokenize` - `order_lines`: line 1 with physical item (one-time purchase) 2. Authorize: full payload with line 1 3. [Create customer token](https://docs.klarna.com/api/payments/#operation/purchaseToken) 4. [Create order](https://docs.klarna.com/api/payments/#operation/createOrder) with line 1 5. [Create recurring order with customer token](https://docs.klarna.com/api/customertoken/#operation/createOrder) - Include [subscription object](https://docs.klarna.com/api/customertoken/#operation/createOrder!path=order_lines/subscription&t=request)`subscription` object - Include amount ### Example 2: One-time purchase + subscription (free trial) 1. [Create session](https://docs.klarna.com/api/payments/#operation/createCreditSession) - `intent`: `buy_and_default_tokenize` - `order_lines`: line 1 with physical item (one-time purchase) 2. Authorize: full payload with line 1 3. [Create customer token](https://docs.klarna.com/api/payments/#operation/purchaseToken) 4. [Create order](https://docs.klarna.com/api/payments/#operation/createOrder) with line 1 5. [Create recurring order with customer token](https://docs.klarna.com/api/customertoken/#operation/createOrder) (once the trial period is over) - Include [subscription object](https://docs.klarna.com/api/customertoken/#operation/createOrder!path=order_lines/subscription&t=request) - Include amount ### Example 3: One-time purchase + additional charge/on-demand 1. [Create session](https://docs.klarna.com/api/payments/#operation/createCreditSession) - `intent`: `buy_and_default_tokenize` - `order_lines`: line 1 with physical item (one-time purchase) 2. Authorize: full payload with line 1 3. [Create customer token](https://docs.klarna.com/api/payments/#operation/purchaseToken) 4. [Create order](https://docs.klarna.com/api/payments/#operation/createOrder) with line 1 5. [Create recurring order with customer token](https://docs.klarna.com/api/customertoken/#operation/createOrder) for the additional charge --- # Source: https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/mobile-integration.md # Sign in with Klarna for mobile ## Integrate Sign in with Klarna into your mobile app. ## Overview Our **Mobile SDK** is the best and only official way to integrate Klarna's products into your mobile app.  You can find the integration instructions in the sections: ### [Sign in with Klarna Overview](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/mobile-integration/) **Android Integration:**Deep dive on Android Integration details [HERE](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/mobile-integration/sign-in-with-klarna-android/) **iOS Integration:**Deep dive on iOS Integration details [HERE](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/mobile-integration/sign-in-with-klarna-ios/) **React native integration**: Deep dive on React native Integration details [HERE](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/mobile-integration/sign-in-with-klarna-react-native/) --- # Source: https://docs.klarna.com/payments/mobile-payments/before-you-start/mobile-sdk-guidelines.md # Mobile SDK Guidelines ## The Mobile SDK offers integration of all Klarna products and it comes with just few requirements for maintaining stability in your mobile application experience as outlined below! Klarna Mobile SDK is the official recommendation when using any Klarna product (Klarna Payments, On-site Messaging etc.) in mobile applications. This is mainly due to the limitations and security concerns surrounding usage of the Embedded WebViews in payment flows, hence Klarna prohibits any usage of Embedded WebViews in any mobile application for its payment flow. To learn more about mobile integration patterns on mobile, check out our introduction page [here](https://docs.klarna.com/payments/mobile-payments/before-you-start/introduction-mobile-integrations/). ## App Return URL To support seamless redirects to and back from third party apps for authentication and Klarna app for App Handover purchase experience, Klarna Mobile SDK requires all integrators to set up an app return URL. This URL ensures that when Klarna redirects customers to Klarna app, mobile banking application or authorization providers in certain markets the user can be redirected back to the application where the flow was started with the Mobile SDK. This URL needs to be set as an app scheme/deep link that navigates to your application without any change in its state, ensuring that the customer can continue the flow from where they were before the redirects. Please refer to getting started sections for [Android](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/get-started/#configure-your-app-return-url) and [iOS](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/get-started/#configure-your-app-return-url) to learn more about setting up the return URLs in your applications. ## Versioning policy To ensure the best possible experience in terms of security, stability, and access to new features, Klarna requires all partners integrating the Klarna Mobile SDK to follow the policy below: - **Update Frequency:** Partners must update to the latest SDK version at least once every 3 months. **Supported Versions:** Only SDK versions released within the last 6 months are considered within the maintenance window and officially supported by Klarna. - **Early Deprecation:** SDK versions may be deprecated earlier than 6 months if critical vulnerabilities are identified that impact the confidentiality, integrity, or availability of the service. In such cases, Klarna will provide clear and timely communication. - **Liability:** Klarna is only responsible for issues that arise in SDK versions within the current maintenance window. - **Obsolete Integrations:** Partners are responsible for any issues, including security breaches, resulting from the use of outdated or unsupported SDK versions. - **Right to Deactivate:** Klarna reserves the right to disable integrations using deprecated SDK or OS versions, especially when they pose an identified security risk. By keeping your integration up to date, you ensure continued compatibility, access to the latest features, and the highest level of security for your users. ## UX Guidelines for Klarna Mobile SDK Mobile integrations for Klarna products follow the general Klarna guidelines for implementation and UX that exists for web, you can learn more about those in the following pages; - [Pre purchase UX guidelines](https://docs.klarna.com/payments/web-payments/additional-resources/ux-guidelines/pre-purchase-experience/) - [Purchase experience UX guidelines](https://docs.klarna.com/payments/web-payments/additional-resources/ux-guidelines/purchase-experience/) This guide outlines best practices for implementing Klarna Payments in native mobile apps using Klarna’s iOS and Android SDKs. It complement Klarna's official purchase experience UX recommendations with mobile-specific implementation insights to help you deliver a seamless, trustworthy, and high-converting Klarna checkout experience.
![Pink_Standard_Consumer.png](Pink_Standard_Consumer.png) *Pink_Standard_Consumer.png* ![anatomy-of-klarna-widget.jpeg](anatomy-of-klarna-widget.jpeg) *anatomy-of-klarna-widget.jpeg*

Presenting Klarna in the checkout

Klarna payment widget

#### 1. Klarna Payment Options: Presentation **Offer Klarna clearly as a single payment method.** - Klarna recommends presenting Klarna as a unified option (e.g., “Pay with Klarna”) in your payment method list, rather than splitting it into separate methods like "Pay Later", "Pay Now", or "Financing". - This approach creates a cleaner, simpler checkout UI and improves conversion by reducing decision fatigue. **Introduce Klarna early to build trust.** - Mention Klarna availability on product and cart pages to raise awareness. #### 2. KlarnaPaymentView Integration **Use KlarnaPaymentView to render Klarna's native UI.** - Only render one KlarnaPaymentView per checkout. **Do not overlay, mask, or alter the view.** - Leave at least 8pt/dp padding around KlarnaPaymentView. - Do not cover legal text or logos with popups or other UI elements. - KlarnaPaymentView handles height, branding, and eligibility logic internally. #### 3. Layout and Responsiveness **Handle dynamic height properly (especially on iOS).** - iOS: Use `klarnaResized(...)` to update height constraints. - Android: Use `wrap_content` or embed KlarnaPaymentView in a ScrollView. **Avoid hardcoded or fixed-height layouts.** - Klarna content height varies; let the view expand naturally. **Use mobile-friendly spacing.** - Follow platform guidelines (iOS: 44pt touch areas, Android: 48dp). - Avoid UI crowding; Klarna views should remain clear and legible. #### 4. Branding and Trust **Use Klarna’s official branding assets.** - Use only logos, icons, and payment badges from Klarna’s official brand kit: [docs.klarna.com](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/brand-guidelines/#klarna-assets-for-checkout-page). - Do not alter the logo’s aspect ratio, apply shadows, or change colors. **Show Klarna’s value proposition clearly.** - If presenting Klarna in a list of payment methods, accompany with text like: - "Pay now, or later with Klarna. Flexible options available." - In the KlarnaPaymentView, Klarna displays the appropriate option dynamically. **Do not obscure Klarna legal or informational text.** - Always allow KlarnaPaymentView to display legal terms. - Ensure links are accessible and not hidden behind other views. #### 5. Error Handling and Recovery **Implement SDK error callbacks.** - Show clear user-facing messages like: - "Something went wrong. Please try another payment method." **Enable retries and fallback paths.** - Allow the user to retry Klarna. - If denied, offer another payment method. #### 6. Accessibility and Touch UX **Ensure full accessibility support.** - KlarnaPaymentView is accessible by default. - Surrounding elements (buttons, headings) should have proper accessibility labels. **Design for touch.** - Avoid placing other tappable elements too close to KlarnaPaymentView borders. #### 7. Mobile Testing UX **Test across screen sizes.** - Check for layout issues on small devices. - Ensure Klarna views remain visible and scroll properly. **Simulate real-world conditions.** - Use network throttling to test Klarna loading on slower connections. - Test app-switch flows (e.g. with BankID or Klarna app installed). --- # Source: https://docs.klarna.com/payments/in-store-payments/integrate-klarna-in-store/api-integration/monitor-the-status.md # Monitor the status ## Learn how to monitor the distribution status of an in-store payment. To monitor the distribution status, you have to get the distribution result from Klarna. You can do so in one of two ways: - [Subscribe to a webhook notification](https://docs.klarna.com/payments/in-store-payments/integrate-klarna-in-store/api-integration/monitor-the-status.md) - [Use polling](https://docs.klarna.com/payments/in-store-payments/integrate-klarna-in-store/api-integration/monitor-the-status.md) We recommend subscribing to a webhook as polling may cause reaching Klarna API's rate limits. ## Getting the distribution status from a webhook If you have provided a URL endpoint when \[ initiating the payment session\], you'll get the distribution status updates via a webhook notification instead of having to poll the server for status updates. ### Securing the webhooks The URL provided as the `status_update` parameter must use HTTPS, but to be able to authenticate that the notification comes from Klarna, we recommend you generate a one-time token that you'll only use for this specific In-store payment session. ``` json "distribution": { "method": "one_qr", "callback_urls": { "status_update": "https://example.com/statsCallbackEndpoint?klarnaId={generic_id}&secretToken={token}" } } ``` `{generic_id}` is an id that is generated by your system which you can use to correlate the payment session when you receive a callback. For extra security, when you get a webhook notification and the distribution status is `COMPLETED`, send a `GET` request to the distribution result endpoint. This lets you validate if the notification of the status update was sent by Klarna. The webhook sends the distribution result payload for the following distribution status changes: | Distribution status | Description | Action to take | |----|----|----| | `DISTRIBUTED` | The payment link has been distributed. | Use the link from the distribution result endpoint and display the QR code to the customer. | | `ACCESSED` | The customer has accessed the payment link. | No action. | | `COMPLETED` | The customer has completed the payment and a new order has been automatically placed. | Get the order id from the distribution result endpoint or webhook. | | `CANCELED` | The payment session has been canceled by either partner or consumer. | No action. | | `FAILED` | There was a failure in distribution or connecting the customer for various reasons. | Read the error code sent in response. Based on the error, either create a new session or retry distribution using retry endpoint. If there was failure in short code use QR code URL or payment link URL as fallback | ## Getting the distribution result by polling To get the distribution result from Klarna, send an empty request body to the result endpoint. Link to result endpoint is included in distribution.result_url field in session initiation response. ### Success response ​In response to your request, you'll receive the distribution status, a QR code image URL, and a payment link URL. If a short code was provided, the customer is automatically redirected to complete the payment. Continue monitoring the status. ``` json { "status": "distribution status", "qr": "https://pay.klarna.com/{region}/iss/v1/distributions/{session_id}/qr/{access_id}", "payment_link": "https://pay.klarna.com/{region}/hpp/payments/xxxxxxx" } ``` If you don't want to provide a short code, you can either remove the property completely or send a null value instead. ### Success response parameters | Parameter | Type | Description | |----|----|----| | `status` | string | The distribution status of the payment. Depending on the \[ distribution status\], you can take some additional actions. | | `qr` | string | The URL that contains the QR code and the QR code has a payment link embedded. You can display this QR code to customers to scan and pay. | | `payment_link` | string | The payment link URL. You can distribute the link by encoding it as a QR code or by sending it in an SMS. | ### Distribution statuses The distribution statuses change when an action is performed either by you, the customer, or by the system. ![ The distribution statuses in an ongoing In-store session.](de87db3b-8462-456d-9c31-56ef9a413c62_DistributionStatuses.jpeg) *The distribution statuses in an ongoing In-store session.* Below is a list of all possible distribution statuses, along with actions you can take for each. | Distribution status | Description | Action to take | |----|----|----| | `WAITING` | The payment link has not been distributed yet. | Try to distribute the payment again if enough time has passed since the last attempt, for example, after 2 minutes. | | `DISTRIBUTED` | The payment link has been distributed. | Use the link from the distribution result endpoint and display the QR code to the customer. | | `ACCESSED` | The customer has accessed the payment link. | No action. | | `COMPLETED` | The customer has completed the payment and a new order has been automatically placed. | Get the order id from the distribution result endpoint or webhook. | | `CANCELED` | The payment session has been canceled by either partner or consumer. | No action. | | `FAILED` | There was a failure in distribution or connecting the customer for various reasons. | Read the error code sent in response. Based on the error, either create a new session or retry distribution using retry endpoint. If there was failure in shortcode use QR code URL or payment link URL as fallback | When a session is created, and the QR it is not scanned by the customer and the session is not canceled by the merchant, then the session will be auto-cancelled after 3 hours. ``` json { "status": "FAILED", "retry_url": "https://api.klarna.com/iss/v1/distributions/{session_id}/retry", "qr": "https://pay.klarna.com/{region}/iss/v1/distributions/{session_id}/qr/{token}", "payment_link": "https://pay.klarna.com/{region}/hpp/payments/{token}", "error": { "code": "CONSUMER_SESSION_NOT_FOUND", "retryable": true } } ``` ### Error codes for status FAILED | Failure error code | Significance | Expected action | |------------------|------------|---------------| | `CONSUMER_SESSION_NOT_FOUND` | A valid customer session with a provided short code couldn't be found. Hence, the session can't be distributed. | * Retry by entering the correct short code using either create session api or retry api. * Ask the customer to verify if the short code has expired and to re-scan the QR code or generate a new QR code. | | `UNKNOWN` | System error | The session failed due to an internal server error. You may retry by creating a new session. If errors persist, contact Klarna merchant support. | ## Placing an order automatically Once the payment is completed, a new order gets created in Klarna's systems. A message is displayed to the customer informing them that the payment is done. The module page displays the payment status. The new order is automatically placed and captured. You can retrieve the order identifier from the distribution result URL specified when creating the payment session. If you've provided the distribution webhook URL as the `callback_url` parameter, you'll get the order identifier via a webhook notification. ``` json { "status": "COMPLETED" "order_id": "588314f6-dd10-11ed-afa1-0242ac120002", "klarna_reference": "XDC23412" } ``` The order identifier (`order_id`) is returned to the distribution result endpoint URL and the webhook URL. If a payment error occurs, you may retry the process by first canceling the existing payment session and initiating a new payment. ## Retry a failed session If the session response is `FAILED` and `retryable` is set to `true` , try redistributing the session. ``` json "distribution": { "method": "one_qr", "short_code": "4212", "callback_urls": { "status_update": "https://example.com/callback" } } ``` --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/multi-currency-payments.md # Multi-currency payments ## This article explains the behavior and limitations of multicurrency payments using Klarna in the Shopify store. Shopify restricts all alternative payment methods, such as Klarna payments, to only process orders in the store’s base currency, as documented in [this Shopify help center article](https://help.shopify.com/en/manual/payments/shopify-payments/multi-currency/conversions#shopify-payments-and-other-payment-providers). As stated in the documentation, *“Only Shopify Payments can process payments in a customer's local (presentment) currency. If your customer chooses a payment option from a different payment provider, then their payment is made in the currency of your store”*. This limitation is documented in [the Known constraints section of this documentation](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/known-constraints.md). If you’re using Shopify Plus and would like to hide Klarna payments in checkout based on certain cart data, please refer to the [Shopify Plus: custom scripts documentation](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/shopify-plus-custom-scripts). **In summary:** - Shopify restricts Klarna payments to only process orders in the store’s base currency. --- # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/reactnative/native-view.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/native-view.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/native-view.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/reactnative/native-view.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/native-view.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/native-view.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/reactnative/native-view.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/native-view.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/native-view.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/reactnative/native-view.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/native-view.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/native-view.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/reactnative/native-view.md # Native View - React Native ## Adding Klarna payments to your application is as easy as adding a view and performing the payment operations on it. Klarna’s Mobile SDK is the official toolkit for integrating Klarna products into native iOS apps. It enables you to offer Klarna’s payment methods with a seamless in-app user experience. The SDK is designed to provide the optimal integration and, under the hood, the SDK handles web-based flows in a mobile-friendly way to reduce friction and ensures that all the features listed below are fully supported for a superior customer experience across all mobile platforms. React native checkout view **Feature support with Klarna’s Mobile SDK:** - Remember Returning Customers: enable faster checkouts and improved conversion by reducing friction for returning users. - Device-Wide Login Experience: simplify repeat purchases by enabling customers to remain logged in to Klarna across merchant apps on the same device. - Passkey Support: offer biometric-based login for enhanced security and a frictionless user authentication experience. - Application Redirects: seamlessly redirect users to external apps (e.g. bank or identity verification apps) and ensure a smooth return back into your app to complete payments without disruption. - Camera Access for ID Verification: improve acceptance by enabling secure and instant identity verification within the app. - Secure Browser Context: provide a secure, embedded browser environment for displaying Klarna-hosted content (payment pages or terms). - File Sharing and Download for T&Cs: Let customers download or share terms and conditions directly from the app for full transparency. ### **How it works** For a Mobile SDK integration your Payment Server and Mobile App must work together to complete the purchase flow: {{#mermaid: sequenceDiagram participant Consumer participant Merchant App participant Mobile SDK participant Merchant Server participant Klarna API Consumer->>Merchant App: Navigate to checkout screen Merchant App->>Merchant Server: Create payment session Merchant Server->>Klarna API: Create Klarna Payment session Note over Merchant Server, Klarna API: "intent" should be set in relevance to the desired use case Klarna API-->>Merchant Server: Klarna payment session response Merchant Server-->>Merchant App: Klarna payment session client_token Merchant App->>Mobile SDK: Create the Payment View Note over Merchant App: Includes 'Klarna' category and an eventListener Merchant App->>Mobile SDK: Initialize the payment session using client_token Merchant App->>Mobile SDK: Load the Payment View Consumer->>Merchant App: Select Klarna in Payment selector Merchant App->>Merchant App: Display the KlarnaPaymentView Consumer->>Merchant App: Click "Continue with Klarna" Merchant App->>Mobile SDK: Authorize the session Note over Merchant App: Consumer completes to purchase flow. Mobile SDK-->>Merchant App: Provide authorization token (valid for 60 minutes) Merchant App->>Merchant Server: Sends the authorization token for creating order Merchant Server->>Klarna API: Create Order POST (setup/payments/v1/authorizations/{authorizationToken}/order) Klarna API-->>Merchant Server: Provide order_id and redirect_url Merchant Server-->>Merchant App: Provide order details Merchant App->>Consumer: Redirected to order confirmation screen }} 1. **[Prepare](https://docs.klarna.com#prepare):** Make sure you have the credentials for Klarna Payments. 2. **[Initiate payment](https://docs.klarna.com#initiate-payment-server-side)** (Server-side): Create a payment session from your backend and pass `client_token` to your app. 3. **[Set up your app](https://docs.klarna.com#setup-your-app)** (Mobile App): Install the Klarna SDK using your package manager. 4. **[Render payment view](https://docs.klarna.com#render-payment-view-mobile-app)** (Mobile App): Present Klarna’s native view to display Klarna in your checkout. 5. **[Authorize the session](https://docs.klarna.com#authorize-the-session-mobile-app)** (Mobile App): Trigger the authorization through the SDK and handle the callback. 6. **[Create an order](https://docs.klarna.com#create-an-order-server-side)** (Server-side): Pass the resulting authToken to your backend to finalize the payment and create an order. **Presenting Klarna in your mobile checkout** To maximize conversion and usability, you must dynamically retrieve Klarna’s branding, payment descriptors, and payment widget via Klarna’s API and SDK to present accurate, localized, and up-to-date payment options. ![iOS_payment_widget.png](iOS_payment_widget.png) *iOS_payment_widget.png* 1. **Payment Descriptor:** Dynamically populated in Klarna Payment session response, in the `payment_method_categories.name` field. 2. **Payment Sub header:** Added by merchant. 3. **Widget:** Provided with the `KlarnaPaymentView` from the Mobile SDK. 4. **Klarna Badge:** Dynamically populated in Klarna Payment session response, in the `payment_method_categories.asset_urls.standard` field. ## Prepare When you integrate Klarna payments into your online store, your customers see Klarna as an option when they select a payment method for their purchases. If your customers select Klarna for their purchase, they are redirected to log into their Klarna account. Your customers select their preferred Klarna payment option (pay now, pay later, pay in parts) once they're logged into their Klarna account. We handle the Klarna account user flow, so you don't have to worry about it. ### Prerequisites Before you start integrating Klarna payments, there are a few things you need to prepare in advance: - Access to the Merchant portal - To access the test Merchant portal, you can [sign up to create a new test account](https://docs.klarna.com/resources/developer-tools/testing-payments/before-you-test/#accessing-the-test-merchant-portal-creating-a-new-test-account) or log in with a test existing account. - API keys for the Klarna Payments API - To test your Klarna API integration, you need a set of [test credentials](https://docs.klarna.com/resources/developer-tools/testing-payments/before-you-test/#getting-test-credentials-for-apis). - [The API reference](https://docs.klarna.com/api/payments/). You can download the Open API specification for the Klarna payments API and use the specification to [generate](https://openapi-generator.tech/) an API SDK for your programming language. - [Sample customer data](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/) and [sample payment data](https://docs.klarna.com/resources/developer-tools/sample-data/sample-payment-data/) ## Initiate payment (Server-side) When your customer wants to pay with Klarna, you have to open a payment session and share the shopping cart details in a `POST` request to the `{apiURL}/payments/v1/sessions` endpoint. In that request, you also specify if the payment is one-time or recurring. Once you start a payment session, it stays open for 48 hours or until you place an order. You can also send a separate `POST` request to cancel the session. ### Request #### Authentication Klarna payments API uses HTTP basic authentication. To authenticate, use your API credentials that consist of: - A username linked to your Klarna merchant ID (MID) - A password associated with your username If you're using an API platform that lets you store your credentials, you can add them in relevant fields. Otherwise, make sure to include the Base64-encoded username:password in the Authorization header field of each API request, as shown below. ``` json Authorization: Basic pwhcueUff0MmwLShJiBE9JHA== ``` ###### *A sample authorization request header with Base64-encoded credentials.* #### Common Parameters To get a success response, include the following required parameters in your `POST {apiURL}/payments/v1/sessions` request. | Parameter | Description | |----|----| | `locale` | The language of information presented on the Klarna widget. Learn more about [using locale in API calls](https://docs.klarna.com/payments/web-payments/before-you-start/data-requirements/puchase-countries-currencies-locales/). | | `purchase_country` *required* | The country where the purchase is made. Learn more about [supported countries](https://docs.klarna.com/payments/web-payments/before-you-start/data-requirements/puchase-countries-currencies-locales/). | | `purchase_currency` *required* | The currency in which the customer is charged. Learn more about [supported currencies](https://docs.klarna.com/payments/web-payments/before-you-start/data-requirements/puchase-countries-currencies-locales/). | | `order_amount` *required* | The total price of the order, including tax and discounts. | | `order_lines` *required* | The details of order lines in the purchase. | | `intent` | The purpose of the payment session. | | `merchant_urls.authorization` | Get a callback once the customer has completed the flow and you can create an order. | ### Response #### Success Response In response to a create session call, you receive: - `session_id`, a payment session identifier you can use to \[ update the session\] and \[ retrieve session\] details - `client_token`, a token you pass to the [JavaScript SDK](https://docs.klarna.com/payments/web-payments/additional-resources/klarna-payments-sdk-reference/) or Mobile SDK([Android](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/klarna-payments/#authorizing-the-session), [iOS](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/klarna-payments/#authorizing-the-session) and [React Native](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/reactnative/klarna-payments/#authorize)) to launch the Klarna widget - `payment_method_categories`, an array that lists the grouped Klarna payment methods available for the session. We can respond with one or more categories depending on the market and account configuration. ``` json { "session_id": "068df369-13a7-4d47-a564-62f8408bb760", "client_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjAwMDAwMDAwMDAtMDAwMDAtMDAwMC0wMDAwMDAwMC0wMDAwIiwidXJsIjoiaHR0cHM6Ly9jcmVkaXQtZXUua2xhcm5hLmNvbSJ9.A_rHWMSXQN2NRNGYTREBTkGwYwtm-sulkSDMvlJL87M", "payment_method_categories": [ { "identifier": "klarna" "name" : "Pay with Klarna", "asset_urls" : { "descriptive" : "https://x.klarnacdn.net/payment-method/assets/badges/generic/klarna.svg", "standard" : "https://x.klarnacdn.net/payment-method/assets/badges/generic/klarna.svg" } } ] } ``` ###### *A sample success response to the create session call.* #### Error Response If your request doesn't pass our validation, you'll receive an error response. ``` json { "correlation_id": "6a9b1cb1-73a3-4936-a030-481ba4bb203b", "error_code": "BAD_VALUE", "error_messages": [ "Bad value: order_lines" ] } ``` ###### *A sample error response caused by incorrect order line details.* ​Go to [Error Handling](https://docs.klarna.com/resources/developer-tools/error-handling/error-codes-and-messages-for-klarna-payments/) to learn more about common errors and troubleshooting suggestions. You can use the value in `correlation_id` to find entries related to the request under **Logs** in the Merchant portal. ## Setup your app ### Package Managers #### NPM If you want to add the SDK via `npm` use the following to add library dependency: ``` bash npm install react-native-klarna-inapp-sdk --save ``` #### Yarn If you are using yarn, then use the following to add library dependency: ``` shell yarn add react-native-klarna-inapp-sdk ``` For installing native dependencies for iOS, go to your `ios` directory and run `pod install`. ### Android You need to add a reference to the repository in your own app’s build.gradle which can be done by adding the lines between the comments below: ``` groovy allprojects { repositories { ... // Required configuration to fetch native Android SDK maven { url 'https://x.klarnacdn.net/mobile-sdk/' } } } ``` #### Return URL Mobile SDK integrations might, at some point, open third-party applications. To automatically return the user, these third-party applications need to know how to build a return intent or URL. To do that, you’ll need to provide the SDK with what we call the “Return URL” parameter. If you haven’t done so already, follow this [documentation](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/get-started/) for Android and this [documentation](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/get-started/) for iOS. ### iOS #### Return URL Klarna purchase flows might require authorizations in other applications (e.g. bank apps) or do a handover to the Klarna app. In such cases, a return URL to your application ensures seamless return to the flow in your app, hence setting up a return URL is required. It is expected that redirects to this URL should only open your application without any changes in the UI state, ensuring the customer can continue the flow prior to external navigation. You can set up a Return URL app scheme to your application by [configuring a custom URL scheme](https://developer.apple.com/documentation/xcode/defining-a-custom-url-scheme-for-your-app).**Important:** The return URL string passed to Klarna must include `://` after the scheme name. For example, if you defined `myApp` as the scheme, you must use `"myApp://"` as the return URL argument to Klarna.To avoid a Klarna specific app scheme, you can use a host in a common scheme for Klarna redirects, e.g. `myApp://klarna-redirect` , this can allow you to differentiate and handle these redirect in your handler. Considering the return URL is a constant value in `Constants.klarnaReturnUrl`, you can handle redirects to your return URL as such: ### SceneDelegate ``` swift func scene(_ scene: UIScene, openURLContexts URLContexts: Set) { guard let url = URLContexts.first?.url else { return } if (url.absoluteString.starts(with: Constants.klarnaReturnUrl.absoluteString)) { // This is a return URL for Klarna – skip deep linking return } // This was not a return URL for Klarna } ``` ### AppDelegate ``` swift func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool { if (url.absoluteString.starts(with: Constants.klarnaReturnUrl.absoluteString)) { // This is a return URL for Klarna – skip deep linking return true } // This was not a return URL for Klarna return false } ``` ### SwiftUI ``` swift @main struct MyApp: App { var body: some Scene { WindowGroup { // This is the root content view of your application AppContentView() .onOpenURL { incomingURL in if (url.absoluteString.starts(with: Constants.klarnaReturnUrl.absoluteString)) { // This is a return URL for Klarna – skip deep linking return } // This was not a return URL for Klarna } } } } ``` #### Klarna App URL Queries Klarna flows on mobile utilize Application Queries for Klarna app schemes to offer seamless app handover experience to customers. In order for the SDK to check availability of the Klarna app, we need you to enable querying Klarna app on the device by adding Klarna app schemes to [LSApplicationQueriesSchemes](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/LaunchServicesKeys.html#//apple_ref/doc/plist/info/LSApplicationQueriesSchemes). This can be configured easily in XCode by going to your project setting and under "Info"(alternatively this is also available in your `Info.plist` file) you should see an entry list for `Queried URL Schemes`, this list should contain the `klarna` and `klarnaconsent` schemes: ![mobile-sdk-queried-url-schemes-xcode.png](mobile-sdk-queried-url-schemes-xcode.png) *mobile-sdk-queried-url-schemes-xcode.png* ### Import the SDK In order to use the SDK from your React Native application import it by: ``` javascript import KlarnaPaymentView from 'react-native-klarna-inapp-sdk'; ``` ## Render payment view (Mobile App) You can import the KlarnaPaymentView from the library. You’ll then be able to add it as a component to your app. This component exposes callbacks as props and methods you can call via the component’s ref. The view will auto-size height-wise and grow to fill it’s containing view’s width. ### Creating the View You can add the view to your layout as shown below: ``` typescript const paymentViewRef = useRef(null); const createPaymentView = () => { return ( { // handle onInitialized }} onLoaded={() => { // handle onLoaded }} onLoadedPaymentReview={() => { // handle onLoadedPaymentReview }} onAuthorized={(approved, authToken, finalizeRequired) => { // handle onAuthorized }} onReauthorized={(approved, authToken) => { // handle onReauthorized }} onFinalized={(approved, authToken) => { // handle onFinalized }} onError={(error: KlarnaPaymentsSDKError) => { // handle onError }} /> ) } ``` | **Name** | **Type** | **Description** | |----|----|----| | `returnUrl` | String | App scheme URL as defined in set up to return from external applications. | | `category` | String | Should always be set to `"klarna"` as it's the preferred payment category. | | `onInitialized` | () =\> {} | The initialize call succeeded. | | `onLoaded` | () =\> {} | The load call succeeded. | | `onLoadedPaymentReview` | () =\> {} | The load payment review call succeeded. | | `onAuthorized` | ({}) =\> {} | The authorize call succeeded. | | `onReauthorized` | ({}) =\> {} | The reauthorize call succeeded. | | `onFinalized` | ({}) =\> {} | The finalize call succeeded. | | `onError` | ({}) =\> {} | An error occurred. | ### Initialize the session Before content is rendered into a payment view or an authorization, payment session with it's client token needs to be initialized. This can be done by calling `initialize` and handling result in `klarnaInitialized`. ``` typescript // initilize with clientToken for session created from server-side paymentViewRef.current?.initialize(props.clientToken); ``` | **Param** | **Type** | **Description** | |----|----|----| | `clientToken` | String | The client token you get from Klarna Payments API session response. | If successful, `onInitialized` will be called in the property you supplied. If it’s not successful, `onError` will be called instead. ``` typescript onInitialized={() => { paymentViewRed.current?.load() // optionally load payment widget upon initialize } ``` If successful, `klarnaInitialized` from `KlarnaPaymentEventListener` will be called in the listener you supplied. If it’s not successful, `klarnaFailed` will be called instead. Load payment widget ### Load payment widget Once you’ve initialized the view and you’re ready to display the payment widget, simply by calling `load`. ``` typescript // load optional payment widget paymentViewRef.current?.load(); ``` | **Param** | **Type** | **Description** | |----|----|----| | `sessionData` | String \| string \| undefined | An optional string to update the session. Formatted as JSON. | If successful, `onLoaded` will be called in property you supplied and for errors `onError` will be called instead. ``` typescript onLoaded={() => { // Content has finished loading and if you have any loader you could hide it here. } ``` ## Authorize the session (Mobile App) Once the user has confirmed that they want to pay with Klarna, it’s time to authorize the session. This is done by calling `authorize`, and similar to `load`, you can supply an optional JSON string with `jsonData` parameter to update the session. You can also specify whether auto-finalization should be turned off(on by default) and in that case you might be required to finalize the session after. ``` typescript // authorize the payment session paymentViewRef.current?.authorize(); ``` | **Param** | **Type** | **Description** | |----|----|----| | `autoFinalize` | Boolean \| boolean \| undefined | An optional flag used to turn off auto-finalization for direct bank transfer. | | `sessionData` | String \| string \| undefined | An optional string to update the session. Formatted as JSON. | If successful, `onAuthorized` will be called in property you supplied and for errors `onError` will be called instead. ``` typescript onAuthorized={(approved, authToken, finalizeRequired) => { if (authToken && approved) { // authorization is successful, backend may create order } if (finalizeRequired) { // finalize() call is required } } ``` ### Finalize This is only needed if you set `autoFinalize` to `false` in [authorize](https://docs.klarna.com#authorize-the-session-mobile-app) call.If a specific payment method needs you to trigger a second authorization, call finalize when you’re ready. ``` typescript // authorize the payment session paymentViewRef.current?.authorize(); ``` | **Param** | **Type** | **Description** | |----|----|----| | `sessionData` | String \| undefined | An optional string to update the session. Formatted as JSON. | If successful, `onFinalized` will be called in property you supplied and for errors `onError` will be called instead. ``` typescript onFinalized={(approved, authToken) => { if (authToken && approved) { // finalize is successful, backend may create order } } ``` ## Create an order (Server-side) To continue with the purchase, you have to create an order in Klarna's system. This step takes place in the server side through the Klarna payments API. ### Create an order To create an order for a one-time payment, send a `POST` request to the `{apiUrl}/payments/v1/authorizations/{authorizationToken}/order` endpoint and include `authorization_token` in the path. For example, if the `authorization_token` is `b4bd3423-24e3`, send your request to the `{apiUrl}/payments/v1/authorizations/b4bd3423-24e3/order` endpoint. ``` json { "purchase_country": "US", "purchase_currency": "USD", "billing_address": { "given_name": "John", "family_name": "Doe", "email": "john@doe.com", "title": "Mr", "street_address": "Lombard St 10", "street_address2": "Apt 214", "postal_code": "90210", "city": "Beverly Hills", "region": "CA", "phone": "333444555", "country": "US" }, "shipping_address": { "given_name": "John", "family_name": "Doe", "email": "john@doe.com", "title": "Mr", "street_address": "Lombard St 10", "street_address2": "Apt 214", "postal_code": "90210", "city": "Beverly Hills", "region": "CA", "phone": "333444555", "country": "US" }, "order_amount": 10, "order_tax_amount": 0, "order_lines": [ { "type": "physical", "reference": "19-402-USA", "name": "Battery Power Pack", "quantity": 1, "unit_price": 10, "tax_rate": 0, "total_amount": 10, "total_discount_amount": 0, "total_tax_amount": 0, "product_url": "https://www.estore.com/products/f2a8d7e34", "image_url": "https://www.exampleobjects.com/logo.png" } ], "merchant_urls": { "confirmation": "https://example.com/confirmation", "notification": "https://example.com/pending" }, "merchant_reference1": "45aa52f387871e3a210645d4", } ``` ###### *A`POST` request to create an order for a one-time payment.* #### Success response When you receive a success response, the customer gets charged and the Klarna payments session is closed. As part of the response, you receive the following details: - `order_id`, an order identifier that you can later use to capture or refund the order using the [Order management API](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-3-create-an-order/) - `redirect_url`, a URL to which you redirect the customer. This isn't included in the response received if you didn't include the URL when [initiating a payment](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-1-initiate-a-payment/) - `fraud_status`, an indicator of whether the transaction is suspected to be legitimate or [fraudulent](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-3-create-an-order/#special-considerations-for-one-time-payments) - `authorized_payment_method`, the payment method selected by your customer for this purchase ``` json { "order_id": "3eaeb557-5e30-47f8-b840-b8d987f5945d", "redirect_url": "https://payments.klarna.com/redirect/...", "fraud_status": "ACCEPTED", "authorized_payment_method": "invoice" } ``` ###### *A success response to the order creation request for a one-time payment.* Send the customer browser to `redirect_url` provided in the response. Klarna places a cookie in the browser and redirects the customer back to the confirmation URL you provided when creating the session. This makes the checkout faster the next time the customer chooses to pay with Klarna. #### Error response If your request doesn't pass our validation, you'll receive an error response. The most common reasons why creating an order fails are: - placing the order more than 60 minutes after authorization - modifying purchase details after authorization without updating the payment session ``` json { "correlation_id": "6a9b1cb1-73a3-4936-a030-481ba4bb203b", "error_code": "ERROR_CODE", "error_messages": [ "ERROR_MESSAGE" ] } ``` ###### *An error response to the order creation request for a one-time payment.* Here are examples of common errors with troubleshooting suggestions. You can use the value in `correlation_id` to find entries related to the request under **Logs** in the Merchant portal. | Error code | Error message | Description | |----|----|----| | `NOT_FOUND` | `Invalid authorization token` | The authorization token has expired because the order was placed more than 60 minutes after authorization. To fix the error, [request a new `authorization_token`](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-3-create-an-order/#authorize-call) and use it to place the order. | | `BAD_VALUE` | `Not matching fields: [billing_address.postal_code]` | The data shared with Klarna in a previous step (`create_session`, `load()`, or `authorize()`) have been modified causing the validation to fail. | | `BAD_VALUE` | `Not matching fields: [Incorrect number of items in the cart. Expected: 2, Actual: 3]` | The order lines or the cart were updated after the `authorize()` call. Please ensure that the cart is kept as-is or send a new authorization request. | | `REJECTED` | `Rejected` | This is an edge case reason, but can be triggered in case the merchant is configured with being allowed to update the cart. This could be updated from the authorize to the place order in such a way that a new authorize is triggered. In this case this is rejected. | ## What's next Klarna Mobile SDK provides a full suite of mobile-first integrations, including Klarna products like:
![Pink_Standard_Consumer_(1).png](Pink_Standard_Consumer_(1).png) *Pink_Standard_Consumer_(1).png* ![Pink_Standard_Consumer_(2).png](Pink_Standard_Consumer_(2).png) *Pink_Standard_Consumer_(2).png* ![Pink_Standard_Consumer_(3).png](Pink_Standard_Consumer_(3).png) *Pink_Standard_Consumer_(3).png*

Sign in with Klarna

On-site Messaging

Express Checkout

- **On-site Messaging**: Show contextual messaging let your customers know about the available payment options in pre-checkout: click [here](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/on-site-messaging-for-mobile/) to learn more. - **Sign in with Klarna**: Seamlessly identify and let users login via their Klarna account: click [here](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/mobile-integration/) to learn more. - **Express Checkout**: Accelerate your checkout process and boost conversion by offering a one-click checkout, click [here](https://docs.klarna.com/conversion-boosters/express-checkout/before-you-start/) to learn more (Mobile SDK support available soon). Complete your integration with - [Order management](https://docs.klarna.com/payments/after-payments/order-management/before-you-start/what-is-order-management/) - [Settlements](https://docs.klarna.com/payments/after-payments/settlements/settlement-files/) - [End-to-end testing](https://docs.klarna.com/resources/developer-tools/testing-payments/test-cases/) - [Prepare for go live](https://docs.klarna.com/resources/developer-tools/testing-payments/go-live-checklist/)
--- # Source: https://docs.klarna.com/payments/after-payments/order-management/manage-orders-in-the-merchant-portal/navigate-the-orders-dashboard.md # Navigate the orders dashboard ## Here you'll find an overview of the Orders dashboard in the Merchant portal. When you first land on the **Orders** dashboard, you can view orders in one of the following tabs: - **All orders:** List of all the orders created when your customers paid with Klarna in your online store. - **To capture:**List of the orders you still need to capture.When you fulfill an order, you need to record the number of items or services your customer receives. - **Expires soon:** List of the orders that are about to expire. The orders are valid for 28 days after creation. You have to capture and fulfill them before they expire. If you need to narrow down your search, the dashboard lets you filter the orders by **Creation date**, **Expiry date**, **Store**, and **Status.** Here's what each status means: - **Canceled:**The orders you've canceled.When your customers don't want to proceed with the purchase, you cancel the uncaptured order. We release the authorized amount, and you can't make further updates to this order. - **Fully captured:**The orders you've already captured. You've fulfilled all the items in the order and captured the total order amount. - **Partially captured:**The orders you’ve partially captured. There are still some parts of the order you need to fulfill, and you’ve captured only a part of the order amount, reflective of the items you already shipped. - **Refunded:**The orders we pay back to your customers after they return the purchased items. - **Unacknowledged:**When you integrate our solution, you’ll receive a push notification anytime your customers place an order. Upon receiving this notification, you must let us know you're aware of the order. This should be automatic and built-in to your system integration. - **Uncaptured:**The orders you still need to capture. The **Orders** dashboard has shortcuts for capturing, extending expiry dates, or exporting orders. These actions are available depending on the order status. For example, the shortcuts aren't available for orders under the Canceled status. If you want to dive deeper into an order, you can check its details such as amount, list of products, customer information, payment, and more. Check out the image below to see the **Orders** dashboard in action: ![ Orders dashboard in the Merchant portal.](Ordermanagementdashboard.jpeg) *Orders dashboard in the Merchant portal.* --- # Source: https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/netherlands.md # Partner marketing legal guidelines - Netherlands For Klarna’s Netherlands specific Terms and Conditions please visit: [](https://www.klarna.com/nl/voorwaarden/) **Keep it simple.** Don’t lose a customer because the payment instructions were too complicated, but do make it clear what you are offering. **Stand out for the right reason.** Highlight the payment option you offer, but be sure to be clear, fair and not misleading. **Be sensitive to the situation.** Consider what is going with your customers and in the wider market as a whole. Use this knowledge to decide how you promote and market Klarna in all your channels. One message does not fit all circumstances. **Don't encourage debt.** Do not encourage shoppers to spend outside of their means. Using phrases such as *‘strapped for cash?’*, *‘don’t wait until payday’* or *‘broke AF’* are unacceptable and irresponsible. You have an obligation to ensure your customers stay financially healthy. **Make sure your ads are socially responsible to consumers and society.** Offers or benefits should not be linked to credit marketing which are likely to make the credit offer attractive. ​*Klarna may review and monitor your advertising and marketing of Klarna's products and services, including through automated means, to ensure your marketing complies with applicable laws, rules, and regulations.* --- # Source: https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/norway.md # Partner marketing legal guidelines - Norway For Klarna’s Norway specific Terms and Conditions please visit: **Keep it simple**. Don’t lose a customer because the payment instructions were too complicated, but do make it clear what you are offering. **Stand out for the right reason**. Highlight the payment option you offer, but be sure to be clear, fair and not misleading. **Be sensitive to the situation**. Consider what is going with your customers and in the wider market as a whole. Use this knowledge to decide how you promote and market Klarna in all your channels. One message does not fit all circumstances. **Don't encourage debt**. Do not encourage shoppers to spend outside of their means. Using phrases such as *‘strapped for cash?’*, *‘don’t wait until payday’* or *‘broke AF’* are unacceptable and irresponsible. You have an obligation to ensure your customers stay financially healthy. **Make sure your ads are socially responsible to consumers and society**. Offers or benefits should not be linked to credit marketing which are likely to make the credit offer attractive. ​*Klarna may review and monitor your advertising and marketing of Klarna's products and services, including through automated means, to ensure your marketing complies with applicable laws, rules, and regulations.* --- # Source: https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/on-site-messaging-api.md # On-site messaging API integration ## This document describes the integration steps needed to make use of the Klarna On-site messaging API. To integrate On-site messaging on your site please make sure you meet the prerequisites as well as you follow steps in this page. ![ Diagram of an example of integration](0b161090-f957-4249-aa52-100bdbab83ad_745fe1e3a1f5f69b15886c268961574c.jpeg) *Diagram of an example of integration* ## Prerequisites - On-site messaging is already activated for your e-store. [How to activate On-site messaging](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/integrate-using-klarna-web-sdk/#step-1-activation)?.  - On-site messaging API access is enabled for your e-store. The API is not activated by default, you need to request access. Please reach out to your Klarna account manager. Otherwise the OSM API backend will return a **403 - Forbidden** response. **If you are looking forward to integrate On-site messaging in your e-commerce, please integrate OSM with our plugins or via Web SDK always that possible.** API integration enables limited capabilities and should only be used as an alternative in case Web SDK integration is not possible. ## Step 1: Obtain your OSM client-id Get your client-id from the On-site messaging section in the Klarna Merchant Portal (if you don't have access to Merchant Portal please ask your account manager for it). This client-id is used by OSM to identify your e-store in multiple regions. ## Step 2: Make HTTPS GET call You will need to make https GET call to OSM API, how this is done depends on your programming language of choice. The endpoints are different per environment, make sure you are calling the right endpoint: **Testing (playground)** - Europe: [](https://api.playground.klarna.com/messaging/v3){version} - North America: [](https://api-na.playground.klarna.com/messaging/v3){version} - Oceania: [](https://api-oc.playground.klarna.com/messaging/v3){version} **Production** - Europe: [](https://api.klarna.com/messaging/v3){version} - North America: [](https://api-na.klarna.com/messaging/v3){version} - Oceania: [](https://api-oc.klarna.com/messaging/v3){version} For more information please check the [OSM API reference page.](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/on-site-messaging-api-reference/) The endpoint response will look like: ###### *Example of API response* ``` json { "content": { "nodes": [ { "type": "TEXT", "name": "TEXT_MAIN", "value": "Make 4 payments of $128.67. No fees." }, { "type": "ACTION", "name": "ACTION_LEARN_MORE", "label": "Learn more", "url": "https://us-assets.playground.klarnaservices.com/learn-more/index.html?..." }, { "type": "IMAGE", "name": "KLARNA_BADGE", "alt": "Klarna", "url": "http://us-assets.klarnaservices.com/.../badges/generic/klarna.svg" } ] }, "impression_url": "https://evt-us.playground.klarnaservices.com/v1/osm-client-script/..." } ``` **Do not** rely on the presence or absence of fields that are not publicly documented in our API. While we strive to maintain backwards compatibility and stability for publicly documented fields, additional fields may be added or removed in the future. Please ensure that any validation of API responses is limited to the publicly documented fields. ## Step 3: Render Ad You can now use the content payload inside the response to render the ad using the language or framework of your choice. For examples on how placements might look, see below. ## Step 4: Register Impression event As per [IAB definition](https://www.iab.com/wp-content/uploads/2015/06/Ad-Impression-Measurment-Guideline-US.pdf): “*An impression is a measurement of responses from an ad delivery system to an ad request from the user's browser, which is filtered from robotic activity and is recorded at a point as late as possible in the process of delivery of the creative material to the user's browser — therefore closest to actual opportunity to see by the user”.* When integrating the OSM API you must trigger a call to register the impression of the ad. The response from the OSM API will contain an impression_url key that can be used to track the impression of this specific ad. If this is not respected, OSM team has the right to stop the integration any time. There are multiple ways of making this call: - On the web: Through a web beacon by creating an tag and using the impression_url as the source of the image. This will generate a call to our servers and the impression will be recorded. - If a web beacon can’t be created you can trigger a HTTP GET call from your application. This call can originate from the frontend or backend of your application. The impression event endpoint will return a 2XX response status code.\|collapsed=true}} ## Step 5: Cache the response when possible The endpoint will return a `cache-control` header that you should honor when possible. In the case of a web integration frontend-side, this header will be handled by the browser. On mobile or backend integrations that will depend on the characteristics of the platform. ## Handling product purchase amount changes When using credit-promotion placements on product pages, the case when the product/s purchase amount changes must be handled by the integrator.  Whenever the purchase amount changes, a new request to the endpoint must be made to refresh the messaging according to the new purchase amount, the ad should be re-render and a new impression event registered. --- # Source: https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/on-site-messaging-for-mobile/on-site-messaging-for-android.md # On-site Messaging for Android ​Adding On-Site Messaging is as easy as it gets. To achieve this tailor made experience for the user you just need to: - Request access to On-Site Messaging - Create the native view - Set the parameters - Render the view ## Request Access to On-Site Messaging If you are using a version of the [SDK prior to 2.3.2](https://github.com/klarna/klarna-mobile-sdk-android/blob/master/CHANGELOG.md#232---2022-10-26), to be able to integrate On-site Messaging our team needs to enable the access for it. You can request access through your dedicated Delivery Manager. Please refer the Merchant ID (MID) and/or the name of your brand/company (merchant name), the countries you request access and the environment (playground or production). ## Creating the Native View The On-Site Messaging native view in Android is called KlarnaOSMView. You can create KlarnaOSMView programmatically or inflate it from an XML file. Additionally you can also set the parameters from the XML. ### Create the View Programmatically You can create the native view programmatically and add it to your layout with your desired layout options. ``` kotlin // Create an instance of OSM view val osmView = KlarnaOSMView(context) // Add it to your layout with desired layout parameters val osmLayoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) containerViewGroup.addView(osmView, osmLayoutParams) ``` ## Create the View from XML You can also add the native view in your XML like below: ``` markup ``` Now you can access the view like this: ``` java val osmView = findViewById(R.id.klarnaOsmView) ``` ## Parameters Parameters used for KlarnaOSMView are set as variables of the View instance or as attributes in the XML declaration. These can be identifier string values, amount or enumeration values (parameters marked with \* are mandatory). | **Param** | **Type** | **Description** | |----|----|----| | clientId\* | String | On-Site Messaging Client Identifier gathered from Klarna Merchant Portal. | | placementKey\* | String ("credit-promotion-badge" or "top-strip-promotion-badge") | Placement key identifier from Klarna Merchant Portal. At the moment the supported placement keys are "credit-promotion-badge" and "top-strip-promotion-badge" | | locale\* | String | Locale string for the placement configuration, default value is en-US. | | purchaseAmount | Long | Amount for the placement. Set in micro units (\$120.00 = 12000), used for amount based credit promotions. | | environment\* | KlarnaOSMEnvironment | Enumerated environment value to specify merchant’s running environment. Default value is DEMO. | | region\* | KlarnaOSMRegion | Enumerated region value to specify merchant’s running market region. | | theme\* | KlarnaOSMTheme | Enumerated theme value to specify how to stylize the view on light and dark configurations. | | hostActivity\* | Activity | Activity instance to specify parent activity. It will be used for inner linking for informational pages. The reference will be kept as a weak reference. | | styleConfiguration | KlarnaOSMStyleConfiguration | Can be used to customize the appearance of the OSM view. If not set, a default appearance will be used based on the specified theme. **Note: this is available from version 2.6.17.** | ### KlarnaOSMEnvironment Environment enumeration will be used to define whether to use a demo placement or fetch placement configurations from either playground or production. | **Name** | **Description** | |----|----| | DEMO | This environment ignores all other parameters and shows a demo placement config containing all On-Site Messaging features. | | PLAYGROUND | This environment is for placement configurations from playground Merchant Portal. | | PRODUCTION | This environment is for production builds of the app with placement configurations for production merchants. | ### KlarnaOSMRegion Region enumeration will be used to define which endpoint to connect as a source for the placement configurations. | **Name** | **Description** | |----------|---------------------------------| | EU | Region value for Europe. | | NA | Region value for North America. | | OC | Region value for Oceania. | ### KlarnaOSMTheme Theme enumeration will be used to define which style of OSM to be used, depending on either the app’s configuration or the system setting. Each style has a predefined set of values for background color, text color, text size, ... that will be used to style the OSM view. | **Name** | **Descriptions** | |----|----| | LIGHT | Light style for placement view. | | DARK | Dark style for placement view. | | AUTOMATIC | Automatic theme that will use the system’s user interface style. | ### KlarnaOSMStyleConfiguration This feature is available from version 2.6.17. By using KlarnaOSMStyleConfiguration you can customize the appearance of the OSM view to some extend. As of now, you can customize the following: - Background color - Text color - Text size - Text size unit - Text font Please note that `styleConfiguration` takes precedence over `theme`. This has the following implications: - If you specify a value thorough `styleConfiguration` (text color, for example) then this value will be used to style the OSM view regardless of the value that `theme` provides. - If your app supports light and dark mode, then it's your responsibility to update `styleConfiguration` and call the render method when the device's theme changes so that the appearance of the OSM view updates. To set a custom style for the OSM view you can do like the following: ``` kotlin val klarnaOSMStyleConfiguration = KlarnaOSMStyleConfiguration.Builder() .setBackgroundColor(0xFFFFFF) .setTextStyle( KlarnaTextStyleConfiguration.Builder() .setTextColor(0x000000) .setTextSize(unit = TypedValue.COMPLEX_UNIT_SP, size = 16f) .setTextFont(ResourcesCompat.getFont(this, R.font.merriweather_regular)) // assuming that there's a font file in the 'res/font' directory with the name 'merriweather_regular' .build() ) .build() osmView.styleConfiguration = klarnaOSMStyleConfiguration ``` ## Setting the Parameters All of the parameters for On-Site Messaging are stored as variables on the KlarnaOSMView instance. The required ones need to be set before calling the render method, otherwise the RenderResult will return a validation error for the missing parameter. Most of the parameters can be set either programmatically or in the XML layout file. The only two exceptions are hostActivity and styleConfiguration that you can only set them programatically. In both cases, the parameters will be stored in the View instance. ### Setting the Parameters Programmatically ``` kotlin osmView.clientId = "" osmView.placementKey = "" osmView.locale = "en-US" osmView.purchaseAmount = 10000 osmView.environment = KlarnaOSMEnvironment.PRODUCTION osmView.region = KlarnaOSMRegion.NA osmView.theme = KlarnaOSMTheme.DARK osmView.styleConfiguration = ... osmView.hostActivity = this // assuming that 'this' refers to the current Activity ``` ### Setting the Parameters in XML ``` markup ``` ## Rendering the Placement Once you have set all the parameters to the KlarnaOSMView, you are ready to render the actual placement view. To do that, you need to call the render method of the view with the RenderResult callback parameter. Once the render method is called, first the view will validate all the parameters. If there is a missing parameter the RenderResult callback will be invoked with corresponding error values. If parameters are valid then the view will try to fetch placement configuration from On-Site Messaging API. Any errors or failures from this network request will also invoke RenderResult callback if necessary. If the placement configuration is fetched and valid then the KlarnaOSMView will render it and invoke the RenderResult callback with a null value. ### Calling the Render Method The RenderResult callback can be used for logging purposes or to make the KlarnaOSMView visible or not, according to the error. ``` kotlin osmView.render(RenderResult { error -> ... }) ``` ## Identifying the Errors Similar to other parts of the SDK, On-Site Messaging also makes use of the KlarnaMobileSDKError class. To read more about the error handling and error object properties refer to the [On-Site Messaging Error Handling guide](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/on-site-messaging-for-mobile/). ### Klarna On-Site Messaging Error Names These are the predefined names for errors that can happen during the placement render flow. These names are available as static variables inside KlarnaOSMError class. | **Error Name** | **Description** | |----|----| | KlarnaOSMErrorMissingClientId | Client ID was not set. Set the `clientId` variable and invoke render again. | | KlarnaOSMErrorMissingPlacementKey | Placement key was not set. Set the `placementKey`variable and invoke render again. | | KlarnaOSMErrorMissingRegion | Region was not set. Set the `region` variable and invoke render again. | | KlarnaOSMErrorMissingHost | Hosting activity was not set. Set the `hostActivity` variable and invoke render again. | | KlarnaOSMErrorInvalidPlacementConfig | Fetched configuration from the API can not be rendered by the native view. | | KlarnaOSMErrorPlacementError | On-Site Messaging API has returned an error. Message of this error will contain information sent from the API. | | KlarnaOSMErrorNetworkError | A network error occurred and the placement will not be rendered. | | KlarnaOSMErrorDisabled | Native On-Site Messaging has been disabled by Klarna, the placement will not be rendered. | --- # Source: https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/on-site-messaging-for-mobile/on-site-messaging-for-ios.md # On-Site Messaging for iOS Adding On-Site Messaging is as easy as it gets. To achieve this tailor made experience for the user you just need to: - Request access to On-Site Messaging - Create the native view - Set the parameters - Render the view ## Request Access to On-site Messaging If you are using a version of the [SDK prior 2.3.2](https://github.com/klarna/klarna-mobile-sdk/blob/master/CHANGELOG.md#232---2022-10-31), to be able to integrate On-site Messaging our team needs to enable the access for it. You can request access through your dedicated Delivery Manager. Please refer the Merchant ID (MID) and/or the name of your brand/company (merchant name), the countries you request access and the environment (playground or production). ## Creating the Native View The On-Site Messaging native view in iOS is called KlarnaOSMView. You can create KlarnaOSMView programmatically and add it to your view controller or custom views. ### Create the View Programmatically You can create the native view programmatically and place it in your application with desired layout options. ``` swift // Create the placement view let osmView = KlarnaOSMView() // Set constraints // ... osmView.translatesAutoresizingMaskIntoConstraints = false view.addSubview(osmView) ``` ## Parameters Parameters used for the KlarnaOSMView are set as variables of the UIView instance. These can be identifier string values, amount or enumeration values. | **Param** | **Type** | **Description** | |----|----|----| | clientId | String | On-Site Messaging Client Identifier gathered from Klarna Merchant Portal. | | placementKey | String ("credit-promotion-badge" or "top-strip-promotion-badge") | Placement key identifier from Klarna Merchant Portal. At the moment the supported placement keys are "credit-promotion-badge" and "top-strip-promotion-badge" | | locale | String | Locale string for the placement configuration, default value is en-US. | | purchaseAmount | Int | Amount for the placement. Set in micro units (\$120.00 = 12000), used for amount based credit promotions. | | environment | KlarnaOSMEnvironment | Enumerated environment value to specify merchant’s running environment. Default value is demo environment. | | region | KlarnaOSMRegion | Enumerated region value to specify merchant’s running market region. | | theme | KlarnaOSMTheme | Enumerated theme value to specify how to stylize the view on light and dark configurations. | | styleConfiguration | KlarnaOSMStyleConfiguration | Can be used to customize the look and feel of the placement. If not set, a default look and feel will be used based on the specified theme. **Note: this is available from version 2.6.20.** | | hostViewController | UIViewController | UIViewController instance to specify parent view controller. It will be used for inner linking for informational pages. The reference will be kept as a weak reference. | | delegate | KlarnaOSMViewEventListener | This delegate will be used to notify your application for changes in size of the native view. | ### KlarnaOSMEnvironment Environment enumeration will be used to define whether to use a demo placement or fetch placement configurations from either playground or production. | **Name** | **Description** | |----|----| | demo | This environment ignores all other parameters and shows a demo placement config containing all On-Site Messaging features. | | playground | This environment is for placement configurations from playground Merchant Portal. | | production | This environment is for production builds of the app with placement configurations for production merchants. | ### KlarnaOSMRegion Region enumeration will be used to define which endpoint to connect as a source for the placement configurations. | **Name** | **Descriptions** | |----------|---------------------------------| | eu | Region value for Europe. | | na | Region value for North America. | | oc | Region value for Oceania. | ### KlarnaOSMTheme Theme enumeration will be used to define which style of OSM to be used, depending on either the app’s configuration or the system setting. Each style has a predefined set of values for background color, text color, text size, ... that will be used to style the OSM view. | **Name** | **Descriptions** | |----|----| | light | Light style for placement view. | | dark | Dark style for placement view. | | automatic | Automatic theme that will use the system’s user interface style. | ### KlarnaOSMStyleConfiguration This feature is available from version 2.6.20. By using KlarnaOSMStyleConfiguration you can customize the appearance of the OSM view to some extend. As of now, you can customize the following: - Background color - Text color - Text size - Text font Please note that `styleConfiguration` takes precedence over `theme`. This has the following implications: - If you specify a value thorough `styleConfiguration` (text color, for example) then this value will be used to style the OSM view regardless of the value that `theme` provides. - If your app supports light and dark mode, then it's your responsibility to update `styleConfiguration` and call the render method when the device's theme changes so that the appearance of the OSM view updates. To set a custom style for the OSM view you can do like the following: ``` swift let klarnaOsmStyleConfiguration = KlarnaOSMStyleConfiguration.Builder() .setBackgroundColor(.white) .setTextStyleConfiguration( KlarnaTextStyleConfiguration.Builder() .setTextColor(.black) .setTextFont(.systemFont(ofSize: 0.0)) .setTextSize(14.0) .build() ) .build() osmView?.styleConfiguration = klarnaOsmStyleConfiguration ``` ## Setting the Parameters All of the parameters for On-Site Messaging are stored as variables on the KlarnaOSMView instance. The required ones need to be set before calling the render method, otherwise the RenderResult will return a validation error for the missing parameter. ``` swift osmView.clientId = "" osmView.placementKey = "" osmView.locale = "en-US" osmView.purchaseAmount = 1000 osmView.environment = .production osmView.region = .na osmView.theme = .dark osmView.styleConfiguration = ... osmView.delegate = self osmView.hostViewController = self ``` ## Handling Height Changes Before rendering the OSM View and displaying its contents, the SDK doesn’t know how the view is integrated in your view hierarchy, so it exposes a ***delegate*** (for SDK versions \<= 2.2.2) and a ***sizingDelegate*** (for SDK versions\> 2.2.2). These delegates inform you about the corresponding size of the OSM View after the render function is called, allowing you to update the UI accordingly with the changes in the OSM view height. Depending on the SDK version you need to set one or the other, **not both**. ### Setting the Delegate ``` swift osmView.delegate = self ``` The delegate conforms to the protocol ***KlarnaOSMViewEventListener*** that has only the following function to be implemented: ``` swift func klarnaOSMViewResized(_ height: CGFloat) ``` That is where the calculated height of the OSM View based on the content rendered will be returned, so that your UI can be adjusted with that value. ### Setting the sizingDelegate ``` swift osmView.sizingDelegate = self ``` This new delegate conforms to the protocol ***KlarnaSizingDelegate*** that has only the following function to be implemented: ``` swift func klarnaComponent(_ klarnaComponent: KlarnaComponent, resizedToHeight height: CGFloat) ``` This new function will receive two parameters: - **KlarnaComponent**: Since Klarna offers different components in the SDK, if you are using more than one, it is useful to know which component changed its height. - **Height**: the final height of the OSMView calculated when the render method is called and returned based on the content. Inside this method you can adjust your UI with the proper height calculated for the OSM View. ## Rendering the Placement Once you have set all the parameters to the KlarnaOSMView, you are ready to render the actual placement view. To do that, you need to call the render method of the view with the RenderResult callback parameter. Once the render method is called, first the view will validate all the parameters. If there is a missing parameter the RenderResult callback will be invoked with corresponding error values. If parameters are valid then the view will try to fetch placement configuration from On-Site Messaging API. Any errors or failures from this network request will also invoke RenderResult callback if necessary. If the placement configuration is fetched and valid then the KlarnaOSMView will render it with native views and invoke the RenderResult callback with a null value. ### Calling the Render Method The RenderResult callback can be used for logging purposes or to make the KlarnaOSMView visible or not, according to the error. ``` swift osmView.render(callback: { [weak self] error in ... }) ``` ## Identifying the Errors Similar to other parts of the SDK, On-Site Messaging also makes use of the KlarnaMobileSDKError class. To read more about the error handling and error object properties refer to the [On-Site Messaging Error Handling guide](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/on-site-messaging-for-mobile/). ### Klarna On-Site Messaging Error Names These are the predefined names for errors that can happen during the placement render flow. These names are available as static String values with typealias KlarnaOSMError. | **Error Name** | **Description** | |----|----| | KlarnaOSMErrorMissingClientId | Client ID was not set. Set the clientId variable and invoke render again. | | KlarnaOSMErrorMissingPlacementKey | Placement key was not set. Set the placementKey variable and invoke render again. | | KlarnaOSMErrorMissingRegion | Region was not set. Set the region variable and invoke render again. | | KlarnaOSMErrorMissingHost | Hosting UIViewController was not set. Set the hostViewController variable and invoke render again. | | KlarnaOSMErrorInvalidPlacementConfig | Fetched configuration from the API can not be rendered by the native view. | | KlarnaOSMErrorPlacementError | On-Site Messaging API has returned an error. Message of this error will contain information sent from the API. | | KlarnaOSMErrorNetworkError | A network error occurred and the placement will not be rendered. | | KlarnaOSMErrorDisabled | Native On-Site Messaging has been disabled by Klarna, the placement will not be rendered. | --- # Source: https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/on-site-messaging-for-mobile.md # On-site messaging for mobile ## Native support for this feature is as easy as it gets by an actual native view supporting both iOS and Android. Your placement configurations enabled from the Merchant Portal will be available in your application instantly. ## Integration steps On-Site Messaging can present different placement configurations including but not limited to financing options, required purchase amount for better deals, monthly payment amount and legal obligations. To achieve this functionality, the SDK provides 3 steps of integration: 1. Set Parameters 2. Invoke Render 3. Handle Render Result ![klarna docs image](ZrpN2kaF0TcGI3uO_Screenshot2024-08-12at20.00.39.jpeg)image ## Set parameters The native view has some set of parameters that the merchant needs to set before the render operation. Some of these parameters are merchant specific such as client identifier, placement keys, locale etc. but there are also parameters for cart or product based parameters such as purchase amount. With these options On-Site Messaging will provide users a unique placement configuration and provide a better purchasing experience. ## Invoke render Once these parameters are set all you need to do is call the render method of the native view. Then it will fetch the placement configuration from Klarna’s On-Site Messaging backend and render the views. ## Handle render result The native view will always return a render result. If the result is empty(without any errors) this means that the render was successful and the On-Site Messaging components are added inside the native view. But if there is an error that occurred during the process, the render result callback will be invoked with an error object describing the failure. For further technical details and a guide to how to integrate for both platforms please refer to our [iOS guide here](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/on-site-messaging-for-mobile/on-site-messaging-for-ios/) and [Android guide here](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/on-site-messaging-for-mobile/on-site-messaging-for-android/). ### Error handling Similar to other parts of the SDK, On-Site Messaging also uses a similar error properties: | **Property** | **Type** | **Description** | |----|----|----| | name | String | Name of the error that occurred. Value of On-Site Messaging error names can be found inside our SDK. | | message | String | Message describing the error. | | isFatal | Boolean | Informs whether this error is fatal. If a fatal error occurs KlarnaOSMView should not be shown any further. | Names of the errors and how to identify them are described in our [iOS guide here](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/on-site-messaging-for-mobile/on-site-messaging-for-ios/) and [Android guide here](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/on-site-messaging-for-mobile/on-site-messaging-for-android/). --- # Source: https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/on-site-messaging-javascript-library.md # On-site messaging JavaScript library ## The JavaScript library delivers the core functionality of On-site messaging. ## What is our On-site messaging JavaScript library? The On-site messaging JavaScript library is responsible for: - Communicating with On-site messaging to deliver messaging for placements. - Optimising user experience with a cache layer. - Handling interstitial operations to allow user interaction without affecting the website. In the [installation step](https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/on-site-messaging-javascript-library/) of On-site messaging, you add the JavaScript library snippet to your website's source code. ``` html ``` ###### *An example of the On-site messaging JavaScript library snippet for Europe.* | Attribute | Description | |----|----| | `src` | The source URL of the On-site messaging installation script. The URL differs for playground and production environments and regions. | | `data-environment` | Specify the environment, either `production` or `playground`. The value is optional and the default value is `production`. | | `async` | Makes loading the script asynchronous and non-blocking. | | `data-client-id` | Your individual On-site messaging identifier, it can be found in the Merchant portal. If you don't have access to the Merchant portal, ask your delivery manager for it. | ## How the library works The flow of the On-site messaging JavaScript library varies depending on the functions it's called on to perform. Below is a high-level summary of the process: ### 1. Scan the DOM tree for placements The library looks for placement tags in the DOM tree. An ad server matches the content to the placement tag ID and returns the content that will be rendered in the tag. ### 2. Listen for interstitials Many ads will contain interstitial events that are initiated when a user clicks a call-to-action. The library listens for those events and renders the interstitial on-click. ## How can I migrate to the new On-site messaging integration? We've simplified our integration, so you can install On-site messaging across different markets faster, manage your placements more easily, and benefit from upcoming feature improvements. You can find the migration guide in the Merchant portal under **On-site messaging**\> **Updates**\> **Update On-site messaging**. `If you're using one of our platforms, you can find further information in the related platform documentation:` - [BigCommerce](https://x.klarnacdn.net/plugins/Klarna%20On-Site%20Messaging%20on%20BigCommerce%20-%20Support%20Guide.pdf) - [WooCommerce](https://docs.krokedil.com/article/259-klarna-on-site-messaging) - [Shopify](https://apps.shopify.com/klarna-on-site-messaging) Deprecation timeline: As of **February 28, 2022**, we no longer provide feature updates and the old integration is in deprecation mode. We'll only fix potential bugs. Starting **March 31, 2023**, we'll stop displaying On-site messaging on your website. ## Iframe deprecation Currently, OSM supports the use of iframe as a fallback for browsers that don't support shadowDOM. The use of iframe has several drawbacks, including: - Poor performance due to the need to create a separate document and rendering context for each iframe. - Limited ability to style and interact with the content within the iframe. For these reasons the OSM team had decided to switch to shadowDOM a few years ago and use iframe only as a fallback for browsers that don't support shadowDOM. ShadowDOM offers several benefits, including: - Improved performance, as it allows us to attach an isolated DOM tree to an element without the overhead of creating a new document and rendering context. - Greater control over styling and interacting with the embedded content. Given that all the major browsers support shadowDOM we have decided to drop support of iframe, on March 31, 2023 we'll stop displaying ads in old browsers that don't support shadowDOM, for example, Internet Explorer 11 and older. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/conversion-boosters/on-site-messaging.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/conversion-boosters/on-site-messaging.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/conversion-boosters/on-site-messaging.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/conversion-boosters/on-site-messaging.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/conversion-boosters/on-site-messaging.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/conversion-boosters/on-site-messaging.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/conversion-boosters/on-site-messaging.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/conversion-boosters/on-site-messaging.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/conversion-boosters/on-site-messaging.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/conversion-boosters/on-site-messaging.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/conversion-boosters/on-site-messaging.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/conversion-boosters/on-site-messaging.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/conversion-boosters/on-site-messaging.md # On-Site Messaging on SAP Commerce Cloud ## This guide provides step-by-step instructions to install and configure the Klarna On-Site Messaging (KOSM) add-on for SAP Commerce. ### Installation Steps #### Step 1: Unpack the add-on Extract the archive and place the `klarnaosmaddon` and `klarnaosmbackoffice` folders into the `custom` folder of the SAP Commerce Suite: ``` javascript /bin/custom ``` #### Step 2: Update `localextensions.xml` - **Verify Add-on Support:** Ensure the following extension is present: ``` xml ``` - **Add Klarna Extensions:** Add the following entries to `localextensions.xml` ``` xml ``` - **Check Target Storefront Extension:** Confirm that the correct storefront extension is referenced. #### Step 3.: Stop the SAP Commerce server Stop the server by using one of the following methods based on your setup: - **Embedded Mode:** Press `Ctrl+C`. - **Service Mode:** - Windows: Run `hybrisserver.bat stop`. - Unix: Run `./hybrisserver.sh stop`. #### Step 4: Set up the environment Run the environment setup script; navigate to `/bin/platform` and execute: - Windows: `setantenv.bat` - Unix: `./setantenv.sh` #### Step 5: Install the add-on Run the installation command: ``` bash ant addoninstall -Daddonnames="klarnaosmaddon" -DaddonStorefront.yacceleratorstorefront="yacceleratorstorefront" ``` **Note:** Replace `yacceleratorstorefront` with your project-specific storefront name. #### Step 6: Configure Klarna URLs and tags Set up script URLs and tags. In the SAP Commerce Backoffice, configure the following for both playground and production environments: - **Script (Library) URL**: URL for Klarna's JavaScript library. - **UCI (Unique Client ID)**: Merchant identifier provided by Klarna (`data-client-id`), you can find this in Merchant portal. - **Country**: The target country for Klarna On-Site Messaging. - **Placement Tag IDs**: Unique identifiers for each placement location (e.g., product page, cart page). #### Step 7: Modify code for KOSM integration **Update the Master Tag:** Modify the master tag to include: ``` jsp ``` **Update the PDP Page:** Modify `productPricePanel.tag` . - Add the tag library. ``` jsp <%@ taglib prefix="osm" tagdir="/WEB-INF/tags/addons/klarnaosmaddon/responsive/osm/" %> ``` - Add `osmproduct` tag. ``` jsp ``` - Make sure to include the osm tag at the end. ``` jsp ``` **Modify the cart page:** For the cart page, update c`artTotals.tag` as follows: - Set the final price based on the tax setting ``` jsp
``` - Include the cart tag: ``` jsp ``` #### Step 8: Rebuild the system Rebuild the system by running the following command: `ant clean all` #### Step 9: Update the system 1. **Perform a full initialization (if this is the first installation):** Use the Hybris Administration Console (HAC). 2. **Update the system:** - Open a browser and go to **HAC → Platform → Update**. - Under **General Settings**, select: - Update running system - Localize types - Under **Project Data Settings**, check: - `klarnaosmaddon` - `klarnaosmbackoffice` - Click **Update**. ### Configuration #### Create a Klarna OSM configuration **Log in to Backoffice** 1. Open a web browser and navigate to the SAP Commerce Backoffice login page. 2. Log in with your administrator account credentials. **Navigate to Klarna On-Site Messaging** In Backoffice, go to **Klarna**\> **Klarna On-Site Messaging**. ![Backoffice navigation to OSM in SAP](Draft:On-Site_Messaging_on_SAP_Commerce_Cloud_1737650537250.png) *Backoffice navigation to OSM in SAP* **Create a new configuration** Click **Create** to add a new Klarna On-Site Messaging configuration. ![Creating a new OSM configuration in SAP](Draft:On-Site_Messaging_on_SAP_Commerce_Cloud_1737650600909.png) *Creating a new OSM configuration in SAP* **Fill in configuration details** Enter the required values for configuring On-Site Messaging. ![Draft:On-Site_Messaging_on_SAP_Commerce_Cloud_1737650790324.png](Draft:On-Site_Messaging_on_SAP_Commerce_Cloud_1737650790324.png) *Draft:On-Site_Messaging_on_SAP_Commerce_Cloud_1737650790324.png* **Save the configuration** Click **Done** to save your configuration. ### Map KOSM to common configuration, credentials, and base store **Navigate to Klarna Common Configuration** 1. In Backoffice, go to **Klarna**\> **Klarna Common Configuration**. 2. Double-click the Klarna Common Configuration entry to open it for editing. ![Draft:On-Site_Messaging_on_SAP_Commerce_Cloud_1737650823342.png](Draft:On-Site_Messaging_on_SAP_Commerce_Cloud_1737650823342.png) *Draft:On-Site_Messaging_on_SAP_Commerce_Cloud_1737650823342.png* **Assign base store** 1. Go to the **General** tab. 2. In the **Essentials** section, select the relevant base stores where the Klarna On-Site Messaging should appear. ![Credentials settings in SAP](Draft:On-Site_Messaging_on_SAP_Commerce_Cloud_1737650956438.png) *Credentials settings in SAP* **Assign credentials** 1. In the **Klarna Credentials** section, select the appropriate credentials to use with the Klarna On-Site Messaging configuration. 2. If needed, click **+ Create Klarna Activation** to create new credentials. ![Klarna Activation in SAP](Draft:On-Site_Messaging_on_SAP_Commerce_Cloud_1737650992530.png) *Klarna Activation in SAP* **Assign the Klarna On-Site Messaging configuration** In the **Klarna On-Site Messaging Configuration** section, select the newly created OSM configuration. ![Klarna OSM configuration in SAP](Draft:On-Site_Messaging_on_SAP_Commerce_Cloud_1737651023864.png) *Klarna OSM configuration in SAP* **Save changes** Click **Save** to apply your changes to the Klarna Common Configuration. ### Configuration Fields

Attribute

Mandatory

Description

Code

Yes

Provide a unique name or code to identify this Klarna OSM configuration internally within SAP Commerce.

Active

Yes

Check this option to activate the configuration. Leave unchecked to keep it inactive.

Client Id

Yes

Enter the UCI value retrieved from the Klarna Merchant Portal (data-client-id). This can be configured under Klarna> Klarna Activation.

Placements

Yes

Choose multiple placement options (e.g., Cart or PDP) where the Klarna On-Site Messaging should appear.

Theme

Yes

Select a theme from the dropdown for the Cart Page or PDP. If custom styling is configured in the Klarna Merchant Portal, choose the custom option.

Custom Style

No

Add custom styles to OSM elements using the ::part API. Use a

--- # Source: https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing.md # Resources Online marketing ## In this section you will find all localised and ready-to-use digital marketing materials for each of Klarna’s live markets. Use the navigation below or on the right to jump to the market you want to activate your campaign in. Every market section contains following assets in your local language(s): - **Pre-approved messaging** for each of the available payment methods. - **Ready-made advertising banners,** based on the pre-approved messaging and including necessary legal disclosures, available to download in various desktop and mobile formats. - **Ready-made email templates**, available to downloadfor both launch and abandoned cart activations. - **Brand kit,** including Klarna badge and partner logo lockups (in local languages) for easy access in addition to the [brand guidelines](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/brand-guidelines/) section.  To create a **Klarna landing page** please follow these [instructions](https://docs.klarna.com/on-site-messaging/in-depth-knowledge/placements/#faq-placement), which will allow you to directly integrate a dedicated page in your local language, with payment methods activated on your site and relevant FAQs. Please utilize the pre-approved messaging options provided below, which already include essential legal disclaimers. It is crucial to also thoroughly review the [advertising legal guidelines](https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/rest-of-the-world/) to guarantee full compliance with local promotional regulations. | | | | | |----|----|----|----| | **[Australia 🇦🇺](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#australia)** | **[Austria 🇦🇹](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#austria)** | **[Belgium 🇧🇪](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#belgium)** | **[Canada 🇨🇦](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#canada)** | | **[Czech Republic 🇨🇿](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#czech-republic)** | **[Denmark 🇩🇰](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#denmark)** | **[Finland 🇫🇮](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#finland)** | **[France 🇫🇷](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#france)** | | **[Germany 🇩🇪](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#germany)** | **[Greece 🇬🇷](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#greece)** | **[Hungary 🇭🇺](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#hungary)** | **[Ireland 🇮🇪](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#ireland)** | | **[Italy 🇮🇹](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#italy)** | **[Mexico 🇲🇽](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#mexico)** | **[Netherlands 🇳🇱](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#netherlands)** | **[New Zealand 🇳🇿](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#new-zealand)** | | **[Norway 🇳🇴](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#norway)** | **[Poland 🇵🇱](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#poland)** | **[Portugal 🇵🇹](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#portugal)** | **[Romania 🇷🇴](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#romania)** | | **[Slovakia🇸🇰](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#slovakia)** | **[Spain 🇪🇸](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#spain)** | **[Sweden 🇸🇪](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#sweden)** | **[Switzerland🇨🇭](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#switzerland)** | | **[United Kingdom 🇬🇧](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#united-kingdom)** | **[United States of America 🇺🇸](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/#united-states)** | | | ## Europe Austria ### Austria Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in Austria. Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=austria |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=AT - Generic banners |image=AT-Generic-banners.zip |downloadBehaviour=null |contentType=AT Generic banners |assetSize=2112742 }} {{Card |title=AT - Pay Now banners |image=ZnKXXZm069VX13s3_ATPayNowbanners.zip |downloadBehaviour=null |contentType=AT Pay Now banners |assetSize=467746 }} {{Card |title=AT - Pay Later banners |image=AT Pay Later banners.zip |downloadBehaviour=null |contentType=AT Pay Later banners |assetSize=461688 }} {{Card |title=AT - Pay in 3 banners |image=AT Pay in 3 banners.zip |downloadBehaviour=null |contentType=AT Pay in 3 banners |assetSize=962166 }} {{Card |title=AT - Brand kit (logo lock-ups) |image=AT Brand kit-logo-lock-ups.zip |downloadBehaviour=null |contentType=AT Brand kit (logo lock-ups) |assetSize=546762 }} {{Card |title=AT - Email templates |image=AT Email templates.zip |downloadBehaviour=null |contentType=AT Email templates |assetSize=143425 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](ZmbMKJm069VX1lpC_Screenshot2024-06-10at11.48.45.jpeg)image ![klarna docs image](Zl2asqWtHYXtUBF-Screenshot.jpeg)image #### Pre-approved messaging ##### Generic messaging \| Generisches Messaging | **English** | **German** | **Legal disclosures** | |----|----|----| | Shop smart. Pay securely with Klarna. | **Shoppe smart. Bezahle sicher mit Klarna.** | \- | | Pay flexibly and securely with Klarna | **Bezahle flexibel und sicher mit Klarna** | \- | | You decide how you want to pay. With Klarna. | **Entscheide selbst, wie du bezahlst. Mit Klarna.** | \- | | Choose Klarna at checkout. Pay securely with buyer protection\*.\*Exclusions apply. Learn more at [[https://www.klarna.com/at/kauferschutzrichtlinie/](https://www.klarna.com/at/kauferschutzrichtlinie/)](https://www.klarna.com/at/kauferschutzrichtlinie/). | *Please do not use this messaging if your brand is operating in the travel, event tickets or gift cards category.* **Wähle Klarna am Checkout. Bezahle sicher mit Käuferschutz.\* ** | \| \*Es gelten Ausnahmen. Erfahre mehr unter [[https://www.klarna.com/at/kauferschutzrichtlinie/](https://www.klarna.com/at/kauferschutzrichtlinie/)](https://www.klarna.com/at/kauferschutzrichtlinie/). | ##### Pay now messaging \| Sofort bezahlen | **English** | **German** | **Legal disclosures** | |----|----|----| | Pay fast and secure | **Bezahle schnell und sicher** | \- | | Pay now or flexibly. With Klarna. | **Bezahle sofort oder flexibel. Mit Klarna.** | \- | ##### Pay later in 30 days messaging \| In bis zu 30 Tagen bezahlen | English | German | Legal disclosures | |-------|------|-----------------| | Pay flexibly in up to 30 days | Bezahle flexibel in bis zu 30 Tagen | - | | Pay now or flexibly in up to 30 days | Bezahle sofort oder flexibel in bis zu 30 Tagen | - | | Try now. Get 30 days to pay. | * Erst anprobieren. In bis zu 30 Tagen bezahlen. (fashion only) * Erst testen. In bis zu 30 Tagen bezahlen. (other verticals) | - | ##### Pay in 3 smaller payments messaging \| 3 zinsfreie Teilzahlungen | **English** | **German** | **Legal disclosures** | |----|----|----| | Pay in 3 interest-free payments. With Klarna. | **Bezahle in 3 zinsfreien Teilzahlungen. Mit Klarna.** | \- | | Shop now. Pay in 3 interest-free payments with Klarna. | **Jetzt shoppen. In 3 zinsfreien Teilzahlungen mit Klarna bezahlen.** | \- | | Split your purchase into 3 interest-free payments with Klarna. | **Teile deinen Kauf in 3 zinsfreie Teilzahlungen auf. Mit Klarna.** | \- | Belgium ### Belgium Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in Belgium. Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=belgium_banners |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=BE (French) - Generic banners |image=BE-French-Genericbanners.zip |downloadBehaviour=null |contentType=BE (French) Generic banners |assetSize=865035 }} {{Card |title=BE (French) - Pay Later banners |image=BE-French-Pay Later banners.zip |downloadBehaviour=null |contentType=BE (French) Pay Later banners |assetSize=1408806 }} {{Card |title=BE (French) - Email templates |image=BE French-Email templates.zip |downloadBehaviour=null |contentType=BE (French) Email templates |assetSize=151936 }} {{Card |title=BE (Dutch) - Generic banners |image=BE-Dutch-Generic banners.zip |downloadBehaviour=null |contentType=BE (Dutch) Generic banners |assetSize=850462 }} {{Card |title=BE (Dutch) - Pay Later banners |image=BE-Dutch-Pay Later banners.zip |downloadBehaviour=null |contentType=BE (Dutch) Pay Later banners |assetSize=970019 }} {{Card |title=BE (Dutch)-Email templates |image=BE-Dutch-Email-templates.zip |downloadBehaviour=null |contentType=BE (Dutch) Email templates |assetSize=138563 }} {{Card |title=BE - Brand kit (logo lock-ups) |image=BE-Brand-kit-logo lock-ups.zip |downloadBehaviour=null |contentType=BE Brand kit (logo lock-ups) |assetSize=1074235 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](Zmq5cZm069VX1tPs_Screenshot2024-06-13at11.18.19.jpeg)image ![klarna docs image](Zmq6qZm069VX1tQh_Screenshot2024-06-13at11.23.34.jpeg)image #### Pre-approved messaging ###### Generic messaging | **English** | **Belgian French** | **Belgian Dutch** | |----|----|----| | Shop now, pay later with Klarna. | **Achetez maintenant, payez plus tard avec Klarna.** | **Shop nu, betaal later met Klarna.** | | Choose Klarna to pay later | **Choisissez Klarna pour payer plus tard** | **Kies Klarna om later te betalen** | | Pay smarter with Klarna | **Achetez malin avec Klarna** | **Betaal slimmer met Klarna** | | Pay flexibly with Klarna | **Achetez en toute flexibilité avec Klarna** | **Betaal flexibel met Klarna** | | Pay securely with Klarna | **Achetez en toute sécurité avec Klarna** | **Betaal veilig met Klarna** | | Get more time to pay with Klarna | **Plus de temps pour payer avec Klarna** | **Krijg meer tijd om te betalen met Klarna** | ##### Pay later in 30 days messaging | **English** | **Belgian French** | **Belgian Dutch** | |----|----|----| | Get 30 days to pay with Klarna | **30 jours pour payer avec Klarna** | **Betaal tot en met 30 dagen later met Klarna** | | Shop now. Pay in 30 days with Klarna. | **Achetez maintenant, payez dans 30 jours avec Klarna.** | **Shop nu. Betaal tot en met 30 dagen later met Klarna.** | | Get it. Try it. Buy it.  | **Repérez. Essayez. Payez.** | **Ontvang het. Probeer het. Koop het.** | Czech Republic ### Czech Republic Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in Czech Republic. Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=czech_republic |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=CZ Generic banners |image=CZ Generic banners.zip |downloadBehaviour=null |contentType=CZ Generic banners |assetSize=764079 }} {{Card |title=CZ Pay Now banners |image=CZ Pay Now banners.zip |downloadBehaviour=null |contentType=CZ Pay Now banners |assetSize=454501 }} {{Card |title=CZ Pay Later banners |image=CZ Pay Later banners.zip |downloadBehaviour=null |contentType=CZ Pay Later banners |assetSize=434275 }} {{Card |title=CZ Pay in 3 banners |image=CZ Pay in 3 banners.zip |downloadBehaviour=null |contentType=CZ Pay in 3 banners |assetSize=1004080 }} {{Card |title=CZ Brand kit (logo lock-ups) |image=CZ Brand kit logo lock-ups.zip |downloadBehaviour=null |contentType=CZ Brand kit (logo lock-ups) |assetSize=297442 }} {{Card |title=CZ Email templates |image=CZ Email templates.zip |downloadBehaviour=null |contentType=CZ Email templates |assetSize=297442 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](Znk2kpbWFbowey5r_Screenshot2024-06-24at11.00.12.jpeg)image ![klarna docs image](Znk2qJbWFbowey5v_Screenshot2024-06-24at11.03.29.jpeg)image #### Pre-approved messaging ##### Generic messaging | **English** | **Czech** | |------------------------------|----------------------------------| | You can pay here with Klarna | **Tady můžeš platit s Klarnou** | | Shop now, pay with Klarna. | **Nakup teď, zaplať s Klarnou.** | | Pay smarter with Klarna | **Zaplať chytřeji s Klarnou** | | Pay flexibly with Klarna | **Zaplať flexibilně s Klarnou** | | Pay securely with Klarna | **Zaplať bezpečně s Klarnou** | ##### Pay now messaging | **English** | **Czech** | |----|----| | Shop now and pay immediately | **Nakup teď a zaplať okamžitě** | | Pay now or flexibly. With Klarna. | **Zaplať teď nebo flexibilně. S Klarnou.** | ##### Pay later in 30 days messaging | **English** | **Czech** | |----|----| | Get 30 days to pay. | **Získej 30 dní na zaplacení.** | | Shop now. Pay in 30 days with Klarna. | **Zaplať teď. Zaplať za 30 dní s Klarnou.** | ##### Pay in 3 smaller payments messaging | **English** | **Czech** | |----|----| | Shop now, pay in 3 with Klarna. | **Nakup teď, zaplať ve 3 platbách s Klarnou.** | | Split your purchases into 3 interest-free payments | **Rozděl si svůj nákup na 3 bezúročné platby** | | Get more time to pay with Klarna | **Získej více času zaplatit s Klarnou** | Denmark ### Denmark Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in Denmark. Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=denmark |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=DK-Generic banners |image=DK-Generic banners.zip |downloadBehaviour=null |contentType=DK-Generic banners |assetSize=373742 }} {{Card |title=DK-Pay Now banners |image=DK-Pay Now banners.zip |downloadBehaviour=null |contentType=DK-Pay Now banners |assetSize=414958 }} {{Card |title=DK-Pay Later banners |image=DK Pay Later banners.zip |downloadBehaviour=null |contentType=DK Pay Later banners |assetSize=788377 }} {{Card |title=DK - Pay in 3 banners |image=DK Pay in 3 banners.zip |downloadBehaviour=null |contentType=DK Pay in 3 banners |assetSize=810577 }} {{Card |title=DK - Brand kit (logo lock-ups) |image=DK Brand kit-logo-lock-ups.zip |downloadBehaviour=null |contentType=DK Brand kit (logo lock-ups) |assetSize=249994 }} {{Card |title=DK - Email templates |image=DK Email templates.zip |downloadBehaviour=null |contentType=DK Email templates |assetSize=147043 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](ZmGn45m069VX1gwk_Screenshot2024-06-06at14.12.51.jpeg)image ![klarna docs image](ZmGoQpm069VX1gw1.jpeg)image #### Pre-approved messaging ##### Generic messaging | **English** | **Danish** | |------------------------------|-----------------------------------| | Klarna available at checkout | **Klarna tilgængelig ved kassen** | | Shop now. Pay with Klarna. | **Køb nu. Betal med Klarna.** | | Pay smarter with Klarna | **Betal smartere med Klarna** | ##### Pay now messaging | **English** | **Danish** | |-----------------------------------|----------------------------------------| | Shop now and pay immediately. | **Køb nu og betal med det samme.** | | Pay now or flexibly. With Klarna. | **Betal nu eller senere. Med Klarna.** | ##### Pay later in 30 days messaging | **English** | **Danish** | |----|----| | Get it. Try it. Buy it.  | **Få det. Prøv det. Køb det. ** | | Get 30 days to pay | **Betal om 30 dage. ** | | Shop now. Pay in 30 days with Klarna. | **Køb nu. Betal om 30 dage med Klarna. ** | ##### Pay in 3 smaller payments messaging | **English** | **Danish** | |----|----| | Shop now. Pay in 3 with Klarna. | **Køb nu. Betal i 3 dele med Klarna.** | | Split your purchases into 3 interest-free payments. | **Opdel dine køb i 3 rentefrie betalinger.** | | Get more time to pay with Klarna | **Få mere tid til at betale med Klarna** | | Shop now. Pay over time with Klarna. | **Køb nu. Betal senere med Klarna.** | Finland ### Finland Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in Finland. Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=finland |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=FI-Generic banners |image=FI-Generic banners.zip |downloadBehaviour=null |contentType=FI-Generic banners |assetSize=765800 }} {{Card |title=FI-Pay Now banners |image=FI-Pay Now banners.zip |downloadBehaviour=null |contentType=FI-Pay Now banners |assetSize=426985 }} {{Card |title=FI-Pay Later banners |image=FI Pay Later banners.zip |downloadBehaviour=null |contentType=FI Pay Later banners |assetSize=508393 }} {{Card |title=FI - Pay in 3 banners |image=FI Pay in 3 banners.zip |downloadBehaviour=null |contentType=FI Pay in 3 banners |assetSize=939504 }} {{Card |title=FI - Brand kit (logo lock-ups) |image=FI Brand kit-logo-lock-ups.zip |downloadBehaviour=null |contentType=FI Brand kit (logo lock-ups) |assetSize=121566 }} {{Card |title=FI - Email templates |image=FI Email templates.zip |downloadBehaviour=null |contentType=FI Email templates |assetSize=136029 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](Zmm2Fpm069VX1r3v_Screenshot2024-06-12at16.51.47.jpeg)image ![klarna docs image](Zmm19Zm069VX1r3p_Screenshot2024-06-12at16.51.16.jpeg)image #### Pre-approved messaging ##### Generic messaging | **English** | **Finnish** | |------------------------------|-----------------------------------| | Klarna available at checkout | **Klarna käytettävissä kassalla** | | Shop now. Pay with Klarna. | **Osta nyt. Maksa Klarnalla.** | | Pay securely with Klarna | **Maksa turvallisesti Klarnalla** | ##### Pay now messaging | **English** | **Finnish** | |----------------------------------|-----------------------------------------| | Shop now. Pay immediately. | **Osta nyt. Maksa heti.** | | Pay now or flexibly with Klarna. | **Maksa heti tai myöhemmin Klarnalla.** | ##### Pay later in 30 days messaging | **English** | **Finnish** | |----|----| | Get it. Try it. Buy it.  | **Tilaa. Kokeile. Osta.** | | Get 30 days to pay | **Saat 30 päivää maksuaikaa.** | | Shop now. Pay in 30 days with Klarna. | **Osta nyt. Maksa 30 päivän kuluessa Klarnalla.** | ##### Pay in 3 smaller payments messaging | **English** | **Finnish** | |----|----| | Shop now. Pay in 3 with Klarna. | **Osta nyt. Maksa 3 erässä Klarnalla.** | | Split your purchases into 3 interest-free payments. | **Pilko ostoksesi 3 kuluttomaan ja korottomaan maksuerään. ** | | Shop now. Pay over time with Klarna.  | **Osta nyt. Maksa ajan kanssa Klarnalla. ** | France ### France Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in France. Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=france |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=FR-Generic banners |image=FR-Generic banners.zip |downloadBehaviour=null |contentType=FR-Generic banners |assetSize=861755 }} {{Card |title=FR-Pay Later banners |image=FR Pay Later banners.zip |downloadBehaviour=null |contentType=FR Pay Later banners |assetSize=941549 }} {{Card |title=FR - Pay in 3 banners |image=FR Pay in 3 banners.zip |downloadBehaviour=null |contentType=FR Pay in 3 banners |assetSize=866791 }} {{Card |title=FR - Brand kit (logo lock-ups) |image=FR Brand kit-logo-lock-ups.zip |downloadBehaviour=null |contentType=FR Brand kit (logo lock-ups) |assetSize=416733 }} {{Card |title=FR - Email templates |image=FR Email templates.zip |downloadBehaviour=null |contentType=FR Email templates |assetSize=146759 }} {{Card |title=FR-Financing banners |image=FR-Financing banners.zip |downloadBehaviour=null |contentType=FR-Financing banners |assetSize=477653 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](Zw4--oF3NbkBXcUH_Screenshot2024-10-15at12.04.03.jpeg)image ![klarna docs image](ZmhhP5m069VX1pDp_Screenshot2024-06-11at16.36.45.jpeg)image #### Pre-approved messaging ##### Generic messaging — triggers disclosure for TV/OOH\* | **English** | **French** | |----|----| | Shop now. Pay later with Klarna. | **Achetez maintenant. Payez plus tard avec Klarna.** | | Choose Klarna to spread the cost | **Choisissez Klarna pour échelonner vos paiements** | | Pay smarter with Klarna | **Achetez malin avec Klarna** | | Pay flexibly with Klarna | **Achetez en toute flexibilité avec Klarna** | | Pay securely with Klarna | **Achetez en toute sécurité avec Klarna** | | Get more time to pay with Klarna | **Plus de temps pour payer avec Klarna** | ##### Pay in 3 smaller payments messaging — triggers disclosure for TV/OOH\* | **English** | **French** | |----|----| | Choose Klarna. Pay in 3 installments.  | **Choisissez Klarna. Payez en 3 fois.** | | Shop now. Pay in 3 interest-free installments with Klarna. | **Achetez maintenant. Payez en 3 fois sans frais avec Klarna.** | | Pay in 3 instalments. Interest-free. | **Payez en 3 fois. Sans frais.** | ##### Pay later in 30 days messaging — triggers disclosure for TV/OOH\* | **English** | **French** | |----|----| | Get 30 days to pay with Klarna. | **30 jours pour payer avec Klarna.** | | Get 30 days to pay | **Payez 30 jours après.** | | Shop now. Pay in 30 days with Klarna. | **Achetez maintenant. Payez dans 30 jours avec Klarna.** | | Get it. Try it. Buy it.  | **Repérez. Essayez. Payez.** | ##### Financing banners | **English** | **French** | |----|----| | Pay in 6 or 12 monthly instalments with Klarna | **Payez en 6 ou 12 mensualités avec Klarna** | **\*Disclosure for TV/OOH only: *** * - **Pay in 3 mention:**Payez en 3 fois sous 60 jours max sans frais si échéances réglées à temps. Réservé aux personnes majeures résidant en France avec carte de débit/crédit pour des achats de 35€ à 1500€. Conditions d’éligibilité et frais de retard : klarna.com/fr/legal  Klarna Bank AB, 33 rue la Fayette, 75009, Paris, France. - **Pay in 30 mention:**Payez dans 30 jours max sans frais si échéances réglées à temps. Réservé aux personnes majeures résidant en France avec carte de débit/crédit pour des achats de 35€ à 1500€. Conditions d’éligibilité et frais de retard : klarna.com/fr/legal  Klarna Bank AB, 33 rue la Fayette, 75009, Paris, France. Germany ### Germany Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in Germany. Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=germany |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=DE-Generic banners |image=DE-Generic banners.zip |downloadBehaviour=null |contentType=DE-Generic banners |assetSize=373742 }} {{Card |title=DE-Pay Now banners |image=DE-Pay Now banners.zip |downloadBehaviour=null |contentType=DE-Pay Now banners |assetSize=414958 }} {{Card |title=DE-Pay Later banners |image=DE Pay Later banners.zip |downloadBehaviour=null |contentType=DE Pay Later banners |assetSize=788377 }} {{Card |title=DE - Pay in 3 banners |image=DE Pay in 3 banners.zip |downloadBehaviour=null |contentType=DE Pay in 3 banners |assetSize=810577 }} {{Card |title=DE - Brand kit (logo lock-ups) |image=DE Brand kit-logo-lock-ups.zip |downloadBehaviour=null |contentType=DE Brand kit (logo lock-ups) |assetSize=249994 }} {{Card |title=DE - Email templates |image=DE Email templates.zip |downloadBehaviour=null |contentType=DE Email templates |assetSize=147043 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](ZmbMFJm069VX1lo.jpeg)image ![klarna docs image](Zl2asqWtHYXtUBF-Screenshot.jpeg)image #### Pre-approved messaging ##### Generic messaging \| Generisches Messaging | English | German | Legal disclosures | |-------|------|-----------------| | Shop now. Pay securely with Klarna. | Shoppe jetzt. Bezahle sicher mit Klarna. | - | | Pay flexibly and securely with Klarna | Bezahle flexibel und sicher mit Klarna | - | | You decide how you want to pay. With Klarna. | Entscheide selbst, wie du bezahlst. Mit Klarna. | - | | Choose Klarna at checkout. Pay securely with buyer protection.* `*Exclusions apply. Learn more at` [https://www.klarna.com/de/kauferschutzrichtlinie/](https://www.klarna.com/de/kauferschutzrichtlinie/) `.` | | Please do not use this messaging if your brand is operating in the travel, event tickets or gift cards category. Wähle Klarna am Checkout. Bezahle sicher mit Käuferschutz.* | | *Es gelten Ausnahmen. Erfahre mehr unter [https://www.klarna.com/de/kauferschutzrichtlinie/](https://www.klarna.com/de/kauferschutzrichtlinie/) . | ##### Pay now messaging \| Sofort bezahlen | **English** | **German** | **Legal disclosures** | |----|----|----| | Shop now and pay immediately | **Jetzt shoppen und sofort bezahlen** | \- | | Pay now or flexibly. With Klarna. | **Bezahle sofort oder flexibel. Mit Klarna.** | \- | ##### Pay later in 30 days messaging \| In bis zu 30 Tagen bezahlen | English | German | Legal disclosures | |-------|------|-----------------| | Shop now and pay in up to 30 days | Jetzt shoppen und in bis zu 30 Tagen bezahlen | - | | Pay now or flexibly in up to 30 days | Bezahle sofort oder flexibel in bis zu 30 Tagen | - | | Try now. Get 30 days to pay. | * Erst anprobieren. In bis zu 30 Tagen bezahlen. (fashion only) * Erst testen. In bis zu 30 Tagen bezahlen. (other verticals) | - | ##### Pay in 3 smaller payments messaging \| 3 zinsfreie Teilzahlungen | **English** | **German** | **Legal disclosures** | |----|----|----| | Pay in 3 interest-free payments. With Klarna. | **Bezahle in 3 zinsfreien Teilzahlungen. Mit Klarna.** | \- | | Shop now. Pay in 3 interest-free payments with Klarna. | **Jetzt shoppen. In 3 zinsfreien Teilzahlungen mit Klarna bezahlen.** | \- | | Split your purchase into 3 interest-free payments. With Klarna. | **Teile deinen Kauf in 3 zinsfreie Teilzahlungen auf. Mit Klarna.** | \- | Greece ### Greece Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in Greece. Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=greece |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=GR-Generic banners |image=GR-Generic banners.zip |downloadBehaviour=null |contentType=GR-Generic banners |assetSize=942502 }} {{Card |title=GR-Pay Now banners |image=GR-Pay Now banners.zip |downloadBehaviour=null |contentType=GR-Pay Now banners |assetSize=458884 }} {{Card |title=GR-Pay Later banners |image=GR Pay Later banners.zip |downloadBehaviour=null |contentType=GR Pay Later banners |assetSize=1009003 }} {{Card |title=GR - Pay in 3 banners |image=GR Pay in 3 banners.zip |downloadBehaviour=null |contentType=GR Pay in 3 banners |assetSize=1637262 }} {{Card |title=GR - Brand kit (logo lock-ups) |image=GR Brand kit-logo-lock-ups.zip |downloadBehaviour=null |contentType=GR Brand kit (logo lock-ups) |assetSize=677360 }} {{Card |title=GR - Email templates |image=GR Email templates.zip |downloadBehaviour=null |contentType=GR Email templates |assetSize=217124 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](ZmBvWZm069VX1e1T_Screenshot2024-06-05at15.56.40.jpeg)image ![klarna docs image](ZmBvZpm069VX1e1W_Screenshot2024-06-05at15.59.28.jpeg)image #### Pre-approved messaging ##### Generic messaging | **English** | **Greek** | |----|----| | Klarna available at checkout | **Klarna διαθέσιμη στο ταμείο** | | Shop now. Pay with Klarna. | **Αγοράστε τώρα. Πληρώστε με Klarna.** | | Pay smarter with Klarna | **Πληρώστε έξυπνα με Klarna** | | Shop now. Pay over time with Klarna. | **Αγοράστε τώρα. Πληρώστε αργότερα με Klarna.** | | Get it now. Pay it later. | **Αγοράστε τώρα. Πληρώστε αργότερα.** | ##### Pay now messaging | **English** | **Greek** | |----|----| | Shop now and pay immediately | **Αγοράστε τώρα και πληρώστε αμέσως** | | Pay now or flexibly. With Klarna. | **Πληρώστε τώρα ή ευέλικτα. Με Klarna.** | ##### Pay later in 30 days messaging | **English** | **Greek** | |----|----| | Receive it before you buy. Get 30 days to pay. | **Παραλάβετε πριν αγοράσετε. Πληρώστε σε 30 ημέρες.** | | Shop now. Pay in 30 days with Klarna. | **Αγοράστε τώρα. Πληρώστε σε 30 ημέρες με Klarna.** | | Get 30 days to pay with Klarna | **Πληρώστε σε 30 ημέρες με Klarna** | | Pay in 30 days. Try the new payment method by Klarna with no interest or fees.  | **Πληρώστε σε 30 ημέρες. Δοκιμάστε το νέο τρόπο πληρωμής από Klarna χωρίς έξοδα ή τόκους.** | ##### Pay in 3 smaller payments messaging | **English** | **Greek** | |----|----| | Shop now. Pay in 3 with Klarna. | **Αγοράστε τώρα. Πληρώστε σε 3 δόσεις με Klarna.** | | Split your purchases into 3 interest-free payments. | **Μοιράστε τις πληρωμές σας σε 3 άτοκες δόσεις.** | | Get more time to pay with Klarna | **Κερδίστε περισσότερο χρόνο να πληρώσετε με Klarna** | | 3 interest-free installments, without credit card. | **3 άτοκες δόσεις, χωρίς πιστωτική κάρτα.** | | Pay in 3 interest-free installments, even with your debit card. | **3 άτοκες δόσεις. Ακόμη και με τη χρεωστική σας κάρτα.** | Hungary ### Hungary Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in Hungary. Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=hungary |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=HU-Generic banners |image=HU-Generic banners.zip |downloadBehaviour=null |contentType=HU-Generic banners |assetSize=847193 }} {{Card |title=HU-Pay Now banners |image=HU-Pay Now banners.zip |downloadBehaviour=null |contentType=HU-Pay Now banners |assetSize=524424 }} {{Card |title=HU-Pay Later banners |image=HU Pay Later banners.zip |downloadBehaviour=null |contentType=HU Pay Later banners |assetSize=516376 }} {{Card |title=HU - Pay in 3 banners |image=HU Pay in 3 banners.zip |downloadBehaviour=null |contentType=HU Pay in 3 banners |assetSize=1005677 }} {{Card |title=HU - Brand kit (logo lock-ups) |image=HU Brand kit-logo-lock-ups.zip |downloadBehaviour=null |contentType=HU Brand kit (logo lock-ups) |assetSize=588267 }} {{Card |title=HU - Email templates |image=HU Email templates.zip |downloadBehaviour=null |contentType=HU Email templates |assetSize=137355 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](ZmrDN5m069VX1tWH_Screenshot2024-06-13at11.57.42.jpeg)image ![klarna docs image](ZmrDQ5m069VX1tWK_Screenshot2024-06-13at11.59.53.jpeg)image #### Pre-approved messaging #### Generic messaging | **English** | **Hungarian** | |-----------------------------|--------------------------------------| | Klarna is available | **A Klarna elérhető** | | Klarna payment is available | **A Klarnás fizetés elérhető** | | Shop now. Pay with Klarna. | **Vásárolj most. Fizess Klarnával.** | | Pay smarter with Klarna | **Fizess okosan a Klarnával** | | Pay flexibly with Klarna | **Fizess rugalmasan a Klarnával** | | Pay securely with Klarna | **Fizess biztonságosan a Klarnával** | ##### Pay now messaging | **English** | **Hungarian** | |----|----| | Shop now, pay immediately. | **Vásárolj most, fizess azonnal.** | | Pay now or flexibly later. With Klarna. | **Fizess most vagy rugalmasan később. A Klarnával. ** | ##### Pay later in 30 days messaging | **English** | **Hungarian** | |----|----| | Get it. Try it. Pay it.  | **Vedd át. Próbáld ki. Fizesd ki.** | | Shop now. Pay in 30 days with Klarna. | **Vásárolj most. Fizess 30 napon belül a Klarnával.** | ##### Pay in 3 smaller payments messaging | **English** | **Hungarian** | |----|----| | Shop now, pay in 3 with Klarna. | **Vásárolj most, fizess 3 részletben a Klarnával.** | | Split your purchases into 3 interest-free installments | **Oszd fel a vásárlásod 3 kamatmentes részletre** | | Shop now. Pay in installments with Klarna. | **Vásárolj most. Fizess részletekben a Klarnával.** | Italy ### Italy Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in Italy. Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=italy |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=IT-Generic banners |image=IT-Generic banners.zip |downloadBehaviour=null |contentType=IT-Generic banners |assetSize=966456 }} {{Card |title=IT-Pay Now banners |image=IT-Pay Now banners.zip |downloadBehaviour=null |contentType=IT-Pay Now banners |assetSize=422665 }} {{Card |title=IT-Pay Later banners |image=IT Pay Later banners.zip |downloadBehaviour=null |contentType=IT Pay Later banners |assetSize=497642 }} {{Card |title=IT - Pay in 3 banners |image=IT Pay in 3 banners.zip |downloadBehaviour=null |contentType=IT Pay in 3 banners |assetSize=524582 }} {{Card |title=IT - Financing banners |image=IT Financing banners.zip |downloadBehaviour=null |contentType=IT Financing banners |assetSize=874400 }} {{Card |title=IT - Brand kit (logo lock-ups) |image=IT Brand kit-logo-lock-ups.zip |downloadBehaviour=null |contentType=IT Brand kit (logo lock-ups) |assetSize=615478 }} {{Card |title=IT - Email templates |image=IT Email templates.zip |downloadBehaviour=null |contentType=IT Email templates |assetSize=143763 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](Zw4hh4F3NbkBXbeW_Screenshot2024-10-15at09.56.38.jpeg)image ![klarna docs image](ZmBqZZm069VX1ew0_Screenshot2024-06-05at15.38.18.jpeg)image #### Pre-approved messaging ##### Generic messaging ― triggers disclosure for TV/OOH\* | **English** | **Italian** | |----|----| | Spread the cost of your purchases with Klarna | **Dividi il costo dei tuoi acquisti con Klarna** | | Get more time to pay with Klarna | **Ottieni più tempo per pagare con Klarna** | | Choose Klarna to spread the cost | **Scegli Klarna per dividere il costo** | | Pay your way with Klarna | **Paga a modo tuo con Klarna** | ##### Pay in 3 messaging ― triggers disclosure for TV/OOH\* | **English** | **Italian** | |----|----| | Choose Klarna and pay in 3 installments with no interest | **Scegli Klarna e paga in 3 rate, senza interessi** | | Split your purchase into 3 payments with no interest | **Dividi il tuo acquisto in 3 rate, senza interessi** | ##### Pay later in 30 days messaging ― triggers disclosure for TV/OOH\* | **English** | **Italian** | |----|----| | Choose Klarna and pay in 30 days  | **Scegli Klarna e paga dopo 30 giorni** | | Get 30 days to pay with Klarna | **Con Klarna, hai 30 giorni per pagare** | | Pay after delivery | **Paga dopo la consegna** | ##### Pay now messaging | **English** | **Italian** | |------------------------------|---------------------------------------------| | Pay now with Klarna | **Paga ora con Klarna** | | Choose Klarna to pay now | **Scegli Klarna per pagare ora** | | Pay securely, choose Klarna. | **Paga in tutta sicurezza, scegli Klarna.** | ##### Financing messaging | **English** | **Italian** | |----|----| | Pay over time with monthly financing | **Dividi il costo in più rate mensili** | | You can now pay in 6 or 12 installments with Klarna | Ora puoi pagare in 6 o 12 rate con Klarna | **\*Disclosure for TV only:** Messaggio pubblicitario con finalità promozionale. “Paga in 3 rate senza interessi” e "Paga dopo 30 giorni senza interessi" con Klarna sono disponibili solo per i residenti in Italia. Età minima 18 anni. La concessione della dilazione di pagamento è subordinata alla sussistenza dei necessari requisiti di idoneità. Per le condizioni relative ai prodotti pubblicizzati e per quanto non espressamente indicato si rinvia ai termini dei servizi di Klarna disponibili su [www.klarna.com/it](http://www.klarna.com/it) Ireland ### Ireland Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in Ireland. Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=ireland |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=IE-Generic banners |image=IE-Generic banners.zip |downloadBehaviour=null |contentType=IE-Generic banners |assetSize=1171812 }} {{Card |title=IE-Pay Now banners |image=IE-Pay Now banners.zip |downloadBehaviour=null |contentType=IE-Pay Now banners |assetSize=691667 }} {{Card |title=IE - Pay in 3 banners |image=IE Pay in 3 banners.zip |downloadBehaviour=null |contentType=IE Pay in 3 banners |assetSize=1410334 }} {{Card |title=IE - Brand kit (logo lock-ups) |image=IE Brand kit-logo-lock-ups.zip |downloadBehaviour=null |contentType=IE Brand kit (logo lock-ups) |assetSize=123294 }} {{Card |title=IE - Email templates |image=IE Email templates.zip |downloadBehaviour=null |contentType=IE Email templates |assetSize=102419 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](ZmGJm5m069VX1ggP_Screenshot2024-06-06at12.03.18.jpeg)image ![klarna docs image](ZmBrRpm069VX1exe_Screenshot2024-06-05at15.39.27.jpeg)image #### Pre-approved messaging ##### Generic messaging | **English** | **Legal disclosures** | |----|----| | **Klarna available** | \- | | **Klarna available at checkout** | \- | | **Pay smarter with Klarna.** | \- | | **Shop now. Pay with Klarna.\*** | \*Please shop responsibly. You must be 18+ to use this credit offer (0% APR). Missed payments may affect your ability to use Klarna in the future. ROI residents only. Subject to status. | | **Choose how to pay with Klarna** | \- | ##### Pay now messaging | **English** | **Legal disclosures** | |----|----| | **Shop now and pay immediately.\*** | \*Please shop responsibly. You must be 18+ to use this credit offer (0% APR). Missed payments may affect your ability to use Klarna in the future. ROI residents only. Subject to status. T&Cs apply [www.klarna.com/ie/terms-and-conditions](https://www.klarna.com/ie/terms-and-conditions/) | | **Pay now or flexibly with Klarna.\*** | \*Please shop responsibly. You must be 18+ to use this credit offer (0% APR). Missed payments may affect your ability to use Klarna in the future. ROI residents only. Subject to status. T&Cs apply [www.klarna.com/ie/terms-and-conditions](https://www.klarna.com/ie/terms-and-conditions/) | ##### Pay in 3 smaller payments messaging | **English** | **Legal disclosures** | |----|----| | **Shop now. Pay in 3 with Klarna.\*** | \*Please shop responsibly. You must be 18+ to use this credit offer (0% APR). Missed payments may affect your ability to use Klarna in the future. ROI residents only. Subject to status. T&Cs apply [www.klarna.com/ie/terms-and-conditions](https://www.klarna.com/ie/terms-and-conditions/) | | **Split your purchases into 3 interest-free payments.\*** | \*Please shop responsibly. You must be 18+ to use this credit offer (0% APR). Missed payments may affect your ability to use Klarna in the future. ROI residents only. Subject to status. T&Cs apply [www.klarna.com/ie/terms-and-conditions](https://www.klarna.com/ie/terms-and-conditions/) | | **Get more time to pay with Klarna\*** | \*Please shop responsibly. You must be 18+ to use this credit offer (0% APR). Missed payments may affect your ability to use Klarna in the future. ROI residents only. Subject to status. T&Cs apply [www.klarna.com/ie/terms-and-conditions](https://www.klarna.com/ie/terms-and-conditions/) | | **Shop now. Pay over time with Klarna\*** | \*Please shop responsibly. You must be 18+ to use this credit offer (0% APR). Missed payments may affect your ability to use Klarna in the future. ROI residents only. Subject to status. T&Cs apply [www.klarna.com/ie/terms-and-conditions](https://www.klarna.com/ie/terms-and-conditions/) | Netherlands ### Netherlands Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in the Netherlands. Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=netherlands |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=NL-Generic banners |image=NL-Generic banners.zip |downloadBehaviour=null |contentType=NL-Generic banners |assetSize=875824 }} {{Card |title=NL-Pay Now banners |image=NL-Pay Now banners.zip |downloadBehaviour=null |contentType=NL-Pay Now banners |assetSize=405686 }} {{Card |title=NL-Pay Later banners |image=NL Pay Later banners.zip |downloadBehaviour=null |contentType=NL Pay Later banners |assetSize=989078 }} {{Card |title=NL - Pay in 3 banners |image=NL Pay in 3 banners.zip |downloadBehaviour=null |contentType=NL Pay in 3 banners |assetSize=945990 }} {{Card |title=NL - Brand kit (logo lock-ups) |image=NL Brand kit-logo-lock-ups.zip |downloadBehaviour=null |contentType=NL Brand kit (logo lock-ups) |assetSize=502170 }} {{Card |title=NL - Email templates |image=NL Email templates.zip |downloadBehaviour=null |contentType=NL Email templates |assetSize=144501 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](ZmhlI5m069VX1pGW_Screenshot2024-06-11at16.51.04.jpeg)image ![klarna docs image](ZmhlMpm069VX1pGa_Screenshot2024-06-11at16.54.05.jpeg)image #### Pre-approved messaging ##### Generic messaging | **English** | **Dutch** | |----|----| | Klarna available at checkout | **Klarna beschikbaar bij het afrekenen** | | Shop now. Pay with Klarna. | **Shop nu. Betaal met Klarna.** | | Pay flexibly with Klarna | **Flexibel betalen met Klarna** | | Shop now. Pay securely with Klarna. | **Shop nu. Betaal veilig met Klarna.** | | You decide how you want to pay. With Klarna. | **Bepaal zelf hoe je wil betalen. Met Klarna. ** | ##### Pay now messaging | **English** | **Dutch** | |-----------------------------------|----------------------------------------| | Shop now and pay immediately | **Shop nu en betaal direct** | | Pay now or flexibly. With Klarna. | **Betaal nu of flexibel. Met Klarna.** | ##### Pay later in 30 days messaging | **English** | **Dutch** | |----|----| | Try now. Get 30 days to pay. | **Probeer nu. Betaal tot en met 30 dagen later.** | | Shop now and pay in up to 30 days | **Shop nu. Betaal tot en met 30 dagen later** | | Pay now or flexibly in up to 30 days | **Betaal nu of flexibel tot en met 30 dagen later** | ##### Pay in 3 smaller payments messaging | **English** | **Dutch** | |----|----| | Shop now. Pay in 3 with Klarna. | **Shop nu, betaal in 3 delen met Klarna.** | | Split your purchases into 3 interest-free payments | **Splits je aankoop in 3 rentevrije betalingen.** | | Shop now. Pay in 3 interest-free payments with Klarna. | **Shop nu. Betaal in 3 rentevrije betalingen met Klarna.** | Norway ### Norway Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in Norway. Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=norway_banners |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=NO - Generic banners |image=NO-Genericbanners.zip |downloadBehaviour=null |contentType=NO Generic banners |assetSize=865035 }} {{Card |title=NO - Generic Pay Later banners |image=NO-Genericpaylater.zip |downloadBehaviour=null |contentType=NO Generic Pay Later banners |assetSize=1408806 }} {{Card |title=NO - Pay in X |image=NO-payinx.zip |downloadBehaviour=null |contentType=NO Pay in X |assetSize=151936 }} {{Card |title=NO - Pay Later in 30 |image=NO-payin30.zip |downloadBehaviour=null |contentType=NO Pay Later in 30 |assetSize=850462 }} }} Poland ### Poland Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in Poland. Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=poland |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=PL-Generic banners |image=PL-Generic banners.zip |downloadBehaviour=null |contentType=PL-Generic banners |assetSize=498513 }} {{Card |title=PL-Pay Later banners |image=PL Pay Later banners.zip |downloadBehaviour=null |contentType=PL Pay Later banners |assetSize=843968 }} {{Card |title=PL - Pay in 3 banners |image=PL Pay in 3 banners.zip |downloadBehaviour=null |contentType=PL Pay in 3 banners |assetSize=898385 }} {{Card |title=PL - Brand kit (logo lock-ups) |image=PL Brand kit-logo-lock-ups.zip |downloadBehaviour=null |contentType=PL Brand kit (logo lock-ups) |assetSize=634351 }} {{Card |title=PL - Email templates |image=PL Email templates.zip |downloadBehaviour=null |contentType=PL Email templates |assetSize=143538 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](ZmBrfJm069VX1exm_Screenshot2024-06-05at15.43.08.jpeg)image ![klarna docs image](ZmBrTJm069VX1exg_Screenshot2024-06-05at15.41.59.jpeg)image #### Pre-approved messaging ##### Generic messaging | **English** | **Polish** | **Legal disclosures** | |----|----|----| | Klarna available | **Tu zapłacisz z Klarną** | \- | | Klarna available at checkout | **Wybierz Klarnę wśród metod płatności** | \- | | Get more time to pay with Klarna | **Zyskaj więcej czasu na zapłatę z Klarną** | \- | ##### Pay later in 30 days messaging | **English** | **Polish** | **Legal disclosures** | |----|----|----| | Pay in 30 days with Klarna | **Zapłać za 30 dni z Klarną** | \- | | Get it. Try it. Buy it.  | **Kup. Wypróbuj. Zapłać.** | \- | | Get 30 days to pay | **Zyskaj 30 dni na zapłatę** | \- | | Shop now, pay in 30 days with Klarna. | **Kup teraz, zapłać za 30 dni z Klarną.** | \- | ##### Pay in 3 smaller payments messaging | English | Polish | Legal disclosures | |-------|------|-----------------| | Pay in 3 with Klarna | Zapłać w 3 ratach z Klarną | - | | Shop now. Pay in 3 with Klarna. | Kup teraz. Zapłać w 3 ratach z Klarną. | - | | Shop now. Pay over time with Klarna | Kup teraz. Zapłać później z Klarną. | - | | Split your purchases into 3 interest-free payments.* *Delay interest will be applied in case you miss the deadline of payment | Zapłać w 3 miesięcznych ratach. Bez odsetek.* | *W przypadku opóźnień w płatności zostaną naliczone ustawowe odsetki za opóźnienie. | Portugal ### Portugal Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in Portugal. Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=portugal |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=PT-Generic banners |image=PT-Generic banners.zip |downloadBehaviour=null |contentType=PT-Generic banners |assetSize=1237917 }} {{Card |title=PT-Pay Later banners |image=PT Pay Later banners.zip |downloadBehaviour=null |contentType=PT Pay Later banners |assetSize=520581 }} {{Card |title=PT - Pay in 3 banners |image=PT Pay in 3 banners.zip |downloadBehaviour=null |contentType=PT Pay in 3 banners |assetSize=506540 }} {{Card |title=PT - Brand kit (logo lock-ups) |image=PT Brand kit-logo-lock-ups.zip |downloadBehaviour=null |contentType=PT Brand kit (logo lock-ups) |assetSize=397995 }} {{Card |title=PT - Email templates |image=PT Email templates.zip |downloadBehaviour=null |contentType=PT Email templates |assetSize=145077 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](ZnlxEpbWFbowezfw_Screenshot2024-06-24at15.12.14.jpeg)image ![klarna docs image](ZnlxIJbWFbowezf1_Screenshot2024-06-24at15.13.32.jpeg)image #### Pre-approved messaging ##### Generic messaging | **English** | **Portuguese** | |----|----| | Spread the cost of your purchases with Klarna | **Divide o valor da tua compra com Klarna** | | Get more time to pay with Klarna | **Tem mais tempo para pagar com Klarna** | | Choose Klarna to spread the cost | **Escolhe Klarna para dividir o custo** | | Pay your way with Klarna  | **Paga à tua maneira com Klarna** | ##### Pay in 3 smaller payments messaging | **English** | **Portuguese** | |----|----| | Choose Klarna and pay in 3 installments | **Escolhe Klarna e paga em 3 vezes sem juros.** | | Split your purchase in 3 payments, interest-free. | **Divide a tua compra em 3 vezes sem juros** | ##### Pay later in 30 days messaging | **English** | **Portuguese** | |----|----| | Choose Klarna and pay in 30 days, interest-free. | **Escolhe Klarna e paga a 30 dias, sem juros.** | | Get 30 days to pay with Klarna | **Tens 30 dias para pagar com Klarna** | | Pay after delivery | **Paga após a entrega** | Romania ### Romania Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in Romania Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=romania |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=RO-Generic banners |image=RO-Generic banners.zip |downloadBehaviour=null |contentType=RO-Generic banners |assetSize=1303128 }} {{Card |title=RO-Pay Later banners |image=RO Pay Later banners.zip |downloadBehaviour=null |contentType=RO Pay Later banners |assetSize=1042439 }} {{Card |title=RO - Pay in 3 banners |image=RO Pay in 3 banners.zip |downloadBehaviour=null |contentType=RO Pay in 3 banners |assetSize=940434 }} {{Card |title=RO - Brand kit (logo lock-ups) |image=RO Brand kit-logo-lock-ups.zip |downloadBehaviour=null |contentType=RO Brand kit (logo lock-ups) |assetSize=588550 }} {{Card |title=RO - Email templates |image=RO Email templates.zip |downloadBehaviour=null |contentType=RO Email templates |assetSize=151481 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](Znlnw5bWFbowezY2_Screenshot2024-06-24at14.34.01.jpeg)image ![klarna docs image](ZnlnnJbWFbowezYx_Screenshot2024-06-24at14.33.07.jpeg)image #### Pre-approved messaging ##### Generic messaging | **English** | **Romanian** | |----|----| | Klarna available at checkout | **Klarna este disponibilă la checkout** | | Shop now, pay with Klarna. | **Klarna este disponibilă la checkout** | | Shop now, pay with Klarna. | **Cumpără acum, plătește cu Klarna.** | | Pay smarter with Klarna | **Plătește mai inteligent cu Klarna** | | Pay flexibly with Klarna | **Plătește flexibil cu Klarna** | | Pay securely with Klarna | **Plătește siguranță cu Klarna** | | Shop now. Pay later with Klarna. | **Cumpără acum. Plătește mai târziu cu Klarna.** | ##### Pay later in 30 days messaging | **English** | **Romanian** | |----|----| | Order. Try. Pay. | **Comanzi. Încerci. Plătești.** | | Try before you pay. Pay in 30 days. | **Încearcă înainte să plătești. Plătește în 30 de zile. ** | | Shop now. Pay in 30 days with Klarna. | **Cumpără acum. Plătește în 30 de zile.** | ###### Pay in 3 smaller payments messaging | **English** | **Romanian** | |----|----| | Shop now. Pay in 3 installments with Klarna. | **Cumpără acum. Plătește în 3 rate cu Klarna.** | | Split your purchases into 3 interest-free payments | **Împarte plata în 3 rate fără dobânda** | | Get more time to pay with Klarna | **Obține mai mult timp pentru plată cu Klarna** | Slovakia ### Slovakia Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in Slovakia. Download the ready-made asset packs provided below.
SK_Advertising_banners.zip
#### Downloadable ready-made assets {{CardList |id=slovakia |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=SK-Generic banners |image=SK-Generic banners.zip |downloadBehaviour=null |contentType=SK-Generic banners |assetSize=1600 }} {{Card |title=SK - Pay in 3 banners |image=SK Pay in 3 banners.zip |downloadBehaviour=null |contentType=SK Pay in 3 banners |assetSize=1600 }} {{Card |title=SK-Pay in full banners |image=SK Pay in full banners.zip |downloadBehaviour=null |contentType=SK Pay in full banners |assetSize=902 }} {{Card |title=SK-Pay Later banners |image=SK Pay Later banners.zip |downloadBehaviour=null |contentType=SK Pay Later banners |assetSize=975 }} }} #### Overview of the banners available to download ![Overview_SK_partner_marketing_banners.png](Overview_SK_partner_marketing_banners.png) *Overview_SK_partner_marketing_banners.png* #### Pre-approved messaging ##### Generic messaging | **English** | **Slovak** | **Legal disclosures** | |----|----|----| | Shop now, pay with Klarna. | **Nakúp teraz, zaplať s Klarnou.** | \- | | Pay smarter with Klarna | **Plať rozumne s Klarnou.** | \- | | Pay flexibly with Klarna | **Plať flexibilne s Klarnou.** | \- | | Pay securely with Klarna | **Plať bezpečne s Klarnou.** | \- | ##### Pay now messaging | **English** | **Slovak** | **Legal disclosures** | |----|----|----| | Shop now and pay immediately | **Nakúp teraz a zaplať ihneď.** | \- | | Pay now or flexibly. With Klarna. | **Zaplať teraz alebo flexibilne. S Klarnou.** | \- | ##### Pay later in 30 days messaging | **English** | **Slovak** | **Legal disclosures** | |----|----|----| | Get 30 days to pay. | **Získaj 30 dní na zaplatenie.** | \- | | Shop now. Pay in 30 days with Klarna. | **Nakúp teraz. Zaplať o 30 dní s Klarnou.** | \- | ##### Pay in 3 smaller payments messaging | **English** | **Slovak** | **Legal disclosures** | |----|----|----| | Shop now, pay in 3 with Klarna. | **Nakúp teraz, zaplať v 3 platbách s Klarnou.** | \- | | Split your purchases into 3 interest-free payments | **Rozdeľ si nákup na 3 bezúročné platby.** | \- | | Get more time to pay with Klarna | **Získaj viac času na zaplatenie s Klarnou.** | \- | Spain ### Spain Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in Spain. Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=spain |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=ES-Generic banners |image=ES-Generic banners.zip |downloadBehaviour=null |contentType=ES-Generic banners |assetSize=1274867 }} {{Card |title=ES-Pay Later banners |image=ES Pay Later banners.zip |downloadBehaviour=null |contentType=ES Pay Later banners |assetSize=441898 }} {{Card |title=ES - Pay in 3 banners |image=ES Pay in 3 banners.zip |downloadBehaviour=null |contentType=ES Pay in 3 banners |assetSize=541662 }} {{Card |title=ES - Brand kit (logo lock-ups) |image=ES Brand kit-logo-lock-ups.zip |downloadBehaviour=null |contentType=ES Brand kit (logo lock-ups) |assetSize=699135 }} {{Card |title=ES - Email templates |image=ES Email templates.zip |downloadBehaviour=null |contentType=ES Email templates |assetSize=159654 }} {{Card |title=ES - Financing banners |image=ES Financing banners.zip |downloadBehaviour=null |contentType=ES Financing banners |assetSize=517131 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](Zw5AUoF3NbkBXcZ-_Screenshot2024-10-15at12.13.13.jpeg)image ![klarna docs image](Zmhd5pm069VX1pBN_Screenshot2024-06-11at16.22.37.jpeg)image #### Pre-approved messaging ##### Generic messaging | **English** | **Spanish** | **Legal disclosures** | |----|----|----| | Spread the cost of your purchases with Klarna | **Divide el coste de tu compra con Klarna** | \- | | Get more time to pay with Klarna | **Disfruta de más tiempo para pagar con Klarna** | \- | | Choose Klarna to spread the cost | **Elige Klarna para dividir el coste** | \- | | Pay your way with Klarna  | **Paga a tu manera con Klarna** | \- | ##### Pay in 3 smaller payments messaging | **English** | **Spanish** | **Legal disclosures** | |----|----|----| | Choose Klarna and pay in 3 installments | **Elige Klarna y paga en 3 plazos** | \- | | Split your purchase in 3 payments, APR 0%. | **Divide tu compra en 3 pagos sin intereses, TAE 0%.** | *Included in the approved message - for more information, visit this page.*[page](https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/united-states/bnpl-promotion-rules-101/). | ##### Pay later in 30 days messaging | **English** | **Spanish** | **Legal disclosures** | |----|----|----| | Get 30 days to pay with Klarna | **Tienes 30 días para pagar con Klarna** | \- | | Pay after delivery | **Paga después de la entrega** | \- | | Choose Klarna and pay in 30 days | **Elige Klarna y paga en 30 días** | \- | ##### Financing messaging | **English** | **Spanish** | |----|----| | You can now pay in 6 or 12 instalments with Klarna | **Ahora puedes pagar en 6 o 12 plazos con Klarna** | Sweden ### Sweden Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in Sweden. Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=sweden |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=SE-Generic banners |image=SE-Generic banners.zip |downloadBehaviour=null |contentType=SE-Generic banners |assetSize=514921 }} {{Card |title=SE-Pay Now banners |image=SE-Pay Now banners.zip |downloadBehaviour=null |contentType=SE-Pay Now banners |assetSize=965954 }} {{Card |title=SE-Pay Later banners |image=SE Pay Later banners.zip |downloadBehaviour=null |contentType=SE Pay Later banners |assetSize=474808 }} {{Card |title=SE - Brand kit (logo lock-ups) |image=SE Brand kit-logo-lock-ups.zip |downloadBehaviour=null |contentType=SE Brand kit (logo lock-ups) |assetSize=391154 }} {{Card |title=SE - Email templates |image=SE Email templates.zip |downloadBehaviour=null |contentType=SE Email templates |assetSize=146232 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](ZmlbC5m069VX1qY2_Screenshot2024-06-12at10.22.03.jpeg)image ![klarna docs image](ZmlbF5m069VX1qY5_Screenshot2024-06-12at10.23.16.jpeg)image #### Pre-approved messaging ##### Generic messaging | **English** | **Swedish** | |----|----| | Safe and convenient | **Tryggt och smidigt** | | Safe and convenient. Pay now or within 30 days. | **Tryggt och smidigt. Betala direkt eller inom 30 dagar.** | ##### Pay now messaging | **English** | **Swedish** | |----|----| | Pay instantly with Klarna. Convenient. | **Betala direkt med Klarna. Smidigt.** | | Pay instantly or within 30 days. Safe and convenient. | **Betala direkt eller inom 30 dagar. Tryggt och smidigt.** | ##### Pay later in 30 days messaging | **English** | **Swedish** | |----|----| | Pay within 30 days with Klarna. Safe. | **Betala inom 30 dagar med Klarna. Tryggt.** | Switzerland ### Switzerland Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in Switzerland. Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=switzerland |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=CH-German-Generic banners |image=CH German-Generic banners.zip |downloadBehaviour=null |contentType=CH-German-Generic banners |assetSize=418210 }} {{Card |title=CH-German-Pay Now banners |image=CH-German-Pay Now banners.zip |downloadBehaviour=null |contentType=CH-German-Pay Now banners |assetSize=465922 }} {{Card |title=CH-German-Pay Later banners |image=CH-German-Pay Later banners.zip |downloadBehaviour=null |contentType=CH-German-Pay Later banners |assetSize=463432 }} {{Card |title=CH-German-Brand kit (logo lock-ups) |image=CH-German-Brand kit-logo-lock-ups.zip |downloadBehaviour=null |contentType=CH-German-Brand kit (logo lock-ups) |assetSize=548722 }} {{Card |title=CH-German-Email templates |image=CH-German-Email templates.zip |downloadBehaviour=null |contentType=CH-German-Email templates |assetSize=135120 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](ZmBjwZm069VX1ero_Screenshot2024-06-05at15.09.43.jpeg)image ![klarna docs image](ZmBkEZm069VX1erw_Screenshot2024-06-05at15.11.33.jpeg)image #### Pre-approved messaging ##### Generic messaging \| Generisches Messaging | **English** | **Swiss German** | |----|----| | Klarna available | **Klarna verfügbar** | | Klarna available at checkout | **Klarna am Checkout verfügbar** | | Orders, payments and returns at one glance. With Klarna. | **Bestellungen, Zahlungen und Retouren auf einen Blick. Mit Klarna.** | | Pay flexibly and securely with Klarna | **Bezahle flexibel und sicher mit Klarna** | ##### Pay now messaging \| Sofort bezahlen | **English** | **Swiss German** | |----|----| | Pay quickly and securely. With Klarna. | **Bezahle schnell und sicher. Mit Klarna.** | | Pay now or flexibly. With Klarna. | **Bezahle sofort oder flexibel. Mit Klarna.** | ##### Pay later in 30 days messaging \| In bis zu 30 Tagen bezahlen | **English** | **Swiss German** | |----|----| | Pay flexibly in up to 30 days. | **Bezahle flexibel in bis zu 30 Tagen** | | Pay now or flexibly in up to 30 days | **Bezahle sofort oder flexibel in bis zu 30 Tagen** | | Shop smart. Pay flexibly. | **Shoppe smart. Bezahle flexibel.** | United Kingdom ### United Kingdom Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in the UK. Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=uk |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=UK-Generic banners |image=UK-Generic banners.zip |downloadBehaviour=null |contentType=UK-Generic banners |assetSize=1226135 }} {{Card |title=UK - Brand kit (logo lock-ups) |image=UK Brand kit-logo-lock-ups.zip |downloadBehaviour=null |contentType=UK Brand kit (logo lock-ups) |assetSize=124623 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](ZmBnBZm069VX1etr_Screenshot2024-06-05at15.23.20.jpeg)image ![klarna docs image](ZmBqqJm069VX1ew-uk.jpeg)image #### Pre-approved messaging ##### Generic messaging | **British English** | **Legal disclosures** | |----|----| | **Pay with Klarna** | *Doesn’t trigger a disclosure.* *If you are amending this message, you need to follow disclosure guidance.[disclosure guidance](https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/united-kingdom/)*. | | **Klarna available** | *Doesn’t trigger a disclosure.* *If you are amending this message, you need to follow disclosure guidance.[disclosure guidance](https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/united-kingdom/)*. | | **Klarna available at checkout** | *Doesn’t trigger a disclosure.* *If you are amending this message, you need to follow disclosure guidance.[disclosure guidance](https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/united-kingdom/)*. | | **Choose how to pay with Klarna** | *Doesn’t trigger a disclosure.* *If you are amending this message, you need to follow disclosure guidance.[disclosure guidance](https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/united-kingdom/)*. | ## Americas Canada ### Canada Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in Canada. `Download the ready-made asset packs provided below.` #### Downloadable ready-made assets {{CardList |id=canada |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=CA-English-Generic banners |image=CA-English-Generic banners.zip |downloadBehaviour=null |contentType=CA-English-Generic banners |assetSize=858363 }} {{Card |title=CA-English-Pay Now banners |image=CA-English-Pay Now banners.zip |downloadBehaviour=null |contentType=CA-English-Pay Now banners |assetSize=921533 }} {{Card |title=CA-English - Pay in 4 banners |image=CA-English Pay in 4 banners.zip |downloadBehaviour=null |contentType=CA-English Pay in 4 banners |assetSize=1131920 }} {{Card |title=CA-English - Email templates |image=CA-English Email templates.zip |downloadBehaviour=null |contentType=CA-English Email templates |assetSize=96493 }} {{Card |title=CA-French-Generic banners |image=CA-French-Generic banners.zip |downloadBehaviour=null |contentType=CA-French-Generic banners |assetSize=502405 }} {{Card |title=CA-French-Pay Now banners |image=CA-French-Pay Now banners.zip |downloadBehaviour=null |contentType=CA-French-Pay Now banners |assetSize=508842 }} {{Card |title=CA-French - Pay in 4 banners |image=CA-French Pay in 4 banners.zip |downloadBehaviour=null |contentType=CA-French Pay in 4 banners |assetSize=641613 }} {{Card |title=CA-French - Email templates |image=CA-French Email templates.zip |downloadBehaviour=null |contentType=CA-French Email templates |assetSize=126269 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](ZnlARpbWFbowezC9_Screenshot2024-06-24at11.36.17.jpeg)image ![klarna docs image](ZnlBbJbWFbowezEC_Screenshot2024-06-24at11.50.19.jpeg)image #### Pre-approved messaging ##### Generic messaging | **Canadian English** | **Canadian French** | **Legal disclosures** | |----|----|----| | **Klarna available at checkout** | **Klarna disponible au moment de payer** | | | **Shop now, pay with Klarna.** | **Magasinez maintenant. Payez avec Klarna.** | | | **Shop now. Pay over time with Klarna.** | **Magasinez maintenant. Payez au fil du temps avec Klarna.** | | ##### Pay now messaging | **Canadian English** | **Canadian French** | **Legal disclosures** | |----|----|----| | **Shop now and pay immediately** | **Magasinez et payez maintenant** | | | **Pay now or flexibly. With Klarna.** | **Payez maintenant ou de manière flexible. Avec Klarna.** | | ##### Pay in 4 smaller payments messaging | Canadian English | Canadian French | Legal disclosures | |----------------|---------------|-----------------| | Shop now, pay in 4 with Klarna.* | Magasinez et payez en 4 versements avec Klarna.* | *See Canadian payment terms at [klarna.com/ca/paylaterin4](http://klarna.com/ca/paylaterin4) . A higher initial payment may be required for some consumers. | | Split your purchase into 4 interest-free payments.* | Do not use “interest -free” in Canadian French language or in the Province of Quebec. | *APR 0%. No conditions apply. Term: 2 months. For more information, see [klarna.com/ca/legal](http://klarna.com/ca/legal) . A higher initial payment may be required for some consumers. | Mexico ### Mexico Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in Mexico. Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=mexico |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=MX-Generic banners |image=MX-Generic banners.zip |downloadBehaviour=null |contentType=MX-Generic banners |assetSize=1635090 }} {{Card |title=MX - Pay in 4 banners |image=MX Pay in 4 banners.zip |downloadBehaviour=null |contentType=MX Pay in 4 banners |assetSize=825930 }} {{Card |title=MX-Brand kit (logo lock-ups) |image=MX Brand kit-logo-lock-ups.zip |downloadBehaviour=null |contentType=MX Brand kit (logo lock-ups) |assetSize=262846 }} {{Card |title=MX-Email templates |image=MX Email templates.zip |downloadBehaviour=null |contentType=MX Email templates |assetSize=142399 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](ZlClPiol0Zci9bcb_Screenshot2024-05-24at16.32.52.jpeg)image ![klarna docs image](ZmHKiZm069VX1hQQ_Screenshot2024-06-06at16.40.39.jpeg)image #### Pre-approved messaging ##### Generic messaging \| Mensajes genéricos | **English** | **Mexican Spanish** | **Legal disclosures** | |----|----|----| | Shop now, pay over time with Klarna. | **Compra ahora, paga en plazos con Klarna.** | \- | | Shop now, pay with Klarna. | **Compra ahora, paga con Klarna.** | \- | | Pay smarter with Klarna | **Paga de manera inteligente con Klarna** | \- | | Get more time to pay with Klarna | **Más tiempo para pagar con Klarna** | \- | ##### Pay in 4 messaging \| Mensajes de "Paga en 4 plazos" | English | Mexican Spanish | Legal disclosures | |-------|---------------|-----------------| | Shop now, pay in 4 with Klarna. | Compra ahora, paga en 4 plazos con Klarna. | - | | Split your purchase into 4 payments | Divide tus compras en 4 pagos | - | | Split your purchase into 4 interest-free payments. With Klarna.* *APR 0%. VAT not included. For information and comparative purposes. Learn more at klarna.com. | Divide tus compras en 4 pagos sin intereses. Con Klarna.* | *CAT 0%. Sin IVA. Sujeto a aprobación de crédito. Para fines informativos y de consulta. Conoce más en [https://www.klarna.com/mx/](https://www.klarna.com/mx/) | United States of America ### United States Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in the US. Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=united-states |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=US-Generic banners |image=US-Generic banners.zip |downloadBehaviour=null |contentType=US-Generic banners |assetSize=1142238 }} {{Card |title=US - Pay in 4 banners |image=US Pay in 4 banners.zip |downloadBehaviour=null |contentType=US Pay in 4 banners |assetSize=1204738 }} {{Card |title=US - Pay Later banners |image=US Pay Later banners.zip |downloadBehaviour=null |contentType=US Pay Later banners |assetSize=808188 }} {{Card |title=US - Pay Now banners |image=US Pay Now banners.zip |downloadBehaviour=null |contentType=US Pay Now banners |assetSize=494326 }} {{Card |title=US - Financing banners |image=US Financing banners.zip |downloadBehaviour=null |contentType=US Financing banners |assetSize=512774 }} {{Card |title=US-Brand kit (logo lock-ups) |image=US Brand kit-logo-lock-ups.zip |downloadBehaviour=null |contentType=US Brand kit (logo lock-ups) |assetSize=386581 }} {{Card |title=US-Email templates |image=US Email templates.zip |downloadBehaviour=null |contentType=US Email templates |assetSize=96190 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](ZmGNKZm069VX1giv_Screenshot2024-06-06at12.18.03.jpeg)image ![klarna docs image](ZmGNxZm069VX1gi-us.jpeg)image #### Pre-approved messaging ##### Generic messaging | **American English** | **Legal disclosures** | |------------------------------------------|-----------------------| | **Klarna available at checkout** | \- | | **Pay smarter with Klarna** | \- | | **Find Klarna at checkout** | \- | | **Smart shoppers pick pink at checkout** | \- | | **Pick pink at checkout** | \- | ##### Pay now messaging | **American English** | **Legal disclosures** | |-----------------------------------------------|-----------------------| | **Pay now or choose how to pay with Klarna.** | \- | | **Pay now with Klarna** | \- | ##### Pay later in 30 days messaging | **American English** | **Legal disclosures** | |----------------------------------------|-----------------------| | **Get it. Try it. Buy it. ** | \- | | **Shop now and pay later in 30 days.** | \- | ##### Pay in 4 smaller payments messaging | **American English** | **Legal disclosures** | |----|----| | **Shop now. Split your purchase into 4 interest-free payments with Klarna.\*** | \*CA resident loans made or arranged pursuant to a California Financing Law license. | | **Split your purchases into 4 interest-free payments\*** | \*CA resident loans made or arranged pursuant to a California Financing Law license. | | **Shop smart and split the cost into 4 interest-free payments.\*** | \*CA resident loans made or arranged pursuant to a California Financing Law license. | ##### Financing messaging | **American English** | **Legal disclaimers** | |----|----| | **Pay over time with monthly financing\*** | \*Monthly financing through Klarna issued by WebBank. | | **Split the cost of big purchases over 6, 12, or 36 months.\*** | \*Rate ranges from 7.99%-33.99% APR based on creditworthiness and subject to credit approval, resulting in, for example, 12 equal monthly payments of  \$86.98 at 7.99% APR to \$99.46 at 33.99% APR per \$1000 borrowed. Minimum purchase required. A down payment may be required. Estimation of monthly payment excludes potential tax and shipping costs. Monthly financing through Klarna issued by WebBank. | ## Asia & Oceania Australia ### Australia Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in Australia. Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=australia |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=AU-Generic banners |image=AU-Generic banners.zip |downloadBehaviour=null |contentType=AU-Generic banners |assetSize=1511969 }} {{Card |title=AU - Pay Now banners |image=AU Pay Now banners.zip |downloadBehaviour=null |contentType=AU Pay Now banners |assetSize=516770 }} {{Card |title=AU - Pay in 4 banners |image=AU Pay in 4 banners.zip |downloadBehaviour=null |contentType=AU Pay in 4 banners |assetSize=2137534 }} {{Card |title=AU - Pay Later banners |image=AU Pay Later banners.zip |downloadBehaviour=null |contentType=AU Pay Later banners |assetSize=544982 }} {{Card |title=AU-Brand kit (logo lock-ups) |image=AU Brand kit-logo-lock-ups.zip |downloadBehaviour=null |contentType=AU Brand kit (logo lock-ups) |assetSize=244038 }} {{Card |title=AU-Email templates |image=AU Email templates.zip |downloadBehaviour=null |contentType=AU Email templates |assetSize=103736 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](ZmbKmZm069VX1lnu_Screenshot2024-06-10at11.38.07.jpeg)image ![klarna docs image](ZmbKqJm069VX1lnw_Screenshot2024-06-10at11.39.23.jpeg)image #### Pre-approved messaging ##### Generic messaging | **Australian** **English** | **Legal disclosures** | |----|----| | **Klarna available** | \- | | **Klarna available at checkout** | \- | | **Shop now. Pay with Klarna.\*** | \*Fees may apply. Learn more at[klarna.com/au/legal/.](http://klarna.com/au/legal/)  | | **Pay smarter with Klarna** | \- | ##### Pay now messaging | **Australian** **English** | **Legal disclosures** | |----|----| | **Shop now and pay immediately** | \- | | **Pay now or flexibly. With Klarna.\*** | \*Fees may apply. Learn more at klarna.com/au/legal/. | ##### Pay in 4 smaller payments messaging | **Australian** **English** | **Legal disclosures** | |----|----| | **Shop now. Pay in 4 with Klarna.\*** | \*Fees may apply. Learn more at[klarna.com/au/legal/.](http://klarna.com/au/legal/) | | **Split your purchases into 4 interest-free payments.\*** | \*Snooze fees and late fees may apply. Learn more at [[https://www.klarna.com/au/legal/](https://www.klarna.com/au/legal/)](https://www.klarna.com/au/legal/).   | | **Get more time to pay with Klarna\*** | \*Fees may apply. Learn more at[klarna.com/au/legal/.](http://klarna.com/au/legal/) | | **Shop now. Pay over time with Klarna.\*** | \*Fees may apply. Learn more at[klarna.com/au/legal/.](http://klarna.com/au/legal/) | ##### Pay later in 30 days messaging | **Australian** **English** | **Legal disclosures** | |----|----| | **Get 30 days to pay\*** | \*Fees may apply. Learn more at[klarna.com/au/legal/.](http://klarna.com/au/legal/)  | | **Shop now. Pay in 30 days with Klarna.\*** | \*Fees may apply. Learn more at [klarna.com/au/legal/.](http://klarna.com/au/legal/) | New Zealand ### New Zealand Here, you'll find a variety of Klarna-approved messaging options for your marketing touchpoints or co-marketing activities in New Zealand. Download the ready-made asset packs provided below. #### Downloadable ready-made assets {{CardList |id=newzealand |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=NZ-Generic banners |image=NZ-Generic banners.zip |downloadBehaviour=null |contentType=NZ-Generic banners |assetSize=799876 }} {{Card |title=NZ - Pay Now banners |image=NZ Pay Now banners.zip |downloadBehaviour=null |contentType=NZ Pay Now banners |assetSize=434505 }} {{Card |title=NZ - Pay in 4 banners |image=NZ Pay in 4 banners.zip |downloadBehaviour=null |contentType=NZ Pay in 4 banners |assetSize=1834558 }} {{Card |title=NZ-Brand kit (logo lock-ups) |image=NZ Brand kit-logo-lock-ups.zip |downloadBehaviour=null |contentType=NZ Brand kit (logo lock-ups) |assetSize=360266 }} {{Card |title=NZ-Email templates |image=NZ Email templates.zip |downloadBehaviour=null |contentType=NZ Email templates |assetSize=95503 }} }} #### Overview of the banners and logo lockups available to download ![klarna docs image](ZmLM4pm069VX1imR_Screenshot2024-06-07at11.01.43.jpeg)image ![klarna docs image](ZmLM75m069VX1imX_Screenshot2024-06-07at11.03.07.jpeg)image #### Pre-approved messaging ##### Generic messaging | **New Zealand English** | **Legal** **disclosures** | |----------------------------------|---------------------------| | **Klarna available at checkout** | \- | | **Shop now, pay with Klarna.** | \- | | **Pay smarter with Klarna** | \- | ##### Pay now messaging | **New Zealand English** | **Legal disclosures** | |---------------------------------------|-----------------------| | **Shop now and pay immediately** | \- | | **Pay now or flexibly. With Klarna.** | \- | ##### Pay in 4 smaller payments messaging | **New Zealand English** | **Legal disclosures** | |----|----| | **Shop now. Pay in 4 with Klarna. ** | \- | | **Split your purchases into 4 interest-free payments.** | \- | | **Get more time to pay with Klarna** | \- | | **Shop now. Pay over time with Klarna.** | \- | \` --- # Source: https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/openidconnect.md # OpenIDConnect ## It is possible to integrate directly with Klarna OpenIDConnect. ## 1. Request a new client Obtain a client with either the `client_secret_basic` or `client_secret_post` authentication methods selected and save the secret. You will need to use it to authenticate requests to the OIDC. ## 2. Choose a right IDP URL Employ an IDP URL specific to your service's geographic region and run IDP discovery. This step will retrieve the authorization and token endpoints, available scopes and other essential components needed for the standard OAuth flow. ``` markup EU: https://login.klarna.com NA: https://login.klarna.com/na/lp/idp ``` To test Sign in with Klarna direct integration on playground, please use the following issuer URLs: - EU: [](https://login.playground.klarna.com) - NA: [](https://login.playground.klarna.com/na/lp/idp) ## 3. Follow standard OAuth flow Follow the rest of the OAuth flow according to the standard [](https://datatracker.ietf.org/doc/html/rfc6749). --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/before-you-start/operations-and-maintenance.md # Salesforce operations and maintenance ## Data storage ### System Object Extensions #### Basket | **Parameter name** | **Attribute ID** | **Description** | |----|----|----| | Klarna Session ID | `kpSessionId` | The Klarna session ID returned after “Create Session” API  endpoint is called (Applicable from version 21.2.0) | | Klarna Client Token | `kpClientToken` | Client token returned by “Create Session” API endpoint and  used to  initialize the JS SDK (Applicable from version 21.2.0) | | Klarna Client Token Frequency | `kpSubscriptionFrequency` | Subscription frequency values (day, month, etc.) | | Klarna Subscription Period | `kpSubscriptionPeriod` | Predefined subscription period in numbers | | Klarna Is Express Checkout | `kpIsExpressCheckout` | Determines if the basket is an express checkout | | Klarna Session ID | `kpSessionId` | The Klarna session ID returned after “Create Session” API  endpoint is called (Applicable from version 21.2.0) | #### Order | **Parameter name** | **Attribtute ID** | **Description** | |----|----|----| | Klarna Payments Order ID | `kpOrderID` | The Klarna Payments Order ID for Klarna payment method selected by customer | | VCN Brand | `kpVCNBrand` | Klarna Payments virtual card scheme name | | VCN Holder | `kpVCNHolder` | Klarna Payments virtual card holder name | | VCN Card ID | `kpVCNCardID` | Klarna Payments Virtual Card - Card ID | | VCN PCI Data | `kpVCNPCIData` | Klarna Payments Virtual Card PCI Data in encrypted format | | VCN Initialization Vector | `kpVCNIV` | Klarna Payments Virtual Card Initialization Vector | | VCN AES Key | `kpVCNAESKey` | Klarna Payments Virtual Card AES Key | | Is VCN Used | `kpIsVCN` | True if virtual card is enabled & used for payment of the order, otherwise false | | Klarna Session ID | `kpSessionId` | The Klarna session ID returned after “Create Session” API endpoint is called (Applicable from version 21.2.0) | | Klarna Client Token | `kpClientToken` | Client token returned by “Create Session” API endpoint and used to  initialize the JS SDK (Applicable from version 21.2.0) | | Klarna Subscription Frequency | `kpSubscriptionFrequency` | Subscription frequency values (day, month, etc.) | | Klarna Subscription Period | `kpSubscriptionPeriod` | Predefined subscription period in numbers | #### Order Payment Instrument | Parameter name | Attribute ID | Description | |----|----|----| | Klarna Payment Category ID | `klarnaPaymentCategoryID` | ID of Klarna payment category | | Klarna Payment Category Name | `klarnaPaymentCategoryName` | Name of Klarna payment category | #### Payment Transaction | Parameter name | Attribute ID | Description | |----|----|----| | Fraud Status | `kpFraudStatus` | Klarna Payments order fraud status | | Klarna Authorization Token | `kpAuthorizationToken` | This attribute stores the Klarna authorization token, which is a string value used to authenticate and finalize the order creation process with Klarna's payment system. (Applicable from version 23.2.0) | | Klarna Redirect URL | `kpRedirectURL` | This attribute holds the URL to which the customer is redirected after the payment authorization is successfully completed by Klarna's system. (Applicable from version 23.2.0) | #### Site preferences | Parameter name | Attribute ID | Description | |----|----|----| | Enable Klarna Payments | `kp_enable` | Enable/Disable Klarna Payments.Boolean attribute with Default value as true | | Color Customization | `kpColorCustomization` | JSON attribute to customize color | | Enable Extra Merchant Data | `kpEMD` | Enable this option to include `customer_account_info` and `other_delivery_address` as attachments when creating an order. Boolean with default value `false`. | | VCN - Enable settlement retry | `kpVCNRetry` | When set to “Yes”, SFCC will automatically retry the VCN settlement in the event of a service error. Boolean with default value false | | Log Extra debug data | `kpLogExtraData` | Attribute to log debug data.Boolean with default value true | | Merchant Reference 2 | `merchant_reference2` | Enter the attribute from the SCC order (basket) object that you would like to forward as an additional merchant reference to Klarna. This attribute must be a class attribute of the SCC LineItemCtnr. String attribute | | Agent username for subscriptions | `kpSubsUsername` | | | Agent password for subscriptions | `kpSubsPassword` | Agent password to login on behalf of customers to create subscription orders. Password Attribute | | Enable retry for subscriptions | `kpSubsRetryEnable` | Boolean with default value false | | Number of Retries | `kpSubsRetryNumber` | Number attribute | | Recurring retry frequency | `kpSubsRetryFrequency` | Number attribute | | Parameter name | Attribute ID | Description | |----|----|----| | Enable Express Checkout | `kec_enable` | Boolean flag to enable/disable Klarna Express checkout | | Theme | `kec_theme` | The theme of the button. Options include default, light & dark | | Button Shape | `kec_shape` | The shape of the button. Options include default, rect & pill | | Placement | `kec_placement` | Multi-select attribute to choose where to display express checkout buttons. Values: cart, PDP, mini cart | | Parameter name | Attribute ID | Description | |----|----|----| | Enable On-Site Messaging | `osm_enable` | Enable/Disable OSM functionality | | Theme | `osm_theme` | Theme for on site messaging .Options include default,dark and custom | | Placement | `osm_placement` | Multi-select dropdown which includes cart, pdp, header, footer and info. Placement Tag IDs are hardcoded in code. | | Custom styling | `osm_custom_styling` | JSON to store custom styling | | Parameter name | Attribute ID | Description | |----|----|----| | Enable Sign-in with Klarna | `siwk_enable` | Boolean flag to enable/disable Klarna SIWK | | Scope | `siwk_scope` | Multi Selection list of available scopes that can be requested | | Redirect URL | `siwk_redirect_url` | Login redirect url | | Button theme | `siwk_theme` | The theme of the button. Options include default, light & dark | | Button Shape | `siwk_shape` | The shape of the button. Options include default, rect & pill | | Logo alignment | `siwk_alignment` | Klarna logo alignment. Options include badge, left & center | | Placement | `siwk_placement` | Multiselect attribute to choose where to display SIWK buttons. Values: login and checkout | #### Product parameters for Klarna subscriptions | Parameter name | Attribute ID | Description | |----|----|----| | Is Klarna Standard Product | `kpIsStandardProduct` | Boolean attribute to define if the product is standard. | | Is Klarna Subscription Product | `kpIsSubscriptionProduct` | Boolean attribute to define if the product is eligible for subscription. | | Klarna Trial Days Usage | `kpTrialDaysUsage` | Numeric value used for free trial definition. | #### ProductLineItem | Parameter name | Attribute ID | Description | |----|----|----| | Is Selected for Subscription product | `kpSubscription` | Boolean attribute to define if the product is selected for subscription in the basket. | | Enriched data for product line item. | `klarna_oms_lineItemJSON` | String data for product line item. | | | | | #### Profile | Parameter name | Attribute ID | Description | |----|----|----| | Klarna Subscriptions | `kpSubscriptions` | Text attribute to store customer subscriptions to Klarna | #### Klarna activation KlarnaActivation custom object gives an opportunity to configure multiple MIDs per site. Merchants could have different credentials, clientIDs and VCN keys per country or group of countries. It has a similar structure to the Klarna Activation Site preferences group. Klarna Activation Key is the unique key for each Klarna Activation CO entry. It should be defined by the merchant and could have any unique string value. ![ Klarna activation attributes](Zwf0iYF3NbkBXN0J_sfcc-KlarnaActivationattributes.jpeg) *Klarna activation attributes* | Parameter name | Attribute ID | Description | |----|----|----| | Klarna Activation Key | `kp_activation_key` | Unique identifier for a single KlarnaActivation entry. It is a free text entered by the merchant. | | Region | `kp_region_countries` | Klarna regions (Europe, North America, Oceania) | | Market(s) | `kp_market_countries` | Klarna available countries | | Client ID | `kp_client_id_countries` | Client ID generated in Klarna Merchant Portal | | API Username | `KP_API_Username_countries` | API username generated in Klarna Merchant Portal | | API Password | `KP_API_Password_countries` | API password generated in Klarna Merchant Portal | | Enable Virtual Card Number (VCN) | `kpVCNEnabled_countries` | Flag to enable virtual card number for selected countries. This will override the globally selected in Klarna Payments. | | Public Key ID | `kpVCNkeyId_countries` | Countries specific public key for VCN | | Enable settlement retry | `kpVCNRetry_countries` | Flag to enable settlement retry for selected countries. This will override the globally selected in Klarna Payments. | ### Session attributes and cookies The following session custom attributes are saved in session.privacy storage and accessible in checkout. The attributes are retained for the session lifetime & cleared when the customer logs out of their profile. | Attribute | Description | |----|----| | `KlarnaLocale` | The Klarna locale in use | | `KlarnaPaymentsSessionID` (Not included as session attributes from version 21.2.0) | The Klarna session ID returned after “Create Session” API endpoint is called | | `KlarnaPaymentsClientToken` (Not included as session attribute from version 21.2.0) | Client token returned by “Create Session” API endpoint and used to  initialize the JS SDK | | `KlarnaPaymentMethods` | The available payment method categories for the respective Klarna session; Saved in JSON format | | `KlarnaPaymentsAuthorizationToken` | The authorization token returned by JS SDK “Authorize” call | | `KPAuthInfo` | Whether finalization is required for the payment method; Returned by JS SDK “Authorize” call; Saved in JSON format | | `KlarnaExpressCategory` | The KEB payment category; Currently applicable for US and defaults to “pay_over_time” | | `KlarnaPaymentsRedirectURL` | The URL to redirect the customer to after placing the order; Returned by the “Create Order” API call | | `'kpActive_' + countryCode` | Flag to indicate if Klarna is enabled for current site country | | `'kpActivationSource_' + countryCode` | Klarna Activation source per country - Custom Object or Site Preferences. It is empty for old Klarna Countries config | | `'kpActivationKey_' + countryCode` | Klarna Activation key in case of Custom object usage. | The following cookies are being set by the Klarna cartridge integration: | Cookie name | Description | |----|----| | `selectedKlarnaPaymentCategory` | The selected payment method on checkout (e.g. “pay_later”) | ### Library In addition to the configurations, the following two library assets will be added: - **footer-about**: An updated Out-of-the-Box (OOTB) asset that includes a link to the Klarna On-site messaging (OSM) dedicated page in the footer. - **klarna-email-info**: An asset containing links to review Klarna Payment information, which is used in the confirmation email sent to customers. ### Services An HTTP service, `klarna.http.defaultendpoint`, has been added with the `klarna.http.service` profile. - **Deprecation Notice for Version 24.4.0:**Service credentials and the `KlarnaCountries` custom object have been deprecated as of version 24.4.0. Please use the Klarna Activation Site Preferences or the Klarna Activation custom object to enter API credentials. - **Replication Guidance for Version 21.2.0:**Prior to version 21.2.0, the `KlarnaCountries` custom object was replicable. To avoid issues with service credentials during replication, merchants should use the same service credential name across staging, development, and production environments. For more details on updating the KlarnaCountries definition in your instances, please review Section [Update KlarnaCountries Definition](https://docs.google.com/document/d/1-sMIxC4BTmvqZRHifFOUT-Wo2bc0oVQNh1GP7piaQsM/edit#heading=h.wtrcq16yy4rn). **Klarna Sign In Service** klarna.http.signIn with klarna.http.signIn profile and klarna.signin.credentials credentials. URL is populated dynamically for Activation configuration. For deprecated Klarna Countries setup service credentials URL should be updated on production. ## Logs The integration includes the following types of logs: - **Service Communication Logs**: These logs start with `service-klarna-***` and contain every request and response to the Klarna endpoints. Personal information, such as emails and names required for the Klarna API calls, is masked in these logs. - **Custom Errors and Debug Info**: Depending on the case, custom errors and debug information are logged under `customerror-***`, `custodebug-***`, and `custominfo-***` files. ## Availability Cartridge functionality is dependent on the availability of the Klarna API service. The current operational status of Klarna can be viewed at [Klarna Status](http://status.klarna.com/). #### Merchant support For reporting core SFCC functionality issues in the Klarna cartridge technical integration, please contact: commercecloud@klarna.com. For production issues related to Klarna API availability, merchant representatives should reach out to their Klarna Account Manager after reviewing the current operational status at [Klarna Status](http://status.klarna.com/). ​**Pre-requisite information to provide when reporting an incident**: - Merchant's affected MID or market - Impact and examples of customer orders (order_id or Klarna session_id if available) - Screenshots, timeframe, and any additional information as required This information helps speed up the investigation and resolution process. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/shopify-payments/order-management-and-disputes.md # Source: https://docs.klarna.com/platform-solutions/acquiring-partners/adyen/payments/order-management-and-disputes.md # Adyen order management and disputes ## In this section, you’ll find the best practices for Adyen and Klarna integration. We recommend you follow the steps below to get the most value from your new payment option. ## Order management Adyen has integrated Klarna's order management API requests that you’re likely to use on a daily basis. Here are some of our best practices: - When the order is ready to be shipped, make sure to include all relevant order line items in the [capture request](https://docs.adyen.com/payment-methods/klarna/web-drop-in#manual-captures). This is especially important for partial capture orders. If order lines are missing, Adyen adds a `CORRECTION` order line to each partial capture in the order. As a result, all items from the same order will be listed on every invoice issued for that order, as well as in the customer’s Klarna account. Even though the customer is billed correctly, this can be confusing and lead to avoidable customer support queries. - When the order is captured, add the [shipping and tracking information](https://docs.adyen.com/payment-methods/klarna/web-drop-in#shipping-and-tracking-information). This lets the customer track the status of their order. - When the order is fully refunded, make sure you send all order line items in the captured request. If the order is refunded partially, make sure to send all relevant order line items. If order lines are missing, Adyen adds a `CORRECTION` line in the refund request, which can be confusing for customers. - If you haven’t opted for multiple partial captures, [Adyen will clear the remaining Klarna balance](https://docs.adyen.com/api-explorer/Checkout/70/post/payments/_paymentPspReference_/captures) in case of a partial capture. ## Data handling ### Address & phone validation Make sure to validate all addresses and phone numbers before sharing them with Adyen. Rejections due to mismatched or incorrect addresses late in the process can have a negative impact on acceptance rates, so ensuring these are correct early on is critical. ### Tax handling with discounts You need to declare the tax amounts and VAT for your Klarna orders. It’s crucial to declare discounts and taxes correctly. Make sure to follow the [invoice lines and discounts guidance in Adyen Docs](https://docs.adyen.com/payment-methods/klarna/invoice-lines) to avoid integration issues. ### Extra merchant data (EMD) [Extra merchant data](https://docs.klarna.com/api/payments/#operation/createCreditSession!path=attachment&t=request) is a set of additional information typically unavailable during the checkout flow. This information may consist of data about the customer performing the transaction, the products or services associated with the transaction, or the seller and their affiliates. Depending on the business category or the type of goods you sell, sending EMD data may be a mandatory requirement.  Here are some examples of business categories where sending EMD is mandatory: - Travel (flight, train, bus, car rental, hotel) - Marketplaces - Tickets and events  - Subscriptions - Vouchers and gift cards ### Product and image URLs You can share the [imageUrl](https://docs.klarna.com/api/payments/#operation/createOrder!path=order_lines/image_url&t=request)`imageUrl` and the [productUrl](https://docs.klarna.com/api/payments/#operation/createOrder!path=order_lines/product_url&t=request)`productUrl` with Adyen. This lets Klarna use these resources in your communication with the customer to improve the post-purchase experience in the Klarna app. This helps the end customer to visualize the purchase they have made. ## Disputes You can manage the [Klarna disputes](https://docs.adyen.com/risk-management/chargeback-guidelines/klarna-chargebacks) using the [Adyen customer area](https://docs.adyen.com/risk-management/chargeback-guidelines/klarna-chargebacks#klarna-dispute-ca) or by using the [Adyen dispute API](https://docs.adyen.com/risk-management/chargeback-guidelines/klarna-chargebacks#klarna-dispute-api). If you have any questions regarding disputes, please reach out to Adyen support who will be able to help you. --- # Source: https://docs.klarna.com/payments/after-payments/order-management/before-you-start/order-management-in-a-nutshell.md # Order management in a nutshell ## Here you can find a high-level description of how Order management works. When your customers pay with Klarna and their orders are created, you need Order management to finalize the purchase journey. With this solution, you perform different order operations before, during, and after fulfilling the order. Here’s an overview of the order management operations: ![ Order management integration.](e4f32619-d4bd-4290-8b61-diagrams-Order-managementdec.jpg) *Order management integration.* You can manage orders through a set of server-side calls. They can be grouped into 3 main categories: **View and change orders** This category includes the following requests: - Check the details of an order. - Update the order amount. - Update merchant references. - Update customer address. - Cancel an order. **Capture and track orders** This category includes the following requests: - Capture the full order amount. - Capture part of the order amount. - Check the details of a capture. - Add shipping information. - Send customer communications. **Refund and extend orders** This category includes the following requests: - Refund an order. - Refund with return fees. - Extend order authorization. - Release order authorization. - Extend payment date. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/prestashop/payments/order-management-in-prestashop.md # Order Management in Prestashop ## Order Management on PrestaShop outlines how Klarna orders are handled within the admin panel, including automated or manual capture, refund processing for captured orders, and integration features like partial actions, shipment tracking, and status synchronization to streamline operations. The order management in this module works differently compared to previous PrestaWorks Klarna modules, particularly you need to configure the capture upon fulfillment feature for orders to captured upon fulfillment. Even if you have used a Klarna module in PrestaShop previously, please review this section carefully. ## Order handling Klarna module allows you to manage and see the order information. To see that you need to navigate to the **Orders -\> Orders** page in the PrestaShop admin panel. There you will find all of the orders created in your shop including those processed by the Klarna module. Those orders will be set to different statuses depending on the payment state. You can see additional order information by clicking on the “View” button. ## Capture Since version 1.0.4, order capture upon fulfillment feature was added, providing 3 ways to capture your orders. You can capture orders automatically when it reaches the desired PrestaShop order status using the Capture upon fulfillment functionality, please refer to that section of the document. You can also capture manually from the PrestaShop orders management page. If the order was processed by the Klarna system in the detailed order view you will see a new section added. ![image](Zz3xnK8jQArT1E5e%20PrestaShoporders.jpeg) To capture the order, click the first button with the label **CAPTURE PAYMENT**. Once the button is clicked the payment will be captured and the order status will be set to the one that was defined in the Order Status Mapping settings. ***While orders can also be managed within the [Klarna Merchant Portal](https://portal.klarna.com), it is recommended to do order management within your PrestaShop admin*** , it is recommended to do order management within your PrestaShop admin to keep the data in sync between Klarna and your shop.  Updates made in the Klarna Merchant Portal will not update the order in your PrestaShop store.   You can access the Klarna Merchant Portal order by clicking the Klarna reference number. Inside the Klarna merchant portal, you can view more information about the order and transaction information. ![Prestashop manage order settings](Zz3yCK8jQArT1E58_PrestaShopManageKlarnaorder.jpeg) *Prestashop manage order settings* ### Partial capture As of version 1.1.0, partial capture is supported. You can select items that can be captured from your order management page, or capture the order amount instead of the items included in the order. To partially capture orders, you need to click on the **CAPTURE ORDER** button on the order management page.  You will get a modal that displays the order's line items in more detail, you will see all of the items that are available to capture as well as the total amount. ![Partial capture in Prestashop](Zz31aq8jQArT1E9e_PrestaShopPartialcapture.jpeg "Partial capture in Prestashop") To capture individual items you need to select the checkbox for the desired order line items. Once that is done the amount to be captured will appear on the button and it will become active. Keep in mind that you are not able to capture more than the order amount that is available to capture, so if that becomes the case, the button will become inactive once again. Similarly, with order *amount*capture, you enter the amount in the field which is presented when you click the link **Capture amount.** You can partially capture orders as long as there is available funds to capture. As soon as you partially capture the order status will be set to the one that was defined in the Order Status Mapping settings. All of the captures can be seen in PrestaShop Klarna order details, and in the Klarna Merchant Portal. ## Cancel order Before an order is captured, you could cancel it. To cancel, click the **CANCEL ORDER** button and the order status will be set to the one that was defined in the Order Status Mapping settings. ## Refunds Only captured Klarna orders can be refunded. In the order list you will see orders with the status “Payment accepted”, these orders can be refunded. The refund can be initiated by clicking the **Refund**button on the order management page. Once the order is captured the Klarna section will change and have the refund button. When the button is clicked you will see a modal with items available for refund action. To initiate a full refund select all of the items (or enter the whole order amount) and click refund. As soon as you issue the refund the order status will be set to the one that was defined in the Order Status Mapping settings. The list of refunds can be seen in PrestaShop Klarna order details, and in the Klarna Merchant Portal. ![Refunds in Prestashop](Zz32xq8jQArT1E_S_PrestaShopPartialrefund.jpeg) *Refunds in Prestashop* ### Partial Refund Partial refund functionality was included in the 1.2.0 Klarna Payments module version. Same as with the **Partial Capture,**you can refund part of your Klarna order or a selected amount of that order. To partially refund an order, you need to navigate to the orders management page, click on the order that was captured, or at least partially captured. Same as for a full refund, you will find a refund button in the Klarna Payments management section. Once the button is clicked a modal will open up and there you will be able to either refund items or the amount you define. ## Shipment tracking information As of version 1.2.0**,**Shipment Tracking Information feature was included. When you capture the order, shipping information is automatically sent to Klarna with the order’s capture call. ## Initial payment method The customer’s initial payment method cannot be displayed on the order confirmation page, and thus the same field in the PrestaShop back office, as Klarna only provides this initial payment method data for an order in English. ## Automatic order status synchronization The setting “Enable automatic order status change” allows you to manage how the PrestaShop order statuses should behave based on Klarna order status. The toggle option can be found in the "Additional settings" section. By default the toggle is enabled meaning that: - PrestaShop order statuses will be updated according to Klarna's order status - The update is done only once to the same status, so you can still set custom order status if needed, as it will not be overridden. If the toggle is deactivated: - PrestaShop statuses will not be updated according to Klarna, only the initial status for new orders will be added, allowing you to customize PrestaShop statuses to your liking. ![Automatic order status change in Prestashop](Zz35xq8jQArT1FCi_PrestaShopautomaticorderstatuschange.jpeg) *Automatic order status change in Prestashop* --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/payments-for-shopify/order-management.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/order-management.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/payments/order-management.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/payments-for-shopify/order-management.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/order-management.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/payments/order-management.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/payments-for-shopify/order-management.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/order-management.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/payments/order-management.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/payments-for-shopify/order-management.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/order-management.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/payments/order-management.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/payments-for-shopify/order-management.md # Shopify order management ## This article details the order operations you can manage in the Klarna payments app integration for Shopify. The Klarna payments app integration for Shopify comes with an integrated order management feature. We recommend that you manage the Klarna orders as part of the standard order management within your Shopify admin. - Orders marked as *Paid* or *Authorized* are guaranteed funds by Klarna and can be fulfilled when appropriate for the shop. - Orders marked as *[Payment pending](https://help.shopify.com/en/manual/orders/manage-orders/alt_payments_pending)* should not be fulfilled until the payment is completed and therefore guaranteed by Klarna. While order management can be done directly via the Klarna Merchant portal, this will cause Klarna data and Shopify order data to be out of sync and could result in unintended updates, for example, duplicated refunds. Unless there is a problem, you should manage all orders through the Shopify admin and not the Klarna Merchant portal. ## Capturing an order The payment status of captured orders depends on the [Payment capture method configuration setting](https://help.shopify.com/en/manual/orders/get-paid) in the Shopify admin under Settings\> Payments. You can set the payment capture method to automatic or manual. This **Payment capture** setting applies to all orders in a Shopify store. - For manually captured orders, the Shopify payment status is first set to **[Payment pending](https://shopify.dev/apps/payments/processing-a-payment#pend-a-payment)**. After a small time delay, after the Klarna order has been created, the Shopify order is set to **[Authorized](https://shopify.dev/apps/payments/capturing-an-authorized-payment)**. You can manually capture the Shopify order once, which will trigger the corresponding capture of the Klarna order. The Klarna capture doesn't contain order line data, as [capture order line data isn’t shared by Shopify](https://shopify.dev/apps/payments/capturing-an-authorized-payment#request-body-example).  - For automatically captured orders, the Shopify payment status is first set to **[Payment pending](https://shopify.dev/apps/payments/processing-a-payment#pend-a-payment)**. After a small time delay, the status is set to **[Paid](https://shopify.dev/apps/payments/processing-a-payment)** and then after another time delay of up to 20 minutes, the corresponding Klarna order is automatically captured. Usage of automatic capture is restricted to specific business rules and categories. Please refer to our [guidelines](https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/automatic-capture.md) before enabling this functionality. Shopify currently adds the \[:~:text=Expiring%20isn%27t%20a%20payment%20status%2C%20but%20the%20Expiring%20badge%20is%20displayed%20two%20days%20before%20the%20deadline%20for%20capturing%20payment%20on%20orders%20that%20have%20the%20Authorized%20payment%20status. Expiring badge\]**to Shopify orders at a default time period of 7 days, which doesn't match the Klarna order expiration date, as set by Klarna in the [authorizationExpiresAt field when resolving the payment on Shopify](https://shopify.dev/api/payments-apps/latest/mutations/paymentSessionResolve). Even when a Shopify order has an**Expiring''' badge, Klarna payment can still be captured from the Shopify order, as long as the Klarna order hasn't expired or already been captured. By default, Klarna orders expire after 28 days. While Klarna orders can be captured directly in the [Klarna Merchant portal](https://portal.klarna.com/), we recommend keeping Shopify and Klarna order data in sync whenever possible. The [capture of Klarna orders](https://docs.klarna.com/platform-solutions/shopify/payments/klarna-payments/order-management) is not based upon the Shopify order being fulfilled and shipped, as was previously. If you'd like to have the Klarna order based on Shopify order fulfillment, you may be able to build that specific to your store using the [Shopify Flow](https://apps.shopify.com/flow) app. If you use Shopify Flow to capture the orders, please note [the recommended time delay settings](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/order-management). Based on your Klarna contract, Klarna charges merchant fees for captured orders. When Shopify orders are automatically captured, that is, immediately after the order is placed, Klarna fees will apply for each order, even if the order is canceled in the Shopify admin without being fulfilled. ![ The Payment capture method configuration setting will be supported with the new Klarna payment integration app; merchants can choose for all their Shopify orders to be automaticallycaptured or manuallycaptured. The following image shows the configuration.](811e19b4-fbce-480a-8b62-1a9bd9d6ae7d-payment-capture.jpeg) *ThePayment capture methodconfiguration setting will be supported with the new Klarna payment integration app; merchants can choose for all their Shopify orders to beautomaticallycaptured ormanuallycaptured. The following image shows the configuration.* ![ Klarna orders are first given a Payment pending status.](c2cc2fcf-7d65-4fb1-bd8a-0ac71c9aca9f-Pending-Payment-Shopify-order-status.jpeg) *Klarna orders are first given aPayment pendingstatus.* ### Shopify flow with manual payment method capture If you’re using the [Shopify Flow app](https://apps.shopify.com/flow) to trigger the capture of a Shopify order when the **Payment capture method** is set to **Manually**, we recommend that you include a time delay of around 30 minutes after the check**,** if the payment method is Klarnastep to avoid the **Payment gateway** being set to null in some Shopify webhooks, for example for webhooks used by [Signifyd](https://apps.shopify.com/signifyd) and similar apps. ![ Order payment status examples with capture method set to Manualand Automatically.](a06f3313-6ef1-47a2-ab19-cfdf9609jjc98b.jpeg) *Order payment status examples with capture method set toManualandAutomatically.* ## Partial capture Partial capture (multi-capture) is supported for Klarna orders for Shopify Plus merchants. There is a UI bug in Shopify that currently occurs if trying to complete another capture while the first capture is pending. During this time it may appear to be possible to capture a much larger amount than the original order amount, however this is incorrect and will lead to an error if attempted. ## Refunding an order [Refunds made in Shopify](https://help.shopify.com/en/manual/orders/refund-cancel-order) will update the Klarna order after a short time delay of less than 10 minutes. This applies for all types of Shopify refunds: before or after Shopify order fulfillment, full or partial refunds, order line based refunds, and amount-based refunds. The Klarna refund doesn’t include order line data as [refund order line data is not shared by Shopify](https://shopify.dev/apps/payments/processing-a-refund#initiate-the-refund-flow). ## Canceling an order - If you cancel the order whose payment capture method was set to **Automatically capture**, the Klarna order would have already been captured and canceling the Shopify order will result in a refund for the Klarna order. - If the order's payment capture method was set to **Manually capture**, [canceling the Shopify order](https://help.shopify.com/en/manual/orders/cancel-delete-order) before manually setting the order as **Paid** will result in the Klarna order also being canceled, if the payment was not yet captured. For orders already captured, you should use a refund instead, as a cancel call won't be accepted by Klarna. ## Editing order lines You can remove and add items to a Klarna order that has been placed. Editing order lines is possible for both automatically and manually captured Klarna orders. - When you remove an order line from an order, you need to capture the full order amount in Shopify. After you’ve captured the amount, you have to process a refund for the amount of the item you’ve removed from the order. - When you add an order line to an order, Shopify will send an email to your customer with a link to your Shopify checkout. The customer can then use Klarna to pay for the additional item. Once the customer pays, a new order will be created in Klarna’s database. The newly created order line includes the number of the original order. For more information about editing orders see the [article about Editing order items in Shopify documentation](https://help.shopify.com/en/manual/orders/edit-orders). ## Extending a Klarna order's authorization time For orders that aren’tautomatically captured based on your store's [Payment capture method](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/order-management) setting, we recommend that you manually capture the order prior to the Klarna order expiration date. The expiration time frame depends on your Klarna contract. By default, orders expire after 28 days. The Klarna order's authorization time can’t be extended within the Shopify admin. You can extend the authorization time for Klarna orders in the Klarna Merchant portal, if applicable for the order. ![  If applicable for the order, you can extend the authorization time for Klarna orders in the Klarna Merchant portal by clicking the Extend expiration date link.](a06f3313-6ef1-47a2-ab19-cfdf9609c98b.jpeg) *If applicable for the order, you can extend the authorization time for Klarna orders in the Klarna Merchant portal by clicking theExtend expiration datelink.* --- # Source: https://docs.klarna.com/payments/in-store-payments/additional-resources/ordering-in-store-signage.md # Ordering In-store signage ## In-store signage could be downloaded for self-printing or ordered via our signage platform to receive ready to use signage. ## In-Store signage files for self-print Should the merchant want to print their own signage, please find print ready signage in the below links as Zip files. {{CardList |id=in-store |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |title=Austria |image=Austria in-store signage self-print.zip |downloadBehaviour=null |contentType=Austria |assetSize=179000 }} {{Card |title=Belgium |image=Belgium in-store signage self-print.zip |downloadBehaviour=null |contentType=Belgium |assetSize=280000 }} {{Card |title=Canada |image=Canada in-store signage self-print.zip |downloadBehaviour=null |contentType=Canada |assetSize=192000 }} {{Card |title=Denmark |image=Denmark in-store signage self-print.zip |downloadBehaviour=null |contentType=Denmark |assetSize= 151000 }} {{Card |title=Finland |image=Finland in-store signage self-print.zip |downloadBehaviour=null |contentType=Finland |assetSize=137000 }} {{Card |title=France |image=France in-store signage self-print.zip |downloadBehaviour=null |contentType=France |assetSize=266000 }} {{Card |title=Germany |image=Germany in-store signage self-print.zip |downloadBehaviour=null |contentType=Germany |assetSize=143000 }} {{Card |title=Greece |image=Greece in-store signage self-print.zip |downloadBehaviour=null |contentType=Greece |assetSize=180000 }} {{Card |title=Italy |image=Italy in-store signage self-print.zip |downloadBehaviour=null |contentType=Italy |assetSize=98000 }} {{Card |title=Norway |image=Norway in-store signage self-print.zip |downloadBehaviour=null |contentType=Norway |assetSize=143000 }} {{Card |title=Poland |image=Poland in-store signage self-print.zip |downloadBehaviour=null |contentType=Poland |assetSize=156000 }} {{Card |title=Portugal |image=Portugal in-store signage self-print.zip |downloadBehaviour=null |contentType=Portugal |assetSize=97000 }} {{Card |title=Romania |image=Romania Instore signage.zip |downloadBehaviour=null |contentType=Romania |assetSize=126000 }} {{Card |title=Spain |image=Spain in-store signage self-print.zip |downloadBehaviour=null |contentType=Spain |assetSize=127000 }} {{Card |title=Sweden |image=Sweden in-store signage self-print.zip |downloadBehaviour=null |contentType=Sweden |assetSize=132000 }} {{Card |title=United Kingdom |image=United Kingdom in-store signage self-print.zip |downloadBehaviour=null |contentType=United Kingdom |assetSize=120000 }} {{Card |title=United States |image=United States in-store signage self-print.zip| |downloadBehaviour=null |contentType=United States |assetSize=1360000 }} }} ## In-Store signage - Self-Service ordering Through our signage platform you can order Klarna signage that will help you get the most out of your partnership with Klarna. ### 1. Register an account Begin by registering an account at [klarna.mimeo.com](https://klarna.mimeo.com/login) to initiate the ordering process. ### 2. Market Selection During registration, please ensure to select your preferred market from the dropdown menu. If you're ordering for multiple European countries, choose "Europe" from the market dropdown. ### 3. Payment Methods Accepted payment methods during checkout include Debit Card and Credit Card. Please note: Klarna does not cover the cost of printing or distributing in-store signage ### 4. Inquiries For any inquiries regarding account access or order status, please feel free to contact us at klarna@mimeo.com #### Signage available for the following markets - Austria - Canada - Germany - Denmark - Finland - France - Greece - Ireland - Italy - Netherlands - Norway - Poland - Portugal - Spain - Sweden - United Kingdom - United States --- # Source: https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/osm-customise-merchant-portal.md # Customize placements through Merchant portal ## If you're not familiar with CSS or don't have access to your website's source code, use Klarna's Merchant portal to customize placements to better suit your website's design. For most elements, you're given a variety of customization options. The content specific to the Klarna brand, for example our logo, is less customizable. You can modify the look and feel at the placement level in the Merchant portal. Changes you make there are live immediately after you publish them. ## Step 1. Open the Custom design menu In the [Merchant portal](https://docs.klarna.com/resources/business-tools/merchant-portal-guide/conversion-boosters/), go to **Conversion Boosters**\> **On-site messaging**\> **Placements**. Pick a placement you want to customize, then click **Custom design**. ![klarna docs image](caefc8c8-8613-44cf-9afc-9bb6b08da93a_Screenshot+2024-03-06+at+14.53.10.jpeg)image ## Step 2. Customize the placement. Modify the placement's font, layout, and choose which Klarna logo you want to display. Preview the changes as you're editing to make sure everything looks OK. ![ Customizing a placement](cbf940e0-d772-4f04-bca0-ab67747fd885_Screenshot+2024-03-06+at+14.55.11.jpeg) *Customizing a placement* All customizations go through an accessibility check to ensure that the placements are readable and meet the accessibility criteria. If a custom placement doesn't pass the accessibility check, the **Publish** button is grayed out and hints are displayed. You have to edit the style until the button becomes active again. You can reset a custom placement to its default design at any time by clicking **Reset to default**. ## Step 3. Publish changes Once you're happy with the design changes, click **Publish**, then **Confirm**. Your changes will be live immediately. ![ Publishing a custom placement](0d74a13d-4385-4485-a980-a76296e3c159_Screenshot+2024-03-06+at+14.56.13.jpeg " Publishing a custom placement") ## Placement sizes Placements labeled with *(auto)x(auto)* adjust to 100% of the width and height of the container element. All placements are responsive. ## Themes The On-site messaging placements come in different themes you can switch between: - Light theme - Dark theme - Custom theme, created when you save a custom design in Merchant portal When you switch between themes in the Merchant portal, the data-theme attribute in the code snippet changes accordingly. If you're not using a custom design, the light theme is the default. When you select it, data-theme isn't included in the code. If you then switch to the dark mode, data-theme="dark" is added to the placement tag. If you're using a placement with a custom design, the custom theme is the default and the placement tag doesn't include the data-theme attribute. In that case, when you switch to the light theme, data-theme is set to default. When you then switch to the dark theme, data-theme is set to dark. When the placement tag contains data-theme, all customisations are overridden. --- # Source: https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/osm-exposed-events.md # JavaScript SDK events ## Learn about the events exposed by On-site messaging. The On-site messaging JavaScript SDK includes an event handler that allows you to listen for specific events related to the informational modal and specify a callback function to be triggered when those events occur. Use the event handler by calling the following function: ``` javascript window.Klarna.OnsiteMessaging.on(event: EventType, callback: function) ``` ## Supported events The event handler supports the following events: - `informational-modal-opened` or `informationalModalOpened` are triggered when a customer clicks the call to action button and the interstitial opens - `informational-modal-closed` or `informationalModalClosed` are triggered when a customer closes the interstitial - `placement-rendered` or `placementRendered` are triggered when placement is rendered We encourage to use kebab-case, but we also support camelcase eventTypes. If either the `EventType` or `callback` parameter isn't provided, the function will log an error on the console, but will not throw an error to avoid causing issues on the page. If a string is passed for `EventType` that is not supported, the function will log an error as well. ### Example Here's an example of how you can use the `window.Klarna.OnsiteMessaging.on` function to block the scrolling of the background when the informational modal is opened. In this example, the merchant is using the `informationalModalOpened` to block the scrolling of the background when the interstitial is opened. The `informationalModalClosed` event restores the scrolling when the interstitial is closed. ``` javascript window.Klarna.OnsiteMessaging.on('informationalModalOpened', function() { document.body.style.overflow = 'hidden'; }); window.Klarna.OnsiteMessaging.on('informationalModalClosed', function() { document.body.style.overflow = 'auto'; }); ``` --- # Source: https://docs.klarna.com/payments/after-payments/order-management/manage-orders-in-the-merchant-portal/other-actions.md # Other actions ## Want to know more about additional order actions you can perform in the Merchant portal? Here's a list. Besides performing the main actions to manage your orders, the Merchant portal lets you perform other actions to ensure a smooth customer experience and adequate support. The additional actions you can perform to handle your orders in the Merchant portal are: - **[Check order details:](https://portal.klarna.com?help-page=topic%3Aorder-details)** Viewing and editing order information like amount, customer addresses, references, and more. - [**Update merchant references:**](https://portal.klarna.com?help-page=article%3Awhat-is-the-merchant-reference) Changing the merchant references you added. - [**Update customer address:**](https://portal.klarna.com?help-page=article%3Ahow-do-i-change-the-customer-delivery-address) Changing your customer's shipping or billing addresses. - [**Resend statement:**](https://portal.klarna.com?help-page=article%3Ahow-to-resend-a-customer-invoice) Resending an invoice to your customer. - [**Print packing slip:**](https://portal.klarna.com?help-page=article%3Ahow-to-capture-an-order) Downloading the packing slip associated with the captured items of an order. - [**Extend order authorization:**](https://portal.klarna.com?help-page=article%3Ahow-to-extend-the-order-expiration-date) Extending an order's expiry date and allowing yourself more time to capture and fulfill it. - [**Release order authorization:**](https://portal.klarna.com?help-page=article%3Ai-cant-fulfill-the-whole-order-what-should-i-do) Releasing orders that aren't fully captured and you don't plan to perform more captures on them. - [**Extend payment date:**](https://portal.klarna.com?sort_field=created_at&sort_direction=DESC&created_at_start=2022-12-07&help-page=article%3Ahow-can-i-postpone-an-orders-invoice-due-date) Postponing an order's invoice due date and giving your customers more time to pay for their purchase. - **[Recreate an expired order:](https://portal.klarna.com?sort_field=created_at&sort_direction=DESC&created_at_start=2022-12-07&help-page=article%3Ahow-to-recreate-an-expired-order)** Recreating a canceled, refunded, or expired order as a new one. The actions in this guide redirect to the **Help** section of the merchant portal. To access it, you need to [log into the Merchant portal.](https://www.klarna.com/us/business/merchant-support/how-do-i-log-into-the-merchant-portal/) --- # Source: https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/additional-resources/other-operations.md # Other operations ## Implement proper token exchange, refresh, and validation using JWKS to support seamless and authenticated integrations. ## Refresh token To receive a new set of tokens, perform a token exchange through a `POST` request to the token endpoint. Remember to always save the new `refresh_token` in the database, since the old one will be invalid. Access tokens are opaque - they are random strings that you cannot decode. Validation should only be performed on the `id_token`. You do not have to validate the access token before using it. ``` javascript const data = new URLSearchParams(); data.append("refresh_token", ""); data.append("client_id", ""); data.append("grant_type", "refresh_token"); fetch("https://login.klarna.com/eu/lp/idp/oauth2/token", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: data }).then(response => response.json()) .then(data => console.log(data)) // data // { // "id_token":"id-token", // "access_token":"access-token", // "expires_in":299, // "token_type":"Bearer", // "refresh_token":"refresh-token" // } ``` ## Request user data At any point of time you can request the latest user data using the /userinfo endpoint. It requires a valid access_token as authorization and returns the same data structure as you can find in the id_token. Remember to get the fresh access_token, described in step [5. Integrate in purchase flow](https://docs.klarna.com/sign-in-with-klarna/integrate-sign-in-with-klarna/web-sdk-integration/#integration-steps-5-integrate-in-purchase-flow), using /userinfo. Using a new `access_token` in the `/userinfo` ensures you get the most up to date information we have for the customer without requiring them to re-login. ``` javascript fetch("https://login.klarna.com/eu/lp/idp/userinfo", { headers: { Authorization: "Bearer ", } }) ``` ## Token Validation Validate `id_token`: validating an OAuth 2.0 token using a JWKS (JSON Web Key Set) endpoint, such as the one provided by Klarna, involves several steps. Here's an outline of how you might proceed: - Retrieve JWKS - Make a HTTP GET request to the JWKS endpoint to retrieve the public keys. The response should be a JSON object containing a keys array. - Parse JWKS - parse the JSON response to extract the keys, which will be in JWK (JSON Web Key) format. - Decode access token - decode the access token to obtain the header, which contains the Key ID or kid, which identifies the key within the JWKS that was used to sign the token. - Find the signing key - use the kid from the token's header to find the corresponding key in JWKS. - Verify signature - use the public key to verify the signature of the access_token. This usually requires using a library that supports JWT and the necessary cryptographic algorithms. - Check claims - if the signature is valid, check the claims in the verified token to ensure they meet your requirements. Make sure to verify expiration time, audience, issuer and the signing algorithm. ​***Node sample implementation*** ``` javascript const jwt = require('jsonwebtoken'); const jwkToPem = require('jwk-to-pem'); async function verifyTokenWithJWKS(token, jwksUri) { try { // Decode the token header without verification const { header } = jwt.decode(token, { complete: true }); if (!header || !header.kid) { throw new Error('Invalid token header'); } // Retrieve the JWKS const response = await fetch("https://login.klarna.com/eu/lp/idp/.well-known/jwks.json"); if (!response.ok) { throw new Error(`Failed to fetch JWKS: ${response.statusText}`); } const { keys } = await response.json(); // Find the signing key const signingKey = keys.find(key => key.kid === header.kid); if (!signingKey) { throw new Error('Signing key not found'); } // Convert JWK to PEM const pem = jwkToPem(signingKey); // Verify the token jwt.verify(token, pem, { algorithms: ['RS256'], issuer: "https://login.klarna.com", audience: "" }, (err, decoded) => { if (err) { throw err; } // Token is valid, add your logic to check the claims here console.log('Token is valid. Claims:', decoded); }); } catch (error) { console.error('Token verification failed:', error); } } // Usage example const jwksUri = 'https://your-auth-server.com/.well-known/jwks.json'; const yourToken = 'your.jwt.token.here'; verifyTokenWithJWKS(yourToken, jwksUri); ``` --- # Source: https://docs.klarna.com/klarna-search/before-you-start/overview-of-klarna-search.md # Overview of Klarna Search ## The easiest, most comfortable way to get your products listed is to share them with us through a feed. Simply upload your product catalog to a server and send us the link so we can import it. The majority of e-commerce platforms have simple solutions for this, and are usually included in their standard solution. After sharing your product information with us through the feed, it usually takes less than a minute for our system to process the details, and you have complete control of what is displayed. If you don’t have a product feed, we can collect all the information directly from your site. However, this solution is more time- and resource-intensive, and if you make any changes to your site, there is a risk that your products will disappear. Please contact us to discuss the most appropriate option for your site. ## Timeliness and quality of the information. We always strive to display correct and complete information. That’s why it’s important to update the data in the feed often and include all relevant details. Bulk pricing, such as a fixed price for buying four of the same product, is not accepted. If you have a specific price for bulk buys, the price for purchasing a single product should still be shown in the price file. This is regardless of how common bulk buying is among your visitors. If you have any questions about the price file, please don’t hesitate to contact us. --- # Source: https://docs.klarna.com/merchant-card-service/merchant-card-service/overview-of-merchant-card-service.md # Overview of Merchant Card Service merchant-card ## Settle orders with virtual credit cards issued by Klarna **Merchant Card Service**(MCS) lets you settle orders with virtual credit cards issued by Klarna. We offer prepaid, single use, and multiple use cards in all European currencies as well as in USD. ## Why integrate with MCS ### Credit card payment If you operate in a market where your customers don’t have credit cards, but you still want to have them as customers you can integrate with Klarna. The consumer can then do their payment as they want and you get a credit card issued by Klarna that you can use in your normal card flow. ### Affiliate marketplaces If you own a marketplace with different merchants acting on your platform, you can settle customer’s payments towards the merchants via Klarna’s virtual credit cards. Each merchant can independently settle their part of an order. You can choose to settle payments with one card for each merchant or provide a single card with multiple usage to all merchants involved in an order. ### Fast integration When using MCS, no changes are needed to your current integration to Klarna’s checkout. If you only want to use the checkout or Klarna payment capabilities without the ordering handling done on Klarna’s side you can integrate with a card and use it in your normal order handling system. ## How MCS integrates into your flow {{#mermaid: sequenceDiagram autonumber participant A as Merchant participant B as KP participant C as Klarna Merchant Card Service participant D as Merchant's Acquirer participant E as Klarna Card Issuer A ->>B: Checkout order A ->>C: Request virtual credit card C -->>A: Virtual credit card data A ->>D: Authorization on card D ->>E: Authorization on card A ->>D: Capture on card D ->>E: Capture on card A ->>D: Refund on card D ->>E: Refund on card }} ## How to integrate with MCS 1. Enroll as virtual credit card merchant 2. Read the section Encryption and decryption of card data 3. Integrate to MCS’ endpoints: API Reference ## Encryption and decryption of card data To protect the sensitive virtual credit card data, we perform encryption on the card data before sending them to you. {{#mermaid: sequenceDiagram autonumber participant A as Merchant participant B as Klarna participant C as Klarna Merchant Card Service A ->>A: Generate private/public key pair of at least 2024bits A ->>B: Send public key B -->>A: {key id} for submitted public key A ->>C: Request card providing {key id} for encryption of card data C ->>C: Encrypt card data C -->>A: Card data encrypted with public key associated with {key id} A ->>A: Decrypt card data }} The data is encrypted using a 128 bit symmetric key using the following algorithm: **AES/CTR/NoPadding**. The symmetric key is then encrypted with the public key you enrolled using the following algorithm: **RSA/ECB/PKCS1Padding**. The RSA keypair generated by you must be at least of the size 2048 bits. Please provide your public key in [JWK format](https://tools.ietf.org/html/rfc7517). Each public key is given an key_id that is used by you in the settlement request. It is possible to have more than one active public key. You can use the following commands to generate a new private/public key pair: `openssl genrsa -out private_key.pem 4096` `openssl rsa -in private_key.pem -outform PEM -pubout -out public_key.pem` Now you can use the tool of your choice to convert the public key from .pem format to .jwk format. For example with this JavaScript tool [pem-jwk](https://www.npmjs.com/package/pem-jwk): `pem-jwk public_key.pem> public_key.jwk` Please make sure to securely store your private key as it is integrity of the virtual credit card data. ## Encryption When you request a card you have to provide a key_id to the public key you want to use. This key will be used to encrypt the symmetric key used to encrypt the card details. ## Decryption When requesting a virtual credit card, you will find in the response the following fields. These are used to decrypt the sensitive card data. ``` json { "pci_data": "string", "iv": "string", "aes_key": "string" } ``` The sensitive card data `pci_data` is encrypted by a generated symmetric key `aes_key` which itself is encrypted by your public key. To decrypt the card data, perform these steps: 1. Base64 decode `aes_key` 2. Decrypt decoded `aes_key` using your private key 3. Base64 decode `pci_data` 4. Decrypt decoded `pci_data` using decrypted `aes_key` and `iv` ([initialization vector](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Initialization_vector_(IV))) Make sure you are using the private key which corresponds to the `key_id` you provided when you requested the card. In the decrypted data the card information in plaintext is available and formatted as a JSON object. Here’s an example of decrypted card information. ``` json { "pan": "4111111111111", "expiry_date": "01/19", "cvv": "789" } ``` --- # Source: https://docs.klarna.com/payments/web-payments/additional-resources/ux-guidelines/payment-descriptors.md # Localized Messaging for Checkout ## Find the latest Klarna payment descriptors per region and translations. **Payment category** column in the tables below is what will be returned in the response to the `create_session` request as `payment_method_categories.identifier`. The copies provided in the column for respective locale **(`en-US`, `es_ES`, `en-BE`, etc.)** is what will be returned in the response to the create_session request as `payment_method_categories.name`. The **payment button copy** in the tables below must be used when creating the Klarna Payment button in the checkout. ## **Europe** ### **Austria** | **Payment Category** | **EN-AT** | **DE-AT** | |----------------------|-------------------|----------------------| | `pay_now` | Pay in full today | Sofort bezahlen | | `pay_later` | Pay later | Später bezahlen | | `pay_over_time` | Spread the cost | Teile die Kosten auf | | `klarna` | Pay flexibly | Flexibel bezahlen | #### Payment Descriptors Approaches - **English** | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Pay flexibly** Pay now, in 30 days, in 3 interest-free installments of xx.xx €, or as low as xx.xx €/month. Interest may apply. | | **Pay later** Pay in 30 days. | | | **Spread the cost** Pay in 3 interest-free installments of xx.xx €, or as low as xx.xx €/month. Interest may apply. | | - **German** | **Three options approach** | **Single option approach** | |----|----| | **Sofort bezahlen** Bezahle sicher per Sofortüberweisung, Lastschrift oder mit Karte. | **Flexibel bezahlen** Bezahle sicher per Sofortüberweisung, Lastschrift oder mit Karte, in bis zu 30 Tagen, in 3 zinsfreien Teilzahlungen zu je xx,xx € oder ab xx,xx € pro Monat. Zinsen können anfallen. | | **Später bezahlen** Bezahle in bis zu 30 Tagen. | | | **Teile die Kosten auf** Bezahle in 3 zinsfreien Teilzahlungen zu je xx,xx € oder ab xx,xx € pro Monat. Zinsen können anfallen. | | #### Payment Button approaches | **Copy** | **AT-AT** | |---------------|-------------------| | Without badge | Weiter mit Klarna | | With badge | Weiter mit | ### **Belgium** | **Payment Category** | **EN-BE** | **NL-BE** | **FR-BE** | |----------------------|-------------------|-------------------|--------------------| | `pay_now` | Pay in full today | Betaal nu | Payez maintenant | | `pay_later` | Pay later | Betaal later | Payez plus tard | | pay_over_time | Pay in 3 | Betaal in 3 delen | Paiement en 3 fois | | `klarna` | Pay with Klarna | Betaal met Klarna | Payez avec Klarna | #### Payment Descriptors Approaches - **English** | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Pay with Klarna** Pay now, in 30 days, or in 3 installments. | | **Pay later** Pay in 30 days. | | | **Pay in 3** Pay in 3 installments. | | - **Dutch** | **Three options approach** | **Single option approach** | |----|----| | **Betaal nu** Betaal het hele bedrag vandaag. | **Betaal met Klarna** Betaal het hele bedrag vandaag, binnen 30 dagen, of in 3 delen. | | **Betaal later** Betaal binnen 30 dagen. | | | **Betaal in 3 delen** Betaal in 3 delen. | | - **French** | **Three options approach** | **Single option approach** | |----|----| | **Payez maintenant** Payez la totalité aujourd'hui. | **Payez avec Klarna** Payez maintenant, dans 30 jours ou en 3 versements. | | **Payez plus tard** Payez dans 30 jours. | | | **Paiement en 3 fois** Payez en 3 versements. | | #### Payment Button approaches | **Copy** | **NL-BE** | **FR-BE** | |---------------|-----------------------|-----------------------| | Without badge | Verdergaan met Klarna | Continuer avec Klarna | | With badge | Verdergaan met | Continuer avec | ### **Czech Republic** | **Payment Category** | **EN-CZ** | **CS-CZ** | |----|----|----| | `pay_now` | Pay in full today | Zaplať teď | | `pay_later` | Pay later | Zaplať později | | `pay_over_time` | Pay in 3 | Zaplať ve 3 platbách | | `klarna` | Flexible payments with Klarna | Flexibilní platby s Klarna | #### Payment Descriptors Approaches - **English** | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Flexible payments with Klarna** Pay now, in 30 days, or in 3 installments of x.xx kč. | | **Pay later** Pay in 30 days. | | | **Pay in 3** Pay in 3 installments of x.xx kč. | | - **Czech** | **Three options approach** | **Single option approach** | |----|----| | **Zaplať teď** Zaplať celou část dnes. | **Flexibilní platby s Klarnou.** Zaplať celou část dnes, za 30 dní, nebo ve 3 platbách ve výši x.xx kč. | | **Zaplať později** Zaplať za 30 dní. | | | **Zaplať ve 3 platbách** Zaplať ve 3 platbách ve výši x.xx kč. | | #### Payment Button approaches | **Copy** | **CS-CH** | |---------------|--------------------| | Without badge | Pokračuj s Klarnou | | With badge | Pokračuj s | ### **Denmark** | **Payment Category** | **EN-DK** | **DK-DK** | |----------------------|-------------------|------------------| | `pay_now` | Pay in full today | Betal nu | | `pay_later` | Pay later | Betal senere | | `pay_over_time` | Pay in 3 | Betal i 3 dele | | `klarna` | Pay with Klarna | Betal med Klarna | #### Payment Descriptors Approaches - **English** | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Pay with Klarna** Pay now, in 30 days, or in 3 installments of x,xx kr. | | **Pay later** Pay in 30 days. | | | **Pay in 3** Pay in 3 installments of x,xx kr. | | - **Danish** | **Three options approach** | **Single option approach** | |----|----| | **Betal nu** Betal hele beløbet i dag. | **Betal med Klarna** Betal hele beløbet nu, i 3 dele af x,xx kr., eller om 30 dage. Rentefrit. | | **Betal senere** Betal om 30 dage. | | | **Betal i 3 dele** Betal i 3 dele af x,xx kr. | | #### Payment Button approaches | **Copy** | **DA-DK** | |---------------|--------------------| | Without badge | Fortsæt med Klarna | | With badge | Fortsæt med | ### **Finland** | **Payment Category** | **EN-FI** | **FI-FI** | **SV-FI** | |----|----|----|----| | `pay_now` | Online banking and card-payment | Verkkopankki- ja korttimaksu | Bank- och kortbetalning | | `pay_later` | Pay later | Maksa myöhemmin | Betala senare | | `pay_over_time` | Financing | Erämaksu | Delbetalning | | `klarna` | Pay with Klarna | Maksa Klarnalla | Betala med Klarna | #### Payment Descriptors Approaches - **English** | **Three options approach** | **Single option approach** | |----|----| | **Online banking and card payment** Pay in full today. | **Pay with Klarna** Pay in full today, in 30 days, or as low as x.xx €/month. | | **Pay later** Pay in 30 days. | | | **Financing** Pay as low as x.xx €/month. | | - **Finnish** | **Three options approach** | **Single option approach** | |----|----| | **Verkkopankki- ja korttimaksu** Maksa heti. | **Maksa Klarnalla** Maksa heti, 30 päivässä tai erissä alkaen x.xx €/kuukausi. | | **Maksa myöhemmin** Maksa 30 päivässä. | | | **Erämaksu** Maksa erissä alkaen x.xx €/kuukausi. | | - **Swedish** | **Three options approach** | **Single option approach** | |----|----| | **Bank- och kortbetalning** Betala hela beloppet idag. | **Betala med Klarna** Betala hela beloppet idag, om 30 dagar, eller så lite som x.xx €/månad. | | **Betala senare** Betala om 30 dagar. | | | **Delbetalning** Betala så lite som x.xx €/månad. | | #### Payment Button approaches | **Copy** | **FI-FI** | **SV-FI** | |---------------|-----------------|---------------------| | Without badge | Jatka Klarnalla | Fortsätt med Klarna | | With badge | Jatka Klarnalla | Fortsätt med | ### **France** | **Payment Category** | **EN-FR** | **FR-FR** | |----|----|----| | `pay_now` | Pay in full today | Payez maintenant | | `pay_later` | Pay later | Payez plus tard | | `pay_over_time` | Pay in 3 | Payez en 3 fois | | `klarna` | Flexible payments with Klarna | Paiements flexibles avec Klarna | #### Payment Descriptors Approaches - **English** | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Flexible payments with Klarna** Pay now, in 30 days, or in 3 installments of x.xx€. | | **Pay later** Pay in 30 days. | | | **Pay in 3** Pay in 3 installments of x.xx€.   | | - **French** | **Three options approach** | **Single option approach** | |----|----| | **Payez maintenant** Payez la totalité aujourd'hui. | **Paiements flexibles avec Klarna** Payez la totalité aujourd'hui, dans 30 jours ou en 3 versements de x.xx€. | | **Payez plus tard** Payez dans 30 jours. | | | **Payez en 3 fois** Payez en 3 versements de x.xx€. | | #### Payment Button approaches | **Copy** | **FR-FR** | |---------------|-----------------------| | Without badge | Continuer avec Klarna | | With badge | Continuer avec | ### **Germany** | **Payment Category** | **EN-DE** | **DE-DE** | |----------------------|-------------------|----------------------| | `pay_now` | Pay in full today | Sofort bezahlen | | `pay_later` | Pay later | Später bezahlen | | `pay_over_time` | Spread the cost | Teile die Kosten auf | | `klarna` | Pay flexibly | Flexibel bezahlen | #### Payment Descriptors Approaches - **English** | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Pay flexibly** Pay now, in 30 days, in 3 interest-free installments of xx.xx €, or as low as xx.xx €/month. Interest may apply. | | **Pay later** Pay in 30 days. | | | **Spread the cost** Pay in 3 interest-free installments of xx.xx €, or as low as xx.xx €/month. Interest may apply. | | - **German** | **Three options approach** | **Single option approach** | |----|----| | **Sofort bezahlen** Bezahle sicher per Sofortüberweisung, Lastschrift oder mit Karte. | **Flexibel bezahlen** Bezahle sicher per Sofortüberweisung, Lastschrift oder mit Karte, in bis zu 30 Tagen, in 3 zinsfreien Teilzahlungen zu je xx,xx € oder ab xx,xx € pro Monat. Zinsen können anfallen. | | **Später bezahlen** Bezahle in bis zu 30 Tagen. | | | **Teile die Kosten auf** Bezahle in 3 zinsfreien Teilzahlungen zu je xx,xx € oder ab xx,xx € pro Monat. Zinsen können anfallen. | | #### Payment Button approaches | **Copy** | **DE-DE** | |---------------|-------------------| | Without badge | Weiter mit Klarna | | With badge | Weiter mit | ### **Greece** | **Payment Category** | **EN-GR** | **EL-GR** | |----|----|----| | `pay_now` | Pay in full today | Πληρωμή τώρα | | `pay_later` | Pay later | Πληρωμή αργότερα | | `pay_over_time` | Pay in 3 | Πληρωμή σε 3 άτοκες δόσεις | | `klarna` | Flexible payments with Klarna | Ευέλικτες πληρωμές με Klarna | #### Payment Descriptors Approaches - **English** | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Flexible payments with Klarna** Pay now, in 30 days, or in 3 installments of x.xx€. | | **Pay later** Pay in 30 days. | | | **Pay in 3** Pay in 3 installments of x.xx€. | | - **Greek** | **Three options approach** | **Single option approach** | |----|----| | **Πληρωμή τώρα** Πληρώστε τώρα όλο το ποσό. | **Ευέλικτες πληρωμές με Klarna** Πληρώστε τώρα όλο το ποσό ή σε 30 ημέρες ή σε 3 άτοκες δόσεις των x.xx€. | | **Πληρωμή αργότερα** Πληρώστε σε 30 ημέρες. | | | **Πληρωμή σε 3 άτοκες δόσεις** Πληρώστε σε 3 άτοκες δόσεις των x.xx€. | | #### Payment Button approaches | **Copy** | **EL-GR** | |---------------|------------------------| | Without badge | Συνέχεια με την Klarna | | With badge | Συνέχεια με Klarna | ### **Hungary** | **Payment Category** | **EN-HU** | **HU-HU** | |----|----|----| | `pay_now` | Pay in full today | Fizess most\< | | `pay_later` | Pay later | Fizess később | | `pay_over_time` | Pay in 3 | Fizess 3 részletben | | `klarna` | Flexible payments with Klarna | Rugalmas fizetési lehetőségek a Klarnával | #### Payment Descriptors Approaches - **English** | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Flexible payments with Klarna** Pay now, in 30 days, or in 3 installments of x.xx Ft. | | **Pay later** Pay in 30 days. | | | **Pay in 3** Pay in 3 installments of x.xx Ft. | | - **Hungarian** | **Three options approach** | **Single option approach** | |----|----| | **Fizess most** Fizesd ki a teljes összeget most. | **Rugalmas fizetési lehetőségek a Klarnával** Fizess ki a teljes összeget most, 30 napon belül, vagy 3 x.xx Ft-os részletben. | | **Fizess később** Fizess 30 napon belül. | | | **Fizess 3 részletben** Fizess 3 x.xx Ft-os részletben. | | #### Payment Button approaches | **Copy** | **HU-HU** | |---------------|------------------| | Without badge | Tovább Klarnával | | With badge | Tovább | ### **Ireland** | **Payment Category** | **EN-IE** | |----------------------|-------------------------------| | `pay_now` | Pay in full today | | `pay_later` | Pay later | | `pay_over_time` | Pay in 3 | | `klarna` | Flexible payments with Klarna | #### Payment Descriptors Approaches - **English** | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Flexible payments with Klarna** Pay now or in 3 installments of €x.xx. | | **Pay in 3** Pay in 3 installments of €x.xx. | | | **Pay later** Pay in 30 days. | | #### Payment Button approaches | **Copy** | **EN-IE** | |---------------|----------------------| | Without badge | Continue with Klarna | | With badge | Continue with | ### **Italy** | Payment Category | EN-IT | IT-IT | |----------------|-----|-----| | `pay_now` | Pay in full today | Paga ora | | `pay_later` | Pay later | Paga dopo | | `pay_over_time` | | | | `klarna` | Flexible payments with Klarna | Pagamenti flessibili con Klarna | #### Payment Descriptors Approaches - **English - without financing** | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Flexible payments with Klarna** Pay now, in 30 days, or in 3 installments of x.xx€. | | **Pay later** Pay in 30 days. | | | **Pay in 3** Pay in 3 installments of x.xx€. | | - **English - with financing** | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Flexible payments with Klarna** Pay now, in 30 days, in 3 installments of x.xx€, or as low as x.xx€/month. | | **Pay later** Pay in 30 days. | | | **Pay over time** Pay in 3 installments of x.xx€ or as low as x.xx€/month. | | - **Italian - without financing** | **Three options approach** | **Single option approach** | |----|----| | **Paga ora** Paga tutto oggi. | **Pagamenti flessibili con Klarna** Paga tutto oggi, dopo 30 giorni o in 3 rate da x.xx€. | | **Paga dopo** Paga dopo 30 giorni. | | | **Paga in 3 rate** Paga in 3 rate da x.xx€. | | - **Italian - with financing** | **Three options approach** | **Single option approach** | |----|----| | **Paga ora** Paga tutto oggi. | **Pagamenti flessibili con Klarna** Paga tutto oggi, dopo 30 giorni, in 3 rate da x.xx€ o a partire da x.xx€/mese. | | **Paga dopo** Paga dopo 30 giorni. | | | **Paga a rate** Paga in 3 rate da x.xx€ o a partire da x.xx€/mese. | | #### Payment Button approaches | **Copy** | **IT-IT** | |---------------|---------------------| | Without badge | Continua con Klarna | | With badge | Continua con | ### **Netherlands** | **Payment Category** | **EN-NL** | **NL-NL** | |----------------------|-------------------|-------------------| | `pay_now` | Pay in full today | Betaal nu | | `pay_later` | Pay later | Betaal later | | `pay_over_time` | Pay in 3 | Betaal in 3 delen | | `klarna` | Pay with Klarna | Betaal met Klarna | #### Payment Descriptors Approaches - **English** | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Pay with Klarna** Pay now, in 30 days, or in 3 installments of € X,XX. | | **Pay later** Pay in 30 days. | | | **Pay in 3** Pay in 3 installments of € X,XX. | | - **Dutch** | **Three options approach** | **Single option approach** | |----|----| | **Betaal nu** Betaal het hele bedrag vandaag. | **Betaal met Klarna** Betaal het hele bedrag vandaag, binnen 30 dagen, of in 3 delen van € X,XX. | | **Betaal later** Betaal binnen 30 dagen. | | | **Betaal in 3 delen** Betaal in 3 delen van € X,XX. | | #### Payment Button approaches | **Copy** | **NL-NL** | |---------------|-----------------------| | Without badge | Verdergaan met Klarna | | With badge | Verdergaan met | ### **Norway** | **Payment Category** | **EN-NO** | **NO-NO** | |----------------------|-------------------|------------------| | `pay_now` | Pay in full today | Betal nå | | `pay_later` | Pay later | Betal senere | | `pay_over_time` | Financing | Delbetaling | | `klarna` | Pay with Klarna | Betal med Klarna | #### Payment Descriptors Approaches - **English** | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Pay with Klarna** Pay now, in 30 days, in 3 installments of x,xx kr or as low as x,xx kr/month. | | **Pay later** Pay in 30 days. | | | **Financing** Pay in 3 installments of x,xx kr or as low as x,xx kr/month. | | - **Norwegian** | **Three options approach** | **Single option approach** | |----|----| | **Betal nå** Betal hele beløpet idag. | **Betal med Klarna** Betal nå, om 30 dager, i 3 deler à x,xx kr eller fra x,xx kr per måned. | | **Betal senere** Betal om 30 dager. | | | **Delbetaling** Betal i 3 deler à x,xx kr eller fra x,xx kr per måned. | | #### Payment Button approaches | **Copy** | **NB-NO** | |---------------|---------------------| | Without badge | Fortsett med Klarna | | With badge | Fortsett med | ### **Poland** | **Payment Category** | **EN-PL** | **PL-PL** | |----|----|----| | `pay_now` | Pay in full today | Zapłać teraz | | `pay_later` | Pay later | Zapłać później | | `pay_over_time` | Pay in 3 | Zapłać w 3 ratach | | `klarna` | Flexible payments with Klarna | Elastyczne płatności z Klarną | #### Payment Descriptors Approaches - **English** | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Flexible payments with Klarna** Pay now, in 30 days, or in 3 installments of x,xx zl. | | **Pay later** Pay in 30 days. | | | **Pay in 3** Pay in 3 interest-free installments of x,xx zl. | | - **Polish** | **Three options approach** | **Single option approach** | |----|----| | **Zapłać teraz** Zapłać całość dzisiaj. | **Elastyczne płatności z Klarną** Zapłać całość dzisiaj, za 30 dni lub w 3 ratach po x,xx zl. | | **Zapłać później** Zapłać za 30 dni. | | | **Zapłać w 3 ratach** Płatność w 3 ratach po x,xx zl. | | #### Payment Button approaches | **Copy** | **PL-PL** | |---------------|--------------------| | Without badge | Kontynuuj z Klarna | | With badge | Kontynuuj z | ### **Portugal** | **Payment Category** | **EN-PT** | **PT-PT** | |----|----|----| | `pay_now` | Pay in full today | Paga agora | | `pay_later` | Pay later | Paga mais tarde | | `pay_over_time` | Pay in 3 | Paga em 3 prestações | | `klarna` | Flexible payments with Klarna | Pagamentos flexíveis com Klarna | #### Payment Descriptors Approaches - **English** | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Flexible payments with Klarna** Pay now, in 30 days, or in 3 installments of x,xx €. | | **Pay later** Pay in 30 days. | | | **Pay in 3** Pay in 3 installments of x,xx €. | | - **Portuguese** | **Three options approach** | **Single option approach** | |----|----| | **Paga agora** Paga hoje na totalidade. | **Pagamentos flexíveis com Klarna** Paga agora, a 30 dias ou em 3 prestações de x,xx €. | | **Paga mais tarde** Paga a 30 dias. | | | **Paga em 3 prestações** Paga em 3 prestações de x,xx €. | | #### Payment Button approaches | **Copy** | **PT-PT** | |---------------|----------------------| | Without badge | Continuar com Klarna | | With badge | Continuar com | ### **Romania** | **Payment Category** | **EN-RO** | **RO-RO** | |----|----|----| | `pay_now` | Pay in full today | Plătește acum | | `pay_later` | Pay later | Plătește mai târziu | | `pay_over_time` | Pay in 3 | Plătește în 3 | | `klarna` | Flexible payments with Klarna | Plăți flexibile cu Klarna | #### Payment Descriptors Approaches - **English** | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Flexible payments with Klarna** Pay now, in 30 days, or in 3 installments of x,xx lei. | | **Pay later** Pay in 30 days. | | | **Pay in 3** Pay in 3 installments of x,xx lei. | | - **Romanian** | **Three options approach** | **Single option approach** | |----|----| | **Plătește acum** Plătește integral astǎzi. | **Plăți flexibile cu Klarna** Plătește acum, în 30 de zile sau în 3 rate în valoare de x,xx lei. | | **Plătește mai târziu** Plătește în 30 de zile. | | | **Plătește în 3** Plătește în 3 rate în valoare de x,xx lei. | | #### Payment Button approaches | **Copy** | **RO-RO** | |---------------|--------------------| | Without badge | Continuă cu Klarna | | With badge | Continuă cu | ### **Slovakia** | **Payment Category** | **EN-SK** | **SK-SK** | |----|----|----| | `pay_now` | Pay in full today | Zaplať teraz | | `pay_later` | Pay later | Zaplaťneskôr | | `pay_over_time` | Pay in 3 | Zaplať v 3 platbách | | `klarna` | Flexible payments with Klarna | Flexibilné platby s Klarnou | #### Payment Descriptors Approaches - **English** | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Flexible payments with Klarna** Pay now, in 30 days, or in 3 installments of x,xx €. | | **Pay later** Pay in 30 days. | | | **Pay in 3** Pay in 3 installments of x,xx €. | | - **Slovak** | Three options approach | Single option approach | |----------------------|----------------------| | Zaplať teraz Zaplať celú čiastku dnes. | Flexibilné platby s Klarnou Zaplať celú čiastku dnes, za 30 dní, alebo v 3 bezúročných platbách po x,xx €. | | Zaplaťneskôr Zaplať za 30 dní. | | | Zaplať v 3 platbách Zaplať v 3 bezúročných platbách po x,xx €. | | #### Payment Button approaches | **Copy** | **SK-SK** | |---------------|-----------| | Without badge | | | With badge | | ### **Spain** | Payment Category | EN-ES (without financing) | ES-ES (without financing) | |----------------|-------------------------|-------------------------| | `pay_now` | Pay in full today | Paga el total hoy | | `pay_later` | Pay later | Paga más tarde | | `pay_over_time` | | | | `klarna` | Flexible payments with Klarna | Pagos flexibles con Klarna | #### Payment Descriptors Approaches - **English without financing** | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Flexible payments with Klarna** Pay now, in 30 days, or in 3 installments of x.xx €. | | **Pay later** Pay in 30 days. | | | **Pay in 3** Pay in 3 installments of x.xx €. | | - **Spanish without financing** | **Three options approach** | **Single option approach** | |----|----| | **Paga el total hoy** Sin comisiones ni intereses. | **Pagos flexibles con Klarna** Paga el total hoy, paga en 30 días o en 3 plazos de X.XX €. | | **Paga más tarde** Paga en 30 días. | | | **Divide el coste** Paga en 3 plazos de X.XX €. | | - **English with financing** | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Flexible payments with Klarna** Pay now, in 30 days, in 3 installments of x.xx€ or as low as x.xx€/month. | | **Pay later** Pay in 30 days. | | | **Financing** Pay in 3 installments of x.xx€ or as low as x.xx€/month. | | - **Spanish with financing** | **Three options approach** | **Single option approach** | |----|----| | **Paga el total hoy** Sin comisiones ni intereses. | **Pagos flexibles con Klarna** Paga ahora, en 30 días, en 3 plazos de x,xx €, o desde x,xx € /mes. | | **Paga más tarde** Paga en 30 días.   | | | **Divide el coste** Paga en 3 plazos de X.XX € o desde x,xx € /mes. | | #### Payment Button approaches | **Copy** | **ES-ES** | |---------------|----------------------| | Without badge | Continuar con Klarna | | With badge | Continuar con | ### Sweden | **Payment Category** | **EN-SE** | **SV-SE** | |----------------------|-------------------|-------------------| | `pay_now` | Pay in full today | Betala direkt | | `pay_later` | Pay later | Betala senare | | `pay_over_time` | Financing | Dela upp | | `klarna` | Pay with Klarna | Betala med Klarna | #### Payment Descriptors Approaches - **English** | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Pay with Klarna** Pay now,  in 3 installments of x.xx kr or as low as x.xx kr/month, in 30 days or with monthly invoice. | | **Pay later** Pay in 30 days or with monthly invoice. | | | **Financing** Pay in 3 installments of x.xx kr or as low as x.xx kr/month. | | - **Swedish** | **Three options approach** | **Single option approach** | |----|----| | **Betala direkt** Betala hela beloppet idag. | **Betala med Klarna** Betala hela beloppet idag, i 3 delar om x.xx kr eller från x.xx kr/månad, inom 30 dagar eller med månadsfaktura. | | **Betala senare** Betala om 30 dagar eller med månadsfaktura. | | | **Dela upp** Betala i 3 delar om x.xx kr eller från x.xx kr/månad. | | #### Payment Button approaches | **Copy** | **SV-SE** | |---------------|---------------------| | Without badge | Fortsätt med Klarna | | With badge | Fortsätt med | ### **Switzerland** | **Payment Category** | **EN-CH** | **DE-CH** | **FR-CH** | **IT-CH** | |----|----|----|----|----| | `pay_now` | Pay in full today | Sofort bezahlen | Payer maintenant | Paga ora | | `pay_later` | Pay later | Später bezahlen | Payer dans 30 jours | Paga dopo | | `pay_over_time` | 3 interest-free installments | 3 zinsfreie Teilzahlungen | Payer en 3 fois sans frais | Dividi il costo | | `klarna` | Pay with Klarna | Flexibel bezahlen | Paiements flexibles avec Klarna | Paga con Klarna | #### Payment Descriptors Approaches - **English** | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Pay with Klarna** Pay now, in 30 days or over two months. | | **Pay later** Pay in 30 days. | | | **3 interest-free installments** Pay over two months. | | - **German** | **Three options approach** | **Single option approach** | |----|----| | **Sofort bezahlen** Bezahle sicher und schnell per Sofortüberweisung. | **Flexibel bezahlen** Bezahle sicher und schnell per Sofortüberweisung, in bis zu 30 Tagen oder über zwei Monate. | | **Später bezahlen** Bezahle in bis zu 30 Tagen. | | | **3 zinsfreie Teilzahlungen** Bezahle über zwei Monate. | | - **French** | **Three options approach** | **Single option approach** | |----|----| | **Payer maintenant** Payer la totalité aujourd’hui. | **Paiements flexibles avec Klarna** Payer la totalité aujourd’hui, plus tard ou en 3 versements. | | **Payer dans 30 jours** Payer plus tard. | | | **Payer en 3 fois sans frais** Payer en 3 versements. | | - **Italian** | **Three options approach** | **Single option approach** | |----|----| | **Paga ora** Paga tutto oggi. | **Paga con Klarna** Paga tutto oggi, dopo 30 giorni o in 3 rate senza interessi. | | **Paga dopo** Paga dopo 30 giorni. | | | **Dividi il costo** Paga in 3 rate senza interessi. | | #### Payment Button approaches | **DE-CH** | **FR-CH** | **IT-CH** | |---------------|-------------------|-----------------------| | Without badge | Weiter mit Klarna | Continuer avec Klarna | | With badge | Weiter mit | Continuer avec | ### United Kingdom | **Payment Category** | **EN-GB** | |----------------------|-------------------| | `pay_now` | Pay in full today | | `pay_later` | Pay later | | `pay_over_time` | Pay over time | | `klarna` | Pay with Klarna | #### Payment Descriptors Approaches | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Pay with Klarna** Pay now, in 30 days, in 3 instalments of £x.xx, or as low as £x.xx/month. | | **Pay later** Pay in 30 days. | | | **Pay over time** Pay in 3 instalments of £x.xx or pay as low as £x.xx/month. | | #### Payment Button approaches | **EN-GB** | |---------------| | Without badge | | With badge | ## Americas ### **Canada** | **Payment Category** | **EN-CA** | **FR-CA** | |----|----|----| | `pay_now` | Pay in full today | Payez maintenant | | `pay_later` | Pay later | Payez plus tard | | `pay_over_time` | Pay over time | Payez dans le temps | | `klarna` | Flexible payments with Klarna | Paiements flexibles avec Klarna | #### Payment Descriptors Approaches - **English** | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Flexible payments with Klarna** Pay now, in 4 payments of \$x.xx, or as low as \$x.xx/month. | | **Pay over time** Pay in 4 payments of \$x.xx or as low as \$x.xx/month. | | | ***Pay later*** *Pay in 30 days.* | | - **French** | **Three options approach** | **Single option approach** | |----|----| | **Payez maintenant** Payez la totalité aujourd'hui. | **Paiements flexibles avec Klarna** Payez la totalité aujourd'hui, ou en 4 versements de x,xx \$, ou à x,xx \$/mois. | | **Payez dans le temps** Payez en 4 versements de x,xx \$ ou aussi peu que x,xx \$/mois. | | | ***Payez plus tard*** *Payez en 30 jours.* | | #### Payment Button approaches | **EN-CA** | **FR-CA** | |---------------|----------------------| | Without badge | Continue with Klarna | | With badge | Continue with | ### **Mexico** | **Payment Category** | **EN-MX** | **ES-MX** | |----------------------|-----------------|-----------------| | `pay_over_time` | Pay with Klarna | Paga con Klarna | | `pay_later` | Pay later | Paga después | | `klarna` | Pay with Klarna | Paga con Klarna | #### Payment Descriptors Approaches | **Two options approach** | **Single option approach** | |----|----| | **Paga con Klarna** Paga en 4 cuotas de \$x.xx. | NA | | **Paga después** Paga en 30 días. | NA | #### Payment Button approaches | **ES-MX** | |---------------| | Without badge | | With badge | ### **United States** | **Payment Category** | **EN-US** | **ES-US** | |----------------------|-------------------|-----------------| | `pay_now` | Pay in full today | Paga ahora | | `pay_later` | Pay later | Paga después | | `pay_over_time` | Pay over time | Paga a plazos | | `klarna` | Pay with Klarna | Paga con Klarna | #### Payment Descriptors Approaches - **English** | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Pay with Klarna** Pay now, in 30 days, in 4 payments of \$x.xx, or as low as \$x.xx/month. | | **Pay later** Pay in 30 days. | | | **Pay over time** Pay in 4 payments of \$x.xx, or pay as low as \$x.xx/month. | | - **Spanish** | **Three options approach** | **Single option approach** | |----|----| | **Paga ahora** Paga el total hoy. | **Paga con Klarna** Paga el total hoy, en 30 días, en 4 pagos de \$x.xx, o desde \$x.xx al mes. | | **Paga después** Paga en 30 días. | | | **Paga a plazos** Paga en 4 pagos de \$x.xx, o desde \$x.xx al mes. | | #### Payment Button approaches | **EN-US** | **ES-US** | |---------------|----------------------| | Without badge | Continue with Klarna | | With badge | Continue with | ## Asia and Oceania ### **Australia** | **Payment Category** | **EN-AU** | |----------------------|-------------------------------| | `pay_now` | Pay in full today | | `pay_later` | Pay later | | `pay_over_time` | Pay in 4 | | `klarna` | Flexible payments with Klarna | #### Payment Descriptors Approaches | **Three options approach** | **Single option approach** | |----|----| | **Pay in full today** No fees, no interest. | **Flexible payments with Klarna** Pay now, in 4 payments of \$x.xx or in 30 days. | | **Pay later** Pay in 30 days. | | | **Pay in 4** Pay in 4 payments of \$x.xx. | | #### Payment Button approaches | **EN-AU** | |---------------| | Without badge | | With badge | ### **New Zealand** | **Payment Category** | **EN-NZ** | |----------------------|-----------------| | `pay_over_time` | Pay with Klarna | | `pay_later` | Pay later | | `klarna` | Pay with Klarna | #### Payment Descriptors Approaches | **Two options approach** | **Single option approach** | |----|----| | **Pay with Klarna** Pay in 4 payments of \$x.xx. | NA | | **Pay later** Pay in 30 days. | NA | #### Payment Button approaches | **EN-NZ** | |---------------| | Without badge | | With badge | --- # Source: https://docs.klarna.com/payments/web-payments/additional-resources/payment-method-grouping.md # Payment methods availability ## Learn about Klarna payment methods when loading Klarna’s widget. We organize the payment methods into groups to display them under intuitive labels for your customers. In the following table, you can see our offering of payment methods. We return the payment method identifier when creating the order. These appear when loading the Klarna payments widget. | Payment method identifier | Type of payment method | |---------------------------|------------------------| | DIRECT_DEBIT | Pay now | | DIRECT_BANK_TRANSFER | Pay now | | PAY_BY_CARD | Pay now | | INVOICE | Pay later | | PAY_LATER_BY_CARD | Pay later | | SLICE_IT_BY_CARD | Pay over time | | FIXED_SUM_CREDIT | Pay over time | --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/payments-for-shopify.md # Klarna Payments for Shopify ## Integrate Klarna Payments into your Shopify store using the Klarna Payments app to offer region-specific payment options with a single Merchant ID and supported currencies. ### Direct integration The Klarna Payments app on Shopify adds Klarna as a direct, additional payment method, for all Klarna payments regions, supported by Klarna. To integrate Klarna as an alternative payment method with your store, please [follow the integration steps from Klarna.Docs](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/how-to-install-klarna-payments-on-shopify). This integration allows your store to be connected to a single Klarna Merchant ID. Klarna will only be available to customers in the locations configured on your Klarna Merchant ID. The Klarna Payment options (Pay in 4, Pay in 3, Installments, etc.) that will be visible to your customers are determined by market availability. - See the [list of regions supported by Klarna](https://docs.klarna.com/klarna-payments/in-depth-knowledge/puchase-countries-currencies-locales). You will only be able to offer Klarna in the base currency of your Shopify store - multiple currencies on a single Shopify store are not supported. European merchants can support multiple currencies if enabling [Klarna for Shopify Payments](https://docs.klarna.com). --- # Source: https://docs.klarna.com/platform-solutions/issuing-partners/billie/payments-with-billie.md # Payments with Billie ## You can integrate Billie with Klarna if you’re using Klarna payments. ## Overview Billie is the leading provider of Buy Now, Pay Later (BNPL) payment methods for business customers and offers innovative digital payment services for B2B companies. You can easily enable Billie through your existing Klarna integration. Your business customers enjoy payment by invoice with flexible payment terms, while you get paid upfront with zero default risk.  - To learn more about Billie, visit [their website](https://www.billie.io/en/b2b-integration-klarna). - For legal terms, see [Klarna via Billie terms and conditions](https://docs.klarna.com/resources/legal-and-compliance/more-solutions-guidelines/billie-terms-and-conditions/) ## Supported solutions ### Klarna payments To start using Billie’s payment methods in your Klarna payments solution, integrate Billie either using the Klarna payments API or through Computop. For more details and integration guides for both methods, refer to Billie Docs: - [Klarna payments via API](https://docs.billie.io/reference/integration-via-klarna-payments) - [Klarna payments via Computop](https://docs.billie.io/reference/klarna-payments-integration-computop) ## Partnership details Implementing Billie with Klarna gives you a carefree implementation process, it also offers you transparent pricing and countless additional features to get the most out of your money management. | | | |----|----| | **Market availability** | AT, FI, FR, DE, NL, NO, SE, GB, CH, IT, ES, DK | | **Payment solutions** | [Klarna Payments](https://docs.klarna.com/payments/web-payments/before-you-start/what-is-klarna-payments/) | | **Klarna payment methods** | Pay Later (30 days) | | **Partial and full capture** | YES | | **Partial and full refund** | YES | | **Order cancel** | YES | | **Update order** | YES, supports less amount, same or increase amount | | **Update billing or shipping address** | NO | | **Extend authorization time** | YES | | **Trigger resend of customer communication** | NO | | **Add shipping info to a capture** | NO | | **Release remaining authorization** | YES | | **Recreate cancelled/expired order** | NO | | **Crossborder support** | YES | --- # Source: https://docs.klarna.com/platform-solutions/acquiring-partners/kustom/payments-with-kustom.md # Payments with Kustom ## Accelerate business growth with Kustom’s modern checkout platform by integrating Klarna’s flexible payment options for a customizable, scalable, and globally optimized shopping experience. ## Overview Kustom is a modern checkout platform built to offer merchants maximum flexibility and control—while keeping the trusted Klarna payment experience fully integrated. Through Kustom, you can offer Klarna’s full payment suite—including Pay Now, Pay Later, and Financing—within a customizable and scalable checkout. It’s built for global reach, supports a wide range of payment methods, and delivers a smooth, fast experience for shoppers. Klarna and Kustom work seamlessly together to help businesses grow—combining a best-in-class checkout experience with Klarna’s proven payment solutions. Learn more on how to enable Klarna with Kustom [here](https://docs.kustom.co/). --- # Source: https://docs.klarna.com/platform-solutions/acquiring-partners/mollie/payments-with-mollie.md # Payments with Mollie ## Mollie is a payment service provider offering payment solutions for businesses of all sizes to sell and grow effectively. ## Overview Mollie is a platform to get paid and simplify finances of your store. Developed to drive revenue, reduce costs, and manage funds on a single platform, Mollie supports both online and in-person payments and is fully integrated with Klarna payment methods. - To learn more about Mollie, visit [their website](https://www.mollie.com/payments/klarna-pay-later). --- # Source: https://docs.klarna.com/platform-solutions/acquiring-partners/nuvei/payments-with-nuvei.md # Payments with Nuvei ## Overview Klarna has joined forces with Nuvei, a leading global payment technology company renowned for its multi‐currency platform and extensive suite of payment solutions, to deliver a seamless, secure, and scalable checkout experience. Through our agreements with Nuvei Global Services and Nuvei Limited, developers can tap into Nuvei’s innovative tools, designed to optimize transaction efficiency and support a wide array of payment methods, while leveraging Klarna’s expertise in risk management and customer‐friendly checkout. Whether you’re operating in restricted verticals like Gaming, Gambling, or Crypto or serving EU merchants under a Merchant of Record (MoR) model, our partnership with Nuvei makes it easy to integrate reliable bank transfers, accept diverse payment options, and expand your business globally with confidence. ### Integration Paths 1. [Klarna Debit Risk](https://docs.nuvei.com/documentation/europe-guides/klarna-pay-now/) - A payment option starting with the “Pay by Bank” designed exclusively for partners from restricted segments such as Gaming, Gambling and Crypto (see Klarna [Ethical instructions](https://docs.klarna.com/resources/legal-and-compliance/policies-and-term-of-service/ethical-instructions/) for more information on restricted segments). By offering this specialized product, we ensure that partners from restricted segments can access a reliable and efficient bank transfer solution. 2. [Klarna Payments](https://docs.nuvei.com/documentation/europe-guides/klarna/) (MoR) - Available to EU merchants. - Integrates directly via Merchant of Record (MoR) setup for seamless transactions. 3. Nuvei Connect - Tailored for enterprise-level merchants who opt out of MoR integration. For enterprise inquiries and setup approvals, please contact our support team for assistance. We are committed to supporting your business' payment needs effectively and efficiently. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/optimizely/payments-with-optimizely.md # Payments with Optimizely ## Optimizely offers a digital experience platform for content creation, e-commerce, and digital marketing all in one place. ## Overview Commerce Connect from Optimizely enables merchants to deploy seamlessly, iterate fast, and launch buying experiences that grow revenue. By crafting compelling purchase experiences that push seamlessly to your CMS so you can delight buyers, enhance your brand appeal, and turn engagement into sales. Commerce Connect plugins enables you to easily enable Klarna Payment and Order management. To learn more about Optimizely visit [their website](https://www.optimizely.com/products/content-management/commerce-connect/). --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopware/payments-with-shopware.md # Payments with Shopware ## Shopware offers a comprehensive e-commerce solution that enables maximum flexibility, full scalability, and expert support every step of the way. ![Payments_with_Shopware_1753885906890.png](Payments_with_Shopware_1753885906890.png) *Payments_with_Shopware_1753885906890.png* ## Overview The installation of Klarna Payments in two main ways: 1. You can obtain and configure the extension directly during the installation of Shopware in the initial setup wizard. 2. You can also license the Klarna Payments extension directly in the Shopware Store at [store.shopware.com](http://store.shopware.com/). - You can then download and install the extension under **Extensions\> My Extensions**.  - It is important that you have previously logged in with your account in the Shopware Account tab. - After the extension has been installed, you can activate it using the button to the left of the extension. The Klarna plugin for Shopware 6 offers Klarna payments, Express Checkout, Sign in with Klarna and Order management. To learn more about Klarna via Shopware please see [the documentation here](https://klarna-shopware.426-upgrade.com/index.html). --- # Source: https://docs.klarna.com/platform-solutions/acquiring-partners/worldpay/payments-with-worldpay.md # Payments with Worldpay ## Worldpay is a global leader in payment processing solutions, providing a comprehensive range of services to help businesses of all sizes accept payments securely and efficiently. ## Overview For merchants, Worldpay presents an extensive suite of services tailored to streamline payment processing and enhance transactional efficiency. This includes secure card processing for all major credit and debit cards, as well as support for alternative payment methods across all channels such as online payments, mobile transactions, and in-person payments. - To learn more about Worldpay and how to enable Klarna, visit [their website](https://docs.worldpay.com/apis/wpg/apms/klarna). --- # Source: https://docs.klarna.com/resources/business-tools/merchant-portal-guide/payments.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/payments.md # Klarna Payments in Salesforce Commerce Cloud ## Klarna Payments enables merchants to integrate flexible payment options like Pay Now, Pay Later, and Financing. It supports easy configuration through the Business Manager, enhancing the checkout experience and boosting conversion rates. Advanced features include virtual card settlements and streamlined fraud management for secure and efficient transactions. ## Key features **Integrate Klarna Payments using Best Practices** - Available for international markets including North America, Europe, and Oceania. - Klarna Payments on SFRA can be configured independently on each site by region. - Supports multiple Klarna payment methods: Pay Now, Pay Later, and Pay Over Time. - Quick integration with a virtual card-based approach for settlement. - Compliant with GDPR (EU) standards for checkout flow. - Supports multi-shipping addresses. **Payment and Notification Handling** - Handles notifications for pending status updates (`reject`/`accept`) for suspected orders after review. - Supports Klarna authorization with finalization for bank transfer methods (Pay Now). - Supports Auto-Capture of payments. **Advanced Features** - BOPIS (Buy Online, Pickup in Store) support, including additional merchant data. - Supports Klarna payment method-based promotions. - Supports adjusted price promotions under the Gross Tax Policy. ## Klarna Payments cartridge integration The Klarna cartridge utilizes the Klarna Payments JSON REST API and JavaScript SDK for storefront integration. This integration displays various payment options via the Klarna widget. **Customer Interaction** Customers select Klarna as their payment method, review the payment terms, and authorize payment by clicking the "Place Order" button. **Order Creation** Upon authorization, a Klarna order is created, and the customer is redirected to the confirmation page. **Fraud Status Management** - Orders with a fraud status of `ACCEPTED` proceed with standard order creation in the SCC. ![ Klarna Payment Details in Business Manager](ZuBY_RoQrfVKl7I9_SFCC-KlarnaPaymentDetailsinBM.jpeg) *Klarna Payment Details in Business Manager* - Orders with a `PENDING` status undergo further review. If later accepted as `FRAUD_RISK_ACCEPTED`, the SCC order status updates accordingly. ![ Klarna Payment Details in Business Manager](ZuBZaxoQrfVKl7Jp_SFCC-KlarnaPaymentDetailsinBM2.jpeg) *Klarna Payment Details in Business Manager* ### Key Attributes and Business Manager Details - **Custom Attribute for Payment Status:** The fraud status of Klarna Payments is stored in a custom attribute `kpFraudStatus` within the PaymentTransaction system object. - **Business Manager View:**This status is visible in the Business Manager on the order details Payment tab. ## Locales The Klarna Payments cartridge supports multiple locales, ensuring a seamless experience for a global customer base. Supported locales include: - English - Danish - Dutch - Finnish - French - German - Italian - Polish - Spanish - Swedish For a comprehensive list of the 25+ supported locales, please check [here](https://docs.klarna.com/payments/web-payments/before-you-start/data-requirements/puchase-countries-currencies-locales.md). --- # Source: https://docs.klarna.com/payments/after-payments/order-management/more-actions/pending-orders.md # Pending orders ## Learn how we handle the orders we detect as potentially fraudulent and how you help us in this process. When we find suspicious orders, we ask you to delay the shipment so that we can perform a manual assessment and come to a resolution. While the assessment occurs, we set the orders' status to pending. This functionality is only available for merchants in the US and UK and isn't enabled by default, it needs to be activated for your account upon request. In a nutshell, the pending orders process implies: 1. We identify an order as potentially fraudulent. 2. We set the order's status to pending. 3. We assess the order manually. 4. After the assessment is completed, we send you the order's status. 5. You check the order's status and inform your customer. ## During the fraud assessment Once your customer pays with Klarna and an order is created, we perform a fraud assessment. This step is reflected in the order through the parameter `fraud_status`, with the possible values of `ACCEPTED`, `REJECTED`, or `PENDING`. If the `fraud_status` parameter is set to `PENDING`, the order is under fraud assessment. We put it on hold and ask you not to ship it until we finish the order review. During this step, you have to notify your customer that the order is in progress and the shipment won't occur immediately. ## After the fraud assessment Usually, the assessment process takes us from 4 to 8 business hours, but it could last a maximum of 24 hours. After we complete the assessment, the `fraud_status` parameter in the order is set to `ACCEPTED` or `REJECTED`, depending on our resolution. ### Events and notifications When we have the assessment resolution, we'll inform you through HTTP push notifications. We send a `POST` request to the notification URL you included when [initiating a payment](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/other-actions/authorization-callback.md). The body of the `POST` request includes the `order_id`, the timestamp of the decision in [this date format](https://docs.klarna.com/klarna-payments/api), and one of the following events: - `FRAUD_RISK_ACCEPTED`: An order was accepted after the assessment. - `FRAUD_RISK_REJECTED`: An order was rejected after the assessment. When you have pending orders activated, the two possible initial values for the `fraud_status` parameter are: - `ACCEPTED`: We automatically accepted the order when it was created. - `PENDING`: We're waiting for the fraud assessment. After the assessment, the `fraud_status` parameter can change from `PENDING` to the `FRAUD_RISK_ACCEPTED` or `FRAUD_RISK_REJECTED` status. We'll send you push notifications about the assessment when the `fraud_status` changes. We send the notifications every 10 minutes for 24 hours or until you reply to our `POST` request with a `200` code. After 24 hours, we stop sending notifications. The following is an example of a notification for an accepted order after a fraud assessment: ``` json { "order_id": "de305d54-75b4-431b-adb2-eb6b9e546014", "event_type": "FRAUD_RISK_ACCEPTED" } ``` Sample of a notification after fraud assessment. We highly recommend you validate the notification. You can \[ check the details of your order\] and confirm that the `fraud_status` parameter matches the notification. ## Overriding the fraud resolution You can override our resolution of the fraud assessment and reject an order we accepted or, the other way around, accept an order we rejected. To reject an order we accepted, you simply send an API request to \[ cancel the order\]. To accept an order we rejected, you have to capture it within 4 hours after receiving the `POST` request and send an API request to [capture the order](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api/capture-and-track-orders.md). By accepting an order we rejected, you take over any fraud risk related to the order. Besides, if you don't capture the order within 4 hours, we'll cancel the order. --- # Source: https://docs.klarna.com/payments/get-started/perfect-customer-journey.md # Perfect Customer Journey ## Create a smooth and high-converting experience by following UX guidelines that cover every step of the purchase journey, from awareness to post-purchase, with best practices for consistent, effective integration. ## Klarna end-to-end consumer journey Deliver a fast, flexible, and trusted shopping experience with for 100M Klarna consumers. By following these UX best practices, you’ll unlock the full potential of your Klarna integration—boosting checkout conversion, increasing consumer satisfaction, and driving higher average order values. Partners who implement Klarna using these guidelines see faster checkouts, more returning users, and fewer abandoned carts.
![e2e_pdp_pagee.png](e2e_pdp_pagee.png) *e2e_pdp_pagee.png* ![KP_full_checkout.png](KP_full_checkout.png) *KP_full_checkout.png* ![e2e_tdp_line_items.png](e2e_tdp_line_items.png) *e2e_tdp_line_items.png*

On-site messaging and Express Checkout in Product Page

Klarna presentation in Checkout

Post-purchase details in Klarna app transaction page

From the **homepage** to **product detail pages**, **cart**, **checkout**, **email communications**, and **post-purchase interactions**, Klarna tools like **On-site messaging**, **Sign in with Klarna**, **Express Checkout**, and **Checkout Presentation** serve as powerful enablers. These features support users at every phase—building trust, simplifying access, and removing friction where it matters most. ## Homepage ![top_strip_footer_e2e_osm.png](top_strip_footer_e2e_osm.png) *top_strip_footer_e2e_osm.png* #### **Site-wide banners** Let your shoppers know about their payment options as early as possible using our banners to drive conversion and AOV. 1. **Banner:** Place a banner at the very top of your site using [On-site messaging](https://docs.klarna.com/conversion-boosters/on-site-messaging/before-you-start/) so every visitor instantly sees the flexible payment option to increase awareness as soon as the consumer arrives. Apply it at the following touch-points for highest impact: homepage, site wide or sidebar. 2. **Payment Method Footer:** In the footer of every page, display the official Klarna logo alongside other payment icons using [On-site messaging](https://docs.klarna.com/conversion-boosters/on-site-messaging/before-you-start/). This fosters trust by showing Klarna as a visible, transparent payment option through out the purchase journey. ![faq_page_e2e_osm.png](faq_page_e2e_osm.png) *faq_page_e2e_osm.png* #### **Klarna FAQ or Info Page** ​Reduce friction and enhance shopper confidence by integrating Klarna’s dynamic FAQ landing page into your site using [On-site messaging](https://docs.klarna.com/conversion-boosters/on-site-messaging/before-you-start/). This resource provides clear, localized information about how Klarna works—empowering customers to make informed decisions with less hesitation. For maximum visibility, we recommend adding a link to this page in your site’s footer, where users naturally look for support or payment details. Key benefits include: - Messaging tailored for each market - Always compliant with local regulations - Contributes to reducing errands By proactively answering common questions, the FAQ page helps streamline the purchase journey and supports higher conversion rates. ## Social Login using Sign in with Klarna ![siwk_e2e_login.png](siwk_e2e_login.png) *siwk_e2e_login.png* **[Sign in with Klarna](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/before-you-start/)** allows users to authenticate using Klarna credentials, reducing friction and pre-filling personal details at checkout. It also gives you access to user data for personalization. The Sign in with Klarna button should always be placed wherever you have account creation, login options or where other social logins are provided: - **Home/login/register pages** – Place the Sign in with Klarna button prominently as a quick-start method. - **Checkout login gate** – Speed up guest checkout or account login. - **Account linking** – Let returning users connect their Klarna account to pre-fill future checkouts. ## Product page Increase shoppers perceived spending power by creating awareness of Klarna as a payment option on the product detail page. Integrate Klarna’s On-Site Messaging so that the price and payment options are considered together and utilize the Express Checkout button to enable a on-click checkout. ![e2e_pdp_kec_osm.png](e2e_pdp_kec_osm.png) *e2e_pdp_kec_osm.png* 1. [**On-site messaging**](https://docs.klarna.com/conversion-boosters/on-site-messaging/before-you-start/) **:** Place Klarna’s dynamic messaging widget directly beneath the product price. This widget dynamically shows a tailored pay-later offering (e.g. “Pay €20/month with Klarna” or “Pay in 4 interest-free payments”) based on the item price. Make shoppers aware of their spending power by clearly communicating flexible payment plans, which can increase average order value by ~25% and boost conversion. 2. **[Express Checkout](https://docs.klarna.com/conversion-boosters/express-checkout/before-you-start/):** Place the Express checkout button close to the Add to cart button on the product page. Offer returning Klarna users a one-click experience that reduces friction and captures impulse purchases by streamlining the route to purchase and boosting conversion. Express Checkout can make checkout 5x faster than normal. ## Cart Page Decrease cart abandonments by reminding customers about your flexible payment options at a critical decision making stage of the shopper journey. Use tailored dynamic messaging to communicate payment methods, rewards and offers in a way that is always compliant. ![cart_e2e_osm_kec.png](cart_e2e_osm_kec.png) *cart_e2e_osm_kec.png* 1. [**On-site messaging**](https://docs.klarna.com/conversion-boosters/on-site-messaging/before-you-start/) **:** Place Klarna’s dynamic messaging widget directly near the cart total or order summary. This widget dynamically shows a tailored pay-later offering (e.g. “Pay in 4 interest-free payments”) based on the item price. Make shoppers aware of their spending power, which can increase average order value by ~25% and boost conversion. 2. **[Express Checkout](https://docs.klarna.com/conversion-boosters/express-checkout/integrate-express-checkout/integrate-one-step-express-checkout/):** Place the Express checkout button below your standard “Proceed to Checkout” button on the cart page. Offer returning Klarna users a one-click experience that pre-fills details and fast-tracks ready shoppers to complete their purchase with minimal steps. ## Checkout Page Give over 100 million Klarna shoppers quick access to their preferred payment options. Clear, visible Klarna integration builds trust, reduces drop-off, and boosts conversions. Klarna is to be represented as a single payment option in the checkout. Partners should ensure Klarna is clearly represented, with messaging dynamically retrieved. Here are four core elements to keep in mind: ![checkout_numbered_e2e.png](checkout_numbered_e2e.png) *checkout_numbered_e2e.png* 1. **Klarna’s logo and branding** must be consistent and instantly recognizable across all checkout touch points to reinforce Klarna as a trusted payment method. 2. **Header** introduces Klarna in the payment form and will be dynamically adjusted based on the locale of the customer. 3. **Widget** exposes even more details after selection by loading Klarna’s payment widget inline. 4. **Payment button** well-integrated and recognizable ensures customers understand what happens next, making them feel confident in proceeding with their purchase. For a high-performing Klarna integration, adhere to the following requirements to make sure Klarna is visible to all shoppers: - Increase your sales by ensuring Klarna is visible to all shoppers entering the checkout regardless of the cart size. - Increase your AOV by ensuring Klarna is visible to all shoppers entering the checkout including guest and logged in users. - Unlock your shopper’s purchasing power by ensuring that Klarna is pre-selected when a consumer that has previously paid with Klarna makes a subsequent purchase. - Increase your sales by ensuring Klarna is visible to shoppers entering the checkout with a gift card in their cart. Partners must dynamically retrieve Klarna’s branding, payment descriptors, and personalized messaging via Klarna’s APIs to present accurate, localized, and up-to-date payment options. To learn more about how to dynamically retrieve descriptors refer to [Checkout documentation](https://docs.klarna.com). ## Confirmation Page & Emails After a customer places an order using Klarna, it’s crucial to continue the consistent experience and provide clarity on next steps. This reduces confusion and post-purchase customer support issues. By handling the confirmation stage in this way, you show customers that **Klarna is a trusted part of your overall service**. They won’t be left wondering about their payment, and they’ll appreciate the seamless communication, making them more likely to shop with you (and use Klarna) again.
![e2e_merchant_success_page.png](e2e_merchant_success_page.png) *e2e_merchant_success_page.png* ![e2e_merchant_email_2.png](e2e_merchant_email_2.png) *e2e_merchant_email_2.png*

Store's order success page

Store's order confirmation email

Here’s how to get it right: - **Show Klarna as Payment Method:** On the order confirmation page and email, list Klarna as the payment method for the order. - **Explain Next Steps for Payment:** Let the customer know what will happen regarding their Klarna payment. For example, a line on the confirmation page or email can say: *“You will receive an email from Klarna with instructions on how to pay. Download the Klarna app or log in on Klarna’s website to view your payment schedule and manage your payments.”.* Also mention that Klarna’s customer support is available for payment-related questions. For instance: “Questions about your payment plan? Contact Klarna’s support via the app or at [Klarna’s help center](https://www.klarna.com/).” ## Klarna App's transaction details and delivery tracking
![tdp_e2e_transaction.png](tdp_e2e_transaction.png) *tdp_e2e_transaction.png* ![DDP_delivery_e2e.png](DDP_delivery_e2e.png) *DDP_delivery_e2e.png*

Transaction detail page in Klarna App

Delivery tracking in Klarna App

- **[Product Details and Images](https://docs.klarna.com/api/payments/#operation/createCreditSession!path=order_lines/image_url&t=request):** Include missing images (URLs) in the order details to increase repeat purchases and reduce errands. Improve the quality of pictures and get total control of what is shown to end customers. - **[Shipping and Tracking Information](https://docs.klarna.com/api/ordermanagement/#operation/captureOrder!path=shipping_info&t=request):** Increase traffic from Klarna, reduce errands and improve the customer experience by passing the carrier name and tracking ID to Klarna via API. ## Mobile App Integrations Klarna’s Mobile SDK is the official toolkit for integrating Klarna products into native iOS and Android apps. It enables you to offer Klarna’s payment methods with a seamless in-app user experience. The SDK is designed to provide the optimal integration and, under the hood, the SDK handles web-based flows in a mobile-friendly way to reduce friction (e.g. handling cookies, opening bank apps, etc.) compared to a basic WebView integration for a superior customer experience across all mobile platforms.
![Pink_Standard_Consumer_(1).png](Pink_Standard_Consumer_(1).png) *Pink_Standard_Consumer_(1).png* ![Pink_Standard_Consumer_(2).png](Pink_Standard_Consumer_(2).png) *Pink_Standard_Consumer_(2).png* ![Pink_Standard_Consumer_(3).png](Pink_Standard_Consumer_(3).png) *Pink_Standard_Consumer_(3).png* ![KP_full_checkout.png](KP_full_checkout.png) *KP_full_checkout.png*

Sign in with Klarna

On-site Messaging

Express Checkout

Klarna Payments

Klarna Mobile SDK provides a full suite of mobile-first integrations, including Klarna products like: - **Klarna Payments**: Render Klarna’s payment methods with a native interface and a flexible UI, click here to get started with your integration on [iOS](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/native-view/), [Android](https://docs.klarna.com) or [React Native](https://docs.klarna.com) and follow the [Mobile SDK Guidelines](https://docs.klarna.com/payments/mobile-payments/before-you-start/mobile-sdk-guidelines/) for the best performance. - **On-site Messaging**: Show contextual messaging and let your customers know about the available payment options in pre-checkout. Click [here](https://docs.klarna.com/conversion-boosters/on-site-messaging/before-you-start/) to learn more. - **Sign in with Klarna**: Seamlessly identify and let users login via their Klarna account. Click [here](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/before-you-start/) to learn more. - **Express Checkout**: Accelerate your checkout process and boost conversion by offering a one-click checkout. Click [here](https://docs.klarna.com/conversion-boosters/express-checkout/before-you-start/) to learn more. All functionality is wrapped in a single SDK package per platform (iOS, Android, React Native), designed to be lightweight, secure, and developer-friendly. Once Klarna Mobile SDK is integrated into your app, you're covered. The SDK is continuously updated to support new features, system changes, and Klarna platform updates — no additional workarounds required. Just keep the SDK up to date to stay compatible. Learn more in the [Klarna Mobile SDK Guidelines](https://docs.klarna.com/payments/mobile-payments/before-you-start/mobile-sdk-guidelines/). ## Abandoned cart email ![abandoned_email_e2e.png](abandoned_email_e2e.png) *abandoned_email_e2e.png* ​Include Klarna messaging in your abandoned basket email series to remind shoppers they can still get the items they loved—with the added flexibility of Klarna’s installment plans. Clearly highlighting the option to pay over time, you not only reduce friction at checkout but also build trust through Klarna’s well-established reputation. Shoppers are significantly more likely to complete their purchase when they know they have a flexible, secure payment solution they recognize and trust. Incorporating this messaging has been proven to drive higher conversion rates and recover more potentially lost sales. --- # Source: https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/placements.md # On-site messaging Placements ## Here you can find technical details about the placements of the messaging assets. Placements are containers for the different messaging assets we offer. Depending on the type we recommend to place the placements on different pages of your store (cart and product page, Frequently Asked Questions page, or sitewide messaging). You have to specify the placement in the source code of your online store by creating a small html snippet and passing the necessary attributes. The following tables list the placement types and their main characteristics. ## Product and cart placements The placements for the messaging assets that we recommend to appear on the product and cart pages are: ![ An example of a credit-promotion-badge placement](Zp5lGB5LeNNTxXL9_OSM-pdp-brand3.jpeg) *An example of a credit-promotion-badge placement* ![An example of a credit-promotion-auto-size placement|center](OSM2.0-example.png) *An example of a credit-promotion-auto-size placement|center* | Placement types | Characteristics | |----|----| | `credit-promotion-auto-size` | Displays interactive Klarna messaging. Your customers can click on it and expand the information on the payment methods with calculated prices. Mentions Klarna inline as part of the text. | | `credit-promotion-badge` | Displays interactive Klarna messaging. Your customers can click on it and expand the information on the payment methods with calculated prices. Displays Klarna's logo in svg, | ``` html ``` ###### *An example of credit promotion placement snippet* ## Checkout widget A placement type to enhance the user experience by providing detailed information about payment methods, promotions, and unique selling points, streamlining the checkout process for Klarna's partners and merchants. This method guarantees the correct presentation of Klarna across all markets and to all customers, maintaining consistency and simplicity, while providing merchants with the flexibility needed for a globally adaptable checkout experience, aligning with their various customer experience requirements and expectations. ![An example of a checkout widget](Checkout_Widget.jpeg) *An example of a checkout widget* ### Promotions Merchants can choose to run promotions with Klarna, which can help boost their sales. To make the most of these promotions, we strongly recommend merchants incorporate our assets. These assets get updated whenever we offer 0% financing. Key elements like the On-site messaging widget placed in the cart page and the checkout widget are dynamically updated to stay up to date with the latest version available. ![Klarna 0% financing messaging](widget-loaded-promotions.png) *Klarna 0% financing messaging* *Note that "0% financing available" messaging in sub header is not possible in all markets due to requirements on having a link to representative example (which we have in On-site messaging assets).* ``` html ``` ###### *An example of checkout placement snippet* ## Site wide placements The placements for the messaging assets that can be placed sitewide are: ![ An example of a top-strip-promotion-auto-size placement](0cad56d9-24d4-4541-bd70-c0a9b8ebf675_OSM_topstrip-auto-size_2023-02_01.jpeg) *An example of a top-strip-promotion-auto-size placement* ![An example of a top-strip-promotion-badge placement](OSM-topbanner-brand.jpeg) *An example of a top-strip-promotion-badge placement* ![ An example of a footer-promotion-auto-size placement](Zp5UTR5LeNNTxWv9_OSM-footer-brand2.jpeg) *An example of a footer-promotion-auto-size placement* | Placement types | Options | |----|----| | `top-strip-promotion-auto-size` | Recommended as static asset at the top of the pages of your online store. Displays interactive Klarna messaging. Your customers can click on it and expand the information on the payment methods. Mentions Klarna inline as part of the text. | | `top-strip-promotion-badge` | Recommended as static at the top of the pages of your online store. Displays interactive Klarna messaging. Your customers can click on it and expand the information on the payment methods. | | `footer-promotion-auto-size` | Recommended static asset at the bottom of every page of your online store showcasing the payment methods offered via Klarna. | ###### *An example of top strip promotion placement snippet* ``` html ``` ## Frequently Asked Questions placement To inform your customers for the Klarna services offered at checkout you can create a dedicated page and create an FAQ placement: ![ An example of an FAQ page](e74b438e-975e-4033-82c0-73e300ac11e8_OSM_FAQ_cropped_placements_2023-02_01.jpeg) *An example of an FAQ page* | Placement type | Characteristics | |----|----| | `info-page-auto-size` | Displays a FAQ to clarify common questions about buying with Klarna. The FAQ is dynamic based on your configuration and offered payment methods. | ``` html ``` ## Attributes Placement tags contain required and optional attributes which you can adjust to fit your needs. | Attribute | Required | Description | |----|----|----| | `data-key` | Yes | A unique identifier of a placement's type and size. The following values are applicable: top-strip-promotion-auto-size top-strip-promotion-badge credit-promotion-auto-size credit-promotion-badge footer-promotion-auto-size info-page | | `data-locale` | Yes | The language and the billing country of the ad. The following values are applicable: `"en-AT", "de-AT", "nl-BE", "en-BE", "fr-BE", "en-CH", "de-CH", "it-CH", "fr-CH", "en-CZ", "cs-CZ", "de-DE", "en-DE", "da-DK", "en-DK", "es-ES", "en-ES", "fi-FI", "sv-FI", "en-FI", "fr-FR", "en-FR", "en-GB", "en-GR", "el-GR", "en-HU", "en-IE", "en-IT", "hu-HU", "it-IT", "nl-NL", "en-NL", "no-NO", "nb-NO", "en-NO", "en-PL", "pl-PL", "en-PT", "pt-PT", "en-RO", "ro-RO", "sv-SE", "en-SE", "sk-SK, "en-SK", en-CA", "fr-CA", "es-MX", "en-MX", "en-US", "es-US", "en-AU", "en-NZ"`. | | `data-purchase-amount` | Yes | The amount of money in minor units (\$120.00 = 12000), used in amount-based credit promotions. Not required for some placements such as `info-page`. | | `data-theme` | No | Sets a theme to override the default or customised content. The following values are applicable: default dark custom | | `data-custom-payment-method-ids` | No | You can dynamically trigger promotional credit offers. First, work with Klarna’s responsible account manager to determine the criteria for custom offers and a standard naming convention that will be referred to when requesting such offers via Klarna payments API. To be able to advertise these payment methods, pass the names as an array of strings to the On-site messaging placement. The array can be used to define which of the configured payment options within a payment category (`pay_later`, `pay_over_time`, and so on) should be included in the ad selection. | | `data-message-prefix` | No | Prefixes the content of the message. Available for placements with `data-key="credit-promotion-auto-size"` or `data-key="credit-promotion-badge"`when it makes contextual sense. For `data-key="credit-promotion-badge"` prefix should only be used when Klarna badge is positioned to the right side of the placement. Allowed values: `Or`, `or` | | `data-message-preference` | No | This message preference fetches the configuration you need to customize your messaging. Some message preferences are only available for certain placements. The default messaging will be returned automatically if the preferred message preference is not available for this placement. | ###### *An example placement tag with required attributes.* ``` html ``` ### Message preference The message preference is a field intended to return customized messaging according to the preference of the field. The available options are `"klarna", "prequalification", "in-store"`. - `klarna` will return the default message preference. - `prequalification` will return the flow to help customers prequalify for Klarna's select payment plans. - `in-store` will return messages promoting in store usage of klarna. ``` html ``` ![ This is an example to return pre-qualification preference. Prequalification by Klarna is a feature designed to provide customers with transparent information on their spending power and payment options before checkout, aiming to enhance the shopping experience and reduce rejections.](Zxeo34F3NbkBX148_Prequalification-OSM-Credit-promotion-auto-size.jpeg) *This is an example to return pre-qualification preference. Prequalification by Klarna is a feature designed to provide customers with transparent information on their spending power and payment options before checkout, aiming to enhance the shopping experience and reduce rejections.* ### Purchase amount Amount-based placements have to include the `data-purchase-amount `attribute. This attribute delivers messaging with a specific price provided in minor units, where available. You can use these placements in various places across the website, such as cart view, product details page, and product list page. ###### *Example of purchase amount included in the placement tag.* ``` html ``` In this example, the price equals \$1,225.00 if the currency is US dollars. To populate `data-purchase-amount`: - For static values, use the value instead of an empty string, for example, `data-purchase-amount=“12350”`. The value must be is in minor units, so 12350 is \$123,50 if the currency is US dollars. - For dynamic values, use JavaScript. With a single placement on a page, you can use a query selector method, for example, `document.querySelector(‘klarna-placement’).dataset.purchaseAmount = 9999`. However, if you have multiple placements on one page, you have to use a more specific query selector. After updating the values, remember to [refresh placements](https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/placements/#refresh-placements). Don't provide the currency in `data-purchase-amount` . The currency is based on the passed locale. ## Refresh placements In some cases, changes on a website require refreshing placements. The JavaScript library must be informed about the changes to trigger delivery of updated messaging. The most common use cases are: - Loading new content without refreshing a page (that is, Ajax refresh) when the new content contains a placement tag. - Changing the purchase amount, locale or theme for placements dynamically without refreshing the page. - Infinite scrolling on a page with dynamically loaded content on scroll. To refresh placements, you have to call the `refresh` function exposed by OnsiteMessaging on the window.Klarna to inform the JavaScript Library that the placements on the page have been changed. The refresh operation has to be triggered in the code after a change occurs. ``` javascript window.Klarna.OnsiteMessaging.refresh() ``` At the moment, On-site messaging also exposes a `window.KlarnaOnsiteService.push({ eventName: 'refresh-placements' })` function to `refresh-placements`. We aim to drop support for this function at the end of 2023. ``` javascript // To be deprecated, use Klarna.OnsiteMessaging.refresh() window.KlarnaOnsiteService.push({ eventName: 'refresh-placements' }) ``` ## Deprecated placement types We aim to deprecate the following placement types at the end of Q2 2024. Please switch your configuration to the recommended alternatives as outlined in the table below: | Legacy placement type | Recommended replacement | |----|----| | `credit-promotion-small`(same size as standard can be achieved with a width:335px limit on the container) | `credit-promotion-auto-size` | | `credit-promotion-standard` | `credit-promotion-auto-size`(same size as standard can be achieved with a width:350px limit on the container) | | `info-page-standard` | `info-page` (same size as standard can be achieved with a width:900px, height:2000px limit on the container) | | `top-strip-promotion-standard` | `top-strip-promotion-auto-size` (same size as standard can be achieved with a width:350px limit on the container) | | `info-page-auto-size` | `info-page` | --- # Source: https://docs.klarna.com/platform-solutions/acquiring-partners/stripe/payments/post-purchase-management.md # Stripe post purchase management ## Order management Order management occurs entirely within Stripe. Here are some best practices we recommend you follow when managing orders: - Stripe has automatic capture at order placement enabled by default, which is a capability of limited usage for specific merchant categories. To ensure you’re compliant with our [shipping policies](https://www.klarna.com/international/shipping-policies/) and fraud policies, we recommend you issue a [separate authorization and capture](https://stripe.com/docs/payments/klarna/accept-a-payment?platform=web&ui=API#manual-capture). - Stripe supports only one capture per order. Any value remaining on the customer's order is released after the first capture, meaning you can’t recover any remaining value on that order. - When the order is captured, you should add the shipping tracking information. It will be helpful for the customer and is considered a best practice to ensure that the customer can track the status of their order. It also allows Klarna access to relevant dispute data without further contact with your agents. **Usage of automatic capture is restricted to specific business rules and categories.** Please refer to out [guidelines](https://docs.klarna.com/klarna-payments/in-depth-knowledge/automatic-capture) before enabling this functionality. ## Support errands All operations specific to your Klarna orders should occur in the Stripe dashboard or with the help of Stripe support. If you have general questions about Klarna, direct them to Klarna support. ## Disputes Sometimes, simple errors or miscommunication can cause problems with an order. As a result, the customer might open a dispute with us. If that happens, Klarna will email you with regards to a dispute so you can handle it directly. For more information about how to handle disputes, see [Klarna FAQ](https://support.stripe.com/questions/klarna-faq#how-to-manage-disputes-on-klarna-payments). Responding to these disputes quickly and with all relevant and requested information is essential in avoiding unnecessary chargebacks or delays. Please ensure that the email addresses you provide to Stripe when onboarding Klarna are checked and actioned daily. [Learn more about Klarna's dispute process.](https://docs.klarna.com/disputes) ## Customer support If your customers have questions regarding their experience checking out with Klarna, refer them to Klarna customer support directly. To help your customers find the answers they need without involving customer support, you can include a link to the [Klarna FAQs](https://www.klarna.com/customer-service/) or a [small FAQ page](https://docs.klarna.com/on-site-messaging/in-depth-knowledge/placements) about Klarna on your website. --- # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/post-purchase.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/post-purchase.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/post-purchase.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/post-purchase.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/post-purchase.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/post-purchase.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/post-purchase.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/post-purchase.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/post-purchase.md # Post-Purchase on Android ​To use Post Purchase SDK in your application, you need to create an instance of the SDK and perform some operations on it. You can read more about the flow [here](https://docs.klarna.com/payments/mobile-payments/before-you-start/post-purchase-overview). This guide will teach you how to: - Create an instance of the SDK and initialize it - Get user’s consent for sharing their information  - Fetching user purchases and render an operation for a specific order ## Create an instance of the SDK To create an instance of the SDK, you need to provide the following parameters: | Parameter | Type | Description | |---------|----|-----------| | hostActivity | Activity | The activity you are using the SDK inside. | | environment | KlarnaEnvironment | The environment you want to use for the SDK. Possible values are: * PLAYGROUND * STAGING * PRODUCTION | | region | KlarnaRegion | The region you want to use for the SDK. Possible values are: * EU (Europe) * NA (North America) * OC (Oceania) | | callback | KlarnaPostPurchaseSDKCallback | The callback interface to receive results for different operations. | ``` kotlin val postPurchaseSDK = KlarnaPostPurchaseSDK( activity = activity, environment = KlarnaEnvironment.PRODUCTION, region = KlarnaRegion.EU, callback = callback ) ``` Sample code ### Post Purchase SDK Callback The callback is an interface that you need to implement and pass to the SDK so you can receive the results for each operation you perform via the SDK. If needed, you can add a new callback later on to the SDK. This will replace the callback that was provided when constructing the SDK instance: ``` kotlin postPurchaseSDK.addCallback(callback) ``` Sample code You can also remove the callback from the SDK. After calling this method no results from the operations performed from the SDK will be received until a new callback is set: ``` kotlin postPurchaseSDK.removeCallback(callback) ``` Sample code ## Initialize the SDK After creating an instance of the SDK, you need to initialize it with the following parameters. **This is a mandatory step; you must wait for its result before doing any other operation.** | Parameter | Type | Description | |----|----|----| | locale | String | A string representing the user locale.\* Setting an invalid locale might lead to other operations not working as expected. | | purchaseCountry | String | Two-letter country code representing the purchase country. (For example, SE for Sweden) | | design | String (optional) | Optional value representing the design ID associated with you as a merchant. | **List of valid locale values supported by the SDK:** de-AT, en-AT en-AU nl-BE, fr-BE, en-BE en-CA, fr-CA de-CH, en-CH, fr-CH, it-CH de-DE, en-DE da-DK, en-DK es-ES, en-ES pt-PT, en-PT fi-FI, sv-FI, en-FI fr-FR, en-FR en-GB it-IT, en-IT nl-NL, en-NL no-NO, nb-NO, en-NO pl-PL, en-PL sv-SE, en-SE en-US, es-US en-IE cs-CZ, en-CZ el-GR, en-GR es-MX, en-MX ``` kotlin postPurchaseSDK.initialize( locale = “en-SE”, purchaseCountry = ”SE”, design = “design” ) ``` Sample code If the result of initialize operation is successful, the "onInitialized" method in your callback will be invoked. Otherwise, you will receive the error in the "onError" method. To know more about the errors, please refer to the "Handling Errors" section. ## Authorize (User Consent) To fetch a user's orders list, you need a valid OAuth 2.0 access token. If you have never received this token for a user before, you need to trigger an OAuth flow in which the user will consent to the information sharing.  The consent is market-specific and is based on the credentials you use when triggering the OAuth flow. If you want data for different markets, a separate consent flow needs to be triggered. | Parameter | Type | Description | |----|----|----| | clientId | String | The client ID that is provided to you for the user. | | scope | String | OAuth scope that defines what the returned token will be able to access. It can be a space-separated list of scopes. These values define the consent screen that Klarna displays to the user. | | redirectUri | String | URI to redirect the user after they have finished the consent flow. If successful, this will contain the authorization code as a query parameter (see Klarna OAuth API documentation). The value must exactly match one of the values provided to Klarna in advance. | | locale | String (optional) | A string representing the user locale. | | state | String (optional) | A string value your application uses to maintain the state between your authorization request and the authorization server's response. The Authorization server returns the exact value that you send to the redirectUri as a URL parameter. | | loginHint | String (optional) | If your application knows which user is trying to authenticate, it can use this parameter to provide a hint to Klarna’s Authorization Server. The server uses the hint to simplify the login flow by prefilling the email field in the sign-in form. It’s recommended to use this as it will improve the user experience. | | responseType | String (optional) | The desired grant type. We only support “code” type currently and it is the default value. | ``` kotlin postPurchaseSDK.authorizationRequest( clientId = “497043bl6of4306lh54kgg54dslt39rg”, scope = “read:consumer_order”, redirectUri = “http://auth.example.com/callback”, locale = “en-SE”, state = “myState”, loginHint = “myuser@example.com”, responseType = “code” ) ``` Sample code If the authorization flow (user consent) is successfully started, which means the user is presented with Klarna consent page, the "onAuthorizeRequested" method in your callback will be invoked. **Important Note:** The "onAuthorizeRequested" does not mean the consent flow is finished or successful. You will know the result of the flow in your *redirectUri* parameter. If for any reason, SDK fails to start the consent flow in the first place, you will receive the error in the "onError" method. To know more about the errors, please refer to the "Handling Errors" section. After the flow is finished and has been redirected to the *redirectUri*, you will have to exchange the returned *authorization code* for an *access and refresh token* using the */authorize* endpoint of the Klarna OAuth API. A successful consent flow will redirect to *redirectUri* with a “code”  URL parameter:  ``` http http://auth.example.com/callback?code=0f25f67b4dahktj7782464gk0161e5beb14462e1 ``` A rejected or canceled consent flow will redirect to *redirectUri* with an “error” URL parameter: ``` http http://auth.example.com/callback?error=access_denied ``` ## Access User Orders You can use the authorization code you retrieved in the previous step to read the user's orders. In a nutshell: 1. You need to exchange the authorization code with *access token* and *refresh token* 2. Use the *access token* to read the user's orders Please contact your Klarna delivery manager for more information on how to accomplish this step. ## Render Operation Once you have user orders, you can present them in your application. Each order item contains a list of available operations (each with a unique token) so you can show them to the user in the order detail overview section and let the user initiate a Post-Purchase operation using the SDK. When you call the "renderOperation" method, the SDK will render the relevant UI as a modal window in your application. | Parameter | Type | Description | |----|----|----| | operationToken | String | The token for the selected operation. | | locale | String (Optional) | A string representing the user locale. | | redirectUri | String (Optional) | In some operations, Klarna has to navigate the user away to an external app or a web page. In such cases, this parameter can be used to navigate the user back to your application. | ``` kotlin postPurchaseSDK.renderOperation( operationToken = ”s0u035ijoifkjg0j0ej0ierhj0”, locale = “en-SE”, redirectUri = “my-app://klarna-post-purchase” ) ``` After calling this method, you can show a loading indicator to the user while the Klarna UI modal is being created and presented. You should dismiss the loading when you get the result back in "onRenderedOperation" method in your callback. Possible result values in the callback method are found in the *KlarnaPostPurchaseRenderResult* enum class and are as follows: | Value | Description | |----|----| | STATE_CHANGE | You need to pull the updated order data via Klarna’s API. This happens when an operation has resulted in a change of the order state. | | NO_STATE_CHANGE | The operation finished without a change of the order state. You don’t need to pull any updates. | If the SDK fails to render the operation, you will receive the error in the "onError" method. To know more about the errors, please refer to the "Handling Errors" section. ## Handling Errors In case of any issues or errors while using the Post Purchase SDK functions, you will receive an error object of type *KlarnaPostPurchaseError* in the "onError" method of your callback with the following attributes: | Parameter | Type | Description | |----|----|----| | name | String | Name of the error. | | message | String | Message of the error. | | status | String (Optional) | Status of the error specifically for render operation errors. | | isFatal | Boolean | true If the error is not fixable and you should terminate the process, false otherwise.  | These are the predefined names for errors during the Post Purchase flow. These names are available as static variables inside *KlarnaPostPurchaseError* class. | Error Name | Description | |----|----| | KlarnaPostPurchaseErrorCreate | Error occurred while creating an instance of Post Purchase SDK. | | KlarnaPostPurchaseErrorInitialize | Error occurred while performing \`initialize\` | | KlarnaPostPurchaseErrorAuthorize | Error occurred while performing \`authorize\` | | KlarnaPostPurchaseErrorRender | Error occurred while performing \`render\` | | KlarnaPostPurchaseErrorUnknown | An error happened. We couldn't identify the cause of the error or the action it's related to. | | KlarnaPostPurchaseErrorSdkNotAvailable | Klarna SDK is not available at this moment. Please try again later. | Possible (but not limited to) *status* values in the error object for "renderOperation" method: | Status | Description | |----|----| | STATE_CHANGE | This happens when the order state has changed, and the operation is no longer relevant. You need to pull the updated order data via our API. | | TOKEN_EXPIRED | The operation token has expired. Refresh the OAuth access token and then fetch the order details again to get new operation tokens. | | ERROR | There was an error and the operation was not completed. | --- # Source: https://docs.klarna.com/payments/web-payments/before-you-start/prepare-your-integration.md # Source: https://docs.klarna.com/payments/in-store-payments/before-you-start/prepare-your-integration.md # Source: https://docs.klarna.com/payments/web-payments/before-you-start/prepare-your-integration.md # Source: https://docs.klarna.com/payments/in-store-payments/before-you-start/prepare-your-integration.md # Source: https://docs.klarna.com/payments/web-payments/before-you-start/prepare-your-integration.md # Source: https://docs.klarna.com/payments/in-store-payments/before-you-start/prepare-your-integration.md # Source: https://docs.klarna.com/payments/web-payments/before-you-start/prepare-your-integration.md # Source: https://docs.klarna.com/payments/in-store-payments/before-you-start/prepare-your-integration.md # Source: https://docs.klarna.com/payments/web-payments/before-you-start/prepare-your-integration.md # Prepare your integration web ## Ready to offer a smoooth purchase experience to your customers? Here's what you need to know before integrating Klarna payments into your store's website or mobile app. When you integrate Klarna payments into your online store, your customers see Klarna as an option when they select a payment method for their purchases. If your customers select Klarna for their purchase, they are redirected to log into their Klarna account. Your customers select their preferred Klarna payment option (pay now, pay later, pay in parts) once they're logged into their Klarna account. We handle the Klarna account user flow, so you don't have to worry about it. ## Integration options ​​​​​​​​You can integrate Klarna payments in two ways: as an in-line widget or as a browser redirect. The customer experience will differ based on the option you choose. ​This is how the two integration options look like: ![ Klarna payments offers 2 integration types: in-line widget and browser redirect. Both are seamlessly integrated with the end-to-end purchase process. ](7552f4_Screenshot_2024_03_22_at_15_06_12.jpeg) *Klarna payments offers 2 integration types: in-line widget and browser redirect. Both are seamlessly integrated with the end-to-end purchase process.* Klarna payments covers the process of initiating a payment, checking out, and creating an order. To learn how to handle created orders, see our [Order management section.](https://docs.klarna.com/order-management.md) ### In-line widget With this option, you present the Klarna widget in line on your checkout page. This integration is a mix of server-side calls, happening through the Payments API, and client-side calls, happening through Klarna’s Javascript SDK library. Adding Klarna payments as an in-line widget ensures the best user experience as your customer interactions take place within your website. For this reason, this is our recommended solution. ### Browser redirect With this option, your customer is redirected to the Klarna Hosted Payment Page (HPP). This is a server-side-only integration. You can offer Klarna payments to your customers without storing any web components on your website. This Klarna payments guide focuses on the in-line widget integration. To learn more about browser redirect, see our [HPP documentation](https://docs.klarna.com/hosted-payment-page.md). Selecting between the in-line widget or browser redirect solutions depends on your business needs. By displaying the widget, you gain ownership of the front end that your customers interact with. On the other hand, by redirecting to Klarna HPP, you use a pre-built front end solution that does not require integrating through the JavaScript SDK. Klarna strongly recommends using the Mobile SDK for all mobile application integrations. If Mobile SDK integration is not possible, only secure System WebViews (e.g. ASWebAuthenticationSession, SFSafariViewController, Custom Tabs) must be used to maintain security, compliance, and feature support. Custom or embedded WebView solutions (e.g., WKWebView, Android WebView) should **not be used** to load Klarna payment flows. To learn more about payments in mobile apps, please refer to the [In-app SDK section.](https://docs.klarna.com/payments/mobile-payments/before-you-start/overview-and-concepts.md). ## Prerequisites Before you start integrating Klarna payments, there are a few things you need to prepare in advance: - Access to the Merchant portal - To access the test Merchant portal, you can [sign up to create a new test account](https://docs.klarna.com/resources/developer-tools/testing-payments/before-you-test.md) or log in with a test existing account. - API keys for the Klarna Payments API - To test your Klarna API integration, you need a set of [test credentials](https://docs.klarna.com/resources/developer-tools/testing-payments/before-you-test.md). - [The API reference](https://docs.klarna.com/api/payments.md). You can download the Open API specification for the Klarna payments API and use the specification to [generate](https://openapi-generator.tech/) an API SDK for your programming language. - [Sample customer data](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data.md) and [sample payment data](https://docs.klarna.com/resources/developer-tools/sample-data/sample-payment-data.md) --- # Source: https://docs.klarna.com/klarna-search/integrate-klarna-search/product-feed-for-klarna-search-and-compare.md # Product feed for Klarna Search & Compare ## What is a product feed? A product feed is a digital file, typically formatted in XML, CSV, or JSON, containing detailed information about the products that you want to sell. [Here is an example of a product feed](https://assets.ctfassets.net/31h9ykss8g0q/6IUoK3iNf8VGyKZ2sWCk3V/ea9c6162325ec271056bd6b89898d4a5/productfeed.xml)  A good product feed increases the visibility of your products on our site. Including [basic fields](https://docs.klarna.com/marketing/solutions/klarna-search/getting-started/product-file) is recommended, as the more detailed a product feed you can provide, the better. **How to create a product feed?** We would like to make it easy for you to create a product feed. Therefore, we have compiled an overview with some plugins you can install for the most popular eCommerce platforms. **Do you already have a product feed that you use for advertising on Google Shopping?** In 9 out of 10 cases, we can use it. ## Find your platform here: ## WooCommerce **Product Feed PRO for WooCommerce** is a highly recommended free plugin that allows you to create product feeds for over 100 marketing channels, including Google Shopping, Facebook, and Bing, with no limit on the number of feeds or products. It's known for its versatility and ease of use​​​​. **WooCommerce Product Feed Manager** stands out for its ability to connect your store to a wide array of marketplaces (168 in total), like Google Shopping, Zalando, and Pinterest. It supports auto-sync with Google Shopping, category mapping, and advanced filtering options. Both free and paid versions are available, with the paid version offering unlimited products and additional features​​. **CTX Feed – WooCommerce Product Feed Manager Plugin**supports more than 130 affiliate platforms and marketing channels, offering hundreds of preset templates for feed generation. It provides access to unlimited filters, dynamic pricing, automatic feed scheduling, and even support for multiple vendors, languages, and currencies.  **ELEX WooCommerce Google Shopping (Google Product Feed)** specifically focuses on creating product feeds for Google Shopping. It streamlines the feed creation process into a five-step procedure, covering aspects like category and attribute mapping, and filtering options. **Google Product Feed** enables the creation of XML files for Google Merchant account imports, ensuring your products are featured in Google Shopping results. It allows for extensive field mapping and supports various feed types, including local inventory and product reviews, making it a versatile choice for Google Shopping integration. The plugin is available at a premium​​. ## Shopify **Simprosys**supports product feed submission for Google Shopping, Free Listings on Google, Facebook Shop, Checkout on Facebook, FB Dynamic Product Ads, Instagram Shop, Google Local Inventory Ads, Pinterest Ads, and Microsoft Shopping Ads. You can easily create & manage Google Ads Performance Max (PMax) Campaigns and Microsoft Ads Smart Shopping Campaigns, with an option to set up conversion tracking & dynamic remarketing tagging. **DataFeedWatch** enables easy creation of product feeds for over 2,000 channels and marketplaces, including Google Shopping, Facebook Ads, Pinterest, TikTok, and Amazon. It offers preloaded product feed templates for channel-specific requirements, eliminating the need for developers or coding. The app is designed to fill data feed gaps, fix feed errors, and improve sales performance across all channels. **Channable**connects your shop with over 2,500 channels and marketplaces. It not only manages product data feeds but also offers insights to optimize your ads on Microsoft and Google. You can create customized feeds for every platform, enhancing and optimizing product data with easy rule application, all aimed at growing your business more efficiently​. **Feedyio**is designed to streamline the management of product shopping feeds across multiple marketplaces. It facilitates the creation of product feeds for a variety of shopping platforms and allows for the customization of XML, CSV, or TXT feeds. Feedyio supports integrations with numerous platforms and offers templates for popular channels, simplifying feed management for Shopify store owners. **ShoppingFeeder**is designed for multi-channel marketing, allowing seamless integration with platforms like Google Shopping, Facebook, and TikTok. It offers features like AI Magic for optimizing product data feeds and supports over 300 channels. The app simplifies creating effective campaigns and resolving Google Merchant Center issues, aiming to boost sales and traffic. ## Magento **Channable**connects your shop with over 2,500 channels and marketplaces. It not only manages product data feeds but also offers insights to optimize your ads on Microsoft and Google. You can create customized feeds for every platform, enhancing and optimizing product data with easy rule application, all aimed at growing your business more efficiently​. **GoDataFeed** streamlines product feed optimization, allowing easy import, mapping, modification, and scheduling of product feeds. It connects your Magento store to over 200 channels, ensuring accurate, compliant, and optimized product data across various platforms​​. ## PrestaShop **Channable**connects your shop with over 2,500 channels and marketplaces. It not only manages product data feeds but also offers insights to optimize your ads on Microsoft and Google. You can create customized feeds for every platform, enhancing and optimizing product data with easy rule application, all aimed at growing your business more efficiently​. **DataFeedWatch**enables easy creation of product feeds for over 2,000 channels and marketplaces, including Google Shopping, Facebook Ads, Pinterest, TikTok, and Amazon. It offers preloaded product feed templates for channel-specific requirements, eliminating the need for developers or coding. The app is designed to fill data feed gaps, fix feed errors, and improve sales performance across all channels. ## Wix If your webshop is made in Wix, they have created a guide on how to [add your products to Google Merchant Center](https://support.wix.com/en/article/adding-wix-store-products-to-your-google-merchant-center-catalog), so that you get a Google Shopping feed. **Do you have a link to your feed?** When you have created your product feed, you can share it with your dedicated client manager or your local operations team and we will do the rest. Some product feed solutions are free, while others require a monthly fee. The paid options often include additional tools and insights for your product data, which can be particularly beneficial if you use your product feed across multiple sales channels. --- # Source: https://docs.klarna.com/klarna-search/integrate-klarna-search/product-file.md # Product file ## Feed URL Your product feed must be accessible via an HTTPS address or an FTP server so that we can access and use the file containing your information for our comparisons. If you have IP-level access restrictions, please ensure that our IPs can access the file. We will be changing servers later this year, which will result in changes to our IP addresses. To ensure that we can continue to retrieve your product feed during the transition, it is important that you already allow the new IP addresses below in your system. It is also important that you retain the current IP addresses until the change is fully implemented to avoid interruptions during the transition. Old IPs - 99.81.173.210 - 3.248.75.7 - 34.251.48.227 - 107.20.175.27 - 34.198.248.212 - 107.20.165.77 - 13.48.206.143 - 13.51.87.202 - 13.51.99.152 New IPs - 63.32.183.131 - 52.51.164.75 - 108.129.33.253 - 3.212.28.164 - 52.71.114.62 - 54.161.108.102 Refrain from using timestamps or other information that will change the URL of the feed as this will cause your products to disappear from the platform. ## Headers For us to optimize update routines and display your product catalog’s recent version with prices and item availability, we highly encourage the last-modified HTTP response header to be provided and serviced. The header indicates the date and time the product feed was last changed. By servicing this regularly, we can check for updates more frequently. ## Encoding Use one of the following encodings for the price file: - UTF-8, UTF-16 - ISO-8859-1 - Windows-1252 ## Format We can handle the majority of formats. The most common are: TEXT/CSV, XML and JSON. Note that the price file can’t be in Excel or any other non-text format. To make our processing and your updates run faster, compress your feed using gzip/zip. #### CSV When it comes to a CSV feed, the data have to be structured in rows and columns. Each row must represent a single product and each column should consist of fields with product information. - Divide each field or column by a particular separator. Recommended separators include a tab, pipe, semicolon or comma. - Use "field qualifiers" at the start and end of each field. Note that this character might not occur within a field. Recommended “field qualifiers” single ( ‘ ‘ ) or double ( “ ” ) quotation marks. #### Example feeds - [CSV feed example, (tab separated)](https://assets.ctfassets.net/31h9ykss8g0q/35BmS9pLqrQT99kChO0DM0/0da717e9253bf3f01121802b2c1e7bb1/productfeed.txt) - [XML feed example](https://assets.ctfassets.net/31h9ykss8g0q/6IUoK3iNf8VGyKZ2sWCk3V/ea9c6162325ec271056bd6b89898d4a5/productfeed.xml) ## Field specification and order Below is a list of the columns recommended for a successful listing. The order and title are not important, provided that they are comprehensible. - By including EAN/GTIN, it will be possible to match your products automatically and upload them quicker. - Fields should never contain code or tags such as HTML or JavaScript. ## Fields ### Basic product data (minimum requirements) - SKU/ID - Name - Price - Shipping costs - Stock status - Delivery time - Manufacturer - EAN/GTIN - Condition - Manufacturer SKU/MPN - URL - Image URL - Category - Description ### Detailed product data - AdultContent - AgeGroup - Bundled - Color - EnergyEfficiencyClass - Gender - GroupId - Material - Multipack - Pattern - Size - SizeSystem --- # Source: https://docs.klarna.com/resources/legal-and-compliance/policies-and-term-of-service/prohibited-and-restricted-businesses.md # Prohibited and restricted businesses ## Understand prohibited and restricted business categories and jurisdictions, outlining extra due diligence requirements and approval limits. This document was previously known as "Ethical instructions for Partners, including Prohibited and Restricted segments". The below businesses are either prohibited or restricted to use Klarna’s services. Any business using Klarna’s services and operating in a restricted segment listed below shall comply with the requirements outlined by Klarna.  In addition, businesses using Klarna’s services are at all times responsible for adhering to local legislation in all markets where they operate. This, for example, includes adherence to local consumer protection laws as well as to age requirements, product restrictions and payment method limitations.  Violation of these terms may result in the suspension or termination of Klarna’s services, depending on the severity of the breach. The lists with items in the tables below are not exhaustive, hence Klarna may in sole discretion decide on businesses, concepts, products and services that are not allowed to process via Klarna’s services. The assessment of prohibited and restricted businesses is based on:  - Laws and regulations - Third party restrictions  - Market individual adaptations  - Risk appetite ## Prohibited businesses  None of the prohibited items or services listed below can be processed using Klarna’s services. The following list is not exhaustive but outlines the types of businesses prohibited by Klarna. | Category | Description | |--------|-----------| | Abuse of Klarna's services | | | Adult | | | Deceptive or unfair marketing | | | Drugs and illegally derived substances and products | | | Financial and legal services | | | Gambling | | | Illegal products or services | | ## Prohibited jurisdictions and regions Klarna's services may not be used by businesses registered or operating in some jurisdictions. Additionally, Klarna's services may not be used to process payments for: - the sale of goods or services that are shipped from prohibited regions. - the purchase of goods that would be shipped to consumers with a billing or shipping address in prohibited regions. - transactions that involve travel to these regions. | | || | | | | ## Restricted jurisdictions and regions The section below outlines jurisdictions and regions classified as restricted by Klarna. This applies to businesses registered or operating in the list below. While these jurisdictions and regions are not prohibited, they may be subject to additional due diligence before being approved to use Klarna's services. Any approval granted may be modified or revoked at Klarna’s discretion. | | || | | | | ## Restricted businesses The section below outlines goods and services classified as restricted businesses by Klarna. While these businesses are not prohibited, they may be subject to additional due diligence—including license verification, compliance checks, and an in-depth assessment of their business model—before being approved to use Klarna's services. Any approval granted applies to specific businesses and may be modified or revoked at Klarna’s discretion. | Category | Goods and services | |--------|------------------| | Adult | * Adult, sexual or pornographic products and services, including live web cameras. | | Age restricted items | * Alcohol. | | Financial and legal services | * Bailiffs, bankruptcy/insolvency services, claims management, debt collection management agencies. | | Gambling & gaming | * Appropriately licensed gambling, betting, or lotteries. | | High risk businesses, products and services | * Art and antiques. | | Travel, tours and events | * Airlines & cruise lines. | | Weapons | * Sale of weapons requiring licence. | --- # Source: https://docs.klarna.com/payments/in-store-payments/integrate-klarna-in-store/other-ways-to-integrate/third-party-pos/psp-integrations.md # Third-party POS/PSP integrations ## Klarna In-store is also available through external payment service providers (PSP) and point-of-sale (POS) providers. If you're already onboarded with one of them, you can add Klarna as a payment method to your existing solution. ## Verifone terminal Let your customers pay with Klarna by scanning a QR code displayed in your Verifone terminal. To have Klarna enabled in your terminal, contact Verifone. ![VerifoneXKlarna.jpg](VerifoneXKlarna.jpg) *VerifoneXKlarna.jpg* This solution is available in the following markets: - [Austria](https://www.verifone.com/de/de/kontakt?utm_source=klarna+&utm_medium=referral&utm_campaign=Klarna+Leads+Referrral) - [Denmark](https://www.verifone.com/da/dk/kontakt-verifone?utm_source=klarna+&utm_medium=referral&utm_campaign=Klarna+Leads+Referrral) - [Finland](https://www.verifone.com/fi/fi/contact/ota-yhteytta) - [Germany](https://www.verifone.com/de/de/kontakt?utm_source=klarna+&utm_medium=referral&utm_campaign=Klarna+Leads+Referrral) - [Norway](https://www.verifone.com/nb/no/kontakt-oss?utm_source=klarna+&utm_medium=referral&utm_campaign=Klarna+Leads+Referrral) - [Sweden](https://www.verifone.com/sv/se/kontakta-oss?utm_source=klarna+&utm_medium=referral&utm_campaign=Klarna+Leads+Referrral) - [UK](https://www.verifone.com/en/uk/services/APM/Klarna-in-store) --- # Source: https://docs.klarna.com/payments/web-payments/before-you-start/data-requirements/puchase-countries-currencies-locales.md # Purchase country, locale, and currency ## When initiating a payment, you need to define a country, locale, and currency for the payment session. Learn which are the valid values for these parameters and how to map them. ## Country We offer different payment methods and purchase flows depending on the country. It is important that you share with us the correct country in the request to initiate a payment. You need to sign an agreement (or addendum to an agreement) for each country you want to enable in your Klarna payments offer. Contact [merchant support](https://www.klarna.com/merchant-support/) to add a new country to your setup. ## Locale We support a limited set of locales per country. You can check them next in the [Data mapping section](https://docs.klarna.com/payments/web-payments/before-you-start/data-requirements/puchase-countries-currencies-locales.md). ## Currency We only support the local currency of each country. ## Data mapping The following table shows the list of available countries, locales, and currencies for Klarna payments. **Important:** Keep in mind that the locale used will define also the expected characters in all data points. For example, if you define `locale=en-GR` , then data points are expected to be in latin characters and not greek characters. In order to send greek characters you should `define locale=el-GR`. | **Country** | **`purchase_country`** | **`locale`** | **`currency`** | |----|----|----|----| | Australia | AU | en-AU | AUD | | Austria | AT | de-AT, en-AT | EUR | | Belgium | BE | nl-BE, fr-BE, en-BE | EUR | | Canada | CA | en-CA, fr-CA | CAD | | Czech Republic | CZ | cs-CZ, en-CZ | CZK | | Denmark | DK | da-DK, en-DK | DKK | | Finland | FI | fi-FI, sv-FI, en-FI | EUR | | France | FR | fr-FR, en-FR | EUR | | Germany | DE | de-DE, en-DE | EUR | | Greece**\*** | GR | el-GR, en-GR | EUR | | Hungary | HU | hu-HU, en-HU | HUF | | Ireland (Republic of Ireland) | IE | en-IE | EUR | | Italy | IT | it-IT, en-IT | EUR | | Mexico | MX | en-MX, es-MX | MXN | | Netherlands | NL | nl-NL, en-NL | EUR | | New Zealand | NZ | en-NZ | NZD | | Norway | NO | nb-NO, en-NO | NOK | | Poland | PL | pl-PL, en-PL | PLN | | Portugal | PT | pt-PT, en-PT | EUR | | Romania | RO | ro-RO, en-RO | RON | | Slovakia | SK | sk-SK, en-SK | EUR | | Spain | ES | es-ES, en-ES | EUR | | Sweden | SE | sv-SE, en-SE | SEK | | Switzerland | CH | de-CH, fr-CH, it-CH, en-CH | CHF | | United Kingdom | GB | en-GB | GBP | | United States | US | en-US, es-US | USD | --- # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-hpp/api-documentation/read-session.md # Read Session with Hosted Payment Page - API Details When you have created an **HPP Session**you will have the ability to read its content by using thesession_urlthat you got back in the create session response. For that, you only to make a request to the endpoint and you will get data that lets you track the update of the session. It is advised to read our [guide on how to track the HPP Session status changes](https://docs.klarna.com/payments/other-products/hosted-payment-page/before-you-start/tracking-session-status/). ## Endpoint description | **Description** | **Gets the status of the HPP Session** | |----|----| | Reference | For a full list of returned values, please read [API Reference](https://docs.klarna.com/api/api-urls/). | | Url structure | | | Operation | GET | | Example | curl --header "Authorization: Basic " --header "Content-Type: application/json" --header “Cache-Control: no-cache” | | Field Key | **Type** | **Description** | |----|----|----| | **session_id** | String | Identifier of the session that was read. | | **status** | String | The current status of the Session. You can read more about statuses in our [session lifecycle article](https://docs.klarna.com/payments/other-products/hosted-payment-page/before-you-start/tracking-session-status/). | | **updated_at** | Date | Last time this session was updated. [Dates format is described here](https://docs.klarna.com/api/api-urls/#data-types). | | **expires_at** | Date | Date when this session will not be able for the consumer to pay anymore. You can read more about lifetime in our [session lifetime article](https://docs.klarna.com/payments/other-products/hosted-payment-page/before-you-start/tracking-session-status/). [Dates format is described here](https://docs.klarna.com/api/api-urls/#data-types). | | **Status name** | **Status description** | |----|----| | **WAITING** | Session is created and Consumer has not entered the Payment Page yet | | **IN_PROGRESS** | Consumer has entered the Payment Page on updated_at | | **COMPLETED** | Consumer has successfully gotten an Authorization from the Payment system onupdated_at, **Authorization Token**is contained in the authorization_tokenfield. | | **FAILED** | Consumer was not able to completely fulfil the payment on updated_at | | **CANCELLED** | Consumer has pressed the Back button on updated_at | | **ERROR** | Consumer encountered an error while paying on updated_at | | **DISABLED** | Session was disabled by API Call on the Merchant initiative on updated_at | ## Happy flow examples These are the responses that an integration layer will get when polling the HPP Session during its fulfilment. ``` json { "session_id": "39a1c773-bafd-754d-af1f-b30c592f1267", "status": "WAITING", "updated_at": "2019-05-13T14:51:46.288Z", "expires_at": "2019-05-15T13:51:43.507Z" } ``` Newly created HPP Session ``` json { "session_id": "39a1c773-bafd-754d-af1f-b30c592f1267", "status": "IN_PROGRESS", "updated_at": "2019-05-13T14:52:57.540Z", "expires_at": "2019-05-15T13:51:43.507Z" } ``` Consumer has loaded the HPP Session ``` json { "session_id": "39a1c773-bafd-754d-af1f-b30c592f1267", "status": "COMPLETED", "authorization_token": "a1a8f727-2756-6058-bd3c-40069be0994b", "updated_at": "2019-05-13T14:54:04.675Z", "expires_at": "2019-05-15T13:51:43.507Z" } ``` Completed HPP Session - Default value forplace_order_mode ``` json { "session_id": "39a1c773-bafd-754d-af1f-b30c592f1267", "status": "COMPLETED", "order_id": "a1a8f727-2756-6058-bd3c-40069be0994b", "klarna_reference": "X438HG0Q", "updated_at": "2019-05-13T14:54:04.675Z", "expires_at": "2019-05-15T13:51:43.507Z" } ``` With place_order_mode as PLACE_ORDER or CAPTURE_ORDER ``` json { "session_id": "39a1c773-bafd-754d-af1f-b30c592f1267", "status": "COMPLETED", "order_id": "a1a8f727-2756-6058-bd3c-40069be0994b", "klarna_reference": "X438HG0Q", "updated_at": "2019-05-13T14:54:04.675Z", "expires_at": "2019-05-15T13:51:43.507Z" } ``` --- # Source: https://docs.klarna.com/payments/after-payments/order-management/more-actions/refund-allocation.md # Refund allocation ## Read this article to learn how to correctly allocate refunds when you deliver in multiple shipments. When you send the goods in multiple shipments or from multiple locations, you're capturing the order in parts. In these cases, we create separate invoices (payment instructions) for each shipment. For example, instead of receiving one invoice for all ordered goods at once, your customer gets individual invoices for each partial delivery. We have to pay special attention when your customer asks for a refund and returns only some of the goods. Here, we need to correctly allocate the refund amount to the specific invoice that corresponds to the shipment (capture) of the returned goods. ## The challenge When your customers return some goods from a partially delivered order, they can expect the refund amount to be allocated to the specific invoice corresponding to that partial delivery. However, the refund is allocated to the general order and not to the specific invoice that corresponds to the shipment (capture) of the goods, causing confusion for your customers. ## The solution We know that correct refund allocation ensures clarity for your customers, but we don't want you to bother with keeping track of capture IDs to correctly allocate refunds. Instead, you can ensure the correct refund allocation through the use of order lines. By keeping the order lines consistent between the specific capture and the refund you're making, you help us understand where to allocate the refund. Specifically, in the request body for capturing an order and in the one for [refunding an order](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api/refund-and-extend-orders), you have to keep exactly the same value in the `reference` attribute of the `order_lines` parameter. This is how we can correctly allocate the refund to the right payment instruction. To help us correctly allocate the refund, you have to: 1. [Identify the capture corresponding with the refunds.](https://docs.klarna.com/payments/after-payments/order-management/more-actions/refund-allocation.md) 2. [Ensure the API request contains consistent order lines.](https://docs.klarna.com/payments/after-payments/order-management/more-actions/refund-allocation.md) 3. [Request a refund through the Order management API.](https://docs.klarna.com/payments/after-payments/order-management/more-actions/refund-allocation.md) ### Identifying the capture. The first step is to identify the specific capture that corresponds to the refunds your customer is requesting. Let’s say you have received a customer’s order for a T-shirt, a pair of jeans, and a pair of sneakers. You delivered this order in two separate shipments and [captured the order](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api/capture-and-track-orders.md) in two separate parts: | Capture A | Capture B | |---------|---------| | * Includes the T-shirt and the pair of jeans * Two order lines: a T-shirt (reference A12345) and a pair of jeans (reference A98765) | * Includes the pair of sneakers * One order line: a pair of sneakers (reference B24680) | This is an example of Capture A, including two order lines, one per product: ``` json { "captured_amount": 10000, "description": "Capture A, shipping part of the order", "order_lines": [ { "reference": "A12345", "name": "T-shirt", "type": "physical", "quantity": 1, "total_amount": 3000, "unit_price": 3000 }, { "reference": "A98765", "name": "Jeans", "type": "physical", "quantity": 1, "total_amount": 7000, "unit_price": 7000 } ] } ``` Sample of a capture with two order lines. This is an example of Capture B, including one order line for a single product: ``` json { "captured_amount": 10000, "description": "Capture B, shipping the rest of the order", "order_lines": [ { "reference": "B24680", "name": "Sneakers", "type": "physical", "quantity": 1, "total_amount": 10000, "unit_price": 10000 }, ] } ``` Sample of a capture with one order line. In this scenario, your customer wants to return the sneakers, so you have to pay attention to Capture B. ### Ensuring consistent order lines Once you identified the correct capture, you have to prepare the refund and ensure you send consistent order lines in your request. Before you make an API call to refund the order, check that the request body for the refund contains order lines with exactly the same `reference` attribute as the request body for the capture (in this example, Capture B). ### Request a refund Once you ensured you're sending consistent order lines, you're ready to go with the refund. You have to use our Order management API. Send a `POST` request to the `{apiUrl}/ordermanagement/v1/orders/{order_id}/refunds`[{apiUrl}](https://docs.klarna.com/api/ordermanagement/#operation/refundOrder)/ordermanagement/v1/orders/{order_id}/refunds endpoint and use the refund request matching the capture. This is an example of the refund request matching Capture B: ``` json { "refunded_amount": 10000, "description": "Returning the sneakers", "order_lines": [ { "reference": "B24680", "name": "Sneakers", "type": "physical", "quantity": 1, "total_amount": 10000, "unit_price": 10000 }, ] } ``` Sample of a request to refund an order. For more information on the API call, see the [Refund an order](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api/refund-and-extend-orders) section. ## Conditions Allocating refunds correctly is only possible if the orders meet the following conditions: - The order you're refunding doesn't have any previous refunds with failed allocation. - The sum of the order lines is exactly equal to the refunded amount. - The refunded amount is equal to or less than the captured amount in the partial capture you're refunding. In the example above, the refunded amount corresponding to the sneakers cannot be more than the `captured_amount` in Capture B. If your refund request doesn't meet these conditions, we'll accept the refund but we won't be able to allocate it to the right invoice. --- # Source: https://docs.klarna.com/payments/after-payments/order-management/manage-orders-in-the-merchant-portal/refund-an-order.md # Refund an order ## Check out the options you have in the Merchant portal for refunding orders. For those cases where your customers return the items they purchased and you need to send them their money back, the Merchant portal provides a simple solution. You can refund any items you have already captured, regardless of whether they belong to a fully or partially captured order. Here are the refunding options you have in the Merchant portal: - **Refund complete order:**You can select all the items listed in an order and refund the full order amount at once. - **Refund selected items:**You can select some items listed in an order and refund only their corresponding amount. - **Refund with a return fee:**You can add a return fee for your customers. We deduct the fee from the refunded amount. Only specific markets support refunds with fees. For more information, \[ see the conditions\] - **Refund amount:**You refund a specific amount instead of items from the order. We highly recommend you select each [order line](https://portal.klarna.com?help-page=article%3Awhat-are-order-lines) for the corresponding items you want to refund, even if you're refunding the full order. A clear tally of order lines lets us allocate refunds to the correct customer invoice. Each refund you make triggers a repayment to the customer who has already paid. After a refund is processed, the item amount will be deducted from your next payout. If you want to read a step-by-step guide about refunding an order, see the [Help](https://portal.klarna.com?help-page=article%3Ahow-to-refund-an-order) section in the Merchant portal. The following image illustrates the refunding action in the Merchant portal: ![ Refunding an order in the Merchant portal.](490a46da-83f9-4d0c-885f-9c979b70da7e_Order+management_merchant+portal_+refunding+an+order.jpeg) *Refunding an order in the Merchant portal.* --- # Source: https://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api/refund-orders-and-manage-authorizations.md # Refund orders and manage authorizations ## Learn how to refund and manage orders efficiently using the Klarna Order Management API. ## Refund an order Use the Order management API to refund the items on a captured order. When your customers return the items they bought and you need to refund that order, use this API call to credit the amount back to your customers. The following diagram depicts how this API call works: {{#mermaid: sequenceDiagram autonumber participant A as MERCHANT participant B as KLARNA A ->> B: POST /ordermanagement/v1/orders/{order_id}/refunds note over A, B: Provide the refund amount (full or partial) alt SUCCESSFUL B -->> A: 201: Created includes refund_id, location else ERROR B -->> A: 403: correlation_id, error_code, error_message end }} If you want to learn how to correctly allocate refunds when you deliver in multiple shipments, see the [Refund allocation section.](https://docs.klarna.com/payments/after-payments/order-management/more-actions/refund-allocation/) ## Refund a captured order amount To refund the amount of an order, send a POST request to the [{apiUrl}/ordermanagement/v1/orders/{order_id}/refunds](https://docs.klarna.com/api/ordermanagement/#operation/refundOrder) endpoint. Include the following in your request: **Header** - Klarna-Idempotency-Key : This header will guarantee the idempotency of the operation. The key should be unique and is recommended to be a UUID version 4. Retries of requests are safe to be applied in case of errors such as network errors, socket errors and timeouts. **Body** - refunded_amount (required): the total order amount to be refunded. It must be less or equal to the captured_amount from the [order capture](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api/capture-and-track-orders/) - reference (optional): Internal reference to the refund. This will be included in the settlement files. - description (optional): text to add details of the refunds. Your customers can see this description - order_lines (optional): list of details associated with this refund. We highly recommend you send order lines as they allow us to locate the refund to the right capture (consumer invoice). Order lines are also helpful for your customers to visualize the refunded amount in the Klarna app ``` json { "refunded_amount": 100000000", "reference": "9dfcd4b6-9428-4835-ad93-3720ea808608", "description": "Description of the refund shown to the customer", "order_lines": [ { "image_url": "https://yourstore.example/product/headphones.png", "merchant_data": "Some metadata", "name": "string", "product_identifiers": { "brand": "Intel", "category_path": "Electronics Store> Computers & Tablets> Desktops", "color": "Denim blue", "global_trade_item_number": "735858293167", "manufacturer_part_number": "BOXNUC5CPYH", "size": "4" }, "product_url": "https://yourstore.example/product/headphones", "quantity": 1, "quantity_unit": "pcs.", "reference": "75001", "subscription": { "interval": "MONTH", "interval_count": 1, "name": "string" }, "tax_rate": 0, "total_amount": 100000000, "total_discount_amount": 0, "total_tax_amount": 100000000, "type": "physical", "unit_price": 100000000 } ] } ``` Sample of a request to refund an order. ### Success response If the request is successful, you'll receive a `201 Created` response, including `refund_id` and `location` as HTTP response headers. ### Error response If your request contains errors, you'll receive an error response. Make sure the order is already captured and the `order_id` is correct. You can use the `correlation_id` and the `order_id` values to troubleshoot the call in the Merchant portal logs section. ``` json { "error_code": "REFUND_NOT_ALLOWED", "error_messages": [ "Over refund is not allowed. Refund not possible." ], "correlation_id": "7863c755-eb1b-4b24-a884-06c2368389d7" } ``` Sample of an error response *to refund an order.* Ready to send this request? See the [API reference of this call.](https://docs.klarna.com/api/ordermanagement/#operation/refundOrder) ## Refund with return fees Use the Order management API to make a refund with fees when your customers want to return items. When your customers ask for a refund and want to return the items they bought, you can charge a return fee using this API call. Your customers are charged with this return fee at the moment of refund, meaning that we take the return fee from the refunded amount they receive. ### Conditions for charging fees Charging the return fee is only possible if the orders meet the required conditions: - The order is fully captured in one single capture and not in partial captures. - The sum of the order lines is exactly equal to the refunded amount. - The order corresponds to one of these markets: - Austria 🇦🇹 - Germany **🇩🇪** - Denmark 🇩🇰 - Finland 🇫🇮 - France 🇫🇷 - Netherlands 🇳🇱 - Norway 🇳🇴 - Sweden 🇸🇪 - Italy 🇮🇹 - Spain 🇪🇸 - Ireland 🇮🇪 - Portugal 🇵🇹 - Czech Republic 🇨🇿 - Australia 🇦🇺 - Greece 🇬🇷 ### Charge return fees To charge return fees, you have to call the same endpoint you use for [refunding an order,](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api/refund-and-extend-orders/) but with type: `return_fee` as an additional parameter in `order_lines`. Send a `POST` request to the [`{apiUrl}`](https://docs.klarna.com/api/ordermanagement/#operation/refundOrder)`/ordermanagement/v1/orders/{order_id}/refunds` endpoint. Include the following in your request: **Header** - `Klarna-Idempotency-Key`: This header will guarantee the idempotency of the operation. The key should be unique and is recommended to be a UUID version 4. Retries of requests are safe to be applied in case of errors such as network errors, socket errors and timeouts. **Body** - `refunded_amount` (required): the total order amount to be refunded. It must be less or equal to the captured_amount from the [order capture](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api/capture-and-track-orders/) - `reference` (optional): Internal reference to the refund. This will be included in the settlement files. - `description` (optional): text to add details of the refunds. Your customers can see this description - `order_lines` (required): list of details associated with this capture. You have to add an extra order line representing the return fee and set its type to return_fee ``` json { "refunded_amount": 9500, "reference": "1786c73b-a2be-4d42-a9f7-ff1c4bca5ccc", "description": "Description of the refund shown to the customer", "order_lines": [ { "name": "T-Shirt", "type": "physical", "quantity": 1, "unit_price": 10000, "total_amount": 10000 }, { "name": "Return fee", "type": "return_fee", "quantity": 1, "unit_price": -500, "total_amount": -500 } ] } ``` Sample request to refund with return fees. You must add the parameter `type: return_fee` in the order lines to charge the return fee successfully. Adding this parameter lets your customer visualize the fee in the Klarna app. ### Success response If the request is successful, you'll receive a `201 Created` response, including `refund_id` and `location` as HTTP response headers. ### Error response If your request contains errors, you'll receive an error response. Make sure the order is already captured and the `order_id` in the request is correct. You can use the `correlation_id`, and the `order_id` values to troubleshoot the call in the Merchant portal logs section. ``` json { "error_code": "REFUND_NOT_ALLOWED", "error_messages": [ "Over refund is not allowed. Refund not possible." ], "correlation_id": "7863c755-eb1b-4b24-a884-06c2368389d7" } ``` Sample of an error response to refund with return fees. ### Remove return fees You can also remove the charged fees added in the request explained above. For this action, you have to send a new request to [refund an order](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api/refund-and-extend-orders/), including the amount previously charged as a return fee. Ready to send this request? See the [API reference of this call.](https://docs.klarna.com/api/ordermanagement/#operation/refundOrder) ## Release order authorization Use the Order management API to release the authorization of an order. When you have an order that isn't fully captured and you don't plan to perform more captures on it, you should cancel it by releasing the order's authorization. With this action, your customers won't be debited for the remaining authorized order amount. If your customers paid by card, we'll refund the remaining amount to their account. To release the authorization of an order, send a POST request to the [`{apiUrl}`](https://docs.klarna.com/api/ordermanagement/#operation/releaseRemainingAuthorization)`/ordermanagement/v1/orders/{order_id}/release-remaining-authorization` endpoint. Provide the `order_id` as path parameters. The `order_id` is the identifier you get in a successful response when \[ placing a new order\]. You don't need a request body for this `POST` method. ### Success response If the request is successful, you'll receive a `204 No content` response. ### Error response If your request contains errors, you'll receive an error response. Make sure the order is not captured or canceled and the `order_id` is correct. You can use the `correlation_id` and the `order_id` values to troubleshoot the call in the Merchant portal logs section. ``` json { "error_code": "NOT_ALLOWED", "error_messages": [ "Order is fully captured. Remaining authorization cannot be released." ], "correlation_id": "fefd0ea8-6899-41f9-93a7-ccd125c1af86" } ``` Sample of an error response to release an order authorization. Ready to send this request? See the [API reference of this call.](https://docs.klarna.com/api/ordermanagement/#operation/releaseRemainingAuthorization) ## Extend payment date Use the Order management API to extend the order’s payment due date. When you want to give your customers more time to pay for their purchase, you have to extend the order's payment due date. To get an extension for the payment date, follow these steps: 1. [Get the available options](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api/refund-and-extend-orders/#step-1-get-the-available-extension-options) for extending the due date of a specific order. 2. [Extend the due date](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api/refund-orders-and-manage-authorizations/#extend-payment-date-step-2-extend-the-payment-due-date) using one of the available options from the previous call. As we relate every capture with an individual invoice for the customer, you can extend the payment due date per capture. This is a paid feature. Given that the order extension increases the credit costs, we charge a fee. For more information, see the [pricing section](https://docs.klarna.com/payments/after-payments/order-management/more-actions/extend-customer-due-date-pricing/). ### Conditions Extending the payment date is only possible for orders associated with a pay-later method, such as Pay in 30 days or Pay in 4 installments. ### Step 1: Get the available extension options To get the available options for extending an order's payment due date, send a GET request to the [`{apiUrl}`](https://docs.klarna.com/api/ordermanagement/#operation/getOptionsForExtendDueDate)`/ordermanagement/v1/orders/{order_id}/captures/{capture_id}/extend-due-date-options` endpoint. Provide `order_id` and `capture_id` as path parameters. The `order_id` is the identifier you get in a successful response when placing a new order, and the `capture_id` is the identifier you get when successfully capturing an order. You don't need a request body for this `POST` method. ### Success response If your request is successful, you'll receive a response body including `number_of_days` for the amount of days this order can be extended. ``` json { "currency": "usd", "options": [ { "amount": 0, "number_of_days": 0 } ] } ``` Sample of a successful response to get the extension options. ### Error response If your request contains errors, you'll receive an error response. Ensure the `order_id` and the `capture_id` values you provided are valid and correctly formatted. ``` json { "correlation_id": "string", "error_code": "string", "error_messages": [ "string" ] } ``` Sample of an error response to get the extension options. You can use the `correlation_id` and the `order_id` value to troubleshoot the call in the Merchant portal logs section. ### Step 2: Extend the payment due date To extend the payment due date for a specific order, send a `PATCH` request to the [`{apiUrl}`](https://docs.klarna.com/api/ordermanagement/#operation/extendDueDate)`/ordermanagement/v1/orders/{order_id}/captures/{capture_id}/extend-due-date-options` endpoint. ``` json { "number_of_days": 0 } ``` Sample of a request to extend the payment due date. Provide one of the extension options you got as `number_of_days` from Step 1. ### Success response If the request is successful, you'll receive a 204 No content response. ### Error response ​If your request contains errors, you'll receive an error response. Ensure the `order_id` and the `capture_id` values you provided are valid and correctly formatted. ``` json { "correlation_id": "string", "error_code": "string", "error_messages": [ "string" ] } ``` Sample of an error response to extend the payment due date. ​You can use the `correlation_id` and the `order_id` value to troubleshoot the call in the Merchant portal logs section. Ready to send this request? See the [API reference of this call.](https://docs.klarna.com/api/ordermanagement/#operation/extendDueDate) --- # Source: https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/united-states/regulated-financing-promotion-rules-101.md # Source: https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/sweden/regulated-financing-promotion-rules-101.md # Source: https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/united-kingdom/regulated-financing-promotion-rules-101.md # Regulated financing promotion rules 101 ## If you advertise retail credit options which are regulated by the FCA, we recommend that you seek independent legal advice when undertaking any advertising. Using a non-compliant advert can result in enforcement action including fines and the withdrawal of your authorised status from the FCA. Klarna does not accept any liability  to Klarna merchants or other third parties for the information contained in this guide. Please keep up to date on the latest updates and changes to the regulations from  the relevant authorities, as the information provided in this guide may change. Important: Update to Klarna’s Firm Reference Number Klarna Financial Services UK Ltd is now authorised by the FCA as an Electronic Money Institution (EMI) under **FRN** **1021834**, **replacing our previous FRN 987816**. To remain compliant please ensure you update all FRN references in all consumer-facing touchpoints - including websites, social content, checkout messaging, and legal disclosures. Klarna’s financing products are regulated credit agreements. **Financing **falls into two categories, **fixed sum credit **and **revolving credit **(also known as running account credit). **Fixed sum credit **is a regulated credit agreement with a fixed duration (term). Klarna offers fixed sum credit agreements from 6 months to 4 years. Fixed sum credit can be offered on interest-free or interest- bearing amounts and may incur a default fee if a repayment is missed **Revolving credit **is a regulated credit agreement with no fixed duration. This allows consumers to use their account on a rolling basis up to an agreed limit. Revolving credit can be offered with different interest rates (possibly at 0%) and may include a promotional period for a set period of time. Once this time has passed, if the consumer has not made sufficient repayments over the set period of time the promotion period is offered, any promotional interest rate will revert to Klarna’s standard rate of interest *Klarna Financing* is a fully-regulated credit product. ## Regulatory and oversight regime This guide has been designed to help you understand the legal requirements when promoting or communicating finance options for consumers. This guide primarily contains information relevant to our regulated Financing products which are regulated credit agreements (“Financing Products”). **Do you need FCA authorisation as a credit broker?**If you offer our Financing products in the UK, you must obtain a credit broker license from the Financial Conduct Authority (FCA). A credit broker is a person who carries out certain activities by way of business in the UK, the most relevant of which are: - Effecting introductions relating to credit agreements - Presenting or offering an agreement that would, if entered into, be a regulated agreement - Assisting with preparatory work relating to entering into a regulated credit agreement - Entering into a regulated credit agreement on behalf of a lender. If you carry out any regulated activities without first being authorised by the FCA then you may be committing a criminal offence. **If you only offer BNPL Products products then you do not require a credit broker authorisation from the FCA. Any advertisements would, however, need to be approved by Klarna before published to a UK audience.** The rules applicable to advertising in the UK are found in both legislation and in self-regulatory industry codes of practice. The following authorities are responsible for regulating the advertising/financial promotion and communication with a consumer. **The Financial Conduct Authority (FCA)** The main aim of the FCA is to ensure that financial markets function well. In order to achieve this, it has three operational objectives which are to: - Secure an appropriate degree of protection for consumers - Protect and enhance the integrity of the UK financial system; and - Promote effective competition in the interests of consumers It is committed to ensuring the consumer credit market works well and that customers are treated fairly. The FCA's Principles for Business (the Principles) and Consumer Credit Sourcebook (CONC) govern financial promotions issued, distributed or communicated by authorised credit broking firms to consumers. **The Advertising Standards Authority (ASA)** The ASA is the UK’s advertising regulator and is responsible for applying the Advertising Codes (the UK Code of Non-broadcast Advertising and Direct & Promotional Marketing and the UK Code of Broadcast Advertising) written by the Committee of Advertising Practice (CAP) and Broadcast Committee of Advertising Practice (BCAP). These apply to all UK firms. | ASA Powers | FCA Powers | |----------|----------| | The ASA considers all complaints about non-technical aspects of advertisements in non-broadcast media. For example, offence, social responsibility, fear and distress and competitor denigration. The ASA also assesses complaints about broadcast advertisements and liaises with the FCA on technical matters, as appropriate. The ASA investigates general advertising complaints and can: * Require changes to advertising or ban advertising * Publish findings and decisions on the ASA website * Refer financial advertising to the FCA * Refer a complaint to Trading Standards, who have a broader range of enforcement powers available to them. Trading Standards can, for example, take legal action resulting in possible (unlimited) fines and/or imprisonment * Liaise with the Competition & Markets Authority (CMA) in respect of an issue | The FCA monitors and investigates compliance with the Principles, CONC and its other rules generally and has a variety of powers, including swift direct intervention with firms to force the immediate amendment or withdrawal of financial promotions which contravene its financial promotion rules under section 137S of the FSMA. The FCA also has the power to, amongst other things: * Ban financial promotions * Issue fines and public censure * Take legal action which may result in fines or imprisonment; and * Vary or remove FCA permissions | As the FCA does not pre-approve promotions, it is incumbent on senior management of those firms making such promotions to make sure they remain compliant. **Other guidelines that apply to financial promotions.** Financial promotions are subject to a variety of laws and rules, some of which we consider in this guide alongside the detailed CONC requirements, which may include: - **Consumer Protection from Unfair Trading Regulations 2008** – set out the commercial practices, of which advertising is one - **Business Protection from Misleading Marketing Regulations 2008** - **Consumer Rights Act 2015** ## Regulated Financing disclosures ### Risk warnings For regulated credit products. Financial promotions may contravene the FCA’s ‘clear, fair and not misleading’ rules if they omit relevant risk warnings. Examples of relevant risk warnings for regulated products include: - Late or missing repayments may have serious consequences for you and cause you serious money problems. - Your credit rating may be affected which will make it more difficult or more expensive for you to obtain credit in the future. ### Disclosures (wording examples) - Outlined below are our recommended disclosures for your advertising of Klarna's Financing products. Please ensure you apply the correct disclosure for your situation. REMEMBER that you must always add a risk warning. ## Disclosures to use from December 2023 ### Disclosure 1 – Example of credit broker disclosure wording for regulated credit products – use if you offer products provided exclusively by Klarna. **\[Merchant’s legal entity name and postal address (as it appears on the FCA Register)\] is authorised and regulated by the Financial Conduct Authority ("FCA") (FCA FRN XXXXX)**and acts as a credit intermediary and not a lender, offering credit products provided exclusively by Klarna Financial Services UK Limited (company number 14290857), which is authorised and regulated by the FCA by the FCA for carrying out regulated consumer credit activities (firm reference number 987889), and for the provision of payment services under the Electronic Money Regulations 2011 (firm reference number 1021834). Finance is only available to permanent UK residents aged 18+, subject to status, T&Cs apply. Klarna.com/uk/terms-and-conditions **\[Insert postal address of the firm making the financial promotion if required\*\]** **Remember to always add an appropriate risk warning to the promotion which needs to be prominently displayed above the disclosure and near to the benefits being promoted.** ### Disclosure 2 – Example of credit broker disclosure wording for regulated credit products – use if you offer products provided by a limited number of finance providers. **\[Merchant’s legal entity name and postal address (as it appears on the FCA Register)\] is authorised and regulated by the Financial Conduct Authority ("FCA") (FCA FRN XXXXX)** and acts as a credit intermediary and not a lender, offering credit products provided by a limited number of finance providers, including Klarna Financial Services UK Limited (company number 14290857), which is authorised and regulated by the FCA for carrying out regulated consumer credit activities (firm reference number 987889), and for the provision of payment services under the Electronic Money Regulations 2011 (firm reference number 1021834). **\[Insert postal address of the firm making the financial promotion if required\*\]** **Remember to always add an appropriate risk warning to the promotion which needs to be prominently displayed above the disclosure and near to the benefits being promoted.** ### Disclosure 3 – Example of credit broker disclosure wording for regulated and unregulated finance options – use if your financial promotion includes both regulated and unregulated finance options. **\[Merchant’s legal entity name and postal address (as it appears on the FCA Register)\] is authorised and regulated by the Financial Conduct Authority (FCA FRN XXXXX)** and acts as a credit intermediary and not a lender, offering credit products provided \[exclusively by Klarna Financial Services UK Limited\] \[by a limited number of finance providers, including Klarna Financial Services UK Limited\]. Please note that \[Pay in 3 instalments\] \[and\] \[Pay in 30 days\] agreements are not regulated by the FCA. Finance is only available to permanent UK residents aged 18+, subject to status, T&Cs and late fees apply. Klarna.com/uk/terms-and-conditions **\[insert postal address of the firm making the financial promotion if required\*\]** **Remember to always add an appropriate risk warning to the promotion which needs to be prominently displayed above the disclosure and near to the benefits being promoted.** ### Disclosure 4 – Example of merchant’s website/ promotions disclosure for Buy Now Pay Later products only. This needs to be in addition to or part of your standard disclosure. Klarna’s \[Pay in 3 instalments\] \[and\] \[Pay in 30 days\] are unregulated credit agreements.Borrowing more than you can afford or paying late may negatively impact your financial status and ability to obtain credit. 18+, UK residents only. Subject to status. [Ts&Cs and late fees apply.](https://www.klarna.com/uk/terms-and-conditions/) **Remember to always add an appropriate risk warning in the disclosure which needs to be prominently displayed above the disclosure and near the top the benefits being promoted.** ## Restricted Expressions Be careful when using these phrases in your advertising of Klarna's regulated Financing products **“Overdraft”**, must not be used, **unless**you are offering a running-account credit agreement  which enables a consumer to overdraw on a  current account  **“Interest free”**, or any similar **expression**, must not be stated unless the total amount payable does not exceed the cash price  **“No deposit”**, can only be used where there are no advance payments to be made  **“Gift”**, **“present”**, or any similar expression can only be used where there are no conditions which would require a consumer to repay the credit or return the  item that is the subject of the claim  **“Weekly equivalent”**or any similar expression or other periodical equivalent, unless weekly repayment or the other periodical payments  are provided for under the agreement ## Representative annual percentage rate (APR) When a financial promotion must  include a representative APR. ### When a financial promotion must include a representative APR Unless the representative APR is 0%, the representative  APR will need to be clearly displayed within the  example. The representative APR must also be shown  when a financial promotion:  - States or implies that credit is available to persons  who might consider their access to credit restricted  - Includes a favourable comparison relating to the  credit, whether express or implied, with another  person, product or service; or  - Includes an incentive to apply for credit or to  enter into an agreement under which credit is  provided (e.g. the speed or ease of processing the  application, considering or granting an application,  or making funds available to apply for credit or enter  into a credit agreement etc.)  The content of your promotion will determine  whether the representative APR can be shown in  isolation or whether it must be shown as part of the  ‘representative example’.  The representative APR is the APR at or below which  you reasonably expect, at the date on which the  promotion is communicated, that credit would be  provided under at least 51% of the credit agreements  which will be entered into as a result of the promotion.  In other words, the % APR that consumers are most  likely to be approved for, should be used as your  representative APR.  A representative APR must be shown as a % APR’  and used with the word ‘representative’. Where a  representative APR is subject to change it must be  accompanied by the word “variable’’.   It should be noted that the representative APR must be  given no less prominence than any of the other matters  referred to in this guide (e.g. an inducement or an  incentive to apply for credit etc.).  ### Calculation of the annual percentage rate of charge The annual percentage rate of charge is calculated  in accordance with the mathematical formula set out in **CONC**.  **Triggers for showing representative APR** - Our lowest rates ever - Been refused for credit? - Apply for credit today and get a free pen - Simple, quick and easy credit - why wait? Apply now! - Get 10% discount on any credit purchase if you apply before 31st March **Does not trigger the need to show a representative APR** - We offer efficient friendly consumer service - We act as a credit broker not a lender ## Representative Example ### When a financial  promotion must include a  representative example.  Where a financial promotion includes **a rate of interest**(excluding the representative APR) or **an amount relating to the cost of credit**it must include a ‘**representative example**’, and **specify a postal address of the firm making the financial  promotion**(i.e. the postal address of the merchant).  A rate of interest for this purpose is not limited  to an annual rate of interest and would include a  monthly or daily rate or an APR. An amount relating  to the cost of credit would include the amount  of any fee or charge, or any repayment of credit  (where it includes interest or other charges).  It should be noted that a firm making the  financial promotion does not need to specify a postal address when the promotion is being  communicated by television or radio broadcast, or  is on the firm’s premises, unless the promotion is  made in writing which the consumer can take away.  The representative example must comprise the  information listed in the standard information as  shown on the following page and must be  accompanied by the words ‘’representative  example’’. It must be representative of agreements  to which the representative APR applies and which  are expected to result from the advertisement.  The representative example is unlikely to be  representative if, for example, most consumers  entering into agreements as a result of the financial  promotion are likely to do so for a lower amount of credit than that indicated in the example, or with  higher rates of interest or other charges than those  indicated in the example. **A representative example MUST**also include all of the following for a **fixed sum regulated  credit agreement (fixed duration): ** 1. The rate of interest and whether it is fixed  or variable or both, expressed as a fixed or  variable percentage applied on an annual  basis to the amount of credit drawn down  2. The nature and amount of any other charge  included in the total charge for credit  3. The total amount of credit   4. The representative APR  5. In the case of credit in the form of a  deferred payment for specific goods,  services or other things, the cash price  and the amount of any advance payment  6. The duration of the agreement  7. Total amount payable; and  8. The amount of each repayment of credit   **The information contained in a representative  example must be: ** - Specified in a clear, concise and prominent way  - Accompanied by the words “representative example”  - Presented together, with each item of  information being given equal prominence  **And given no less prominence than: ** - Any other information relating to the cost of  credit in the financial promotion; and  - Any indication or incentive encouraging the  consumer to apply for credit  **Guidance on total charge for credit** The total cost of credit represents the true cost to  the borrower of the credit provided, or to be provided,  under a regulated credit agreement and includes  fees and/or charges payable by the consumer to  a credit broker.  **Guidance on the total amount  of credit** The total amount of credit equates to the sum available  to the consumer to use under the credit agreement (i.e.  the credit limit) and does not include charges which are  financed by the credit agreement; those are part of the  total charge for credit. ### Representative Example (layout examples) ![klarna docs image](b18c8b65-ec73-4094-b31c-70b46aa875cf-Representative-Example-Layout.jpeg)image --- # Source: https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/rest-of-the-world.md # Partner marketing legal guidelines - Rest of the world ## Partner marketing guidelines for additional markets: keep Klarna messaging simple, clear and fair; avoid debt-encouraging language; ensure socially responsible ads. ​​​**Keep it simple.** Don’t lose a customer because the payment instructions were too complicated, but do make it clear what you are offering. **Stand out for the right reason.** Highlight the payment option you offer, but be sure to be clear, fair and not misleading. **Be sensitive to the situation.** Consider what is going with your customers and in the wider market as a whole. Use this knowledge to decide how you promote and market Klarna in all your channels. One message does not fit all circumstances. **Don't encourage debt.** Do not encourage shoppers to spend outside of their means. Using phrases such as *‘strapped for cash?’*, *‘don’t wait until payday’* or *‘broke AF’* are unacceptable and irresponsible. You have an obligation to ensure your customers stay financially healthy. **Make sure your ads are socially responsible to consumers and society.** Offers or benefits should not be linked to credit marketing which are likely to make the credit offer attractive. | Market | T&C | |----|----| | **Austria** | [[https://www.klarna.com/at/agb/](https://www.klarna.com/at/agb/)](https://www.klarna.com/at/agb/) | | **Belgium** | [[https://www.klarna.com/be/voorwaarden/](https://www.klarna.com/be/voorwaarden/)](https://www.klarna.com/be/voorwaarden/) | | **Czech Republic** | [[https://www.klarna.com/cz/obchodni-podminky/](https://www.klarna.com/cz/obchodni-podminky/)](https://www.klarna.com/cz/obchodni-podminky/) | | **Denmark** | [[https://www.klarna.com/dk/vilkar/](https://www.klarna.com/dk/vilkar/)](https://www.klarna.com/dk/vilkar/) | | **Finland** | [[https://www.klarna.com/fi/ehdot/](https://www.klarna.com/fi/ehdot/)](https://www.klarna.com/fi/ehdot/) | | **France** | [[https://www.klarna.com/fr/legal/](https://www.klarna.com/fr/legal/)](https://www.klarna.com/fr/legal/) | | **Germany** | [[https://www.klarna.com/de/agb/](https://www.klarna.com/de/agb/)](https://www.klarna.com/de/agb/) | | **Greece** | [[https://www.klarna.com/gr/oroi-kai-proypotheseis/](https://www.klarna.com/gr/oroi-kai-proypotheseis/)](https://www.klarna.com/gr/oroi-kai-proypotheseis/) | | **Hungary** | [[https://www.klarna.com/hu/jogi-informaciok/](https://www.klarna.com/hu/jogi-informaciok/)](https://www.klarna.com/hu/jogi-informaciok/) | | **Italy** | [[https://www.klarna.com/it/legal/](https://www.klarna.com/it/legal/)](https://www.klarna.com/it/legal/) | | **Mexico** | [[https://www.klarna.com/mx/terminos-y-condiciones/](https://www.klarna.com/mx/terminos-y-condiciones/)](https://www.klarna.com/mx/terminos-y-condiciones/) | | **Netherlands** | [[https://www.klarna.com/nl/voorwaarden/](https://www.klarna.com/nl/voorwaarden/)](https://www.klarna.com/nl/voorwaarden/) | | **Norway** | [[https://www.klarna.com/no/vilkar/](https://www.klarna.com/no/vilkar/)](https://www.klarna.com/no/vilkar/) | | **Poland** | [[https://www.klarna.com/pl/zasady-i-warunki/](https://www.klarna.com/pl/zasady-i-warunki/)](https://www.klarna.com/pl/zasady-i-warunki/) | | **Portugal** | [[https://www.klarna.com/pt/termos-e-condicoes/](https://www.klarna.com/pt/termos-e-condicoes/)](https://www.klarna.com/pt/termos-e-condicoes/) | | **Romania** | [[https://www.klarna.com/ro/aspecte-juridice/](https://www.klarna.com/ro/aspecte-juridice/)](https://www.klarna.com/ro/aspecte-juridice/) | | **Sweden** | [[https://www.klarna.com/se/villkor/](https://www.klarna.com/se/villkor/)](https://www.klarna.com/se/villkor/) | | **Switzerland** | [[https://www.klarna.com/en-ch/terms-of-use/](https://www.klarna.com/en-ch/terms-of-use/)](https://www.klarna.com/en-ch/terms-of-use/) | For pre-approved marketing assets, please see our [Online assets](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/online-marketing/) or [In-store marketing](https://docs.klarna.com/resources/marketing-tools/global-marketing-assets/pre-made-advertising-assets/in-store-marketing/) sections. ​*Klarna may review and monitor your advertising and marketing of Klarna's products and services, including through automated means, to ensure your marketing complies with applicable laws, rules, and regulations.* --- # Source: https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data.md # Sample customer data ## This page contains sample data you can use for testing your integration in the Klarna playground environment. Use the sample customer data in this page to test the standard approved and denied payment flows in Klarna payments. If you want to test non-standard flows, such as pending payments or presenting only pre-paid payment options, see the Other test scenarios section in this page. If you want to test different payment methods, direct debit, credit card, and bank transfer, use the [data in our sample data](https://docs.klarna.com/resources/developer-tools/sample-data/sample-payment-data/). ### About user account To make a purchase new users in most countries go through an account creation wizard, provide their personal data, and enter a verification code to create their Klarna user account. To test a new Klarna user account, select a combination of a random phone number and an email matching the required pattern. If the combination was used during sign-up before, you'll be logged into an existing account after providing a one-time password (OTP). In the playground environment, you can use any valid 6-digit number other than *999999* as the OTP. One user account is only valid in a single market. For example, you can't use the same email address or phone number to test purchases in a playground store in Germany and Sweden. User account is available in all countries included in the sample customer data list, except for Switzerland and Finland. If you choose to create a new account rather than using one of the provided sample customer accounts on this page, any Personally Identifiable Information (PII) will be substituted with synthetically generated data. Consequently, you may notice different account values from those you provided. This helps us prevent data leaks in our playground environment. ### Sample customer data Use the sample data for private persons to test B2C transactions. The company test data can be used for testing B2B transactions. If you're testing a B2B transaction with Billie, please refer to [Billie’s sample data](https://docs.billie.io/docs/international-test-buyer-accounts) for guidance. The B2C sample data in this article s split into two sub-categories: - Standard flows shows the data for testing standard responses approved and denied transactions. - Custom flows shows the data for testing flows other than the standard approved and denied transactions, for example, launching a dispute. Below is a list of email addresses associated with standard and custom test flows. When testing, replace the final two asterisks with a 2-letter country code of a Klarna market. For example, to test an approved transaction flow for Sweden, use *customer@email.se*. #### Standard flows | Email address pattern | Description | |----|----| | customer@email.\*\* | Accept purchase. **Message:**"None, auth_token (valid 60 minutes) is returned for use in create_order" | | customer+denied@email.\*\* | Hard decline. **Message:**"Your purchase can not be accepted Unfortunately your purchase can not be accepted at this moment. Please choose a different payment method to complete your purchase." | #### Custom flows | Email address pattern | Description | |----|----| | customer+new_user@email.\*\* | New user sign up flow. Payment method specific details (e.g. cards) are stored to the user. | | customer+disputed-return@email.\*\* | Creates a dispute on each capture of the order with the reason return and one open dispute request | | customer+disputed-goods_not_received@email.\*\* | Creates a dispute on each capture of the order with the reason goods not received and one open dispute request | | customer+disputed-already_paid@email.\*\* | Creates a dispute on each capture of the order with the reason already paid and one open dispute request | | customer+disputed-faulty_goods@email.\*\* | Creates a dispute on each capture of the order with the reason faulty goods and one open dispute request | | customer+disputed-incorrect_invoice@email.\*\* | Creates a dispute on each capture of the order with the reason incorrect invoice and one open dispute request | | customer+disputed-high_risk_order@email.\*\* | Creates a high-risk order (formerly known as stop request) on order level. | | customer+disputed-non_compliance@email.\*\* | Creates a non compliance type of dispute. | | customer+disputed-non_guaranteed_payment_program@email.\*\* | Creates a non guaranteed payment program type of dispute | | customer+disputed-unauthorized_purchase@email.\*\* | Creates a dispute on each capture of the order with the reason unauthorized_purchase and one open dispute request | | customer+disputed-return_not_possible@email.\*\* | Creates a return not possible type of dispute | As we're constantly improving the testing experience, you may not able to test the denied payment flow in some markets, for example, Sweden and Norway. Please contact Klarna merchant support for more information. ## All Countries Select a country to view the sample data you can use to test Klarna. | | | | | |----|----|----|----| | **[Australia 🇦🇺](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#asia-and-oceania-australia)** | **[Austria 🇦🇹](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#europe-austria)** | **[Belgium 🇧🇪](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#europe-belgium)** | **[Canada 🇨🇦](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#americas-canada)** | | **[Czech Republic 🇨🇿](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#europe-czech-republic)** | **[Denmark 🇩🇰](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#europe-denmark)** | **[Finland 🇫🇮](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#europe-finland)** | **[France 🇫🇷](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#europe-france)** | | **[Germany 🇩🇪](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#europe-germany)** | **[Greece 🇬🇷](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#europe-greece)** | **[Hungary 🇭🇺](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#europe-hungary)** | **[Ireland 🇮🇪](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#europe-ireland)** | | **[Italy 🇮🇹](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#europe-italy)** | **[Mexico 🇲🇽](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#americas-mexico)** | **[Netherlands 🇳🇱](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#europe-netherlands)** | **[New Zealand 🇳🇿](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#asia-and-oceania-new-zealand)** | | **[Norway 🇳🇴](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#europe-norway)** | **[Poland 🇵🇱](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#europe-poland)** | **[Portugal 🇵🇹](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#europe-portugal)** | **[Romania 🇷🇴](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#europe-romania)** | | **[Slovakia 🇸🇰](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#europe-slovakia)** | **[Spain 🇪🇸](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#europe-spain)** | **[Sweden 🇸🇪](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#europe-sweden)** | **[Switzerland🇨🇭](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#europe-switzerland)** | | **[United Kingdom 🇬🇧](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#europe-united-kingdom)** | **[United States of America 🇺🇸](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/#americas-united-states-of-america)** | | | ## Europe ### Austria #### Private person | Flow | Email address | Phone number | |----|----|----| | Approved | customer@email.at | +4306762600456 | | Denied | customer+denied@email.at | +4306762600745 | | New user sign up | customer+new_user@email.at | +4306762600721 | | Dispute: return | customer+disputed-return@email.at | +4306762600762 | | Dispute: goods not received | customer+disputed-goods_not_received@email.at | +4306762600763 | | Dispute: order already paid | customer+disputed-already_paid@email.at | +4306762600764 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.at | +4306762600765 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.at | +4306762600766 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.at | +4306762600767 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.at | +4306762600768 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.at | +4306762600770 | | Dispute: non-compliance | customer+disputed-non_compliance@email.at | +4306762600771 | | Dispute: return not possible | customer+return_not_possible@email.at | +4306762600771 | | Field | Approved | Denied | Other flows | |----|----|----|----| | First name | Test | Test | Person AT | | Last name | Person-at | Person-at | Test | | Address | Mariahilfer Straße 47 | Mariahilfer Straße 47 | E Opernring 2 | | Zip code | 1060 | 1060 | 1010 | | City | Wien | Wien | Wien | | Country | AT | AT | AT | | Date of birth (DD-MM-YYYY) | 10-07-1970 | 10-07-1970 | 01-01-2000 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | ### Belgium #### Private person | Flow | Email address | Phone number | |----|----|----| | Approved | customer@email.be | +32485121291 | | Denied | customer+denied@email.be | +32485212123 | | New user sign up | customer+new_user@email.be | +32485212101 | | Dispute: return | customer+disputed-return@email.be | +32485212140 | | Dispute: goods not received | customer+disputed-goods_not_received@email.be | +32485212141 | | Dispute: order already paid | customer+disputed-already_paid@email.be | +32485212142 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.be | +32485212143 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.be | +32485212144 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.be | +32485212145 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.be | +32485212146 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.be | +32485212150 | | Dispute: non-compliance | customer+disputed-non_compliance@email.be | +32485212151 | | Dispute: return not possible | customer+disputed-return_not_possible@email.be | +32485212152 | | Field | Approved | Denied | Other flows | |----|----|----|----| | First name | Test | Test | Person BE | | Last name | Person-be | Person-be | Test | | Address | Grote Markt 1 | Grote Markt 1 | Parc du Cinquantenaire 10 | | Zip code | 1000 | 1000 | 1000 | | City | Brussel | Brussel | Bruxelles | | Country | BE | BE | BE | | Date of birth (DD-MM-YYYY) | 10-07-1970 | 10-07-1970 | 01-01-2000 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | ### Czech Republic #### Private person | Flow | Email address | Phone number | |----|----|----| | Approved | customer@email.cz | +420771613715 | | Denied | customer+denied@email.cz | +420771623691 | | New user sign up | customer+new_user@email.cz | +420771623765 | | Dispute: return | customer+disputed-return@email.cz | +420771623708 | | Dispute: goods not received | customer+disputed-goods_not_received@email.cz | +420771623709 | | Dispute: order already paid | customer+disputed-already_paid@email.cz | +420771623710 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.cz | +420771623711 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.cz | +420771623712 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.cz | +420771623713 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.cz | +420771623714 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.cz | +420771623720 | | Dispute: non-compliance | customer+disputed-non_compliance@email.cz | +420771623721 | | Dispute: return not possible | customer+disputed-return_not_possible@email.cz | +420771623722 | | Field | Approved | Denied | Other flows | |----|----|----|----| | First name | Test | Test | Person CZ | | Last name | Person-cz | Person-cz | Test | | Address | Zazvorkova 1480/11 | Zázvorkova 1480/11 | Panská 7 | | Zip code | 155 00 | 155 00 | 110 00 | | City | Praha | PRAHA 13 | Praha | | Country | CZ | CZ | CZ | | Date of birth (DD-MM-YYYY) | 01-01-1970 | 27-06-1992 | 01-01-2000 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | ### Denmark #### Private person | Flow | Email address | Phone number | |----|----|----| | Approved | customer@email.dk | +4542555628 | | Denied | customer+denied@email.dk | +4552555348 | | New user sign up | customer+new_user@email.dk | +4561555920 | | Dispute: return | customer+disputed-return@email.dk | +4561555921 | | Dispute: goods not received | customer+disputed-goods_not_received@email.dk | +4531555956 | | Dispute: order already paid | customer+disputed-already_paid@email.dk | +4571555576 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.dk | +4561555601 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.dk | +4571555705 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.dk | +4541555404 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.dk | +4525558959 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.dk | +4561555930 | | Dispute: non-compliance | customer+disputed-non_compliance@email.dk | +4561555931 | | Dispute: return not possible | customer+disputed-return_not_possible@email.dk | +4561555932 | | Bank Authentication | customer+denied+auth_monthio@email.dk | +4561555922 | | Field | Approved | Denied | Other flows | |----|----|----|----| | First name | Test | Test | Person DK | | Last name | Person-dk | Person-dk | Test | | Address | Dantes Plads 7 | Nygårdsvej 65 | Dantes Plads 7 | | Zip code | 1556 | 2100 | 1556 | | City | København Ø | København Ø | København Ø | | Country | DK | DK | DK | | Date of birth (DD-MM-YYYY) | 01-01-1980 | 10-07-1970 | 01-01-2000 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | #### Company | Field | Approved | Denied | |-----------------------------|---------------------|----------------------------| | Company registration number | 27968880 | 99999993 | | Company name | Testcompany-dk | Testcompany-dk | | Street | Nygårdsvej 65 | Nygårdsvej 65 | | Zip code | 2100 | 2100 | | City | København Ø | København Ø | | Phone number | 20123456 | 20123456 | | Email | youremail@email.com | youremail+denied@email.com | ### Finland #### Private person | Flow | Email address | Phone number | |----|----|----| | Approved | customer@email.fi | +358401234567 | | Denied | customer+denied@email.fi | +358401234568 | | New user sign up | customer+new_user@email.fi | +358401234584 | | Dispute: return | customer+disputed-return@email.fi | +358401234585 | | Dispute: goods not received | customer+disputed-goods_not_received@email.fi | +358401234586 | | Dispute: order already paid | customer+disputed-already_paid@email.fi | +358401234587 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.fi | +358401234588 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.fi | +358401234589 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.fi | +358401234590 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.fi | +358401234591 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.fi | +358401234600 | | Dispute: non-compliance | customer+disputed-non_compliance@email.fi | +358401234601 | | Dispute: return not possible | customer+disputed-return_not_possible@email.fi | +358401234602 | | Bank Authentication | customer+denied+auth_bank_id_fi@email.fi Use Nordea with DEMOUSER4 for approved authentication. | +358401234596 | | Field | Approved | Denied | Other flows | |----|----|----|----| | First name | Test | Person FI | Person FI | | Last name | Person-fi | Test | Test | | Address | Mannerheimintie 34 | Mannerheimintie 34 | Mannerheimintie 34 | | Zip code | 00100 | 00100 | 00100 | | City | Helsinki | Helsinki | Helsinki | | Country | FI | FI | FI | | Date of birth (DD-MM-YYYY) | 01-01-1999 | 01-01-1999 | 01-01-2000 | | Personal number | 190122-829F | | | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | #### Company | Approved | Denied | |-----------------------------|---------------------| | Company registration number | 10891871 | | Company name | Testcompany-fi | | Street | Kiväärikatu 10 | | Zip code | 28100 | | City | Pori | | Phone number | 0401234567 | | Email | youremail@email.com | ### France #### Private person | Flow | Email address | Phone number | |----|----|----| | Approved | customer@email.fr | +33689854321 | | Denied | customer+denied@email.fr | +33687984322 | | New user sign up | customer+new_user@email.fr | +33656194338 | | Dispute: return | customer+disputed-return@email.fr | +33656194339 | | Dispute: goods not received | customer+disputed-goods_not_received@email.fr | +33656194340 | | Dispute: order already paid | customer+disputed-already_paid@email.fr | +33656194341 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.fr | +33656194342 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.fr | +33656194343 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.fr | +33656194344 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.fr | +33656194345 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.fr | +33656194360 | | Dispute: non-compliance | customer+disputed-non_compliance@email.fr | +33656194361 | | Dispute: return not possible | customer+disputed-return_not_possible@email.fr | +33656194362 | | ID Scan | customer+denied+auth_id_scan@email.fr | +33644974346 | | Field | Approved | Denied | Other flows | |----|----|----|----| | First name | Test | Test | Person FR | | Last name | Person-fr | Person-fr | Test | | Address | 33 rue la Fayette | 33 rue la Fayette | 57 Rue Cuvier | | Zip code | 75009 | 75009 | 75005 | | City | Paris | Paris | Paris | | Country | FR | FR | FR | | Date of birth (DD-MM-YYYY) | 10-07-1990 | 10-07-1990 | 01-01-2000 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | ### Germany #### Private person | Flow | Email address | Phone number | |----|----|----| | Approved | customer@email.de | +49017614284340 | | Denied | customer+denied@email.de | +49017610927312 | | New user sign up | customer+new_user@email.de | +491713920066 | | Dispute: return | customer+disputed-return@email.de | +491713920016 | | Dispute: goods not received | customer+disputed-goods_not_received@email.de | +491713920017 | | Dispute: order already paid | customer+disputed-already_paid@email.de | +491713920018 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.de | +491713920019 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.de | +491713920020 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.de | +491713920021 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.de | +491713920022 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.de | +491713920030 | | Dispute: non-compliance | customer+disputed-non_compliance@email.de | +491713920031 | | Dispute: return not possible | customer+disputed-return_not_possible@email.de | +491713920032 | | Field | Approved | Denied | Other flows | |----|----|----|----| | First name | Mock | Test | Person DE | | Last name | Mock | Person-de | Test | | Address | Neue Schönhauser Str. 2 | Neue Schönhauser Str. 2 | Bodestr. 1-3 | | Zip code | 10178 | 10178 | 10178 | | City | Berlin | Berlin | Berlin | | Country | DE | DE | DE | | Date of birth (DD-MM-YYYY) | 10-07-1970 | 10-07-1970 | 01-01-2000 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | ### Greece #### Private person | Flow | Email address | Phone number | |----|----|----| | Approved | customer@email.gr | +306945553624 | | Denied | customer+denied@email.gr | +306945553625 | | New user sign up | customer+new_user@email.gr | +306945553654 | | Dispute: return | customer+disputed-return@email.gr | +306945553642 | | Dispute: goods not received | customer+disputed-goods_not_received@email.gr | +306945553643 | | Dispute: order already paid | customer+disputed-already_paid@email.gr | +306945553644 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.gr | +306945553645 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.gr | +306945553646 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.gr | +306945553647 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.gr | +306945553648 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.gr | +306945553650 | | Dispute: non-compliance | customer+disputed-non_compliance@email.gr | +306945553651 | | Dispute: return not possible | customer+disputed-return_not_possible@email.gr | +306945553652 | | Field | Approved | Denied | Other flows | |----|----|----|----| | First name | Test | Test | Person GR | | Last name | Person-gr | Test-gr | Test | | Address | Kephisias 37 | Baralo 56 | Dionysiou Areopagitou 15 | | Zip code | 151 23 | 123 67 | 117 42 | | City | Athina | Athina | Athens | | Country | GR | GR | GR | | Date of birth (DD-MM-YYYY) | 01-01-1960 | 11-11-1970 | 01-01-2000 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | | Tax number | 090000045 | 090000045 | 090000045 | ### Hungary #### Private person | Flow | Email address | Phone number | |----|----|----| | Approved | customer@email.hu | +36300102692 | | Denied | customer+denied@email.hu | +36705553575 | | New user sign up | customer+new_user@email.hu | +36505557327 | | Dispute: return | customer+disputed-return@email.hu | +36505557326 | | Dispute: goods not received | customer+disputed-goods_not_received@email.hu | +36701308232 | | Dispute: order already paid | customer+disputed-already_paid@email.hu | +36705553902 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.hu | +36201093784 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.hu | +36315555600 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.hu | +36385393517 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.hu | +36705550064 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.hu | +36505557330 | | Dispute: non-compliance | customer+disputed-non_compliance@email.hu | +36505557331 | | Dispute: return not possible | customer+disputed-return_not_possible@email.hu | +36505557332 | | Field | Approved | Denied | Other flows | |----------------------------|----------------|----------------|----------------| | First name | Test | Person HU | Person HU | | Last name | Person-hu | Test | Test | | Address | Ludovika tér 2 | Ludovika tér 2 | Ludovika tér 2 | | Zip code | 1083 | 1083 | 1083 | | City | Budapest | Budapest | Budapest | | Country | HU | HU | HU | | Date of birth (DD-MM-YYYY) | 01-01-2000 | 01-01-2000 | 01-01-2000 | ### Ireland #### Private person | Flow | Email address | Phone number | |----|----|----| | Approved | customer@email.ie | +353855351400 | | Denied | customer+denied@email.ie | +353855351401 | | New user sign up | customer+new_user@email.ie | +353855351432 | | Dispute: return | customer+disputed-return@email.ie | +353855351418 | | Dispute: goods not received | customer+disputed-goods_not_received@email.ie | +353855351419 | | Dispute: order already paid | customer+disputed-already_paid@email.ie | +353855351420 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.ie | +353855351421 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.ie | +353855351422 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.ie | +353855351423 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.ie | +353855351424 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.ie | +353855351430 | | Dispute: non-compliance | customer+disputed-non_compliance@email.ie | +353855351431 | | Dispute: return not possible | customer+disputed-return_not_possible@email.ie | +353855351433 | | ID Scan | customer+denied+auth_id_scan@email.ie | +353855351425 | | Field | Approved | Denied | Other flows | |----|----|----|----| | First name | Test | Test | Person IE | | Last name | Person-ie | Person-ie | Test | | Address | 30 King Street South | 30 King Street South | 25 Merrion Street Upper | | Zip code | D02 C838 | D02 C838 | D02 AW74 | | City | Dublin | Dublin | Dublin | | Country | IE | IE | IE | | Date of birth (DD-MM-YYYY) | 10-07-1970 | 10-07-1970 | 01-01-2000 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | ### Italy #### Private person | Flow | Email address | Phone number | |----|----|----| | Approved | customer@email.it | +393339741231 | | Denied | customer+denied@email.it | +393312232389 | | New user sign up | customer+new_user@email.it | +393312232432 | | Dispute: return | customer+disputed-return@email.it | +393312232406 | | Dispute: goods not received | customer+disputed-goods_not_received@email.it | +393312232407 | | Dispute: order already paid | customer+disputed-already_paid@email.it | +393312232408 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.it | +393312232409 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.it | +393312232410 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.it | +393312232411 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.it | +393312232412 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.it | +393312232420 | | Dispute: non-compliance | customer+disputed-non_compliance@email.it | +393312232421 | | Dispute: return not possible | customer+disputed-return_not_possible@email.it | +393312232422 | | ID Scan | customer+denied+auth_id_scan@email.it | +393312232413 | | Field | Approved | Denied | Other flows | |-----|--------|------|-----------| | First name | Test | Test | Person IT | | Last name | Person-it | Person-it | Test | | Address | Via Enrico Fermi 150 | Via Enrico Fermi 150 | Piazza del Popolo 12 | | Zip code | 00146 | 00146 | 00187 | | City | Roma | Roma | Roma | | Country | IT | IT | IT | | Fiscal code (Codice fiscale) | RSS BNC 80A41 H501B | RSS BNC 80A41 H501B | | | Date of birth (DD-MM-YYYY) | 01-01-1980 | 01-01-1980 | 01-01-2000 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | ### Netherlands #### Private person | Flow | Email address | Phone number | |----|----|----| | Approved | customer@email.nl | +31689124321 | | Denied | customer+denied@email.nl | +31632167678 | | New user sign up | customer+new_user@email.nl | +31632167655 | | Dispute: return | customer+disputed-return@email.nl | +31632167695 | | Dispute: goods not received | customer+disputed-goods_not_received@email.nl | +31632167696 | | Dispute: order already paid | customer+disputed-already_paid@email.nl | +31632167697 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.nl | +31632167698 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.nl | +31632167699 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.nl | +31632167700 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.nl | +31632167701 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.nl | +31632167710 | | Dispute: non-compliance | customer+disputed-non_compliance@email.nl | +31632167711 | | Dispute: return not possible | customer+disputed-return_not_possible@email.nl | +31632167712 | | Field | Approved | Denied | Other flows | |----|----|----|----| | First name | Test | Test | Person NL | | Last name | Person-nl | Person-nl | Test | | Address | Osdorpplein 137 | Osdorpplein 137 | Museumstraat 1 | | Zip code | 1068 SR | 1068 SR | 1071 XX | | City | Amsterdam | Amsterdam | Amsterdam | | Country | NL | NL | NL | | Date of birth (DD-MM-YYYY) | 10-07-1970 | 10-07-1970 | 01-01-2000 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | ### Norway #### Private person When testing different flows, make sure to add National Identification Number before continuing with BankID in order to get the intended flow. | Flow | Email address | Phone number | National Identification Number | |----|----|----|----| | Approved | customer@email.no | +4740123456 | NO01087000571 | | Denied | customer+denied@email.no | +4740123457 | NO01087000148 | | New user sign up | customer+new_user@email.no | +4740123485 | NO09117548023 | | Dispute: return | customer+disputed-return@email.no | +4740123474 | NO30062449205 | | Dispute: goods not received | customer+disputed-goods_not_received@email.no | +4740123475 | NO27083206670 | | Dispute: order already paid | customer+disputed-already_paid@email.no | +4740123476 | NO14040845144 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.no | +4740123477 | NO16089639496 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.no | +4740123478 | NO19046731789 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.no | +4740123479 | NO27115906319 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.no | +4740123480 | NO25064127953 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.no | +4740123490 | NO05117538967 | | Dispute: non-compliance | customer+disputed-non_compliance@email.no | +4740123491 | NO09108528945 | | Dispute: return not possible | customer+disputed-return_not_possible@email.no | +4740123492 | NO09108578989 | | Field | Approved | Denied | Other flows | |----|----|----|----| | First name | Jane | Test | Person NO | | Last name | Test | Person-no | Test | | Address | Edvard Munchs Plass 1 | Sæffleberggate 56 | Edvard Munchs Plass 1 | | Zip code | 0194 | 0563 | 0194 | | City | Oslo | Oslo | Oslo | | Country | NO | NO | NO | | Date of birth (DD-MM-YYYY) | 01-08-1970 | 01-08-1970 | 01-01-2000 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | #### Company | | Approved | Denied | |-----------------------------|---------------------|----------------------------| | Company registration number | 999999999 | 811111112 | | Company name | Testcompany-no | Testcompany-no | | Street | Sæffleberggate 56 | Sæffleberggate 56 | | Zip code | 0563 | 0563 | | City | Oslo | Oslo | | Email | youremail@email.com | youremail+denied@email.com | ### Poland #### Private person | Flow | Email address | Phone number | |----|----|----| | Approved | customer@email.pl | +48795222223 | | Denied | customer+denied@email.pl | +48795223325 | | New user sign up | customer+new_user@email.pl | +48795223355 | | Dispute: return | customer+disputed-return@email.pl | +48795223342 | | Dispute: goods not received | customer+disputed-goods_not_received@email.pl | +48795223343 | | Dispute: order already paid | customer+disputed-already_paid@email.pl | +48795223344 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.pl | +48795223345 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.pl | +48795223346 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.pl | +48795223347 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.pl | +48795223348 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.pl | +48795223350 | | Dispute: non-compliance | customer+disputed-non_compliance@email.pl | +48795223351 | | Dispute: return not possible | customer+disputed-return_not_possible@email.pl | +48795223352 | | Field | Approved | Denied | Other flows | |----|----|----|----| | First name | Test | Test | Person PL | | Last name | Person-pl | Person-pl | Test | | Address | Ul. Górczewska 124 | Ul. Górczewska 124 | Rynek Starego Miasta 28 | | Zip code | 01-460 | 01-460 | 00-272 | | City | Warszawa | Warszawa | Warszawa | | Country | PL | PL | PL | | Date of birth (DD-MM-YYYY) | 05-05-1967 | 05-05-1967 | 01-01-2000 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | ### Portugal #### Private person | Flow | Email address | Phone number | |----|----|----| | Approved | customer@email.pt | +351935556731 | | Denied | customer+denied@email.pt | +351915593837 | | New user sign up | customer+new_user@email.pt | +351808151176 | | Dispute: return | customer+disputed-return@email.pt | +351808151188 | | Dispute: goods not received | customer+disputed-goods_not_received@email.pt | +351760715143 | | Dispute: order already paid | customer+disputed-already_paid@email.pt | +351762748941 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.pt | +351302066842 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.pt | +351926839015 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.pt | +351301381736 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.pt | +351937416657 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.pt | +351808151190 | | Dispute: non-compliance | customer+disputed-non_compliance@email.pt | +351808151191 | | Dispute: return not possible | customer+disputed-return_not_possible@email.pt | +351808151192 | | ID Scan | customer+denied+auth_id_scan@email.pt | +351912341112 | | Field | Approved | Denied | Other flows | |----|----|----|----| | First name | Test | Test | Person PT | | Last name | Person-pt | Person-pt | Test | | Address | Avenida Dom João II 40 | Avenida Dom João II 40 | Praça do Comércio 78 | | Zip code | 1990-094 | 1990-094 | 1100-148 | | City | Lisboa | Lisboa | Lisboa | | Country | PT | PT | PT | | Date of birth (DD-MM-YYYY) | 10-07-1990 | 10-07-1990 | 01-01-2000 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | ### Romania #### Private person | Flow | Email address | Phone number | |----|----|----| | Approved | customer@email.ro | +40741209876 | | Denied | customer+denied@email.ro | +40707127444 | | New user sign up | customer+new_user@email.ro | +40707129334 | | Dispute: return | customer+disputed-return@email.ro | +40707129331 | | Dispute: goods not received | customer+disputed-goods_not_received@email.ro | +40707129442 | | Dispute: order already paid | customer+disputed-already_paid@email.ro | +40707129553 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.ro | +40707129664 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.ro | +40707129775 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.ro | +40707129886 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.ro | +40707129997 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.ro | +40707129340 | | Dispute: non-compliance | customer+disputed-non_compliance@email.ro | +40707129341 | | Dispute: return not possible | customer+disputed-return_not_possible@email.ro | +40707129342 | | Field | Approved | Denied | Other flows | |----|----|----|----| | First name | Test | Test | Person RO | | Last name | Person-ro | Person-ro | Test | | Address | Drumul Taberei 35 | Drumul Taberei 35 | Calea Victoriei 12 | | Zip code | 061357 | 061357 | 030026 | | City | București | București | București | | Sector | Sectorul 6 | Sectorul 6 | Sectorul 3 | | Country | RO | RO | RO | | Date of birth (DD-MM-YYYY) | 25-12-1970 | 25-12-1970 | 01-01-2000 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | | Personal Identification Number (CNP) | 1701225193558 | | | ### Slovakia #### Private person | Flow | Email address | Phone number | |----|----|----| | Approved | customer@email.sk | +421905123456 | | Denied | customer+denied@email.sk | +421905123457 | | New user sign up | customer+new_user@email.sk | +421905123432 | | Dispute: return | customer+disputed-return@email.sk | +421905123474 | | Dispute: goods not received | customer+disputed-goods_not_received@email.sk | +421905123475 | | Dispute: order already paid | customer+disputed-already_paid@email.sk | +421905123476 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.sk | +421905123477 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.sk | +421905123478 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.sk | +421905123479 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.sk | +421905123480 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.sk | +421905123490 | | Dispute: non-compliance | customer+disputed-non_compliance@email.sk | +421905123491 | | Dispute: return not possible | customer+disputed-return_not_possible@email.sk | +421905123492 | | Field | Approved | Denied | Other flows | |----|----|----|----| | First name | Test | Person Sk | Person Sk | | Last name | Person-sk | Test | Test | | Address | Vajanského nábrežie 2 | Vajanského nábrežie 2 | Vajanského nábrežie 2 | | Zip Code | 810 06 | 810 06 | 810 06 | | City | Bratislava | Bratislava | Bratislava | | Country | SK | SK | SK | | Date of birth (DD-MM-YYYY) | 01-01-2000 | 01-01-2000 | 07-10-1997 | | Personal Identification Number (Rodné Číslo) | 000101/0009 | 000101/0020 | 971007/0249 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | ### Spain #### Private person | Flow | Email address | Phone number | |----|----|----| | Approved | customer@email.es | +34672563009 | | Denied | customer+denied@email.es | +34682425101 | | New user sign up | customer+new_user@email.es | +34670097139 | | Dispute: return | customer+disputed-return@email.es | +34670097138 | | Dispute: goods not received | customer+disputed-goods_not_received@email.es | +34680859660 | | Dispute: order already paid | customer+disputed-already_paid@email.es | +34735215817 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.es | +34782234072 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.es | +34699002829 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.es | +34782153382 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.es | +34670369667 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.es | +34670097140 | | Dispute: non-compliance | customer+disputed-non_compliance@email.es | +34670097141 | | Dispute: return not possible | customer+disputed-return_not_possible@email.es | +34670097142 | | ID Scan | customer+denied+auth_id_scan@email.es | +34670097113 | | Field | Approved | Denied | Other flows | |----|----|----|----| | First name | Test | Test | Person ES | | Last name | Person-es | Person-es | Test | | DNI | 99999999R | 99999999R | 99999999R | | Address | C. de Atocha, 27 | C. de Atocha, 27 | Calle de Santa Isabel 52 DCHA | | Zip code | 28012 | 28012 | 28012 | | City | Madrid | Madrid | Madrid | | Country | ES | ES | ES | | Date of birth (DD-MM-YYYY) | 10-07-1970 | 10-07-1970 | 01-01-2000 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | ### Sweden #### Private person When testing different flows, make sure to add National Identification Number before continuing with BankID in order to get the intended flow. | Flow | Email address | Phone number | National Identification Number | |----|----|----|----| | Approved | customer@email.se | +46701740615 | SE194103219202 | | Denied | customer+denied@email.se | +46701740620 | SE194110288083 | | New user sign up | customer+new_user@email.se | +46701740656 | SE199502182380 | | Dispute: return | customer+disputed-return@email.se | +46701740637 | SE200001011287 | | Dispute: goods not received | customer+disputed-goods_not_received@email.se | +46701740638 | SE200001011493 | | Dispute: order already paid | customer+disputed-already_paid@email.se | +46701740639 | SE200001015270 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.se | +46701740640 | SE200001019744 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.se | +46701740641 | SE200001011485 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.se | +46701740642 | SE200001015726 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.se | +46701740643 | SE200001015973 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.se | +46701740660 | SE199304282388 | | Dispute: non-compliance | customer+disputed-non_compliance@email.se | +46701740661 | SE200412052391 | | Dispute: return not possible | customer+disputed-return_not_possible@email.se | +46701740662 | SE199108062390 | | Field | Approved | Denied | Other flows | |----|----|----|----| | First name | Alice | Test | Person SE | | Last name | Test | Person-se | Test | | Address | Södra Blasieholmshamnen 2 | Karlaplan 3 | Södra Blasieholmshamnen 2 | | Zip code | 11 148 | 11 460 | 11 148 | | City | Stockholm | Stockholm | Stockholm | | Country | SE | SE | SE | | Date of birth (DD-MM-YYYY) | 21-03-1941 | 28-10-1941 | 01-01-2000 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | #### Company | | Approved | Denied | |-----------------------------|---------------------|----------------------------| | Company registration number | 002031-0132 | 002032-0131 | | Company name | Testcompany-se | Testcompany-se | | Street \#1 | Stårgatan 1 | Stårgatan 1 | | Zip code \#1 | 12345 | 12345 | | City \#1 | Ankeborg | Ankeborg | | Street \#2 | Lillegatan 1 | Lillegatan 1 | | Zip code \#2 | 12334 | 12334 | | City \#2 | Ankeborg | Ankeborg | | Phone number | 0765260000 | 0765260000 | | Email | youremail@email.com | youremail+denied@email.com | ### Switzerland **The use of provided sample data is strongly recommended.** When using your own sample data, your test orders might get rejected: - Avoid using *test* or the plus sign *+* in either First name or Last name if you want to get your order approved. #### Private person | Flow | Email address | Phone number | |----|----|----| | Approved | customer@email.ch | +41758680000 | | Denied | customer+denied@email.ch | +41758680001 | | New user sign up | customer+new_user@email.ch | +41758680028 | | Dispute: return | customer+disputed-return@email.ch | +41758680018 | | Dispute: goods not received | customer+disputed-goods_not_received@email.ch | +41618680019 | | Dispute: order already paid | customer+disputed-already_paid@email.ch | +41618680020 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.ch | +41618680021 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.ch | +41618680022 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.ch | +41618680023 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.ch | +41618680024 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.ch | +41758680030 | | Dispute: non-compliance | customer+disputed-non_compliance@email.ch | +41758680031 | | Dispute: return not possible | customer+disputed-return_not_possible@email.ch | +41758680032 | | ID Scan | customer+denied+auth_id_scan@email.ch | +41758680025 | | Field | Approved | Denied | Other flows | |----|----|----|----| | First name | Accepted | Customer | Accepted | | Last name | Person-ch | Person-ch | Person-ch | | Address | Augustinergasse 2 | Bahnhofstrasse 77 | Augustinergasse 2 | | Zip code | 4051 | 8001 | 4051 | | City | Basel | Zürich | Basel | | Date of birth (DD-MM-YYYY) | 01-01-1990 | 01-01-2000 | 01-01-2000 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | ### United Kingdom #### Private person | Flow | Email address | Phone number | |----|----|----| | Approved | customer@email.uk | +447755564318 | | Denied | customer+denied@email.uk | +447355505530 | | New user sign up | customer+new_user@email.gb | +445674519812 | | Dispute: return | customer+disputed-return@email.uk | +445674519807 | | Dispute: goods not received | customer+disputed-goods_not_received@email.uk | +447455511475 | | Dispute: order already paid | customer+disputed-already_paid@email.uk | +447755535234 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.uk | +443794116227 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.uk | +443012348266 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.uk | +447555529984 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.uk | +447555595216 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.uk | +445674519810 | | Dispute: non-compliance | customer+disputed-non_compliance@email.uk | +445674519811 | | Dispute: return not possible | customer+disputed-return_not_possible@email.uk | +445674519814 | | ID Scan | customer+denied+auth_id_scan@email.co.uk | +445674519822 | | Bank Authentication | customer+denied+auth_bank_login@email.gb | +445674519815 | | Field | Approved | Denied | Other flows | |----|----|----|----| | First name | Test | Test | Person GB | | Last name | Person-uk | Person-uk | Test | | Address | 10 New Burlington Street Apt. 214 | 10 New Burlington Street Apt. 214 | 150 London Wall | | Zip code | W1S 3BE | W1S 3BE | EC2Y 5HN | | City | London | London | London | | Country | GB | GB | GB | | Date of birth (DD-MM-YYYY) | 10-07-1970 | 10-07-1970 | 01-01-2000 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | #### Term loan financing When testing term loan financing in playground, enter the following billing address details: | Field | Value | |------------------|----------------------------| | `city` | Test Town | | `country` | GB | | `email` | termloanfinancing@email.uk | | `family_name` | Cameroon | | `given_name` | Campbell | | `phone` | 07744225533 | | `postal_code` | X9 9LG | | `street_address` | 34 Global Avenue | You'll be asked to provide additional information, for example, about income and dependants. In this step, you're free to provide any details. In the next step, enter the following bank details: | Field | Value | |---------------------|----------------------| | Account holder name | Mr Campbell Cameroon | | Sort code | 20-00-00 | | Account number | 55779911 | ## Americas ### Canada #### Private person | Flow | Email address | Phone number | |----|----|----| | Approved | customer@email.ca | +15197438620 | | Denied | customer+denied@email.ca | +15197308624 | | New user sign up | customer+new_user@email.ca | +15195550145 | | Dispute: return | customer+disputed-return@email.ca | +15195550116 | | Dispute: goods not received | customer+disputed-goods_not_received@email.ca | +15195550117 | | Dispute: order already paid | customer+disputed-already_paid@email.ca | +15195550118 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.ca | +15195550119 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.ca | +15195550120 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.ca | +15195550121 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.ca | +15195550122 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.ca | +15195550140 | | Dispute: non-compliance | customer+disputed-non_compliance@email.ca | +15195550141 | | Dispute: return not possible | customer+disputed-return_not_possible@email.ca | +15195550142 | | ID Scan | customer+denied+auth_id_scan@email.ca | +15195550145 | | | email+reject_reason_OTHER@email.com | | | | email+reject_reason_COULD_NOT_ESTABLISH_IDENTITY@email.com | | | | email+reject_reason_CREDIT_LIMIT_EXCEEDED@email.com | | | | email+reject_reason_CUSTOMER_NOT_FULFILLING_PREVIOUS_ENGAGEMENTS@email.com | | | | email+reject_reason_EXTERNAL_HARD_REJECT@email.com | | | | email+reject_reason_HIGH_RISK@email.com | | | | email+reject_reason_LEGAL_RESTRAINTS@email.com | | | | email+reject_reason_TECHNICAL_ERROR@email.com | | | | email+reject_reason_INTERNAL_BLOCK@email.com | | | | email+reject_reason_LOW_CREDIT_RATING@email.com | | | | email+reject_reason_UNDER_AGE@email.com | | | | email+reject_reason_DENIED@email.com | | | Field | Approved | Denied | Other flows | |----|----|----|----| | First name | Test | Test | John | | Last name | Person-ca | Person-ca | Test | | Address | 2693 Byron Rd | 2693 Byron Rd | 380 Sussex Dr | | Zip code | V7H 1L9 | V7H 1L9 | K1N 9N4 | | City | North Vancouver | North Vancouver | Ottawa | | Province | BC | BC | ON | | Country | CA | CA | CA | | Date of birth (DD-MM-YYYY) | 10-07-1970 | 10-07-1970 | 01-01-2000 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | ### Mexico #### Private person | Flow Mexico | Email address | Phone number | |----|----|----| | Approved | customer@email.mx | +525593747739 | | Denied | customer+denied@email.mx | +525593747740 | | New user sign up | customer+new_user@email.mx | +525593747767 | | Dispute: return | customer+disputed-return@email.mx | +525593747757 | | Dispute: goods not received | customer+disputed-goods_not_received@email.mx | +525593747758 | | Dispute: order already paid | customer+disputed-already_paid@email.mx | +525593747759 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.mx | +525593747760 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.mx | +525593747761 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.mx | +525593747762 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.mx | +525593747763 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.mx | +525593747770 | | Dispute: non-compliance | customer+disputed-non_compliance@email.mx | +525593747771 | | Dispute: return not possible | customer+disputed-return_not_possible@email.mx | +525593747772 | | Field Mexico | Approved | Denied | Other flows | |----|----|----|----| | First name | Test | Person-mx | John | | Last name | Person-mx | Test | Test | | Address | Av Cuauhtémoc 462 Col Piedad Narvarte | Av Cuauhtémoc 462 Col Piedad Narvarte | Revillagigedo 11 Col Centro | | Zip code | 03000 | 03000 | 06000 | | City | Benito Juárez | Benito Juárez | Ciudad de México | | State | CDMX | CDMX | CMX | | Country | MX | MX | MX | | Date of birth (DD-MM-YYYY) | 10-07-1970 | 10-07-1970 | 01-01-2000 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | ### United States of America #### Private person | Flow | Email address | Phone number | |----|----|----| | Approved | customer@email.us | +13106683312 | | Denied | customer+denied@email.us | +13106354386 | | New user sign up | customer+new_user@email.us | +13105550134 | | Dispute: return | customer+disputed-return@email.us | +13105550116 | | Dispute: goods not received | customer+disputed-goods_not_received@email.us | +13105550117 | | Dispute: order already paid | customer+disputed-already_paid@email.us | +13105550118 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.us | +13105550119 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.us | +13105550120 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.us | +13105550121 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.us | +13105550122 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.us | +13105550130 | | Dispute: non-compliance | customer+disputed-non_compliance@email.us | +13105550131 | | Dispute: return not possible | customer+disputed-return_not_possible@email.us | +13105550132 | | ID Scan | customer+denied+auth_id_scan@email.us | +13105550124 | | Bank Authentication | customer+denied+auth_bank_login@email.us | +13105558963 | | Email Verification | customer+denied+auth_otp_email@email.us | +13105558632 | | Phone Verification | customer+denied+auth_otp_phone@email.us | +13105558633 | | Card Security Code Verification | customer+denied+auth_cvv_entry@email.us | +13105558634 | | Rejection | customer+reject_reason_other@email.us | +13105558637 | | Rejection | customer+reject_reason_could_not_establish_identity@email.us | +13105558636 | | Rejection | customer+reject_reason_credit_limit_exceeded@email.us | +13105558638 | | Rejection | cust+reject_reason_customer_not_fulfilling_previous_engagements@email.us | +13105558639 | | Rejection | customer+reject_reason_external_hard_reject@email.us | +13105558640 | | Rejection | customer+reject_reason_high_risk@email.us | +13105558641 | | Rejection | customer+reject_reason_legal_restraints@email.us | +13105558642 | | Rejection | customer+reject_reason_technical_error@email.us | +13105558643 | | Rejection | customer+reject_reason_internal_block@email.us | +13105558644 | | Rejection | customer+reject_reason_low_credit_rating@email.us | +13105558645 | | Rejection | customer+reject_reason_under_age@email.us | +13105558646 | | Rejection | customer+reject_reason_denied@email.us | +13105558647 | | Field | Approved | Denied | Other flows | |----|----|----|----| | First name | Test | Test | John | | Last name | Person-us | Person-us | Test | | Address | 509 Amsterdam Ave | 509 Amsterdam Ave | 1300 Constitution Ave | | Zip code | 10024-3941 | 10024-3941 | 20002-6452 | | City | New York | New York | Washington | | State | NY | NY | DC | | Date of birth (DD-MM-YYYY) | 07-10-1970 | 07-10-1970 | 01-01-2000 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | ## Asia & Oceania ### Australia #### Private person | Flow | Email address | Phone number | |----|----|----| | Approved | customer@email.au | +61473752244 | | Denied | customer+denied@email.au | +61473763254 | | New user sign up | customer+new_user@email.au | +61491574119 | | Dispute: return | customer+disputed-return@email.au | +61491574118 | | Dispute: goods not received | customer+disputed-goods_not_received@email.au | +61491574632 | | Dispute: order already paid | customer+disputed-already_paid@email.au | +61491575254 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.au | +61491575789 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.au | +61491575789 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.au | +61491576801 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.au | +61491577426 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.au | +61491574120 | | Dispute: non-compliance | customer+disputed-non_compliance@email.au | +61491574121 | | Dispute: return not possible | customer+disputed-return_not_possible@email.au | +61491574122 | | ID Scan | customer+denied+auth_id_scan@email.au | +61491574127 | | Field | Approved | Denied | Other flows | |----|----|----|----| | First name | Test | John | John | | Last name | Person-au | snow | Test | | Address | 4 Wharf St | 1-5 Silverwater Rd | 1 Bennelong Point | | Zip code | 4877 | 2128 | 2000 | | City | Port Douglas | Silverwater | Sydney | | State | QLD | NSW | NSW | | Country | AU | AU | AU | | Date of birth (DD-MM-YYYY) | 10-07-1970 | 03-05-1994 | 01-01-2000 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | ### New Zealand #### Private person | Flow | Email address | Phone number | |----|----|----| | Approved | customer@email.nz | +6427555290 | | Denied | customer+denied@email.nz | +642993007712 | | New user sign up | customer+new_user@email.nz | +642862276121 | | Dispute: return | customer+disputed-return@email.nz | +642862276120 | | Dispute: goods not received | customer+disputed-goods_not_received@email.nz | +648596357854 | | Dispute: order already paid | customer+disputed-already_paid@email.nz | +642838916248 | | Dispute: faulty goods | customer+disputed-faulty_goods@email.nz | +64265615253 | | Dispute: incorrect invoice | customer+disputed-incorrect_invoice@email.nz | +648597431043 | | Dispute: high-risk order | customer+disputed-high_risk_order@email.nz | +64217249819 | | Dispute: unauthorized purchase | customer+disputed-unauthorized_purchase@email.nz | +642293258935 | | Dispute: non-guaranteed payment program | customer+disputed-non_guaranteed_payment_program@email.nz | +642862276130 | | Dispute: non-compliance | customer+disputed-non_compliance@email.nz | +642862276131 | | Dispute: return not possible | customer+disputed-return_not_possible@email.nz | +642862276132 | | ID Scan | customer+denied+auth_id_scan@email.nz | +642862276142 | | Field | Approved | Denied | Other flows | |----|----|----|----| | First name | Test | Test | John | | Last name | Person-nz | Person-nz | Test | | Address | 286 Mount Wellington Highway | 286 Mount Wellington Highway | Te Papa Tongarewa Museum Of Nz | | Zip code | 6011 | 6011 | 6011 | | City | Auckland | Wellington | Wellington | | Country | NZ | NZ | NZ | | Date of birth (DD-MM-YYYY) | 10-07-1970 | 10-07-1970 | 01-01-2000 | | OTP (Random 6 digits different from 999999) | 123456 | 123456 | 123456 | ## Test ID Card You can test the ID scan flow with this mock national ID card. Use the same image as both front and back of the card for all markets. ![Mock national ID card](Sample_Identity_Card.png) *Mock national ID card* ## Other test scenarios The sample customer data lets you test the basic approve and deny transaction flows. However, you can also test some other Payments scenarios by adding suffixes to sample usernames. In the examples below, the email address reflects sample customer data for the United States. Make sure to adjust the address to match the country in which your store operates. To launch a Payments widget, include a sample email address in your API call. You can modify the address to display the sign-up widget or delay the payment. To launch a Checkout widget, include a sample email address in your API call. | Scenario | Customer email address pattern | Example | Applies to Payments | |--------|------------------------------|-------|-------------------| | New customer signup | username+require_signup@domain.com | customer+require_signup@email.us | Payments | | Returning customer | username@domain.com | customer@email.us | Payments | | Don't show form (only when pre-screen is enabled) | username+red@domain.com | customer+red@email.us | Payments | | Pending payment * {time delay} is the time delay, in minutes, before the decision is made and the status is confirmed. The value must be a two-digit number in the range of 00–99. Note: Only works for US and UK. | username+pend-{status}-{time delay}@domain.com | customer+pend-accept-05@email.us | Payments | | Only present pre-paid options | example-email+red@example.com | customer+red@email.us | Checkout | --- # Source: https://docs.klarna.com/resources/developer-tools/sample-data/sample-payment-data.md # Sample payment data ## Test your integration of Klarna Payment methods in playground environment using sample payment data to ensure compliance and a reliable integration. ## Payment methods The following payment methods are available for testing Klarna Payments. ### Direct debit To test the direct debit payment flow from a customer's perspective, use an IBAN-format number. For example, the following sample IBAN number will work for a test store in Germany: *DE1152 0513 7351 2071 0131*.  Sweden In Sweden, use the following sample Personal number: *19770111-6050.* ### Credit card To test the card payment flow from a customer's perspective, use the following card details in the loaded Klarna widget: - **Credit card number:***4111 1111 1111 1111* - **CVC:** *123* - **Expiration date:** *12/28* or any other future date in MM/YY format - Card number to trigger a [3-D Secure](https://en.wikipedia.org/wiki/3-D_Secure) flow: *4687388888888881* ![ Card payment UI flow|332x332px](f3b83884-e264-4e26-b223-d8d458ad4375_PN_card.gif) *Card payment UI flow|332x332px* ### Debit card To test the card payment flow from a customer's perspective, use the following card details in the loaded Klarna widget: - **Credit card number:***4012 8888 8888 1881* - **CVC:** *123* - **Expiration date:** *12/28* or any other future date in MM/YY format United States of America In the US, use the debit card to test Financing. In addition, when prompted for a Social Security Number (SSN), use *123456789* ### Direct bank transfer To test a direct bank transfer payment flow from a customer's perspective, look for *Demo Bank* in the loaded Klarna widget. ![ Bank transfer payment UI flow|389x389px](8a1c8a6c-2f1b-4d00-a2a7-1b648f048c0d_dbt_bank_search.gif) *Bank transfer payment UI flow|389x389px* --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/more-services/search-and-compare-app.md # Search and Compare App for Shopify ## Boost product visibility on the Klarna app and web by installing the Search and Compare App for Shopify, managing your feed status, and optimizing product data for better matching. ![Search_and_Compare_App_for_Shopify_1750079427889.png](Search_and_Compare_App_for_Shopify_1750079427889.png) *Search_and_Compare_App_for_Shopify_1750079427889.png* ## Installing the app 1. Start by navigating to the [Search & compare app listing](https://apps.shopify.com/klarna-search-compare) on Shopify, and click install. ![Search_and_Compare_App_for_Shopify_1750079378139.png](Search_and_Compare_App_for_Shopify_1750079378139.png) *Search_and_Compare_App_for_Shopify_1750079378139.png* 2\. The app will request access to certain data. Click *Install*. *Please note, customer data is not accessed, only shipping (read_shipping) will be used by the app for feed purposes.* W*ithout the additional scopes (read_customers or read_orders), it cannot retrieve personal data such as customer names or addresses.* ![Draft:Search_&_compare_app_1749561504321.png](Draft:Search_&_compare_app_1749561504321.png) *Draft:Search_&_compare_app_1749561504321.png* 3\. Read through the linked terms and conditions and click *Get started*. ![Draft:Search_&_compare_app_1749561540059.png](Draft:Search_&_compare_app_1749561540059.png) *Draft:Search_&_compare_app_1749561540059.png* 4\. Set up your first feed by selecting a country. The countries available here are based on your Shopify market settings. ![Search_and_Compare_App_for_Shopify_1758272862889.png](Search_and_Compare_App_for_Shopify_1758272862889.png) *Search_and_Compare_App_for_Shopify_1758272862889.png* ​5. Choose a logo for your store. This will be shown in the Klarna app when merchants look at your store. Choose one that is squared. You can also add fallback values for shipping and delivery time for this specific feed, should those values not be available otherwise. There is also a field for adding free shipping above a certain threshold. For example, if you add 100 in the field in the example screenshot above, free shipping on orders above 100 EUR will be shown to customers as a fallback. The logo will display to your customers in the Klarna app in the following way: ![How your logo will be displayed to customers in the Klarna app|center](Search_and_Compare_App_for_Shopify_1753880289868.png) *How your logo will be displayed to customers in the Klarna app|center* ![Draft:Search_&_compare_app_1749562618149.png](Draft:Search_&_compare_app_1749562618149.png) *Draft:Search_&_compare_app_1749562618149.png* 6\. Add your shop/company details. Some of this is mandatory data Klarna needs to onboard your store. Many details are prefilled based on what is already available from Shopify, but can be edited. Please ensure accurate data is provided for faster onboarding. The "Shop name" will be displayed to customers in the Klarna app as in the previous image including the logo. ![Draft:Search_&_compare_app_1749565528087.png](Draft:Search_&_compare_app_1749565528087.png) *Draft:Search_&_compare_app_1749565528087.png* 7\. All done! Klarna will review your feed details and you will be able to see the status on the overview page (clicking the blue link *See your onboarding status*). If you want to add more countries, click *Add another feed*. ![Draft:Search_&_compare_app_1749565634101.png](Draft:Search_&_compare_app_1749565634101.png) *Draft:Search_&_compare_app_1749565634101.png* ### Feed quality **Improving the feed** We recommend always ensuring you include [GTIN](https://support.google.com/merchants/answer/6324461?hl=en)s as this helps Klarna match your products to existing ones. Currently, if there is no existing product for Klarna to match to, your product will not show in the Klarna app and web. If you are selling services (such as courses, events or treatments), it is currently unlikely these will be possible to display within the Klarna app, leading to a matching rate of 0 in the app. #### Adding GTIN Klarna uses GTIN to match products. You can easily add this in your Shopify product settings in "barcode": ![Where to find the barcode field in product settings.](Search_and_Compare_App_for_Shopify_1758611702652.png) *Where to find the barcode field in product settings.* If you want more information on your feed and how to improve the quality you can reach out to our support as detailed [here](https://docs.klarna.com/klarna-search/shopify-plugin-support/). ### **Feed status** *Active* means everything's been approved and your products are being matched and then will be displayed in the Klarna app and web. You can also (after around 24 hours) search for your store on [klarna.com/store/](https://www.klarna.com/store/) to see how your brand is presented to customers. *Pending review* means Klarna is conducting a manual review of the data sent in. The status will automatically update once the review has been completed. *Not found* or *Unknown* means something's gone wrong and you should change the configuration of that market and send it in for a new review. *Rejected* means you already have a feed live with Klarna for this market and that you should [reach out to support](https://docs.klarna.com/klarna-search/shopify-plugin-support/). In such a case you will often see the below screen in the app: ![Rejection screen in the Shopify app](Search_and_Compare_App_for_Shopify_1757684680399.png) *Rejection screen in the Shopify app* ## Statistics ![Search_and_Compare_App_for_Shopify_1757690911654.png](Search_and_Compare_App_for_Shopify_1757690911654.png) *Search_and_Compare_App_for_Shopify_1757690911654.png* Once you are up and running, you will be able to see statistics on your products in the Klarna app and web. If you are seeing a low amount of matched products, you can reach out to [our support](https://docs.klarna.com/klarna-search/shopify-plugin-support/) for more information on this. Please also see our guidance on this in the section above called "Feed quality". If you have around 30-50% matched products, this you are around Klarna average. If you have over 50% matched products, you are above Klarna average. From the dropdown you can select between the markets you are live with. ![Search_and_Compare_App_for_Shopify_1759253360355.png](Search_and_Compare_App_for_Shopify_1759253360355.png) *Search_and_Compare_App_for_Shopify_1759253360355.png* Here you can see country specific statistics and also the percentage of your products that have been matched and that are shown in the Klarna app and web. You can also hover the mouse over some of the stats to learn more. ![Hovering your mouse over some statistics provides you with more information.](Search_and_Compare_App_for_Shopify_1759253458756.png) *Hovering your mouse over some statistics provides you with more information.* A matching rate around 40% is Klarna average and can be considered good.No matched products If you are selling services such as courses, events or treatments, these will likely not be shown in the Klarna app. This is due to the offering being focused on physical products. For more information and to provide feedback, you can reach out to our support [here.](https://docs.klarna.com/klarna-search/shopify-plugin-support/) ## Additional settings ![Draft:Search_&_compare_app_1749646962179.png](Draft:Search_&_compare_app_1749646962179.png) *Draft:Search_&_compare_app_1749646962179.png* In Global configuration you can find additional settings to further enhance the product data available to customers shopping via the Klarna app. Here, you can map metafield values. We recommend adding these, but it is optional. There are also global fallback values for delivery time and shipping time. ## Removing a feed Any feeds that are *active* or *rejected*, you can remove the feed by going into the selected market, scrolling down and clicking remove feed. This will not prevent you from adding them later on again. ![Remove feed button at the bottom left.|center|thumb](Search_and_Compare_App_for_Shopify_1752503780780.png) *Remove feedbutton at the bottom left.|center|thumb* ## Contact For further support with the app or feedback on it, please reach out to one of the [support teams here](https://docs.klarna.com/klarna-search/shopify-plugin-support/). --- # Source: https://docs.klarna.com/resources/legal-and-compliance/more-solutions-guidelines/search-and-compare-terms-and-conditions.md # Search and Compare - Terms and Conditions *Revised and republished: July 23, 2025* *This will take effect from September 1, 2025* These terms and conditions (“**Terms**”) apply between all Klarna and PriceRunner entities (both referred to as “**Klarna**”) and a merchant, manufacturing company, any other advertiser or any other customer (the “**Partner**”) purchasing specific services from PriceRunner and Klarna comparison shopping features. Partner and Klarna are each individually referred to as the “**Party**” and jointly as the “**Parties**”. The Parties hereby agree to be bound by the following Terms and those set forth in the specific partner agreement between the Parties (the “**Partner Agreement**”) as of the Effective Date set forth in the Partner Agreement. These Terms, the Partner Agreement and any addendums thereto are collectively referred to as the “**Agreement**”. To the extent that there is any inconsistency between the Partner Agreement and these Terms, the Partner Agreement shall prevail. ## 1. Definitions - “**Analytics Data**” means the data which a Partner using Services can access and view in the Partner Interface about market shares, trending products etc. on the Klarna Network. - “**Analytics Premium**” shall have the meaning set forth in Section 2. - “**API**” shall have the meaning set forth in Section 2. - “**Brand Logo**” shall have the meaning set forth in Section 2. - “**Click**” means any interaction in which a User or User-Assigned Agent clicks on Product Listings, Display Ads, Native Boards, or other Partner Content, whether the click (a) directs them to the Partner Site (or any other site designated by the Partner), or (b) initiates a purchase directly through a buy function without visiting the Partner Site. - “**Confidential Information**”, “**Disclosing Party**” and “**Receiving Party**” shall have the meaning set forth in Section 13. - “**CPC**” means cost per Click. - “**Customer Certified Program**” means the customer satisfaction measuring program described in Section 5. - “**Display Ad**” shall have the meaning set forth in Section 2. - “**Landing page**” means the page on the Partner Site to which a User is directed when the User clicks on a Link on any Product Listings, Display Ads, Native Boards or other Partner Content. - “**Link**” means one or more hypertext links or similar associated with Product Listings, Display Ads, Native Boards or other Partner Content leading from a page of the Klarna Network to a Landing Page on the Partner Site. - “**Native Board**” shall have the meaning set forth in Section 2. - “**Optimization Fee**” means a CPC surcharge on all clicks that does not fulfill Klarna feed requirements. - “**Partner Content**” means all information, data, images and creations provided by the Partner or retrieved by Klarna, that is required for the Services including, but not limited to, Partner logo, brand and profile information, offers, services, product and product lists, prices, Landing page URL’s, product specifications, unique product identifiers, vouchers and discount codes, stock info, payment options, shipping options, shipping times, customer ratings, customer support information, contact details, return policy, images, product descriptions, Display Ads, Native Boards and other intellectual properties. - “**Partner Interface**” means the logged-in interface to the “Merchant Zone” and the “Brand Zone”, respectively, where Partners are given access to Analytics Data, features and information related to Services and this Agreement. - “**Partner Site**” means the sites, apps and other domains of the Partner as defined in the Partner Agreement. - “**Klarna** **Data**” means any and all data generated through the Klarna Network, including but not limited to Analytics Data and all other data relating to Product Listings and Customer Certified Program, User traffic of a Link, as well as all data and content displayed in Analytics Premium and API. - “**Klarna** **Network**” means all web pages, apps, e-mail, social media accounts and other domains owned or controlled by PriceRunner and Klarna including co-branded sites, third-party partner sites and advertising by Klarna on other sites. - “**Product** **Listing**” shall have the meaning set forth in Section 2. - “**Product** **Page**” means the product page of a specific product listed on the Klarna Network. - “**Related Store Offer**” shall have the meaning set forth in Section 2. - “**Representatives**” means, with respect to either Party, that Party’s affiliates, agents, officers, directors, consultants and employees. - “**Search Result**” means the webpage displaying product suggestions resulting from a search query. - “**Services**” means the paid services set forth in Section 2 collectively. - “**Spider**” means a computer program that retrieves data from targeted web site pages. - “**Sponsored** **Position**” shall have the meaning set forth in Section 2. - “**Trusted** **Reseller**” shall have the meaning set forth in Section 2. - “**User**” means a visitor to any web page, app or other domain within the Klarna Network. - “**User-Assigned Agent**” means any third party - whether human, automated, or powered by artificial intelligence - that acts on behalf of a User with the User’s authorization or instruction. This includes, but is not limited to, shopping assistants, price comparison tools, browser extensions, and AI-based agents that interact with Partner Content or perform transactions on the User’s behalf. ## 2. Services **(a)** **Product Listing**. Product Listings are displayed on a Product Page listing from the lowest price to the highest price that is applicable for the specific product on each Partner Site and other webshops. Webshops that are not using Product Listing are not clickable and only the name of the webshop and the webshop’s price for the specific product are displayed. A Product Listing includes the Partner’s webshop logo, a clickable Link to Partner Site, a customer satisfaction score, if available, deriving from the Customer Certified Program (as described under Section 5.), price for the specific product, as well as applicable information on payment options, shipping options and stock status of the product. **(b) Sponsored Position**. A Sponsored Position is a paid/sponsored piece of content displayed above the Product Listing on a Product Page. Duration and display frequency of Sponsored Positions are based on price and bidding results. **(c)** **Display Ad**. A Display Ad is a paid banner ad displayed on the Klarna Network through a third party service. The Partner may choose to display ads throughout the Klarna Network, among certain product categories and/or as targeted ads for Users that have accepted the use of marketing cookies. Duration, placing and display frequency of Display Ads are based on price according to Klarna’s from time to time applicable price list. **(d) Native Board**. A Native Board is a paid/sponsored piece of content in the form of advertisement in similar design as Search Results. Duration, placing and display frequency of Native Boards are based on price according to Klarna’s from time to time applicable price list. **(e)** **Trusted Reseller**. Trusted Reseller is a paid badge presented together with the Partner’s name and logo in a Product Listing used to attract more Clicks to an authorized merchant of a product. **(f) Brand Logo**. Brand Logo is a paid brand logo displayed together with product images among Search Results used to attract more Clicks to own products. **(g)** **Related Store Offer**. Related Store Offers are listings of offers from webshops on the Klarna Network that is not included in Product Listings, Sponsored Positions, Display Ads or Native Boards, where products are sorted based on relevance to search query (where applicable), previous number of Clicks, offers from Partners using Product Listing, offers from domestic webshops and time lapsed since latest price update of offer. **(h)** **Analytics Premium**. Analytics Premium is the paid interface of Analytics Data with extended access to Klarna Data such as scheduled reports, price updates, detailed information of market shares based on pricing and User Clicks. **(i)** **API**. API is a technical interface giving real-time access to certain Klarna Data such as product and pricing data on the Klarna Network. Product information is based on unique product identifiers and contains e.g. name, images, brand, category name and average customer rating of a product on the Klarna Network. Price information consists of e.g. merchant id, name, logo, price, shipping costs, shipping time and currency as presented on the Klarna Network. ## 3. Obligations **(a)** The Partner shall provide all Partner Content required for the Services agreed in the Partner Agreement. In the event the Partner fails to provide the required Partner Content on a timely basis, restricts or removes the Partner Content during the Term, Klarna may, in its sole discretion, use Spiders to retrieve the full Partner Content from the Partner Site. Under no circumstances is Klarna obliged to provide content for any listing. Klarna takes no responsibility for the correctness and/or legality of the Partner Content provided by Partner or retrieved from the Partner Site. **(b)** The Partner agrees to confirm the correct function of all Partner Content supplied to Klarna. If no confirmation is received, Klarna will assume that the Partner Content is functioning properly and the Partner agrees to pay for all Services derived from the Partner Content as measured by Klarna. All problems related to Partner Content shall be immediately brought to the attention of Klarna by emailing css.support.us@klarna.com (USA), css.support.de@klarna.com (DE), css.support.no@klarna.com (NO) infodk@pricerunner.com (Denmark), infose@pricerunner.com (Sweden) or infouk@pricerunner.com (United Kingdom). **(c)** The Partner agrees to allow Klarna to make changes or alterations to Partner Content for the purpose and intent of matching it to and promoting it on the Klarna Network. Partner hereby grants to Klarna a non-exclusive, limited, worldwide, royalty-free license to market, display, copy, transmit, distribute and promote the Product Listings and related Partner Content in connection with its obligations and Services hereunder. With respect to the product images supplied by the Partner to Klarna, the Partner hereby grants Klarna an irrevocable, perpetual, non-exclusive, transferable, fully paid, worldwide, sub-licensable, royalty-free license to use, copy, publish, stream, store, retain, publicly or display, transmit, scan, reformat, modify, edit, frame, adapt, create derivative works and distribute such images that the Partner provides in connection with this Agreement. **(d)** Klarna expressly reserves the right to **(i)** refuse, cancel or modify any Partner Content that does not completely conform to every material detail, instruction, method, and guideline set forth in this Agreement or that Klarna reasonably suspects to be false, fraudulent or unlawful in any other manner; **(ii)** refuse any copy, photograph or illustration for any reason, including those that it believes, are an invasion of privacy, are degrading, unlawful, profane, obscene, pornographic, tend to ridicule or embarrass, are in bad taste, or which may be an infringement on a trademark, trade name, or copyright belonging to others; or **(iii)** refuse or cancel any Partner Content which redirects traffic to a web site other than the Partner Site specifically identified in the Partner Agreement. Any Partner Content rejected, canceled or changed by Klarna may be replaced by the Partner; provided that any such replacement material conforms to every material detail, instruction, method, and guideline set forth in this Agreement and is in writing and accompanied by appropriate material identifying the Partner Content that it is to replace. Klarna shall notify the Partner of the rejection or cancellation of any Partner Content and shall have no liability to the Partner for any such rejection or cancellation. **(e)** Klarna agrees to create, develop and host the Link which would allow Users to directly access a Landing Page. The type, content, method of operation, placement and presentation of the Link shall be determined by Klarna. Klarna shall not be liable, directly or indirectly, for damages related to any presentation of the Partner Content on the Klarna Network and/or the insertion of the Link. ## 4. Partner Interface **(a)** To access the Partner Interface, an authorized Representative of the Partner must complete the member registration process by providing Klarna with current, complete and accurate information as prompted by the registration form, including e-mail address and password. Klarna will connect the Partner Interface to the registered membership of the authorized Representative. The Partner is obliged to ensure that the Representative will protect the password. **(b)** The Partner takes full responsibility and assumes full obligations for its own and any Representative’s use of and actions in the Partner Interface including, but not limited to, (i) usage of the bidding functionality in the Partner Interface to increase its visibility of Sponsored Positions which may lead to a higher CPC than as stated in the price list as described in Section 9 and (ii) the purchase of any additional Services through the Partner Interface. **(c)** The Partner is solely responsible for any and all activities that occur under the access to the Partner Interface. The Partner will notify Klarna immediately upon learning of any unauthorized use of the Partner Interface or any other breach of security. Klarna staff may, from time to time, log in to the Partner Interface in order to maintain or improve service, including to provide the Partner assistance with technical or billing issues. ## 5. Customer Certified Program **(a)** Partner using Product Listing agrees to participate in Klarna’s Customer Certified Program to enable Klarna to measure customer satisfaction for any Users completing a purchase after being directed to the Partner Site via a Link. Klarna shall provide Partner with source code and/or widgets to measure customer satisfaction and Partner is obliged to implement such source code and/or widgets on Partner Site. **(b)** Klarna shall own all data generated by the customer responses and may publish the results from the Customer Certified Program on the Klarna Network. The Partner may refer to any results published from Klarna’s Customer Certified Program in its marketing, provided that Klarna is specified as its source. ## 6. Tracking **(a)** Klarna will host the Product Listings and the tracking and measure solution as required to track and provide estimated live statistics for Klarna and its affiliates for Clicks and advertising impressions. **(b)** In the event Partner implements Klarna’s conversion tracking solution, Klarna shall provide Partner with code for such conversion tracking and Partner is obliged to implement such code on the Partner Site. **(c)** If payment for any of the Services is based upon a User completing a purchase on the Partner Site, the Partner is obliged to implement Klarna’s conversion tracking or any other third-party conversion tracking solution as agreed between the Parties. If Partner removes or manipulates such tracking solution at any time during the Product Listing without expressly written permission from Klarna, Klarna may suspend performance and, if applicable, the Partner agrees to compensate Klarna for the days during which tracking code was absent or manipulated based on the average daily conversion measurements for the thirty (30) days prior to the tracking code being removed or manipulated plus fifty percent (50%). ## 7. Data **(a)** Klarna is and will remain the sole and exclusive owner of all rights, title and interest to the Klarna Data, including all intellectual property rights relating thereto, such as copyright, database rights and trademark protection. **(b)** Subject to these Terms, Klarna grants the Partner a limited, revocable, non-exclusive, non-sublicensable license to use the Klarna Data that Partner gets access to hereunder. **(c)** The Partner will not **(i)** reverse engineer, decompile, disassemble or otherwise attempt to discover the source code of the Services; **(ii)** claim ownership of, publish, copy, license, sell, assign, transfer or otherwise dispose, whether in whole or part, of any Klarna Data; **(iii)** remove any proprietary notices or labels on the Klarna Data; **(iv)** use, post, transmit or introduce any device, software or routine which interferes or attempts to interfere with the operation of the Klarna Data. The Partner will comply with all applicable laws and regulations in the Partner’s use of and access to the Klarna Data. **(d)** Klarna may display, give access to or sell, aggregated data from the Klarna Network to third parties entirely as it sees fit, without obligations of any kind to the Partner. ## 8. Warranties **(a)** The Partner represents and warrants that **(i)** it holds all necessary rights to permit the use of all the Partner Content provided to or retrieved by Klarna under this Agreement; **(ii)** that the use, reproduction, distribution, transmission or display of the Partner Content and any materials to which Users can click, or any products or services made available to Users through the Partner Content will not (1) violate any law, give rise to criminal or civil liability or infringe any copyright, patent, trademark or service mark, trade secret rights or any other personal, moral, contract, property or privacy right of any third party (collectively “Unlawful Conduct”); (2) contain or promote viruses, obscene, abusive, violent, bigoted, hate-oriented, cracking, hacking, warez or spyware content or conduct (collectively “Offensive Conduct”); or (3) encourage conduct that would constitute Unlawful Conduct or Offensive Conduct; **(iii)** it has a reasonable basis for all claims made within the Partner Content, possesses appropriate documentation to substantiate such claims and shall fulfill all commitments made in its Product Listings; **(iv)** the Landing Page for each Product Listing contains a prominent link to the Partner’s privacy policy, which policy provides, at a minimum, adequate notice, disclosure and choices to consumers regarding the Partner’s use, collection, disclosure and security of their personal information; and **(v)** all consumer data collected pursuant to this Agreement shall only be used for legal purposes and in compliance with applicable data protection legislation. **(b)** The Partner agrees to indemnify and hold Klarna and its Representatives harmless from all allegations, claims, actions, causes of action, lawsuits, damages, liabilities, obligations, costs and expenses (including without limitation reasonable attorneys’ fees, costs related to in-house counsel time, court costs and witness fees) which, if true, would constitute or relate to any breach of warranty or breach of this Agreement. The indemnity obligations of this paragraph are contingent on Klarna giving prompt written notice of any such claim. Klarna will have sole control over the litigation or settlement of such claims. **(c)** Each Party represents and warrants that it has the full right and authority to enter into and fully perform under this Agreement, and that its performance hereunder will fully comply with all applicable laws, rules and regulations. Any agency executing this Agreement on behalf of its Partners represents and warrants that it has the authority to bind the Partners to the terms stated herein and remains jointly and severally liable for all obligations under this Agreement. ## 9. Price and Payment Terms **(a)** By signing the Partner Agreement, the Partner approves Klarna’s applicable price list for the Services which is available at: **SE**:[](https://www.pricerunner.se/info/price-list) **DK**: [](https://www.pricerunner.dk/info/price-list)**NO**: [](https://docs.klarna.com/marketing/solutions/klarna-search/prislisten-no/) **UK**: [](https://docs.klarna.com/marketing/solutions/klarna-search/price-list-uk/) **US**: [](https://docs.klarna.com/marketing/solutions/klarna-search/price-list/)**DE**(and all other countries not mentioned):  [](https://docs.klarna.com/marketing/solutions/klarna-search/preisliste/) and assumes full responsibility for the payment for the usage of the Services. Klarna reserves the right to adjust the price list when needed. Partner will be informed by written notice posting on the Klarna Network or sending an e-mail to the Partner, of any changes to the price list at least thirty (30) days before such a price change takes effect. By continuing to use the Services after the price change has taken effect, the Partner is deemed to have approved the changes. **(b)** The Partner assumes full responsibility to pay for additional fees and charges related to any and all (i) usage of the bidding functionality in the Partner Interface to increase its visibility of Sponsored Positions which may lead to a higher CPC than as stated in the price list and (ii) purchase of any additional Services through the Partner Interface. **(c)** A monthly cap is the maximum amount the Partner will pay for Product Listings to Klarna per month. The decision to institute a cap is solely in Klarna’s discretion, and if granted by Klarna, the Parties will mutually agree in writing to a cap amount. When a cap is reached the Links will be deactivated. Klarna may request an increase or decrease in the cap amount at any time, and may terminate this Agreement immediately if a new cap amount cannot be mutually agreed upon. **(d)** If the Parties agree on a discount to the applicable price list for the Services, such discount will apply for a maximum period of twelve (12) months and can be adjusted at any time by Klarna. Upon termination or change of such discount period and if no new discount is agreed upon between the Parties, the Partner shall, without any written notice required, assume full responsibility to pay for the Services according to Klarna’s applicable price list. **(e)** Cancellations between 30 and 10 days prior to any Display Ad or Native Board campaign start date are subject to a cancellation fee equal to 50% of the total fee. Cancellations within 10 days of the campaign start date are subject to a cancellation fee of 100% of the total fee. Campaign materials must be provided to Klarna at least three days prior to the campaign start date unless specified otherwise. If material is received after the scheduled campaign start date, attempts will be made to achieve the impression levels booked, but Partner is still responsible for payment of the full amount of impressions booked for that time frame. **(f)**Optimization Fee is applied to all clicks on offers that do not fulfill Klarna feed requirements defined as “Basic product data” which is available [here](https://docs.klarna.com/marketing/solutions/klarna-search/getting-started/basic-product-data/). All prices are defined at section 9 (a). ## 10. Payment **(a)** Klarna has the right to conduct a credit check of the Partner. Upon approved credit check of the Partner, Klarna will send monthly invoices to the Partner for the previous month. The invoice shall be paid no later than twenty (20) days from the date of the invoice. Klarna is entitled to demand advance payment. All payments must be in the currency nominated by Klarna from time to time. **(b)** In the event of a dispute between the Partner and Klarna regarding amounts due, the Partner agrees that Klarna’s tracking count shall be applied. The Partner understands and agrees that in no event, and under no circumstance, will data provided by Klarna constitute final billing numbers. Only invoices sent directly to the Partner by e-mail or postal mail or made available in the Partner Interface are to be construed as representative of billable amounts. In the event that Klarna does not receive a written notification of a disputed bill, with rationale and support therefore specifically set forth therein, within eight (8) days from the date of the invoice, such invoice will be deemed valid and payable and may not thereafter be disputed. The Partner specifically agrees that this provision is reasonable and that Klarna will rely upon this provision in making payments to third parties in its Klarna Network. **(c)** Any late payments will accrue interest as per the Swedish Interest Act (Sw. Räntelagen 1975:635). Klarna shall be entitled to recover all reasonable costs of collection, including but not limited to agency fees, attorneys’ fees, in-house counsel costs, expenses and costs incurred in attempting to collect payment from the Partner. ## 11. Limitations of Warranties and Liability **(a)** The Services, its use and the results of such use are provided on an “as is” and “as available” basis. To the fullest extent permissible pursuant to applicable law, Klarna makes no warranties regarding the Services and the Klarna Network (including the implied warranties of merchantability, fitness for a particular purpose, and non-infringement), guarantees, representations, promises or statements, express, implied, oral, written, or otherwise except as expressly set forth herein. Klarna does not warrant or guarantee clicks, click rates or ability to convert the clicks into sales. Klarna does not warrant or guarantee the profile or demographics of a respondent. Klarna is not liable for any incorrect or erroneous data, its use and the results of such use and does not commit to, provide any warranties or give any indemnifications whatsoever regarding the quality, accuracy, security, reliability, availability or performance of any or all Klarna Data. **(b)** To the extent permitted by applicable law, Klarna shall not be liable for any loss of revenue, indirect loss, damage, costs or expense of any kind whatsoever and howsoever caused, including but not limited to loss of production, loss of or corruption to data, loss of profits or of contracts, loss of operation time and loss of goodwill or anticipated savings, even if advised of their possibility. Klarna’s total obligations and/or liability, if any hereunder, shall be limited to fifty (50) percent of the total amount that the Partner has paid for the Services during the past calendar year. **(c)** Nothing in this Agreement limits or excludes either Party's liability in case of fraud or for negligence causing death or personal injury. ## 12. Termination **(a)** The Agreement will automatically renew for periods of the same duration as stated in the Partner Agreement, unless the termination date is agreed upon in the Partner Agreement, or notice of termination by either of the Parties is provided with thirty (30) days written notice. Klarna reserves the right to terminate this Agreement immediately in the event that the Partner violates the terms set forth in Sections 3 (Partner Content and Partner Site), 4 (Partner Interface), 5 (Customer Certified Program), 6 (Tracking), 7 (Data), 8 (Warranties), 9 (Price and payment terms), 10 (Payment) or 13 (Confidentiality). **(b)** Termination of this Agreement shall not relieve the Partner from its obligation to pay **(i)** any fees that have accrued prior to the date of termination; **(ii)** any minimum contract price specified in the Partner Agreement for which performance has commenced. Such amount shall be payable within twenty (20) days from the date of invoice. **(c)** Upon the termination of the Agreement, for whatever cause, Partner no longer has the right to use the Klarna Data, including processed or refined versions of the Klarna Data. In the event that Partner has integrated the Klarna Data into its systems, or in any other manner keeps Klarna Data on its equipment, all such Klarna Data shall be permanently erased and destroyed. Upon Klarna’s written request, Partner shall, within ten (10) business days, certify to Klarna in writing that Partner has destroyed the Klarna Data in accordance with the above and fulfilled all its other obligations under the Agreement. ## 13. Confidentiality **(a)** “Confidential Information” means any confidential information disclosed in any form whatsoever (including, but not limited to, disclosure made in writing, orally or visually), by or on behalf of one Party or its affiliates (the “Disclosing Party”) to the other Party (the “Recipient”) in connection with this Agreement. **(b)** During the term of this Agreement and for two (2) years after the termination of this Agreement the Recipient agrees to: i) Not to make any use whatsoever of said Confidential Information except for what is expressly permitted in this Agreement, and accordingly, without limiting the generality of the foregoing, not use such Confidential Information in connection with any other work performed by Recipient either for himself, or for any other person, firm or corporation; b) not to reveal any Confidential Information to third parties; and c) to keep all Confidential Information strictly secret and confidential and to treat such information with no less than commercially reasonable security measures to prevent unauthorized use or disclosure of the Confidential Information. **(c)** Each Party may only provide such Confidential Information to its respective employees, consultants, directors and advisers who have a “need to know” of such Confidential Information and who are bound to confidentiality restrictions not less restrictive than those set forth in this Agreement. Each Party is responsible for its employees, consultants, directors and advisers non-compliance and/or breach. Each Party shall promptly notify the other Party upon discovery of any unauthorized use or disclosure of Confidential Information and will make best effort to cooperate with the other Party to help regain possession of such Confidential Information and prevent its future unauthorized use. **(d)** The obligations of each Recipient hereunder shall survive until such time as all Confidential Information of the other Party disclosed hereunder becomes publicly known and generally available through no action or inaction of the Recipient. These restrictions shall not apply to information that each Party can document is **(i)** already in possession of or known by the Recipient, **(ii)** publicly known or becomes publicly known through no unauthorized act of the Recipient, **(iii)** lawfully received from a third party without restriction on use or disclosure if, to the Recipient’s knowledge, such third party had the legal right to disclose such information, **(iv)** independently developed by the Recipient without use of the Disclosing Party’s Confidential Information, **(v)** pre-approved in writing by the other Party for disclosure, or **(vi)** disclosed as required by law, governmental agency or rule, or court order, so long as the Party required to disclose the information provides the other Party with timely prior notice of such requirement (where permitted). **(e)** The Parties agree and understand that a material breach of this Section 13 will cause the non-breaching Party to suffer irreparable harm and that monetary damages may be inadequate to compensate for such damage. Accordingly, the Parties agree that in such event, the non-breaching Party will, in addition to all other remedies, be entitled to injunctive or equitable relief as may be deemed proper by a court of competent jurisdiction. **(f)** Upon the termination of the Agreement, for whatever cause, each Party shall cease using Confidential Information and, as instructed by the other Party, promptly return and/or permanently erase all such materials or information from all equipment, and not keep any copies thereof except as required by law. ## 14. Intellectual Property Subject to the limited licenses granted herein, each Party shall retain all right, title and interest in its trade names, logos, trademarks, service marks, trade dress, Internet domain names, copyrights, patents, database rights, trade secrets, know-how, source code, software and proprietary technology, including, without limitation, those trade names, logos, trademarks, service marks, trade dress, copyrights, patents, testimonials, endorsements, know-how, source code, trade secrets, software and proprietary technology currently used or which may be developed and/or used by it in the future. ## 15. Force Majeure Neither Party shall be liable for, or considered in breach of or default under this Agreement on account of, any delay or failure to perform as required (except with respect to payment obligations) as a result of any causes or conditions which are beyond such Party’s reasonable control and which such Party is unable to overcome by the exercise of reasonable diligence (including without limitation, the failure of the Klarna Network to display or place any Partner Content); provided that the non-performing Party gives reasonably prompt notice under the circumstances of such condition(s) to the other Party. ## 16. Complaints Any complaints regarding these Terms may be submitted to Klarna’s internal complaint-handling system at complaints@pricerunner.com. Subject to a complaint, the Parties shall attempt to reach an amicable settlement through the internal complaint-handling system. If the Parties fail to reach a settlement through the internal complaint-handling system, each Party is entitled to file for mediation at the Arbitration Institute of the Stockholm Chamber of Commerce. The mediation will be conducted by two mediators, of which each Party may appoint one mediator. Each Party shall bear its own costs for the mediation. The language of the mediation procedure shall be English. ## 17. Dispute Resolution and Notice **(a)** This Agreement shall be governed by the substantive law of Sweden. Any dispute, controversy or claim arising out of or in connection with this Agreement, or the breach, termination or invalidity thereof, shall be finally settled by arbitration administered by the Arbitration Institute of the Stockholm Chamber of Commerce (the “SCC. The Rules for Expedited Arbitrations shall apply, unless the SCC in its discretion determines, taking into account the complexity of the case, the amount in dispute and other circumstances, that the Arbitration Rules shall apply. In the latter case, the SCC shall also decide whether the Arbitral Tribunal shall be composed of one or three arbitrators. The seat of arbitration shall be Stockholm. The language to be used in the arbitral proceedings shall be English. Any claim under this Agreement, other than for indemnity and defense as provided herein, must be filed within one (1) year of the time such claim arose, regardless of any law to the contrary, otherwise such claim will be forever barred. **(b)** All notices, requests, demands, and other communications hereunder shall be in writing and shall be deemed given at the time such communication is sent by e-mail to email address or to the executive and the address of each Party as set forth in the Partner Agreement. ## 18. Independent Contractors Each Party is an independent contractor. Any intention to create a joint venture or partnership between the Parties is expressly disclaimed. ## 19. Marketing Partner agrees that Klarna may identify it as a Klarna Partner in client lists and other marketing materials. ## 20. Entire Agreement, Modification, Assignment **(a)** This Agreement and any exhibits or addenda thereto is intended to be the Parties’ complete, integrated expression of the terms of their agreement and any prior agreements or understandings with respect to such subject matters are superseded hereby and fully merged herein, and may only be modified in writing by authorized Representatives of the Parties. **(b)** Klarna reserves the right to change, modify, add, or remove portions of these Terms at any time, provided that Klarna gives the Partner a thirty (30) days prior written notice by posting on the Klarna Network or sending an e-mail to the Partner. Klarna also reserves the right to, without notice, add change, modify, suspend, or discontinue any Services at any time. Such variations or modifications will be effective unless the Partner rejects such changes with fifteen (15) days notice. The Partner’s rejection of such changes or modifications may be grounds for termination of this Agreement by Klarna. **(c)** The Partner may not assign this Agreement without the express prior written consent of Klarna. Klarna is entitled to wholly or partly assign its obligations and/or rights under this Agreement. ## 21. Survival & Severability The following terms of this Agreement shall survive termination, cancellation, or expiration of this Agreement and remain in effect after such happening: Sections 7 (Data) , 8 (b), 9 (Price and payment terms), 10 (Payment), 11 (Limitations of liability), 13 (Confidentiality), 14 (IP) and 21 (Dispute Resolution). In the event that any provision of this Agreement conflicts with the law under which the Agreement is to be construed or if any such provision is held invalid or unenforceable by a court with jurisdiction over the Parties to the Agreement, (i) such provision will be restated to reflect the original intentions of the Parties in accordance with applicable law; and (ii) the remaining terms, provisions, covenants, and restrictions of the Agreement will remain in full force and effect. ## 22. Personal data Klarna will process personal data about the Partner’s contact person(s) as a controller and in accordance with the EU General Data Protection Regulation (2016/679) and applicable supplemental national data protection laws. Further information about how Klarna processes personal data for the purpose of these Terms and the data subject’s rights with regards to this processing is set out in PriceRunner’s Privacy Policy (found [here](https://www.pricerunner.com/info/privacy)). --- # Source: https://docs.klarna.com/resources/legal-and-compliance/payment-solutions-guidelines/security.md # General Security Recommendations for your Checkout ## If you see anything suspicious, the checkout looks weird, or you detect anomalies in your transaction processing, reach out to us immediately. Let’s fight fraud together. ## Security banners at checkout As part of our ongoing commitment to **provide a secure and trusted shopping environment**, Klarna has introduced informational banners in the purchase flow of selected merchants.  These banners are designed to sustain consumer confidence and safeguard shopping experiences, all without interfering with your checkout processes or payment options. Here's what you need to know: ### New store If your store is relatively new or still being evaluated by Klarna, a banner may appear to inform customers. This is simply to indicate that we are in the process of verifying your store’s product quality and return policies.  **What you can do** - Make sure your contact information, along with your shipping and return policies are easy to find  on your website. - Get to know Klarna's [Merchant Protection Program](https://x.klarnacdn.net/cdn-klarna-com/1.0/shared/content/policy/shipping/en_us/MerchantProtectionTerms.pdf) for more tips and best practices.'' '' ![ This banner will be automatically removed once we have recorded enough transactions.](Zl2CFaWtHYXtUAuN_newstorebanner.jpeg) *This banner will be automatically removed once we have recorded enough transactions.* ### Elevated complaints Merchants experiencing a higher than average dispute rate will have a banner displayed as a caution to customers. **What You Can Do** - Review your dispute resolution and customer service practices. - Ensure your policies on shipping and returns are clearly displayed on your website. - Check out [Klarna's Dispute & Returns Improvement Guide](https://docs.klarna.com/payments/after-payments/disputes/dispute-returns-improvement-guide.md) for additional advice on enhancing your dispute management and customer satisfaction. ![ This banner will be automatically removed once the dispute rates have improved.](Zl1_GKWtHYXtUAsQ_newstorebanner.jpeg) *This banner will be automatically removed once the dispute rates have improved.* ### Banner removal The banners **will automatically be removed once the underlying reason has been mitigated**. For merchants labeled as 'Unverified', this will occur after we have gathered enough data and for those with elevated disputes, improvement in errand rates will lead to banner removal. ### Support  For further questions or advice, feel free to contact our [support team](http://klarna.com/merchant-support). ## Web security is important Your store is your brand, your identity, and the first place of contact with your customers. If it isn't secure, business relationships can be compromised. A single security breach can be a death knell for your business. Hackers have multiple ways of threatening your store: - Infecting a website with malware and spreading it to site visitors - Stealing sensitive customer information, for example, names, email addresses, credit card details, and other transaction information - Adding the website to a botnet of infected sites - Hijacking or crashing the site Security breaches affect your customers, you, and your business. Breaches can incur high fines, penalties, and other costs. Your business can only be successful if you build up trust and a vital relationship with your customers. Even if a security incident doesn't cause a data breach, it can have a huge impact on customer trust. When you're of the risks and consequences of inadequate web security, you know that you must take measures to secure your store. All businesses, no matter the size, can fall prey to an attack. Hackers use automated tools to find vulnerable sites and they don’t differentiate between small, mid, and enterprise businesses. Threats and attacks are everywhere, so be prepared now. ## General security guidelines - Keep all your software up to date by always installing the latest patches. This applies to everything: the operating system, the web server, frameworks, and plug-ins. - Scan for security problems if a scanner is available (for example, [](https://www.magereport.com/) for Magento). - Be selective about granting admin rights to user accounts. - Delete accounts of employees or contractors that no longer work for you, as well as any unknown accounts. - Don’t share the same account between users so that you can link actions to a specific person. - Use strong passwords consisting of 10 or more characters. - Enable two-factor authentication (2FA) if possible. - Enable logging of admin actions in your store's software. - Monitor suspicious admin activities. If you see anything suspicious, the checkout looks weird, or you detect anomalies in your transaction processing, reach out to us immediately. Let’s fight fraud together. --- # Source: https://docs.klarna.com/resources/legal-and-compliance/policies-and-term-of-service/sensitive-goods-and-privacy.md # Sensitive goods and privacy ## In general Certain personal data is by its nature particularly sensitive and therefore it has stronger protection under privacy laws (for example the GDPR in Europe, or the California Consumer Privacy Act in the United States). This type of data, called special categories of data or sensitive personal data, can be data that concerns racial or ethnic origin, political opinions, religious or philosophical beliefs, membership of a trade union, health, a person’s sex life or sexual orientation, genetic data and biometric data that uniquely identifies a person. In general, processing of sensitive data is prohibited. There are however a number of exceptions; e.g. if the subject has consented to the processing of sensitive personal data. Do however note that there are specific requirements in relation to a valid consent under the GDPR. In the cooperation between Klarna and the merchant, each party will process certain personal data. That processing is by each party done in the capacity of a data controller, being responsible for its own processing. However, the parties will also share certain personal data with each other. ## Data sharing with Klarna If you are processing personal data which could be categorized as sensitive data, you have to make sure not to share that data with Klarna. As information regarding what goods the consumer has purchased normally is shared with Klarna, you have to make sure that, to the extent the information is deemed sensitive data, names of goods are anonymized before that information is shared with Klarna. ## Medical/pharmaceutical products Medical and pharmaceutical products may include goods which can reveal the health or sex life of a person. Therefore, you should never send any line item data regarding products that may reveal the health or sex life of a person, which includes, but is not limited to, products that have a package leaflet which is regulated under the relevant implementation of the Directive 2001/83/EC of 6 November 2001 on the Community code relating to medicinal products for human use or similar local regulations. This means you should never send any such line items. Instead of providing line item data for such products, you should blank out the name of the goods, or as a suggestion simply state that ‘pharmaceutical goods’ were purchased. ## Adult products and sexual content You should never send any line item data that could reveal details about someone’s sex life or sexual orientation. If you are sending any line item data regarding products that can reveal details about a person’s sex life or sexual orientation, you should blank the item out or state ‘sensitive item’ or similar. ## Political opinions, religious or philosophical beliefs, or trade union membership You should never share data with us that reveals an individual’s political opinions, religious or philosophical beliefs, or trade union membership. If you are sending line item data regarding products that can reveal details about a person’s political opinions, religious or philosophical beliefs, or trade union membership you should blank the item information out or state ‘sensitive item’ or similar. --- # Source: https://docs.klarna.com/resources/business-tools/merchant-portal-guide/settings.md # Settings In this section on Klarna Portal you will find all tools required to manage everything related to credentials associated with your account, as well as account details. ## Klarna API keys This feature enables you to create API keys to connect Klarna to your store. ![klarna docs image](ZnLFZZm069VX14Qt_MP-APIkeys.jpeg)image By clicking on **"Generate new Klarna API key"**, you will get a new API key. It can only be accessed once, so downloading it is essential. ![klarna docs image](ZnLG75m069VX14Rr_MP-APIkeys2.jpeg)image An API key may not be needed and in use anymore, one can disable it by clicking "*Disable*" and confirming that action by pressing "**Disable credentials**" in the following screen. ## Client identifiers When integrating products like On-site messaging or Express checkout, using our Web SDK, you'll need to utilize a `client identifier`. To enable this functionality, you must register the origin domains where you plan to deploy the Web SDK and create a corresponding client identifier for use in your code. Follow these steps to create a client identifier: 1.Go to **"Client Identifiers"** section. 2.If you have access to multiples MIDs with the same user, select the corresponding MID in the **Store** drop down menu at the top of the page. ![klarna docs image](ZrRvUUaF0TcGIxXl_clientidentifier.jpeg)image 3.Ensure that the merchant URLs are registered as ***Allowed Origins*** by clicking in ***"Allowed Origins***" tab. Once *allowed origins* are properly registered, go **back**'' to the previous page. ![klarna docs image](ZrRxJkaF0TcGIxYK_manage_origins.jpeg)image 4.Click on **"+ Generate client identifier"** button in order to create a new id. A new screen will be opened with the identifier that will allow you to copy it, however this identifier will be accessible later if needed by selecting "***copy***" option in the identifiers table. ![klarna docs image](ZrRxeEaF0TcGIxYY_generate_client_identifie.jpeg)image ## SFTP Credentials These credentials grant you access to Klarna’s settlement reports via SFTP (Secure File Transfer Protocol). ![klarna docs image](ZkNCNSol0Zci9Gj9_SFTP-MP.jpeg)image ## Bank account details Here, you can update your bank account information. Simply provide the requested details, and our team will process the modification and confirm it afterward. ![klarna docs image](ZkNElSol0Zci9Glx_Bankaccountdetails.jpeg)image ## Customer service information On this page, you can input the contact details for your store. Klarna will share this information with customers who need to contact you. You have the option to add this information either **by market or globally**. Here's what you can include: - Contact information: You can provide phone numbers, email addresses, and chat support options for customers to reach out to you. - Return policy information: Add details about your return policy here so that our support teams can assist customers accordingly. ![klarna docs image](ZkNV3yol0Zci9G1w_Customerservice-MP.jpeg)image --- # Source: https://docs.klarna.com/payments/after-payments/settlements/settlement-files.md # Settlement reports ## Reconcile Klarna payments easily with detailed Settlement Reports available in CSV, PDF, or JSON formats via the Merchant Portal, Settlements API, or Klarna-SFTP. Settlement Reports explain in detail all payments made by Klarna to you and help you to reconcile your accounts. Each Settlement Report can be linked to a payout by using the unique payment reference, which appears on your bank account statement. Settlement Reports are available in CSV, PDF or JSON format and can be accessed in three different ways - using Klarna’s Merchant Portal, using the Settlements API or by using the [Klarna-SFTP](https://docs.klarna.com/payments/after-payments/settlements/additional-resources/how-to-get-settlement-reports-via-sftp/). ## Merchant Portal Using the Merchant Portal to access your Settlement Reports is the simplest method of managing them, as no technical setup or configuration is needed. The Merchant Portal allows for filtering by dates and currency and simple downloads of Settlement Reports for desired transactions. For each payout, a settlement report is created and shown in the table at the bottom. You'll find the options to download the CSV and PDF report from the table or to click on the payment reference for the transactional details. ![klarna docs image](29e3d23c-df8b-4f06-9e9e-ecf6429b4aa8_FIRE-settlements-app-overview.jpeg)image ## CSV settlement report {{CardList| id=Resend_Email_API_Technical_Documentation |cardListType=downloadable_assets |showAssetsGroupedHorizontally=false |bannerBackgroundColor=white |cards= {{Card |image=CSV settlement report example1.csv |downloadBehaviour=OpenNewWindow |contentType=CSV settlement report example |assetSize=20496 }} {{Card |image=CSV settlement report example2.csv |downloadBehaviour=OpenNewWindow |contentType=CSV settlement report example |assetSize=12311 }} {{Card |image=CSV settlement report example3.csv |downloadBehaviour=OpenNewWindow |contentType=CSV settlement report example |assetSize=8968617 }} {{Card |image=CSV settlement report example4.csv |downloadBehaviour=OpenNewWindow |contentType=CSV settlement report example |assetSize=2072133 }} {{Card |image=CSV settlement report example5.csv |downloadBehaviour=OpenNewWindow |contentType=CSV settlement report example |assetSize=1308 }} {{Card |image=CSV settlement report example6.csv |downloadBehaviour=OpenNewWindow |contentType=CSV settlement report example |assetSize=10892 }} {{Card |image=CSV settlement report example7.csv |downloadBehaviour=OpenNewWindow |contentType=CSV settlement report example |assetSize=48577 }} {{Card |image=CSV settlement report example8.csv |downloadBehaviour=OpenNewWindow |contentType=CSV settlement report example |assetSize=6831 }} {{Card |image=CSV settlement report example9.csv |downloadBehaviour=OpenNewWindow |contentType=CSV settlement report example |assetSize=20738 }} {{Card |image=CSV settlement report example10.csv |downloadBehaviour=OpenNewWindow |contentType=CSV settlement report example |assetSize=815943 }} }} ## Settlements API The Settlements API allows for managing and gathering Settlement Reports using our predefined API. It requires technical configuration but is a preferred method to manage larger volumes of Settlement Reports. Click [here](https://docs.klarna.com/api/settlements/) for detailed information about the Settlements API. ![ Available endpoints for the Settlements API](b20b8140-ea4e-4b0a-a812-dfb459aa332d_FIRE-settlements_api_overview.jpeg) *Available endpoints for the Settlements API* ## Fields description ### Calculation of settlement amount | Total amount | Transaction Type | |----|----| | \+ total_sale_amount | \+ sale | | − total_return_amount | − return | | − total_reversal_amount | − reversal + reversal_merchant_protection | | − total_fee_amount | − fee | | \+ total_fee_correction_amount | N/A | | \+ total_commission_amount | \+ commission | | \- total_tax_amount |  Not available as a separate transaction type. However, the amount can be included as a separate column “vat_amount” with the Report Configurator | | − total_charge_amount | − charge | | \+ total_credit_amount | \+ credit | | − total_repay_amount | N/A | | − total_holdback_amount | − holdback | | \+ total_release_amount | \+ release | | \+ total_fee_refund_amount | \+ fee_refund | ## total_settlement_amount ### Summary section fields | Field | Type | Description | |----|----|----| | total_sale_amount | Decimal | Total of all “sale” events. These are all captured orders that have been shipped to the customers. | | total_fee_amount | Decimal | Total of all “fee” events. These are service fees charged by Klarna for the related sale transactions. | | total_fee_correction_amount | String | Total of refunded fees in a given settlement or period. | | total_tax_amount | Decimal | Total tax (VAT, GST) amount on Klarna fees. Reflects the total of all vat_amount values per transaction, which are described further down | | total_return_amount | Decimal | Total of all “return” events. These are refund transaction, registered by the merchant and indicating that the goods/services have been returned by the customer. | | total_reversal_amount | Decimal | Total of all “reversal” events. These are refund transactions, registered by Klarna in disputed orders in favour of the customer. This contains fraudulent cases seen as merchant loss eg. due to missing tracking data. | | total_commission_amount | Decimal | Total of all “commission” events. These are paid by Klarna to the merchant based on the contractual agreement regarding commissions. | | total_credit_amount | Decimal | Total of all “credit” transactions. | | total_charge_amount | Decimal | Total of all “charge” transactions. | | total_holdback_amount | Decimal | The amount is used as a (rolling) reserve, which covers for future refunds or other security reasons. | | total_release_amount | Decimal | The amount reduces the rolling reserve (the opposite of a holdback). The credit that Klarna had set apart for a merchant, gets released and paid back to the merchant. | | opening_debt_balance | Decimal | Your negative balance with Klarna from previous settlements, if your returns, fees, and other charges exceeded your sales. This amount equals the closing_debt_balance of your last settlement unless Klarna has invoiced you separately for the amount. | | total_deposit_amount | Decimal | Increase of your debt balance with Klarna if your returns, fees, and other charges exceed your sales within this settlement period. This debt will be deducted from your next settlements as a total_repayment_amount. This field deposit amount describes the amount that is increasing your debt balance, to be seen in the closing_debt_balance. For the calculation refer to the chapter "Calculation of settlement amount". | | total_repay_amount | Decimal | Assuming you have an opening_debt_balance with Klarna because your previous settlement was negative, this amount states the reduction of your debt balance, to be seen in a lower closing_debt_balance. The amount is simply deducted from your current settlement and you don't need to do anything further. | | closing_debt_balance | Decimal | Your debt balance after the settlement. This amount will be the opening debt balance of your next settlement and helps you understand which amounts will be deducted from your next settlements. The amount is calculated as: opening_debt_balance - total_repay_amount + total_deposit_amount | | total_fee_refund_amount | Decimal | Credit entries in the settlement report where Klarna has identified that the fee was incorrectly charged. | | total_settlement_amount | Decimal | Total amount of this payout (sales + release - fees - tax - returns - holdback - reversals - repay = total_settlement_amount) | | payment_reference | String | Unique identifier of this payout, which is stated in the transfer note in your bank statement | | settlement_currency | ISO 4217 | Settlement Currency. We settle you like for like in your transacting currency. Example **EUR, USD, GBP** | | payout_date | ISO 8601 | Indicates when Klarna initiated the payout (Coordinated Universal Time, UTC). Please note that it usually takes one banking day until the funds are credited to your bank account. Example:**2018-08-10T07:45:00Z** | | merchant_id | String | Unique Merchant Identification Number Example:**"K123456"** | | merchant_settlement_type | String | Settlement type: **NET** Klarna service fees are deducted from the payout. **GROSS** Klarna service fees are invoiced separately. **GROSS_FEE** Invoice for Klarna service fees. | | submerchant_id | String | unique identifier for a sub merchant | ### Transaction fields | Field | Type | Description | |----|----|----| | type | String | Type of this event: **SALE** (+) captured order that has been shipped to the customer. **FEE** (-) Service fee charged by Klarna for the related sale transaction. Please note that according to your contract multiple fee transactions can be applied to one sale transaction, eg. fixed fees and percentage fees. **RETURN** (-) refund transaction, registered by the merchant and indicating that the goods/services have been returned by the customer. **REVERSAL** (-) refund transaction, registered by Klarna in disputed orders in favour of the customer. This contains fraudulent cases seen as merchant loss eg. due to missing tracking data. **REVERSAL_MERCHANT_PROTECTION** (+) net-amount of the order value (without tax), credited by Klarna to the merchant due to Klarna’s merchant protection eg. in case of fraud. The amount is reducing the total_reversal_amount. **COMMISSION** (+) Paid by Klarna to the merchant based on the contractual agreement regarding commissions. **CORRECTION** (+/-) Certain corrections that are booked against specific orders according to a mutual agreement between the merchant and Klarna. **HOLDBACK** (-) The amount is used as a rolling reserve, which covers for future refunds or other security reasons. **RELEASE** (+) The amount reduces the rolling reserve (the opposite of a holdback). The credit that Klarna had set apart for a merchant, gets released and paid back to the merchant. **CREDIT** (+) Miscellaneous credit towards you, which is described in the field detailed_type. **CHARGE** (-) Miscellaneous charge towards you, which is described in the field detailed_type. **FEE_REFUND** (+) Credit entries in the settlement report where Klarna has identified that the fee was incorrectly charged. | | capture_date | ISO 8601 | Date when the event was registered in Klarna’s system (Coordinated Universal Time, UTC). In case of a SALE transaction it refers to the moment when you shipped the goods to the customer and captured/activated the order. Example:**2018-08-10T07:45:00Z** | | sale_date | ISO 8601 | Date of the order creation (Coordinated Universal Time, UTC). Example:**2018-08-10T07:45:00Z** | | order_id | UUID | Unique identifier of the order. All related transactions in the life-span of an order are associated with this ID. eg. fees or refunds. It is therefore the recommended identifier for reconciling the report lines with your system. Example: **c504a9bb-1948-46d5** | | short_order_id | String | Customer-facing order ID. Example:**9875QW2** | | capture_id | String | Each capture on an order is assigned a unique identifier, referred to as the **capture_ID**, which is provided exclusively for sale and fee transactions. In instances of partial shipments, an order may undergo multiple captures, each of which is reflected as a separate sale transaction with its own unique **capture_id**. It's important to note that for certain transaction types such as RETURNS and REVERSALS, where captures do not exist, the API will return empty strings for the **capture_id** field. Example:**8e93b66-6ab1-4d3d-b60d-1cc4e24f4a99** | | merchant_reference1 | String | Your internal reference to the order, that has been submitted during order creation. | | merchant_reference2 | String | Your internal reference to the order, that has been submitted during order creation. | | amount | Decimal | Amount of the related transaction. Example:**100.00** | | posting_currency | ISO 4217 | Currency in which the order has been placed. The following currencies are currently available:**DKK, EUR, GBP, NOK, SEK, USD, CHF, CAD, AUD** | | refund_id | String | Unique identifier for Return and Reversal transactions. In case of partial returns, each return transaction is associated with a unique refund_ID.*Note*: By default, these are not included in the reports on SFTP. They can be included by using the Report Configurator. Example:**8e93b66-6ab1-4d3d-b60d-1cc4e24f4a99** | | purchase_country | ISO 3166-alpha-2 | Purchase country, as provided by the merchant.*Note*: By default, these are not included in the reports on SFTP. They can be included by using the Report Configurator. Example:**US, GB, DE, SE** | | tax_rate | Decimal | VAT (Value added tax in Europe) or GST (goods and services tax in Australia) rate on Klarna fees. | | tax_amount | Decimal | VAT (Value added tax in Europe) or GST (goods and services tax in Australia) amount on Klarna fees. | | shipping_country | ISO 3166-alpha-2 | As provided by you. | | initial_payment_method_type | String | Payment method the consumer chose during checkout. | | initial_number_of_installments | Decimal | Number of installments the consumer chose during checkout in case of installment payments. | | initial_payment_method_monthly_downpayments | Decimal | Number of monthly downpayments that were chosen during the checkout in case of installment payments. | | merchant_capture_reference | String | Your internal reference to the capture, that has been submitted during capturing an order via API. | | merchant_refund_reference | String | Your internal reference to the refund, that has been submitted during refunding an order via API. | | detailed_type | String | Detailed description of the transaction type. See section “Detailed type” for further information. | | tax_rate_1-4 | String | Consumer VAT (value added tax) rates on your products/services. The rate needs to be submitted by you for every order-line when capturing or refunding an order, because an order can consist of items with different VAT rates | | tax_amount_1-4 | Decimal | Consumer VAT (value added tax) amounts on your products/services. The amount needs to be submitted by you for every order-line when capturing or refunding an order, because an order can consist of items with different VAT rates. | | reversal_reference | String | Unique internal identifier, known as DisputeKRN, assigned to each dispute by Klarna. This identifier includes a dispute category and a numeric code, enabling efficient tracking and management of the dispute's status. | ### Detailed Type | Transaction type | Detailed type | Description | |----|----|----| | CHARGE | CASH_ADVANCE_AMORTISATION | Merchant Lending loan amortisation | | CHARGE | TRANSFER_FROM_LEGACY_INTEGRATION | Transfer of debt from the legacy KPM integration towards a KP integration. This mechanism is used instead of issuing an invoice. | | CHARGE | LIABILITY_TRANSFER | Represents the movement of financial obligations (liabilities) from one entity to another, i.e. reassigns the responsibility for the debt or obligation from the original holder to a new party. For instance, liabilities can be moved between different MIDs belonging to the same organisation. | | CHARGE | PAYMENT_REMINDER | Represents the amount of outstanding debt owed by the merchant, created when the merchant’s balance remains negative for a consecutive period. | | COMMISSION | COMMISSION | Commission | | COMMISSION | PURCHASE_COMMISSION_PERCENTAGE | Percentage Commission Paid by Klarna to the merchant based on the contractual agreement regarding percentage commissions | | CORRECTION | CREDITED_CORRECTION | Manual corrections | | CREDIT | CASH_ADVANCE_FEES | Merchant Lending fees charges | | CREDIT | CASH_ADVANCE_PAYOUT | Merchant Lending loan payout | | CREDIT | CORRECTION_DISPUTE | Credit entries in the settlement report where Klarna has identified that the customer refund was incorrectly charged. | | FEE | EXPIRY_FEE_GROSS | Fee for extending the due date for a consumer invoice. | | FEE | LATE_RETURN_FEE | Added when an order is returned by the consumer after a reminder is sent. | | FEE | PURCHASE_FEE_FIXED | Fixed Fee on captured order | | FEE | PURCHASE_FEE_PERCENTAGE | Percentage Fee on captured order | | FEE | SERVICING_FEE | Fee on captured order if a consumer pays with Klarna account. | | FEE | EXTEND_DUE_DATE_FEE | Fee for extending the due date for a consumer invoice | | FEE | DISPUTE_FEE | Dispute fee on a captured order | | FEE_REFUND | DISPUTE_FEE_REFUND | Fee refund on disputes in favour of the merchant | | FEE_REFUND | PURCHASE_FEE_FIXED | A refund issued for a previously charged purchase fee. This action is performed manually as part of a fee correction process in the event of an error or other issue. | | FEE_REFUND | PURCHASE_FEE_PERCENTAGE_REFUND | A refund for the percentage component of a previously applied purchase fee. This action is performed manually as part of a fee correction process in the event of an error or other issue. | | HOLDBACK/RELEASE | INSUFFICIENT_BANK_ACCOUNT_DETAILS | A holdback for the sum amount that would have been released if correct bank details were present. These can be updated in Merchant portal under settings\> Bank account details. Once updated the withheld amount(s) will be paid out together either in a new settlement the following business day if you are settled weekly, or in your next settlement if you are settled daily. | | HOLDBACK/RELEASE | ROLLING_RESERVE | Security measure that works well for both you as a merchant and Klarna since we do not hold funds or delay payment of funds, but rather hold only a portion of it as collateral, which will automatically be released after the time agreed upon. | | HOLDBACK/RELEASE | UNDER_REVIEW | Security measure that will allow Klarna to place a hold on payouts either in part of full while we review the financial holding of a merchant and the underlying transactions | | RETURN | PURCHASE_RETURN | Refund, registered by the merchant and indicating that the goods/services have been returned by the customer. | | RETURN | PAYMENT_DEFAULT | Refund registered by Klarna and indicating the customer fails to pay. This is to distinguish this refund from others. | | REVERSAL | COMMISSION_RETURN | Return of commission | | REVERSAL | REVERSAL | Refund, registered by Klarna on disputed orders in favour of the customer. This contains fraudulent cases seen as merchant loss eg. due to missing tracking data. | | REVERSAL | FRAUD_POLICY_CHARGE | Gross amount of the order value (incl. consumer VAT), debited by Klarna due to Klarna’s merchant protection. The net order value (excl. consumer VAT) is credited in the same settlement with the detailed type FRAUD_POLICY_CREDIT_NET. | | REVERSAL_MERCHANT_PROTECTION | FRAUD_POLICY_CREDIT_NET | Net-amount of the order value (incl. consumer VAT), credited by Klarna to the merchant due to Klarna’s merchant protection eg. in case of fraud. The amount is reducing the total_reversal_amount. | | SALE | PURCHASE | Captured order | --- # Source: https://docs.klarna.com/payments/after-payments/settlements/settlement-reporting-getting-started.md # Before you start ## After capturing your first order you will be automatically paid out according to the payout schedule and payout defined. Get started here and have everything in place to reconcile your first payment. ## Understand payout terms You can either find your payout schedule **payout schedule** and **payout delay** in the terms and conditions of your contract or by simply visiting the Settlements App in the Merchant Portal. A payout delay acts as safety net for both of us and it's main purpose is to prevent money for invoices from being sent back and forth between Klarna and you and also to cover cases where you would register a return.  Let's say you agreed to have weekly payouts on Wednesdays and a payout delay of one week. If you capture an order on Friday, it will not be settled on the Wednesday in the following week, but one week later on Wednesday, due to the payout delay. One day later, on Thursday, you will receive the **Settlement report** via the [Merchant Portal Settlements App](https://docs.klarna.com/resources/business-tools/merchant-portal-guide/payments.md), the [Settlements API](https://docs.klarna.com/api/settlements/)or via a [pre-configured SFTP](https://docs.klarna.com/payments/after-payments/settlements/additional-resources/how-to-get-settlement-reports-via-sftp.md). On the same day, the payment is leaving our bank account and will be credited to your bank account in the following days. For each payout we will provide you with settlement reports to reconcile the payment against the orders in your system. Use the payment reference in the bank statement to match the related settlement report. The most popular way to access Settlement reports is to use our CSV report for order-level reconciliation and the PDF report as a summary and for your tax reporting since it serves as the VAT invoice for our fees in the European Union, Australia, and Canada.  ![ Example: Payout schedule weekly on Wednesday and Payment delay 1 week ](Zr9xo0aF0TcGJASI_Settlementdelay.jpeg) *Example:Payout schedule weekly on Wednesday and Payment delay 1 week* **\*Settlement time zones:** - EU in GMT (GB time zone) - US in EST (UTC+6) - AP in AEST (UTC+10) ## Consider an automated integration via API or SFTP Our settlement reports are always available for manual download via the Settlements App. Additionally, you can retrieve both the CSV and PDF report automatically via [SFTP](https://docs.klarna.com/payments/after-payments/settlements/additional-resources/how-to-get-settlement-reports-via-sftp.md) or an \[ API\] to reduce your manual effort. ## Customize your CSV settlement report Instead of adjusting your accounting system, you can easily customize our CSV settlement reports within a few minutes. Simply add or remove data, adjust the delimiter, date, or amount formats. --- # Source: https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/shipping-fees.md # Shipping fees ## Transparency in costs, including shipping, is key to maintaining trust with your customers and ensuring compliance with Klarna's guidelines. ## Overview In case an order includes additional cost due to shipping these should be detailed in the `order_lines` as an additional product. In order to clearly indicate that the object is associated to shipping fees and not to an specific product, you should indicate `"type": "shipping_fee"`. Additionally, as a good practice we recommend to set the name of the corresponding also as "**Shipping**" or any variation that allows a clear understanding to the customer what this line is about. The customer will be able to see this level of details in their post purchase experience, including Klarna app. This will ensure a transparent and accurate checkout experience for your customers as well as better post purchase experience. ## Integration steps Let's break it down into simple steps: **1 - Identify the shipping costs**: Before you can send the shipping fee information through the API, you need to determine the shipping costs associated with the customer's order. This can vary based on factors like destination, delivery method, and package weight. **2- Validate you checkout experience**: Within your checkout system, ensure that you have a field or method to calculate the shipping costs before the final checkout stage. This should be dynamic, adjusting in real-time as customers change their shipping preferences. **3- Modify the Klarna Payments API Request**: In your API request to Klarna, you'll include the shipping costs as a separate line item. `order_lines` object should be included in the [creation of the session](https://docs.klarna.com/api/payments/#operation/createCreditSession!path=order_amount&t=request) request as well as in the [creation of the order](https://docs.klarna.com/api/payments/#operation/createOrder!path=order_lines&t=request)request. Here's a simplified example of how to structure this in your payload: ``` json { "order_amount": 10000, "order_tax_amount": 2000, "order_lines": [ { "type": "physical", "name": "Product Name", "quantity": 1, "unit_price": 8000, "tax_rate": 2500, "total_amount": 8000, "total_tax_amount": 2000 }, { "type": "shipping_fee", "name": "Shipping", "quantity": 1, "unit_price": 2000, "tax_rate": 0, "total_amount": 2000, "total_tax_amount": 0 } ] } ``` Example of order_lines object for shipping fees **4 - Testing**: Before going live, thoroughly test the integration in a sandbox environment to ensure the shipping costs are correctly calculated and displayed to the customer. Klarna provides a test environment for this purpose. **5 - Go Live**: Once testing confirms that everything is working as expected, you can proceed to deploy the changes to your live environment. Keep an eye on the first transactions to ensure all data is transmitted correctly. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/payments-for-shopify/shopify-draft-orders-and-the-klarna-in-store-orders.md # Shopify draft orders and in-store orders ## Enable Klarna payments for in-store purchases by creating Shopify draft orders and sending customers an invoice to complete payment through the online checkout. Shopify doesn’t yet support alternative payment methods, like Klarna, to directly integrate into [Shopify's Point of Sale sales channel](https://www.shopify.com/pos/features#Payments). Customers in store can still easily pay with Klarna using Shopify draft orders. Here’s how you can process an In-store order: 1. Create a [Shopify draft order](https://help.shopify.com/en/manual/orders/create-orders) for a customer (with optional customer details prepopulated) with the desired products. Don't select **Paid**. 2. Email the invoice to the customer from the Shopify draft order admin page using the **Send invoice** button, either from the draft order or **Payment due later** order. 3. The customer then can pay for the draft order via your Shopify store's Online Store sales channel using your store's Shopify web checkout and choose Klarna or any other payment option available in checkout. ![ Creating a draft order in Shopify.](f65fdac5-b402-482f-a44b-e9a6eb2e596a-shopify-shpp-draft-order-pending.jpeg) *Creating a draft order in Shopify.* **In summary:** - Shopify doesn’t yet support Klarna to integrate directly into Shopify's Point of Sale sales channel. - Customers in store can still easily pay with Klarna using Shopify draft orders. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/shopify-payments.md # Klarna for Shopify Payments ## Offer flexible Klarna Payment options like installments and pay later through Shopify Payments, enhancing your checkout experience in supported regions with easy integration. ### Shopify Payments - Powered by Stripe Klarna can be added as [a local payment method](https://help.shopify.com/en/manual/payments/shopify-payments/local-payment-methods/klarna) supported by Shopify through their Payments platform which is integrated via [Stripe](https://docs.klarna.com). Using Klarna on Shopify Payments provides a safe and easy checkout experience for your customers. Customers can choose to pay in instalments, pay in full, pay later, or finance their transaction using direct debit or credit. When a customer places an order and uses a Klarna payment option to pay, the funds are paid to you in your next [Shopify Payments payout](https://help.shopify.com/en/manual/payments/shopify-payments/getting-paid-with-shopify-payments/view-payouts). You cannot choose which Klarna payment methods to offer It isn't possible to choose which Klarna payment options your customer can use at checkout. The Klarna payment options your customer can use are automatically decided depending factors including - but not limited to - your store location and the customer's previous order history. If you would like to offer Klarna in a market not listed above, integrate Klarna through the third party app [here](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/ways-to-integrate-on-shopify). | | || | * Croatia * Cyprus * Estonia * Greece * Italy * Latvia * Lithuania * Luxembourg * Malta * Netherlands * Norway * Poland * Slovenia * Spain * United Kingdom | * Switzerland - Swiss Franc (CHF) * Czechia - Czech Koruna (CZK) * Denmark - Danish Krone (DKK) * Austria, Belgium, Finland, France, Germany, Greece, Ireland, Italy, Portugal, Slovakia, Spain - Euro (EUR) * United Kingdom - Great British Pound (GBP) * Norway - Norwegian Krone (NOK) * Poland - Polish złoty (PLN) * Sweden - Swedish Krona (SEK) | | * Austria * Germany * Sweden | * Austria, Belgium, Finland, France, Germany, Greece, Ireland, Italy, Portugal, Slovakia, Spain - Euro (EUR) * United Kingdom - Great British Pound (GBP) * Norway - Norwegian Krone (NOK) * Denmark - Danish Krone (DKK) * Sweden - Swedish Krona (SEK) | --- # Source: https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/mobile-integration/sign-in-with-klarna-android.md # Sign in with Klarna ## In this step-by-step guide you will learn how to integrate Sign in with Klarna into your Android app. ## Before you start Before starting to add the Sign in with Klarna button or using the Sign in with Klarna SDK you will need to do two things: 1. Setting the return URL 2. Defining an event handler ### 1. Setting the Return URL To ensure the Sign in flow initiated by the SDK can correctly redirect back to your application, you must configure a unique return URL (deep link) for your app and provide this URL string to the SDK. This value is required specifically for the Sign in flow initiated by the SDK. **Important:** This configuration is distinct from any other return URLs the SDK might require for handling redirects from external third-party applications. Ensure you are configuring the URL for the SDK's Sign in flow. Add this snippet to your manifest file in order to set your return URL value for the SDK’s activity. ``` markup ``` In version 2.6.11 and later, a new activity called \`**KlarnaRedirectReceiverActivity**\` has been introduced in the Android SDK. When setting the returnURL parameter for KlarnaSignInButton or KlarnaSignInSDK , you need to concatenate the scheme and host you specified in AndroidManifest.xml into one value using `://` as the separator, as shown here: ``` kotlin val button = KlarnaSignInButton(... returnURL = “://”) ``` Utilizing \`**FLAG_ACTIVITY_NEW_DOCUMENT**\` when initializing an activity that proceeds to the Sign in with Klarna operation can interfere with the user navigation within the app. This flag might induce Android to spawn a new app instance upon returning to the app via the return URL deep linking, consequently disrupting the login process. To evade potential user inconveniences, **we recommend avoiding \`FLAG_ACTIVITY_NEW_DOCUMENT\` when launching an activity that may trigger the Sign in with Klarna procedure.** ### 2. Defining an Event Handler While the user is interacting with the Sign in with Klarna flow or when the flow is completed, you'll receive events by setting an event handler when creating an instance of `KlarnaSignInSDK`. ``` kotlin val eventHandler = object : KlarnaEventHandler { override fun onEvent(klarnaComponent: KlarnaComponent, event: KlarnaProductEvent) { when(event.action) { KlarnaSignInEvent.USER_TAPPED_BUTTON -> { // User tapped the KlarnaSignInButton, auth process starting } KlarnaSignInEvent.USER_AUTH -> { // User completed interactive auth, tokens will be fetched } KlarnaSignInEvent.USER_CANCELLED -> { // User manually canceled sign in } KlarnaSignInEvent.SIGN_IN_TOKEN -> { // User is authorized. You can read the results // in event.params attribute by casting it to the // KlarnaSignInToken model. val token = event.params[KlarnaSignInEvent.ParamKey.KlarnaSignInToken] as? KlarnaSignInToken val accessToken = token?.accessToken ... } } } override fun onError(klarnaComponent: KlarnaComponent, error: KlarnaMobileSDKError) { // In case of any errors, check the 'error' parameter for more details, // for example if the error is fatal or not. val errorMessage = error.message val isFatal = error.isFatal when(error.name) { KlarnaSignInError.InvalidClientID -> { // The client ID value is invalid } KlarnaSignInError.InvalidScope -> { // The scope value is invalid ... } KlarnaSignInError.InvalidMarket -> { // The market value is invalid ... } KlarnaSignInError.InvalidCustomTabsReturnUrl -> { // The AndroidManifest needs to be set up for KlarnaCustomTabActivity ... } KlarnaSignInError.SignInFailed -> { // User authorization step failed val signInError = error.params[KlarnaSignInError.ParamKey.Error] val signInErrorDescription = error.params[KlarnaSignInError.ParamKey.ErrorDescription] ... } KlarnaSignInError.RenderButtonFailed -> { // Button failed to render ... } KlarnaSignInError.AlreadyInProgress -> { // Sign in is already in progress, user tap or signIn method call is ignored ... } } } } ``` `KlarnaEventHandler` reference will be kept weak in the SDK to avoid memory leaks, thus it's required for integrator to keep the strong reference. ## Sign in with Klarna Button To integrate the button for Sign in with Klarna as a native view in your Android app, you need to create an instance of it, add it to your view hierarchy, and receive the results once the flow is completed. ### Create the Button The button for Sign in with Klarna native view in Android is called `KlarnaSignInButton`. You can create an instance programmatically or inflate it from an XML layout file. You can set the parameters of the button both programatically or in the XML layout file. ### Create the Button Programmatically You can create the Sign in with Klarna button programmatically and place it in your app with desired layout options. You can see a sample on the right. ``` kotlin //Create an instance of KlarnaSignInButton val button = KlarnaSignInButton(...) // Add it to your container with desired layout parameters val layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT) containerViewGroup.addView(button, 0, layoutParams) ``` ### Create the Button in XML You can also add the Sign in with Klarna button into your XML layout file and get the view instance programmatically either by `findViewById` or by the generated View Binding instance of your layout (if you're using View Binding). ``` markup ``` ### Settings the Parameters You can set the parameters of the Sign in with Klarna button either by setting them on the button instance or by setting them as attributes in the XML layout file. | Parameter | Type | Required | Description | |---------|----|--------|-----------| | `context` | Context | Yes | The context of the Activity the button is in. | | `clientId` | String | Yes (optional in the constructor) | The UUID you get when creating your Klarna OAuth 2.0 app. The XML attribute of this parameter is `app:KlarnaSignInButtonClientId.` | | `scope` | String | Yes (optional in the constructor) | A space-separated list of scopes you would like to request from the user. For example, request `billing_address` if you need the billing address in your account creation. The XML attribute of this parameter is `app:KlarnaSignInButtonScope.` The claims of the requested scopes will be returned as part of the JWT token `id_token` . Note: `openid` is always requested by default even if you don't request it explicitly. Available scopes are as follows: | | `market` | String | Yes (optional in the constructor) | The market or the country where this integration is available, for example, `SE` for Sweden. The XML attribute of this parameter is `app:KlarnaSignInButtonMarket.` | | `locale` | String | Yes (optional in the constructor) | The language in which the Sign in with Klarna button is presented to the user, for example, `sv-SE` or `en-SE` for Sweden. The XML attribute of this parameter is `app:KlarnaSignInButtonLocale` . | | `eventHandler` | KlarnaEventHandler | Yes (optional in the constructor) | The interface to receive the results from the Sign in with Klarna flow. Will be kept as weak reference. | | `environment` | KlarnaEnvironment | No | Configures the endpoints and other behaviors that the SDK will be operating with. When set to `production` , the SDK will make requests to production endpoints and perform real validation, whereas for other environments will not. The XML attribute of this parameter is `app:klarnaEnvironment` . | | `region` | KlarnaRegion | No | Defines the regional API endpoints to which the SDK will send requests. The XML attribute of this parameter is `app:klarnaRegion` . | | `theme` | KlarnaTheme | No | Defines the theming for the Sign in with Klarna UI, but not the button itself. The XML attribute of this parameter is `app:klarnaTheme` . | | `returnURL` | String | Yes (optional in the constructor) | The URL you defined in your `AndroidManifest.xml` file in the preparation section. The XML attribute of this parameter is `app:klarnaReturnUrl` . | | `loggingLevel` | KlarnaLoggingLevel | No | The logging level which will be used when logging messages to the Logcat. The XML attribute of this parameter is `app:klarnaLoggingLevel` . | | `resourceEndpoint` | KlarnaResourceEndpoint | No | Defines the cloud provider to which the SDK will send requests. Please note that this should not be changed or overridden. The XML attribute of this parameter is `app:klarnaResourceEndpoint` . | ### Customizing the Look and Feel of the Button In addition the the parameters list above, Klarna offers several themes, labels, and shapes to customize the button's appearance to match the look and feel of your app. | Parameter | Type | Description | |----|----|----| | `buttonTheme` | KlarnaButtonTheme | Enumerated value to style the button in the light or dark theme. | | `buttonShape` | KlarnaButtonShape | Enumerated value specifying the button's shape. | | `buttonLabel` | KlarnaButtonLabel | Enumerated value specifying the text that will be displayed on the button. | ### Button Theme The `KlarnaButtonTheme` enumeration defines which style is applied to the button, depending on either the app’s configuration or the system settings. | Value | Description | |----|----| | `KLARNA` | Renders the button in the Klarna pink theme. We recommend this theme as it has the highest brand recognition and the likelihood of usage by your customers. | | `LIGHT` | Renders the button in white. We recommend this theme for dark backgrounds. | | `DARK` | Renders the button in black. We recommend this theme for light backgrounds. | | `AUTO` | Automatic theme (light or dark) that will depend on the system’s UI theme. | ### Button Shape In order for the button to fit into the aesthetic of your app, we offer different button shapes: | Value | Description | |----------------|---------------------------------------------------------| | `ROUNDED_RECT` | Renders the button as a rectangle with rounded corners. | | `PILL` | Renders the button as a pill-shaped button. | | `RECTANGLE` | Renders the button as a rectangle with square corners. | ## Sign in with Klarna SDK To integrate the Sign in with Klarna SDK in your Android app, you need to create an instance of `KlarnaSignInSDK`, call its `signIn()` function, and receive the results once the flow is completed. To create an instance of the SDK you need to specify the following parameters: | Parameter | Type | Required | Description | |----|----|----|----| | `activity` | Activity | Yes | The activity instance of your app. | | `returnURL` | String | Yes | The URL you defined in your `AndroidManifest.xml` file in the preparation section. | | `eventHandler` | KlarnaEventHandler | Yes (optional in the constructor) | The interface to receive the results from the Sign in with Klarna flow. | | `environment` | KlarnaEnvironment | No | Enumerated value to set the working environment for the SDK. | | `region` | KlarnaRegion | No | Enumerated value to set the regional API endpoints to which the SDK will send requests. | | `theme` | KlarnaTheme | No | Defines the theming for the Sign in with Klarna UI, but not the button itself. | | `loggingLevel` | KlarnaLoggingLevel | No | The logging level which will be used when logging messages to the Logcat. | | `resourceEndpoint` | KlarnaResourceEndpoint | No | Defines the cloud provider to which the SDK will send requests. | ### Calling the signIn() function To initiate the sign in flow for the user, you need to call the `signIn()` function of the SDK and specify the following parameters: | Parameter | Type | Required | Description | |---------|----|--------|-----------| | `clientId` | String | Yes | The UUID you get when creating your Klarna OAuth 2.0 app. | | `scope` | String | Yes | A space-separated list of scopes you would like to request from the user. For example, request `billing_address` if you need the billing address in your account creation. The claims of the requested scopes will be returned as part of the JWT token `id_token` . Note: `openid` is always requested by default even if you don't request it explicitly. Available scopes are as follows: | | `market` | String | Yes | The market or the country where this integration is available, for example, `SE` for Sweden. | | `locale` | String | No | The language to present to the user, for example, `sv-SE` or `en-SE` for Sweden. | After calling the `signIn()` function you will receive the events in the event handler that you've passed to the SDK. --- # Source: https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/mobile-integration/sign-in-with-klarna-ios.md # Sign in with Klarna - iOS ## In this step-by-step guide you will learn how to integrate Sign in with Klarna into your iOS app. ## Before you start Before starting to add the Sign in with Klarna button or using the Sign in with Klarna SDK you will need to do the following: 1. Implement ASWebAuthenticationPresentationContextProviding 2. Setting the return URL 3. Defining an event handler ### 1. Implement ASWebAuthenticationPresentationContextProviding The iOS integration will render the sign in flow in a sandboxed in-app browser through Apple's own [`ASWebAuthenticationSession`](https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession). ``` swift @available(iOS 13.0, *) extension SignInButtonView: ASWebAuthenticationPresentationContextProviding { /// Needed so ASWebAuthenticationSession knows what window to put the view into. func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor { return window } } ``` The SDK does all the work on your behalf with the parameters and keys that you supply, but you need to implement support for [ASWebAuthenticationContextProviding](https://developer.apple.com/documentation/authenticationservices/aswebauthenticationpresentationcontextproviding) in one of your classes and forward an instance of it to the SDK. The UIWindow that your instance supplies will be used to present the in-app browser. ### 2. Setting the return URL To ensure the Sign in flow initiated by the SDK can correctly redirect back to your application, you must configure a unique return URL (deep link) for your app and provide this URL string to the SDK. This value is required specifically for the Sign in flow initiated by the SDK. Follow our [In app guide](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/get-started/#configure-your-app-return-url) for setting up the return URL value in your app. **Important:** This configuration is distinct from any other return URLs the SDK might require for handling redirects from external third-party applications. Ensure you are configuring the URL for the SDK's Sign in flow. ### 3. Defining an event handler While the user is interacting with the Sign in with Klarna flow or when the flow is completed, you'll receive events by setting an event handler. You can see a sample event handler on the right. ``` swift @available(iOS 13.0, *) extension SignInViewController: KlarnaEventHandler { func klarnaComponent(_ klarnaComponent: KlarnaComponent, dispatchedEvent event: KlarnaProductEvent) { if event.action == .klarnaSignInToken { // Authorization went through let token = event.params["klarnaToken"] } else if event.action == .klarnaSignInUserTappedButton { // Button was tapped } else if event.action == .klarnaSignInUserCancelled { // User cancelled out of the flow } } func klarnaComponent(_ klarnaComponent: KlarnaComponent, encounteredError error: KlarnaError) { if error.name == .klarnaSignInAlreadyInProgress { // Button or sign in call was already in progress } else if error.name == .klarnaSignInAuthorizationFailed { // An internal error occurred if error.isFatal { // The auth flow will absolutely not work. Try again? } } else if error.name == .klarnaSignInMissingSchemeOrHost { // You did not set a valid auth return URL } } } ``` ## Sign in with Klarna Button Please follow this section if you would like to use one of the button designs provided by Klarna. ### 1. Create the Button  You can create an instance of `KlarnaSignInButton` using its default initializer. ``` swift let signInButton = KlarnaSignInButton(clientId: clientID, scope: scope, market: market, locale: locale, presentationContext: self, theme: klarnaTheme, environment: env, region: reg, returnUrl: URL(string: "https://sneakers.com")!, eventHandler: self) ``` #### Parameters When initializing the button, specify the following parameters: | Parameter | Required | Description | |---------|--------|-----------| | clientId | Yes | This is the UUID you get when creating your Klarna OAuth 2.0 app. | | scope | Yes | Space-separated list of scopes you would like to request from the user. For example, requestbilling_addressif you need the billing address in your account creation. The claims of the requested scopes will be returned as part of JWT tokenid_token. Note:openidis always requested by default even if you don't pass it. Available scopes:offline_accessprofile:emailprofile:phoneprofile:nameprofile:date_of_birthprofile:billing_addressprofile:national_identificationprofile:countrypayment:request:create offline_access; profile:email; profile:phone; profile:name; profile:date_of_birth; profile:billing_address; profile:national_identification; profile:country; payment:request:create | | market | Yes | The market or the country where this integration is available, for example,SEfor Sweden. | | locale | Yes | The language in which the Sign in with Klarna button is displayed to the user. | | presentationContext | Yes | Read more about [ context presentation]. | | theme | No | Defines the theming for the Sign in with Klarna UI, but not the button. | | environment | No | Configures the endpoints and other behaviors that the SDK will be operating with. When set toproduction, the SDK will make requests to production endpoints and perform real validation, whereas for other environments will not. | | region | No | Defines the regional API endpoints to which the SDK will send requests. | | resourceEndpoint | No | Defines the cloud provider to which the SDK will send requests. This should not be changed or overridden. | | returnUrl | Yes | The return URL you defined during the preparation section. | | eventHandler | Yes | The event handler for errors and events as described in the [ Preparation section]. | ### 2. Add the Button to Your App You can add the button to your app's view hierarchy with `addSubview()`. The button's contents will self-size according to the available space and the user's dynamic type accessibility settings. ### 3. Start of Sign in Flow When the user taps the button, the sign in flow will be triggered without any additional work from your side. When the flow completes, one of the two methods in your event handler will be called.  ### 4. Send the Token to Your Backend When the authentication flow is complete, the `klarnaComponent(_:dispatchedEvent:)` method of your event handler will be called. ## Sign in with Klarna SDK Please follow this section if you want to add a button with a custom design. ### 1. Create an Instance of the SDK ​To integrate the Sign in with Klarna SDK in your iOS app, you need to create an instance of `KlarnaSignInSDK`, call its `signIn()` function, and receive the results once the flow is completed.
``` swift let sdk = KlarnaSignInSDK( returnUrl: URL(string: "app-schema://"), eventHandler: self) ``` ### Parameters To create an instance of the SDK you need to specify the following parameters. | Parameter | Required | Description | |----|----|----| | `theme` | No | Defines the theming for the Sign in with Klarna UI, but not the button. | | `environment` | No | Configures the endpoints and other behaviors that the SDK will be operating with. When set to `production`, the SDK will make requests to production endpoints and perform real validation, whereas for other environments will not. | | `region` | No | Defines the regional API endpoints to which the SDK will send requests.   | | `resourceEndpoint` | No | Defines the cloud provider to which the SDK will send requests. This should not be changed or overridden. | | `returnUrl` | No | The return URL you defined during the preparation section. | | `eventHandler` | No | The event handler for errors and events as described in the \[ Preparation section\]. | ### 2. Create a Button Create and render your own button. The design and implementation are up to you. ### 3. Call the signIn() function ​When the user chooses to sign in with Klarna, call the SDK's `signIn()` function. This will render the authentication flow. When the flow completes, one of the two methods in your event handler will be called. ``` swift @objc func myButtonTapped() { self.sdk.signIn( clientId: "clientID", scope: "scope", market: "market", locale: "locale", presentationContext: self) } ``` ### Parameters The parameters that you'll need to pass to `signIn()` function are the following: | Parameter | Description | |---------|-----------| | clientId | The UUID you get when creating your Klarna OAuth 2.0 app. | | scope | A space-separated list of scopes you would like to request from the user. For example, requestbilling_addressif you need the billing address in your account creation. The claims of the requested scopes will be returned as part of JWT tokenid_token. Note:openidis always requested by default even if you don't pass it. Available scopes:offline_accessprofile:emailprofile:phoneprofile:nameprofile:date_of_birthprofile:billing_addressprofile:national_identificationprofile:countrypayment:request:create offline_access; profile:email; profile:phone; profile:name; profile:date_of_birth; profile:billing_address; profile:national_identification; profile:country; payment:request:create | | market | The market or the country where this integration is available, for example, SE for Sweden. | | locale | The language in which the Sign in with Klarna button is displayed to the user. | | presentationContext | Read more about [ context presentation]. | ### 4. Send the Token to Your Backend When the authentication flow is complete, the `klarnaComponent(_:dispatchedEvent:)` method of your event handler will be called.
--- # Source: https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/mobile-integration/sign-in-with-klarna-react-native.md # Sign in with Klarna - React Native ## Add Sign in with Klarna to your React Native app by integrating the Klarna In-App SDK, configuring native dependencies, and securely managing the sign-in flow and user data scopes. ## **Setup your app** ### Package Managers #### NPM If you want to add the SDK via `npm` use the following to add library dependency: ``` bash npm install react-native-klarna-inapp-sdk --save ``` #### Yarn If you are using yarn, then use the following to add library dependency: ``` shell yarn add react-native-klarna-inapp-sdk ``` For installing native dependencies for iOS, go to your `ios` directory and run `pod install`. ### Android To ensure the Sign in flow initiated by the SDK can correctly redirect back to your application, you must configure a unique return URL (deep link) for your app and provide this URL string to the SDK. This value is required specifically for the Sign in flow initiated by the SDK. **Important:** This configuration is distinct from any other return URLs the SDK might require for handling redirects from external third-party applications. Ensure you are configuring the URL for the SDK's Sign in flow. Add this snippet to your manifest file in order to set your return URL value for the SDK’s activity. ``` markup ``` In version 2.6.11 and later, a new activity called \`**KlarnaRedirectReceiverActivity**\` has been introduced in the Android SDK. ## Implementing Sign in with Klarna ### 1. Set up Sign in with Klarna Before starting to work with the Sign In With Klarna, the Android and iOS parts of your React Native app need to be updated in order to provide the best experience and functionality to the users. Please read and follow the `before you start -> setting the return url` guide for [Android](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/mobile-integration/sign-in-with-klarna-android/#before-you-start) and `preparation` guide for [iOS](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/mobile-integration/sign-in-with-klarna-ios/#preparation-aswebauthenticationpresentationcontextproviding). ### 2. Create an instance You just need to import the `KlarnaSignInSDK` class from Klarna's React Native Mobile SDK as follows: ``` typescript import {KlarnaSignInSDK} from 'react-native-klarna-inapp-sdk'; ``` To create an instance of `KlarnaSignInSDK` you need to call the `KlarnaSignInSDK``.createInstance()`: ``` typescript KlarnaSignInSDK.createInstance({ environment: KlarnaEnvironment.Staging, region: KlarnaRegion.EU, returnUrl: 'myApp://signInWithKlarna', }) .then(klarnaSignInInstance => { console.log('KlarnaSignIn instance created: ', klarnaSignInInstance); klarnaSignIn = klarnaSignInInstance }) .catch(e => { console.error('KlarnaSignIn instance creation failed: ', e); }); ``` If an instance of `KlarnaSignInSDK` is initialized correctly, you will get a reference to it in the promise return value. If there is an error during initialization, it will be returned in the catch block of the promise. #### Parameters | NAME | TYPE | REQUIRED | DESCRIPTION | |----|----|--------|-----------| | `environment` | String | No | An enumeration that is used to configure the endpoints and other behaviours that the `KlarnaSignIn` will be operating with. The possible values are as follows. If not set, the default value will be `production` . * playground * production * staging | | `region` | String | No | An enumeration that defines the regional API endpoints to which the `KlarnaSignIn` flow will send/receive requests. The possible values are as follows. If not set, the default value will be `eu` . * eu * na * oc | | `returnUrl` | String | Yes | The URL you defined as your redirect URI for Sign in with Klarna integration in the preparation section. You can find more information about the URL in our [iOS](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/mobile-integration/sign-in-with-klarna-ios/#before-you-start-2-setting-the-return-url) getting started guide and [Android](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/mobile-integration/sign-in-with-klarna-android/#before-you-start-1-setting-the-return-url) before you start guide. | ### **3.Initiate the Sign In** To start the sign in flow, you need to call the `signIn()` function: ``` typescript klarnaSignIn.signIn(clientId, scope, market, locale, tokenizationId) ``` After calling the `signIn` function, the sign in flow will be presented to the user. When the user finishes the sign in flow, you would either receive a successful or an error result in the promise returned by the `signIn` function. #### Parameters | **PARAMETER** | **TYPE** | **REQUIRED** | **DESCRIPTION** | |----|----|----|----| | `clientId` | String | Yes | The UUID you get when creating your Klarna OAuth 2.0 app. | | `scope` | String | Yes | A space-separated list of [scopes](https://docs-portal-eu.staging.c2c.klarna.net/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/mobile-integration/sign-in-with-klarna-react-native/#scopes) you would like to request from the user. | | `market` | String | Yes | The market or the country where this integration is available, for example, `SE` for Sweden. | | `locale` | String | Yes | The language to present to the user, for example, `sv-SE` or `en-SE` for Sweden. | | `tokenizationId` | String | No | The ID to enable tokenization. | ##### Scopes The table below lists the available scopes and how they correspond to claims and permissions.  | Scope | Claims | Type | Can be toggled off | |----|----|----|----| | profile:name | given_name | string | No | | profile:name | family_name | string | No | | profile:email | email | string (Email) | No | | profile:email | email_verified | boolean | | | profile:phone | phone | string (E. 164) | No | | profile:phone | phone_verified | boolean | | | profile:date_of_birth | date_of_birth | string (ISO 8601) | Yes | | profile:billing_address | street_address | string | Yes | | profile:billing_address | street_address2 | string | | | profile:billing_address | postal_code | string | | | profile:billing_address | city | string | | | profile:billing_address | region | string | | | profile:billing_address | country | string (ISO 3166-1 alpha-2) | | | profile:shipping_address | street_address | string | Yes | | profile:shipping_address | street_address2 | string | | | profile:shipping_address | postal_code | string | | | profile:shipping_address | city | string | | | profile:shipping_address | region | string | | | profile:shipping_address | country | string (ISO 3166-1 alpha-2) | | | profile:national_id | national_id | string | Yes | | profile:country | country | string (ISO 3166-1 alpha-2) | Yes | | profile:locale | locale | string (ISO 3166) | Yes | | payment:consumer_present | trigger on-demand flow | N/A | N/A | | payment:consumer_not_present | trigger subscription flow | N/A | N/A | Remember to always add 'openid', 'offline_access' and 'payment:request:create' scopes to receive full functionality of Sign in with Klarna. The mock-ups below show how users will see required versus optional scopes when entering the Sign in with Klarna flow.    ![](e0d14625-c96b-4268-a3b0-dff196b42b93_Siwk_mock_up.jpeg) #### Handle results and errors There are two main action values to look for, **KlarnaSignInUserCancelled** triggered when the user cancelled the flow at any point and the **KlarnaSignInToken** event, received after the signIn process is completed. You can get the tokens from the `KlarnaProductEvent` params for **KlarnaSignInToken** event and send it to your backend. ``` typescript klarnaSignIn ?.signIn(clientId, scope, market, locale, tokenizationId) .then(r => { switch (r.action) { case 'KlarnaSignInUserCancelled': console.log('User cancelled sign in'); break; case 'KlarnaSignInToken': console.log('Token event received: ', r); // Access token const accessToken = r.params?.KlarnaSignInToken.access_token break; default: console.log('Other sign in event received: ', r) break; } }) .catch(e => { console.error('Sign in failed with error: ', e); }); ``` ##### **KlarnaProductEvent** When the `signIn` method resolves, a **KlarnaProductEvent** is returned as a result. This event type includes three properties, `action, params and sessionId`. | **NAME** | **TYPE** | **DESCRIPTION** | |----|----|----| | `action` | String | Represents the name of the event. | | `params` | String | Contains a payload that may or may not be returned, depending on the specific event. | | `sessionId` | String | An identifier that can be useful when contacting Klarna for support. | ### 4. Dispose the instance After the flow is complete and the token has been retrieved and you no longer need the `KlarnaSignInSDK` instance, you can call the `dispose()` method to release the resources used by the object. ``` typescript klarnaSignIn?.dispose(); ``` --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/conversion-boosters/sign-in-with-klarna.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/conversion-boosters/sign-in-with-klarna.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/conversion-boosters/sign-in-with-klarna.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/conversion-boosters/sign-in-with-klarna.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/conversion-boosters/sign-in-with-klarna.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/conversion-boosters/sign-in-with-klarna.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/conversion-boosters/sign-in-with-klarna.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/conversion-boosters/sign-in-with-klarna.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/conversion-boosters/sign-in-with-klarna.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/conversion-boosters/sign-in-with-klarna.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/conversion-boosters/sign-in-with-klarna.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/conversion-boosters/sign-in-with-klarna.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/conversion-boosters/sign-in-with-klarna.md # Sign in with Klarna on SAP Commerce Cloud ## The *Sign in with Klarna* feature is included in the **Klarna Add-on**, so no separate installation is necessary. However, a clean build of the package and an update of the database schema are required to generate new data models and data transfer objects (DTOs). ### Prerequisites Before proceeding, ensure the following: - You have the [**latest** **package**](https://github.com/klarna/SAP-Commerce-klarna-payments) updated in the `HYBRIS_HOME/bin/custom` and `HYBRIS_HOME/config` folders. - You have access to SAP Commerce Backoffice for configuration. - You have administrative rights to perform system updates and resets. ### Mandatory code changes #### Update the `master.tag` file 1. Open the file located at `\bin\modules\baseaccelerator\deprecated\yacceleratorstorefront\web\webroot\WEB-INF\tags\responsive\template\master.tag` 2. Paste the following code snippet directly below : ``` jsp ``` #### Update the `login.tag` file 1. Open the file located at `\bin\modules\base-accelerator\deprecated\yacceleratorstorefront\web\webroot\WEB-INF\tags\responsive\user\login.tag` 2. Insert the following code inside the segment, directly below the segment: ``` jsp

``` ### Building and updating the database 1. Navigate to the `HYBRIS_HOME/bin/platform` directory. 2. Perform a clean build by running the following command: `ant clean all` 3. Once the build completes successfully, start the server: `hybrisserver.bat` 4. Update the system via HAC: - Go to **hac\> platform\> update**. - Check the **Update running system** and **Localize types** options. - And select the following extensions: - Klarnapayment - Klarnapaymentaddon - Klarnapaymentbackoffice ### Backoffice reset 1. Log in to SAP Commerce Backoffice. 2. Press `F4` to open the advanced mode menu. 3. In the top-right dropdown menu, select **Reset All**. 4. After the reset completes, press `F4` again to return to normal Backoffice mode. ### Activation and configuration #### Create Sign in with Klarna configuration: 1. Search for *Sign in with Klarna* in Backoffice. 2. Click **Sign in with Klarna** config. 3. Select **Create New Item** (+ icon). 4. Fill in the following fields: - **Unique Identifier/Code** (Klarna client identifier from Klarna's merchant portal) - **Scope**: `openid`, `offline_access`, `profile_name`, `profile_email`, `profile_phone`, `profile_billing_address` - **Redirect URL** - **Placements** - **Theme** - **Button Shape** - **Button Alignment** #### Map Sign in with Klarna to common configuration: 1. Navigate to **Klarna → Klarna Common Configuration** in Backoffice. 2. Under the **General** tab, scroll to *Sign in with Klarna Configuration*. 3. Select the previously created configuration and click **Save**. ### Configuration fields | | | | |----|----|----| | **Attribute** | **Mandatory** | **Description** | | Code | Yes | Input any name/code. This will be the internal reference used to recognize and manage Sign in with Klarna configuration within SAP Commerce. | | Scope | `openid,` `offline_access, profile_name, profile_email, profile_phone, profile_billing_address,` `profile_country,` `payments_create_session,` `profile_national_id` | Select Scope to get the information of the user. Mandatory to select (openid , offline_access, profile_name, profile_email, profile_phone) | | Active | Yes | Check to activate Sign in with Klarna configuration; leave unchecked for it to remain inactive. | | Redirect URL | Yes | This is for redirection in case the storefront is accessed from mobile devices. | | Placements | Yes | Multi select option to show the button in Login Page and Checkout Login Page. | | Theme | No | Color theme of the Sign in with Klarna button: default/light/dark | | Button Shape | No | Shape of the Sign in with Klarna button: Default, Rect, pill | | Button Alignment | No | Button Logo Alignment: Left, Right, Center | ### How to test Sign in with Klarna 1. Open a new incognito browser window. 2. Navigate to the login page of a storefront. 3. Click **Continue with Klarna**. 4. Use the email and phone number provided in the [sample data](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data.md). ![Sign_in_with_Klarna_login_page_on_SAP_Commerce_Cloud.png](Sign_in_with_Klarna_login_page_on_SAP_Commerce_Cloud.png) *Sign_in_with_Klarna_login_page_on_SAP_Commerce_Cloud.png* ### Expected outcomes - If the account exists in Klarna and SAP Storefront, the user is logged in, and the accounts are merged automatically. - If the account exists in Klarna but not in SAP Storefront, a consent page appears. Upon consent, the account is created in the storefront. - If the account does not exist in Klarna, login fails, and the user can proceed with the normal login flow.
--- # Source: https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/use-cases/siwk-post-purchase-experience.md # Post-purchase experience ## How to create a user account after purchase. ## Introduction After a purchase is complete, many customers find it valuable to have a way to track their order and access their purchase history. For those who have checked out as guests, the order confirmation page provides a seamless opportunity to invite them to create an account using Sign in with Klarna. By implementing the SIWK button on the success page, you can offer customers a quick and secure way to set up an account after their purchase, enhancing their post-purchase experience and opening up new engagement opportunities. Creating an account provides customers with access to past and future purchases, personalized order updates, and exclusive promotions. For your business, it enables deeper customer relationships, higher retention rates, and more effective communication. Adding SIWK at this critical touchpoint can make a significant impact on customer loyalty and engagement. ![ Example of the post-purchase flow](ZzXIYa8jQArT03Oq_CreateAccountonMerchantPostPurchase.jpeg " Example of the post-purchase flow") #### Why enable account creation post-purchase? Enabling account creation on the order confirmation screen allows customers to: - **Track orders easily** – Once logged in, customers can monitor their purchases, delivery status, and history from a single account. - **Enjoy a personalized experience** – Customers can receive targeted promotions and order updates. - **Save time** – Returning customers won’t need to re-enter information in future transactions. For your business, this is a unique opportunity to convert guest customers into account holders, increasing the chance of future interactions and building a stronger, loyal customer base. #### Integration guidelines To integrate the **Sign in with Klarna** button on the order confirmation screen, follow these steps: 1. **Set up the SDK**: Start by following the general integration setup as outlined in the [Sign in with Klarna Web SDK documentation](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/web-sdk-integration/). This will guide you through installing and initializing the Web SDK on your site. 2. **Configure the success page**: Identify the order confirmation (or “thank you”) page on your website where customers land after completing a purchase. Embed the SIWK button in a visible, user-friendly location on this page, inviting customers to create an account. A sample prompt could be, "Create an account to view your order history and enjoy a more personalized experience.". 3. **Handle authentication**: Use Klarna’s SDK to authenticate users via the SIWK button. Once authenticated, check for an existing user account. If none exists, prompt them to complete the quick setup to create a new account tied to their recent purchase. 4. **Customize the user experience**: Provide a confirmation message once the account is created, such as "Your account has been set up! You can now track this and future orders in your account.". Consider redirecting users to their new account profile or order history page to immediately reinforce the benefits of having an account. --- # Source: https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/spain.md # Partner marketing legal guidelines - Spain For Klarna’s Spain specific Terms and Conditions please visit: [](https://www.klarna.com/es/legal/) **Keep it simple.** Don’t lose a customer because the payment instructions were too complicated, but do make it clear what you are offering. **Stand out for the right reason.** Highlight the payment option you offer, but be sure to be clear, fair and not misleading. **Be sensitive to the situation.** Consider what is going with your customers and in the wider market as a whole. Use this knowledge to decide how you promote and market Klarna in all your channels. One message does not fit all circumstances. **Don't encourage debt.** Do not encourage shoppers to spend outside of their means. Using phrases such as *‘strapped for cash?’*, *‘don’t wait until payday’* or *‘broke AF’* are unacceptable and irresponsible. You have an obligation to ensure your customers stay financially healthy. **Make sure your ads are socially responsible to consumers and society.** Offers or benefits should not be linked to credit marketing which are likely to make the credit offer attractive. ​*Klarna may review and monitor your advertising and marketing of Klarna's products and services, including through automated means, to ensure your marketing complies with applicable laws, rules, and regulations.* --- # Source: https://docs.klarna.com/payments/in-store-payments/integrate-klarna-in-store/other-ways-to-integrate/standalone-in-store-solution.md # Standalone in-store solution ## Start accepting Klarna payments in-store without the need for extra hardware. ## Klarna Point of Sale If you already have a Klarna merchant account, for example one linked to your online store, you can onboard yourself to our Point of Sale solution and start selling with Klarna in physical stores directly from the [Merchant portal](https://portal.klarna.com/seller). You can onboard yourself to Klarna Point of Sale if you've been using Klarna for your online store for at least 2 months and have fully captured at least 50 orders. ![Klarna Point of Sale is available in our Merchant portal.](Klarna_KPOS.jpg) *Klarna Point of Sale is available in our Merchant portal.* ## Market availability Klarna Point of Sale is available in the following countries: **Austria, Belgium, Canada, Czech Republic, Denmark, Finland, France, Germany, Greece, Ireland, Italy, Netherlands, Norway, Poland, Portugal, Spain, Sweden, Switzerland, United Kingdom, United States**. --- # Source: https://docs.klarna.com/payments/in-store-payments/additional-resources/static-qr-best-practices.md # Static QR best practices ## Get the most out of your static QR integration. ## Static QR code placement Here’s a handful of tips on how to make sure the printed QR code is always visible to your customers: - Once you’ve completed the setup, perform a test transaction. [Adjust the timeout](https://docs.klarna.com/payments/in-store-payments/additional-resources/static-qr-best-practices.md) and the length of the short code if necessary. - Place and keep the printed static QR code at the till, so it’s only visible to customers preparing to make a payment. ![Place and keep the printed static QR code at the till, so it’s only visible to customers preparing to make a payment.](c570f830-6bbb-49a5-a581-4f14f6cdac65_In-store_2023_09-06.jpeg) *Place and keep the printed static QR code at the till, so it’s only visible to customers preparing to make a payment.* - Make sure the QR code can’t be scanned by the customers in the queue or elsewhere in the store. - Make sure the static QR code is permanently attached to the till. It shouldn't be easily removable. - Make sure the static QR code is always facing customers, so they can easily locate it, scan it, and pay with Klarna. ![Don’t place the static QR code near product stands that are far away from the till.](812bb01e-0222-4069-b22a-bbe9ca9b96ef_In-store_2023_09-07.jpeg) *Don’t place the static QR code near product stands that are far away from the till.* - Don’t place the static QR code near product stands that are far away from the till. - Make sure the static QR code is examined daily to prevent any tampering or wear and tear. - Don’t forget to cancel the payment session if it’s no longer needed. This helps avoid confusing the customers --- # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-hpp/api-documentation/status-callbacks.md # Status Callbacks It is possible when integrating HPP to received status changes callbacks to a certain URL. This address that is unique to every session will be called by our systems whenever the status of the session is updated. This is really handy to create interaction whenever something happens and avoid to have a costly polling mechanism. It is advised to read our [guide on how to track the HPP Session status changes](https://docs.klarna.com/payments/other-products/hosted-payment-page/before-you-start/tracking-session-status/). {{#mermaid: sequenceDiagram autonumber participant A as Consumer participant B as Browser participant C as HPP participant D as Merchant Backend C -->> A: A link to the HPP is provided to the consumer by e-mail, SMS, QR code or
simply browser redirection B ->> C: Request url note over A,D: The consumer arrives to the HPP and the distribution of the link was successful,
the Merchant backend is notified to be able to act on it.
On integration with multiple actors, it may allow to tell the other actor (a clerk) that the consumer is filling the application. C -->>D: Notification IN_PROGRESS alt Successful authorization A ->>C: Presses pay button note over A,D: The consumer has a successful authorization from Klarna and the payment can be satisfied. The HPP session is considered as COMPLETED
but it is needed from the Merchant to place the order. C -->>D: Notification COMPLETED note over A,D: Depending on how the HPP session was created, the consumer will receive as a result a hosted confirmation page
or a redirection to your website using merchant_urls. C ->>B: Result else Declined authorization A ->>C: Presses pay button note over A,D: Although the consumer wants to pay with Klarna, its application may be declined, which is known as a Failure.
The HPP session is considered as FAILED, but the consumer can still try again until they cancel the HPP session
or the merchant integration does it. C -->>D: Notification FAILED note over A,D: Depending on how the HPP session was created, the consumer will receive as a result a hosted confirmation page
or a redirection to your website using merchant_urls. C ->>B: Result else Bank and error cases note over A,D: The consumer chooses to cancel the order or to go back to the checkout progress.
All cases can be interpreted the same way as there is just a notification that will send the new status of the HPP session.
Depending if it is a back button or cancellation request,
the consumer may or may not come back to the same HPP session. A ->>C: Presses back button or cancellation button C -->>D: Notification BACK or CANCELLED note over A,D: Depending on how the HPP session was created, the consumer will receive as a result a hosted confirmation page
or a redirection to your website using merchant_urls. C -->>B: Result else Timeout of the HPP session note over A,D: The consumer may not use the back button or cancel button and just leave the page, or choose another payment method using the previous
page feature of their browser. In these cases, the HPP system loses track of the consumer.
A timer is set for every HPP session and will turn the status to TIMEOUT. This timer will depend on how the HPP session was created. C -->>D: Notification TIMEOUT end }} ## Activating Callbacks When [creating the HPP Session](https://docs-portal-eu.production.c2c.klarna.net/hosted-payment-page/api-documentation/create-session)*HPP Session*, you need to pass an URL in the status_update field of the merchant_urls. This URL will be called by HPP each time the status of the *HPP Session* is updated on Consumers actions, it contains the new status of the *HPP Session* the same way it would be gotten by reading the *HPP Session* from the [read session endpoint of the API](https://docs.klarna.com/payments/other-products/hosted-payment-page/api-documentation/read-session/). ## Definition of callbacks calls | **Description** | **POST the Status of the HPP Session to the integrator** | |----|----| | **URL** | HPP will use merchant_urls.status_updatereceived in the [create session call](https://docs.klarna.com/payments/other-products/hosted-payment-page/api-documentation/create-session/) | | **Operation** | POST | | **Example** | curl -X POST \ --data “” | ### Body of the callback | **Field Key** | **Type** | **Description** | |----|----|----| | **event_id** | String | Identifier of the event, allowing the integrator to de-duplicate operations if needed. | | **session** | JSON | And object representing the session status when the event occurred. Content is exactly the same as one could get from the [read session endpoint](https://docs.klarna.com/payments/other-products/hosted-payment-page/api-documentation/read-session/). | ## Expected response and retry strategy The calls made to the status_update URL will be made by *HPP* without waiting for any response from your server. It is expected from the the URL to send back a 2xx status code response. In case no response is gotten in less than 3 seconds, there will be a retry after a few seconds. This mechanism will happen up to three times, with 4 calls being made for the same events. If of these calls are unanswered, the callback mechanism will end. ## Securing the callbacks The URL provided as status_update must be over HTTPS, but to be able to authenticate that the callback comes from Klarna, it is advised to generate a one time token that you will only use for this specific *HPP Session*. This lets you validate that the call made to you on an update of status is only made by us. ``` json { "merchant_urls": { "status_update": "https://example.com/statsCallbackEndpoint?hppSessionId={{session_id}}&secretToken=7d1cbc3b-b30c-4be2-a8c4-dc76482d7bf6" } } ``` The value passed here 7d1cbc3b-b30c-4be2-a8c4-dc76482d7bf6 could be something that is generated by the integrator for every new session. ## Happy flow examples These are the callbacks that an integration layer will get when an HPP Session is completed. ### Consumer arrives on HPP ``` json { "event_id": "270b2adc-35a4-4524-800a-a5d2b8a96a2c", "session": { "session_id": "35bde117-ce5f-774f-9bcb-ec514a0963ad", "status": "IN_PROGRESS", "updated_at": "2019-05-13T14:51:46.288Z", "expires_at": "2019-05-15T13:51:43.507Z" } } ``` ### Consumer completes Payment #### Klarna Payments To learn more about place_order_mode, read our [guide on how to integrate Klarna Payments with HPP](https://docs.klarna.com/payments/other-products/hosted-payment-page/before-you-start/accept-klarna-payments-using-hosted-payment-page/). Default value for place_order_mode ``` json { "event_id": "27ba32b0-644b-4b22-94a9-dac503bcae18", "session": { "session_id": "39a1c773-bafd-754d-af1f-b30c592f1267", "status": "COMPLETED", "authorization_token": "a1a8f727-2756-6058-bd3c-40069be0994b", "updated_at": "2019-05-13T14:54:04.675Z", "expires_at": "2019-05-15T13:51:43.507Z" } } ``` With place_order_mode as PLACE_ORDER or CAPTURE_ORDER ``` json { "event_id": "27ba32b0-644b-4b22-94a9-dac503bcae18", "session": { "session_id": "39a1c773-bafd-754d-af1f-b30c592f1267", "status": "COMPLETED", "order_id": "a1a8f727-2756-6058-bd3c-40069be0994b", "klarna_reference": "X438HG0Q", "updated_at": "2019-05-13T14:54:04.675Z", "expires_at": "2019-05-15T13:51:43.507Z" } } ``` --- # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-sdk/step-1-initiate-a-payment.md # Step 1: Initiate a payment ## This section of the guide walks you through initiating a payment and letting your customers pay with Klarna. When your customer wants to pay with Klarna, you have to open a payment session and share the shopping cart details in a `POST` request to the `{apiURL}/payments/v1/sessions` endpoint. In that request, you also specify if the payment is one-time or recurring. Once you start a payment session, it stays open for 48 hours or until you place an order. You can also send a separate `POST` request to cancel the session. ## Authentication Klarna payments API uses HTTP basic authentication. To authenticate, use your API credentials that consist of: - A username linked to your Klarna merchant ID (MID) - A password associated with your username If you're using an API platform that lets you store your credentials, you can add them in relevant fields. Otherwise, make sure to include the Base64-encoded username:password in the Authorization header field of each API request, as shown below. ``` json Authorization: Basic pwhcueUff0MmwLShJiBE9JHA== ``` ###### *A sample authorization request header with Base64-encoded credentials.* ## Common parameters To get a success response, include the following required parameters in your `POST {apiURL}/payments/v1/sessions` request. | Parameter | Description | |----|----| | `locale` | The language of information presented on the Klarna widget. Learn more about [using locale in API calls](https://docs.klarna.com/payments/web-payments/before-you-start/data-requirements/puchase-countries-currencies-locales/). | | `purchase_country` *required* | The country where the purchase is made. Learn more about [supported countries](https://docs.klarna.com/payments/web-payments/before-you-start/data-requirements/puchase-countries-currencies-locales/). | | `purchase_currency` *required* | The currency in which the customer is charged. Learn more about [supported currencies](https://docs.klarna.com/payments/web-payments/before-you-start/data-requirements/puchase-countries-currencies-locales/). | | `order_amount` *required* | The total price of the order, including tax and discounts. | | `order_lines` *required* | The details of order lines in the purchase. | | `intent` | The purpose of the payment session. | | `merchant_urls.authorization` | Get a callback once the customer has completed the flow and you can create an order. | We recommend you don't include customer details when initiating a payment session. Instead, use the [`authorize()`](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-1-initiate-a-payment/) call to share them with Klarna at a later stage of the checkout process when the customer clicks **Buy**. ## Payment scenarios and intent As [we already mentioned](https://docs.klarna.com/payments/web-payments/before-you-start/what-is-klarna-payments/), you can use Klarna payments in a variety of payment scenarios. Depending on the scenario, add the right value in the `intent` field of the request. For one-time payments, set `intent` to `buy`. For [Account linking](https://docs.klarna.com), set `intent` to `buy_and_link` if you want to link customer's Klarna account to their account in your system. For recurring payments: - Set `intent` to `tokenize` if you don't want to place an order at checkout. - Set `intent` to `buy_and_tokenize` if you want to place the first order at checkout. - Set `intent` to `buy_and_default_tokenize` if you want to place the first order at checkout and add an additional service at the same time. The intent you set for a session determines the steps you need to take when creating an order later in the process. ### One-time payment To open a one-time payment session, include all common parameters in the request body and set `intent` to `buy`. ``` json { "acquiring_channel": "ECOMMERCE", "intent": "buy", "purchase_country": "SE", "purchase_currency": "SEK", "locale": "en-SE", "order_amount": 9500, "order_tax_amount": 1900, "order_lines": [ { "type": "physical", "reference": "19-402", "name": "Battery Power Pack", "quantity": 1, "unit_price": 10000, "tax_rate": 2500, "total_amount": 9500, "total_discount_amount": 500, "total_tax_amount": 1900, "image_url": "https://www.exampleobjects.com/logo.png", "product_url": "https://www.estore.com/products/f2a8d7e34" } ], "merchant_urls": { "authorization": "https://example.com/authorization_callbacks" } } ``` ###### *A sample `POST` request to create a one-time payment session.* ### Recurring payment without payment at checkout To enable recurring payments without charging your customer at checkout, include the following in your request: - All common parameters - `intent` set to `tokenize` - The subscription details in the `subscription` object You can charge the customer later using a customer token created in the same Klarna payments session. ``` json { "acquiring_channel": "ECOMMERCE", "intent": "tokenize", "purchase_country": "SE", "purchase_currency": "SEK", "locale": "en-SE", "order_amount": 9999, "order_tax_amount": 2000, "order_lines": [ { "type": "digital", "subscription": { "name": "Premium Monthly {{1234834}}", "interval": "MONTH", "interval_count": 1 }, "reference": "19-402", "name": "Streaming Service Monthly - Free Trial", "quantity": 1, "unit_price": 9999, "tax_rate": 2500, "total_amount": 9999, "total_discount_amount": 0, "total_tax_amount": 2000 } ], "merchant_urls": { "authorization": "https://example.com/authorization_callbacks" } } ``` ###### *A sample `POST` request to enable recurring payments.* ### Recurring payment with payment at checkout To charge the customer at checkout and enable recurring payments at the same time, include the following in your request: - All common parameters - `intent` set to `buy_and_tokenize` - The subscription details in the `subscription` object ``` json { "acquiring_channel": "ECOMMERCE", "intent": "buy_and_tokenize", "purchase_country": "SE", "purchase_currency": "SEK", "locale": "en-SE", "order_amount": 9999, "order_tax_amount": 2000, "order_lines": [ { "type": "digital", "subscription": { "name": "Premium Monthly {{1234834}}", "interval": "MONTH", "interval_count": 1 }, "reference": "19-402", "name": "Streaming Service Monthly - Free Trial", "quantity": 1, "unit_price": 9999, "tax_rate": 2500, "total_amount": 9999, "total_discount_amount": 0, "total_tax_amount": 2000 } ], "merchant_urls": { "authorization": "https://example.com/authorization_callbacks" } } ``` ###### *A sample `POST` request to charge the customer at checkout and enable recurring payments.* ### Recurring payment with mixed payments at the checkout [Mixed payments](https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/mixed-payments/) allows you to charge the customer at the checkout for one item and enable future orders by tokenizing another payment method. - All common parameters - `intent` set to `buy_and_default_tokenize` - The subscription details in the `subscription` object You will be able to charge the customer later using a customer token. #### Success response In response to a create session call, you receive: - `session_id`, a payment session identifier you can use to \[ update the session\] and \[ retrieve session\] details - `client_token`, a token you pass to the [JavaScript SDK](https://docs.klarna.com/payments/web-payments/additional-resources/klarna-payments-sdk-reference/) or Mobile SDK([Android](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/android/native-view/#authorize-the-session-mobile-app), [iOS](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/ios/klarna-payments/#authorizing-the-session) and [React Native](https://docs.klarna.com/payments/mobile-payments/integrate-with-mobile-sdk/reactnative/native-view/#render-payment-view-mobile-app-initialize-the-session)) to launch the Klarna widget - `payment_method_categories`, an array that lists the grouped Klarna payment methods available for the session. We can respond with one or more categories depending on the market and account configuration. ``` json { "session_id": "068df369-13a7-4d47-a564-62f8408bb760", "client_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjAwMDAwMDAwMDAtMDAwMDAtMDAwMC0wMDAwMDAwMC0wMDAwIiwidXJsIjoiaHR0cHM6Ly9jcmVkaXQtZXUua2xhcm5hLmNvbSJ9.A_rHWMSXQN2NRNGYTREBTkGwYwtm-sulkSDMvlJL87M", "payment_method_categories": [ { "identifier": "klarna" "name" : "Pay with Klarna", "asset_urls" : { "descriptive" : "https://x.klarnacdn.net/payment-method/assets/badges/generic/klarna.svg", "standard" : "https://x.klarnacdn.net/payment-method/assets/badges/generic/klarna.svg" } } ] } ``` ###### *A sample success response to the create session call.* #### Error response If your request doesn't pass our validation, you'll receive an error response. ``` json { "correlation_id": "6a9b1cb1-73a3-4936-a030-481ba4bb203b", "error_code": "BAD_VALUE", "error_messages": [ "Bad value: order_lines" ] } ``` ###### *A sample error response caused by incorrect order line details.* ​Go to [Error Handling](https://docs.klarna.com/resources/developer-tools/error-handling/error-codes-and-messages-for-klarna-payments/) to learn more about common errors and troubleshooting suggestions. You can use the value in `correlation_id` to find entries related to the request under **Logs** in the Merchant portal. --- # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-sdk/step-2-checkout.md # Step 2: Checkout ## Learn how to set up the Javascript SDK to display Klarna's widget. During the checkout, your customers can see Klarna as a payment option, select it, and go ahead with the purchase. To enable these customer interactions, you need to perform two main actions: 1. [display the Klarna widget](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-2-checkout/#display-klarna) 2. [get authorization for the purchase](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-2-checkout/#get-authorization) The two actions take place on the client side. You have to set up Klarna's JavaScript SDK and make the `load()` call for displaying the widget and the `authorize()` call for getting the purchase authorization. ## Set up Klarna's JavaScript SDK To make the call for displaying the widget, first you need to add and initialize the SDK and then place a container in your page. ### 1. Add the SDK to your page Add the SDK by including the following script in the body section of your checkout page. ``` markup ``` ###### *Sample of the Klarna's JavaScript SDK in the checkout page.* You do not need to install the JavaScript SDK beforehand. It's enough to include the previous script in the HTML file of your checkout page. ### 2. Initialize the SDK Initialize the SDK by making an `init()` call and passing the `client_token` from the [Initiate a payment step](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-1-initiate-a-payment/). ``` javascript Klarna.Payments.init({ client_token: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIifQ.dtxWM6MIcgoeMgH87tGvsNDY6cH' }) ``` ###### *Sample of the call to initialize the SDK.* The `client_token` relies on the created session, which expires after 48 hours. The purchase might fail after this time. ### 3. Add a container to your page Add a container in the HTML file of your checkout page. This container specifies where to place the widget. ``` markup
``` ###### *Sample of the widget container.* ## Display Klarna At checkout, your customers can choose to pay with Klarna. Then, a pop-up window is opened where your customers log into their Klarna account and select their preferred Klarna payment method. You need to use our JavaScript SDK to display Klarna in your checkout. This interaction is possible through the load() call happening on the client side. The following information is applicable for both [scenarios](https://docs.klarna.com/payments/web-payments/before-you-start/what-is-klarna-payments/#payment-scenarios), one-time and recurring payments. ### Load() call At checkout, display Klarna as a payment option by using the `load()` call. Specify the following parameter: - `container`, the identifier of the container you [added to your checkout page](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-2-checkout/#set-up-klarnas-javascript-sdk-3-add-a-container-to-your-page) For more information about `load()` call parameters, refer to the [Klarna payments SDK reference](https://docs.klarna.com/payments/web-payments/additional-resources/klarna-payments-sdk-reference/#load-parameters). ``` javascript Klarna.Payments.load( { container: '#klarna-payments-container' }, {}, function (res) { console.debug(res); } ) ``` ###### *A sample `load()` call to display Klarna as a payment option.* #### User interaction during the call For a better user experience, call `load()` when loading your checkout. In this way, you ensure that the container of Klarna payments loads immediately in a hidden container, and it's ready to appear when needed. Don't forget to use the Klarna logo that you received in [Step 1: Initiate a payment](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-1-initiate-a-payment/) and add the payment method name. From the payload you received in Step 1, use: - `identifier` to dynamically load the payment option - `name` to display the correct and localized payment method title - `asset_urls` to contain the Klarna logo You can manage the name and Klarna descriptor when [adding the Klarna payments in your checkout](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-2-checkout/#display-klarna) and use the name and asset_urls returned in [Step 1: Initiate a payment.](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-1-initiate-a-payment/) ### Load Responses After processing the `load()` call, the callback function is executed. The JavaScript callback is an object containing the following parameters: - `show_form`, indicating if Klarna payments is available - `error,` containing details of potential error messages We know that you want to give customers a great checkout experience. For this reason, we created a functionality to alert your store when your customer cannot use any Klarna payment method. This alert is through the `show_form` boolean parameter, which is used as a response flag to the `load()` call. We recommend you listen to it all the time. There are two potential cases that you need to handle based on the response flag: - **Success response:** Your checkout offers Klarna payments. - **Error response:** Your checkout is not able to offer Klarna payments. #### Success response If the response flag is `show_form: true`, your checkout displays Klarna as a payment option for this purchase. This is the standard response. ``` json { show_form: true } ``` ###### *A sample success response to offer Klarna payments.* #### Error response If the response flag is show_form: false, your store is not able to offer Klarna as a payment option. This negative response results from the pre-assessment that Klarna executes for the purchase. ``` json { show_form: false } ``` To handle the negative response, you can set up one of the following visual arrangements in your checkout: - Hide the Klarna option from the checkout. - Grey out the Klarna option and disable clicking. - Keep the Klarna option and accept an error message. Klarna informs the customer that this option is not available. ## Get authorization When your customer selects Klarna to pay, you need to use our JavaScript SDK to get authorization for the purchase. In this step, you send all the necessary customer details for Klarna to assess and decide whether or not to accept this purchase. When the authorization is successful, you receive an authorization token as a response, useful for [Step 3: Create an order](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-3-create-an-order/). The authorization is possible through the `authorize()` call happening on the client side, however you should implement the [authorization callback](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-2-checkout/#get-authorization-authorization-callback) to received the authorization token is also on the server side and ensure that no authorization is missed. The following information is useful for both [scenarios](https://docs.klarna.com/payments/web-payments/before-you-start/what-is-klarna-payments/#payment-scenarios), one-time and recurring payments. ### Authorize() call Get authorization for the purchase by using the `authorize()` call. We recommend sending the following parameters in the data object of the authorize call: - `billing_address`, containing the customer's billing address. - `shipping_address`, containing the customer's shipping address. If you don't provide a shipping address, we copy the billing address and use it as the shipping address. If no billing or shipping address is provided, new Klarna customers have to manually enter their full billing address on the Klarna payment page. Providing the billing address in the `authorize()`call enables Klarna to prefill the signup form for new customers. We recommend to avoid any delays or asynchronous operations (for example, sending calls to your backend) between the user clicking the **Buy** button and you calling `authorize()`. Longer delays or asynchronous operations between the actual user interaction and the `authorize()` call cause the browser to block the Klarna pop-up from opening. To update the Klarna session, provide all necessary information when calling `authorize()`. If you need to update your backend session, we recommend doing so when the customer returns from Klarna's purchase flow. ``` javascript Klarna.Payments.authorize( {}, { billing_address: { given_name: "Alice", family_name: "Test", email: "customer@email.se", phone: "+46701740615", street_address: "Södra Blasieholmshamnen 2", postal_code: "11 148", city: "Stockholm", country: "SE" }, shipping_address: { given_name: "Alice", family_name: "Test", email: "customer@email.se", street_address: "Södra Blasieholmshamnen 2", postal_code: "11 148", city: "Stockholm", phone: "+46701740615", country: "SE" }, customer: { date_of_birth: "1941-03-21", }, }, function(res) { console.debug(res); } ) ``` ###### *A sample `authorize()` call.* In some cases, Klarna requires additional information about the customer and purchase. We recommend you send it in the `authorize()` call. For more information, see the [Extra merchant data section](https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/extra-merchant-data/). For GDPR (General Data Protection Regulation) reasons, you shouldn't send customer data before the `authorize()` call. Klarna uses all this information to make the risk assessment. To see what data you need per market and how to format it, check the [customer data requirements](https://docs.klarna.com/klarna-payments/in-depth-knowledge/customer-data-requirements/). #### User interaction during the call During the `authorize()` call and until you receive the callback, Klarna runs a purchase flow that includes a risk assessment. You need to visually indicate to your customer that an ongoing process is happening. For a better user experience, we suggest: - Avoiding another `authorize()` call (for example, disable the buy button) - Showing your customer that the order is in progress (for example, show a loading spinner) - Preventing your customer from changing the order or billing details (for example, lock the input fields on your page). ### Authorization callback Utilizing the server-side authorization callback is critical for maintaining a seamless transaction process. This method ensures that you can get the necessary `authorization_token` and `session_id` on the back-end, even when facing client-side communication problems. This capability is crucial for creating orders and enhancing the customer experience, even during front-end issues. It underscores the importance of the authorization callback in maintaining transaction continuity and ensuring a smooth process for consumers. ``` json { "authorization_token": "0eb73d2c-d55a-5358-9080-ddc3903e3941", "session_id": "e4b81ca2-0aae-4c16-bcb2-29a0a088a35b" } ``` ###### *A sample server-side callback request from Klarna.* For more details, see the [authorization callbacks](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/other-actions/authorization-callback/) documentation. ### Authorization responses There are three potential cases that you need to handle based on the response: - **Success response:** The purchase is approved. - **Fixable error response:** The customer needs to adjust and try again. - **Error response:** The purchase is not approved and you can't display Klarna as a payment option. #### Success response and authorization callback If the response is `approved: true`, Klarna has approved the authorization for this purchase and as a response you will received the response including: - `approved`, containing the authorization result. It's a boolean value that indicates approved or denied. - `show_form`, showing the availability of Klarna as a payment option. It's a boolean value that indicates displayed or hidden. - `authorization_token`, containing the token that allows you to place the order. This is only returned if it's an approved authorization. - `error`, contanining details of potential error messages. `authorization_token` allows you to [create an order](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-3-create-an-order/) for both scenarios, recurring and one-time payments. The token is valid for 60 minutes. #### Fixable error response If the response of the authorize is not successful with `show_form: true` and an `error` object containing `invalid_fields`, something fixable is wrong and the customer needs to take action. An error message is displayed asking the customer to make corrections before you re-authorize the purchase. The error message points out which fields are incorrect. It's also possible that the response is `approved: false`and `show_form: true`, but the callback doesn't include `error`. This means the customer has terminated a required interaction in the widget, such as authentication or sign-up flows. In this case, you should keep Klarna visible so that the customer can make another purchase attempt. ``` json { approved: false, show_form: true, error: { invalid_fields: [ billing_address.street_address billing_address.city billing_address.given_name billing_address.postal_code billing_address.family_name billing_address.email ] } } ``` ###### *A sample fixable error response.* We suggest you use the error message in the `authorize()` response to highlight a specific input field on your page. #### Error response If the response is `show_form: false`, your store is not able to offer Klarna as a payment option. You should disable Klarna from your checkout, and your customer might select another payment method. This negative response results from the pre-assessment that Klarna executes for the purchase. ``` json { approved: false, show_form: false } ``` ###### *A sample error response.*
--- # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-sdk/step-3-create-an-order.md # Step 3: Create an order The process of creating an order is different for one-time and recurring payments. - For one-time payments, \[ get the authorization token ready and send a request to Klarna API\] - For recurring payments, \[ generate a customer token prior to placing the order\] ## One-time payment order ### Create an order To create an order for a one-time payment, send a `POST` request to the `{apiUrl}/payments/v1/authorizations/{authorizationToken}/order` endpoint and include `authorization_token` in the path. For example, if the `authorization_token` is `b4bd3423-24e3`, send your request to the `{apiUrl}/payments/v1/authorizations/b4bd3423-24e3/order` endpoint. ``` json { "purchase_country": "US", "purchase_currency": "USD", "billing_address": { "given_name": "John", "family_name": "Doe", "email": "john@doe.com", "title": "Mr", "street_address": "Lombard St 10", "street_address2": "Apt 214", "postal_code": "90210", "city": "Beverly Hills", "region": "CA", "phone": "333444555", "country": "US" }, "shipping_address": { "given_name": "John", "family_name": "Doe", "email": "john@doe.com", "title": "Mr", "street_address": "Lombard St 10", "street_address2": "Apt 214", "postal_code": "90210", "city": "Beverly Hills", "region": "CA", "phone": "333444555", "country": "US" }, "order_amount": 10, "order_tax_amount": 0, "order_lines": [ { "type": "physical", "reference": "19-402-USA", "name": "Battery Power Pack", "quantity": 1, "unit_price": 10, "tax_rate": 0, "total_amount": 10, "total_discount_amount": 0, "total_tax_amount": 0, "product_url": "https://www.estore.com/products/f2a8d7e34", "image_url": "https://www.exampleobjects.com/logo.png" } ], "merchant_urls": { "confirmation": "https://example.com/confirmation", "notification": "https://example.com/pending" }, "merchant_reference1": "45aa52f387871e3a210645d4", } ``` ###### *A`POST` request to create an order for a one-time payment.* #### Success response When you receive a success response, the customer gets charged and the Klarna payments session is closed. As part of the response, you receive the following details: - `order_id`, an order identifier that you can later use to capture or refund the order using the [Order management API](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-3-create-an-order.md) - `redirect_url`, a URL to which you redirect the customer. This isn't included in the response received if you didn't include the URL when [initiating a payment](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-1-initiate-a-payment.md) - `fraud_status`, an indicator of whether the transaction is suspected to be legitimate or [fraudulent](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-3-create-an-order.md) - `authorized_payment_method`, the payment method selected by your customer for this purchase ``` json { "order_id": "3eaeb557-5e30-47f8-b840-b8d987f5945d", "redirect_url": "https://payments.klarna.com/redirect/...", "fraud_status": "ACCEPTED", "authorized_payment_method": "invoice" } ``` ###### *A success response to the order creation request for a one-time payment.* Send the customer browser to `redirect_url` provided in the response. Klarna places a cookie in the browser and redirects the customer back to the confirmation URL you provided when creating the session. This makes the checkout faster the next time the customer chooses to pay with Klarna. #### Error response If your request doesn't pass our validation, you'll receive an error response. The most common reasons why creating an order fails are: - placing the order more than 60 minutes after authorization - modifying purchase details after authorization without updating the payment session ``` json { "correlation_id": "6a9b1cb1-73a3-4936-a030-481ba4bb203b", "error_code": "ERROR_CODE", "error_messages": [ "ERROR_MESSAGE" ] } ``` ###### *An error response to the order creation request for a one-time payment.* Here are examples of common errors with troubleshooting suggestions. You can use the value in `correlation_id` to find entries related to the request under **Logs** in the Merchant portal. | Error code | Error message | Description | |----|----|----| | `NOT_FOUND` | `Invalid authorization token` | The authorization token has expired because the order was placed more than 60 minutes after authorization. To fix the error, [request a new `authorization_token`](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-3-create-an-order.md) and use it to place the order. | | `BAD_VALUE` | `Not matching fields: [billing_address.postal_code]` | The data shared with Klarna in a previous step (`create_session`, `load()`, or `authorize()`) have been modified causing the validation to fail. | | `BAD_VALUE` | `Not matching fields: [Incorrect number of items in the cart. Expected: 2, Actual: 3]` | The order lines or the cart were updated after the `authorize()` call. Please ensure that the cart is kept as-is or send a new authorization request. | | `REJECTED` | `Rejected` | This is an edge case reason, but can be triggered in case the merchant is configured with being allowed to update the cart. This could be updated from the authorize to the place order in such a way that a new authorize is triggered. In this case this is rejected. | ### Special considerations for one-time payments #### Pending fraud status If your agreement with Klarna allows it, we can flag a suspicious transaction for an additional review instead of accepting it immediately. In such cases, `fraud_status` in the response will be `PENDING` instead of `ACCEPTED`. [Read more about pending orders](https://docs.klarna.com/payments/after-payments/order-management/more-actions/pending-orders.md). ``` json { "order_id": "3eaeb557-5e30-47f8-b840-b8d987f5945d", "redirect_url": "https://payments.klarna.com/redirect/...", "fraud_status": "PENDING", "authorized_payment_method":"invoice" } ``` ###### *A response to a create order request includes `fraud_status: PENDING`if a transaction is subject to additional fraud review.* #### Automatic capture of created orders If your Klarna contract allows automatic capture of the order once an order is created, set `auto_capture` to `true` when creating the order. ## Recurring payment order For recurring payments, you have to create a customer token before placing the order. This token identifies your customer and the payment method selected for the purchase. It also lets you charge the customer later, ad-hoc or at regular intervals. For payments where you charge the customer at checkout and enable a recurring charge (`intent` set to `buy_and_tokenize`), you have to send two separate create order requests: 1. In the first request, use `authorization_token` to charge the customer at checkout. 2. In the second request, use `customer_token` for future recurring payments. If you're not charging the customer at checkout (`intent` set to `tokenize`), you need to send only the second request to place the order and charge the customer at a later date. If you're creating an order related to a subscription, include the `subscription` object in your create order request. Learn more about [sharing subscription details with Klarna](https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/subscriptions-and-on-demand.md). Learn more about [customer tokens](https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/subscriptions-and-on-demand.md). ### Create a customer token Request a customer token by sending a `POST` request to the `{apiUrl}/payments/v1/authorizations/{authorizationToken}/customer-token` endpoint. Include the authorization token from the authorize() call as the `authorizationToken` path parameter. ``` json { "purchase_country": "US", "locale": "us-US", "billing_address" : { "given_name": "Doe", "family_name": "John", "email": "john@doe.com", "phone": "333444555", "street_address": "Lombard St 10", "postal_code": "90210", "city": "Beverly Hills", "region" : "CA", "country": "US" }, "description": "MySaaS subscription", "intended_use": "subscription", "merchant_urls": { "confirmation": "https://example.com/confirmation" } } ``` ###### *A POST request to create a customer token for a customer located in the US.* #### Success response In response to the customer token request, Klarna sends: - `token_id`, a customer token identifier that you later use to create an order - `redirect_url`, a URL to which the customer is redirected after the order is placed ``` json { "billing_address": { "city": "Beverly Hills", "country": "US", "email": "john@doe.com", "family_name": "Doe", "given_name": "John", "phone": "333444555", "postal_code": "90210", "region": "CA", "street_address": "Lombard St 10", "street_address2": "Apt 214", "title": "Mr" }, "customer": { "date_of_birth": "01.01.1979", "gender": "M", "title": "Mr", }, "payment_method_reference": "0b1d9815-165e-42e2-8867-35bc03789e00", "redirect_url": "https://credit.klarna.com/v1/sessions/0b1d9815-165e-42e2-8867-35bc03789e00/redirect", "token_id": "0b1d9815-165e-42e2-8867-35bc03789e00" } ``` ###### *A success response contains a customer token (`token_id`).* #### Error response If Klarna can't create a customer token based on the data you sent, you'll receive an error response. ``` json { "correlation_id": "6a9b1cb1-73a3-4936-a030-481ba4bb203b", "error_code": "ERROR_CODE", "error_messages": [ "ERROR_MESSAGE" ] } ``` ###### *An error response to a create a customer token request.* Here are examples of common errors with troubleshooting suggestions. You can use the value in `correlation_id` to find entries related to the request under **Logs** in the Merchant portal. | Error code | Error message | Description | |----|----|----| | `NOT_FOUND` | `Invalid authorization token` | The authorization token has expired. Make sure to place within 60 minutes of authorization or re-authorize the purchase. | | `BAD_VALUE` | `Bad value: purchase_country` | The billing address country is different from that of the country specified for this session. | | `BAD_REQUEST` | `X is not valid for creating customer tokens in Y` | The selected payment method can't be tokenized in the specified country. | | `INVALID_OPERATION` | `Not allowed to create customer tokens for intent buy.` | You can only create a token when the intent of the session is set to `tokenize` or `buy_and_tokenize`. \[ Learn more about intent\]. | ### Create an order with an authorization token with intent: buy_and_tokenize This section only applies to payment sessions where `intent: buy_and_tokenize`. For payments with `intent: tokenize`, \[ create an order with a customer token\]. To charge the customer at checkout, send a `POST` request to the `{apiUrl}/payments/v1/authorizations/{authorizationToken}/order` endpoint. Include the authorization token as a path parameter. For example, if the `authorization_token` is `b4bd3423-24e3`, send your request to the `{apiUrl}/payments/v1/authorizations/b4bd3423-24e3/order` endpoint. Include subscription details in the `subscription` object. These should match the details you previously shared with Klarna when initiating the payment session. ``` json { "purchase_country": "US", "purchase_currency": "USD", "billing_address": { "given_name": "John", "family_name": "Doe", "email": "john@doe.com", "title": "Mr", "street_address": "Lombard St 10", "street_address2": "Apt 214", "postal_code": "90210", "city": "Beverly Hills", "region": "CA", "phone": "333444555", "country": "US" }, "shipping_address": { "given_name": "John", "family_name": "Doe", "email": "john@doe.com", "title": "Mr", "street_address": "Lombard St 10", "street_address2": "Apt 214", "postal_code": "90210", "city": "Beverly Hills", "region": "CA", "phone": "333444555", "country": "US" }, "order_amount": 10, "order_tax_amount": 0, "order_lines": [ { "type": "physical", "reference": "19-402-USA", "name": "Battery Power Pack", "quantity": 1, "unit_price": 10, "tax_rate": 0, "total_amount": 10, "total_discount_amount": 0, "total_tax_amount": 0, "product_url": "https://www.estore.com/products/f2a8d7e34", "image_url": "https://www.exampleobjects.com/logo.png", "subscription": { "name": "string", "interval": "MONTH", "interval_count": 1 } } ], "merchant_urls": { "confirmation": "https://example.com/confirmation", "notification": "https://example.com/pending" }, "merchant_reference1": "45aa52f387871e3a210645d4", } ``` ###### *A create order request for a subscription where a customer is charged once a month.* #### Success response In response to a create order call, you receive: - `order_id`, an order identifier that you can later use to capture or refund the order using the \[ Order management API\] - `redirect_url`, a URL to which you redirect the customer. This isn't included in the response received if you didn't include the URL when \[ initiating a payment\] - `fraud_status`, an indicator of whether the transaction is suspected to be fraudulent - `authorized_payment_method`, the payment method selected by your customer for this purchase ``` json { "order_id": "3eaeb557-5e30-47f8-b840-b8d987f5945d", "redirect_url": "https://payments.klarna.com/redirect/...", "fraud_status": "ACCEPTED", "authorized_payment_method": "invoice" } ``` A success response to a place order request created with an authorization token. #### Error response If your request doesn't pass our validation, you'll receive an error response. The most common reasons why creating an order fails are: - placing the order more than 60 minutes after authorization - modifying purchase details after authorization without updating the payment session ``` json { "correlation_id": "6a9b1cb1-73a3-4936-a030-481ba4bb203b", "error_code": "ERROR_CODE", "error_messages": [ "ERROR_MESSAGE" ] } ``` ###### *An error response to the order creation request for a recurring payment based on `authorization_token`.* Here are examples of common errors with troubleshooting suggestions. You can use the value in `correlation_id` to find entries related to the request under **Logs** in the Merchant portal. | Error code | Error message | Description | |----|----|----| | `NOT_FOUND` | `Invalid authorization token` | The authorization token has expired because the order was placed more than 60 minutes after authorization. To fix the error, \[ request a new authorization_token\] and use it to place the order. | | `BAD_VALUE` | `Not matching fields: [billing_address.postal_code]` | The data shared with Klarna in a previous step (`create_session`, `load`, or `authorize`) have been modified causing the validation to fail. | | `BAD_VALUE` | `Not matching fields: [Incorrect number of items in the cart. Expected: 2, Actual: 3]` | The order lines or the cart were updated after the `authorize` call. Please ensure that the cart is kept as-is or send a new `authorize` request. | | `REJECTED` | `Rejected` | This is an edge case reason, but can be triggered in case the merchant is configured with being allowed to update the cart. This could be updated from the authorize to the place order in such a way that a new authorize is triggered. In this case this is rejected. | ### Create an order with a customer token with intent: tokenize When creating an order with a customer token, include `Klarna-Idempotency-Key` in the request header. Send a `POST` request to the `{apiUrl}/customer-token/v1/tokens/{customerToken}/order` endpoint and include the customer token as a path parameter. For example, if the `token_id` is `0b1d9815-165e-42e2-8867-35bc03789e00,` send your request to the `{apiUrl}/customer-token/v1/tokens/0b1d9815-165e-42e2-8867-35bc03789e00/order` endpoint. Make sure to also include subscription details in the `subscription` object. These should match the details you previously shared with Klarna when initiating the payment session. ``` json { "merchant_reference1": "45aa52f387871e3a210645d4", "merchant_data": "optional string", "locale": "de-DE", "auto_capture": true, "purchase_currency": "EUR", "order_amount": 999, "order_tax_amount": 0, "order_lines": [{ "type": "digital", "subscription": { "name": " Premium Monthly {{1234834}}", "interval": "MONTH", "interval_count": 1 } "reference": "19-402", "name": "Streaming Service Monthly - Free Trial", "quantity": 1, "unit_price": 999, "tax_rate": 0, "total_amount": 999, "total_discount_amount": 0, "total_tax_amount": 0, }] } ``` #### Success response In response to a create order call, you receive: - `order_id`, an order identifier that you can later use to capture or refund the order using the \[ Order management API\] - `fraud_status`, an indicator of whether the transaction is suspected to be fraudulent ``` json { "order_id": "a89ec121-1276-419d-882a-c343d58fd1bc", "fraud_status": "ACCEPTED" } ``` ###### *A success response to a place order request created with a customer token.* #### Error response If your request doesn't pass our validation, you'll receive an error response. ``` json { "error_code" : "ERROR_CODE", "error_messages" : ["Array of error messages"], "correlation_id" : "Unique id for this request used for troubleshooting." } ``` An error response to creation an order request based on a customer token. Here are examples of common errors with troubleshooting suggestions. You can use the value in `correlation_id` to find entries related to the request under **Logs** in the Merchant portal. | Error code | HTTP status code | Description | |----|----|----| | `TOKEN_NOT_FOUND` | `404` | The customer token wasn't found. Make sure that `customerToken` in the path matches the token. | | `TOKEN_SUSPENDED` | `403` | The customer token has been suspended by Klarna. | | `TOKEN_CANCELED` | `403` | The customer token exists, but isn't linked to your merchant ID. Try again with another customer token. | | `UNAVAILABLE_PAYMENT_METHOD` | `403` | The payment method can't be used for orders in the specified currency. | | `PAYMENT_METHOD_FAILED` | `403` | Purchase for payment method failed. If a credit payment method was used, this is most likely due to the customer being rejected. Try resending your request. | | `BAD_REQUEST` | `400` | | | `SERVICE_UNAVAILABLE` | `503` | A temporary internal Klarna error occurred. Try again later. | --- # Source: https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/styling-on-site-messaging-with-css.md # Customize placements with CSS ## This guide provides instructions on how to style the On-site messaging placements that appear on your pages through CSS to align them with the look and feel of your page. We don't offer support for custom styling the informational modal that appears after a customer clicks a click-to-action button. As this area is dedicated to informing customers about the financial services provided by Klarna, we want to maintain Klarna's own branding. On-site messaging renders its content within a shadow DOM to prevent the styles from being accidentally applied to the pages that host the placements. This ensures that the styles on the host pages don't interfere with the content of the on-site messaging. ![ On-site messaging rendered inside a shadow DOM.](aea119c2-110f-4525-a8ec-5d7b14861801_Screenshot+2022-12-07+at+17.03.12.jpeg) *On-site messaging rendered inside a shadow DOM.* ## Prerequisites - To add the CSS styling, you need access to the source code of your website. - We recommend adding an `id` to the `klarna-placement` element to make it easier to target the elements for styling. This will allow you to customize the appearance of the placements without affecting the rest of the page. - You're responsible for ensuring that styling the on-site messaging with CSS doesn't compromise the accessibility of your website. For example, you need to verify that the contrast between the message and the background is sufficient for people with low vision to read the message. You can use [Chrome DevTools](https://developer.chrome.com/docs/devtools/accessibility/contrast/) to help detect any accessibility issues. When styling the messaging, don't hide any parts of the message provided by Klarna as this may result in compliance issues. The text of the placements should have sufficient contrast with the background, and Klarna's logo can't be hidden. If you don't comply with these rules, we reserve the right to stop your integration. ## Part API To enable styling of the placements with CSS from outside the shadow DOM, we use the \[::part ::part API\] to expose certain elements of the placements that can be styled. Only elements of the placement that have the part attribute can be targeted with CSS for styling purposes. This allows you to customize the appearance of the placements without interfering with the content within the shadow DOM. If you've already styled the placements using the Merchant portal, we recommend resetting those styles if you plan to use CSS. The `::part` API CSS styling has a higher specificity than the styles applied through the Merchant portal, so any styles applied with the `::part` API will overwrite the styles applied through the Merchant portal. This ensures that your CSS styles will take precedence and will be applied as intended. ### Limitations of Part API The Part API has some limitations you have to keep in mind when using the Part API to style the placements. - You can't style an element that doesn't have a `::part` attribute. - You can't target elements that are nested within an element that has the `::part` attribute. For example, the following CSS selector won't work: ``` css klarna-placement::part(osm-container) p { ... } ``` - You can't query the elements that have parts of JavaScript. For example, the following code won't work: ``` css querySelector('::part(osm-cta)') ``` ### Part pseudo-elements Here's the list of exposed `::part` pseudo-elements: | Pseudo-element | Description | Placement types | |--------------|-----------|---------------| | `::part(osm-container)` | The wrapping element of the placements is the container that surrounds the placement. You can style it with the `::part(osm-container)` selector. | * credit-promotion-auto-size * credit-promotion-badge * top-strip-promotion-auto-size * top-strip-promotion-badge * info-page * footer | | `::part(osm-message)` | The main text of a placement is the primary message that is displayed within the placement. You can style it with the `::part(osm-message)` selector. | * credit-promotion-auto-size * credit-promotion-badge * top-strip-promotion-auto-size * top-strip-promotion-badge | | `::part(osm-legal)` | The legal text that appears under the main message in some markets is an important piece of information that must be clearly visible and readable to the customers. You can style it with the `::part(osm-legal)` selector. It's essential that you don't hide or obscure this text in any way, as it's required for compliance reasons. | * credit-promotion-auto-size * credit-promotion-badge * top-strip-promotion-auto-size * top-strip-promotion-badge | | `::part(osm-cta)` | The button element that triggers the opening of the informational model is the element that the customer clicks on to view additional information about the product or service being offered. You can style it with the `::part(osm-cta)` selector. | * credit-promotion-auto-size * credit-promotion-badge * top-strip-promotion-auto-size * top-strip-promotion-badge | | `::part(osm-badge)` | The .svg badge elements inside the placements. You can style them with the `::part(osm-badge)` selector. | * credit-promotion-badge * top-strip-promotion-badge * footer | | `::part(osm-deal-badge)` | The .svg deals badge elements inside the placements. Only visible when there's an active deals campaign. You can style them with the `::part(osm-deal-badge)` selector. | * credit-promotion-badge * top-strip-promotion-badge | | `::part(osm-link)` | Link elements with the tag are the elements on the page that use the tag to create a hyperlink to another location on the web. You can style them with the `::part(osm-link)` selector. | * info-page | | `::part(osm-logo)` | The Klarna logo appearing next to the main message. You can style it with the `::part(osm-logo)` selector. | | ## Examples Don't use CSS to hide Klarna's logo or badge in the placements. We reserve the right to turn off your integration if it abuses this rule as hiding Klarna brand elements goes against maintaining our branding integrity and visibility. ### top-strip-promotion-auto-size The following example shows how you can use CSS to style the `top-strip-promotion-auto-size` placement to match the look and feel of your website. The modified elements are: the background of the placement, the color of the message, and the click-to-action button. ``` html ``` HTML code for a top-strip-promotion-auto-size placment with an id. Adding the id to the source code makes it easier to target the placement. ``` css #my-top-strip::part(osm-container) { background-color: #FAEAB1; } #my-top-strip::part(osm-message), #my-top-strip::part(osm-cta) { font-size: 15px; } #my-top-strip::part(osm-logo) { font-style: italic; } ``` Example of styling of a top-strip-promotion-auto-size placement. ![ A top-strip-promotion-auto-size placement with custom styling applied.](f8dc7e7d-2dfb-4e5b-b727-eeeb0f40250a_Screenshot+2023-01-16+at+3.10.21+PM.jpeg) *A top-strip-promotion-auto-size placement with custom styling applied.* ### top-strip-promotion-badge The following example shows how you can use CSS to style the `top-strip-promotion-badge` placement. The modified elements are: the `font-family` of the text to use an externally loaded font, for example, a Google font, and the size of the badge. ``` html ``` HTML code for a top-strip-promotion-badge placment with an id. Adding the id to the source code makes it easier to target the placement. ``` css @import url('https://fonts.googleapis.com/css2?family=Lobster&display=swap'); #my-top-strip-badge::part(osm-message), #my-top-strip-badge::part(osm-cta) { font-family: 'Lobster', cursive; } #my-top-strip-badge::part(osm-badge) { transform: scale(1.1) } ``` Example of styling of a top-strip-promotion-badge placement. ![ A top-strip-promotion-badge with custom styling applied.](bd4a0a1d-efe2-4cc9-a94b-7783bc64cf63_Screenshot+2022-12-07+at+17.22.17.jpeg) *A top-strip-promotion-badge with custom styling applied.* ### credit-promotion-badge The following example shows how you can use CSS to style the credit-promotion-badge placement. The modified elements are: the container's border, the color of the message, the size of the badge, and the click-to-action button which is made bold. ``` markdown ``` HTML code for a credit-promotion-badge placment with an id. Adding the id to the source code makes it easier to target the placement. ``` css #my-credit-promotion::part(osm-container){ border-color: firebrick; border-style: dashed; border-width: 1px; background-color: #453C67; } #my-credit-promotion::part(osm-message), #my-credit-promotion::part(osm-cta) { color: #46C2CB; } #my-credit-promotion::part(osm-badge){ width: 70px; } ``` Example of styling of a credit-promotion-badge placement. ![ A credit-promotion-badge placement with custom styling applied. ](2c6a27b5-8b89-44a0-8b4a-e868f920fe06_Screenshot+2022-12-07+at+17.32.32.jpeg) *A credit-promotion-badge placement with custom styling applied.* ### credit-promotion-auto-size Here's an example of how you can style the credit-promotion-auto-size placement. ``` html ``` HTML code for a credit-promotion-auto-size placment with an id. Adding the id to the source code makes it easier to target the placement. ``` css #my-credit-promotion-auto-size::part(osm-container){ background-color: #000000; } #my-credit-promotion-auto-size::part(osm-message), #my-credit-promotion-auto-size::part(osm-cta) { color: #F49D1A; font-weight: bold; } #my-credit-promotion-auto-size::part(osm-logo) { color: #FFFFFF; font-style: italic; } ``` Example of styling of a credit-promotion-auto-size placement. ![ A credit-promotion-auto-size with custom styling applied.](39e6ba01-c87f-41ed-b5cd-8ba0e3802207_Screenshot+2023-01-16+at+1.32.16+PM.jpeg) *A credit-promotion-auto-size with custom styling applied.* ### footer-promotion-auto-size Here's how to style a footer-promotion-auto-size placement. ``` html ``` HTML code for a footer-promotion-auto-size placment with an id. Adding the id to the source code makes it easier to target the placement. ``` css #my-footer::part(osm-container) { background-color: #FAEAB1; } #my-footer::part(osm-badge) { transform: scale(1.1); } ``` Example of styling of a footer-promotion-auto-size placement. ![ A footer-promotion-auto-size placement with custom styling applied.](808dcfe2-227b-4f91-9181-e45258971850_Screenshot+2022-12-08+at+06.04.52.jpeg) *A footer-promotion-auto-size placement with custom styling applied.* ### info-page Here's an example of styling an info-page placement. The modified elements are: the font-family of content and headings of the info-page. ``` html ``` HTML code for an info-page placment with an id. Adding the id to the source code makes it easier to target the placement. ``` css @import url('https://fonts.googleapis.com/css2?family=Lobster&family=Montserrat:ital,wght@1,100&display=swap'); #my-info-page::part(osm-container){ font-family: 'Montserrat', sans-serif; } #my-info-page::part(osm-heading) { font-family: 'Lobster', cursive; } ``` Example of styling of a footer-promotion-auto-size placement. ![ An info-page placement with custom styling applied.](00c34065-5887-4ebd-98c8-f962fca3606f_Screenshot+2022-12-08+at+06.13.16.jpeg) *An info-page placement with custom styling applied.* ## More scenarios The following examples demonstrate various scenarios that you may encounter when styling the placements. ### Aligning Klarna badge left or right on the placement. Following is an example on how you can align Klarna's badge left or right on the placement: ``` css /* Left align of the badge */ #my-top-strip-badge-left::part(osm-container) { flex-direction: row; } #my-top-strip-badge-left::part(osm-message) { margin-left: 14px; margin-right: 0px; } /* Right align of the badge */ #my-top-strip-badge-right::part(osm-container) { flex-direction: row-reverse; } #my-top-strip-badge-right::part(osm-message) { margin-left: 0px; margin-right: 14px; } ``` ![klarna docs image](9f45d2c1-c503-46ec-a2e9-c43987273f2c_Screenshot+2022-12-15+at+12.32.35.jpeg)image ### Styling the hover state. If you want to style the hover state of links or click-to-action buttons to match the look and feel of your website, you can use pseudo-classes as you would normally do for any link. ``` css #my-top-strip::part(osm-cta):hover { color: #ffb3c7; } ``` Example of styling the hover state using the `:hover` pseudo-class. ![ Example of styling the hover state.](2e610ebd-4a76-43a5-aba1-dc344ff02ea0_hover_example.gif) *Example of styling the hover state.* ### Styling more than one placement on a page. If you have multiple placements of the same type on a single page, such as multiple `credit-promotion-auto-size` placements on a product listing page, you can use classes instead of IDs to target all of the placements at once. For example: ``` html ``` Example with the use of classes instead of ids. ``` css .my-credit-promotion::part(osm-container){ background-color: #E8F3D6; } ``` ![ Multiple placements on one page styled using classes.](dd2a0412-94ee-4ece-a686-e20d8be0acb0_Screenshot+2022-12-08+at+06.36.25.jpeg) *Multiple placements on one page styled using classes.* ### Styling the same placement differently. If you want to use the same placement type in different areas of your website, for example, on the checkout page and on the product page, but style it differently in each, use a different id or class for each `klarna-placement` element to target the element and apply the desired styles to each. ``` html ``` ``` css #checkout-placement::part(osm-message) { color: #fff; } #checkout-placement::part(osm-cta) { color: #fff; background: #007bff; } #product-placement::part(osm-message) { color: #333; } #product-placement::part(osm-cta) { color: #333; background: #007bff; } ``` ### Styling placements for different viewports. You can style the messaging differently based on the viewport size of your website, for example, to render a smaller font size on mobile and bigger on desktop. ``` css /* Mobile styles */ @media (max-width: 480px) { #my-top-strip::part(osm-message) { font-size: 12px; } } /* Desktop styles */ @media (min-width: 481px) { #my-top-strip::part(osm-message) { font-size: 16px; } } ``` Styling a placement differently based on the viewport size. --- # Source: https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/use-cases/subscriptions-and-on-demand.md # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/tokenized-payments/subscriptions-and-on-demand.md # Source: https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/use-cases/subscriptions-and-on-demand.md # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/tokenized-payments/subscriptions-and-on-demand.md # Source: https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/use-cases/subscriptions-and-on-demand.md # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/tokenized-payments/subscriptions-and-on-demand.md # Source: https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/use-cases/subscriptions-and-on-demand.md # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/tokenized-payments/subscriptions-and-on-demand.md # Source: https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/use-cases/subscriptions-and-on-demand.md # Subscriptions and on-demand ## How to combine login and tokenized payments ## Introduction Sign in with Klarna goes beyond the typical social login functionality of signing in or signing up. It's designed to enhance user experiences across various touchpoints, particularly in shopping, but its versatility makes it ideal for a wide range of applications. Whether you're creating seamless onboarding paths for on-demand mobility services, food delivery apps, or subscription-based platforms, Sign in with Klarna offers a tailored solution. As businesses increasingly adopt tokenized payments to enhance security and streamline user experiences, we've developed a flow that seamlessly integrates account creation and payment setup. With Sign in with Klarna, consumers can sign up and set up payments in a single, effortless step—without any redirects or additional work on your end, apart from enabling this best-in-class flow. ## Tokenized payment use cases - Subscriptions: allows customers to sign up for a subscription using Klarna as their payment method. Once complete, the payment preferences are tokenized and automatically used for renewals by the merchant using the token to create orders. Shoppers can manage their preferences at any time in the Klarna App. - On-demand: allows customers to add Klarna as a payment method in a digital wallet for one-click purchases of on-demand services. Shoppers can update their payment preferences at any time in the Klarna App. Both use cases are facilitated by the "customer token"[\#Representation of payment data tied to a specific customer and merchant.](https://docs-portal-eu.staging.c2c.klarna.net#representation-of-payment-data-tied-to-a-specific-customer-and-merchant). Learn more about customer tokens [here](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/use-cases/subscriptions-and-on-demand/). ![ Example of on-demand flow.](ZsiIjkaF0TcGJW4g_SIWKTokenizedPayments.jpeg " Example of on-demand flow.") The tokenized payment flow is supported in the Klarna Mobile SDK for: - **iOS:** Version 2.6.23 and later - **Android:** Version 2.6.21 and later ## How to integrate ### 1. Initialize the SDK and the Identity product and render Sign in with Klarna button. Make sure to request the correct scope for your use case: | Use case | Scope | |--------------|--------------------------------| | On-demand | `payment:customer_present` | | Subscription | `payment:customer_not_present` | #### Web SDK ``` javascript const siwkButton = klarna.Identity.button({ scope: "profile:name profile:email payment:customer_present", redirectUri: "http://localhost:3000/callback", }); ``` Web SDK #### Mobile SDK **KlarnaSignInButton** initializer has new argument of tokenizationDelegate to received the **KlarnaSignInTokenizationDelegate** instance. Pass the **KlarnaSignInTokenizationCallback** instance into the **KlarnaSignInButton** constructor. Mobile SDK ### iOS ``` swift let signInButton = KlarnaSignInButton(clientId: clientID, scope: scope, market: market, locale: locale, presentationContext: self, theme: klarnaTheme, environment: env, region: reg, returnUrl: URL(string: "https://sneakers.com")!, eventHandler: self, tokenizationDelegate: self) ``` ### Android ``` kotlin //Create an instance of KlarnaSignInButton and pass the callback val button = KlarnaSignInButton(... tokenizationCallback = yourSignInTokenizationCallbackInstance) ``` ### 2. Handle the tokenization event #### Web SDK Handle the `tokenizationTrigger` event by making a call to the Klarna Payments API through your backend to create a [new payment session.](https://docs.klarna.com/api/payments/#operation/createCreditSession) ``` javascript siwkButton.on("tokenizationTrigger", async (callback) => { const response = await fetch("https://merchant-backend.com/payment", { method: "POST", }); callback(response.session_id) }); ``` Web SDK #### Mobile SDK The **KlarnaSignInButton** now has a new protocol called **KlarnaSignInTokenizationDelegate** that needs to be implemented. The delegate implementation must provide the tokenization ID to the completion handler in order to continue the flow. The **KlarnaSignInButton** now has a new callback called **KlarnaSignInTokenizationCallback** that needs to be implemented. The callback implementation must provide the tokenization ID to the completion handler in order to continue the flow. ### iOS ``` swift @available(iOS 13.0, *) extension AnyKlarnaSignInTokenizationDelegateImpl: KlarnaSignInTokenizationDelegate { func onTokenization(_ klarnaComponent: KlarnaComponent, completionHandler: @escaping (String) -> Void) { let tokenizationId = ... // your implementation to get the tokenizationId here completionHandler(tokenizationId) } } ``` ### Android ``` kotlin class YourSignInTokenizationCallback : KlarnaSignInTokenizationCallback { override fun onTokenization(klarnaComponent: KlarnaComponent, completionHandler: (String) -> Unit) { val tokenizationId = ... // your implementation to get the tokenizationId here completionHandler(tokenizationId) } } ``` When creating the payment [session](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-1-initiate-a-payment/), remember to: - Add the `intent` as `tokenize` to trigger the tokenization flow. - Set up the authorization webhook in the `merchant_urls` object. - Set `order_amount` and `order_lines` amount value to 0. ### On-demand ``` bash curl --request POST \ --url https://api.klarna.com/payments/v1/sessions \ --header 'Authorization: Basic token' \ --header 'Content-Type: application/json' \ --data '{ "purchase_currency": "EUR", "order_amount": 0, "purchase_country": "DE", "order_lines": [ { "unit_price": 0, "quantity": 1, "total_amount": 0, "name": "Adding Klarna as a payment method" } ], "intent": "tokenize", "merchant_urls": { "authorization": "https://merchant-backend.com/authorization-webhook" }, "attachment": { "body": { // EMD }, "content_type": "application/vnd.klarna.internal.emd-v2+json" } }' ``` ### Subscription ``` bash curl --request POST \ --url https://api.klarna.com/payments/v1/sessions \ --header 'Authorization: Basic token' \ --header 'Content-Type: application/json' \ --data '{ "purchase_currency": "EUR", "order_amount": 0, "purchase_country": "DE", "order_lines": [ { "unit_price": 0, "quantity": 1, "total_amount": 0, "name": "Adding Klarna as a payment method", "subscription": { "name": "Coffee", "interval": "MONTH", "interval_count": 12 } } ], "intent": "buy_and_tokenize", "merchant_urls": { "authorization": "https://merchant-backend.com/authorization-webhook" } }' ``` When offering on-demand services with Klarna, you must include the customer_tokens [EMD package](https://www.google.com/url?q=https://docs.klarna.com/payments/web-payments/additional-resources/use-cases/extra-merchant-data/&sa=D&source=docs&ust=1724416392286272&usg=AOvVaw2uhLnjEl6jET0pzMfx8d6W), to enable Klarna to perform accurate underwriting and fraud checks when the customer adds Klarna as a payment option for future on-demand payments. After the customer consents to share their data, Klarna will automatically create an HPP session connected to the payment `session_id` provided in the response of the `create_session`. ### 3. Handle signin event You can read the tokens from the `signin` event response, the `id_token` will contain requested customer data. The [refresh_token](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/additional-resources/other-operations/#refresh-token)`refresh_token` can be used to fetch access token, allowing you to either retrieve customer data or log in customers during the purchase flow at a later time. ### Web SDK ``` javascript siwkButton.on("signin", async (signinResponse) => { "user_account_linking": { "user_account_linking_refresh_token": string; "user_account_linking_id_token": string; } }); ``` ### Mobile SDK - iOS ``` swift @available(iOS 13.0, *) extension SignInViewController: KlarnaEventHandler { func klarnaComponent(_ klarnaComponent: KlarnaComponent, dispatchedEvent event: KlarnaProductEvent) { if event.action == .klarnaSignInToken { // Authorization went through let token = event.params["klarnaToken"] } } } ``` ### Mobile SDK - Android ``` kotlin val eventHandler = object : KlarnaEventHandler { override fun onEvent(klarnaComponent: KlarnaComponent, event: KlarnaProductEvent) { when(event.action) { KlarnaSignInEvent.SIGN_IN_TOKEN -> { // User is authorized. You can read the results // in event.params attribute by casting it to the // KlarnaSignInToken model. val token = event.params[KlarnaSignInEvent.ParamKey.KlarnaSignInToken] as? KlarnaSignInToken val accessToken = token?.accessToken ... } } } } ``` ### 4. Handle payment request state webhook You should receive the `authorization_token` in a webhook to the URL that you provided in the create session call. Make sure to generate a `customer_token` using the `authorization_token` following [our documentation](https://docs.klarna.com/api/payments/#operation/purchaseToken). After that, customer_token can be charged. --- # Source: https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/sweden.md # Partner marketing legal guidelines - Sweden For Klarna’s Sweden specific Terms and Conditions please visit: **Keep it simple**. Don’t lose a customer because the payment instructions were too complicated, but do make it clear what you are offering. **Stand out for the right reason**. Highlight the payment option you offer, but be sure to be clear, fair and not misleading. **Be sensitive to the situation**. Consider what is going with your customers and in the wider market as a whole. Use this knowledge to decide how you promote and market Klarna in all your channels. One message does not fit all circumstances. **Don't encourage debt**. Do not encourage shoppers to spend outside of their means. Using phrases such as *‘strapped for cash?’*, *‘don’t wait until payday’* or *‘broke AF’* are unacceptable and irresponsible. You have an obligation to ensure your customers stay financially healthy. **Make sure your ads are socially responsible to consumers and society**. Offers or benefits should not be linked to credit marketing which are likely to make the credit offer attractive. ​*Klarna may review and monitor your advertising and marketing of Klarna's products and services, including through automated means, to ensure your marketing complies with applicable laws, rules, and regulations.* --- # Source: https://docs.klarna.com/payments/web-payments/additional-resources/error-handling-and-validations/tax-handling.md # Tax handling ## When using Klarna payments, it's important that you include correct tax details for each order. ## Why do we care? When you include tax details in each order, your customers get the right sense of the total order amount. Klarna payments is equipped with a validation mechanism to ensure the tax calculations are correct. Below you can find in-depth descriptions of how this validation is done, to ensure your own validation is aligned with Klarna’s. ## Tax handling best practices Customer expectations and tax legislations are different in Europe, Australia, and the US. Thus, we recommend different approaches to tax handling in each market. ### Transmitting tax in the EU or Australia If you are using Klarna in any European market or in Australia we recommend that: - You transmit `tax_rate` and `tax_amount` for each order line. - The calculation of tax amounts at the order line level and the order level is within the allowed deviation, as described below. - You use the `order_tax_amount` field to sum all `total_tax_amount` values at the order line level. ``` json { "order_amount": 62400, "order_tax_amount": 10400, "order_lines": [ { "type": "physical", "reference": "19-402", "name": "Battery Power Pack", "image_url": "https://www.exampleobjects.com/logo.png", "product_url": "https://www.estore.com/products/f2a8d7e34", "quantity": 1, "tax_rate": 2000, "total_amount": 59500, "total_tax_amount": 9917, "unit_price": 59500, "type": "physical" }, { "quantity": 1, "tax_rate": 2000, "name": "Shipping Fee", "total_amount": 2900, "total_tax_amount": 483, "unit_price": 2900, "type": "shipping_fee" } ] } ``` An example of sharing tax details with Klarna in the EU or Australia. ### Transmitting tax in the US If you are using Klarna in the US we recommend that the tax amount is transmitted as an additional order line. - Different tax types should be reflected in separate order lines. - The `name` field value for a tax order line `name` should be `"Tax"` or `"Sales Tax"`. - `order_tax_amount` is the `total_amount` of the `sales_tax` order line. - `order_amount` is the sum of the `total_amount` from each order line, plus the `order_tax_amount`. - The `tax_rate` field isn't present in any order lines. ``` json { "purchase_country": "US", "purchase_currency": "USD", "locale": "en-US", "order_amount": 21000, "order_tax_amount": 1000, "order_lines": [ { "type": "physical", "reference": "19-402", "name": "Battery Power Pack", "image_url": "https://www.exampleobjects.com/logo.png", "product_url": "https://www.estore.com/products/f2a8d7e34", "quantity": 1, "unit_price": 20000, "total_amount": 20000 }, { "type": "sales_tax", "name": "Tax", "quantity": 1, "unit_price": 1000, "total_amount": 1000 } ] } ``` US sample create session call with tax. ## Tax validation logic There are two ways to handle taxes in Klarna payments: - The global way of making tax a part of every single item and summarizing taxes at the order level. - The US standard of having tax as a separate item. The global way validates taxes at the order and item level. At the order level, the calculated total amount including tax must be within error tolerance value ±Items Quantity. sum(items total tax amount) - sum(items) \<= total tax amount \<= ( sum(items) total tax amount sum(items)) At item level, the value of the calculated tax rate must be within error tolerance ±1. All item’s validation must be valid to create an order: (calculated tax rate - 1) \<= tax rate \<= (calculated tax rate + 1) where: calculated tax rate = 100 \* total tax amount / (total amount - total tax amount) ## Tax validation examples ### Example 1 An order with 2 items is accepted. Tax validation is done at the order level and at the item level. #### Validation at the order level (9917 + 483) - 2 \<= 10400 \<= (9917 + 483) + 2 10400 - 2 \<= 10400 \<= 10400 + 2 #### Validation at the item level Item 1 Calculated tax rate = (100 \* 99.2) / (595 - 99.2) Calculated tax rate = 20 2000 - 1 \<= 2000 \<= 2000 + 1 Item 2 Calculated tax rate = (100 \* 4.8) / (29 - 4.8) Calculated tax rate = 20 2000 - 1 \<= 2000 \<= 2000 + 1 ``` json { "order_amount": 62400, "order_tax_amount": 10400, "order_lines": [ { "quantity": 1, "reference": "19-402", "name": "Battery Power Pack", "image_url": "https://www.exampleobjects.com/logo.png", "product_url": "https://www.estore.com/products/f2a8d7e34", "tax_rate": 2000, "total_amount": 59500, "total_tax_amount": 9917, "unit_price": 59500, "type": "physical" }, { "quantity": 1, "tax_rate": 2000, "name": "Shipping Fee", "total_amount": 2900, "total_tax_amount": 483, "unit_price": 2900, "type": "shipping_fee" } ] } ``` A sample order with 2 items accepted. ### Example 2 An order with 2 items passes the order-level validation but is rejected at the item level. #### Validation at the order level (accepted) (11900 + 580) - 2 \<= 12.480 \<= (11900 + 580) + 2 12480 - 2 \<= 12.480 \<= 12480 + 2 #### Validation at the item level (rejected) Calculated tax rate = (119 \* 100) / (714 - 119) Calculated tax rate = 20 2000 - 1 \<= 2500 \<= 2000 + 1 ``` json { "order_amount": 62400, "order_tax_amount": 12480, "order_lines": [ { "quantity": 1, "reference": "19-402", "name": "Battery Power Pack", "image_url": "https://www.exampleobjects.com/logo.png", "product_url": "https://www.estore.com/products/f2a8d7e34", "tax_rate": 2500, "total_amount": 59500, "total_tax_amount": 11900, "unit_price": 59500, "type": "physical" }, { "quantity": 1, "tax_rate": 2500, "name": "Shipping Fee", "total_amount": 2900, "total_tax_amount": 580, "unit_price": 2900, "type": "shipping_fee" } ] } ``` Order with 2 items rejected at the item level. ### Failed validation If an order fails validation, you'll get an error response with the incorrect field or value. The sales tax might change between the time when an order is created to when it's shipped. For example, an order is placed on September 28 but doesn’t get shipped until October 1. Meanwhile, a new sales tax comes into effect on October 1. 1. Create an order with the currently valid tax rate. 2. If the tax rate is different at the time of shipment, update the order. Most retailers don’t charge a higher tax, but rather side with the customer and only charge what’s quoted when the customer placed the order. If required by law, they charge a reduced amount if the tax is lower at the time of shipment. 1. Klarna runs a new risk check when you update the order. If this check fails, you can't capture the increased tax amount. 2. If Klarna accepts the update, you can capture the increased tax amount. --- # Source: https://docs.klarna.com/resources/legal-and-compliance/payment-solutions-guidelines/technical-requirements-for-card-transactions.md # Technical requirements for card transactions ## Follow technical requirements and terms for card network/third-party provider rules when using Klarna's Services and Third Party Payment Option Providers. Prevent fraud/unauthorized sales, process refunds via original method, and allow audits. ​In respect of Klarna’s checkout solutions (**Shopping Solutions**) for which Klarna has partnered with third-party operators of payment networks (**Third Party Payment Option Providers**), a customer using the Shopping Solutions may choose to use its regular debit or credit card to (i) pay directly in the checkout, or (ii) settle the debt to Klarna at a later stage. You, who operate the webstore, agree to and authorize such Third Party Payment Option Providers to store, use, share and release cardholder data, provided or generated pursuant to this your cooperation agreement with Klarna to any person (i) for the purpose of processing the transaction; (ii) as required by applicable rules of Third Party Payment Option Providers or by applicable law; (iii) in aggregated (anonymous and generalized) format to facilitate analysis and comparisons; (iv) to investigate, prevent and/or detect fraud or crime; or (v) to mitigate information security risk, sector risk or credit risk. Klarna undertakes at all times to be Payment Card Industry Data Security Standard (**PCI DSS**) validated. You, who operate the webstore, undertake at all times to be compliant with the rules of PCI DSS applicable from time to time. As long as you use the Shopping Solutions in a compliant way, Klarna will be responsible for the security of cardholder data that Klarna possesses or otherwise stores, processes, or transmits when providing the Shopping Solutions. **You acknowledge and agree that by using Klarna’s shopping solutions, these terms will apply. ** ## Third Party Payment Option Provider Terms These terms apply to Shopping Solutions including a payment option offering the Customer to pay directly by card provided  via Third Party Payment Option Providers. A shopper may choose a payment option within the Shopping Solutions that is provided via a Third Party Payment Option Provider (i) to pay directly in the checkout, or (ii) to settle the debt to Klarna at a later stage. These terms apply to Third Party Payment Option Providers’ payment options which are part of the Shopping Solutions and directly integrated by Klarna. Such payment options are below referred to as **Third Party Payment Options**. A list of the acquirers Klarna Bank AB (publ) co-operates with from time to time can be found [here](https://cdn.klarna.com/1.0/shared/content/legal/terms/0/xx_xx/acquirers), whereas the acquirers Klarna Inc. co-operates with from time to time are listed [here](https://cdn.klarna.com/1.0/shared/content/legal/terms/0/en_us/acquirers)(jointly referred to as the (**Acquirer List**).  With regard to Third Party Payment Options, you as a merchant (below referred to as **you**or **Merchant**) acknowledge and accept that the following applies:  1. Unless specifically agreed otherwise, you will not be charged any additional fees for the provision of Third Party Payment Options. 2. You are aware of and accept that Klarna may at any time change or remove the Third Party Payment Options available to you, e.g. due to a request of a Third Party Payment Option Provider. Klarna may also change the acquirer used to process your transactions from time to time and understand that Klarna may amend the Acquirer List from time to time. You accept that a Third Party Payment Option Provider may terminate the Agreement in relation to a specific Third Party Payment Option provided by a specific acquirer in relation to you at any time. 3. Third Party Payment Option Providers may issue rules and/or instructions which you have to comply with (**Third Party Payment Option Provider Rules or Instructions**). Links to such Third Party Payment Option Provider Rules or Instructions can be found in the Acquirer List. Klarna will inform you of any other Third Party Payment Option Provider Rules or Instructions issued from time to time. Klarna is responsible for the fulfilment of the Third Party Payment Option Provider Rules or Instructions insofar as the respective aspect of the Third Party Payment Option is handled solely by Klarna.  4. If you store Customer card account numbers, expiration dates, and other personal Customer data in a database, you must adhere to any Third Party Payment Option Providers’ rules and guidelines on securing such data, any  applicable law as well as the standards of the Payment Card Industry Security Standards Council (or its replacement body or successor) in force from time to time and applicable to Merchant’s business (currently set out at: [https://www.pcisecuritystandards.org/](https://www.pcisecuritystandards.org/)). You acknowledge and agree that you will bear all costs for ensuring compliance hereunder and are solely responsible for any fines, costs or charges arising from non-compliance or where data held by you is used for fraudulent or unauthorized purposes. Klarna may ask for evidence that you use the Shopping Solutions in a compliant way and/or that you are PCI DSS compliant (e.g. in the form of the applicable self-assessment form prescribed by the PCI council). 5. You have to ensure that the following information is displayed in the Store: (i) from the landing page and onwards: the logotype of the Third Party Payment Option Provider; (ii) during the order process on the pages leading up to and including the payment page: the registered name and any trading name  used in connection with the transaction, the address of your permanent establishment and a complete description of the goods or services offered; (iii) before the order is completed: a reference to the privacy policy and the terms and conditions you (including information on length of any trial period, delivery policy, return, cancellation policies and split shipment of goods) and, if any, information on legal and export restrictions; (iv) an active customer service email address and a customer service telephone number. Klarna may instruct you on how such information is to be displayed. 6. In addition to the circumstances listed in the *Duty to inform* section of the GTCs, you shall immediately inform Klarna about changes to your (i) address; (ii) country of permanent residence; (iii) registered office; (iv) trading name under which the business is conducted; (v) Store website address. 7. Your use of Third Party Payment Option Providers’ trademarks and logos, whether registered or not, does not entail any transfer of ownership, rights or copyrights. After termination of the Agreement, the removal of a certain Third Party Payment Option, or at the request of a Third Party Payment Option Provider, you undertake to immediately remove all logotypes and similar of any such Third Party Payment Option Provider and Third Party Payment Option. This does not apply if the Third Party Payment Option Provider entitles you to continue the use of its logotypes.  8. In relation to marketing activities which include a reference to the Third Party Payment Option or a Third Party Payment Option Provider, you shall coordinate such activities with Klarna in advance. Such marketing activities require Klarna’s prior approval. You will not indicate that a Third Party Payment Option Provider endorses or states eligibility for any goods or services sold by you. Further, you undertake that you will not do anything which could be disreputable or otherwise capable of damaging the reputation or goodwill of any Third Party Payment Option Provider. 9. When using and marketing the Third Party Payment Options, you will observe and abide by any applicable laws and regulations and other provisions and guidelines issued by any responsible public authority. You are not entitled to use the Shopping Solutions in relation to transactions which are deemed illegal or fraudulent under any applicable law, or which violate Klarna’s from time to time applicable ethical instructions(https://cdn.klarna.com/1.0/shared/content/policy/ethic/en_gb/merchant.pdf, the **Ethical Instructions**) or any Third Party Payment Option Provider Rules or Instructions.  10. You may not use the Shopping Solutions to submit transactions (i) where you are  not acting as seller of the respective goods or services, or (ii) transactions which you should reasonably know were not authorized by the Customer. Any refund or cancellation of a transaction is to be done via Klarna and via the payment option used by the Customer in connection with the original transaction. 11. Klarna may share information regarding you with Third Party Payment Option Providers if this is necessary for the provision of the Shopping Solutions e.g. for due diligence or operational processes of the Third Party Payment Option Providers. Klarna may create specific accounts for you at Third Party Payment Option Providers, and Merchant agrees to enter into additional payment processing terms and conditions with the applicable Third Party Payment Option Provider when required to do so by the applicable card network rules. Any actions Klarna undertakes on behalf of you based on this provided empowerment may not create additional obligations or costs for you.  12. In addition to the authorization provided in the *Data Protection and PCI Compliance* section of the GTCs, you hereby agree to and authorize the Third Party Payment Option Provider to store, use, share and release data, provided or generated pursuant to this Agreement to any person (i) to assess financial and insurance risks arising in connection with this Agreement; (ii) to recover debt (to the extent such is not recoverable from Klarna) or in relation to you's insolvency. 13. Klarna, any Third Party Payment Option Provider or their designees may conduct onsite audits for compliance purposes. You shall provide the information requested and necessary to complete such audit. Furthermore, you shall allow the Third Party Payment Option Providers such access to your premises and facilities, systems, data, information and material as may be necessary and shall permit them to take and retain copies of all such records to ascertain that you are  performing your  obligations hereunder and shall provide all reasonable cooperation in relation to such audit. The Third Party Payment Option Provider may opt to utilize a third party to conduct such audit subject to (i) the Third Party Payment Option Provider issuing its appointment and authorization of such third party in writing and furnishing you with a copy thereof, and; (ii) such third party entering into a confidentiality agreement.  14. Notwithstanding any limitation of liability set out in the Agreement, you shall fully indemnify and hold Klarna harmless from any fines, penalties or any other claims imposed by a Third Party Payment Option Provider due to (i) circumstances which form a breach of this Agreement, especially but not limited to the failure to comply with this appendix and the Third Party Payment Option Provider Rules or Instructions; or (ii) a significantly elevated chargeback level compared to average market levels.  15. You shall fully indemnify and hold each relevant acquirer harmless from and against all losses, liabilities, damages and expenses such acquirer suffers or incurs arising as a result of, or in connection with: (i) any breach of any obligation or any misrepresentation by you; (ii) any breach by you of any Third Party Payment Option Provider Rules or Instructions; (iii)  your company ’s or your employees’ negligence or wilful misconduct; (iv) transactions processed by a Third Party Payment Option Provider or otherwise arising from your provision of goods and services to Customers (including without limitation any refunds or chargebacks); (v) any assessments or fines or arising out of any third party claims against a Third Party Payment Option Provider as a result of your  acts or omissions; (vi) any security breach, compromise or theft of transaction data held by you or on your behalf; (vii) your failure to comply with its PCI DSS obligations; or (ix) any allegation of fraud in connection with you business. Notwithstanding the above, Klarna shall indemnify you from such claims imposed by a Third Party Payment Option Provider under (iv) where Klarna bears the credit and fraud risk for the Claim under the terms of this Agreement.  16. You and Klarna acknowledge and agree that the Third Party Payment Option Providers are entitled to directly enforce the terms of this appendix against you. --- # Source: https://docs.klarna.com/resources/legal-and-compliance/more-solutions-guidelines/terms-and-conditions.md # Boost Features - Terms of Service ## Review Klarna’s Terms of Service for Boost Features to understand usage conditions, data protection obligations, and compliance requirements tied to Sign in with Klarna, On-site Messaging, and Klarna Express Checkout. ## Terms and conditions By integrating and using Klarna’s  conversion-boosting features, including, but not limited to, *Sign in With Klarna (SIWK*), *On-site Messaging (OSM)* and *Klarna Express Checkout (KEC)* you as a Merchant or Partner (referred to as you/Merchant below) acknowledge and accept the below terms (Agreement). **1. Features** *Sign in With Klarna (SIWK*) is a social log-in feature offered by Klarna Bank AB (publ), or as the case may be, by any of its affiliated companies (jointly “Klarna”) enabling individuals/customers to sign up and log in to Merchants’ hosted environment. By integrating and using SIWK, you enter into this Agreement with the Klarna entity providing SIWK in the markets where you have integrated the service. *On-site Messaging (OSM)* is a marketing and customer-communication  / conversion-booster feature offered by Klarna Bank AB (publ), or, as the case may be, by any of its affiliated companies (jointly “Klarna”), enabling Merchants to display Klarna’s payment options and related marketing messages on their hosted environment. By integrating and using OSM, you enter into this Agreement with the Klarna entity providing OSM in the markets where you have integrated the service. Further, you are required to ensure that any OSM placement or messaging complies with any legal requirements as well as Klarna’s applicable advertising and promotional guidelines, including applicable labelling and disclosure requirements. *Klarna Express Checkout (KEC)* is a checkout solution offered by Klarna Bank AB (publ), or as the case may be, by any of its affiliated companies (jointly “Klarna”), enabling customers to complete their purchase using Klarna’s payment options and stored information in a simplified, pre-filled checkout flow. By integrating and using KEC, you enter into this Agreement with the Klarna entity providing KEC in the markets where you have integrated the service. SIWK, OSM and KEC may be jointly referred to as *Boost Features*. **2. Suspension of Boost Features/Termination** Klarna has the right to suspend the provision of the Boost Features or terminate the Agreement at any time if Klarna determines that the provision of the Boost Features, the Boost Features itself, or the Merchant’s activities, could be deemed illegal, unethical or in any other way non-compliant with any applicable rule or regulation, or result in negative publicity for Klarna. **3. Transfers and subcontractors** Klarna may assign or transfer, in whole or in part, this Agreement to any Klarna group company. Klarna is entitled to engage subcontractors in order to provide the Boost Features, provided that Klarna takes full responsibility for such subcontractors. **4. IP rights and know-how** Klarna retains all ownership and intellectual property rights to the Boost Features as well as anything else developed by Klarna and provided to or accessed by the Merchant. The Merchant warrants that it will not directly or indirectly reverse engineer, decompile, disassemble or otherwise attempt to derive source code or other trade secrets from the Boost Features. After termination of this  Agreement or the removal of the Boost Features(in whole or in part), the Merchant undertakes to immediately remove all respective logotypes and similar of Klarna. Klarna may refer  to the Merchant as a user of Klarna. **5. Customer Data** **5.1** The Boost Features may include Klarna sharing customers’ personal data with the Merchant (including but not limited to customer contact details, transaction information and/or the fact that the customer is a customer of Klarna). **5.1.1** The Merchant is not permitted to use the fact that a customer uses Klarna (or is a Klarna customer) when marketing goods or services. **5.1.2** The Merchant is not permitted to use such personal data shared to promote or in any way facilitate the provision of non-Klarna payment methods, or to facilitate or promote the customer’s access to, or use of, any third-party services or functionalities which correspond to any services or functionalities provided by Klarna. **5.2** The Merchant shall delete the personal data received as soon as reasonably possible if Klarna or the customer so requests. The Merchant shall upon request verify that such deletion has been completed. In the event that the Merchant is not able to verify deletion of the personal data, Klarna reserves the right to cease to share any further personal data. **5.3** The Parties agree to handle personal data as set out under Data Protection below. **5.4** *Specifically applicable to KEC*: Any use of Customers’ personal data beyond what is necessary for order fulfillment—such as creating a customer account, marketing, or profiling—is strictly prohibited and may result in significant legal liabilities, including fines and sanctions, under relevant privacy legislation for you as a merchant. It is your responsibility to fully comply with all applicable data protection and privacy requirements at all times and to safeguard customer information in accordance with the highest legal standards. **6. No warranty or liability** Use of the Boost Features is provided under this Agreement on an “as is” basis, without warranty of any kind, except as expressly stated herein or implied by law. You acknowledge and accept that Klarna disclaims all representations, warranties, liabilities, and conditions, express, implied, or statutorily, to the fullest extent permitted by law. Klarna is in no way responsible or liable for the correctness, accuracy or exhaustiveness of the shared customer personal data. **7. Indemnification** The Merchant warrants to only use the Boost Features in accordance with this Agreement and the guidelines set out on [docs.klarna.com](http://docs.klarna.com) (“Integration Guidelines”). The Merchant shall indemnify, defend, and hold harmless Klarna, its affiliates, and their respective officers, directors, employees, and agents (collectively, the “Klarna Indemnified Parties”) from and against any and all losses, damages, liabilities, costs, expenses (including reasonable attorneys’ fees), claims, actions, proceedings, or demands arising out of or related to any use of the Boost Features in non-compliance with or contrary to this Agreement or Integration Guidelines. **8. Amendments** Klarna reserves the right to amend this Agreement at any time. Further, you accept that Klarna reserves the right to charge the Merchant a fee for the use of the Boost Features. Should the Merchant not accept such a fee, or any amendments to this Agreement made by Klarna, the Merchant may stop using the Boost Features. ## Annex - Data Protection Klarna processes Personal Data of two separate Data Subject groups: (i) the merchant’s owners, employees and representatives, and (ii) customers. This section sets out how the Parties share Personal Data between each other, and the obligations relating to the Processing of such Personal Data. **1. Definitions** **1.1** Data Protection Legislation means any and all laws, statutes and regulations relating to the Processing under this Agreement and applicable to the respective Party at each point in time. This may include, but is not limited to; (i) EU Regulation 2016/679 (GDPR), Directive 2002/58/EC on privacy and electronic communications, (ii) the United Kingdom’s Data Protection Act 2018, (iii) Australian Privacy Act 1988 (Cth) and the Spam Act 2003 (Cth), (iv) the New Zealand Privacy Act 1993 and the Unsolicited Electronic Messages Act 2007, (v) the California Consumer Privacy Act (CCPA) and the Gramm-Leach Bliley Act (GLBA), (vi) the Canadian Personal Information Protection and Electronic Documents Act (PIPEDA), and (vii) the Federal Law on Protection of Personal Data Held by Individuals (LGPDPPSO), in each case as updated, amended or replaced from time to time. **1.2** Data Subject means an identified or identifiable natural person. An identifiable natural person is one who can be identified, directly or indirectly, taking into consideration all Personal Data reasonably accessible to a Party. This term also encompasses any analogous or similar term in applicable Data Protection Legislation. **1.3** Personal Data means any information or data, including personal information, relating to a Data Subject. This term also encompasses any analogous or similar term in applicable Data Protection Legislation. **1.4** Processing means any operation performed on Personal Data, including but not limited to collection, sharing, use, erasure or destruction of such data. This term also encompasses any analogous or similar term in applicable Data Protection Legislation. **2. Data protection obligations** **2.1** Each Party is responsible for its own Processing, and for implementing necessary security measures. **2.2** The Parties hereby acknowledge and agree that, in order to fulfill the obligations of this Agreement, they are separately and independently responsible for determining for which purposes, and by which means, they will be Processing any Personal Data, thus the Parties are individual and separate personal data controllers. No Personal Data is Processed on behalf of the other Party. **2.3** Personal Data is shared between the Parties for the purpose of allowing Klarna to perform, and the merchant to use the Boost Features, with the ultimate aim of allowing each of Klarna and the merchant to provide its respective services to the customers and administer its respective customer relationship. The merchant warrants that it will not share any Personal Data with Klarna unless and until it has a legal right to do so. **2.4** Each Party shall implement and maintain appropriate technical and organizational measures to ensure a level of security appropriate to the risk of its Processing (taking into account the nature, scope, context and purposes of processing the Personal Data). This includes protection against unauthorized or unlawful Processing of all Personal Data, or accidental loss or destruction of, or damage to, the Personal Data. Furthermore, each Party shall ensure that all personnel Processing Personal Data are subject to a binding written contractual obligation with the relevant Party to keep the data confidential. Moreover, each Party will ensure that access to Personal Data will be restricted only to those personnel who require it for the purposes of fulfilling the obligations under the provisions of this Agreement or the respective Party’s agreement with the relevant Customer, and that personnel Processing Personal Data are suitably skilled and experienced and have received adequate training on compliance with Data Protection Legislation applicable to the Processing. **2.5** Each Party has implemented an information security program designed to: (i) ensure the security and confidentiality of the Personal Data; (ii) protect against any anticipated threats or hazards to the security or integrity of such data; and (iii) protect against unauthorized access to, or use of, such data that could result in substantial harm or inconvenience to any Data Subject. **3. Transparency and exercising Data Subject’s rights** **3.1** The Parties are each responsible for clearly informing Data Subjects of how Personal Data are Processed, in line with applicable Data Protection Legislation (via a privacy notice and/or other means, as appropriate to ensure that the Data Subjects understand how their Personal Data will be Processed). Specifically, each Party shall ensure any Data Subject is informed that Personal Data is shared with the other Party before such sharing takes place, as required under Data Protection Legislation. **3.2** Each Party shall carry out any Data Subject’s requests. Neither Party is entitled or authorized to act on the other Party’s behalf in relation to Data Subjects’ rights, although each Party should support the other Party in fulfilling a Data Subject’s request to exercise its rights. **4. Klarna’s Personal Data Processing** **4.1** Klarna will Process the Personal Data it holds to carry out its relationships with the Merchant and Customers in line with its applicable privacy notices. This includes Processing Personal Data for statistical analysis and business reporting purposes, marketing and promotion, improvement of Klarna’s products and services, to protect Klarna’s property, interests and rights, during fraud investigations and to comply with applicable laws. Klarna may disclose Personal Data to its affiliates or third party service providers in line with Data Protection Legislation, in each case which may also use Personal Data for the purposes set out in applicable notices. **4.2** Personal Data of the Merchant’s owners, employees and representatives is shared by the Merchant to Klarna in order for Klarna to administer the business relationship between the Parties, and to send newsletters, to conduct product surveys, to advertise similar products or services of Klarna and for event invitations, in accordance with Klarna’s privacy notice for Merchant representatives. Such Data Subjects are entitled to their rights in respect of their Personal Data as described in Data Protection Legislation. **5. Cross-border transfers of Personal Data** **5.1** Neither Party shall transfer Personal Data outside of the country in which the Data Subject is present (country of origin) when the respective Party collects such data from the Data Subject, unless the relevant Party has ensured that (i) the transfer is to a country providing equal protection of the Personal Data as the country of origin, and, in case the country of origin is a country within the European Union, such country has been approved by the European Commission as providing adequate protection pursuant to Article 45 of the GDPR, or (ii) there are appropriate safeguards in place in order to ensure the Personal Data is protected in the receiving country, and, in case the country of origin is a country within the European Union, such safeguards are pursuant to Article 46 of the GDPR, or (iii) special circumstances are in place which makes such transfer legal under Data Protection Legislation, and, in case the country of origin is a country within the European Union, such special circumstances are pursuant to the delegations listed in Article 49 of the GDPR. **6. Additional requirements** If you choose to integrate the Klarna Web SDK on your website or integrate the Klarna APIs directly, for example but not limited to, to enable Klarna’s conversion boosters or other similar features, you are responsible for informing your users about the tracking technologies employed. This information must be provided prior to any tracking taking place, for instance via a cookie banner or similar mechanism. You must disclose both strictly necessary tracking technologies and any specific technologies used by the Klarna Web SDK, including details such as name, purpose, provider, use of local storage, and retention period. You may use the below wording as is, or adapt it to align with your existing cookie banner or privacy policy, provided the information remains complete, accurate, and compliant with applicable laws: *Strictly necessary cookies are necessary for the website to function and cannot be switched off in our systems. They are usually only set in response to actions made by you which amount to a request for services, such as setting your privacy preferences, logging in or filling in forms. For the purpose of ensuring service security and prevention of fraud, we do also collect device fingerprints, including, but not limited to, your browser name, IP address, time zone and language preference and service availability.* | Name | Purpose | Supplier (first/ third) | Session/ Persistent/local | Expiry | |----|-------|-----------------------|-------------------------|------| | __klarna_sdk_klarna-shopping-session | This cookie is used to ensure service security, service availability, and to prevent fraud. | Third party | Local storage | 48h | | __klarna_sdk_config | This cookie is used to: | Third party | Session | Until you close your browser | --- # Source: https://docs.klarna.com/resources/legal-and-compliance/policies-and-term-of-service/terms-of-service.md # Terms of Service ## Rules for using Klarna assets/services including liability limits, monitoring rights, and Klarna’s ability to change or restrict access to its services. ## 1. General These terms describe the rights and obligations when using specific assets which are defined as Klarna Assets by Klarna Bank AB (publ), SE-556737-0431, (“Klarna”) or any of its affiliates. By using Klarna Assets you agree that you have read, understood and that you accept these terms of service (the “Terms”). Klarna has the right to change these Terms at any time and it is your responsibility to keep yourself up to date as regards any changes to these Terms. You will always find the most recent version of these terms of service here: [docs.klarna.com/policies/terms-of-service](https://docs.klarna.com/resources/legal-and-compliance/policies-and-term-of-service/terms-of-service/). If you have a merchant account with Klarna (e.g. an EID or MID), it is important that you protect the account credentials and inform Klarna about any unauthorized use of such account. For the purpose of these terms, “Klarna Assets” include any application programming interfaces (APIs), Klarna trade names, trademarks, logos, data, tooltip, part payment widget, modules, SDKs, databases, domain names or any other distinctive assets of Klarna that are provided to you for use under these Terms. ## 2. Intellectual Property Rights Klarna Assets may be protected by copyright, trademarks and service marks and/or other proprietary rights under applicable laws in Sweden as well as other jurisdictions. You agree to fully comply with these Terms as well as all applicable proprietary rights laws and other laws, as well as any additional copyright notices or restrictions contained in these Terms. You have no right to claim the ownership of, publish, copy, assign, transfer, license or otherwise dispose of the intellectual property rights to the source code or call structure of any Klarna Asset. Klarna owns all rights, title, and interest to the Klarna Assets. ## 3. Specific Terms of Use You are solely granted a limited, personal, revocable right and license to use the Klarna Assets for your internal business purposes and for the functions set forth in Klarna’s instructions and documentation. You may only use Klarna Assets in accordance with Klarna’s instructions and documentation. It is your responsibility to ensure that you are aware of the applicable instructions and documentation at all times. If you are unsure whether you are up to date as regards to Klarna’s instructions, please contact Klarna. You may under no circumstances use the Klarna Assets for malicious purposes, including to spread viruses, worms, Trojan horses or other forms of malware through Klarna Assets and/or on the website where Klarna Assets are used. You must comply at all times with any applicable laws when using our assets and you may not promote or encourage any illegal activity. You acknowledge and agree that Klarna, without having to obtain any specific approval in each case, is entitled to use any data that you submit, share or in any other way make available to Klarna. Klarna’s use of such data includes, but is not limited to, conducting processes to improve risk assessment and consumer experience. Klarna has the right, at its own discretion, to restrict or limit the usage of Klarna Assets at any time. Klarna monitors, including through automated means, the use of Klarna Assets to ensure compliance with these Terms and to ascertain quality, detect misuse, improve Klarna’s products and services and you consent to such monitoring. When using Klarna Assets you do so at your own risk. You will be fully liable for any damage or loss of any kind arising from your use of any Klarna Assets. You acknowledge and agree that open source software that is provided by Klarna may have terms which might take precedence over these Terms. Unless specifically agreed otherwise, by using Klarna's Services you as a merchant acknowledge and agree that Klarna may use your logo, name and other trademarks (including, but not limited to, product visuals) within Klarna's Services, features and product offering, as well as in marketing activities Below provisions are applicable on merchants for card acceptance: - Merchant must indicate its acceptance of the card whenever it communicates the payment methods it accepts to customers and display our Marks according to our guidelines; - Merchant must not criticize or mischaracterize the card or any of card scheme's services or programs; - Merchant must not engage in activities that harm any card scheme business or brand. If card scheme provides notice to Klarna that a merchant has breached this provision, Klarna holds the right to terminate merchant relationship and will need to do so in 2 weeks notice in order to prevent fines coming from card schemes ## 4. Amendments and Alterations Klarna has the right to make amendments to Klarna Assets and these Terms at any time. This includes, but is not limited to, changes to the API and the API content. You fully accept any such changes by continuing the use of a Klarna Asset after any change or alteration. If you should not agree to the new or amended Terms you may no longer use Klarna Assets and you are obliged to stop using Klarna Assets. Klarna may at any time, at its own discretion, deprecate or change the functionality of Klarna Assets. For the purpose of these Terms, deprecation means that Klarna will no longer support or update versions or specific functionalities. Klarna is in no way obliged to inform users about deprecations of version or functionalities. The applicable version of Klarna’s deprecation policy can be found [here](https://docs.klarna.com/resources/legal-and-compliance/policies-and-term-of-service/deprecation-policy/). ## 5. Liability Klarna is in relation to Klarna Assets and the use of such assets under no circumstances liable for any damages and/or losses of any kind. IN PARTICULAR, IN NO EVENT SHALL KLARNA BE LIABLE FOR ANY INDIRECT, CONSEQUENTIAL, INCIDENTAL, SPECIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF, IN CONNECTION WITH, OR IN ANY WAY RELATING TO, THE USE OF KLARNA ASSETS, WHETHER IN CONTRACT, TORT (WHETHER IN NEGLIGENCE OR STRICT LIABILITY) OR OTHER LEGAL OR EQUITABLE THEORY, OR ANY LOSS OF PROFITS OR REVENUE, REGARDLESS OF WHETHER YOU KNEW OR SHOULD HAVE KNOWN OF THE POSSIBILITY OF SUCH DAMAGES. KLARNA ASSETS ARE PROVIDED “AS IS” WITHOUT ANY EXPRESSED OR IMPLIED WARRANTY WHATSOEVER. KLARNA DOES NOT GUARANTEE ANY SPECIFIC AVAILABILITY, FUNCTIONALITY, QUALITY, SECURITY, TITLE AND/OR NON-INFRINGEMENT. ## 6. Personal Data Any data that you may receive from Klarna shall be handled with due care and in accordance with applicable laws and/or in accordance with what may be set forth in any merchant or other agreement between you and Klarna. Unless the parties have a separate agreement which include transfer and processing of personal data, the following shall apply. If personal data (as defined in Regulation (EU) 2016/679 (the “GDPR”)) is processed during use of Klarna’s Assets, you shall comply with applicable data protection legislation and ensure that you have legal ground to process such personal data. In the event Klarna is deemed the controller of such personal data, you agree, not to use any such data until you have entered into a Data Processing Agreement with Klarna. Transfer of personal data outside of the EU/EES is not allowed to the extent that Klarna is deemed to be the controller of such data. ### 6.A **Tracking technologies** If you choose to integrate the Klarna Web SDK on your website, for example but not limited to, to enable Klarna’s conversion boosters or other similar features, you are responsible for informing your users about the tracking technologies employed. This information must be provided prior to any tracking taking place, for instance via a cookie banner or similar mechanism. You must disclose both strictly necessary tracking technologies and any specific technologies used by the Klarna Web SDK, including details such as name, purpose, provider, use of local storage, and retention period. You may use the below wording as is, or adapt it to align with your existing cookie banner or privacy policy, provided the information remains complete, accurate, and compliant with applicable laws: *Strictly necessary cookies are necessary for the website to function and cannot be switched off in our systems. They are usually only set in response to actions made by you which amount to a request for services, such as setting your privacy preferences, logging in or filling in forms. For the purpose of ensuring service security and prevention of fraud, we do also collect device fingerprints, including, but not limited to, your browser name, IP address, time zone and language preference and service availability.* | Name | Purpose | Supplier (first/ third) | Session/ Persistent/local | Expiry | |----|----|----|----|----| | \_\_klarna_sdk_klarna-shopping-session | This cookie is used to ensure service security, service availability, and to prevent fraud. | Third party | Local storage | 48h | ## 7. Term and termination We may terminate these Terms at any time with notice to you. Upon termination, you must cease using the Klarna Assets. These Terms are valid until further notice by Klarna and apply to you for as long as you use Klarna Assets and/or for as long as you have any remaining obligations in accordance with these Terms. If your merchant agreement or merchant account with Klarna is terminated, you are, unless otherwise agreed, required to stop using Klarna Assets as of such termination. ## 8. Indemnity You shall indemnify and hold Klarna and its affiliates, officers, directors and employees, harmless from and against any third-party claim and/or any losses/damages of any kind arising out of your use of Klarna Assets. ## 9. Severability The invalidity or unenforceability of any provisions of these Terms shall not affect the validity or enforceability of any other provision of these Terms, which shall remain in full force and effect. ## 10. Governing law These Terms are governed by Swedish law. Any dispute, controversy or claim arising out of or in connection with this contract, or the breach, termination or invalidity thereof, shall be finally settled by arbitration administered by the Arbitration Institute of the Stockholm Chamber of Commerce (the “SCC”). The Rules for Expedited Arbitrations shall apply, unless the SCC in its discretion determines, taking into account the complexity of the case, the amount in dispute and other circumstances, that the Arbitration Rules shall apply. In the latter case, the SCC shall also decide whether the Arbitral Tribunal shall be composed of one or three arbitrators. The seat of arbitration shall be Stockholm, Sweden. The language to be used in the arbitral proceedings shall be English. --- # Source: https://docs.klarna.com/resources/developer-tools/testing-payments/test-cases.md # Test cases ## In this section, you can find different scenarios for testing Klarna’s payment and checkout flows. ## End-to-end test cases Test your Klarna integration by following the steps for each of the cases below. If a test case or a step doesn't apply to your store, for example, you don't offer partial refunds, skip the test case. The cases cover 4 main stages of the order lifecycle: 1. In the purchase stage, the customer adds items to the cart, proceeds to checkout, and places an order, either in the full amount or with a discount. While testing, you perform the steps in this stage. In real-life scenarios, your customer does so. 2. In the pre-shipment stage, you cancel orders that can't be fulfilled. 3. In the shipment stage, you ship the items to the customer, as well as capture the items in your system and in Klarna. 4. In the post-shipment stage, the customer returns the items and you refund the full order amount or a part of it. Here are some things to keep in mind when you test: - You can verify the results in **Orders**in the Merchant portal. - The manual order management steps in the Merchant portal are available only if your Klarna integration isn't linked to any external systems, as the order status in the Merchant portal isn't synchronized with the external systems. - Test cases 1–8 walk you through checking the basic order details in the Merchant portal's **Orders**. - You can also [test your integration's richness](https://docs.klarna.com/resources/developer-tools/testing-payments/test-cases/#test-the-integration-richness) and validate some optional order details using **Logs** in the playground Merchant portal. Keep the API reference open as it will help you to understand the details in the logs. - In all test cases, use Klarna’s [sample customer data](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/) for the market you are testing. - Make sure to use your test (playground) environment API credentials. Your production keys won't work in playground. Happy testing! Don't use any real-life data when testing. Instead, use the [sample customer data](https://docs.klarna.com/resources/developer-tools/sample-data/sample-customer-data/) and [sample payment data](https://docs.klarna.com/resources/developer-tools/sample-data/sample-payment-data/). ## Test case 1: Place, fully capture, and fully refund an order This test case lets you test placing an order that contains 1 item, capturing the order in full, and processing a refund for the order returned by your customer. ### Purchase stage In the first stage, you place an order. 1. Add a product to the cart and go to checkout. 2. Place the order, choosing Klarna as the payment method. Verify that you're redirected to the order confirmation page. The order is now created in your system and in Klarna. 3. Verify the order was correctly created. Log into the Merchant portal and go to **Orders**. 4. Search for your order using the search bar, then click the link in the Klarna reference column to view the order details. 5. On the **Order lines** tab, check that the **Product name**, **Unit price**, **Tax**, and **Amount** are correct. ### Shipment stage In the second stage, the goods are shipped to the customer and you capture the order to receive a payout for the items sold. 1. In your system, capture all order items. If you're not integrating directly with the Order management API and don't have an integration with other systems, you can [capture the order in the Merchant portal](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api/capture-and-track-orders/). 2. Verify the capture in the Merchant portal. Go to **Orders** and check if the order's status is *Fully Captured*. ### Post-shipment stage In the final stage, the customer returns the order and you refund the order amount back to the customer. 1. In your system, refund all the order items. If you're not integrating directly with the Order management API and don't have an integration with other systems, you can [refund the items in the Merchant portal](https://docs.klarna.com/order-management/manage-orders-in-the-merchant-portal/refund-an-order/). 2. Verify the refund in the Merchant portal. Go to **Orders** and check if the order's status contains two labels: *Fully Captured* and *Fully Refunded*. Also, verify that the refunded amount and the remaining amount to be paid are correct. ## Test case 2: Place, fully capture, and partially refund an order This test case lets you test placing an order that contains 2 items, capturing the order in full, and processing a refund for 1 out of 2 items. In the process, you'll verify that the cart is being updated correctly when you navigate between the checkout and the product pages. ### Purchase stage In the first stage, you place an order. 1. Add a product to the cart and go to checkout. 2. Return to the store and add another product to the cart. 3. Go to checkout again. 4. Place the order, choosing Klarna as the payment method. The order is now created in your system and in Klarna. 5. Verify the order was correctly created. Log into the Merchant portal and go to **Orders**. 6. Search for your order using the search bar, then click the link in the Klarna reference column to view the order details. 7. On the **Order lines** tab, check that the **Product name**, **Unit price**, **Tax**, and **Amount** are correct. ### Shipment stage In the second stage, the goods are shipped to the customer and you capture the order to receive a payout for the items sold. 1. In your system, capture all order items. If you're not integrating directly with the Order management API and don't have an integration with other systems, you can [capture the order in the Merchant portal](https://docs.klarna.com/order-management/manage-orders-in-the-merchant-portal/capture-an-order/). 2. Verify the capture in the Merchant portal. Go to **Orders** and check if the order's status is *Fully Captured*. ### Post-shipment stage In the final stage, the customer returns 1 out of 2 items from the order and you refund the item amount back to the customer. 1. In your system, refund 1 of the order items. If you're not integrating directly with the Order management API and don't have an integration with other systems, you can [refund the item in the Merchant portal](https://docs.klarna.com/order-management/manage-orders-in-the-merchant-portal/refund-an-order/). 2. Verify the refund in the Merchant portal. Go to **Orders** and check if the order's status contains two labels: *Fully Captured* and *Partially Refunded*. Also, verify that the refunded amount and the remaining open amount to be paid are correct. ## Test case 3: Place, partially capture an order, and release the remaining authorization This test case lets you test placing an order that contains 2 items, capturing 1 out of 2 order items, and releasing the authorized amount for the other item that can't be shipped. ### Purchase stage In the first stage, you place an order. 1. Add a product to the cart and go to checkout. 2. Return to the store and add another product to the cart. 3. Go to checkout again. 4. Place the order, choosing Klarna as the payment method. The order is now created in your system and in Klarna. 5. Verify the order was correctly created. Log into the Merchant portal and go to **Orders**. 6. Search for your order using the search bar, then click the link in the Klarna reference column to view the order details. 7. On the **Order lines** tab, check that the **Product name**, **Unit price**, **Tax**, and **Amount** are correct. ### Shipment stage In the second stage, 1 item is shipped to the customer and you capture the order to receive a payout for that item. 1. In your system, capture 1 item only. If you're not integrating directly with the Order management API and don't have an integration with other systems, you can [capture the order item in the Merchant portal](https://docs.klarna.com/order-management/manage-orders-in-the-merchant-portal/capture-an-order/). 2. Verify the capture in the Merchant portal. Go to **Orders** and check if the order's status is *Partially Captured*. ### Post-shipment stage In the final stage, you release the previously authorized amount for the item that wasn't captured back to the customer. 1. In your system, [release the remaining amount](http://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api/refund-orders-and-manage-authorizations/#release-order-authorization) back to the customer. If you're not integrating directly with the Order management API and don't have an integration with other systems [cancel the order in the Merchant portal](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-in-the-merchant-portal/cancel-an-order/). 2. Verify the released amount in the Merchant portal. Go to **Orders** and check if the order's status is *Fully Captured*. ## Test case 4: Place, fully capture, and fully refund an order with a discount code This test case lets you test placing an order that contains 1 item, applying a discount, capturing the order in full, and processing a refund. ### Purchase stage In the first stage, you place an order. 1. Add a product to the cart and go to checkout. 2. Enter a discount code to reduce the order amount. 3. Place the order, choosing Klarna as the payment method. The order is now created in your system and in Klarna. 4. Verify the order was correctly created. Log into the Merchant portal and go to **Orders**. 5. Search for your order using the search bar, then click the link in the Klarna reference column to view the order details. 6. On the **Order lines** tab, check that the **Product name**, **Unit price**, **Tax**, and **Amount** are correct. Also, verify that the discount code was applied and the discounted amount is correct. ### Shipment stage In the second stage, the goods are shipped to the customer and you capture the order to receive a payout for the items sold. 1. In your system, capture all order items. If you're not integrating directly with the Order management API and don't have an integration with other systems, you can [capture the order in the Merchant portal](https://docs.klarna.com/order-management/manage-orders-in-the-merchant-portal/capture-an-order/). 2. Verify the capture in the Merchant portal. Go to **Orders** and check if the order's status is *Fully Captured*. ### Post-shipment stage In the final stage, the customer returns the order and you refund the order amount back to the customer. 1. In your system, refund all the order items. If you're not integrating directly with the Order management API and don't have an integration with other systems, you can [refund the order in the Merchant portal](https://docs.klarna.com/order-management/manage-orders-in-the-merchant-portal/refund-an-order/). 2. Verify the refund in the Merchant portal. Go to **Orders** and check if the order's status is *Fully Refunded*. ## Test case 5: Place, fully capture, and partially refund an order with a gift card This test case lets you test placing an order that contains 2 items, applying a gift card, capturing the order in full, and processing a refund for 1 out of 2 items. ### Purchase stage In the first stage, you place an order. 1. Add a product to the cart and go to checkout. 2. Return to the store and add another product to the cart. 3. Go to checkout again. 4. Enter a gift card to reduce the order amount. 5. Place the order, choosing Klarna as the payment method. The order is now created in your system and in Klarna. 6. Verify the order was correctly created. Log into the Merchant portal and go to **Orders**. 7. Search for your order using the search bar, then click the link in the Klarna reference column to view the order details. 8. On the **Order lines** tab, check that the **Product name**, **Unit price**, **Tax**, and **Amount** are correct. ### Shipment stage In the second stage, the goods are shipped to the customer and you capture the order to receive a payout for the items sold. 1. In your system, capture all order items. If you're not integrating directly with the Order management API and don't have an integration with other systems, you can [capture the order in the Merchant portal](https://docs.klarna.com/order-management/manage-orders-in-the-merchant-portal/capture-an-order/). 2. Verify the capture in the Merchant portal. Go to **Orders** and check if the order's status is *Fully Captured*. ### Post-shipment stage In the final stage, the customer returns 1 out of 2 items from the order and you refund the item amount back to the customer. 1. In your system, refund 1 of the order items. If you're not integrating directly with the Order management API and don't have an integration with other systems, you can [refund the item in the Merchant portal](https://docs.klarna.com/order-management/manage-orders-in-the-merchant-portal/refund-an-order/). 2. Verify the refund in the Merchant portal. Go to **Orders** and check if the order's status contains two labels: *Fully Captured* and *Partially Refunded*. Also, verify that the refunded amount and the remaining open amount to be paid are correct. ## Test case 6: Place and cancel an order before the capture This test case lets you test placing an order that contains 1 item, and canceling the order before it's captured. ### Purchase stage In the first stage, you place an order. 1. Add a product to the cart and go to checkout. 2. Place the order, choosing Klarna as the payment method. The order is now created in your system and in Klarna. 3. Verify the order was correctly created. Log into the Merchant portal and go to **Orders**. 4. Search for your order using the search bar, then click the link in the Klarna reference column to view the order details. 5. On the **Order lines** tab, check that the **Product name**, **Unit price**, **Tax**, and **Amount** are correct. ### Pre-shipment stage In this stage, you cancel the order that can't be fulfilled. 1. In your system, cancel the order. If you're not integrating directly with the Order management API and don't have an integration with other systems, you can [capture the order in the Merchant portal](https://docs.klarna.com/order-management/manage-orders-in-the-merchant-portal/capture-an-order/). 2. Verify the cancellation in the Merchant portal. Go to **Orders** and check if the order's status is *Cancelled*. ## Test case 7: Place an order with different billing and shipping addresses This test case lets you test placing an order that contains 1 item while providing different billing and shipping addresses. ### Purchase stage In the first stage, you place an order. 1. Add a product to the cart and go to checkout. 2. Enter different billing and shipping addresses. 3. Place the order, choosing Klarna as the payment method. The order is now created in your system and in Klarna. 4. Verify the order was correctly created. Log into the Merchant portal and go to **Orders**. 5. Search for your order using the search bar, then click the link in the Klarna reference column to view the order details. 6. On the **Order lines** tab, check that the **Product name**, **Unit price**, **Tax**, and **Amount** are correct. In the **Customer** panel, verify that **Shipping address** is different than **Billing address**. ## Test case 8: Place an order with a shipping fee This test case lets you test placing an order that contains 1 item while applying a shipping fee to the order. ### Purchase stage In the first stage, you place an order. 1. Add a product to the cart and go to checkout. 2. Select a shipping option that has a shipping fee. 3. Place the order, choosing Klarna as the payment method. The order is now created in your system and in Klarna. 4. Verify the order was correctly created. Log into the Merchant portal and go to **Orders**. 5. Search for your order using the search bar, then click the link in the Klarna reference column to view the order details. 6. On the **Order lines** tab, check that the **Product name**, **Unit price**, **Tax**, and **Amount** are correct. ## Test the integration richness If you want to check if the test orders contain the correct details, review the logs in the Merchant portal. Refer to [Klarna's API reference](https://docs.klarna.com/api) to learn about specific parameters and values in each request. 1. In the Merchant portal, go to Orders. Click the value in **Klarna reference** to view the order details. 2. Go to the **Summary** tab and copy the **Klarna order ID**. 3. Go to **Logs** and enter the copied order ID as the search term. The result is a list of requests related to the order. 4. Depending on the actions covered by the test case you followed to create an order, look for the following details in the logs. | Order characteristics | Applicable test cases | Expected results in Logs | |---------------------|---------------------|------------------------| | All placed orders | 1–8 | The `order_lines` object contains the `product_url` and `image_url` values. | | Refund an order | 1, 2, 4, 5 | The response header includes the refund's URI and ID. | | Order placed with a discount code | 4 | The `order_lines` object contains either: | | Order placed with a gift card | 5 | The `order_lines` object contains a separate order line with type equal to `gift_card` and a negative amount value. | | Order placed with different billing and shipping addresses | 7 | The `billing_address` object and the `shipping_address` object have different values, corresponding to the values entered in the widget. | | An order with a shipping fee | 8 | A separate `order_line` with type equal to `shipping_fee` includes the correct shipping fee amount. | --- # Source: https://docs.klarna.com/resources/developer-tools/testing-conversion-boosters/testing-and-integration-checklist-for-sign-in-with-klarna.md # Testing and integration checklist for Sign in with Klarna ## Before you go live with Sign in with Klarna solution, follow this checklist to make sure your integration is tested and ready to be enabled in production. ## Testing Sign in with Klarna In order to test against the playground environment, please use the following base url: [](https://login.playground.klarna.com/). ### Testing consent flow You can trigger the consent screen in various ways depending on the environment and integration type. #### Production - Open Klarna app and go to Profile -\> Security and privacy -\> Data sharing and revoke consent. #### Playground - If you're using the Klarna Web SDK, add the following query parameter to the URL where the "Sign in with Klarna" button is loaded: `klarna-auth-prompt=consent`. - For those using the Identity platform or integrating directly with the API, the simplest approach is to create a new Klarna user account by using a different phone number or email address during login. ## Integration checklist ### General - Verify that SIWK button appears in the right places, for example login component or the myaccount page. - Verify that the button is clickable and is not covered by any other elements or not blocked by cookie prompts or other toggles. - Verify that the button is accessible, e.g. can be clicked with keyboard-only setup. - Verify that the flow is accessible to users with disabilities, following WCAG standards. - Verify that clicking on the button starts the flow without delay. - Verify that the redirect uri is provided to the script. - Verify that redirect flow starts if popups are blocked in the browser. - Verify that popup flow starts if you do not support redirect flow. - Verify that the SIWK flow appears in a correct language. - Verify that in case of an error, error messages are displayed clearly and accurately throughout the flow, providing actionable information to the user. ### Login - (In Sweden and Norway) Verify that the Bank ID step does not have any errors and on mobile you get redirected back the the app after using Bank ID app. Both scanning of the QR code and confirming in the Bank ID app on the same device should work. - Verify that if you did not have an account with Klarna associated with provided phone number, or your account was incomplete, you see onboarding screens - email and billing address collection. ### Consent - Verify that if you are a new user you see the consent screen at the end of the flow. - Verify all data points on the consent screen. You should only request what you require to create an account. - Verify that Privacy policy and Terms and conditions links are going to the correct pages. ### After login and consent - Verify that if you already have an account in your app with the identifier from the Klarna account you used to login, accounts are either merged automatically or you saw a screen informing about the merge. Verify that after logging in either popup closes or you get redirected back to the app and you are in a logged in state in the app. - Verify that when using SIWK to register a new account, after flow finishes you are also back in the app in a logged in state. You should not be required to use SIWK again to login. - Verify that the new app’s account contain the same data as your Klarna account. ### Returning users - Verify that if you logged in to Klarna on a device through any of the products (Klarna App, Klarna Payments) you do not see the login screen in the Sign in with Klarna flow. - Verify that as a returning user you do not see the consent screen in the flow. - Verify that after revoking consent through Klarna App and logging out from your app, next time you sign in with Klarna you see the consent screen. ### Purchase - If you have Klarna integrated in your checkout, it is imperative to verify that if you logged in with Sign in with Klarna you are automatically logged in in the Klarna purchase flow. --- # Source: https://docs.klarna.com/platform-solutions/acquiring-partners/stripe/payments/testing-stripe-integration.md # Testing Stripe integration ## Testing We recommend testing the integration before launching Klarna’s payment method in live mode. When in [Stripe test mode](https://stripe.com/docs/keys#test-live-modes), confirm that all information requested from the customer is passed through to Klarna at checkout. You can do that by placing sample orders in the test environment and validating the information displayed on the Klarna hosted payment page. Check out the [Stripe guidelines](https://stripe.com/docs/payments/klarna/accept-a-payment?platform=web&ui=API#testmode-guide) for information on how to best leverage test mode to verify your integration. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/payments-for-shopify/testing-the-integration.md # Testing Klarna Payments for Shopify ## Test Klarna Payments safely on your Shopify store using Test mode to validate integration without real transactions, and remember to disable it before going live. ## Activate Test mode in Shopify’s store admin When you activate **Test mode** on the Klarna payment method in your store’s Shopify admin, you can place test orders. Klarna doesn’t collect or settle any money for these test orders. You can test a Klarna integration with Shopify in two ways: 1. Integrating your Klarna production Merchant ID to a staging version of your website and enabling **Test mode** via **Shopify Settings**\> **Payments**\> **Klarna**\> **Manage**\> **Test mode**. This allows you to test that Klarna works with your website without the risk of customers placing an order on your live site. This also has the additional benefit of the test orders being separate from your live store. Once you have finished your testing, you will then need to disconnect and uninstall the Klarna app from your staging store. Once uninstalled it takes 48 hours for Shopify to remove the integration record from your staging store. To avoid the wait, contact your regional [Merchant Support](https://www.klarna.com/pay-now/business/merchant-support/) team and ask them to manually remove the integration record. A Klarna Playground Merchant ID can't be used to test the Shopify integration. You must have a Production Merchant ID that has been approved by Klarna before testing your integration with Shopify. 2. Integrating your Klarna Production Merchant ID with your live Shopify store and enabling **Test mode** within the Klarna settings found in **Shopify Settings**\> **Payments**\> **Klarna**\> **Manage**\> **Test mode**. When you enable **Test mode** in your live store, customers will still be able to place Klarna orders in your store. However these orders won’t be placed in our live system, and, as such **these orders shouldn’t be shipped and won’t be paid out.** These orders will still be visible on your Shopify orders page. If you activate **Test mode**, make sure to uncheck **Enable test mode** as soon you complete the testing. Klarna doesn’t pay out for test orders, even if a customer places a real order while **Test mode** was checked. ![ Activating Test mode in Shopify store admin.](757b6bd6-178c-4b23-b3ea-53a6c8645a62-shopify-ppp-test-mode.jpeg) *Activating Test mode in Shopify store admin.* **Good to know** - Test orders will be visible in the Shopify admin if the order was completed. These shouldn’t be shipped as they aren’t live Klarna orders. - When **Test mode** is disabled, live orders will be visible in both the Klarna production Merchant portal and the Shopify admin. - The Klarna payment methods offered with test mode active may not match your production account's configured Klarna payment offerings. - The Klarna Shopify direct integration is agnostic of specific Klarna payment methods though, so testing is still applicable with differing payment methods. - To test specific payment methods, you can use [Klarna’s Demo Store](https://www.klarna.com/demo/) with applicable payment methods by region. **In summary:** - Activating Test mode in Shopify's admin allows you to place test orders without collecting or settling money. Test mode uses the production account. - It's crucial to disable Test mode after testing, as Klarna doesn't pay for test orders, even if real orders were placed during testing.  - The Klarna payment methods in Test mode may differ from the payment methods in production. --- # Source: https://docs.klarna.com/resources/legal-and-compliance/more-solutions-guidelines/tokenization-shopping-solutions.md # Tokenization of Shopping Solutions Upon utilizing any of the tokenizable functionalities within Klarna's Shopping Solutions, including but not limited to Payment Tokens, Access Tokens and Customer Tokens, or comparable features, the Merchant acknowledges and agrees that the following will apply: **Payment Tokens** are transactions of orders under use of Klarna’s Shopping Solutions for which payments have been pre-authorized by the Customer and for which the goods or services are, to be delivered or performed instantly or in the future by the Merchant without having to obtain approval from the Customer each time or require the customer to interact with Klarna’s Shopping Solutions. If the merchant offers subscription services Merchant agrees that it will follow all applicable laws relating to subscriptions, including but not limited to cancellation requirements, renewal notice requirements and payment notification requirements. All recurring transactions are subject to approval and Klarna reserves the right to reject recurring transactions at its discretion. The Merchant agrees to indemnify Klarna for any third party claims, damages, and liabilities that may arise from Merchant’s failure to adhere to the requirements as set forth in this Payment Tokens section, herein. **Access Tokens** and **Customer Tokens** are Klarna authentication Tokens that allow merchants' customers to bypass any additional authentication process when utilizing the Shopping Solutions. The Merchant agrees that it will follow all applicable laws relating to usage, notifications and opt-in/out support. The Merchant assumes full responsibility and liability for any instances of **Merchant Account Takeovers** when employing any of the tokenizable functionalities within Klarna's Shopping Solutions, including, but not limited to, Recurring Payment Tokens, Access Tokens, Customer Tokens, or comparable features. A 'Merchant Account Takeover' is defined as the unauthorized access to a Customer's Merchant Account, wherein an unauthorized individual gains entry to the Customer's Merchant Account and can carry out unauthorized transactions, among other activities. In the event that Klarna suspects a Merchant Account Takeover, Klarna will inform the Merchant in writing, through the API, or by any other mutually agreed-upon means between the Parties. Klarna shall also guide the Customer to contact the Merchant's customer support. The Merchant shall undertake an investigation and address the matter in accordance with its established policies, procedures, and relevant agreements with the affected Customers. For the avoidance of doubt, Klarna has the right to retransfer any Claims where the above requirements are not fulfilled or where, as the case may be, the Merchant has failed to comply with the above terms. --- # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/integrate-via-hpp/before-you-start/tracking-session-status.md # Tracking session status Each *HPP Session* is following a state machine to map the Consumer’s action to a certain state, which allows any integrator to act depending on the current state. Integrators have two ways to get the current state, either by reading the *HPP Session* using an API endpoint or by using the callback mechanism. Both systems can be used at the same time and it is advised to have a batch running in case there was a loss in communication between systems while the callbacks were sent. As described in the callbacks reference, the callback mechanism will try to reach the integrator system with a retry mechanism, but will stop doing so if your system is not answering after a few times. When integrating with Klarna Payments, as soon as the Consumer gets an authorization, you will be able to extract the **Authorization Token** of the *KP Session* from the server response, which will let you place the order. ## HPP Session Lifecycle ![ HPP Session lifecycle](95f61a59-bad5-47c4-bed2-e44a9c5b100b_HPP+session+lifecycle.jpeg) *HPP Session lifecycle* | Status name | Final | Status description | |----|----|----| | WAITING | No | Session is created and Consumer has not entered the Payment Page yet. | | IN_PROGRESS | No | Consumer has entered the Payment Page on updated_at. | | COMPLETED | Yes | Consumer has successfully gotten an Authorization from the Payment system onupdated_at. The*Authorization Token*is contained in theauthorization_tokenfield in a Klarna Payments integration. | | FAILED | No | Consumer has been declined for the Payment onupdated_at. Session is still open for them to retry. | | CANCELLED | Yes | Consumer has cancelled the HPP Session onupdated_at. This cancellation is definitive. | | BACK | No | Consumer has pressed the Back button onupdated_at. Session is still open for them to retry. | | ERROR | No | Consumer has encountered an error while paying onupdated_at. Session is still open for them to retry. | | DISABLED | Yes | Session was disabled by an API call, on the merchant’s initiative, onupdated_at. | ## Reading the HPP Session updates by polling an endpoint The *HPP Session* can be read by the integrator using a [specific endpoint of the API](https://docs.klarna.com/payments/other-products/hosted-payment-page/api-documentation/read-session/). You will get the URL of the read session endpoint back from the [create session call](https://docs.klarna.com/payments/other-products/hosted-payment-page/api-documentation/create-session/), it is the session_url parameter. You can for example use a polling mechanism to check the status of the session and update your data depending on the payload. Although we suggest that you use the callbacks mechanism. See our [reference of the Read Session endpoint](https://docs.klarna.com/payments/other-products/hosted-payment-page/api-documentation/read-session/). ## Getting the HPP Session updates by using the callback mechanism When [creating the HPP Session](https://docs-portal-eu.production.c2c.klarna.net/hosted-payment-page/api-documentation/create-session)*HPP Session* an integrator can pass an URL that will be called by our systems whenever the status of the session is updated. This is really handy to create interaction whenever something happens and avoid to have a costly polling mechanism. See our [reference of the callbacks mechanism](https://docs.klarna.com/payments/other-products/hosted-payment-page/api-documentation/status-callbacks/). --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/payments-for-shopify/troubleshoot-your-installation.md # Troubleshoot Klarna Payments ## In this section you can read about some common Klarna payments with Shopify integration errors and learn how to fix them in your store. You will also read about some limitations that can affect your Klarna with Shopify integration. ## Klarna payments app issues ## Check that the new Klarna payments app is installed in your store By Shopify’s design, new payments apps aren't displayed under a store's **Apps** menu. To verify you have the app installed in your store: - Go to **Shopify admin**\> **Settings**\> **Payments**.  - Look for the *Klarna* payment method. ◦ If the payment method is active in your store, it will be included in the displayed list of active payment methods for your store and you can view the details of the payment method by clicking the **Manage** link. ◦ If the button says **Uninstall Klarna**, the app is currently installed in your store. Note that payments apps can only be uninstalled from a store when the payment method is deactivated. ◦ If the payment method isn’t active in your store, you have to search for it, by payment methods or by provider, click **Activate** which will take you to the payment methods details. Once you’re there, if the app is already installed in your store, you'll have the option to click another green **Activate Klarna** button within the payment method to activate the payment method in your store's checkout. - If you’re shown an **About Klarna** page with a green **Connect** button, the app isn’t currently installed in your store. ### Klarna app isn’t the same as Klarna as payment method The **Klarna** payment method, also known as gateway, isn’t the same as the **Klarna** app. New payment app integrations require an app. The payment method and the app work together for a successful integration. Uninstalling or installing the app does impact the integration, so please be careful to only uninstall the Klarna app when necessary. On the other hand, deactivating or activating the Klarna payment method impacts the storefront's checkout, that is, if the Klarna payment method displays or not, but the visibility of the payment method in checkout has no effect on the integration working successfully and doesn’t update Klarna's database. ## Klarna payment method issues ### Make sure the Klarna payment method displays in your store's checkout If the Klarna payment method doesn’t display in your checkout, make sure the Klarna payment method is active in your **Shopify store admin**\> **Settings**\> **Payments**. If the payment method is active, but doesn't display, try the following: - Check for [custom script code](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/shopify-plus-custom-scripts) in the Script Editor app. Note that Script Editor is only supported for Shopify for live stores that use Shopify Plus.  - Check for any custom CSS code that might change the display of your store's checkout.  If there is no custom code, contact Shopify for support. ### “Your payment can’t be processed for technical reasons” error in checkout Upon redirection from Shopify to Klarna’s hosted payment page, the payment method error "Your payment can’t be processed for technical reasons. Try again or use a different payment method." may appear to the customer. The most common reason for this error is that the Integration guides steps within the [Klarna Merchant portal](https://portal.klarna.com/) haven’t been completed fully. Activating the payment method and the subsequent activation of the required unlisted Klarna unlisted payments app in your Shopify store admin are only 2 of the 3 required steps for the Klarna payment method to work successfully in checkout. You’ll also need to have active Klarna API credentials. You can sign up for a new account to receive the API credentials at [](http://klarna.com/business). Once you have the Klarna API credentials, within Klarna's Merchant portal, complete the Shopify [Integration guides steps](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/how-to-install-klarna-payments-on-shopify). This error could also be caused by other issues, such as a Klarna merchant account configured for a different currency than the store's base currency. For support, please contact [Merchant support](http://klarna.com/merchant-support). ![ If a payment processing error occurs, an error message will be shown to the customer in the Shopify store. ](d8a6a55e-4a19-497e-aced-7205b0536c32_Screenshot+2023-07-24+182636.jpeg) *If a payment processing error occurs, an error message will be shown to the customer in the Shopify store.* ### "Klarna is connected but you can’t use it to accept payments" message within the payment method The “Klarna is connected but you can’t use it to accept payments” warning message in your payment method in your Shopify store indicates that you haven’t finished setting up your account or it is still being approved, and the payments app's ready flag is set to *false* in your store. To resolve this, click the **Manage** link within the payment method and complete the steps in the Integration guides in the Klarna Merchant Portal, particularly step 4 (Test), which sets the ready flag to *true* for the payment method's app in your Shopify store. ### The Klarna page loads after redirect, but no payment methods are available or order is rejected If the Klarna page loads, but no payment methods are available or order is rejected, that means your Shopify integration was successful, but no payment methods are available for the entered customer data for your Klarna merchant account. To fix the issue: - Make sure to enter valid customer data, not test data. - Make sure your store's single base currency matches your Klarna account configuration. Read more about the [currency requirement](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/known-constraints.md). ## Installation and Merchant portal issues ### “You are connected to Klarna but you can’t use it” error If the Klarna payment method says, "You are connected to Klarna but you can’t use it to accept payments because your account is still being approved ....", you don’t need to wait for approval. Follow the [Installation steps](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/how-to-install-klarna-payments-on-shopify) to complete the integration in Klarna's [Merchant portal](https://portal.klarna.com/)\> **Integration guides**. ### Enable the "Integration guides" link in the Merchant Portal if it doesn't show for your Klarna merchant account Contact Klarna Merchant support team who can enable the Integration guides app for your account if you’re contracted directly with Klarna. If you aren’t contracted directly with Klarna, for example, you’re contracted instead via Shopify Payments, Mollie, or another payment service provider (PSP), you should follow your integrator's steps for activating Klarna. You can confirm if Integration guides are enabled by checking the left navigation for **Integration guides** in the [Klarna Merchant portal](https://portal.klarna.com/). If the left side navigation menu isn't showing at all for any Merchant Portal apps in your browser, click the Merchant Portal menu navigation, that is, the black circle with 3 white lines inside, at the top left of the screen to open the menu. ### Page spins infinitely within Integration guides app in Merchant portal - Confirm that you have the Integration guides app enabled for your account. If you don't see the Integration guides app in the Merchant Portal menu, [request Klarna to enable the Integration guides app for your account](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/troubleshoot-your-installation). - Try using a new incognito Chrome browser window to avoid cached data. We suggest using Chrome as not all browser types are supported. - If you previously completed the integration through step 4 of the Integration guide (Test), and then uninstalled the Klarna app, you'll need to wait [48 hours](https://shopify.dev/apps/webhooks/configuration/mandatory-webhooks#shop-redact) or request Klarna Merchant support to do a database update before you’re able to redo the integration. - If you have multiple Klarna merchant accounts, that is, a different merchant ID for each of multiple Shopify stores, make sure the correct Klarna merchant ID is selected in the Klarna Merchant portal for the appropriate associated Shopify store. If you see the error stating "You already have a store that is integrated with Klarna...", please contact Merchant support and provide the displayed `correlation_id`. ### "Unexpected error" when trying to complete the integration If you see the “Unexpected error” message when going through the integration steps, uninstall the Klarna app from within the Klarna payment method in your Shopify admin, under **Settings**\> **Payments**). Don’t uninstall the "Klarna Payments" HPSDK app from the store's Apps menu, as the HPSDK app doesn’t impact the new payments app integration, but is used for order management for previously placed HPSDK Klarna orders. New payments apps, like the Klarna app, aren’t displayed within the store's Apps menu. You can only uninstall the new payment apps from within the payment method's configuration when the payment method isn’t active. If the payment method isn’t currently active in your store, search for the Klarna payment method and click **Activate** to get to the payment method's configuration options. Once there, you can check if you can uninstall the app. Once you’ve uninstalled the Klarna app, you can [retry the installation steps](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/how-to-install-klarna-payments-on-shopify) in the Integration guides app in the Klarna Merchant portal. If you previously completed the integration through step 4 of the Integration guides (Test), and then uninstalled the "Klarna" app, you'll need to wait [48 hours](https://shopify.dev/apps/webhooks/configuration/mandatory-webhooks#shop-redact) or request Klarna Merchant support to do a database update before you're able to redo the integration. ## Connection issues ### Update the database after uninstalling the Klarna app If you previously completed the integration through **Integration guides** step \#4 (Test), then uninstalled the Klarna app, you need to [wait 48 hours](https://shopify.dev/apps/webhooks/configuration/mandatory-webhooks#shop-redact) or request your region’s Klarna Merchant support team to manually update the database before you can redo the integration. ### Confirm that your store is configured in Klarna's database  If you've confirmed that the app is installed in your store, to next verify the database connection, log into the [Klarna Merchant portal](https://portal.klarna.com/), select **Integration guides** from the left-side menu and select the **Shopify** option.  - If you’re taken directly to directly Step 4 (Test), your store already has an entry in the database already. If that page doesn't load, or loads with an error, [refer to this solution from the troubleshooting guide](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/troubleshoot-your-installation). - If the page loads at any other step, please complete the Integration guides flow to get a valid entry in our database.  Note that even though you’ll generate a set of API credentials during the Integration guides flow, you don’t need to enter those credentials anywhere in your Shopify store, as the code does it for you. ## Known constraints ### 1. Klarna Payments accepts orders only for customer billing addresses in the markets that match the store base currency - Currently, Klarna Payments accepts orders only for customers with billing addresses in the markets that match the currency of the order. See the [list of supported markets and currencies in Klarna payments documentation](https://docs.klarna.com/payments/web-payments/before-you-start/data-requirements/puchase-countries-currencies-locales.md). - Customers in non-supported markets based on the order's currency are shown an error message on Klarna payment page load that the Klarna order can’t be placed or an error in Shopify checkout ("Your payment can’t be processed for technical reasons. Try again or use a different payment method."), depending upon the Klarna account configuration and Shopify store settings, for example, when theKlarna account doesn't support the store's single base currency. - Shopify limits Klarna payments as an alternative payment method, the same for all alternative payments methods, to always transact only in the store’s single base currency, [as documented in this Shopify help article](https://help.shopify.com/en/manual/payments/shopify-payments/multi-currency/conversions#shopify-payments-and-other-payment-providers). Even if the store displays prices in multiple currencies, including in checkout or using Shopify Markets, Shopify will update the order's currency to the store's single base currency when redirecting to the alternative payment provider.  - If you need to support multiple currencies with Klarna, you can use multiple Shopify stores or an alternative checkout, for example, [Global-e](https://www.global-e.com/). - For example, if the store base currency is SEK, Klarna payments will be able to accept orders for customers whose billing country is Sweden. Customers with addresses in other countries will see an error message, for example one shown in the screenshot below. The exact error message may differ depending on region and Klarna product (for example: "We can't offer you this payment method right now" or “Option not available”.) For stores with base currency of EUR, Klarna can accept orders for multiple regions which transact in EUR. For other countries, a single region is supported for each currency. ![ The exact error message may differ based on region and other data.](ZkIlBkFLKBtrW0nD_image-46-.jpeg) *The exact error message may differ based on region and other data.* ### 2. Klarna requests customers to enter their phone number Even if customers previously entered their phone number in Shopify checkout, Shopify may not share that phone number with payments integrations when email is required in checkout. Thus [Klarna may ask the customer to enter their phone number again](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/how-to-handle-customer-data.md). ### 3. Renaming the payment method isn’t supported While some [Shopify custom script code](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/shopify-plus-custom-scripts) works for payment methods integrated via Shopify's new payments app integrations, [renaming the payment method isn’t currently supported by Shopify](https://community.shopify.com/c/payments-shipping-and/can-you-add-or-change-the-name-of-payment-options/m-p/2040190) in the payments app, as payment providers can configure translations for the payment method name. If you wish to rename the Klarna payment method you may choose to use a third party app such as Payfy or BSure Checkout Rules. You can find the list of translated payment method names in [this article](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/language-locale-and-translations.md). ### 4. The amount paid by the customer to Klarna doesn't match the Shopify order total If customers update a related, but different Shopify session separately from the Shopify session used to place the Klarna order, the order totals between the Shopify and Klarna orders may not match, but the **Paid by customer** amount for the Shopify order should always match the Klarna order total. While not ideal, this is working as expected and designed. Make sure to only fulfill order line items paid for by the customer. ![klarna docs image](3c75a614-a516-4c48-b010-2dd25862257c_order+total+mismatch.jpeg)image ## Feedback and support Need help? We're happy to assist! Reach out to [your region’s merchant support team](http://klarna.com/merchant-support). You can also refer to [Shopify community](https://community.shopify.com/) for questions, support, and feedback, or visit the [Shopify help center](https://help.shopify.com/). --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/klarna-osm-app-for-shopify/troubleshooting.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/payments/troubleshooting.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/klarna-osm-app-for-shopify/troubleshooting.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/payments/troubleshooting.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/klarna-osm-app-for-shopify/troubleshooting.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/payments/troubleshooting.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/klarna-osm-app-for-shopify/troubleshooting.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/adobe-commerce/payments/troubleshooting.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/klarna-osm-app-for-shopify/troubleshooting.md # Shopify troubleshooting ## In this section you can read about some common issues with the Klarna On-site messaging Shopify app and learn how to fix them in your store. ## Debug issues with console debugging You can debug Klarna On-site messaging Shopify app issues and review the app’s functionality in the browser by enabling console debugging. To do so, open a store where a placement is located and append `?consoleDebug=true` to the URL. If there are already parameters in the URL, append `&consoleDebug=true` instead. Then, navigate to your browser’s **Developer tools**\> **Console** and look for messages related to Klarna On-site messaging, as shown in the screenshot below. ![ In a browser’s Console, enter osm to filter logs for messages related to Klarna On-site messaging.](f257227f-76ce-4f2a-940b-0dc3eadd8e68_consoleDebug.jpeg) *In a browser’s Console, enter osm to filter logs for messages related to Klarna On-site messaging.* ## The placement isn’t displayed on my product pages If a placement isn’t displayed on a product page, we recommend testing in a new incognito window to avoid caching. Also, please wait a few minutes and refresh a few times after changes are made to give the code time to update. If you have chosen geolocation you will also need to use a locale that is supported by what is on your Klarna merchant ID and matches your store currency. If it's an unsupported locale, the placement won't show. This is correct behaviour. When using the app, don’t manually update your store’s theme files with code from the On-site messaging section within the Klarna Merchant portal, as that can prevent the On-site messaging Shopify app from working. If the on-site messaging doesn’t appear on the storefront for any page, try the following troubleshooting options: 1. **Verify that the geolocated locale is supported for your store's single base currency** as currently [only a single currency can be accepted for Klarna orders](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/known-constraints.md). You can check the locale identified with [consoleDebug logging](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/troubleshooting), and also test by [setting your locale in the session variables to any desired country](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/locale-and-display-language.md). 2. **Inspect the page to check if the placement exists on the page but is hidden**, for example, with the CSS `display: none` property. If the placement is hidden, try a different CSS selector to find one that isn’t hidden. 3. **Verify that the store doesn’t have any manual on-site messaging code**, such as extra `script` or `klarna-placement` tags, copied from the Klarna Merchant portal. Manual on-site messaging code often interferes with the OSM Shopify app and causes the placement to not show in the storefront. The placement may be injected, but not show the content as the empty 0 by 0 pixels element. The OSM code is available in the Klarna Merchant portal for any merchant, but adding the JavaScript library to a Shopify store isn’t necessary as the app’s code retrieves the necessary OSM JavaScript and data real-time API requests to Klarna’s API. 4. **Check for JavaScript errors** as these can sometimes prevent the Klarna OSM app from working correctly. If the placements display on some pages but not others, try the following troubleshooting options: - **Verify that the product price is within the configured minimum and maximum of supported prices** applicable to Klarna payment options. If the product price falls outside of that range, the ad may display for some products but not others. - **Verify that the CSS selector used for the Ad Position exists on all pages**. If the chosen CSS selector only exists for some pages, for example, desktop theme pages but not mobile theme pages, the ad will only display on pages where the CSS selector exists. While we’ve worked hard to build the Klarna OSM Shopify app to work with most themes, if it isn’t able to find correct anchor tags for your theme, you can either inspect the page or view the source to manually choose a CSS selector or manually edit your theme to insert the custom selector. If you need further support, please contact [your regional Klarna merchant support team](http://klarna.com/merchant-support). ## The placement isn’t displayed on my cart pages If you have an active cart placement, verify that on-site messaging is displayed on the full page cart. An example URL of a cart page can be * name}/cart*. The Klarna On-site messaging Shopify app doesn’t inject on-site messaging for mini-cart or pop-cart pages for the Cart page type Ad Position or Cart App Block. Depending on your store’s theme, you may be able to add on-site messaging to mini-cart pages. To check if your theme supports this, do the following: 1. Go to the page where you want to add the placement. 2. Use the browser's Developer tools to inspect the `mini-cart` HTML 3. Right-click on the page and select **View Page Source**. 4. Look for the `mini-cart` HTML element in the page’s source code. If the `mini-cart` HTML element is present in the page source code, the page supports adding Klarna On-site messaging placements. For the Klarna OSM Shopify app's Ad Position for mini-cart, select the **Product** page type and use the CSS install method (Vintage option, not App Blocks, unless your theme supports a mini-cart theme template for App Blocks). In order to use the CSS install method, you need to determine an appropriate CSS selector, which can be found using the browser’s Developer Tools. A unique selector on the page that is consistent for any variation of the page works best. Alternatively, you can add a [custom CSS selector to the page](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/troubleshooting). ## The On-site Messaging Script loads on every page This is likely related to using [vintage ad placements](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/vintage-ad-placements) (instead of [App Blocks](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/app-block-placements)), that are going to be deprecated in 2025. You can follow these steps to change this using our app block functionality within the app: 1. Go to App Blocks instructions 2. Scroll down and click *Verify* and *Continue*. **This action will delete all vintage placements** **from the online store**, but the action is reversible (see point 3.) 3. *note*: If you don't have an app block on your site already, a warning banner saying Unable to detect App Blocks will appear. The process can still be continued. 4. If you would like to Switch to Vintage mode again, you can still go to App Blocks Instructions and click Switch to Vintage mode, although **switching back is not recommended** as the Vintage mode functionality will be deprecated in 2025. ![klarna docs image](Zwy7XoF3NbkBXYbm_Screenshot2024-10-14at07.02.14.jpeg)image ## How to have messaging at a specific location (custom CSS)  To insert a placement at a specific location, add a new custom `span` HTML element in the specific, desired location on your theme page by updating your appropriate theme liquid file, for example, `product.liquid`, in the correct place: ``` html ``` A `span` element lets you insert a placement in a specific place in the source code. This can be a one-line code change to your theme, but the above code snippet won’t display on the storefront if added in the right location. Instead, it creates a specific anchor element to which the Ad Position can be attached. The location is consistent across all the applicable storefront pages. When you’re adding the `span` element, be careful to add it in a location that doesn’t interfere with the code within your team. For example, don’t add it inside JavaScript code or other code functions. Theme developers or [Klarna merchant support](https://www.klarna.com/uk/business/merchant-support/) can help you with this step if needed. Once the element exists on the theme page, go to the **Shopify admin**\> **Apps**\> **Klarna On-site Messaging**\> **Dashboard**. Then, select the correct Ad Position and update the Ad Position by entering`#ShopifyKlarnaOnSiteMessagingAppElement` as the CSS selector. This will specify the anchor element. ![ Creating an anchor element for a custom CSS selector.](47704c23-bcab-4cff-8c3e-07a367596ccb_Shopify_Klarna_span_2023_08-01.jpeg) *Creating an anchor element for a custom CSS selector.* If the placement doesn’t display on the storefront, view the HTML source of the page and search for your custom `span` element, `ShopifyKlarnaOnSiteMessagingAppElement`. If it doesn’t exist, edit the theme’s liquid files to put the custom CSS selector in a location that does exist for the page. ## The placement isn’t updating when I change the variant The Klarna On-site messaging Shopify app attempts to update the price attribute of the placement when variants are changed. The app then calls the r`efresh-placements` event on the `KlarnaOnsiteService` data layer. For the app to detect changes in variants and to retrieve the price, the shop theme must be configured in a way that appends the variant id to the URL, for example, **. The app detects changes in variants by listening to input/select elements. If the theme is using a different approach, you have to customize the theme so that the following JavaScript function is called within the appropriate theme JavaScript code that is triggered by the theme when variants change. This way, the updated purchase amount is passed. ``` javascript window.KOSMApp.updatePurchaseAmount(newPurchaseAmount); ``` ## Messaging disappears after switching themes Klarna On-site messaging for a Shopify store utilizes CSS data within a theme. If the theme is changed for a store, all active Ad Positions are deactivated by the Klarna On-site messaging Shopify app by default. After changing a theme, you need to reactivate, and possibly reposition, the On-site messaging placements in the app using the new theme. You can use the app’s **Ad position settings** configuration to disable deactivating the placements, as shown on the screenshot below. As described in Shopify admin, we recommend that you test the placements after making theme changes. ![ The Ad position settings configuration for the Klarna OSM Shopify app lets you keep placements active after your store theme changes.](83e8cde2-ac01-49e7-9636-b96d52855a50-shopify-skosm-deactivate-after-theme-change.jpeg) *TheAd position settingsconfiguration for the Klarna OSM Shopify app lets you keep placements active after your store theme changes.* ## On-site messaging displays the wrong currency If a currency displayed on a placement is incorrect, verify that the country selected for your Ad Position uses the same currency as your store’s base currency. For example, if your store is selling in EUR, make sure to select a country that uses EUR. ## My country isn't listed in the select box When you first install the app, it connects to a Klarna endpoint based on your Shopify store’s base address, which determines the countries available in the app. If those countries aren’t appropriate for your Klarna account, go to your store’s **Shopify admin**\> **Apps**\> **Klarna On-Site Messaging**\> **Settings** and click **Disconnect account**. Then, reconnect the account. When reconnecting, choose the correct endpoint from the **Select Endpoint** dropdown as shown in the screenshot below: ![ The endpoint you select while connecting your Klarna account determines which countries are available in the app.](91857f63-cfa1-47e8-8511.jpeg) *The endpoint you select while connecting your Klarna account determines which countries are available in the app.* ## A fallback placement is displayed instead of the selected one If storefront pages display the fallback placement, for example, a top-strip-promotion placement, instead of the desired amount-based placement you configured placement, verify that the app’s code can retrieve the product's price. ## On-site messaging is loading slowly in my store Following Shopify’s requirements for apps for loading app asserts, the JavaScript for Klarna’s On-site messaging is loaded using Shopify’s [ScriptTag API](https://help.shopify.com/en/api/reference/online-store/scripttag), which can be confirmed by searching for the `asyncLoad()` function in the HTML source code of the storefront page. ![ Searching for the asyncLoad() function in the page’s HTML source code.](19c41b56-7cc2-4bfe-9528-d0b06df582e0-shopify-skosm-asyncLoad.jpeg) *Searching for the asyncLoad() function in the page’s HTML source code.* Following this standard, Klarna On-site messaging JavaScript is loaded asynchronously, after the main content of the page has loaded, and scripts are loaded in order of app install to the store. This prevents the app’s JavaScript from slowing the page load, but it also means that the JavaScript is loaded along with all app’s JavaScript libraries, so other apps in the store that use JavaScript affect the loading time for Klarna’s On-site messaging. The more app JavaScript libraries a store loads, the more time needed for Klarna On-site messaging to load. If On-site messaging is slow to load in a store, review the installed apps to verify they are all still needed and review all the resources loaded for the page, for example, using the browser’s developer tools. Other factors, for example, network speed, device, and location, also affect load times. You can check your store's Online store speed in **Shopify admin**\> **Settings**\> **Sales channels**\> **Online Store**. The Klarna On-site messaging Shopify app can only update the placement after a variant change if the theme follows Shopify standards to allow this app to listen to the event listeners in order to track variant changes. Some themes, for example, [Simple](https://themes.shopify.com/themes/simple/styles/light) and [Brooklyn](https://themes.shopify.com/themes/brooklyn/styles/classic), have the event listeners unset. If that’s the case, you can add the below code in the `theme.liquid` file to override the listeners being unset. The code forces input listeners to reinitialize after 100 ms. ``` html ``` A code snippet that forces input initializers to reinitialize. In this example, the value is 100 ms. ## Error when upgrading to Checkout Extensibility ![ An error related to upgrading to the Checkout Extensibility](ZvErC7VsGrYSvqhB_image-20240830-133021.jpeg) *An error related to upgrading to the Checkout Extensibility* If seeing this error when upgrading to the Checkout Extensibility, you likely have old configuration in your store or checkout.liquid files in your themes. The error is unrelated to the Klarna On-site Messaging app, even if it may be indicated that the app customizes thank you and order confirmation pages. Once the old configuration or checkout-liquid files are updated, the error will no longer be displayed. ## Common warnings and errors ### “Risky Ad Position” error message in preview When changing the position of a placement, you may see a following error: “Warning. Risky Ad Position. An ID has been selected. Ensure that the id isn’t unique to the preview page, or it might get hidden on other pages”. The “Risky Ad Position” error can appear when there’s a risk of the placement being hidden on pages other than the preview page. If you see this error, try a different position on the page or a different preview product for the Shopify Ad. The position of a placement attaches to a CSS selector on the page, which should be a CSS option that is available on all product pages. You can view the chosen CSS selector in **Install methods**\> **CSS**. If you don’t find a correct selector by dragging and dropping, you can manually enter an appropriate CSS selector from your page, or, if the placement is already the desired position, review the frontend store view and verify that it’s working correctly across products. ### Error: Request failed with the status code 404 If this error is shown in the On-Site Messaging app there are usually two solutions: 1. You need to disable test mode in the Klarna Payments app settings. 2. You have connected the On-Site Messaging app to the incorrect endpoints (Europe/North America/Australia) in which case you will need to disconnect and reconnect the app. ![klarna docs image](8db078a9-00a0-472c-966a-5d1e849eb0be-404-Error.jpeg)image ![klarna docs image](419f4541-0aea-41a8-afd9-c7e65249ed12_Endpoints.jpeg)image ### JavaScript console error: getRandomValues If the `klarna-placement` HTML element exists on the page (**Developer tools**\> **Elements**), but doesn’t display on the storefront, check the browser’s **Console** for JavaScript errors. If you find the following error: “Uncaught (in promise) TypeError: Cannot read property 'getRandomValues' of Undefined”  update the store to not overwrite the window variable. On-site messaging code expects window.self property to proxy the window object as documented in the [the Window: self property documentation in MDN](https://developer.mozilla.org/en-US/docs/Web/API/Window/self). You can also try to debug this error by entering window.self in your browser’s **Developer tools**\> **Console**. The window.self property is expected to return data as shown below, which you can test in the browser's console at [](https://klarnastore.myshopify.com/). ``` javascript Window {parent: Window, opener: null, top: Window, length: 1, frames: Window, …} ``` ![klarna docs image](5e4ab062-e23b-48be-938b-79cf5e143b7c-shopify-skosm-window-self.jpeg)image ### SameSite attribute cookie browser warnings in the app preview These warnings can be ignored in the app preview; only warnings in your storefront should be reviewed. These warnings are due to cookies not set by this app, so these warnings can’t be resolved by the app. Below is a copy of the error message for reference: - A cookie associated with a cross-site resource at was set without the \`SameSite\` attribute. A future release of Chrome will only deliver cookies with cross-site requests if they are set with \`SameSite=None\` and \`Secure\`. You can review cookies in developer tools under Application\>Storage\>Cookies and see more details at [](https://www.chromestatus.com/feature/5088147346030592) and [](https://www.chromestatus.com/feature/5633521622188032)." ![klarna docs image](58f31f4e-adde-40cc-b79a-2a186a7cb266_-hopify-skosm+same-site-cookie.jpeg)image ### “Warning: This Ad Position may not work..." message in preview If the error following error appears in preview: "Warning: This Ad Position may not work, as it was not found when the page was loaded initially.” it’s possible that the JavaScript library was [lazy loaded](https://developer.mozilla.org/en-US/docs/Web/Performance/Lazy_loading), which isn’t compatible with the Klarna OSM Shopify app. ## Known Constraints Some incompatibilities can affect the Klarna On-site messaging in your Shopify store. Below you will find examples of known incompatibilities. ### Known incompatibilities The following libraries, apps, and features are incompatible with the Klarna On-site messaging (OSM) Shopify app as they either block the preview of the storefront page within the app or block the storefront functionality of the app: - [instantclick.io](http://instantclick.io)  - [fastclick](https://www.npmjs.com/package/shopify-fastclick) - [Locksmith (app or script)](https://apps.shopify.com/locksmith) - [](https://www.filamentgroup.com/code) - [Core Web Vitals Booster](https://apps.shopify.com/superspeed-your-store-faster) - some RECAPTCHA apps - page counters - quick view product modal page overlays, as described in [this article](https://archetypethemes.co/blogs/streamline/why-don-t-my-apps-work-in-quick-view) - lazy loading of JavaScript as the app’s functionality requires its JavaScript library to not being lazy loaded - Several compliance tools, such as Termly. ### Discount on Cart Pro The [Discount on Cart Pro Shopify app](https://apps.shopify.com/discount-on-cart-pro) updates a klarna-placement HTML element’s data-purchase-amount attribute based on items in the cart. When the items in the cart don’t match the product page, data-purchase-amount doesn’t match the product price, causing On-site messaging price to be inaccurate. For additional debugging, you can get logging by adding the URL parameter ?docp-test-log. ### Theme incompatibilities The Klarna OSM Shopify app relies on Shopify standard use of certain theme variables, such as the product and template variables. If a theme’s code overwrites these variables in a non-standard manner, the theme isn’t compatible with Klarna On-site messaging. For example, this can happen if a liquid file contains either of the following lines of JavaScript code: {%- assign product = null -%} or {%- assign template = template.name \| handle -%} ### GemPages [GemPages](https://help.gempages.net/articles/introduction-to-gempages) doesn't generally offer a standard CSS selector that can be used across product pages for this app to inject the klarna-placement HTML element. Because of that, themes built using GemPage may require [manual coding](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/manual-osm-shopify-integration.md) until GemPages supports Shopify's Online store 2.0 app blocks. ## Known limitations ### Multi-currency support in the Klarna On-site messaging Shopify app As Klarna payments as a direct alternative payment integration can only accept orders in the store’s base currency (which is a Shopify restriction for alternative payment methods per [Known issues](https://docs.klarna.com/platform-solutions/shopify/payments/klarna-payments/known-constraints)), the messaging is hidden when the selected currency doesn’t match the store’s base currency when using standard currency switcher functionality. ### Adding on-site messaging to mini-carts or pop-out carts If your store's theme supports mini-cart as HTML, on-site messaging can work for mini-carts. To learn how to check if you can add placements to the mini-cart, refer to the [Troubleshooting section of this documentation](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/troubleshooting). ### Does the app configuration work in the Safari browser? Yes, the Klarna On-site messaging Shopify app admin works on the Safari browser within the Shopify store admin. ### The app’s not working on a phone, tablet, Chromebook, or other device Device manufacturers don’t provide infinite support and operating system upgrades. After manufacturers stop providing operating system upgrades, the web browsers aren’t always kept up-to-date and remain on an older version compatible with the device. While we make every effort to support as many browsers and platforms as possible, we unfortunately can’t provide support for these outdated browsers without providing a worse experience for users of more recent browsers. If the Klarna On-Site Messaging Shopify app doesn’t work on your device, make sure you have upgraded the operating system to the latest version. If the Klarna OSM Shopify app still doesn’t work, your device may not support modern web browser features. ### Does the app support App Blocks within Online Store 2.0 theme architecture? Yes, App Blocks are now supported by the Klarna On-site messaging within the app, but the Vintage option is still available for any theme. For more information about Shopify's Online Store 2.0, refer to the [Theme architecture versions article](https://help.shopify.com/en/manual/online-store/themes/managing-themes/versions) in Shopify's documentation. ### Supporting multiple Klarna merchant IDs for a single store Currently, the Klarna On-site messaging Shopify app only supports connecting a store with a single Klarna merchant ID, which you can do in your store’s **Shopify admin**\> **Settings**\> **Apps**\> **Klarna On-Site Messaging**.  Some Klarna for Shopify integrations, for example, [Global-e](https://www.global-e.com/klarna-partnership), can support multiple Klarna MIDs. As an alternative, you can [manually integrate Klarna On-site messaging with your store](https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/manual-osm-shopify-integration.md). --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/payments/uninstall-klarna-from-shopify.md # Uninstall Klarna from Shopify ## You can remove the Klarna payment method in Shopify store settings. To remove Klarna from your Shopify checkout, deactivate the alternative payment method in **Shopify admin**\> **Settings**\> **Payments**. After deactivating a payment method, you’re given the option to remove the corresponding payments app, but we don’t recommend removing the app until all Klarna orders have been finalized. The app supports order management updates, for example refunds, from Shopify to Klarna. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/shopify/conversion-boosters/uninstall-osm-shopify-app.md # Uninstall the Klarna On-site messaging Shopify app ## This article outlines how you can remove the Klarna On-site messaging Shopify app from your store. If you no longer want to use the Klarna On-site messaging (OSM) Shopify app in your store, do the following to remove all inserted code for your store: 1. Disconnect the account from the Klarna OSM Shopify app in **Shopify admin**\> **Settings**\> **Apps**. 2. Delete the app from **Shopify admin**\> **Apps** as shown on the screenshot below. ![ Uninstalling the Klarna On-site messaging app from a Shopify store.](befe5bc6-3443-479d-9bb1-159732f3bda6-shopify-skosm-delete-app.jpeg) *Uninstalling the Klarna On-site messaging app from a Shopify store.* Deleting the Klarna OSM Shopify app removes all code from your store. You can confirm the code is deleted by viewing the HTML source and searching for the following code elements: - To check that the JavaScript libraries loaded in your store have been deleted, search for the `asyncLoad` function in the source code. - To check that the placement code has been deleted, search for the `klarna-placement` HTML element in the source code. If you already removed the Klarna On-site messaging Shopify app, but the `KlarnaThemeGlobals` code was not removed from your theme (if added to your theme prior to 2022-Dec-13), you can manually remove it from the `theme.liquid` file in your **Shopify admin**\> **Sales channels**\> **Online Store**\> **Themes**\> **…**\> **Edit code**. --- # Source: https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/united-kingdom.md # Partner marketing legal guidelines - United Kingdom ## Ensure your UK marketing complies with Klarna’s legal guidelines by using clear, responsible messaging, adhering to FRN and T&Cs, and avoiding language that could promote irresponsible borrowing. Important: Update to Klarna’s Firm Reference NumberKlarna Financial Services UK Ltd is now authorised by the FCA as an Electronic Money Institution (EMI) under FRN 1021834, replacing our previous FRN 987816. ​To remain compliant please ensure you update all FRN references in all consumer-facing touchpoints - including websites, social content, checkout messaging, and legal disclosures. For Klarna’s UK specific Terms and Conditions please visit: [](https://www.klarna.com/uk/terms-and-conditions/) **Keep it simple**. Don’t lose a customer because the payment instructions were too complicated, but do make it clear what you are offering. **Stand out for the right reason.** Highlight the payment option you offer, but be sure to be clear, fair and not misleading. **Be sensitive to the situation.** Consider what is going with your customers and in the wider market as a whole. Use this knowledge to decide how you promote and market Klarna in all your channels. One message does not fit all circumstances. **Don't encourage debt.** Do not encourage shoppers to spend outside of their means. Using phrases such as *‘strapped for cash?’*, *‘don’t wait until payday’* or *‘broke AF’* are unacceptable and irresponsible. You have an obligation to ensure your customers stay financially healthy. **Make sure your ads are socially responsible to consumers and society.** Offers or benefits should not be linked to credit marketing which are likely to make the credit offer attractive. ​*Klarna may review and monitor your advertising and marketing of Klarna's products and services, including through automated means, to ensure your marketing complies with applicable laws, rules, and regulations.* --- # Source: https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/united-states.md # Partner marketing legal guidelines - United States ## Ensure your Klarna advertisements are clear, compliant, and legally sound by following essential guidelines for transparency and consumer protection. For Klarna’s US specific Terms and Conditions, and legal agreements please visit: - [](https://www.klarna.com/us/terms-of-use/) - [](https://www.klarna.com/us/legal/) ## The basics for advertising Klarna **Keep it simple.** Don’t lose a customer because the payment instructions were too complicated, but do make it clear what you are offering. **Stand out for the right reason.** Highlight the payment option you offer, but be sure to be clear, fair and not misleading. **Be sensitive to the situation.** Consider what is going with your customers and in the wider market as a whole. Use this knowledge to decide how you promote and market Klarna in all your channels. One message does not fit all circumstances. **Don't encourage debt.** Do not encourage shoppers to spend outside of their means. Using phrases such as *‘strapped for cash?’*, *‘don’t wait until payday’* or *‘broke AF’* are unacceptable and irresponsible. You have an obligation to ensure your customers stay financially healthy. **Make sure your ads are socially responsible to consumers and society.** Offers or benefits should not be linked to credit marketing which are likely to make the credit offer attractive. ​*Klarna may review and monitor your advertising and marketing of Klarna's products and services, including through automated means, to ensure your marketing complies with applicable laws, rules, and regulations.* ## Key information for advertising Klarna's products in the US These guidelines are meant to provide details so that you can use **pre-approved assets**, **provided disclosures** easily, and so that you have a **high level overview** of important guideposts when you are advertising Klarna's financial products in the US. **YOU ARE LEGALLY RESPONSIBLE FOR THE CONTENT OF ADVERTISING THAT YOU CREATE.** **THESE GUIDELINES DO NOT CONSTITUTE LEGAL ADVICE. PLEASE CONFER WITH YOUR INDEPENDENT LEGAL COUNSEL FOR ANY LEGAL ADVICE ON THE COMPLIANCE OF YOUR ADVERTISING.** ### The basics of disclosures When advertising financial products, it is important that you make the right disclosures so that consumers can easily understand what is being advertised. You MUST include the disclosure. It MUST be easy for consumers to see. If you cannot put the disclosure directly next to the messaging, it must be on the same page using a reference text or reference symbol, or one click away using a hyperlink. Disclosures inform customers of actually available terms, they must be clear and conspicuous, they must be legible—no one should have to squint to read them: 8 pt. font size minimum is usually sufficient and contrast text with background color for full visibility. #### What if there is no space for a disclosure? If disclosures are separate from the messaging they modify, you need to connect the messaging and the disclosure together with one of the following: - **Hyperlink:** Learn more. - **Reference text:** See footer for details. - **Reference Symbol or footnote: (e.g., \*,†, 1)** If using a reference symbol or footnote, the claim ends with the reference symbol and the disclosure begins with the same reference symbol. See www.klarna.com for examples. For information on what disclosures you need to use and when to use them: - Please review the [BNPL Promotion Rules 101](https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/united-states/bnpl-promotion-rules-101/) page if you are advertising Pay in 4 or Pay in 30. - Please review the [Financing Guideline](https://docs.klarna.com/resources/marketing-tools/partner-marketing-legal-guidelines/united-states/regulated-financing-promotion-rules-101/) if you are advertising financing. ### Social media disclosures If you use social media influencers, bloggers, or other third parties to advertise Klarna and your business, there is more you need to know! When social media influencers, bloggers, or other individuals receive any type of payment to endorse or otherwise mention a product (called an “endorsement”), they are required to disclose the existence of the relationship on the post where the endorsement was made. The Federal Trade Commission (FTC) has released a guide you can share with bloggers that explain in plain language when and where they need to make disclosures [here](https://www.ftc.gov/system/files/documents/plain-language/1001a-influencer-guide-508_1.pdf). There is also more information available to social media influencers and bloggers [here](https://www.ftc.gov/tips-advice/business-center/guidance/disclosures-101-social-media-influencers). When social media influencers and bloggers endorse Klarna’s products, they are endorsing a financial product. Therefore, they need to do two things. - **First**, they need to disclose their relationship with you and Klarna. There are many ways to do that, but the FTC has provided easy-to-understand guidelines that you can share with your social media influencers [here](https://www.ftc.gov/system/files/documents/plain-language/1001a-influencer-guide-508_1.pdf). - **Second**, they need to include required disclosures on their post or provide a link to more details so that the required disclosures related to the advertising are only one click away from the post. ### Klarna educational page (Klarna website landing page) You should always have a Klarna FAQ educational page on your site. This page will educate your customers about Klarna’s products and will include required disclosures. Your Klarna educational page can be automatically generated using Klarna’s [On-Site Messaging](https://docs.klarna.com/conversion-boosters/on-site-messaging/additional-resources/placements/?q=on-site). ## Consumer protection laws In addition to what we have covered so far, your advertising must also follow all of the laws that apply to financial advertising and advertising generally. This section summarizes key laws and regulations. #### A. Unfair, Deceptive, or Abusive Acts or Practices (UDAAP) Unfair, deceptive, or abusive acts and practices can cause significant financial injury to consumers, erode consumer confidence, and undermine the financial marketplace. UDAAP was established to prevent consumer harm by misleading or deceitful actions. There are both federal and state UDAAP laws and regulations. **What you need to do.** - Include all relevant information. - Be clear. - Be easy to understand. - Don’t create a false sense of urgency (e.g., Act Now!) - Don’t encourage debt. - Be honest. What else you need to know. - **Disclosures don’t eliminate UDAAP risk** - disclosures provide additional context. They do not negate misrepresentations, omissions, or other deceptive statements. - **Substantiate your claims** - You have to have a factual basis underlying statements about any product. - **You have to honor promotions & rebates** - All promotions offered must be honored, including any “risk free” trials, 0% APR financing, or money back guarantees. #### B. Fair lending Fair lending applies to the entire lifecycle of a loan, including advertisement of the credit product. The Equal Credit Opportunity Act (ECOA) is a law that requires credit products, like those offered by Klarna, to be advertised fairly to everyone. - Avoid discouraging individuals from applying. - Retailers cannot impose additional application requirements to the Klarna application process. - Target a broad demographic and do not exclude consumers based on protected demographic parameters. - While a retailer may be inherently attractive to a particular demographic, the retailer should avoid targeting advertising that references or includes Klarna's products on a prohibited basis. - Prohibited bases include **race, color, religion, national origin sex/gender identity, marital status, age (provided the applicant has the capacity to contract), and income dependency on a public assistance program.** #### C. CAN-SPAM Act The CAN-SPAM Act covers all commercial messages, which the law defines as “any electronic mail message the primary purpose of which is the commercial advertisement or promotion of a commercial product or service,” including email that promotes content on commercial websites. CAN-SPAM includes business-to-business email. The Federal Trade Commission has provided the below guidance to comply with CAN-SPAM: - **Don’t use false or misleading header information.** Your “From,” “To,” “Reply to,” and routing information—including the originating domain name and email address—must be accurate and identify the person or business who initiated the message. - **Don’t use deceptive subject lines.** The subject line must accurately reflect the content of the message. - **Identify the message as an ad.**You must disclose clearly and conspicuously that your message is an advertisement. - **Tell recipients where you’re located.** Your message must include your valid physical postal address. This can be your current street address, a post office box you’ve registered with the U.S. Postal Service, or a private mailbox you’ve registered with a commercial mail receiving agency established under Postal Service regulations. - **Tell recipients how to opt out of receiving future email from you.**Your message must include a clear and conspicuous explanation of how the recipient can opt out of getting email from you in the future. Craft the notice in a way that’s easy for an ordinary person to recognize, read, and understand. Creative use of type size, color, and location can improve clarity. Give a return email address or another easy internet-based way to allow people to communicate their choice to you. You may create a menu to allow a recipient to opt out of certain types of messages, but you must include the option to stop all commercial messages from you. Make sure your spam filter doesn’t block these opt-out requests. - **Honor opt-out requests promptly.**Any opt-out mechanism you offer must be able to process opt-out requests for at least 30 days after you send your message. You must honor a recipient’s opt-out request within 10 business days. You can’t charge a fee, require the recipient to give you any personally identifying information beyond an email address, or make the recipient take any step other than sending a reply email or visiting a single page on an Internet website as a condition for honoring an opt-out request. Once people have told you they don’t want to receive more messages from you, you can’t sell or transfer their email addresses, even in the form of a mailing list. The only exception is that you may transfer the addresses to a company you’ve hired to help you comply with the CAN-SPAM Act. - **Monitor what others are doing on your behalf.** The law makes clear that even if you hire another company to handle your email marketing, you can’t contract away your legal responsibility to comply with the law. Both the company whose product is promoted in the message and the company that actually sends the message may be held legally responsible. #### D. Guidance for phone calls or text messages. **Do not advertise Klarna's products via telephone or text unless you have first received approval from Klarna to do so.** If you advertise using phone calls or text messages, then you are subject to the Telephone Consumer Protection Act (TCPA) and the requirements of carriers. These laws and rules require prior **express written consent** to send advertising via (a) calls to traditional home, business, or wireless phones or (b) texts to wireless numbers, among **numerous other requirements**. For example, you may not contact anyone on the [national do not call registry](https://telemarketing.donotcall.gov/). The TCPA and carrier requirements are complex, and violating them comes with the potential for lawsuits and fines. You should obtain the advice of your own lawyers before sending advertising via telephone or text. ## Also follow these general compliance points **Do not use** the following terms: - *“No fees”* or similar - “*No credit checks/Application*” - “*Free*” or similar - If coupons/discounts/rewards are offered, they should be redeemable across all tender types, including Klarna. - Avoid “no money down” deferral messages when advertising Klarna as a financing option. Depending on eligibility criteria, certain customers may be asked to make a down payment at checkout. If you are ever in doubt, contact Klarna. **** --- # Source: https://docs.klarna.com/payments/after-payments/order-management/manage-orders-in-the-merchant-portal/update-an-order.md # Update an order ## Here you find the different options for updating an order in the Merchant portal. Let's say your customer contacts you to add or remove an item from their order. In this scenario, you can easily handle the order updates within the Merchant portal. You can only update the orders that you’ve partially captured or not captured at all. So you can only apply changes on the order items you haven't shipped. The main way to update an order in the Merchant portal is by editing order lines in the order details. The key updates you can make to an order are: - Adding items - Removing items - Applying discounts ## Adding items You can add to the order as many items as you need by adding a new [order line](https://portal.klarna.com?help-page=article%3Awhat-are-order-lines) per item. Doing so increases the authorized order amount based on the price of the added items. Keep in mind that when you increase an authorized amount, we run a second risk assessment on the customer. If the update is rejected, your customer has to place a new order in your online store for the new items. Only specific payment methods support increasing the authorized amount. For more information, see the [conditions for updating an order](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api/view-and-change-orders.md). ## Removing items You can remove any item from the order by deleting its corresponding order line. This action decreases the authorized order amount based on the price of the removed items. ## Applying discounts You have two ways to apply discounts to orders: - Adding a discount to the total order amount by including discount lines.  - Adding a discount to a specific item in the order by editing the item's amount. When you apply the changes, the updated amount replaces the original order amount. If you want to read more about editing order lines, see the [Help](https://portal.klarna.com?help-page=article%3Awhat-is-a-part-capture) section in the Merchant portal. The following image illustrates the order updates you can make by editing order lines in the Merchant portal. ![ Updating an order in the Merchant portal. ](640513d8-6372-4e08-8a98-f101970a8a01_Order+management_Merchant+portal_Update+order.jpeg) *Updating an order in the Merchant portal.* --- # Source: https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/other-actions/update-the-cart.md # Update the cart ## If your customer updates their shopping cart or if you make any changes to payment details, you have to update the payment session before creating an order. ## Updating the cart before authorization When the customer modifies the content of their shopping cart before authorization, you can update a payment session in two steps. 1. Send a `POST` request to the [`{apiUrl}`](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/other-actions/update-the-cart/)`/payments/v1/sessions/{sessionID}` endpoint. 2. Send a l`oad()` call to make the changes visible to your customer. ### 1: POST API request To update the payment session, send the updated order details in a `POST` request to the [`{apiUrl}`](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/other-actions/update-the-cart/)`/payments/v1/sessions/{sessionID}` endpoint. The `sessionID` path parameter must match the session identifier (`session_id`) you got in response to the [create session request](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-1-initiate-a-payment/). ``` json { "order_amount": 998, "order_tax_amount": 0, "order_lines": [{ "type": "physical", "reference": "19-315", "name": "Battery Power Pack", "quantity": 2, "unit_price": 499, "tax_rate": 0, "total_amount": 998, "total_discount_amount": 0, "total_tax_amount": 0 }] } ``` A sample request to update the details of a Klarna payments session. ### Success response If the request is successful, the Klarna payments session is updated and you'll receive a `204 No content` response. ### Error response If your request contains errors, you'll receive an error response. ``` json { "correlation_id": "6a9b1cb1-73a3-4936-a030-481ba4bb203b", "error_code": "ERROR_CODE", "error_messages": [ "ERROR_MESSAGE" ] } ``` An error response to the update session request. Here are examples of common errors with troubleshooting suggestions. You can use the value in `correlation_id` to find entries related to the request under **Logs** in the Merchant portal. | Error code | Error message | Description | |----|----|----| | `BAD_VALUE` | `Bad value: order_tax_amount` | The tax details in the request aren't aligned with [the rules for tax handling](https://docs.klarna.com/payments/web-payments/additional-resources/error-handling-and-validations/tax-handling/). | | `BAD_VALUE` | `Bad value: order_lines` | Some of the order line details don't follow our guidelines or violate API field restrictions. Refer to the [Klarna payments API reference](https://docs.klarna.com/api/payments/) for details. | | `BAD_VALUE` | `Bad value: purchase_currency` | `purchase_currency` is incorrectly formatted or doesn’t match locale. This may occur if the customer updates their billing address, causing `country` to be updated. | | `NOT_FOUND` | `Invalid session id` | The session identifier specified in the path can't be found. Make sure the value in `sessionID` has the correct value and try again. | ### 2: A load() call ​​To show the updated order details to your customer, send the updated details in a `load()` call to Klarna. ``` javascript Klarna.Payments.load({ container: "#klarna_container", payment_method_categories:[ { "asset_urls": {}, "identifier": "klarna", "name": "Pay with Klarna" } ] }, { "purchase_country": "GB", "purchase_currency": "GBP", "locale": "en-GB", "order_amount": 20, "order_tax_amount": 0, "order_lines": [{ "type": "physical", "reference": "19-402", "name": "Battery Power Pack", "quantity": 2, "unit_price": 10, "tax_rate": 0, "total_amount": 20, "total_discount_amount": 0, "total_tax_amount": 0 }] } , function(res) { console.debug(res); }) ``` A `load()` call to update the order details. ​Learn how to handle [responses to the load() call](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-2-checkout/#display-klarna-load-responses). ## Updating the cart after authorization If your customer updates the cart after the `authorize()` call, you can share updates with Klarna in two ways: - If the Klarna widget is still displayed to the customer in the browser, send a new `authorize()` call with updated details to start a new risk and fraud assessment process. In response to a successful `authorize()` call, you'll get a new `authorization_token`. Make sure to use the new token to place an order. - If your checkout solution lets the customer change the order details after payment, for example, on an order review page, you have to re-authorize the session. In this case, a Klarna widget is typically not displayed, meaning you can't authorize the purchase in the standard way with `init()`, `load()`, and `authorize()` calls. A `reauthorize()` call can handle this and any necessary customer communication in fullscreen modals. We recommend you display modals launched during re-authorization as the customer might need to provide some input to complete the purchase. --- # Source: https://docs.klarna.com/resources/legal-and-compliance/payment-solutions-guidelines/us.md # Legal and privacy (US) ## US legal & privacy guidelines for Klarna Payments: use only approved stores and clearly disclose pricing, delivery, returns, support and privacy terms. United States of AmericaWhen adding Klarna Payments to your site, you need to consider privacy and data sharing aspects, and ensure your customer-facing terms reflect the cooperation with Klarna. Please be aware that Klarna Payments may only be utilized at stores (both online and in-store) that have received prior approval from Klarna. Usage of Klarna Payments in any store not authorized by Klarna could result in an obligation to repay any claims arising from such unauthorized use. ## Terms and conditions Ensure that your terms and conditions reflect your cooperation with Klarna. ## Compliance Requirements for your website As a merchant using Klarna to transact with your customers, it is crucial to meet, among other things, legal requirements on the merchant's website to ensure transparency and compliance with applicable consumer protection laws(such as the *The Fair Packaging and Labeling Act, and Unfair, Deceptive, or Abusive Acts or Practices*). Before a customer completes its purchase on your website, you must present the following information in a clear and easily accessible manner on your website. Please note that it is not sufficient to require customers to first contact you to receive this information, nor delay providing it until after the transaction is completed. **Product or Service Description** - Provide clear, detailed, and accurate descriptions of products or services, including essential characteristics, to ensure customer understanding. If you choose to include images or videos, they must also reflect a clear and honest representation of the products. **Total Price and Payment Information** - Clearly display the total price, including taxes, fees, and any additional charges (such as delivery or customs fees), and outline payment terms and available payment methods. **Delivery and Performance Details** - Specify estimated delivery times, shipping methods, and any geographical restrictions. For services, outline the timeline for service completion. **Return and Refund Policy** - Include a clear policy for returns, refunds, and exchanges, specifying conditions, timelines, and any associated costs. - If the goods or services turn out to be faulty or do not look or work as advertised, you must offer remedies to the customer, such as repair, replacement, or refund. Clearly state in your return policy that you will cover return shipping costs for incorrect or faulty items. - Clearly outline the types of products eligible for return, any exceptions (for example, perishable goods, digital downloads, custom-made items), and any specific conditions required (for example, in original packaging, with tags attached). - Describe the steps for initiating a return, such as contacting customer support, completing an online return form, or including a printed return slip with the item. Provide return shipping instructions, including address or instructions for any return pick-up services offered. **Customer Support and Dispute Resolution** - Describe the process for resolving disputes directly through the merchant, such as submitting a complaint or request via email or an online form, and outline the expected response timeline. Provide contact information for customer support and outline any internal or third-party dispute resolution options. **Digital Content or Subscription Details (if applicable)** - For digital services, specify any limitations on functionality, compatibility, and duration of access. For contracts of fixed duration or subscriptions, specify the length and conditions for renewal and termination. **Legal Rights and Warranties** - Mention statutory warranty rights and any additional commercial guarantees if provided. **Customer Reviews and Testimonials** - Ensure all customer reviews and testimonials on your website are genuine and transparent by: - not engaging in buying, selling, writing, or publishing fake reviews, - not offering incentives for positive reviews, - not suppressing or censoring negative reviews, - disclosing any insider relationships within reviews, - avoiding the creation of company-controlled review sites that falsely appear independent, and - refraining from trading in fake social media influence indicators. **Important Notice:** Non-compliance with these requirements may significantly impact the resolution of any disputes. Adhering to the guidelines listed above is essential for maintaining trust and accountability in your dealings with customers and ensuring a favorable outcome in dispute scenarios. ​**Klarna’s Buyers Protection Policy** Do not use Klarna’s Buyer’s Protection Policy in any promotional materials or website copy as an endorsement of the quality of your goods or your store. It is intended to reassure buyers about the purchase process, not to imply any endorsement of product quality or store reputation. ## Privacy policy Ensure that your privacy policy reflects your cooperation with Klarna. For your reference, you can view Klarna’s privacy policy [here](https://cdn.klarna.com/1.0/shared/content/legal/terms/0/en_us/privacy). --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/payments/use-cases.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/payments/use-cases.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/payments/use-cases.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/payments/use-cases.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/payments/use-cases.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/payments/use-cases.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/payments/use-cases.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/payments/use-cases.md # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/sap-commerce-cloud/payments/use-cases.md # Use Cases on SAP Commerce Cloud ## This section outlines the capabilities of Klarna Payments, covering pre-purchase messaging, flexible order placement, efficient order management, and secure settlement options like Virtual Card Numbers, enhancing both customer experience and operational workflows. Klarna Payments integration with SAP Commerce streamlines payment processes with features like On-site Messaging, dynamic payment options, and robust order management. Whether enhancing the pre-purchase experience, managing pending orders, or leveraging Virtual Card Numbers for secure settlements, Klarna offers tailored solutions to meet diverse business needs. This ensures a smooth checkout experience for your customers and operational efficiency for your business. ### Pre-purchase experience #### **Use Case: Display Klarna Upstream on the Website Before Payment** The Klarna integration supports configuring and displaying On-site Messaging (OSM) placements on product display pages and the cart page. This includes back-office configuration to enable default themes or customized themes set up by the merchant in the Klarna Merchant Portal. For detailed instructions, refer to the "*Klarna On-site messaging installation*" section. ### Order placement via Klarna Payments The Klarna extension can be configured by the storefront to enable specific payment methods by Klarna market. The relevant Klarna configuration is stored by a specific payment config ID, which can be attached to the respective Base-store configuration for the relevant storefront. For detailed instructions, refer to the "*Activating Klarna Payments*" section. #### **Use Case: Billing Address Collection from Address Forms** The Klarna extension integration uses the standard form and extends it for data entered by the end-user during the SAP Commerce checkout process. The form data updates support both billing and shipping addresses. The address forms are customized to align with the required information for respective Klarna markets. Any person identifiable data is sent to Klarna once the customer authorizes and pays with a Klarna payment method. Additional data may be requested in a widget (Klarna modal) as part of the payment method authorization, depending on the market and Klarna product. #### **Use Case: Update Basket** The Klarna extension integration ensures that updates made to the cart are applied to the Klarna payment session. Updates to the cart that trigger a Klarna session update will lead to re-authorization when the customer checks out with a Klarna payment method. Any additional authorization will return an updated authorization token for the new cart amount. #### **Use Case: Management of Klarna Decline - Recoverable** The extension handles Klarna authorization declines gracefully. If a payment method is declined with a recoverable error, the payment methods are displayed again, and the customer is redirected to the payment method selection step. The customer has the option to update their details and re-select Klarna payment methods (e.g., Response: `show_form: false`, `approve: true`). #### **Use Case: Order Creation** Upon submission from the payment page, an authorization token is received from Klarna using a client-side authorization call. Using this authorization token, an order is created at Klarna by calling the create order API from SAP Commerce. The Klarna order is created just before the order creation in SAP Commerce and after authorization. Payment transaction entries are created for Klarna Authorization (`PaymentTransactionType AUTHORIZATION`) and Klarna Order Creation (`PaymentTransactionType KLARNA_ORDER_PLACED`). #### **Use Case: Pending Orders** The extension supports processing pending order statuses when the functionality is enabled. Pending order statuses are returned to the configured merchant notification URL, such as `FRAUD_RISK_ACCEPTED`, `FRAUD_RISK_ACCEPTED`, and `FRAUD_RISK_REJECTED`. The order fraud status is verified using the Order Management API. The order process is suspended until the application receives a pending order update from Klarna. For example, if the notification URL receives an update with the status `FRAUD_RISK_ACCEPTED`, then order processing will resume. #### **Use Case: Confirmation Email** The extension enables the sending of order confirmation emails with a “*Paid by Klarna*” message in the email body. Additional information regarding the Klarna App and customer support links are included for customers to find more information about the payment process and status. For more details, refer to the "*Modifying the Order Confirmation Email*" section. ### Order Management #### **Use Case: Post Purchase Update - Shipment of Goods / “Capture” / “Card Settlement”** The extension does not support capture, cancellation, or other post-order placement use cases out of the box. These use cases can be enabled or extended using the `klarnapaymentapi` extension, which includes support for the Klarna Payment and Order Management API. For reference, a sample capture implementation is provided as part of the accelerator fulfillment under the `TakePaymentAction`. #### Card Settlement Using Virtual Card Number (VCN) If standard order management is not feasible for a Klarna integration, Klarna’s merchant card service-based virtual card solution may be utilized. When an order is settled via the Virtual Card-based settlement approach, the merchant must work with their Payment Service Provider (PSP) in collaboration with the Klarna Merchant Success team to ensure proper handling of VCN-based settlement post-purchase use cases. This option can be enabled via the backoffice Klarna configuration attribute “*VCNEnabled*.” By default, this option is disabled. When a customer places an order that is created and accepted by Klarna, the add-on integration creates a virtual card-based settlement using the Merchant Card Services (MCSv3) API and creates an order in SAP Commerce. Once a settlement has been created (virtual card returned), the merchant platform can authorize the virtual card until the Klarna order is valid. Once the order has been fulfilled, the card funds should be captured. For delays in capture or other special use cases, please consult with the Klarna Key Account Manager in advance. While Klarna is the original payment method for the order, the order amount will be settled with a virtual card instead of a direct bank account transfer. A virtual card settlement request is triggered for new orders or those with a pending status resolved to `FRAUD_RISK_ACCEPTED`*.* An order placed with VCN settlement will have VCN-specific data persisted in payment info. If a Klarna order has a `fraud_status` of `PENDING`, no actions will be taken on the order until Klarna sends a push notification to update the fraud_status to `FRAUD_RISK_ACCEPTED`. Once updated, the virtual card issued for the order can only be authorized successfully once for a given merchant ID, ensuring secure transaction processing. This mechanism provides enhanced protection and compliance during order settlement. --- # Source: https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/before-you-start/user-guide.md # User guide for Salesforce Commerce Cloud ## Cartridge Upgrade Regular updates to our cartridge code include bug fixes, performance enhancements, security patches, and new features. Staying up to date with these changes is essential for maintaining compatibility, security, and optimal functionality of your integration. Follow these steps to upgrade your custom code with the latest version of our cartridge: **Review Release Notes** Start by reviewing the [release notes](https://docs.klarna.com/platform-solutions/e-commerce-platforms/salesforce-commerce-cloud/before-you-start/changelog.md) for the latest version of the cartridge. The release notes outline changes, improvements, and any potential compatibility considerations associated with the upgrade. **Assess Custom Code Changes** Identify any customizations or modifications you have made to the SFCC cartridge code in your custom files. These may include storefront customizations, controller adjustments, or custom business logic built on top of our cartridge. **Backup Custom Files** Before proceeding with the upgrade, ensure that you have a backup of your custom files, including any modifications made to the SFCC cartridge code. This backup will serve as a safety net in case any issues arise during the upgrade process. **Compare Code Differences** Use a version control system or a file comparison tool to compare the differences between your custom code and the latest version of the SFCC cartridge code. Pay close attention to areas where changes have been made to ensure compatibility and maintain functionality. **Update Integration Code** Integrate the latest version of the SFCC cartridge code into your custom files, replacing any outdated or deprecated code with the new implementations. Follow the migration guides and best practices provided to ensure a smooth transition. **Test and Validate** After updating your custom code, thoroughly test the integration to ensure that all functionality works as expected. Test various scenarios, including user interactions, data processing, and third-party integrations, to identify any potential issues or regressions. **Address Compatibility Issues** If you encounter any compatibility issues or conflicts with your existing custom code, troubleshoot and resolve them accordingly. Consult our support resources or reach out to our team for assistance in addressing compatibility concerns. **Deploy Changes** Once you are satisfied with the upgrade and have validated its functionality, deploy the changes to your production environment. Monitor the integration closely following deployment to ensure ongoing stability and performance. ## Roles and Responsibilities There are no recurring tasks required by the merchant. Once configurations are set up, the functionality runs on demand. ## Storefront Functionality When Klarna is set up, Klarna Payment options and iframe widgets will be shown on the billing step. All SFCC out-of-the-box (OOTB) checkout functionality remains in place, such as: - Cart updates during checkout - Checkout with applied coupon(s) code(s) - Checkout with applied product-level promotion - Checkout with applied order-level promotion - Checkout with applied shipping-level promotion - Checkout with applied order-level promotion with a bonus product To use Klarna's payment options on the billing step of the checkout process: 1. Select one of Klarna's payment options as the payment method. 2. Click the “Next: Place Order” button. ![ Payment Options on Checkout](Zwe6lIF3NbkBXKKT_sfcc-PaymentOptionsonCheckout.jpeg) *Payment Options on Checkout* 3\. The Klarna authorization process begins and the pop up is triggered. ![The Klarna popup](Zwe6woF3NbkBXKLs_sfcc-KlarnaPopUpScreen.jpeg) *The Klarna popup* 4\. On the Review step click on “Place Order” button. ![Place order button in SFCC](Zwfc_4F3NbkBXMVr_sfcc-PaymentReviewScreen.jpeg) *Place order button in SFCC* 5\. The customer’s browser is sent to the `redirect_url` and immediately thereafter shown the Commerce Cloud Order Confirmation page. ![SFCC confirmation page.](ZwfdSYF3NbkBXMV6_sfcc-OrderConfirmationPage.jpeg) *SFCC confirmation page.* 6\. The newly created order can be inspected in Business Manager. ![SFCC business manager](ZwfdeIF3NbkBXMWF_sfcc-OrdersListinBM.jpeg) *SFCC business manager* - The Klarna Payments order ID can be inspected in the attributes tab of the order. ![Order attributes in SFCC](Zwfd_4F3NbkBXMWf_sfcc-OrderAttributes.jpeg) *Order attributes in SFCC* - The payment method details can be inspected on the Payment tab of the order, and it should be `KLARNA_PAYMENTS`. ![ Order payment details](Zwfj5YF3NbkBXMmX_sfcc-OrderPaymentDetail.jpeg) *Order payment details* - The order can be further inspected in Klarna Merchant Portal. ## SFRA 6 users To continue using the Klarna plugin with SFRA version 6, please update the following files and build as usual: **`package.json`** ``` json { "init": [], "name": "klarna", "version": "24.4.0", "description": "Salesforce Commerce Cloud | Klarna Payment Integration", "main": "Gruntfile.js", "dependencies": { "css-loader": "^0.28.11", "eslint": "^3.2.2", "eslint-config-airbnb-base": "^5.0.1", "eslint-plugin-import": "^1.12.0", "eslint-plugin-sitegenesis": "~1.0.0", "node-sass": "^4.11.0", "postcss-loader": "^2.1.5", "proxyquire": "1.7.4", "sass-loader": "^7.1.0", "sgmf-scripts": "^2.3.0", "stylelint": "^7.1.0", "stylelint-config-standard": "^12.0.0", "stylelint-scss": "^1.3.4", "mocha": "^5.2.0", "chai": "^3.5.0", "chai-subset": "^1.5.0", "request-promise": "^4.2.2" }, "scripts": { "test": "sgmf-scripts --test test/unit/**/*.js", "test:integration": "sgmf-scripts --integration 'test/integration/**/*.js'", "compile:scss": "sgmf-scripts --compile css", "compile:js": "sgmf-scripts --compile js", "build": "npm run compile:js && npm run compile:scss", "lint": "npm run lint:css && npm run lint:js", "lint:css": "sgmf-scripts --lint css", "lint:js": "sgmf-scripts --lint js", "upload": "sgmf-scripts --upload", "uploadSG": "sgmf-scripts --uploadCartridge int_klarna_payments && sgmf-scripts --uploadCartridge int_klarna_payments_controllers && sgmf-scripts --uploadCartridge int_klarna_payments_pipelines", "uploadSFRA": "sgmf-scripts --uploadCartridge int_klarna_payments_sfra", "uploadCartridge": "npm run uploadSG && npm run uploadSFRA", "watch": "sgmf-scripts --watch", "watch:static": "sgmf-scripts --watch static" }, "author": "Alexander Gaydardzhiev", "contributors": [ { "name": "Ivan Zanev", "email": "Ivan.Zanev@tryzens.com" }, { "name": "Nikolay Kunev", "email": "Nikolay.Kynev@tryzens.com" }, { "name": "Antonia Dimitrova", "email": "Antonia.Dimitrova@tryzens.com" }, { "name": "Tihomir Ivanov", "email": "Tihomir.Ivanov@tryzens.com" }, { "name": "Rumyana Topalska", "email": "Rumyana.Topalska@tryzens.com" } ], "license": "", "packageName": "int_klarna_payments_sfra", "paths": { "base": "../storefront-reference-architecture/cartridges/app_storefront_base/" } } ``` **`webpack.config.js`** ``` javascript /* globals cat, cd, cp, echo, exec, exit, find, ls, mkdir, rm, target, test */ 'use strict'; require( 'shelljs/make' ); var path = require( 'path' ); var ExtractTextPlugin = require( 'sgmf-scripts' )['extract-text-webpack-plugin']; var cartridgePath = './cartridges/int_klarna_payments_sfra/cartridge/'; module.exports = [{ mode: 'production', name: 'js', entry: { 'klarnaPayments': path.join( __dirname, cartridgePath + '/client/default/js/klarnaPayments.js' ), 'klarnaOsm': path.join( __dirname, cartridgePath + '/client/default/js/klarnaOsm.js' ), 'klarnaExpressButton': path.join( __dirname, cartridgePath + '/client/default/js/klarnaExpressButton.js' ), 'klarnaMiniCart': path.join( __dirname, cartridgePath + '/client/default/js/klarnaMiniCart.js' ), 'klarnaSubscriptions': path.join(__dirname, cartridgePath + '/client/default/js/klarnaSubscriptions.js'), 'klarnaExpressCheckout': path.join(__dirname, cartridgePath + '/client/default/js/klarnaExpressCheckout.js'), 'klarnaExpressMiniCart': path.join(__dirname, cartridgePath + '/client/default/js/klarnaExpressMiniCart.js'), 'klarnaSignIn': path.join(__dirname, cartridgePath + '/client/default/js/klarnaSignIn.js') }, output: { path: path.resolve( cartridgePath + './static/default/js/' ), filename: '[name].js' }, optimization: { // We no not want to minimize our code. minimize: true } }, { mode: 'production', name: 'scss', entry: { 'klarnaPayments': path.join( __dirname, cartridgePath + '/client/default/scss/klarnaPayments.scss' ), 'klarnaExpress': path.join( __dirname, cartridgePath + '/client/default/scss/klarnaExpress.scss' ), 'klarnaSignIn': path.join( __dirname, cartridgePath + '/client/default/scss/klarnaSignIn.scss' ) }, output: { path: path.resolve( cartridgePath + './static/default/css/' ), filename: '[name].css' }, module: { rules: [{ test: /\.scss$/, use: ExtractTextPlugin.extract( { use: [{ loader: 'css-loader', options: { url: false, minimize: true } }, { loader: 'postcss-loader', options: { plugins: [ require( 'autoprefixer' )() ] } }, { loader: 'sass-loader', options: { includePaths: [ path.resolve( 'node_modules' ), path.resolve( 'node_modules/flag-icon-css/sass' ) ] } }] } ) }] }, plugins: [ new ExtractTextPlugin( { filename: '[name].css' } ) ] }]; ``` --- # Source: https://docs.klarna.com/payments/web-payments/additional-resources/error-handling-and-validations/validations-in-kp.md # Validations in the payment process ## Here you find information on the validations that occur throughout the payment process. Different data validations occur in the three steps of the payment process: 1. [Initiate a payment](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-1-initiate-a-payment.md). 2. [Check out](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-2-checkout.md). 3. [Create an order](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-3-create-an-order.md). ## Validations when initiating a payment When initiating a payment, the Klarna Payments API uses the request payload to validate the attributes of the created session. We validate that: - `locale` and `purchase_country` are aligned - `tax` is aligned to the standards in the [Handle tax article](https://docs.klarna.com/payments/web-payments/additional-resources/error-handling-and-validations/tax-handling.md) - value types and restrictions on specific fields are aligned to the guidelines in the  [API documentation](https://docs.klarna.com/api/payments/). ### Validations when updating the cart When [updating the cart](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/other-actions/update-the-cart.md), the Klarna payments API takes any updated data as a new session to validate. ## Validations when checking out When [getting the authorization](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-2-checkout.md), the `authorize()` call triggers a risk and fraud assessment on Klarna’s side. In this step, we check that the address fulfills all country standards and exists in the records of that specific country. If this information is broken, the validation fails. If any address field - in either billing or shipping - is incorrect, you get an error message specifying what field is failing. ## Validations when creating an order When creating an order, we validate the data against the most recent purchase and customer information you send us. This applies to both scenarios, [recurring and one-time payments](https://docs.klarna.com/payments/web-payments/before-you-start/what-is-klarna-payments.md). By considering the last payload you send, we ensure that both yours and our side keep the most updated data. We validate the following: - the billing and shipping address objects are the same when creating an order and getting authorization. Any difference makes the order invalid - the order lines in the payload are the same when creating an order and getting authorization. This object is treated as a list. If the data shared when creating an order matches the data shared when getting authorization and no other details have been added in between, the validation is successful. If you share customer details up until creating an order but not when getting authorization, an empty payload matches the customer data you are sending, and the validation is successful. --- # Source: https://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api/view-and-change-orders.md # View and change orders ## Learn about the details of the calls that let you view and edit your orders. For each call, you can find a description, technical details, and sample requests and responses. ## Check the details of an order Use the Order management API to check the details of an order. When you want to check the details of an order, this API call provides you with order information like address, date, amount, purchase country, and status. ### Retrieve order details To check the order details, send a `GET` request to the `{apiUrl}/ordermanagement/v1/orders/{order_id}` endpoint. Provide the order id you want to revise as an `{order_id}` path parameter. The `order_id` is the identifier you get in a successful response when placing a new order. You can check these details for up to three years after an order is created. ### Success response In response to your call, you receive a data object containing the order details. ``` json { "order_id": "7849fd84-47dc-4919-a7ce-xxxxxxxxxx", "status": "CAPTURED", "fraud_status": "ACCEPTED", "order_amount": 200, "original_order_amount": 200, "captured_amount": 200, "refunded_amount": 0, "remaining_authorized_amount": 0, "purchase_currency": "PLN", "locale": "pl-PL", "order_lines": [ { "reference": "", "type": "physical", "quantity": 1, "quantity_unit": "", "name": "dress", "total_amount": 200, "unit_price": 200, "total_discount_amount": 0, "tax_rate": 0, "total_tax_amount": 0 } ], "klarna_reference": "20S0XXXX", "billing_address": { "given_name": "Test", "family_name": "Person-pl", "title": "", "street_address": "Ul. Górczewska 124", "street_address2": "", "postal_code": "01-460", "city": "Warszawa", "region": "", "country": "PL", "email": "customer@email.pl", "phone": "+48795222223" }, "created_at": "2022-07-08T09:48:16.680Z", "purchase_country": "PL", "expires_at": "2022-08-05T00:00:00.000Z", "captures": [ { "capture_id": "32904e4c-61d2-400e-9b77-XXXXXX", "klarna_reference": "20S0XXXX-1", "captured_amount": 200, "captured_at": "2022-07-08T09:48:17.738Z", "description": "", "order_lines": [], "refunded_amount": 0, "billing_address": { "given_name": "Test", "family_name": "Person-pl", "title": "", "street_address": "Ul. Górczewska 124", "street_address2": "", "postal_code": "01-460", "city": "Warszawa", "region": "", "country": "PL", "email": "customer@email.pl", "phone": "+48795222223" } ], "refunds": [], "initial_payment_method": { "type": "INVOICE", "description": "Pay later" } } ``` Sample of a successful response to check order details. ### Error response If the order id in your request is invalid, you get an error response. Ensure the `order_id` value you provided is correctly formatted. You can use the `correlation_id` and the `order_id` values to troubleshoot the call in the Merchant portal logs app section. ``` json { "error_code": "INVALID_ORDER_ID", "error_messages": [ "Order ID must be a valid UUID." ], "correlation_id": "dd482985-2e0f-415d-9f30-74ce93e7e68e" } ``` Sample of an error response to check order details. Ready to send this request? See the [API reference of this call](https://docs.klarna.com/api/ordermanagement/#operation/getOrder). ## Update order amount Use the Order management API to update the total amount of an order before it is captured, canceled, or expired. When your customer contacts you to change, add, or remove a product from the order and you need to update the total order amount, this API call enables you to make the required changes. The updated amount replaces the original order amount, including the order lines if you sent them when creating an order. The following diagram depicts how this API call works: {{#mermaid: sequenceDiagram autonumber participant A as MERCHANT participant B as KLARNA A ->> B: PATCH /ordermanagement/v1/orders/{order_id}/authorization note over A, B: order_amount (required)
description (optional)
order_lines (optional) alt SUCCESSFUL B -->> A: 204: No content else ERROR B -->> A: 403: correlation_id, error_code, error_message end }} ### Conditions for updating You can only update the amount if the order meets the following conditions: - The order isn’t fully captured, canceled, or expired. - For increasing an authorized amount, we run a second risk assessment or credit lookup on the customer. If the update is rejected following the assessment, your customer has to place a new order in your online store for the new items. - Only certain payment methods support increasing the authorized amount, as shown in the table below: | Supported payment method | Identifier | Available markets | |--------------------------|--------------|---------------------------------| | Pay later | INVOICE | All (excluding CH) | | Pay later | B2B_INVOICE | All (excluding CH) | | Base account | BASE_ACCOUNT | All (excluding CH) | | Pay now | DIRECT_DEBIT | All (excluding CH) | | Fixed amount | FIXED_AMOUNT | AT, DE, DK, FI, FR, NL, NO & SE | To update the order amount, send the updated order details in a PATCH request to the {apiUrl}/ordermanagement/v1/orders/{order_id}/authorization endpoint. The `order_id` is the identifier you get in a successful response when placing a new order. Include the following in your request: - order_amount (required): the new amount for the order. If you’re decreasing the order amount, this has to be less than the current authorized amount. If you’re increasing the order amount, this has to be more than the current authorized amount - description (optional): text to add details - order_lines (optional): the new order lines that will replace the existing ones ``` json { "order_amount": 6000, "description": "", "order_lines": [ { "type": "physical", "reference": "123050", "name": "Tomatoes", "quantity": 10, "quantity_unit": "kg", "unit_price": 600, "tax_rate": 2500, "total_amount": 6000, "total_tax_amount": 1200 } ] } ``` Sample request to update the order amount. We recommend you always send updated order lines to improve the customer experience. The order lines can later help your customer visualize their purchase in the Klarna app and in the invoice. The original order lines will be deleted if you don't send order lines in this call. ### Success response If the request is successful, the order amount is updated, and you'll receive a `204 No content` response. ### Error response If your request contains errors, you'll receive an error response. Make sure your request meets the [conditions for updating the order](https://docs.klarna.com/payments/after-payments/order-management/manage-orders-with-the-api/view-and-change-orders/#update-order-amount-conditions-for-updating) and the parameters are correct. You can use the `correlation_id` and the `order_id` values to troubleshoot the call in the Merchant portal Logs section. ``` json { "error_code": "NOT_ALLOWED", "error_messages": [ "Update not allowed." ], "correlation_id": "a3183112-74bc-44ac-9453-51af2577d717" } ``` Sample of an error response to update order amount. Ready to send this request? See the [API reference of this call.](https://docs.klarna.com/api/ordermanagement/#operation/updateAuthorization) ## Update merchant references Use the Order management API to update the order ID (merchant references). When you want to use your own order ID or make any change to the order ID we provide, you have to send an API call to update the merchant references. A merchant reference is the order number you assign to the order in your system, different from the default one we provide when creating the order. Your customers can use the merchant reference identifier to inquire about the purchase they made in your store. When you update the merchant reference, we don't create a new Klarna `order_id.` The merchant reference is the `order_id` from your system. To update the merchant references, send the updated references in a `PATCH` request to the `apiUrl}/ordermanagement/v1/orders/{order_id}/merchant-references`. The `order_id` is the identifier you get in a successful response when placing a new order. ``` json { "merchant_reference1": "15632423", "merchant_reference2": "special order" } ``` Sample request to update merchant references. You can update one or both references (`merchant_reference1` and `merchant_reference2`). You can also clear a reference by setting its value to "" (empty string). You can use either one or both merchant references. The parameter `merchant_reference1` is the order id from your system. ### Success response If the request is successful, the merchant reference is updated, and you'll receive a 204 No content response. ### Error response If your request contains errors, you'll receive an error response. Make sure the `order_id` is correct. You can use the `correlation_id` and the `order_id` values to troubleshoot the call in the [Merchant portal Logs](https://docs.klarna.com/resources/business-tools/merchant-portal-guide/payments/) section. ``` json { "error_code": "NO_SUCH_ORDER", "error_messages": [ "Order cannot be found. Merchant references cannot be updated." ], "correlation_id": "17c50e6c-c79d-4174-9369-4b58bca2d2ab" } ``` Sample of an error response to update merchant references. Ready to send this request? See the [API reference of this call.](https://docs.klarna.com/api/ordermanagement/#operation/updateMerchantReferences) ## Update customer address Use the Klarna order management API to update your customer's shipping address. When your customer wants to change their shipping address, you have to send an API request to change the address associated with that order. After you update this information, the customer undergoes another credit check. You can’t update the billing address anymore due to changes in our risk assessment. To update the customer's shipping address, send the updated addresses in a `PATCH` request to the `{apiUrl}/ordermanagement/v1/orders/{order_id}/customer-details`. The `order_id` is the identifier you get in a successful response when placing a new order. To clear a field, set its value to “” (empty string). However, you can't clear mandatory fields.  Refer to the [Order management API](https://docs.klarna.com/api/ordermanagement/#operation/updateConsumerDetails) reference to learn which fields are mandatory. ``` json { "shipping_address": { "street_address": "123 Fake St", "postal_code": "12345", "city": "New York", "region": "NY", "country": "US" } } ``` Sample request to update the customer's shipping address. ### Success response If the request is successful, the order is updated, and you'll receive a `204 No content` response. ### Error response If your request contains errors, you'll receive an error response. It can be due to our risk assessment. Also, make sure the `order_id` is correct. You can use the `correlation_id` and the `order_id` values to troubleshoot the call in the Merchant portal Logs section. ``` json { "error_code": "NOT_ALLOWED", "error_messages": [ "Billing address cannot be updated for user account order. Customer details cannot be updated." ], "correlation_id": "b1fbf280-ea6e-4aee-a6ea-58b4b458ef47" } ``` Sample of an error response to update customer address. Ready to send this request? See the [API reference of this call.](https://docs.klarna.com/api/ordermanagement/#operation/updateConsumerDetails) ## Add shipping information to order Use the Order management API to add shipping information to an order and enable delivery tracking. When you want to add shipping details to an order, you can send the shipping details after creating the order, as explained in this API call. This call can be used for a better customer experience when shipping information is available before capturing the order. By adding the shipping details on order level, you make this information available to your customers so that they can keep [track of the delivery](https://docs.klarna.com/payments/after-payments/order-management/more-actions/delivery-tracking/). To add the shipping information to an order, send a `POST` request to the `{apiUrl}/ordermanagement/v1/orders/{order_id}/shipping-info` endpoint. Provide `order_id` as path parameter. The `order_id` is the identifier you get in a successful response when placing a new order. Include the following required body parameters in your request: - `return_shipping_company`: name of the shipping company for the return shipment - `return_tracking_number`: tracking number that identifies the return shipment - `return_tracking_uri`: URL where the customer can track the return shipment - `shipping_company`: logistics company (carrier) managing the delivery. For more information, see the [carrier list.](https://docs.klarna.com/payments/after-payments/order-management/more-actions/klarna-carrier-partner-list/) - `shipping_method`: method for delivering the goods - `tracking_number`: tracking number that identifies the shipment - `tracking_uri`: URI where the customer can track their shipment ``` json { "shipping_info": [ { "return_shipping_company": "DHL US", "return_tracking_number": "93456415674545679888", "return_tracking_uri": "http://shipping.example/findmypackage?93456415674545679888", "shipping_company": "DHL US", "shipping_method": "Home", "tracking_number": "63456415674545679874", "tracking_uri": "http://shipping.example/findmypackage?63456415674545679874" } ] } ``` Sample request to add shipping information. You can add different shipping information for different items in the same call. For example, suppose a single order includes two packages associated with two different shipments and tracking numbers; in that case, you have to send the `shipping_info` details for each item. You can learn more about shipping companies in the [Carrier partner section](https://docs.klarna.com/payments/after-payments/order-management/more-actions/klarna-carrier-partner-list/). ### Success response If your request is successful, you'll receive a `204 No content` response. ### Error response If your request contains errors, you'll receive an error response. Ensure the `order_id` value you provided is valid and correctly formatted. You can use the `correlation_id` and the `order_id` values to troubleshoot the call in the Merchant Portal logs section. ``` json { "error_code": "NO_SUCH_ORDER", "error_messages": [ "Order 7849fd84-47dc-4919-a7ce-47b9f46156f cannot be found. Shipping info cannot be added to order 7849fd84-47dc-4919-a7ce-47b9f46156f." ], "correlation_id": "f072554f-ef99-4b21-85da-633355aab998" } ``` Sample of an error response to add shipping information. Ready to send this request? See the [API reference of this call](https://docs.klarna.com/api/ordermanagement/#operation/appendOrderShippingInfo). ## Cancel an order Use the Order management API to cancel uncaptured orders. When your customers don't want to proceed with the purchase and need to cancel their order before you capture it, send an API call to cancel the authorization. When you cancel the order, we release the authorized amount and you can't make further updates to the order. To successfully cancel the order, don’t capture any items listed in it. The following diagram depicts how this API call works: {{#mermaid: sequenceDiagram autonumber participant A as KLARNA participant B as MERCHANT B ->> A: POST orders/{order_id}/cancel alt SUCCESSFUL A -->> B: 204: No content else ERROR A -->> B: 403: correlation_id, error_code, error_message end }} To cancel an authorized order, send a `POST` request to the `{apiUrl}/ordermanagement/v1/orders/{order_id}/cancel`. The order_id is the identifier you get in a successful response when placing a new order. You don't need a request body for this `POST`method. ### Success response If the request is successful, the order is canceled, and you'll receive a 204 No content response. ### Error response If your request contains errors, you'll receive an error response. It can be because the order has captures or is closed. ``` json { "error_code": "CANCEL_NOT_ALLOWED", "error_messages": [ "Order has previous captures. Cancel not possible." ], "correlation_id": "95ccbcb1-8963-4569-b721-1a354" } ``` Sample of an error response to cancel an order. Make sure the `order_id` is correct. You can use the `correlation_id` and the `order_id` values to troubleshoot the call in the Merchant portal Logs section. Ready to send this request? See the [API reference of this call.](https://docs.klarna.com/api/ordermanagement/#operation/cancelOrder) ## Acknowledge your Klarna Payment orders Use the Order management API to acknowledge your Klarna Payment orders. When you integrate our \[ Klarna Payment solution\], you’ll receive a push notification anytime your customers use Klarna in your store. Upon receiving this notification, you let us know that you're aware of the order by calling our order acknowledgment endpoint. This step is required if you're integrating Klarna Payment into your online business. To verify that the notification you receive is authentic, we recommend \[ checking the order details\] before taking further action. To acknowledge an order, send a `POST` request to the `{apiUrl}/ordermanagement/v1/orders/{order_id}/acknowledge endpoint`. The `order_id` is the identifier you get in a successful response when placing a new order. You don't need a request body for this `POST` method. In case of same-day shipping, you can acknowledge your Klarna Payment orders by capturing them. ### Success response If the request is successful, you'll receive a 204 No content response. ### Error response If your request contains errors, you'll receive an error response. Make sure the `order_id` is correct. You can use the `correlation_id` and the `order_id` values to troubleshoot the call in the Merchant portal logs section. ``` json { "error_code": "NO_SUCH_ORDER", "error_messages": [ "Order 7849fd85-47dc-4919-a7ce-47b9f461562f cannot be found. Acknowledgement not possible." ], "correlation_id": "c56002ca-81ee-436a-b213-093e5afe75d3" } ``` Sample of an error response to acknowledge your Klarna Payment orders. Ready to send this request? See the [API reference of this call.](https://docs.klarna.com/api/ordermanagement/#operation/acknowledgeOrder) --- # Source: https://docs.klarna.com/payments/mobile-payments/integrate-without-mobile-sdk/android/web-checkout.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-without-mobile-sdk/ios/web-checkout.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-without-mobile-sdk/android/web-checkout.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-without-mobile-sdk/ios/web-checkout.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-without-mobile-sdk/android/web-checkout.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-without-mobile-sdk/ios/web-checkout.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-without-mobile-sdk/android/web-checkout.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-without-mobile-sdk/ios/web-checkout.md # Source: https://docs.klarna.com/payments/mobile-payments/integrate-without-mobile-sdk/android/web-checkout.md # Web Checkout - Android ## When the recommended integration approach of Klarna Mobile SDK is not possible, the guide below will guide you through how to integrate your web checkout in your mobile app without the Mobile SDK.
![Draft:android_web_checkout.png](Draft:android_web_checkout.png) *Draft:android_web_checkout.png* ![android-system-webview-opf-shield.png](android-system-webview-opf-shield.png) *android-system-webview-opf-shield.png* ![Draft:android_web_confirmation.png](Draft:android_web_confirmation.png) *Draft:android_web_confirmation.png*

Your checkout screen when Klarna is selected as payment method.

Hosted Payment Page flow starts when customer confirms to Continue with Klarna.

Your order confirmation screen after a successful payment.

#### Integration Steps - **[Prepare](https://docs.klarna.com/payments/mobile-payments/integrate-without-mobile-sdk/android/web-checkout/#prepare)**: Make sure you have a web checkout integrated with Klarna Payments. - **[Set up your app](https://docs.klarna.com/payments/mobile-payments/integrate-without-mobile-sdk/android/web-checkout/#set-up-your-app)** (Mobile App): Set up return URL to your application. - **[Present your web checkout](https://docs.klarna.com/payments/mobile-payments/integrate-without-mobile-sdk/android/web-checkout/#present-your-web-checkout)** (Mobile App): Present you web checkout using System WebView. ## Prepare This guide will lead you through all the steps required to accept Klarna Payments in your mobile app using your web integration. At the end, you will be able to accept payments with Klarna with very few native changes. Klarna still recommends Klarna Mobile SDK as first choice for Web Checkout integrations in mobile apps, [Mobile SDK WebView integrations](https://docs.klarna.com/payments/mobile-payments/before-you-start/choose-your-integration/#webview20integrations) can be utilized instead of System WebViews in such cases. This guide assumes that you already have a web checkout integrated with Klarna Payments and you intend to use it in your mobile application. If you haven't done such web integration, we suggest you to check the recommended [integration approaches here](https://docs.klarna.com/payments/mobile-payments/before-you-start/choose-your-integration/). These will also help you offer better UX and more stable integration than System WebViews. ## Set up your app ### Return URL ​Klarna purchase flows might require authorizations in other applications (e.g. bank apps) or do a handover to the Klarna app. In such cases, a return URL to your application ensures seamless return to the flow in your app, hence setting up a return URL is required. It is expected that redirects to this URL should only open your application without any changes in the UI state, ensuring the customer can continue the flow prior to external navigation. You can read more about how deep links and intent filters work [on the Android Developers site](https://developer.android.com/training/app-links/deep-linking). You can set up a Return URL app scheme for your application by registering an `intent-filter` for the Activity you integrated Klarna, in your app’s `AndroidManifest.xml`: ``` xml ``` **Important:** Construct the return URL string passed to Klarna by combining the attributes defined in your 's `` tags, following the standard URL format: `://` ``` kotlin override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) intent?.data?.let { uri -> if (uri.host == Contants.klarnaReturnUrl.host && uri.host == Contants.klarnaReturnUrl.host) { // This is a return URL for Klarna – skip deep linking return } // This was not a return URL for Klarna } } ``` The hosting `Activity` should be using `launchMode` of type `singleTask` or `singleTop` to prevent a new instance from being created when returning from an external application. As Android Custom Tabs will be shown to the customer during the flow, we require Activity set up for intent-filter to finish immediately and retain Custom Tabs on top. ``` kotlin class RedirectActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) handleRedirect(intent) } override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) handleRedirect(intent) } private fun handleRedirect(intent: Intent?) { intent?.data?.let { uri -> if (uri.scheme == "" && uri.host == "") { // Returned to Klarna from external applications, keep purchase flow presented // Call finish() if this is an empty redirect Activity // Retain current state if it's hosting the purchase flow } } } } ``` When creating a payment session, make sure you backend sets [`merchant_urls.``app_return_url`](https://docs.klarna.com/api/payments/#operation/createCreditSession!path=merchant_urls/app_return_url&t=request) to return URL set up for the app. ## Present your web checkout On Android, system WebViews are commonly implemented using [Android Custom Tabs](https://developer.android.com/develop/ui/views/layout/webapps/overview-of-android-custom-tabs). By default, Custom Tabs share cookies and session data with the device’s default browser (e.g., Chrome or Firefox). This shared session capability is essential for Klarna, as it allows us to recognize returning customers across sessions and provide a seamless checkout experience. While it's possible to disable session sharing using **[Ephemeral Custom Tabs](https://developer.chrome.com/docs/android/custom-tabs/guide-ephemeral-tab)**, we require **persistent (non-ephemeral) sessions** as this functionality enables Klarna to maintain customer context across the device. ``` groovy dependencies { implementation 'androidx.browser:browser:' } ``` ``` kotlin val customTabsIntent = CustomTabsIntent.Builder() .setEphemeralBrowsingEnabled(false) // only available in android.browser version 1.9.0 .build() customTabsIntent.launchUrl(this, sessionUrl.toUri()) // URL of your web checkout for this customer session ``` #### Redirect back to your app After the purchase is completed, Klarna payment flow will be closed and the customer will be taken back to your checkout page where you will be notified for the authorized session in your web integration. From your checkout or the confirmation page, you can choose to redirect the customer back to your application. To get the user back to your application from System WebViews, you can redirect to any `intent-filter` set for the `Activity` that you want to return to from your checkout or confirmation pages, as those will be loaded in the System WebView.
![android-system-webview-opf-shield.png](android-system-webview-opf-shield.png) *android-system-webview-opf-shield.png* ![android-system-webview-checkout-postselection.png](android-system-webview-checkout-postselection.png) *android-system-webview-checkout-postselection.png* ![android-system-webview-confirmation.png](android-system-webview-confirmation.png) *android-system-webview-confirmation.png*

Klarna purchase flow in System WebView.

Your checkout page in System WebView.

Your confirmation page in System WebView.

As you are re-using your web integration, this integration approach assumes that you have implemented order creation via the integration that exists in web. Hence, this documentation does not cover this step, if you would like to learn more about authorizing a session and creating an order in web, check out these documentations: - [Web Payments: Authorization callback](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-2-checkout/#authorization-callback) - [Web Payments: Creating an order](https://docs.klarna.com/payments/web-payments/integrate-with-klarna-payments/step-3-create-an-order/) ## What's next Klarna Mobile SDK provides a full suite of mobile-first integrations, including Klarna products like:
![Pink_Standard_Consumer_(1).png](Pink_Standard_Consumer_(1).png) *Pink_Standard_Consumer_(1).png* ![Pink_Standard_Consumer_(2).png](Pink_Standard_Consumer_(2).png) *Pink_Standard_Consumer_(2).png* ![Pink_Standard_Consumer_(3).png](Pink_Standard_Consumer_(3).png) *Pink_Standard_Consumer_(3).png*

Sign in with Klarna

On-site Messaging

Express Checkout

- **On-site Messaging**: Show contextual messaging let your customers know about the available payment options in pre-checkout: click [here](https://docs.klarna.com/conversion-boosters/sign-in-with-klarna/integrate-sign-in-with-klarna/mobile-integration/) to learn more. - **Sign in with Klarna**: Seamlessly identify and let users login via their Klarna account: click [here](https://docs.klarna.com/conversion-boosters/on-site-messaging/integrate-on-site-messaging/on-site-messaging-for-mobile/) to learn more. - **Express Checkout**: Accelerate your checkout process and boost conversion by offering a one-click checkout, click [here](https://docs.klarna.com/conversion-boosters/express-checkout/before-you-start/) to learn more. Complete your integration with - [Order management](https://docs.klarna.com/payments/after-payments/order-management/before-you-start/what-is-order-management/) - [Settlements](https://docs.klarna.com/payments/after-payments/settlements/settlement-files/) - [End-to-end testing](https://docs.klarna.com/resources/developer-tools/testing-payments/test-cases/) - [Prepare for go live](https://docs.klarna.com/resources/developer-tools/testing-payments/go-live-checklist/)
--- # Source: https://docs.klarna.com/payments/in-store-payments/before-you-start/what-is-klarna-in-store.md # What is Klarna In-store? ## Klarna Payments for physical stores brings the convenience and flexibility of Klarna's seamless payment solutions to your in-store shopping experience. ## Introduction to Scan QR Klarna In-store offers a Scan QR solution that makes Klarna's payment options available in physical stores. Klarna transactions are initiated when a merchant presents a QR code to be scanned by the customer. Currently, we offer three flavors of Scan QR: dynamic QR, static QR, and payment link for self-generated QR codes. ## Dynamic QR In the dynamic QR integration option, a merchant generates a QR code and sends it to a device placed in-store, for example, a payment terminal or a customer-facing screen. Dynamic QR is the optimal solution for: - In-store payment service providers (PSPs), acquirers, and payment gateway providers - self-checkout kiosks  - point-of-sale (POS) system providers and merchants with customer-facing screens ## Static QR If there’s no customer-facing digital device available in-store, the merchant places a printed static QR code close to the checkout. Static QR is the optimal solution for point-of-sale (POS) system providers and merchants without a customer-facing screen. A customer scans the QR code using their phone, either with the Klarna app or directly using the phone’s camera. Then, the customer completes the payment and an order is created in Klarna's systems and assigned an identifier. ## Payment link If a partner wants to customize the size and the format of the QR code, they can use a payment link to generate their own QR code. This option is a good fit with payment terminal integrations. --- # Source: https://docs.klarna.com/payments/web-payments/before-you-start/what-is-klarna-payments.md # What is Klarna payments? ## Read this article for an introduction to Klarna payments, its place in the Klarna product family, and payment scenarios it supports. Klarna payments is an omnichannel solution that lets you add Klarna as a payment method to checkout. You can offer Klarna payments to your customers by: - accepting web and in-app payments through a direct API integration - connecting your existing e-commerce platforms like Shopify, Adobe Commerce, SalesForce Commerce, and more through plug-ins - accepting in-person payments with our in-store solutions. This guide covers direct Klarna payments integration that you can complete with Klarna payments API. To offer Klarna payments in your store through a third-party platform, see our [Platform solutions](https://docs.klarna.com/platform-solutions/) section. ## Klarna as a payment method When you integrate with Klarna payments, your customers see Klarna as a payment method in your checkout. Once your customers select Klarna for their purchase, they are redirected to log into their Klarna account. We handle the Klarna account user flow and it's here where your customers select their preferred Klarna payment option (pay now, pay later, pay in parts). ## Payment scenarios Klarna payments supports payments in most checkout processes, including online stores, mobile applications, and brick-and-mortar stores. The two main payment scenarios for Klarna payments are one-time payments and recurring payments. ### One-time payments A one-time payment happens at the time of a purchase when a customer uses Klarna to pay for items in the shopping cart, virtually or in-store.  ### Recurring payments With recurring payments, a customer agrees to pay for a product or a service at the time of purchase, at a later date, or both. Depending on the payment cadence, you can use recurring payments for subscriptions and unscheduled charges. #### Subscriptions When your customer buys a subscription, they agree to pay for access to a product or a service in regular intervals, for example, monthly, quarterly, or annually. If a subscription renews automatically, Klarna processes the following payments at the beginning of each new billing cycle. Examples of subscriptions include music and video streaming services, newspapers or magazines, and subscription boxes. #### Unscheduled charges Unlike subscriptions, unscheduled charges do not occur at any regular frequency but are tied to the customer's usage of a product or service. This type of charge can also be related to another transaction and occur after that first transaction is completed. Examples of unscheduled charges include: - On-demand charges, such as scooter rentals, city bike rentals, car sharing, food delivery, and cashier-less store solutions - Incidentals, damages, and add-ons, such as speeding violation tickets or tips #### Mixed payments Allow customers to make one-time purchases and add an additional service in the checkout process. Example of this case: - Mixed basket: Includes a one-time product and a monthly subscription. - Additional charge: Includes a one-time product with an additional service charged separately. --- # Source: https://docs.klarna.com/payments/after-payments/order-management/before-you-start/what-is-order-management.md # What is Order management ## Read this article for an introduction to Order management, its main features, and its place in the Klarna solution family. Order management is a solution that lets you effortlessly handle all your orders. Within this single solution, you have control of different operations with the orders created when your customers pay with Klarna. This solution is mandatory to complete the purchase journey when you integrate our products and services, such as [Klarna payments](https://docs.klarna.com/payments/web-payments/before-you-start/what-is-klarna-payments/) or [In-store](https://docs.klarna.com/payments/in-store-payments/before-you-start/what-is-klarna-in-store/). You require Order management to execute tasks before, during, and after fulfilling the orders. You can perform basic tasks mandatory to handle orders and additional tasks to ensure a smooth customer experience and adequate support. Some basic tasks are capturing, refunding, canceling, and updating orders. To facilitate your customer's post-purchase experience, you can add shipping information to see details of the delivery status. As adequate support, you can send communications to your customer. ## Touchpoints You can handle order operations through two main touchpoints: Order management API and Merchant portal. Order management is also available if your online store uses a platform solution. Depending on your business, you can select the touchpoint that fits your needs. ### Order management API If you need to handle hundreds of Klarna orders per day and you want to manage them from your existing e-commerce platform, then you can do it through the Order management API. ### Merchant portal If you handle a few orders manually every day or if your online store is on an e-commerce system that doesn't support integrating external APIs, then the Merchant portal is the right choice.  ### Platform solutions You can also use Order management if your website runs on a third-party platform such as Shopify or PrestaShop. For more information about the integration options, see the [Integrate with Order management section.](https://docs.klarna.com/payments/after-payments/order-management/before-you-start/integration-options/) --- # Source: https://docs.klarna.com/payments/after-payments/settlements/additional-resources/which-report-type-to-choose.md # Which report type to chose? | Task | Recommended report | How to get the report | |----|------------------|---------------------| | * Transaction-level reconciliation of payments to your bank account. * Bookkeep Klarna fees | | 1. CSV Settlement Report (fully configurable) 1. Order details in your PDF settlement report for a low amount of orders 1. Settlements App -> Settlement detail page (by clicking on the payment reference) 1. JSON API | | * Merchant Portal -> Settlements App * Settlements API * SFTP | | * Overview of all captured or refunded orders in a month or any other period * Estimation of the next payout amount * Tax (VAT/GST) on the services or products sold by you to your end-costumers (consumer VAT) for a period of time | | Custom Report | * Merchant Portal -> Settlements App -> Custom Report | | Summary of all settlements towards you in a period of time | * PDF summary report * CSV summary report | | * Merchant Portal -> Settlements App * Settlements API | | Tax (VAT/GST) invoice for fees if those are being deducted from your settlement (net-settlement) | PDF Settlement Report | * Merchant Portal -> Settlements App * Settlements API * SFTP | | Tax (VAT/GST) invoice for fees if those are not being deducted from your settlement (gross-settlement) | Invoice | * Merchant Portal -> Settlements App -> Invoices * Email |