APPROVEDDECLINEDSTEP_ UP_ REQUIRED| Parameter | Required (Acquiring Partner) | Required (Partner) | Description |
|---|---|---|---|
amount | Yes | Yes | Total amount of the authorization, including tax and any available discounts. |
currency | Yes | Yes | Currency in ISO 4217 format. |
supplementary_ | Yes | Recommended | Additional details about the transaction to help reduce fraud risk and enhance transparency. Include this data to improve underwriting, fraud detection, and customer communication. Klarna processes and uses this data for fraud assessment and customer experience optimization. |
supplementary_ | Yes | Recommended | Customer-facing payment reference displayed to customers on the Klarna app and other communications. Also included in settlement reports for reconciliation purposes. If you are an Acquiring Partner, this is the reference your Partner generated for their customer's payment. |
supplementary_ | Yes | Recommended | Detailed line item information of the purchase. This data is used for fraud detection and customer communication. |
supplementary_ | Yes | Recommended | Information about the customer based on their previous interactions with the Partner. These data points may be used by Klarna to simplify sign-up and during fraud assessment, as well as for underwriting purposes to provide an enhanced experience to returning customers. |
supplementary_ | Yes | Recommended | Shipping information for the purchase. This data is used for fraud detection and customer communication. If the purchase contains multiple shipments with different recipients, provide one shipping object per shipment. |
klarna_ | Yes | Conditional | Encodes Klarna Network Session Token context (prequalification, sign-in state, or approval). Required for finalization after customer authorization; optional on initial request. |
klarna_ | Yes | Recommended | Additional data to enable custom features or data exchange supported by your Integrating Partner. Klarna accepts this passthrough field in a structured JSON format and forwards it to relevant systems for interoperability. Data shared in this field may complement structured datapoints provided in supplementary_purchase_data. Treat this value as an opaque string; do not validate or infer its structure. |
return_ | Yes | Recommended | Payment flow redirection URL. The customer will always be redirected to this URL on successful authorization. For web SDK with REDIRECT mode, the customer will also be redirected to this URL on failed authorization. Recommended for web flows. |
app_ | Yes | Recommended | Mobile application return URL (app scheme with no action deeplink). The customer will be redirected to this URL after third-party redirects or redirects to the Klarna Application. It is expected to open the integrating mobile application in its last state (no state changes or deeplink navigations). Recommended for mobile app flows. |
klarna_ network_ session_ token and klarna_ network_ data in the Partner-facing API to ensure Partners can easily identify and use them.supplementary_ purchase_ data when calling Klarna| Do | Don't |
|---|---|
Map existing line items into supplementary_. | Introduce a parallel line-item structure such as klarna_. |
Map existing customer details into supplementary_. | Duplicate customer fields you already collect from Partners. |
Map existing shipping data into supplementary_. | Add a separate shipping object "just for Klarna". |
Map your existing purchase reference into supplementary_. | Force Partners to submit the same purchase reference twice. |
klarna_ network_ data: Forward as received without parsing or mappingsupplementary_ purchase_ data object when calling authorizePaymentstep_ up_ config with HANDOVER to allow Klarna to trigger customer interaction when required.curl https://api-global.test.klarna.com/v2/accounts/{partner_account_id}/payment/authorize \
-H 'Authorization: Basic <API key>' \
-H 'Content-Type: application/json' \
-H 'Klarna-Customer-Token: krn:partner:us1:test:identity:customer-token:ACZawkw7-2[...]' \
-H 'Klarna-Network-Session-Token: krn:network:us1:test:session-token:eyJhbGciOiJIU[...]' \
-d '{
"currency": "USD",
"supplementary_purchase_data": {
"purchase_reference": "order-7f3a9b2e",
"line_items": [customer_ token can be obtained from the Payment Tokenization flow.step_ up_ config. customer_ interaction_ config. interaction_ expiry to override the default 3-hour Payment Request lifetime. See Custom Payment Request expiry.payment_ transaction_ response object. The result field inside this object indicates the outcome and determines your next action.result has the following possible values:| Result | Description | Next steps |
|---|---|---|
STEP_ | Additional customer interaction is needed to complete the authorization. A payment_ is created. | Handle this result when Klarna requires additional customer interaction to complete authorization:
|
APPROVED | The authorization succeeded and a payment_ was created. | The Payment Authorization is complete. Handle this result when Klarna authorizes the payment without requiring customer interaction.
|
DECLINED | The authorization was not approved and no transaction was created. | Handle this result when Klarna does not approve the authorization.
|
{
"payment_transaction_response": {
"result": "STEP_UP_REQUIRED"
},
"payment_request": {
"payment_request_id": "krn:payment:us1:request:552603c0-fe8b-4ab1-[...]",
"payment_request_reference": "acquiring-partner-request-reference-1234",
"amount": 11800,
"currency": "USD",
"state": "SUBMITTED",step_ up_ config when calling authorizePaymentcustomer_ interaction_ config object, tell Klarna where to redirect the customer after they complete or stop the Klarna Purchase Journey.return_ url after they finish — whether they complete or stop the flow. This can be a URL managed by the Acquiring Partner (which handles redirection logic) or one collected directly from the Partner.app_ return_ url brings the customer back to the Partner's mobile app when this happens.partnerapp:/ /klarna) that resumes the payment flow. Klarna invokes this URL after the customer completes a native app-based step, such as biometric authentication or Klarna app login. Partners are expected to resume the mobile app in its last state without applying state changes or deep link navigations.return_ url and app_ return_ url are not mutually exclusive. Depending on the device and environment, either or both may be triggered:| Scenario | Description |
|---|---|
| Pure web flow | The customer starts the Klarna Purchase Journey in a desktop browser. After completing the flow, Klarna redirects them to return_. |
| App-to-app flow | The Partner's native app opens the Klarna Purchase Journey using a universal link. If the Klarna app is installed, the customer goes directly into it. After completion, Klarna redirects them to app_. |
| WebView flow with app handover | The Partner's native app starts the Klarna Purchase Journey in a System WebView. If the customer must authenticate via an external banking app, app_ returns them to the Partner's app mid-flow. They then resume in the WebView and, on completion, are redirected to return_. |
return_ url or app_ return_ url from the Partner, do not request a second one — this would increase the minimum integration requirements for Klarna to work.payment_ request_ url and/or a klarna_ network_ response_ data parameter.payment_ request_ url MUST be returned directly to the Partner in an existing field and MUST NOT be wrapped or hidden behind Acquiring Partner-managed redirects.klarna_ network_ response_ data in the Partner-facing API to ensure Partners can easily identify and use the parameter. Treat this value as an opaque string; do not validate or infer its structure.klarna_ network_ response_ data parameter in their Partner-facing APIs depending on the authorization outcome.{
"payment_id": "pr_27234RBQD9NAKD032BN",
"amount": 17800,
"currency": "USD",
"status": "open",
"url": "https://pay.test.klarna.com/na/requests/6bbf6775-[...]/start",
...
"additional_data": {
"klarna_network_response_data": "{\"content_type\":\"vnd.klarna.network-data.v2+json\",\"content\":{\"operation\":\"payment_request\",\"response\":{\"result\":\"STEP_UP_REQUIRED\",\"payment_request\":{\"payment_request_id\":\"krn:payment:us1:request:552603c0-fe8b-4ab1-[...]\",\"payment_request_url\":\"https://pay.test.klarna.com/na/requests/6bbf6775-[...]/start\"}}}}"
}APPROVED, the Partner can redirect the customer to the confirmation page.STEP_ UP_ REQUIRED, the Partner handles the step-up scenario and launch the Klarna Purchase Journey (see Step 4).payment_ request_ url directly to Partners rather than routing through an Acquiring Partner-owned URL.| Issue | Impact |
|---|---|
| Reduced app handover success | Cross-domain redirects reduce the likelihood of a successful handover to the Klarna app, negatively impacting Klarna's purchase conversion rate. |
| Incompatibility with Klarna web SDK integration | Not compatible with Partners using the Klarna web SDK for pop-up flows on websites or app-to-app handoff in native mobile apps. |
| Network issues | Frontend redirects expose customers to network issues. |
STEP_ UP_ REQUIRED result along with a Payment Request containing the payment_ request_ url and klarna_ network_ response_ data which the Partner needs in order to launch the Klarna Purchase Journey, either through a redirect or a pop-up experience.
return_ url in customer_ interaction_ config, except when a pop-up experience is used and the customer stops the flow.klarna_ network_ session_ token to the Acquiring Partner to finalize the payment.STEP_ UP_ REQUIRED.klarna_ network_ session_ token represents the Klarna session context and must be included in the Klarna-Network-Session-Token header when calling the Payment Authorize API.klarna_ network_ session_ token is valid for only 1 hour, so be sure to use it promptly.payment. request. state-change. completed webhook event using the Klarna webhook guidelines. Klarna sends this event when the Payment Request reaches the COMPLETED state.{
"metadata": {
"event_type": "payment.request.state-change.completed",
"event_id": "d9f9b1a0-5b1a-4b0e-9b0a-9e9b1a0d5b1a",
"event_version": "v2",
"occurred_at": "2024-01-01T12:00:00Z",
"correlation_id": "2d1557e8-17c3-466c-924a-bbc3e91c2a02",
"subject_account_id": "krn:partner:global:account:test:HGBY07TR",
"recipient_account_id": "krn:partner:global:account:test:LWT2XJSE",
"product_instance_id": "krn:partner:product:payment:ad71bc48-8a07-4919-[...]",payment. request. state-change. completed in two stages. In the webhook handler, verify the event, persist the payload — including the klarna_ network_ session_ token — durably against metadata. event_ id, and return a 2xx response immediately. Run everything that follows asynchronously, after the acknowledgment is sent.metadata. event_ id you have already recorded, confirm that it is recorded and return a 2xx response without repeating the work. The Klarna webhook guidelines define the accepted acknowledgment responses and the retry schedule Klarna applies when one doesn't arrive.COMPLETED state, the token(s) are available in the state_ context object of the Payment Request.{
"payment_request_id": "krn:payment:us1:request:552603c0-fe8b-4ab1-[...]",
"state": "COMPLETED",
"previous_state": "IN_PROGRESS",
"state_context": {
"klarna_network_session_token": "krn:network:us1:test:session-token:eyJhbGciOiJIU..."
},
"expires_at": "2025-02-26T17:25:34.534721775Z",
"created_at": "2025-02-24T17:25:34.534721775Z",
"updated_at": "2025-02-24T17:25:34.534721775Z",klarna_ network_ session_ token from webhook or polling, finalize the authorization by calling the Payment Authorize API again with the new token.klarna_ network_ session_ token in the Klarna-Network-Session-Token request headeramount, currency, supplementary_ purchase_ data, klarna_ network_ data) used in the initial authorizationpayment_ transaction_ reference to link the requests
Example finalization request:curl https://api-global.test.klarna.com/v2/accounts/{partner_account_id}/payment/authorize \
-H 'Authorization: Basic <API key>' \
-H 'Content-Type: application/json' \
-H 'Klarna-Network-Session-Token: krn:network:us1:test:session-token:eyJhbGciOiJIU...' \
-d '{
"currency": "USD",
"supplementary_purchase_data": { ... },
"klarna_network_data": "{\"content_type\":\"vnd.klarna.network-data.v2+json\",\"content\":{\"operation\":\"payment_request\",\"request\":{\"supplementary_purchase_data\":{...}}}",
"request_payment_transaction": {
"amount": 11800,klarna_ network_ session_ token has expired (1-hour validity) or the payment context doesn't match the initial authorization, the finalization call returns DECLINED.APPROVED with the payment transaction:{
"payment_transaction_response": {
"result": "APPROVED",
"payment_transaction": {
"payment_transaction_id": "krn:payment:us1:transaction:791bbb7b-813a-[...]",
"amount": 11800,
"currency": "USD",
"payment_pricing": {...},
"payment_funding": {
"type": "GUARANTEED",klarna_ network_ response_ data.klarna_ network_ response_ data in the Partner-facing API to ensure Partners can easily identify and use the parameter{
"payment_id": "pr_27234RBQD9NAKD032BN",
"amount": 17800,
"currency": "USD",
"status": "completed"
...
"additional_data": {
"klarna_network_response_data": "{\"content_type\":\"vnd.klarna.network-data.v2+json\",\"content\":{\"operation\":\"payment_request\",\"response\":{\"result\":\"APPROVED\",\"payment_transaction\":{\"payment_transaction_id\":\"krn:payment:us1:transaction:791bbb7b-813a-[...]\"}}}}"
}
}