To finalize the payment, it is essential to track Klarna payment request states and obtain the klarna_network_session_token. This token confirms the customer's approval for payment and is required to authorize the transaction with Klarna.
Token usage
Klarna now uses klarna_network_session_token as the required token to finalize a payment.
payment_token, which will continue to be returned in the current version for backward compatibility. Please note that payment_token will be removed in future versions, so if your integration currently uses it, plan to migrate to klarna_network_session_token.payment_token and use klarna_network_session_token exclusively.Link copied!
This guide outlines how to monitor the Klarna Payment Request as part of the step up scenario. On a high level:
COMPLETED, CANCELED, DECLINED and EXPIRED states properly.klarna_network_session_token by using one or a combination of the following methods:payment.request.state-change.* webhook events (required)return_urlLink copied!
Link copied!
During the checkout process, the Payment Request will transition to various states. Find below an overview of the possible payment request states together with a transition diagram:
| State | Description | Next action |
|---|---|---|
| Initial state. Payment requests can be updated until the customer enters Klarna Journey. | The Acquiring Partner returns the Klarna Payment request data points as defined in the Handle Step-up scenario section. |
| The customer is actively in Klarna’s purchase journey. | Listen for state changes via webhook. |
| Customer completed the flow, pending final authorization. | Retrieve klarna_network_session_token and create a payment transaction. |
| Payment request expired (t≥3h). | Final state. No action. |
| Payment request canceled by Acquiring Partner before authorization. | Final state. No action. |
| Payment request has been Declined during authorization. | Final state. No action. |
A Payment Request remains open for 3 hours. Klarna recommends Partners proactively cancel Payment Requests which have not resulted in successful transactions, especially if your Payment Request timeout is less than 3 hours.
Klarna supports multiple integration methods. Acquiring Partners must implement Klarna webhook events at a minimum and may optionally combine them with other methods to enhance resilience. This approach ensures robustness, especially in cases where:
For one-time payments, Klarna issues a klarna_network_session_token that can be used to authorize the payment. The klarna_network_session_token is valid for only 1 hour, so be sure to use it promptly to create the transaction.
Acquiring Partners can subscribe to the payment.request.state-change webhooks events using the guidelines here. Klarna will send webhook notifications whenever the payment request state is updated.
The webhook event payment.request.state-change.completed is triggered when the Payment Request reaches the state COMPLETED.
Sample payload
Copied
{
"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:live:HGBY07TR",
"recipient_account_id": "krn:partner:global:account:live:LWT2XJSE",
"product_instance_id": "krn:partner:product:payment:ad71bc48-8a07-4919-[...]",
"webhook_id": "krn:partner:global:notification:webhook:120e5b7e-abcd-4def-[...]",
"live": falseConsult the API reference
​
The Klarna token(s) can also be retrieved through the Read Payment Request APIstate_context object of the payment request once in state = COMPLETED.
Sample response - State COMPLETED
Copied
{
"payment_request_id": "krn:payment:eu1:request:10be1d49-7beb-6b24-b9dd-8c14d0528503",
"state": "COMPLETED",
"previous_state": "IN_PROGRESS",
"state_context": {
"klarna_network_session_token": "krn:payment:eu1:klarna-network-session-token:31b543e0-6430-64df-970c-f1ae3cd9d8b0"
},
"expires_at": "2025-02-26T17:25:34.534721775Z",
"created_at": "2025-02-24T17:25:34.534721775Z",
"updated_at": "2025-02-24T17:25:34.534721775Z",
"payment_request_reference": "acquiring-partner-request-reference-1234",
"amount": 11836,return_urlAs mentioned in the "Handle step-up scenario" section, return_url is not guaranteed to be called in all cases, and frontend redirection can be affected by network issues. Therefore, use return_url strictly to enhance the customer experience (by redirecting them to the appropriate page after completion or cancellation) or as a redundancy to retrieve the klarna_network_session_token in addition to using a webhook integration.
The return_url directs the customer back to the Partners website to the predefined url after a successful or abandoned authorization. By incorporating placeholders into the URL, Klarna can dynamically insert relevant transaction information, ensuring the URL contains all necessary details for processing.
This is particularly relevant whenever acquiring Partners make use of an internal return_url rather than the Partner's frontend URL when calling the Payment Authorize API.
Details about the available return_url placeholders are provided below:
| Placeholder | Description |
|---|---|
| The klarna_network_session_token, available when a payment request is successfully completed, and used to create a transaction. |
| Klarna Payment Request identifier. Used in management of a Payment Request. |
| State of the payment request - may be used as a hint. |
| The provided reference to the payment request. |
Sample request URL
Copied
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-Klarna-Network-Session-Token: eyJhbGciOiJIU...' \
-d '{
"currency": "USD",
"supplementary_purchase_data": { .. },
"interoperability_data": "<serialized-json>",
"request_payment_transaction": {
"amount": 11800,
"payment_transaction_reference": "acquiring-partner-transaction-reference-1234"
},Once the customer completes a payment and is redirected, the return_url will contain the payment request data points replacing the placeholders:
klarna_network_session_token misuse.return_url are only valid for the account that completes the payment, ensuring protection against hijacking.Example
Copied
https://acquiringpartner.example/klarna-redirect?klarna_network_session_token=krn:payment:eu1:payment-token:31b543e0-6430-64df-970c-f1ae3cd9d8b0&request_id=krn:payment:eu1:request:10be1d49-7beb-6b24-b9dd-8c14d0528503&state=COMPLETED&reference=acquiring-partner-reference-12345