Skip to main content

Get charge

Quick Reference

WhatRetrieve a single charge by UUID
WhyCheck payment status, verify amounts, and reconcile transactions in real time
Reading Time5 min
DifficultyBeginner
PrerequisitesAuthentication → Create charge
GET/api/v1/bank/wallet/charge/Bearer TokenRetrieve charge details

Why poll charge status

Without Get ChargeWith Get Charge
You have no visibility after creating a chargeYou see the exact status at any moment
Reconciliation relies on manual checksAutomated reconciliation matches your records to A55
Customer support can't answer "where's my payment?"Instant lookup by charge UUID for support agents
Missed webhooks leave you blindPolling fills gaps when webhooks fail or arrive late
No audit trail for state transitionsupdated_at tracks every status change timestamp

Polling pattern


Authentication

Requires Bearer token. See Authentication.

Query parameters

Both parameters are required in the query string:

FieldTypeRequiredDescription
charge_uuidstring (UUID)YesUnique identifier of the charge to retrieve
wallet_uuidstring (UUID)YesWallet that owns the charge
No request body

This is a GET endpoint. Pass both UUIDs as query parameters, not in the body.


Code examples

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

Practical polling with exponential backoff

import requests, os, time

token = os.environ["A55_API_TOKEN"]
base = os.environ.get("A55_API_BASE_URL", "https://core-manager.a55.tech")
TERMINAL = {"paid", "confirmed", "error", "canceled", "refunded"}

def poll_charge(charge_uuid, wallet_uuid, max_attempts=10):
delay = 2
for attempt in range(max_attempts):
resp = requests.get(
f"{base}/api/v1/bank/wallet/charge/",
params={"charge_uuid": charge_uuid, "wallet_uuid": wallet_uuid},
headers={"Authorization": f"Bearer {token}"},
)
charge = resp.json()
status = charge["status"]
print(f"[{attempt+1}/{max_attempts}] Status: {status}")

if status in TERMINAL:
return charge

time.sleep(delay)
delay = min(delay * 2, 60)

raise TimeoutError("Charge did not reach terminal status")

Response fields

FieldTypeDescription
charge_uuidstringUnique charge identifier
wallet_uuidstringWallet that owns this charge
statusstringCurrent charge status (see table below)
type_chargestringPayment method: credit_card, debit_card, pix, boleto, spei, oxxo, applepay, googlepay, e_wallet
amountnumberTotal charge amount in the original currency
local_currencynumberAmount in the wallet's settlement currency
currencystringISO 4217 currency code
usd_currencynumberEquivalent amount in USD
eur_currencynumberEquivalent amount in EUR
installment_countintegerNumber of installments
installmentsarrayPer-installment breakdown (see below)
created_atstringISO 8601 creation timestamp
updated_atstringISO 8601 last update timestamp

Charge statuses

StatusTerminal?Description
issuedNoCharge created, awaiting payer action (PIX QR, Boleto, checkout)
pendingNoProcessing — awaiting acquirer or 3DS response
confirmedYesPayment authorized and captured successfully
paidYesFunds received and confirmed
errorYesPayment failed — see message array for details
canceledYesCharge canceled before completion
refundedYesCharge refunded (full or partial)

Installment object

FieldTypeDescription
installment_numberintegerInstallment sequence (1-indexed)
local_currencynumberInstallment amount in settlement currency
currencystringISO 4217 currency code
usd_currencynumberInstallment amount in USD
eur_currencynumberInstallment amount in EUR
due_datestringInstallment due date
statusstringInstallment-level status

Complete response example

{
"charge_uuid": "51dcca6e-7310-4b73-a94c-90835408f2ff",
"wallet_uuid": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"status": "confirmed",
"type_charge": "credit_card",
"amount": 450.00,
"local_currency": 450.00,
"currency": "BRL",
"usd_currency": 80.73,
"eur_currency": 70.78,
"installment_count": 3,
"installments": [
{
"installment_number": 1,
"local_currency": 150.00,
"currency": "BRL",
"usd_currency": 26.91,
"eur_currency": 23.59,
"due_date": "2026-03-20",
"status": "confirmed"
},
{
"installment_number": 2,
"local_currency": 150.00,
"currency": "BRL",
"usd_currency": 26.91,
"eur_currency": 23.59,
"due_date": "2026-04-20",
"status": "confirmed"
},
{
"installment_number": 3,
"local_currency": 150.00,
"currency": "BRL",
"usd_currency": 26.91,
"eur_currency": 23.60,
"due_date": "2026-05-20",
"status": "confirmed"
}
],
"created_at": "2026-03-20T14:30:00-03:00",
"updated_at": "2026-03-20T14:30:05-03:00"
}

Error responses

StatusCodeDescriptionResolution
400validation_errorMissing charge_uuid or wallet_uuidBoth query parameters are required
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
429rate_limit_exceededToo many requestsWait and retry after Retry-After header value
Don't over-poll

Polling more than once per second triggers rate limiting. For real-time needs, use webhooks and reserve polling for reconciliation and support lookups.

Both UUIDs are required

Passing only charge_uuid without wallet_uuid returns a 400 error. The API enforces wallet-level scoping for security — you can only retrieve charges belonging to your wallet.