Learn to initiate payments using the payment:customer_not_present scope token and seamlessly integrate with Klarna's Payment Authorization API for efficient transaction handling.
With a previously created payment:customer_not_present scope token, Partners can initiate Klarna payments for subscriptions:
customer_token or the token equivalent issued by the Acquiring Partner,interoperability_token and interoperability_data.customer_tokensupplementary_purchase_datasubscriptionsstep_up_configrequest_payment_transactionAPPROVED – Transaction is completed, proceed to confirmation and store payment_transaction_id.DECLINED – If the payment is denied, Acquiring Partners have to inform the Partner that the payment could not be completed.Before calling the Payment Authorization API
klarna_network_session_tokenklarna_network_dataBelow is an example of how Acquiring Partners can accept the Klarna Network parameters in their Partner-facing APIs.
Requirements
klarna_network_session_token/klarna_network_data, ensuring that it’s easy for any Partner to identify and use.Supplementary Purchase Data refers to additional transaction details shared with Klarna that provide greater context about a purchase. These data points—such as line items, subscription details, or industry-specific attributes—help improve underwriting accuracy, fraud assessment, and the customer’s post-purchase experience. They may be required in certain industries and support multiple use cases, including better acceptance rates, enhanced fraud prevention, improved customer experiences within the Klarna app, and more effective risk monitoring.
/v2/accounts/{partner_account_id}/payment/authorize| Parameter | Required | Description |
|---|---|---|
partner_account_id | Yes | Unique account identifier assigned by Klarna to the onboarded merchant |
Success rate of subscription charges
To ensure successful subscription token charges, include the relevant subscription data points again when processing the transaction to maximize the success rate.
The Payment Authorize API
Charge an existing reusable customer_token without customer interaction (on-demand/recurring).
In the request to the Payment Authorize API
/v2/accounts/{partner_account_id}/payment/authorize| Parameter | Required | Description |
|---|---|---|
partner_account_id | Yes | Unique account identifier assigned by Klarna to the onboarded merchant |
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:customer_token:eu1:...' \
-H 'Klarna-Network-Session-Token: eyJhbGciOiJIU...' \
-d '{
"currency": "USD",
"supplementary_purchase_data": { .. },
"klarna_network_data": "<serialized-json>",
"request_payment_transaction": {
"amount": 2599,
"payment_option_id": "***",When performing customer-present authorization through the Payment Authorize APIrequest_payment_transaction in the request, the response will always contain a corresponding payment_transaction_response object. The result field inside this object indicates the outcome of the authorization and determines the next step to perform.
The result has the following possible values:
| Result | Description | Next steps | |
|---|---|---|---|
| The authorization succeeded and a payment_transaction was created. | Payment is authorized and ready for post-purchase operations. | |
| The authorization failed (for example, due to fraud, credit, or risk policy) and no transaction was created.` | Authorization ends with a failure. | |
| This result is returned only if step_up_config was provided in the request and additional customer interaction is needed to complete authorization. A payment_request is created, representing the step-up process. | Customer completes Klarna Purchase Journey before authorization can continue. | - |
Here's the high level diagram of the payment authorization results and resources it produces:
Payment authorization results
The response schema is as follows:
STEP_UP_REQUIREDHandle this result when Klarna requires additional customer interaction to complete authorization.
payment_request_id and payment_request_url from the response.payment_request_url to the Partner without modification.Sample payload
{
"payment_transaction_response": {
"result": "STEP_UP_REQUIRED"
},
"payment_request": {
"payment_request_id": "krn:payment:eu1:request:552603c0-fe8b-4ab1-aacb-41d55fafbdb4",
"payment_request_reference": "acquiring-partner-request-reference-1234",
"amount": 11800,
"currency": "USD",
"state": "SUBMITTED",
"expires_at": "2025-01-02T13:00:00Z",
"created_at": "2025-01-01T12:00:00Z",APPROVEDHandle this result when Klarna authorizes the payment without requiring customer interaction.
payment_transaction from the response.payment_transaction_id.Sample payload
{
"payment_transaction_response": {
"result": "APPROVED",
"payment_transaction": {
"payment_transaction_id": "krn:payment:eu1:transaction:6debe89e-98c0-[...]",
"payment_transaction_reference": "transaction-reference-1234",
"amount": 11800,
"currency": "USD",
"payment_funding": {
"type": "INVOICE",
"details": { }
},DECLINEDHandle this result when Klarna rejects the authorization.
Sample payload
{
"payment_transaction_response": {
"result": "DECLINED",
"result_reason": "PAYMENT_DECLINED"
}
}