Charge a partner-initiated transaction (Partner orchestrated)
Charge a stored Klarna Customer Token in a partner-initiated transaction — a subscription renewal or scheduled payment that runs without customer interaction — by creating the Klarna payment request yourself and confirming the charge through Solidgate with the klarna_network_session_token.
This guide explains how to charge an existing Klarna Customer Token in a partner-initiated transaction — a subscription renewal or any scheduled charge that runs without customer interaction — where you orchestrate the charge. You hold the Klarna Customer Token, create the Klarna payment request yourself, and then confirm the charge through Solidgate.
Because the transaction is partner-initiated and runs without customer interaction, it is a single server-side charge.
Partner-initiated token charges are how you bill recurring subscriptions. For how Solidgate models subscriptions, billing periods, retries, and the subscription lifecycle, see Solidgate's Subscription overview.
Charge credential: Klarna Customer Token only.
When you initiate the charge, only the Klarna Customer Token can be used. The Solidgate token is only usable when Solidgate initiates the charge (pattern A).
Your server calls Klarna's Create Payment Request API, passing the Klarna Customer Token in the request header. Because the transaction runs without customer interaction, the request completes immediately — there is no Klarna Purchase Journey.
2.
Klarna fires the payment.request.state-change.completed webhook to your server with the klarna_network_session_token.
3.
Your server forwards the Klarna Network Session Token (and the purchase details) to Solidgate.
4.
Solidgate calls Klarna's Payment Authorize API with the Klarna Network Session Token to authorize the charge, and returns the outcome.
sequenceDiagram
autonumber
participant P as Partner
participant K as Klarna
participant AP as Solidgate
P->>K: Create payment request<br/>POST /v2/payment/requests
Note over P,K: Header: Klarna-Customer-Token<br/>supplementary_purchase_data.subscriptions
K-->>P: Payment request completed event (webhook)
Note over K,P: klarna_network_session_token
P->>AP: Confirm payment
Note over P,AP: klarna_network_session_token
AP-->>P: Order completed notification
Call Klarna's Create Payment Request API from your server, passing the stored Klarna Customer Token in the Klarna-Customer-Token header. Because the transaction runs without customer interaction, no customer_interaction_config / return_url is needed and Klarna will not return a payment_request_url — the request moves straight to COMPLETED.
Field
Presence
Description
Klarna-Customer-Token (header)
required
The stored Klarna Customer Token identifying the customer's saved Klarna method.
currency
required
Currency in ISO 4217 format.
amount
required
Total charge amount in non-negative minor units (e.g. $25.00 = 2500).
supplementary_purchase_data.subscriptions
recommended
Array of Subscription objects for this charge (billing interval, reference, etc.). Improves acceptance and the customer's post-purchase experience.
A partner-initiated token charge does not return STEP_UP_REQUIRED. The payment request transitions directly to COMPLETED (or DECLINED). There is no customer interaction to complete a Klarna Purchase Journey.
Klarna issues the klarna_network_session_token once the payment request reaches COMPLETED. Retrieve it by subscribing to the payment.request.state-change.completed webhook (required); you may additionally call the Read Payment Request API for resilience.
Forward the klarna_network_session_token to Solidgate, which authorizes the charge with Klarna behind the scenes. The full request/response contract is owned by Solidgate; only the Klarna-specific token you must include is shown here.
Fulfil the subscription period and record the successful charge.
DECLINED
Klarna did not authorize the charge.
Apply your subscription retry / dunning logic and, if appropriate, notify the customer.
A step-up is not possible here — a partner-initiated transaction runs without customer interaction, so there is no one to complete one. Plan your subscription logic around APPROVED / DECLINED only.