> ## Documentation Index
> Fetch the complete documentation index at: https://docs.scanify.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Arquivos suportados

> Formatos aceitos, MIME types e regras de validação para arquivos enviados

A API aceita PDFs, imagens (JPEG, PNG, TIFF) e XML (para NFE). Antes do OCR, cada arquivo passa por detecção de formato (magic bytes, MIME e extensão) e por uma checagem de segurança.

## Formatos suportados

| Formato | Extensões       | MIME types                                           | Observações                                                |
| ------- | --------------- | ---------------------------------------------------- | ---------------------------------------------------------- |
| PDF     | `.pdf`          | `application/pdf`                                    | Multi-página.                                              |
| JPEG    | `.jpg`, `.jpeg` | `image/jpeg`, `image/jpg`                            | Imagens.                                                   |
| PNG     | `.png`          | `image/png`                                          | Imagens.                                                   |
| TIFF    | `.tif`, `.tiff` | `image/tiff`, `image/tif`                            | Imagens. Multi-página suportado.                           |
| XML     | `.xml`          | `application/xml`, `text/xml`, `application/nfe+xml` | Apenas para `documentType=NFE`. Não aceito em `/classify`. |

A detecção segue a ordem: magic bytes → `Content-Type` → extensão. Magic bytes têm prioridade; divergência com o `Content-Type` é registrada em log mas não bloqueia.

## Como enviar

Dois caminhos:

* **Upload direto** (`multipart/form-data`): campo `file` com o binário. Outros campos (`documentType`, `callbackUrl`, etc.) vão como partes do mesmo form.
* **URL pública** (`application/json`): no objeto `file`, informe `fileUrl` apontando para uma URL HTTPS pública. O Scanify faz o download.

Alternativamente, você pode enviar `fileBase64` + `filename` em JSON quando não tiver uma URL pública.

## Regras de segurança para `fileUrl`

Antes de baixar, a URL é validada:

* Apenas `http://` e `https://`.
* URLs que resolvem para endereços IP não-públicos (loopback, privados, link-local, multicast, internos da nuvem) são bloqueadas com `400 Endereço IP não permitido`. Use apenas URLs públicas.
* **Redirects HTTP não são seguidos** (`maxRedirects: 0`). URLs presigned de S3 que dependem de redirect serão recusadas com erro 400. Use a URL final.
* O DNS é resolvido uma vez e o IP é fixado para o download, evitando DNS rebinding entre a checagem e o request.

## Validação de segurança do conteúdo

Antes do OCR, o buffer do arquivo é inspecionado. Arquivos contendo executáveis, scripts ou conteúdo malicioso conhecido são rejeitados com `400 Arquivo bloqueado pela validação de segurança.`

Arquivos vazios também são rejeitados com `400`.

<Note>
  Não há um limite de tamanho documentado nesta página. Verifique o erro
  retornado pela API caso um upload muito grande seja recusado.
</Note>
