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 detailsWhy poll charge status
| Without Get Charge | With Get Charge |
|---|---|
| You have no visibility after creating a charge | You see the exact status at any moment |
| Reconciliation relies on manual checks | Automated 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 blind | Polling fills gaps when webhooks fail or arrive late |
| No audit trail for state transitions | updated_at tracks every status change timestamp |
Polling pattern
Authentication
Requires Bearer token. See Authentication.
Query parameters
Both parameters are required in the query string:
| Field | Type | Required | Description |
|---|---|---|---|
charge_uuid | string (UUID) | Yes | Unique identifier of the charge to retrieve |
wallet_uuid | string (UUID) | Yes | Wallet 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
- Python
- JavaScript
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"
import requests
import os
token = os.environ["A55_API_TOKEN"]
base = os.environ.get("A55_API_BASE_URL", "https://core-manager.a55.tech")
response = requests.get(
f"{base}/api/v1/bank/wallet/charge/",
params={
"charge_uuid": "51dcca6e-7310-4b73-a94c-90835408f2ff",
"wallet_uuid": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
},
headers={"Authorization": f"Bearer {token}"},
)
charge = response.json()
print(f"Status: {charge['status']} | Amount: {charge['currency']} {charge['local_currency']}")
const token = process.env.A55_API_TOKEN;
const base = process.env.A55_API_BASE_URL || "https://core-manager.a55.tech";
const params = new URLSearchParams({
charge_uuid: "51dcca6e-7310-4b73-a94c-90835408f2ff",
wallet_uuid: "f47ac10b-58cc-4372-a567-0e02b2c3d479",
});
const charge = await fetch(`${base}/api/v1/bank/wallet/charge/?${params}`, {
headers: { Authorization: `Bearer ${token}` },
}).then((r) => r.json());
console.log(`Status: ${charge.status} | Amount: ${charge.currency} ${charge.local_currency}`);
Practical polling with exponential backoff
- Python
- JavaScript
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")
const TERMINAL = new Set(["paid", "confirmed", "error", "canceled", "refunded"]);
async function pollCharge(chargeUuid, walletUuid, maxAttempts = 10) {
let delay = 2000;
for (let i = 0; i < maxAttempts; i++) {
const params = new URLSearchParams({ charge_uuid: chargeUuid, wallet_uuid: walletUuid });
const charge = await fetch(`${base}/api/v1/bank/wallet/charge/?${params}`, {
headers: { Authorization: `Bearer ${token}` },
}).then((r) => r.json());
console.log(`[${i + 1}/${maxAttempts}] Status: ${charge.status}`);
if (TERMINAL.has(charge.status)) return charge;
await new Promise((r) => setTimeout(r, delay));
delay = Math.min(delay * 2, 60000);
}
throw new Error("Charge did not reach terminal status");
}
Response fields
| Field | Type | Description |
|---|---|---|
charge_uuid | string | Unique charge identifier |
wallet_uuid | string | Wallet that owns this charge |
status | string | Current charge status (see table below) |
type_charge | string | Payment method: credit_card, debit_card, pix, boleto, spei, oxxo, applepay, googlepay, e_wallet |
amount | number | Total charge amount in the original currency |
local_currency | number | Amount in the wallet's settlement currency |
currency | string | ISO 4217 currency code |
usd_currency | number | Equivalent amount in USD |
eur_currency | number | Equivalent amount in EUR |
installment_count | integer | Number of installments |
installments | array | Per-installment breakdown (see below) |
created_at | string | ISO 8601 creation timestamp |
updated_at | string | ISO 8601 last update timestamp |
Charge statuses
| Status | Terminal? | Description |
|---|---|---|
issued | No | Charge created, awaiting payer action (PIX QR, Boleto, checkout) |
pending | No | Processing — awaiting acquirer or 3DS response |
confirmed | Yes | Payment authorized and captured successfully |
paid | Yes | Funds received and confirmed |
error | Yes | Payment failed — see message array for details |
canceled | Yes | Charge canceled before completion |
refunded | Yes | Charge refunded (full or partial) |
Installment object
| Field | Type | Description |
|---|---|---|
installment_number | integer | Installment sequence (1-indexed) |
local_currency | number | Installment amount in settlement currency |
currency | string | ISO 4217 currency code |
usd_currency | number | Installment amount in USD |
eur_currency | number | Installment amount in EUR |
due_date | string | Installment due date |
status | string | Installment-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
| Status | Code | Description | Resolution |
|---|---|---|---|
| 400 | validation_error | Missing charge_uuid or wallet_uuid | Both query parameters are required |
| 401 | unauthorized | Invalid or expired Bearer token | Refresh your access token via Cognito |
| 404 | errors.wallet.not_found | Wallet UUID does not exist | Verify wallet_uuid is correct |
| 404 | CHARGE_NOT_FOUND | Charge not found for this wallet | Verify both UUIDs match the original charge |
| 429 | rate_limit_exceeded | Too many requests | Wait 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.