Skip to main content

Multi-step Payments

Handle payments where the final amount is unknown up front by pre-authorizing, adjusting the authorized amount, and capturing the final total.

Some payments do not have a fixed amount at checkout: the total is estimated up front and changes before you capture it. Adyen handles this with pre-authorization and authorization adjustment. For the underlying concepts, see Authorization and Capture.

When to use this

Multi-step payments fit cases where the amount can grow or shrink between authorization and capture:

  • Hospitality and lodging: a hotel pre-authorizes the room at check-in, adds expenses incurred during the guest's stay, and captures the final total at check-out.

  • High-value orders with long delivery times, where the basket or amount changes by the time the order ships.

  • Pre-orders, where you pre-authorize now and extend the authorization until the item is ready.

Pre-authorization

A pre-authorization verifies that the shopper's account is valid and has sufficient funds, but does not debit it, and it lets you adjust the amount later. By default Adyen treats card payments as final authorizations, which cannot be adjusted, so you must flag the request.

Make a payment request that specifies:

  • additionalData.authorisationType: PreAuth

  • additionalData.manualCapture: true (manual capture is required to capture in this flow; you can also enable it for the whole account)

Save the pspReference from the response. You use it for every later adjustment and for the capture.

Adjusting the authorization

To change the authorized amount, make a POST request to /payments/{paymentPspReference}/amountUpdates. You can increase the amount (incremental authorization, for example adding charges as a hotel guest spends during their stay) or decrease it, before you capture. Specify:

  • merchantAccount: your merchant account.

  • amount.currency: the ISO currency code, matching the original authorization.

  • amount.value: the new total in minor units, which is the sum of the original pre-authorized amount and all adjustments.

POST /v71/payments/{paymentPspReference}/amountUpdates
{
  "merchantAccount": "YOUR_MERCHANT_ACCOUNT",
  "amount": { "currency": "USD", "value": 21415 }
}

Notes:

  • You cannot make a zero-value authorization when adjusting.

  • You can make a maximum of 50 adjustments per payment.

  • Adjustment is asynchronous: wait for the AUTHORISATION_ADJUSTMENT webhook to confirm the new amount is authorized. You can also extend the authorization validity period the same way, by sending the current balance as the amount.

Capturing the final amount

After your last adjustment, manually capture the payment to transfer the funds. Make a POST request to /payments/{paymentPspReference}/captures using the pre-authorization pspReference, with the amount set to the final total (the original amount plus all adjustments) and currency matching the authorization. The response returns status: received. Wait for the CAPTURE webhook to confirm the outcome.

If the guest wants to settle with a different payment method, cancel the pre-authorization instead of capturing it. If you need to charge an extra amount after they have left, store the shopper's payment details at pre-authorization and apply the late charge as a token payment. See Tokenization & Recurring Payments.

Support and limits

  • Support for authorization adjustment is limited to specific card schemes and Merchant Category Codes (MCC), and it is ultimately up to the issuing bank to allow it. Apple Pay and Google Pay are supported when the underlying card scheme is. Klarna supports adjustment but only asynchronously.

  • Pre-authorizations expire, and the validity period depends on the card scheme. Adjust and capture before expiry.

  • Contact Valpay Support to confirm manual capture, and synchronous adjustment if you need it, are enabled for your account.

Did this answer your question?