Chargebacks

Enviar defesa

Envia a defesa do chargeback: o texto em description e os anexos já enviados por POST /v1/disputes/{caseId}/evidence/files. O envio é único — depois dele a defesa não aceita mais anexos nem alterações.

POST/v1/disputes/:caseId/evidence
Base URL Produção:https://api.validapay.com.br
Base URL Sandbox:https://sandbox.validapay.com.br
  • Sem attachmentIds, vão todos os anexos do caso. Com a lista, só os escolhidos; os demais saem da defesa. IDs que não são anexos do caso são ignorados.
  • É preciso ao menos um anexo.

A resposta traz evidence.status: SUBMITTED e evidence.submission.status: PENDING. Acompanhe o andamento em GET /v1/disputes/{caseId} e o desfecho em status do chargeback.

Case de uso: Como lojista, quero enviar a defesa com os comprovantes, para contestar um chargeback de um pedido entregue.

Escopos requeridos

charges/write

Path Parameters

caseIdstringobrigatório
Identificador do chargeback (`caseId`), devolvido na listagem

Body

application/json

Content-Type:application/json
JSON
{
  "description": "Produto entregue em 02/10/2026, conforme comprovante assinado pelo comprador.",
  "attachmentIds": [
    "evd_1790598765432_r7t2n5vbc"
  ]
}

Schema

descriptionstringobrigatório
Texto da defesa
attachmentIdsarray[1]opcional
fileId dos anexos que vão na defesa. Sem o campo, vão todos

Query Parameters

typeobrigatório
sempre CHARGEBACK nesta seção
CHARGEBACK
const url = 'https://sandbox.validapay.com.br/v1/disputes/:caseId/evidence?type=CHARGEBACK';

const options = {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
  "description": "Produto entregue em 02/10/2026, conforme comprovante assinado pelo comprador.",
  "attachmentIds": [
    "evd_1790598765432_r7t2n5vbc"
  ]
})
};

fetch(url, options)
  .then(res => res.json())
  .then(json => console.log(json))
  .catch(err => console.error(err));

Response Examples

200Defesa enviada▾
JSON
{
    "caseId": "cbk_1790512345678_k3m9q2xwz",
    "type": "CHARGEBACK",
    "evidence": {
        "description": "Produto entregue em 02/10/2026, conforme comprovante assinado pelo comprador.",
        "status": "SUBMITTED",
        "submittedAt": "2026-10-21T10:15:27.000Z",
        "attachments": [
            {
                "fileId": "evd_1790598765432_r7t2n5vbc",
                "fileName": "comprovante-entrega.pdf",
                "contentType": "application/pdf",
                "size": 184320,
                "uploadedAt": "2026-10-21T10:12:03.000Z"
            }
        ],
        "submission": {
            "status": "PENDING",
            "sentAt": null,
            "protocol": null
        }
    }
}
400Sem descrição▾
JSON
{
    "error": {
        "message": "Descrição da defesa é obrigatória",
        "code": "EVIDENCE_DESCRIPTION_REQUIRED",
        "details": null,
        "timestamp": "2026-10-28T14:20:00.000Z"
    }
}
400Sem anexo▾
JSON
{
    "error": {
        "message": "Pelo menos um anexo é obrigatório",
        "code": "EVIDENCE_ATTACHMENT_REQUIRED",
        "details": null,
        "timestamp": "2026-10-28T14:20:00.000Z"
    }
}
400Defesa bloqueada▾
JSON
{
    "error": {
        "message": "Caso encerrado ou defesa já enviada",
        "code": "EVIDENCE_CASE_LOCKED",
        "details": null,
        "timestamp": "2026-10-28T14:20:00.000Z"
    }
}
404Chargeback não encontrado▾
JSON
{
    "error": {
        "message": "Caso de chargeback não encontrado",
        "code": "CHARGEBACK_CASE_NOT_FOUND",
        "details": null,
        "timestamp": "2026-10-28T14:20:00.000Z"
    }
}