Handle step-up scenario

Help customers complete payments securely by handling Klarna’s step-up authentication using the Purchase Journey. This guide breaks down how to integrate and respond when a step-up flow is triggered by Klarna’s Payment Authorize API.

When Klarna requires additional verification from the customer (e.g., login, authentication, or payment method selection), it returns a Payment Request in the response to the Payment Authorize API call.

The Acquiring Partner backend must detect this and return the necessary data points to Partners so they can start the Klarna’s Purchase Journey with the customers.

As shown in the below diagram, the high level flow is the following:

  1. Partner submits a Klarna payment request to the Acquiring Partner.
  2. Acquiring Partner calls the Klarna Payment Authorize API.
  3. Klarna returns a step-up required response containing:

    payment_request_id

    payment_request_url
  4. Customer enters Klarna’s Purchase Journey.
  5. Customer completes authentication/payment method selection.
  6. Klarna redirects the customer back to the Partner.

To support the step-up scenario, Acquiring Partners must define return URLs when calling the Payment Authorize API.

  • return_url: Klarna will always redirect the customer to this URL on a successful authorization. This could either be a URL from the Acquiring Partner who will handle the redirection logic or a URL collected from the Partner.
website redirection

website redirection

  • app_return_url: The customer may be redirected to a third party app (bank app) or the Klarna app during the Klarna Purchase Journey on mobile environments. This url enables Klarna to return the customer back to the Partner’s mobile app.
App handover diagram

App handover diagram

When Acquiring Partners are already asking for a suitable return_url or app_return_url from the Partner, it is advised to not ask for a second one as this would increase the minimal integration requirements for Klarna to work.

Acquiring Partners must include a step_up_config object when calling Klarna’s Payment Authorize API, and specify the following parameters:

Parameter nameDescription
payment_request_referenceReference to the payment session or equivalent resource on the Acquiring Partner's side. Helps match Klarna payment requests with internal records.
customer_interaction_configConfiguration properties for supporting step-up scenario. It contains:

Sample request

JSON
{
  "currency": "USD",
  "supplementary_purchase_data": { .. },
  "interoperability_data":  "<serialized-json>",
  "request_payment_transaction": {
    "amount": 11800,
    "payment_transaction_reference": "acquiring-partner-transaction-reference-1234"
  },
  "step_up_config": {
    "payment_request_reference": "acquiring-partner-request-reference-1234",

​Whenever the step-up scenario is triggered, the Payment Authorize API response will contain

  • payment_request_id : The unique Klarna identifier for the payment request
  • payment_request_url: A URL to launch the Klarna Purchase Journey

Sample response

JSON
{
  "payment_transaction_response": {
    "result": "STEP_UP_REQUIRED"
  },
  "payment_request": {
    ...
    "state_context": {
      "customer_interaction": {
        "method": "HANDOVER",
        "payment_request_id": "krn:payment:eu1:request:552603c0-fe8b-4ab1-aacb-41d55fafbdb4",

​Acquiring Partners should extract and expose these parameters in their API response to the Partner system. This enables the Partner to:

  • Redirect the customer to Klarna’s Purchase Journey directly
  • Use Klarna’s Web SDK to start the purchase flow
JSON
{
  "status": "pending",
  "klarna": {
    "payment_request_id": "krn:payment:eu1:request:552603c0-fe8b-4ab1-aacb-41d55fafbdb4",
    "payment_request_url": "https://pay.test.klarna.com/eu/requests/6bbf6775-[...]/start"
  }
}

In some implementations, the Acquiring Partner may return a general-purpose redirect_url under their domain for all payment methods. Partners then use this URL to trigger a client-side redirect to Klarna’s payment_request_url.

JSON
{
  "status": "pending",
  "redirect_url": "https://acquiringpartner.com/payment/xxxxx"
}

Partners may have two options to start the Klarna Purchase Journey based on the parameters returned by Acquiring Partners:

  • Redirect the customer to the Klarna payment_request_url
  • Use Klarna Web SDK to trigger the flow, based on the provided payment_request_id.

The Klarna Purchase Journey enables the customer to:

  • Authenticate with Klarna (via login, OTP, etc.)
  • Choose the payment method (Pay in N, Pay Later, etc)
  • Accept the payment.
Phone collection in the Klarna Purchase Journey

Phone collection in the Klarna Purchase Journey

If the Klarna Purchase Journey requires a handover to another app (e.g., Klarna app, bank app), Klarna will use the provided app_return_url to return the customer to the Partner’s mobile app.

Implementation notes for Partners:

  • Ensure the app is set up to register a URL scheme (e.g., yourapp://klarna) or universal link that resumes the payment flow.
  • Klarna uses this URI after the customer completes a native app-based flow (e.g., biometric auth in a bank app or Klarna app login).
  • Partners are expected to open the integrating mobile application in its last state (no state changes or deeplink navigations).

After the customer completes Klarna’s Purchase Journey, whether via web browser or mobile app, Klarna performs two critical actions:

  1. Redirection to return_url : Klarna redirects the customer to the return_url provided in the customer_interaction_config object. This URL should guide the customer back into your or the Partner’s frontend experience.
  2. Issuance of payment_token: Klarna issues a payment_token to the Acquiring Partner, which is required to finalize the payment. This part will be covered in the following section - Monitor the payment request state.

Best practices for return_url

Klarna recommends that Acquiring Partners use an internal return_url (rather than the Partner's frontend URL) when calling the Payment Authorize API. This enables the Acquiring Partner to:

  • Retrieve the payment_token - use of Klarna webhook system is required
  • Finalize the transaction
  • Redirect the customer to the Partner’s confirmation page
  • Configure step_up_config with valid return_url and app_return_url
  • Include method: "HANDOVER" in the customer_interaction_config
  • Handle Klarna’s STEP_UP_REQUIRED response by extracting the payment_request_id and payment_request_url.
  • Either Forward these values to the Partner system for frontend use, or a unified redirect_url from your platform.
  • If possible use an internal return_url from your platform to finalize the transaction with Klarna before redirecting to Partner UIs.