# Anexar arquivo à defesa

**Área:** Chargebacks

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`

**Scopes necessários:** `charges/write`

- 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._

### Path parameters

| Campo | Obrigatório | Descrição |
|---|---|---|
| `caseId` | **sim** | Identificador do chargeback (`caseId`), devolvido na listagem |

### Query parameters

| Campo | Obrigatório | Descrição |
|---|---|---|
| `type` | **sim** | sempre CHARGEBACK nesta seção |

### Request body

```json
{
  "fileName": "comprovante-entrega.pdf",
  "contentType": "application/pdf",
  "data": "data:application/pdf;base64,JVBERi0xLjQKJcfsj6IKNSAwIG9iago8PC9MZW5ndGggNiAwIFI+PgpzdHJlYW0K"
}
```

### Campos do body

**Obrigatórios:** `data`

| Campo | Descrição |
|---|---|
| `data` | Conteúdo do arquivo em base64 ou data URL, até 4 MB |

**Opcionais**

| Campo | Descrição |
|---|---|
| `fileName` | 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 |
| `contentType` | Tipo do arquivo. Obrigatório quando data é base64 puro (valores: application/pdf, image/png, image/jpeg, image/webp, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document) |

### Resposta 200: Arquivo 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
    }
}
```


### Resposta 400: Sem conteúdo

```json
{
    "error": {
        "message": "Campo 'data' é obrigatório",
        "code": "EVIDENCE_DATA_REQUIRED",
        "details": null,
        "timestamp": "2026-10-28T14:20:00.000Z"
    }
}
```


### Resposta 400: Sem tipo do arquivo

```json
{
    "error": {
        "message": "Campo 'contentType' é obrigatório",
        "code": "EVIDENCE_CONTENT_TYPE_REQUIRED",
        "details": null,
        "timestamp": "2026-10-28T14:20:00.000Z"
    }
}
```


### Resposta 400: Tipo 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"
    }
}
```


### Resposta 400: Arquivo vazio ou corrompido

```json
{
    "error": {
        "message": "Arquivo inválido",
        "code": "EVIDENCE_FILE_INVALID",
        "details": null,
        "timestamp": "2026-10-28T14:20:00.000Z"
    }
}
```


### Resposta 400: Arquivo 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"
    }
}
```


### Resposta 400: Limite de anexos

```json
{
    "error": {
        "message": "Limite de anexos atingido",
        "code": "EVIDENCE_ATTACHMENT_LIMIT",
        "details": null,
        "timestamp": "2026-10-28T14:20:00.000Z"
    }
}
```


### Resposta 400: Defesa bloqueada

```json
{
    "error": {
        "message": "Caso encerrado ou defesa já enviada",
        "code": "EVIDENCE_CASE_LOCKED",
        "details": null,
        "timestamp": "2026-10-28T14:20:00.000Z"
    }
}
```


### Resposta 404: Chargeback 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"
    }
}
```


---

Página: https://docs.validapay.com.br/referencia/post-anexar-arquivo-a-defesa  
Contrato OpenAPI: https://docs.validapay.com.br/openapi.json