Skip to main content

Capture charge

Quick Reference

WhatCapture a previously authorized charge
WhyHold funds first, charge the final amount later — essential for hotels, car rentals, and marketplaces
Reading Time5 min
DifficultyIntermediate
PrerequisitesAuthentication → Create charge (with capture: false)
POST/api/v1/bank/wallet/charge/capture/Bearer TokenCapture an authorized charge

Why separate authorization and capture

Without auth + captureWith auth + capture
Hotel charges $500 even if the guest spends $320Hotel authorizes $500 at check-in, captures $320 at checkout
Car rental can't hold a damage depositCar rental authorizes $2,000 deposit, captures only actual charges
Marketplace charges buyer before seller confirms stockMarketplace holds funds until seller ships the item
Overcharges lead to refunds, disputes, and churnPartial capture charges only what's owed — no refund needed
Restaurants can't add tips post-authorizationRestaurant authorizes the bill, captures bill + tip later

Authorization and capture flow


Authentication

Requires Bearer token. See Authentication.

Request body

FieldTypeRequiredDescription
charge_uuidstring (UUID)YesAuthorized charge to capture
wallet_uuidstring (UUID)YesWallet that owns the charge
amountnumberNoCapture amount. Omit for full capture. Pass a lower value for partial capture
Partial capture

When amount is less than the original authorized amount, A55 captures only the specified amount and releases the remaining hold. Not all acquirers support partial capture — check Provider capabilities for details.


Code examples

Full capture

curl -s -X POST https://core-manager.a55.tech/api/v1/bank/wallet/charge/capture/ \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"charge_uuid": "51dcca6e-7310-4b73-a94c-90835408f2ff",
"wallet_uuid": "f47ac10b-58cc-4372-a567-0e02b2c3d479"
}'

Partial capture (hotel checkout example)

curl -s -X POST https://core-manager.a55.tech/api/v1/bank/wallet/charge/capture/ \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"charge_uuid": "51dcca6e-7310-4b73-a94c-90835408f2ff",
"wallet_uuid": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"amount": 320.00
}'

Response fields

The response follows the same structure as Create charge with status updated to confirmed:

FieldTypeDescription
charge_uuidstringUnique charge identifier
statusstringconfirmed after successful capture
local_currencynumberCaptured amount in settlement currency
currencystringISO 4217 currency code
usd_currencynumberCaptured amount in USD
eur_currencynumberCaptured amount in EUR
typestringPayment method (credit_card, debit_card)
datestringOriginal charge creation date
descriptionstringCharge description
due_datestringPayment due date
messagearray/nullnull on success, error details on failure
installment_countintegerNumber of installments
installmentsarrayPer-installment breakdown with updated amounts

Complete response example

{
"status": "confirmed",
"charge_uuid": "51dcca6e-7310-4b73-a94c-90835408f2ff",
"local_currency": 320.00,
"currency": "BRL",
"usd_currency": 57.41,
"eur_currency": 50.33,
"type": "credit_card",
"date": "2026-03-15",
"description": "Hotel reservation — Grand Suite",
"due_date": "2026-03-20",
"message": null,
"installment_count": 1,
"installments": [
{
"local_currency": 320.00,
"currency": "BRL",
"usd_currency": 57.41,
"eur_currency": 50.33,
"due_date": "2026-03-20",
"status": "confirmed",
"installment_number": 1
}
]
}

Error responses

StatusCodeDescriptionResolution
400errors.wallet.charge_capture_not_availableCharge is not in a capturable stateVerify the charge status is authorized. Already captured, expired, or failed charges cannot be captured
401unauthorizedInvalid or expired Bearer tokenRefresh your access token via Cognito
404errors.wallet.not_foundWallet UUID does not existVerify wallet_uuid is correct
404CHARGE_NOT_FOUNDCharge not found for this walletVerify both UUIDs match the original charge
422amount_exceeds_authorizationCapture amount exceeds authorized amountCapture amount must be ≤ the originally authorized amount
Capture within 7 days

Authorization holds expire after 7 days on most card networks. Capture before the hold expires, or the authorization will be voided automatically and you'll need to create a new charge.

This endpoint uses POST, not PUT

Despite being an update operation, the OpenAPI spec defines capture as POST /charge/capture/. Use POST in your integration.

Setting up auth-only charges

To use capture, you must first create a charge with capture: false in the Create charge request. If capture is true (default), the charge is authorized and captured in a single step — there's nothing to capture separately.