On this page
No Headings
Last updated: June 4, 2026
Manual authorization requires a separate authorization call after buyer approval and provides more control over the payment process. Create orders for manual authorization using two available flows.
Use a valid access token and send a POST request /v2/checkout/orders with request body parameters including intent, purchase_units with amount and currency, payment_source with Klarna details.
On successful order creation, complete the Klarna payment with these steps:
PAYER_ACTION_REQUIRED status and payer-action linkpayer-action URL to complete payment on Klarna's platformAPPROVED/v2/payments/authorizations/{authorization_id}/capture with the authorization ID from the authorization responsecurl -X POST https://api.sandbox.paypal.com/v2/checkout/orders \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <ACCESS-TOKEN>' \
-H 'PayPal-Request-Id: <REQUEST-ID>' \
-d '{
"intent": "AUTHORIZE",
"purchase_units": [
{
"payee": {
"merchant_id": "YR8FPJ7TDVD6A"
},
"amount": {
"currency_code": "GBP",
"value": 30,
"breakdown": {
"item_total": {
"currency_code": "GBP",
"value": 30
},
"shipping": {
"currency_code": "GBP",
"value": "0.00"
},
"handling": {
"currency_code": "GBP",
"value": "0.00"
},
"tax_total": {
"currency_code": "GBP",
"value": "0.00"
},
"shipping_discount": {
"currency_code": "GBP",
"value": "0.00"
}
}
},
"items": [
{
"name": "jersey",
"description": "jersey",
"sku": "",
"unit_amount": {
"currency_code": "GBP",
"value": "15.00"
},
"tax": {
"currency_code": "GBP",
"value": "0.00"
},
"category": "PHYSICAL_GOODS",
"quantity": "1"
},
{
"name": "jersey",
"description": "jersey",
"sku": "",
"unit_amount": {
"currency_code": "GBP",
"value": "15.00"
},
"tax": {
"currency_code": "GBP",
"value": "0.00"
},
"category": "PHYSICAL_GOODS",
"quantity": "1"
}
]
}
],
"payment_source": {
"klarna": {
"authorization_context": {
"authorization_expiry": "2025-09-29T23:37:39Z"
},
"country_code": "GB",
"billing_address": {
"address_line_1": "10 New Burlington Street",
"admin_area_2": "London",
"admin_area_1": "Greater London",
"postal_code": "W1S 3BE",
"country_code": "GB"
},
"name": {
"given_name": "Test",
"surname": "Person-uk"
},
"email_address": "[email protected]",
"phone": {
"national_number": "7755564318",
"country_code": "44"
},
"experience_context": {
"locale": "en-GB",
"acquiring_channel": "ECOMMERCE",
"return_url": "https://www.example.com/returnUrl",
"cancel_url": "https://www.example.com/cancelUrl"
}
}
},
"application_context": {
"client_configuration": {
"api": "ORDERS_V2",
"experience": {
"entry_point": "PAY_WITH_ALTPAY_KLARNA",
"payment_method": "PAY_WITH_ALTPAY_KLARNA"
}
}
}
}'Use a valid access token and send a POST request to /v2/checkout/orders with request body parameters including intent, purchase_units with amount and currency, and the PayPal-Request-Id header for idempotency.
On successful order creation, complete the Klarna payment with these steps:
CREATED status and approve link/v2/checkout/orders/{order_id}/confirm-payment-source with complete payment_source.klarna objectapprove URL to complete payment approvalAPPROVED/v2/payments/authorizations/{authorization_id}/capture with the authorization ID from the authorization responseNote: Payment source details can be provided during order confirmation or authorization - choose the method that best fits your checkout flow.
curl -X POST https://api.sandbox.paypal.com/v2/checkout/orders \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <ACCESS-TOKEN>' \
-H 'PayPal-Request-Id: <REQUEST-ID>' \
-d '{
"intent": "AUTHORIZE",
"purchase_units": [
{
"payee": {
"merchant_id": "YR8FPJ7TDVD6A"
},
"amount": {
"currency_code": "GBP",
"value": 30,
"breakdown": {
"item_total": {
"currency_code": "GBP",
"value": 30
},
"shipping": {
"currency_code": "GBP",
"value": "0.00"
},
"handling": {
"currency_code": "GBP",
"value": "0.00"
},
"tax_total": {
"currency_code": "GBP",
"value": "0.00"
},
"shipping_discount": {
"currency_code": "GBP",
"value": "0.00"
}
}
},
"items": [
{
"name": "jersey",
"description": "jersey",
"sku": "",
"unit_amount": {
"currency_code": "GBP",
"value": "15.00"
},
"tax": {
"currency_code": "GBP",
"value": "0.00"
},
"category": "PHYSICAL_GOODS",
"quantity": "1"
},
{
"name": "jersey",
"description": "jersey",
"sku": "",
"unit_amount": {
"currency_code": "GBP",
"value": "15.00"
},
"tax": {
"currency_code": "GBP",
"value": "0.00"
},
"category": "PHYSICAL_GOODS",
"quantity": "1"
}
]
}
],
"application_context": {
"client_configuration": {
"api": "ORDERS_V2",
"experience": {
"entry_point": "PAY_WITH_ALTPAY_KLARNA",
"payment_method": "PAY_WITH_ALTPAY_KLARNA"
}
}
}
}'| Parameter name | Description |
|---|---|
intentRequired, string | Indicates whether payment is captured immediately or authorized for later capture. For Klarna payments, set to AUTHORIZE. |
processing_instruction string | Specifies how the order is processed. For manual authorization flow, exclude this parameter or set to NO_INSTRUCTION. |
purchase_unitsRequired, array | Lists the items or services the buyer is purchasing in the order. |
purchase_units.amountRequired, object | Amount of the order and the currency code. For supported currencies, see Supported countries and currencies. |
payment_sourceobject | Payment method used to fund the order. For Klarna payments, include a klarna object with buyer and experience context information. |
payment_source.klarna.authorization_contextobject | Payment authorization settings with expiration time. |
payment_source.klarna.authorization_context.expiration_timestring | Timestamp of when the authorization expires, specified in UTC format. |
payment_source.klarna.country_codeRequired, object | Country where the buyer is located. Use 2-character ISO 3166-1 alpha-2 country code. |
payment_source.klarna.name.given_nameRequired, object | Buyer's first name. |
payment_source.klarna.name.surnameRequired, object | Buyer's last name. |
payment_source.klarna.billing_addressRequired, object | Buyer's billing address information including address lines, city, state, postal code, and country. |
payment_source.klarna.experience_contextRequired, object | Context information for the Klarna payment experience including locale, intent, and acquiring channel. |
payment_source.klarna.experience_context.localeRequired, object | Locale for the Klarna payment experience. For example, en-GB, en-US. |
application_contextobject | Application context for the order. Customizes the buyer experience during the approval process. |
application_context.return_urlstring | URL to redirect the buyer after they approve the payment. |
application_context.cancel_urlstring | URL to redirect the buyer if they cancel the approval. |