# Erros

Da documentação da API do Lero: https://lero.studio/docs#erros. Tudo num arquivo só: https://lero.studio/docs/llms-full.txt.

Todo erro volta em JSON, com um código fixo no campo `erro` e uma mensagem em português. Trate pelo `erro`, nunca pelo texto da `mensagem`. Nos erros da fala e da transcrição também vêm `pedido` e, quando é um campo, `campo`.

```json
{"erro": "sem_credito", "mensagem": "Os créditos da conta acabaram.", "pedido": "3f9c1e0a7b2d4c6e8a1b3d5f7e9c0a2b"}
```

| status | erro | quando |
|---|---|---|
| 400 | `texto_invalido` | O texto está vazio, passou de 500 caracteres ou a voz não aceitou (emojis e símbolos). |
| 400 | `voz_invalida` | A voz não existe. Use `rio`, `sp` ou `niteroi`. |
| 400 | `audio_invalido` | Transcrição: o arquivo está vazio, não tem áudio que dê para ler ou o formato não é aceito. |
| 400 | `url_invalida` | Transcrição: a `url` não é https pública, não respondeu 200 ou não deu para baixar. |
| 400 | `formato_invalido` | Transcrição: o `formato` não é `json`, `texto`, `srt` nem `vtt`. |
| 400 | `idioma_invalido` | Transcrição: o `idioma` não é `pt-BR`. |
| 400 | `modelo_invalido` | O `model` não é `Lero v1`. |
| 400 | `pedido_invalido` | O corpo não é JSON. Na transcrição: o corpo não é multipart nem JSON, ou veio sem `audio` e sem `url`, ou com os dois. |
| 401 | `sem_chave` | O pedido veio sem chave. |
| 401 | `chave_invalida` | A chave está errada ou foi revogada. |
| 401 | `chave_vencida` | A chave passou da validade. |
| 402 | `sem_credito` | Os créditos da conta não cobrem o pedido. Na transcrição, o JSON traz `custo` (os créditos que o áudio precisa) e `saldo`. |
| 402 | `teto_da_chave` | A chave chegou ao teto de créditos do mês. |
| 403 | `plano` | A conta não está num plano com API (Creator ou Dev). |
| 403 | `escopo` | A chave não tem o escopo Fala (vale para a fala e a transcrição). |
| 403 | `bloqueado` | A conta está bloqueada. |
| 413 | `audio_grande` | Transcrição: o arquivo no corpo passou de 4 MB (mande por `url`) ou o da `url` passou de 500 MB. |
| 413 | `audio_longo` | Transcrição: o áudio passou de 2 h. |
| 429 | `muitos_pedidos` | Passou de 60 pedidos por minuto na conta. Espere o `Retry-After`. |
| 429 | `simultaneas` | O plano já está no limite de gerações simultâneas (Creator 5, Dev 10). Espere um terminar. |
| 429 | `ocupado` | A voz ou a transcrição está com fila. Espere o `Retry-After`. |
| 503 | `carregando` | A voz está subindo. Espere o `Retry-After`. |
| 503 | `motor_desligado` | A voz ou a transcrição está fora do ar. Espere o `Retry-After`. |
| 502 | `falhou` | A geração da fala ou a transcrição falhou. Tente de novo. |
| 504 | `demorou` | A geração da fala ou a transcrição passou do tempo. Tente de novo. |
| 500 | `interno` | Erro do nosso lado. Tente de novo; se continuar, mande o `X-Pedido-Id`. |
| 400 | `oferta_invalida` | Falta a SDP offer, ou ela não começa com `v=0`, ou passou de 20 mil caracteres. |
| 400 | `versao_invalida` | A `versao` não está na lista do `GET /v1/agents` para a sua chave. |
| 400 | `llm_invalido` | O `llm` não está na lista do `GET /v1/agents`. |
| 400 | `roteiro_invalido` | Um campo do custom agent passou do limite. O campo vem em `campo`. |
| 502 | `sem_bot` | O agente não respondeu à offer. Tente de novo. |
| 503 | `desligado` | Os agentes estão fora do ar agora. Espere o `Retry-After`. |

Quando a geração da fala falha depois da cobrança, o Lero devolve os créditos na hora: o campo `cobrado` vem `0` e a mensagem termina com "Nada foi cobrado.". A transcrição só cobra quando dá certo: erro na transcrição nunca gasta crédito.
