Create order for manual authorization
Last updated: Oct 13th, 10:56pm
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.
- Single-step flow: Include payment source details directly in the create order request for a streamlined integration
- Multi-step flow: Create the order first, then add payment source details in a separate step for more flexibility
Single-step flow
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:
- Review order response: PayPal returns order ID with
PAYER_ACTION_REQUIREDstatus andpayer-actionlink - Redirect your buyer: Send the buyer to the
payer-actionURL to complete payment on Klarna's platform - Monitor payment status: Buyer approves payment and order status changes to
APPROVED - Authorize the payment: Call the authorize payment endpoint to complete manual authorization
- Capture the payment: Send POST request to
/v2/payments/authorizations/{authorization_id}/capturewith the authorization ID from the authorization response - Notify the buyer: Send order confirmation to the buyer
- Sample request
- Sample response
1curl -X POST https://api.sandbox.paypal.com/v2/checkout/orders \2 -H 'Content-Type: application/json' \3 -H 'Authorization: Bearer <ACCESS-TOKEN>' \4 -H 'PayPal-Request-Id: <REQUEST-ID>' \5 -d '{6 "intent": "AUTHORIZE",7 "purchase_units": [8 {9 "payee": {10 "merchant_id": "YR8FPJ7TDVD6A"11 },12 "amount": {13 "currency_code": "GBP",14 "value": 30,15 "breakdown": {16 "item_total": {17 "currency_code": "GBP",18 "value": 3019 },20 "shipping": {21 "currency_code": "GBP",22 "value": "0.00"23 },24 "handling": {25 "currency_code": "GBP",26 "value": "0.00"27 },28 "tax_total": {29 "currency_code": "GBP",30 "value": "0.00"31 },32 "shipping_discount": {33 "currency_code": "GBP",34 "value": "0.00"35 }36 }37 },38 "items": [39 {40 "name": "jersey",41 "description": "jersey",42 "sku": "",43 "unit_amount": {44 "currency_code": "GBP",45 "value": "15.00"46 },47 "tax": {48 "currency_code": "GBP",49 "value": "0.00"50 },51 "category": "PHYSICAL_GOODS",52 "quantity": "1"53 },54 {55 "name": "jersey",56 "description": "jersey",57 "sku": "",58 "unit_amount": {59 "currency_code": "GBP",60 "value": "15.00"61 },62 "tax": {63 "currency_code": "GBP",64 "value": "0.00"65 },66 "category": "PHYSICAL_GOODS",67 "quantity": "1"68 }69 ]70 }71 ],72 "payment_source": {73 "klarna": {74 "authorization_context": {75 "authorization_expiry": "2025-09-29T23:37:39Z"76 },77 "country_code": "GB",78 "billing_address": {79 "address_line_1": "10 New Burlington Street",80 "admin_area_2": "London",81 "admin_area_1": "Greater London",82 "postal_code": "W1S 3BE",83 "country_code": "GB"84 },85 "name": {86 "given_name": "Test",87 "surname": "Person-uk"88 },89 "email_address": "customer@email.uk",90 "phone": {91 "national_number": "7755564318",92 "country_code": "44"93 },94 "experience_context": {95 "locale": "en-GB",96 "acquiring_channel": "ECOMMERCE",97 "return_url": "https://www.example.com/returnUrl",98 "cancel_url": "https://www.example.com/cancelUrl"99 }100 }101 },102 "application_context": {103 "client_configuration": {104 "api": "ORDERS_V2",105 "experience": {106 "entry_point": "PAY_WITH_ALTPAY_KLARNA",107 "payment_method": "PAY_WITH_ALTPAY_KLARNA"108 }109 }110 }111 }'
Multi-step flow
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:
- Review order response: PayPal returns order ID with
CREATEDstatus andapprovelink - Add payment source details: Choose one of two options:
- Send POST request to
/v2/checkout/orders/{order_id}/confirm-payment-sourcewith completepayment_source.klarnaobject - Include payment source details in the authorization call (step 4)
- Send POST request to
- Redirect your buyer: Send the buyer to the
approveURL to complete payment approval - Monitor payment status: Buyer approves payment and order status changes to
APPROVED - Authorize the payment: Call the authorize payment endpoint to complete manual authorization
- Capture the payment: Send POST request to
/v2/payments/authorizations/{authorization_id}/capturewith the authorization ID from the authorization response - Notify the buyer: Send order confirmation to the buyer
- Sample request
- Sample response
1curl -X POST https://api.sandbox.paypal.com/v2/checkout/orders \2 -H 'Content-Type: application/json' \3 -H 'Authorization: Bearer <ACCESS-TOKEN>' \4 -H 'PayPal-Request-Id: <REQUEST-ID>' \5 -d '{6 "intent": "AUTHORIZE",7 "purchase_units": [8 {9 "payee": {10 "merchant_id": "YR8FPJ7TDVD6A"11 },12 "amount": {13 "currency_code": "GBP",14 "value": 30,15 "breakdown": {16 "item_total": {17 "currency_code": "GBP",18 "value": 3019 },20 "shipping": {21 "currency_code": "GBP",22 "value": "0.00"23 },24 "handling": {25 "currency_code": "GBP",26 "value": "0.00"27 },28 "tax_total": {29 "currency_code": "GBP",30 "value": "0.00"31 },32 "shipping_discount": {33 "currency_code": "GBP",34 "value": "0.00"35 }36 }37 },38 "items": [39 {40 "name": "jersey",41 "description": "jersey",42 "sku": "",43 "unit_amount": {44 "currency_code": "GBP",45 "value": "15.00"46 },47 "tax": {48 "currency_code": "GBP",49 "value": "0.00"50 },51 "category": "PHYSICAL_GOODS",52 "quantity": "1"53 },54 {55 "name": "jersey",56 "description": "jersey",57 "sku": "",58 "unit_amount": {59 "currency_code": "GBP",60 "value": "15.00"61 },62 "tax": {63 "currency_code": "GBP",64 "value": "0.00"65 },66 "category": "PHYSICAL_GOODS",67 "quantity": "1"68 }69 ]70 }71 ],72 "application_context": {73 "client_configuration": {74 "api": "ORDERS_V2",75 "experience": {76 "entry_point": "PAY_WITH_ALTPAY_KLARNA",77 "payment_method": "PAY_WITH_ALTPAY_KLARNA"78 }79 }80 }81 }'
| Parameter name | Description |
|---|---|
intentRequired, string |
Indicates whether payment is captured immediately or authorized for later capture.
For Klarna payments, set to |
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. |