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

# Erros

> O formato e os códigos da 1.0

<Note>**Beta** — o contrato da 1.0 está em evolução. Os códigos da 0.1 ficam em [Erros (0.1)](/reference/errors).</Note>

Todo erro vem no mesmo envelope, com um código estável e uma mensagem para humanos:

```json theme={null}
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "informe amount_cents (número) OU amount_minor (string)"
  }
}
```

Quando o erro tem detalhes (o limite que estourou, o campo que faltou), eles vêm **dentro** de `error`, ao lado
de `code` e `message`. Decida pelo `code`; a `message` pode mudar.

| Status | Código                                                      | Quando                                                           |
| ------ | ----------------------------------------------------------- | ---------------------------------------------------------------- |
| `400`  | `VALIDATION_ERROR`                                          | o corpo não passou na validação (campo faltando, formato errado) |
| `401`  | `AUTH_MISSING_KEY` · `AUTH_INVALID_KEY` · `AUTH_IP_BLOCKED` | veja [Autenticação](/v1.0/authentication)                        |
| `403`  | `FORBIDDEN`                                                 | a chave não tem o escopo deste endpoint                          |
| `404`  | `NOT_FOUND`                                                 | o recurso não existe, ou não é desta conta                       |
| `422`  | `PRICING_NO_SCHEDULE`                                       | a conta não tem tarifa vigente para a operação                   |
| `422`  | `ROUTING_NO_PROVIDER`                                       | nenhum provedor atende este trilho agora                         |
| `422`  | `INSUFFICIENT_FUNDS`                                        | o saldo não cobre o saque                                        |
| `422`  | `WITHDRAWAL_LIMIT_EXCEEDED`                                 | o saque passa do limite da conta                                 |
| `502`  | `ROUTING_ALL_FAILED`                                        | todos os provedores tentados recusaram                           |
| `503`  | `FX_UNAVAILABLE`                                            | sem cotação para converter agora — tente de novo                 |

Repetir um `POST` depois de um timeout é seguro: a idempotência é pelo `external_id`.
