Skip to content

Klarna

Klarna is a "Buy Now, Pay Later" payment method allowing your customer to pay in installments.

Note

Make yourself familiar with our API principles to ensure a resilient integration.

Product overview

Capabilities

Klarna allows your customer to:

  • defer payment by 30 days
  • spread the cost over a period of up to 36 months (with financing)
  • pay the full amount immediately with "Pay Now" for card, local domestic or local bank transfer payments
  • spread the cost over three (four in some markets) equal interest-free installments

Klarna manages the relationship and collection of future installment payments directly with your customer. You receive full funding upfront and are protected from the risk of unpaid installments.

Note

For recurring integrations, please see Klarna (recurring).

Brand and marketing guidelines

Follow the link for the latest guidelines from Klarna.

Feature summary

Payment typeCountriesRecurringReversalsPartial reversalsDisputesAuth onlyAuth and settlement (sale)
Pay Now, Pay in Parts, Pay Later, FinancingCH, CZ, DK, AT, BE, FI, FR, DE, GR, IE, IT, NL, PT, SK, ES, GB, NO, PL, AU, CA, HU, MX, NZ, RO, SE, US
  • Refund - yes
  • Cancel - yes
  • Partial refund - yes
  • Partial cancel - no
Handled directly via Klarna. We deduct the funds if the dispute is lost.

Klarna sets transaction limits, which are regularly updated and dependent upon the merchant, payment option, and your customer's purchase history.

As a general guideline, limits typically range from 0,00 EUR to 10.000,00 EUR.

Note

Refunds are completed through Klarna, arriving in your customer's account within 365 days. You can submit multiple partial refunds for one payment.

Acceptance currencies

CurrencyCurrency codes
Czech KorunaCZK
Danish KroneDKK
EuroEUR
Norwegian KroneNOK
Polish ZłotyPLN
Pound SterlingGBP
Swedish KronaSEK
Swiss FrancCHF

Customer journey and integration options

Full page redirect - APMs API only

The simplest integration option.

Your customer is redirected from your site to Klarna’s hosted payment page to complete their payment.

You create a Klarna order using our APMs API, which returns a URL for the Klarna payment page that you redirect your customer to. After the transaction is completed, your customer is automatically redirected back to your site. You receive the payment confirmation asynchronously from us.

On completion of the payment journey, your customer receives a payment receipt from Klarna.

Klarna redirect flow
  1. Your customer chooses Klarna as their payment method.
  2. They log into Klarna (or create an account).
  3. Your customer chooses how they would like to pay (options differ per market).
  4. They set their funding source.
  5. Your customer confirms the payment.
  6. Klarna confirms that the payment is successful and returns your customer to your checkout confirmation page.

Klarna Web SDK presentation

Requires additional development effort but provides an optimized customer experience, as the entire payment process takes place within your site using Klarna’s Web SDK.

With this fully integrated checkout flow, you can dynamically display Klarna’s branding, payment descriptors, and personalized messaging on your checkout pages.

You can present the Klarna payment page in a pop-up box over your website, allowing your customer to complete payment without a full-page redirect (although this is still possible if you wish).

Klarna provides two options for integration:

  • Option 1: Klarna Web SDK + our APMs API
    You embed Klarna’s Web SDK directly into your checkout page. You create the request with our APMs API and the response is used to initialize the Klarna SDK, which then displays the payment interface on your site. You receive the payment confirmation asynchronously from us.

  • Option 2: Klarna Web SDK + Klarna API/webhooks + our APMs API
    You embed Klarna’s Web SDK in your checkout page and integrate with Klarna’s API and webhooks. You create and manage the Klarna session directly with Klarna through server-side calls. As a final step, you provide the “Klarna Network Session Token” as the providerToken to the APMs API to complete the payment.

Klarna Web SDK presentation
  1. Your customer reviews all available payment methods on your checkout page. Klarna is presented with dynamic text.
  2. They select Klarna and are presented with an illustration of a possible split. The Pay button is dynamically updated to “Pay with Klarna”.
  3. Your customer logs into Klarna (or creates an account). They choose how they would like to pay (options differ per market).
  4. Your customer sets their funding source.
  5. They confirm the payment.
  6. Klarna confirms that the payment is successful and returns your customer to your checkout confirmation page.

Supplementary purchase data

Depending on your business type or the goods you sell, you may need to provide additional transaction details, such as order line items, subscription information, or mandatory industry-specific attributes.

Providing “supplementary purchase data” with Klarna offers greater context for each transaction, increasing their underwriting accuracy and strengthening their fraud assessment. The more information you share, the better your customers' experience and the greater the chances of increased acceptance rates and enhanced fraud prevention.

You have the option to provide supplementary purchase data in two formats:

  • Option 1: You can pass specific data fields individually as structured elements within the payment request.
  • Option 2: Klarna data - You can include all necessary information encapsulated as a JSON string within the passthroughData field, using Klarna’s “Klarna Network Data for Acquiring Partners" schema.

You can also combine the two options, e.g. sending “line items” as structured data while using “Klarna network data” for specific details like event information.

You can see examples of the types of industry-specific transaction details that we support below. The "Guest" example demonstrates option 1, while the industry-specific examples demonstrate the use of Klarna data outlined in option 2.

Please note that if the same object is provided in both formats, Klarna prioritizes using “Klarna network data” for risk assessment purposes, while the structured “line items” are displayed to your customer during the Klarna purchase flow.

Get started

Use our API reference and set your headers.


Request

POST https://try.access.worldpay.com/apmPayments

Example request

application/json
{ "transactionReference": "Memory265-13/08/1876", "orderReference": "apm-order-12345", "merchant": { "entity": "default" }, "instruction": { "method": "klarna_network", "value": { "amount": 2110, "currency": "GBP" }, "narrative": { "line1": "MindPalace" }, "providerToken": "krn:network:eu1:live:session-token:eyJhbGciOiJFUzI1NiIsImtpZCI6ImNkYzM2MDFhLTBlODQtNDdjZi05ZGMwLWJjNzAxZjNkNDE2OCJ9.ewogICJwYXltZW50X3JlcXVlc3RzIiA6IFsgewogICAgImlkIiA6ICJrcm46cGF5bWVudDpldTE6cmVxdWVzdDo1MGI3NDhkZS05ZDIwLTljZWEtODVhMi1hNjZiNzFhY2JiMDMiLAogICAgInN0YXRlIiA6ICJDT01QTEVURUQiLAogICAgImFtb3VudCIgOiAxNTAwLAogICAgImN1cnJlbmN5IiA6ICJFVVIiLAogICAgImxhc3RfbW9kaWZpZWRfYXQiIDogIjIwMjYtMDQtMTNUMDc6NDk6MTYuNDYxMDQ1NTcxWiIKICB9IF0sCiAgImV4cCIgOiAxNzc2MDcwMTg2Cn0.q1xa-C_yToTpsaHyxBNfg0acp0zg6w_zpMiJOeVC3xnomwVA3SFtF0Y8Pw9J6mEBVUCOeEOh7674IzoBIvtbjQ", "paymentInstrument": { "type": "direct", "country": "GB", "billingAddress": { "firstName": "James", "lastName": "Moriarty", "phone": "00000000000", "address1": "Marylebone", "address2": "Westminster", "postalCode": "NW1 6XE", "city": "London", "state": "Greater London", "countryCode": "GB" } }, "settlement": { "auto": true }, "resultUrls": { "cancel": "https://worldpay.com/cancel", "failure": "https://worldpay.com/failure", "pending": "https://worldpay.com/pending", "success": "https://worldpay.com/success" }, "shipping": { "method": "physicalToDoor", "timeFrame": "express", "courier": { "name": "DHL", "preference": "leaveAtDoor", "signature": true, "tracked": true, "identification": true }, "firstName": "Mike", "lastName": "Shipping", "phone": "0123456789", "email": "mike.shipping@email.com", "address": { "address1": "Worldpay", "address2": "270-289 The Science Park", "postalCode": "CB4 0WE", "city": "Cambridgeshire", "state": "Cambridgeshire", "countryCode": "GB" } }, "order": { "items": [ { "productCode": "DH12-HK", "name": "Panaphonics DH12-HK & Accessories", "quantity": 1, "unitCost": 12000, "totalTaxAmount": 12000, "totalAmount": 2000, "productUrl": "http://www.merchanturl.com/products/f2ytrdmn", "imageUrl": "http://www.merchanturl.com/products/f2ytrdmn_small.jpg" }, { "productCode": "PPSD256", "name": "Panaphonics SD Card 256GB", "quantity": 2, "unitCost": 2400, "totalTaxAmount": 800, "totalAmount": 4800, "productUrl": "http://www.merchanturl.com/products/f2a8d7e34", "imageUrl": "http://www.merchanturl.com/products/f2a8d7e34_small.jpg" } ] } } }

Parameters

transactionReferencestring[ 1 .. 64 ] characters^[a-zA-Z0-9\-_/!@#$%()*=.:;?\[\]{}~+]*$required

For Bizum transaction please follow this extra regex [a-zA-Z0-9]{4,12}

orderReferencestring[ 1 .. 64 ] characters^[a-zA-Z0-9\-_/!@#$%()*=.:;?\[\]{}~+]*$

A reference that you can apply to one or more payments according to your business needs. You may reuse the same reference across multiple payments, for example where:

  • the total amount for a single order is split across multiple payments
  • you use a single reference for each payment in a recurring agreement or split shipment scenario
merchantobject(MerchantV2)required
merchant.​entitystring[ 3 .. 32 ] characters^([a-zA-Z0-9\- ]*)$required

Used to route the request in Access Worldpay, created as part of on-boarding.

Example: "default"
instructionobject(InstructionV2)required

Object that contains the payment type and details.

instruction.​methodstringrequired

Type of payment method

Value"ach"
Discriminator
instruction.​valueobject(Value)required

The value of the payment.

instruction.​value.​amountinteger(int64)[ 1 .. 2147483647 ]required

The amount in the lowest denomination of the currency e.g. pennies for GBP, cents for USD.

Example: 12
instruction.​value.​currencystringrequired
Enum"AED""AFN""ANG""AOA""ARS""AUD""AWG""AZN""BAM""BBD"
instruction.​narrativeobject(NarrativeBase)required
instruction.​narrative.​line1string[ 1 .. 24 ] characters^[a-zA-Z0-9-., ]*$required

The description shown on your customer's bank statement for the payment.

Example: "MindPalace"
instruction.​paymentInstrumentobject(AchEftPaymentInstrumentV2)required
instruction.​paymentInstrument.​typestringrequired

The type of instrument.

Enum"direct""checkout"
instruction.​paymentInstrument.​sessionHrefstring(uri)

URL of the session in which customer fields can be saved via Components SDK.

Note: This field is required when making requests where the type is checkout.

instruction.​paymentInstrument.​accountTypestringrequired

Account type.

Enum"checking""savings""corporate""corporateSavings"
Example: "checking"
instruction.​paymentInstrument.​accountNumberstring[ 1 .. 17 ] characters^[0-9]*$required

Account number of direct debit account.

Example: "123456789"
instruction.​paymentInstrument.​routingNumberstring= 9 characters^[0-9]*$required

Routing number of direct debit account.

Example: "123456789"
instruction.​paymentInstrument.​checkNumberstring[ 1 .. 15 ] characters^[0-9]*$

Check number of the direct debit account.

Example: "123456789"
instruction.​paymentInstrument.​companyNamestring[ 1 .. 40 ] characters^([a-zA-Z0-9 ]*)$

Company name if a corporate account.

Example: "123456789"
instruction.​paymentInstrument.​billingAddressobject(AchEftBillingAddress)required
instruction.​paymentInstrument.​billingAddress.​address1string[ 1 .. 80 ] characters
instruction.​paymentInstrument.​billingAddress.​address2string[ 1 .. 80 ] characters
instruction.​paymentInstrument.​billingAddress.​address3string[ 1 .. 80 ] characters
instruction.​paymentInstrument.​billingAddress.​citystring[ 1 .. 50 ] characters

City.

instruction.​paymentInstrument.​billingAddress.​countryCodestring
Enum"AD""AE""AF""AG""AI""AL""AM""AN""AO""AQ"
instruction.​paymentInstrument.​billingAddress.​postalCodestring[ 1 .. 15 ] characters

Postal code.

instruction.​paymentInstrument.​billingAddress.​statestring[ 1 .. 30 ] characters

State code of the billing address in ISO 3166-2 format.

Example: "US-OH"
instruction.​customerobject(CustomerDetailsAch)required
instruction.​customer.​firstNamestring[ 1 .. 22 ] charactersrequired

Your customer's first name.

instruction.​customer.​lastNamestring[ 1 .. 22 ] charactersrequired

Your customer's last name.

instruction.​customer.​customerIdstring<= 15 characters^[a-zA-Z0-9]*$

Your unique reference for the customer so that the 'pay faster next time' function can be used during checkout. This allows your customer's chosen bank to be stored for their next payment.

Example: "44528abcd"
instruction.​customer.​emailstring

The customer's e-mail address.

Example: "customer@worldpay.com"
Recommendation

We suggest you provide the cancelURL,failureURL, pendingURL and successURL attribute to redirect your customer to, once you have received the payment result.

Response

Example response

{
  "paymentInstrument": {
    "method": "klarna_network",
    "type": "direct"
  },
  "paymentId": "eyJrIjoiYXBtLXNlcnZpY2UtZGVmYXVsdCIsImxpbmtWZXJzaW9uIjoiNi4wLjAifQ==.BnnxxcMle38OazhwbF8J+4rtJi8CAq:Y3zUOn1dw6VWfvx:PHL5L0S+5ara5vz6ouV5yBmVUQCiSwQjs+1x5qJIJxAKWMWc2Mlb1doricEYlzsZIRIGCflvnYu1Ns8g1S0+66n6wCELiB9OHfX7cdCRSkT0a4UjAkBr16y36rhHD8i3MfeowBaRA60gR5WdTem66NOYspir3PJsMwGsI7JUSNUzNfcyYf:9A8ONjOcqG6UxedN+MVzWk3lOYs4HS580KRMMNREpmBeBMSEX5ykio0WGxZ:7eYQxnPFsTnA:7:SEfTDcAZofBDiAWAe+s8H9:TD3hQpRcoIM3I9mxkgdPhXDL2OFpFf7pNzE4GPA9QEPQrIYQg:q3eZ7ziTPGD:iOAJXRIEuMq+GdkYs3SWlTzbiGM76:BcqQDY0BAUI9GaFhKLR:b0g9SIKK71Rk9YpTLeiVSfZMnt+9116oW2VHgWW6AoAt202XuJ0AU7aToTM6HDqlAkiOs66Po3TBIlIqmMW0DQb44taw0DeEnQ==",
  "lastEvent": "pending",
  "_links": {
    "self": {
      "href": "https://try.access.worldpay.com/apmPayments/eyJrIjoiYXBtLXNlcnZpY2UtZGVmYXVsdCIsImxpbmtWZXJzaW9uIjoiNi4wLjAifQ==.BnnxxcMle38OazhwbF8J+4rtJi8CAq:Y3zUOn1dw6VWfvx:PHL5L0S+5ara5vz6ouV5yBmVUQCiSwQjs+1x5qJIJxAKWMWc2Mlb1doricEYlzsZIRIGCflvnYu1Ns8g1S0+66n6wCELiB9OHfX7cdCRSkT0a4UjAkBr16y36rhHD8i3MfeowBaRA60gR5WdTem66NOYspir3PJsMwGsI7JUSNUzNfcyYf:9A8ONjOcqG6UxedN+MVzWk3lOYs4HS580KRMMNREpmBeBMSEX5ykio0WGxZ:7eYQxnPFsTnA:7:SEfTDcAZofBDiAWAe+s8H9:TD3hQpRcoIM3I9mxkgdPhXDL2OFpFf7pNzE4GPA9QEPQrIYQg:q3eZ7ziTPGD:iOAJXRIEuMq+GdkYs3SWlTzbiGM76:BcqQDY0BAUI9GaFhKLR:b0g9SIKK71Rk9YpTLeiVSfZMnt+9116oW2VHgWW6AoAt202XuJ0AU7aToTM6HDqlAkiOs66Po3TBIlIqmMW0DQb44taw0DeEnQ=="
    }
  },
  "_actions": {},
  "redirect": "https://secure-test.worldpay.com/jsp/test/shopper/APMSTSimulator.jsp?customerRef=3501456267&paymentMethod=KLARNA_NETWORK",
  "commandId": "cmdF3buj-w58hiyu4I-QZqZi0"
}

Schema

paymentIdstring

The identifier of the payment resource.

lastEventstring
Enum"authorized""cancelFailed""cancelled""cancelRequested""sentForSettlement""sentForAuthorization""settlementFailed""chargebackReversed""chargedBack""disputeExpired"
_linksobject(Links)

Links to resources related to the request.

_actionsobject(Actions)
redirectstring

The URL to redirect your customer to, or a QR code in Base64 to show to your customer, in order to complete the transaction.

paymentInstrumentobject(PaymentInstrumentResponse)
commandIdstring

An action ID generated by us identifying a single merchant interaction

Example: "cmdYNdIHBPJwbkjLiykzTx0"
transactionCodestring

For Pix payments - display to your customer for them to copy and paste in the Pix app.

For Swish payments - use this value and add in the custom URL scheme: swish://paymentrequest?token={token}&callbackurl={callbackURL} as the token value. This will prompt the app to open where the customer can complete their payment.

Example: "IZQ3iUfePwiWiwldJlipl8NGVA7w5IUg"

Errors

Check out our API reference for more responses or error codes.

Simulation

To simulate payment outcomes and trigger webhooks in our Try environment you can send a request prompting our simulator.

You receive a redirect link to our simulator where you can choose different payment outcomes:

Simulator outcome optionPayment statusDescription
AuthorisedauthorizedPayment authorized successfully.
RefusedrefusedUnsuccessful payment - failure response from the provider.
ErrorerrorError in processing the payment or the session timed out.
Shopper CancelledcancelledYour customer cancelled the transaction.

You can also send requests to settlement or reversal endpoints to test the following statuses:

  • sentForSettlement
  • sentForRefund

Next steps

Manage your Klarna payment