Skip to main content
Most card payments happen in two stages. First, an authorization reserves the funds with the customer’s bank, but no money moves. Then, a capture requests those funds for settlement. Sometimes the final amount isn’t known when you authorize. Orders with variable-weight items, product substitutions, or extra services often end up higher than the estimate. Incremental authorization lets you ask the customer’s bank to raise the existing authorization before you capture, so the higher amount is reserved and you can capture all of it.

Incremental authorization compared to over capture

Over capture lets you capture more than the authorized amount without asking the bank again. Card schemes and acquirers cap how far over the authorized amount you can capture, often to a small percentage. Incremental authorization has no such fixed cap, because the bank approves each increase before you capture it.

How it works

  1. Authorize the payment with intent set to authorize, for the amount you estimate. Set is_amount_estimated to true on connectors that require it.
  2. Increase the authorization when the final amount is known. Call increment authorization with the amount to add.
  3. Capture the payment for up to the new authorized amount using capture transaction.
You can increase the same authorization more than once. Each request adds to the current authorized amount.

Authorize with an estimated amount

Some payment services only accept an increase if the original authorization was flagged as an estimate. Set is_amount_estimated to true when you create the transaction. The examples leave out the payment method and other fields for brevity.
The flag can carry a cost at some payment services, so only set it on transactions you might increase.

Increase the authorization

Send the amount to add, in the smallest currency unit, to increment authorization. The amount is the increase, not the new total. An increase of 1299 on an authorization of 10000 asks the bank for 11299 in total.
The response reports the outcome and returns the updated transaction.
The transaction’s amount stays at the original value. The authorized_amount reflects the new total, and you can capture up to that amount.

Outcomes

The status in the response is one of the following: A failed or pending increase doesn’t affect the original authorization. It stays valid, and you can still capture up to the previous authorized amount.
Treat pending as not yet approved. Don’t capture the increased amount until the authorized_amount on the transaction reflects it.

Requirements

An increase is only sent to the payment service when all of the following are true:
  • The transaction status is authorization_succeeded. A transaction that is captured, voided, or in any other status returns a 400 bad_request error with a detail of type not_valid_status.
  • The transaction was processed by a payment service that supports incremental authorization. Any other payment service returns a 400 error saying the incremental_authorization feature is not supported.
3-D Secure is never performed on an increase. The endpoint accepts an Idempotency-Key header, so you can retry a request safely. See idempotent requests.

Supported connectors

Each connector page lists incremental authorization under its capabilities.

Webhooks and transaction events

When an increase succeeds, Gr4vy sends a transaction.modified webhook with the updated transaction. No webhook is sent for a failed or pending increase. See webhook events. Each increase is recorded on the transaction’s history in the dashboard and in list transaction events:
  • The increment request and response.
  • The request Gr4vy sent to the payment service, and its response.
  • An authorization increment succeeded event, with the previous and new authorized amounts, or an authorization increment failed event, with the error code and the payment service’s response code and description.
When a pending increase is later confirmed by the payment service, the succeeded or failed event is added at that point.

Testing

In sandbox, the card simulator uses the increase amount to simulate each outcome: