Klarna Direct

Update a Payment Request

Learn how to update an existing Payment Request while it is in the SUBMITTED state. This operation allows Partners to adjust amount, currency, supplementary purchase data, or shipping configuration before the customer enters the Klarna Purchase Journey.

Introduction

Update an existing Payment Request while it is still in the SUBMITTED state. This keeps the Payment Request in sync with the Partner's checkout (for example, when the customer changes their cart, applies a discount code, or selects a different shipping option) before they enter the Klarna Purchase Journey.
Payment Requests can only be updated while in SUBMITTED state. Once the customer enters the Klarna Purchase Journey (IN_PROGRESS) or the Payment Request reaches a final state (COMPLETED, EXPIRED, CANCELED, or DECLINED), it cannot be updated.

Prerequisites

Before updating a Payment Request, ensure the following:
  • A valid Klarna Partner account with API credentials
  • Backend capability to receive and process Klarna webhooks
  • The payment_request_id of an existing Payment Request in SUBMITTED state

Request

Call updatePaymentRequestAPI with the payment_request_id and provide the fields to update. Only the fields included in the request body are modified. Omitted fields retain their previous values.

Sample request

SHELL
1 2 3 4 5 6 7 8 9 10
curl -X PUT https://api-global.test.klarna.com/v2/payment/requests/{payment_request_id} \ -H 'Authorization: Basic <API key>' \ -H 'Content-Type: application/json' \ -d '{ "amount": 12500, "supplementary_purchase_data": { "line_items": [ { "name": "Updated Product Name", "quantity": 2,

Response

The API returns the updated Payment Request reflecting the changes that were made. The state remains SUBMITTED and the updated_at timestamp is refreshed.

Sample response

JSON
1 2 3 4 5 6 7 8 9 10
{ "payment_request_id": "krn:payment:us1:request:10be1d49-7beb-6b24-b9dd-8c14d0528503", "state": "SUBMITTED", "state_context": { "customer_interaction": { "method": "HANDOVER", "payment_request_id": "krn:payment:us1:request:10be1d49-7beb-6b24-b9dd-8c14d0528503", "payment_request_url": "https://pay.test.klarna.com/na/requests/6bbf6775-[...]/start" } },

Webhook

Subscribe to the payment.request.updated webhook event by following the webhook registration guide. Klarna sends this event when a Payment Request is successfully updated, including the updated_fields in the payload so the change can be reconciled on the Partner's side.

Sample payload

JSON
1 2 3 4 5 6 7 8 9 10
{ "metadata": { "event_type": "payment.request.updated", "event_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "event_version": "v2", "occurred_at": "2025-02-24T17:30:00Z", "correlation_id": "3e2668f9-28d4-577d-a35d-c0b4f02d3b13", "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-[...]",

Use cases

Update Payment Requests before customer interaction begins to handle common checkout scenarios such as cart changes, promotions, or shipping selection.

Update payment amount

Update the amount when cart contents change or promotions are applied. Provide both the new amount and currency to keep the Payment Request consistent.
JSON
1 2 3 4 5
{ "amount": 15000, "currency": "USD" }

Update line items

Modify line items in supplementary_purchase_data to reflect changes in the shopping cart.
JSON
1 2 3 4 5 6 7 8 9 10
{ "amount": 15000, "supplementary_purchase_data": { "line_items": [ { "name": "Premium Product Bundle", "quantity": 1, "total_amount": 15000 } ]

Update shipping option

Update the shipping option in supplementary_purchase_data.shipping when the customer selects a different shipping option mid-checkout. Adjust the total amount accordingly to include the new shipping cost.
JSON
1 2 3 4 5 6 7 8 9 10
{ "amount": 13500, "supplementary_purchase_data": { "shipping": [ { "shipping_option": { "shipping_type": "EXPRESS", "shipping_carrier": "UPS" } }
Related articles
Set up your webhooks