Chargebacks
Fila de chargebacks do seller, com dossiê de provas, classificação e desfecho.
A Central de Chargebacks mostra ao seller os casos em que um cliente contestou uma compra dele no cartão. Não há módulo nem privilégio extra: basta ser seller. O seller só vê e altera os próprios casos; o caso de outro seller responde como se não existisse.
Listar chargebacks
Um chargeback acontece quando o cliente contesta a cobrança com o banco dele. A plataforma abre um caso com prazo de 7 dias para o seller se defender, e já monta um dossiê de provas. Lista os casos do seller, os de prazo mais curto primeiro. O tamanho da página é fixo em 50. Casos abertos com prazo vencido são marcados expired na leitura.
/api/v1/vendor/chargebacksSellerCasos de chargeback do seller
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (veja Tokens).Parâmetros de consulta
statusstringopen, evidence_ready, submitted, won, lost, resolved_refunded, expired).pageintegerpadrão: 1Exemplo de requisição
curl "$BASE_URL/api/v1/vendor/chargebacks?status=open&page=1" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"cases": [
{
"id": "e3a01a16-bf25-496d-899d-0418644f4cda",
"order_id": "f1b696f9-7674-480d-96a6-5ec81efc8246",
"gateway": "pagarme",
"gateway_dispute_id": "dp_1234",
"amount_cents": 50000,
"reason": "fraud",
"classification": "fraud",
"status": "open",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"detected_at": "2026-10-05T05:23:08Z",
"due_at": "2026-10-12T05:23:08Z",
"created_at": "2026-10-05T05:23:08Z",
"updated_at": "2026-10-05T05:23:08Z"
}
],
"total": 1
}Campos da resposta
casesobject[]Casos da página.
iduuidorder_iduuidgatewaystringpagarme, stripe).gateway_dispute_idstringamount_centsintegerreasonstringclassificationstringfraud). Omitido se vazio.statusstringopenevidence_readysubmittedwonlostresolved_refundedexpiredvendor_iduuidreturn_iduuiddetected_atstringdue_atstringexpired.submitted_atstringsubmitted_byuuidresolved_atstringcreated_atstringupdated_atstringtotalintegerErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Token ausente, inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador), ou o usuário não está vinculado a nenhum seller. | {"error":"insufficient permissions"} |
| 403 | O usuário não está vinculado a nenhum seller. | {"error":"no vendor account associated with this user"} |
Indicadores de chargeback
Resumo da fila de casos: quantos estão abertos, quantos vencem em até 2 dias, ganhos, perdidos, a taxa de chargeback e o valor perdido.
/api/v1/vendor/chargebacks/statsSellerIndicadores dos chargebacks do seller
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (veja Tokens).Exemplo de requisição
curl "$BASE_URL/api/v1/vendor/chargebacks/stats" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"open": 2,
"due_soon": 1,
"won": 3,
"lost": 1,
"chargeback_rate": 0.012,
"lost_amount_cents": 50000
}Campos da resposta
openintegeropen ou evidence_ready.due_soonintegerwonintegerlostintegerchargeback_ratenumber0.012 = 1,2%).lost_amount_centsintegerErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Token ausente, inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador), ou o usuário não está vinculado a nenhum seller. | {"error":"insufficient permissions"} |
| 403 | O usuário não está vinculado a nenhum seller. | {"error":"no vendor account associated with this user"} |
Ver um chargeback
Devolve o caso e as evidências que a plataforma juntou: retrato do pedido, análise antifraude, histórico do cliente, rastreio e nota fiscal. Evidência com available: false ainda não existe (por exemplo o rastreio de um pedido sem envio).
/api/v1/vendor/chargebacks/{id}SellerCaso de chargeback com o dossiê de provas
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (veja Tokens).Parâmetros de caminho
iduuidobrigatórioExemplo de requisição
curl "$BASE_URL/api/v1/vendor/chargebacks/e3a01a16-bf25-496d-899d-0418644f4cda" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"case": {
"id": "e3a01a16-bf25-496d-899d-0418644f4cda",
"order_id": "f1b696f9-7674-480d-96a6-5ec81efc8246",
"gateway": "pagarme",
"gateway_dispute_id": "dp_1234",
"amount_cents": 50000,
"reason": "fraud",
"classification": "fraud",
"status": "open",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"detected_at": "2026-10-05T05:23:08Z",
"due_at": "2026-10-12T05:23:08Z",
"created_at": "2026-10-05T05:23:08Z",
"updated_at": "2026-10-05T05:23:08Z"
},
"evidences": [
{
"id": "446681d5-59e3-4988-92d6-1cd9ba69148f",
"case_id": "e3a01a16-bf25-496d-899d-0418644f4cda",
"kind": "order_snapshot",
"payload": {
"status": "O",
"created_at": "2026-10-04T19:00:45Z",
"total_cents": 3963,
"amount_cents": 50000,
"order_number": "VND-20261004-04314",
"payment_status": "P"
},
"available": true,
"created_at": "2026-10-05T07:11:01Z"
},
{
"id": "989781e6-f4e5-4287-a5ee-40d57c29dc5b",
"case_id": "e3a01a16-bf25-496d-899d-0418644f4cda",
"kind": "tracking",
"payload": {},
"available": false,
"created_at": "2026-10-05T07:11:01Z"
}
]
}Campos da resposta
caseobjectO caso (mesmos campos da listagem).
iduuidorder_iduuidgatewaystringpagarme, stripe).gateway_dispute_idstringamount_centsintegerreasonstringclassificationstringfraud). Omitido se vazio.statusstringopenevidence_readysubmittedwonlostresolved_refundedexpiredvendor_iduuidreturn_iduuiddetected_atstringdue_atstringexpired.submitted_atstringsubmitted_byuuidresolved_atstringcreated_atstringupdated_atstringevidencesobject[]Dossiê de provas.
iduuidcase_iduuidkindstringorder_snapshotfraud_analysiscustomer_historytrackingnfepayloadobjectkind.file_urlstringavailablebooleancreated_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 404 | O caso não existe ou é de outro seller (a plataforma não diferencia). | {"error":"chargeback case not found"} |
| 500 | id não é um UUID válido (hoje volta 500, a mensagem está em detail). | {"error":"failed to load chargeback","detail":"o valor \"xyz\" não é um uuid válido..."} |
| 401 | Token ausente, inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador), ou o usuário não está vinculado a nenhum seller. | {"error":"insufficient permissions"} |
| 403 | O usuário não está vinculado a nenhum seller. | {"error":"no vendor account associated with this user"} |
Atualizar um chargeback
O seller classifica o caso e move sua situação: marca como enviado (submitted, grava data e autor) ou registra o desfecho (won, lost, resolved_refunded, que gravam resolved_at e avisam a loja). O motivo (reason) e o valor (amount_cents) só a loja altera: enviar qualquer um dos dois dá 403.
/api/v1/vendor/chargebacks/{id}SellerClassificar o caso ou registrar sua situação
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (veja Tokens).Content-Typestringobrigatórioapplication/json.Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
classificationstringstatusstringsubmitted, won, lost e resolved_refunded têm efeitos próprios. Outro texto é gravado como veio, sem validação.Exemplo de requisição
curl -X PUT "$BASE_URL/api/v1/vendor/chargebacks/e3a01a16-bf25-496d-899d-0418644f4cda" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"classification": "fraud",
"status": "submitted"
}'Resposta
{
"id": "e3a01a16-bf25-496d-899d-0418644f4cda",
"order_id": "f1b696f9-7674-480d-96a6-5ec81efc8246",
"gateway": "pagarme",
"gateway_dispute_id": "dp_1234",
"amount_cents": 50000,
"reason": "fraud",
"classification": "fraud",
"status": "submitted",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"detected_at": "2026-10-05T05:23:08Z",
"due_at": "2026-10-12T05:23:08Z",
"created_at": "2026-10-05T05:23:08Z",
"updated_at": "2026-10-05T05:23:08Z",
"submitted_at": "2026-10-08T10:00:00Z",
"submitted_by": "b00d3e7c-d5b4-4942-827a-06e2c43645af"
}Campos da resposta
iduuidorder_iduuidgatewaystringpagarme, stripe).gateway_dispute_idstringamount_centsintegerreasonstringclassificationstringfraud). Omitido se vazio.statusstringopenevidence_readysubmittedwonlostresolved_refundedexpiredvendor_iduuidreturn_iduuiddetected_atstringdue_atstringexpired.submitted_atstringsubmitted_byuuidresolved_atstringcreated_atstringupdated_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Corpo inválido ou falha ao gravar. | {"error":"invalid request body","detail":"..."} |
| 403 | Enviou reason ou amount_cents, que são só da loja. | {"error":"chargeback_fact_admin_only","detail":"chargeback: reason e amount_cents só podem ser alterados pelo admin da loja"} |
| 404 | O caso não existe ou é de outro seller (a plataforma não diferencia). | {"error":"chargeback case not found"} |
| 401 | Token ausente, inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador), ou o usuário não está vinculado a nenhum seller. | {"error":"insufficient permissions"} |
| 403 | O usuário não está vinculado a nenhum seller. | {"error":"no vendor account associated with this user"} |