Chargebacks
Anexar arquivo à defesa
Anexa um arquivo à defesa do chargeback. Envie um arquivo por chamada, em base64; a defesa só segue depois de POST /v1/disputes/{caseId}/evidence.
POST
/v1/disputes/:caseId/evidence/filesBase URL Produção:
https://api.validapay.com.brBase URL Sandbox:
https://sandbox.validapay.com.br- Formatos aceitos: PDF, PNG, JPEG, WEBP, DOC e DOCX.
- Até 4 MB por arquivo e 10 anexos por chargeback.
dataaceita base64 puro ou data URL (data:application/pdf;base64,...). Na data URL, o tipo vem dela econtentTypepode ser omitido. Em base64 puro,contentTypeé obrigatório.
Anexar deixa a defesa em DRAFT. Depois do envio, ou com o caso encerrado, a rota responde 400 EVIDENCE_CASE_LOCKED.
Bons anexos: comprovante de entrega, conversa com o comprador, nota fiscal, registro de acesso ao serviço.
Case de uso: Como lojista, quero anexar o comprovante de entrega, para provar que o pedido contestado foi recebido.
Escopos requeridos
charges/write
Path Parameters
caseIdstringobrigatórioIdentificador do chargeback (`caseId`), devolvido na listagem
Body
application/json
Content-Type:application/json
JSON
{
"fileName": "comprovante-entrega.pdf",
"contentType": "application/pdf",
"data": "data:application/pdf;base64,JVBERi0xLjQKJcfsj6IKNSAwIG9iago8PC9MZW5ndGggNiAwIFI+PgpzdHJlYW0K"
}Schema
datastringobrigatórioConteúdo do arquivo em base64 ou data URL, até 4 MB
fileNamestringopcionalNome do arquivo. Mantém letras sem acento, números, espaço, ponto, hífen, sublinhado e parênteses; o resto vira _. Sem nome, fica arquivo
contentTypestringopcionalTipo do arquivo. Obrigatório quando data é base64 puro
Valores aceitos:
application/pdfimage/pngimage/jpegimage/webpapplication/mswordapplication/vnd.openxmlformats-officedocument.wordprocessingml.documentQuery Parameters
typeobrigatóriosempre CHARGEBACK nesta seção
CHARGEBACK
const url = 'https://sandbox.validapay.com.br/v1/disputes/:caseId/evidence/files?type=CHARGEBACK';
const options = {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
"fileName": "comprovante-entrega.pdf",
"contentType": "application/pdf",
"data": "data:application/pdf;base64,JVBERi0xLjQKJcfsj6IKNSAwIG9iago8PC9MZW5ndGggNiAwIFI+PgpzdHJlYW0K"
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));Response Examples
200Arquivo anexado▾
JSON
{
"fileId": "evd_1790598765432_r7t2n5vbc",
"fileName": "comprovante-entrega.pdf",
"contentType": "application/pdf",
"size": 184320,
"uploadedAt": "2026-10-21T10:12:03.000Z",
"evidence": {
"description": null,
"status": "DRAFT",
"submittedAt": null,
"attachments": [
{
"fileId": "evd_1790598765432_r7t2n5vbc",
"fileName": "comprovante-entrega.pdf",
"contentType": "application/pdf",
"size": 184320,
"uploadedAt": "2026-10-21T10:12:03.000Z"
}
],
"submission": null
}
}400Sem conteúdo▾
JSON
{
"error": {
"message": "Campo 'data' é obrigatório",
"code": "EVIDENCE_DATA_REQUIRED",
"details": null,
"timestamp": "2026-10-28T14:20:00.000Z"
}
}400Sem tipo do arquivo▾
JSON
{
"error": {
"message": "Campo 'contentType' é obrigatório",
"code": "EVIDENCE_CONTENT_TYPE_REQUIRED",
"details": null,
"timestamp": "2026-10-28T14:20:00.000Z"
}
}400Tipo de arquivo não aceito▾
JSON
{
"error": {
"message": "Tipo de arquivo não permitido",
"code": "EVIDENCE_CONTENT_TYPE_NOT_ALLOWED",
"details": null,
"timestamp": "2026-10-28T14:20:00.000Z"
}
}400Arquivo vazio ou corrompido▾
JSON
{
"error": {
"message": "Arquivo inválido",
"code": "EVIDENCE_FILE_INVALID",
"details": null,
"timestamp": "2026-10-28T14:20:00.000Z"
}
}400Arquivo acima de 4 MB▾
JSON
{
"error": {
"message": "Arquivo excede o limite de 4 MB",
"code": "EVIDENCE_FILE_TOO_LARGE",
"details": null,
"timestamp": "2026-10-28T14:20:00.000Z"
}
}400Limite de anexos▾
JSON
{
"error": {
"message": "Limite de anexos atingido",
"code": "EVIDENCE_ATTACHMENT_LIMIT",
"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"
}
}