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/files
Base URL Produção:https://api.validapay.com.br
Base 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.
  • data aceita base64 puro ou data URL (data:application/pdf;base64,...). Na data URL, o tipo vem dela e contentType pode 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ório
Identificador 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ório
Conteúdo do arquivo em base64 ou data URL, até 4 MB
fileNamestringopcional
Nome 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
contentTypestringopcional
Tipo do arquivo. Obrigatório quando data é base64 puro
Valores aceitos:application/pdfimage/pngimage/jpegimage/webpapplication/mswordapplication/vnd.openxmlformats-officedocument.wordprocessingml.document

Query Parameters

typeobrigatório
sempre 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"
    }
}