Reembolsar cobrança
Quick Reference
/api/v1/bank/wallet/charge/{charge_uuid}/refund/{wallet_uuid}/Bearer TokenReembolsar uma cobrançaPor que reembolsos importam
| Sem reembolsos | Com reembolsos |
|---|---|
| Clientes insatisfeitos abrem chargebacks (taxa de disputa de $25+ cada) | Você devolve os fundos proativamente antes de uma disputa ser aberta |
| A taxa de chargeback sobe acima de 1% — bandeiras de cartão sinalizam sua conta | A taxa de reembolso não conta contra seu limite de chargeback |
| Confiança do cliente se deteriora após uma experiência ruim | Reembolsos rápidos transformam um negativo em "eles resolveram" |
| Contabilidade mostra receita superestimada | Valores reembolsados ajustam o relatório de receita automaticamente |
| Tickets de suporte se acumulam com "cadê meu dinheiro?" | Status do reembolso é rastreável via Consultar Cobrança e webhooks |
Fluxo de reembolso
Autenticação
Requer token Bearer. Veja Autenticação.
Parâmetros de caminho
Ambos os UUIDs vão no caminho da URL, não no corpo da requisição nem na query string:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
charge_uuid | string (UUID) | Sim | Cobrança a reembolsar |
wallet_uuid | string (UUID) | Sim | Carteira proprietária da cobrança |
Campos opcionais do corpo
| Campo | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
amount | number (float) | Não | valor reembolsável restante | Valor do reembolso parcial. Se omitido, reembolsa o valor reembolsável restante. Deve ser ≤ amount_remaining |
Diferente da maioria dos endpoints da A55, o endpoint de reembolso recebe charge_uuid e wallet_uuid no caminho da URL:
POST /api/v1/bank/wallet/charge/{charge_uuid}/refund/{wallet_uuid}/
Exemplos de código
Reembolso total
- cURL
- Python
- JavaScript
curl -s -X POST "https://sandbox.api.a55.tech/api/v1/bank/wallet/charge/51dcca6e-7310-4b73-a94c-90835408f2ff/refund/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://sandbox.api.a55.tech")
charge_uuid = "51dcca6e-7310-4b73-a94c-90835408f2ff"
wallet_uuid = "f47ac10b-58cc-4372-a567-0e02b2c3d479"
refund = requests.post(
f"{base}/api/v1/bank/wallet/charge/{charge_uuid}/refund/{wallet_uuid}/",
headers={"Authorization": f"Bearer {token}", "Content-Type": "application/json"},
).json()
print(f"Refund: {refund['charge_uuid']} — Status: {refund['status']}")
const token = process.env.A55_API_TOKEN;
const base = process.env.A55_API_BASE_URL || "https://sandbox.api.a55.tech";
const chargeUuid = "51dcca6e-7310-4b73-a94c-90835408f2ff";
const walletUuid = "f47ac10b-58cc-4372-a567-0e02b2c3d479";
const refund = await fetch(
`${base}/api/v1/bank/wallet/charge/${chargeUuid}/refund/${walletUuid}/`,
{
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
}
).then((r) => r.json());
console.log(`Refund: ${refund.charge_uuid} — Status: ${refund.status}`);
Reembolso parcial
- cURL
- Python
- JavaScript
curl -s -X POST "https://sandbox.api.a55.tech/api/v1/bank/wallet/charge/51dcca6e-7310-4b73-a94c-90835408f2ff/refund/f47ac10b-58cc-4372-a567-0e02b2c3d479/" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"amount": 50.25
}'
partial_refund = requests.post(
f"{base}/api/v1/bank/wallet/charge/{charge_uuid}/refund/{wallet_uuid}/",
json={"amount": 50.25},
headers={"Authorization": f"Bearer {token}", "Content-Type": "application/json"},
).json()
print(
f"Reembolso parcial: {partial_refund['status']} "
f"(reembolsado {partial_refund['amount_refunded']}, "
f"restante {partial_refund['amount_remaining']})"
)
const partialRefund = await fetch(
`${base}/api/v1/bank/wallet/charge/${chargeUuid}/refund/${walletUuid}/`,
{
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ amount: 50.25 }),
}
).then((r) => r.json());
console.log(
`Reembolso parcial: ${partialRefund.status} ` +
`(reembolsado ${partialRefund.amount_refunded}, ` +
`restante ${partialRefund.amount_remaining})`
);
Campos da resposta
| Campo | Tipo | Descrição |
|---|---|---|
charge_uuid | string | Identificador da cobrança reembolsada |
wallet_uuid | string | Carteira proprietária da cobrança |
status | string | refunded quando totalmente reembolsada, partially_refunded quando ainda há saldo restante |
amount_refunded | number (float) | Valor total reembolsado até agora em todas as operações de reembolso desta cobrança |
amount_remaining | number (float) | Valor reembolsável restante. Quando chega a 0, a cobrança está totalmente reembolsada |
message | object | Mensagens do provedor/adquirente coletadas durante a(s) tentativa(s) de reembolso |
refunds | array | Histórico de operações de reembolso realizadas nesta cobrança |
Item de refunds[]
| Campo | Tipo | Descrição |
|---|---|---|
refund_uuid | string | UUID da operação de reembolso |
amount | number (float) | Valor deste reembolso específico |
status | string | Status do reembolso: refunded ou refund_error |
reason | string | Motivo do reembolso |
created | datetime | Data de criação do reembolso (ISO 8601) |
Exemplo completo de resposta
Reembolso total
{
"charge_uuid": "51dcca6e-7310-4b73-a94c-90835408f2ff",
"wallet_uuid": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"status": "refunded",
"amount_refunded": 100.00,
"amount_remaining": 0.00,
"message": {},
"refunds": [
{
"refund_uuid": "9b1f0c88-3a3c-4f2f-9d6e-1f0a2d4e88c1",
"amount": 100.00,
"status": "refunded",
"reason": "customer_request",
"created": "2026-04-27T18:00:00Z"
}
]
}
Reembolso parcial
{
"charge_uuid": "51dcca6e-7310-4b73-a94c-90835408f2ff",
"wallet_uuid": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
"status": "partially_refunded",
"amount_refunded": 50.25,
"amount_remaining": 49.75,
"message": {},
"refunds": [
{
"refund_uuid": "5c2a13f0-5e74-4b21-9c6a-2bd9d9b0aa10",
"amount": 50.25,
"status": "refunded",
"reason": "customer_request",
"created": "2026-04-27T18:00:00Z"
}
]
}
Respostas de erro
| Status | Código | Descrição | Resolução |
|---|---|---|---|
| 400 | errors.wallet.not_found | UUID da carteira não existe | Verifique o wallet_uuid no caminho da URL |
| 400 | errors.wallet.charge_refund_not_available | Cobrança não está em estado reembolsável | Somente cobranças confirmed ou paid podem ser reembolsadas. Verifique o status da cobrança com Consultar cobrança |
| 401 | unauthorized | Token Bearer inválido ou expirado | Renove seu token de acesso via Cognito |
| 422 | errors.wallet.charge_refund_amount_exceeded | amount solicitado é maior que amount_remaining | A resposta inclui o amount_remaining atual — refaça a chamada com um valor ≤ a esse |
Se um pagamento foi feito em parcelas, um reembolso total devolve todas as parcelas integralmente. Você não pode reembolsar uma única parcela. Para devoluções parciais em pagamentos parcelados, use um reembolso parcial com um amount específico.
Processar um reembolso custa nada além do pagamento revertido. Um chargeback custa o valor do pagamento mais uma taxa de disputa ($25–$100 dependendo da bandeira do cartão). Sempre reembolse proativamente quando uma reclamação legítima chegar.
Reembolsos levam 5–10 dias úteis para aparecer no extrato do pagador, dependendo do banco emissor do cartão. Informe seus clientes sobre esse prazo para reduzir tickets de suporte com "cadê meu reembolso?".