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

# Lista de erros do Lender

> Consulte cada status HTTP retornado pela API do Lender, a condição por trás dele e a ação que o resolve.

**Formato de erro**

O Lender retorna a maioria dos erros como problem details RFC 9457 com o media type `application/problem+json`. Uma recusa por rate limit responde com um corpo plano `{code, title, message}` em
`application/json`.

<CodeGroup>
  ```json Problem detail theme={null}
  {
    "title": "Unprocessable Entity",
    "status": 422,
    "detail": "validation failed",
    "errors": [
      {
        "location": "body.grossRequestedAmount",
        "message": "expected string",
        "value": 50000
      }
    ]
  }
  ```

  ```json Rate-limit body theme={null}
  {
    "code": 429,
    "title": "rate_limit_exceeded",
    "message": "rate limit exceeded"
  }
  ```
</CodeGroup>

**Definições de campo**

* **`status`** – O código de status HTTP.
* **`title`** – O nome do status, como `Unprocessable Entity`.
* **`detail`** – O que deu errado nessa ocorrência. Abaixo de `500`, descreve a recusa específica. Para `500`, `502` e `503`, carrega um valor genérico fixo em vez da causa subjacente.
* **`errors`** – Lista opcional de detalhes de validação de schema. Cada entrada carrega uma `location`, uma `message` e o `value` que o Lender recebeu.
* **`type`** – Presente nos erros que o framework produz, onde carrega o padrão `about:blank` da RFC 9457.

O corpo plano de rate limit carrega `code`, `title` e `message` em vez disso. Seu `code` repete o status HTTP numérico. Seu `title` nomeia a recusa e sua `message` a explica em uma frase. Nenhuma das duas strings varia conforme o chamador ou nomeia sua cota restante.

Faça o branch pelo status HTTP e pelo content type, então leia `detail` para a recusa específica. O middleware de autorização e de idempotência pode responder em seus próprios formatos de resposta.

## Erros do cliente

***

O Lender responde com `4xx` quando a requisição é o problema, e `detail` nomeia a recusa específica.

O Lender restringe uma busca ao tenant do chamador e ao pai nomeado no path. Um identificador que resolve fora desse escopo responde da mesma forma que um identificador que não resolve a nada.

Um comando precisa de um subject na identidade do chamador, porque o Lender registra esse subject como o ator por trás da mudança. Limites de bytes se aplicam duas vezes: o framework limita o corpo da requisição, e cada superfície de ingestão de arquivo limita o arquivo que aceita.

A validação de schema roda antes do handler e preenche `errors` com uma entrada por localização rejeitada. Uma regra de negócio roda dentro do handler e responde apenas com `detail`. Três exemplos: uma verificação de moeda que diverge do empréstimo, uma composição de conjunto que mistura moedas, e um fundo configurado sem um registro.

| Status | O que significa                                                                                     | O que fazer                                                                                                |
| ------ | --------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| `400`  | A requisição chega sem corpo, ou o corpo não tem exatamente o formato JSON que a operação lê.       | Envie um corpo que corresponda ao schema da operação, então repita a requisição.                           |
| `400`  | O header `X-Idempotency` é mais longo do que a operação aceita.                                     | Envie uma chave mais curta, então repita a requisição.                                                     |
| `401`  | A requisição chega sem uma identidade autenticada.                                                  | Envie um bearer token válido, então repita a requisição.                                                   |
| `401`  | A identidade está autenticada, e seu subject está vazio.                                            | Use um token cujo subject identifique o chamador.                                                          |
| `403`  | A requisição não tem uma identidade de tenant validada para o recurso sobre o qual a operação atua. | Use um token com escopo para o tenant que detém o recurso, então repita a requisição.                      |
| `404`  | O identificador no path nomeia um recurso que esse tenant não possui.                               | Verifique o identificador, e verifique o tenant ao qual o token tem escopo.                                |
| `404`  | O recurso existe, e o pai nomeado no path não o possui.                                             | Liste os próprios recursos do pai, então use um identificador dessa lista.                                 |
| `409`  | Outra requisição carregando o mesmo valor de `X-Idempotency` ainda está em execução.                | Aguarde o intervalo de `Retry-After`, então leia o recurso. Não envie o comando novamente.                 |
| `422`  | O valor de `X-Idempotency` já foi usado para uma requisição com um corpo diferente.                 | Não envie esse comando com uma nova chave. Leia primeiro o resultado da requisição original, então decida. |
| `409`  | O `idempotencyKey` no corpo nomeia um termo já registrado com conteúdo diferente.                   | Leia o termo registrado. Uma nova chave registra um segundo termo para o mesmo conjunto.                   |
| `409`  | O recurso está em uma etapa diferente do ciclo de vida, ou já foi encerrado.                        | Leia o recurso, então aja a partir da etapa em que ele está.                                               |
| `409`  | Outro processo alterou o recurso durante a requisição.                                              | Leia o recurso novamente, então repita a requisição.                                                       |
| `409`  | Um registro externo já aceitou esse comando exato.                                                  | Leia o protocolo registrado em vez de emitir o comando novamente.                                          |
| `413`  | O corpo da requisição é maior do que a operação aceita.                                             | Envie um corpo menor.                                                                                      |
| `413`  | O arquivo enviado é maior do que a superfície de ingestão aceita.                                   | Envie um arquivo menor.                                                                                    |
| `405`  | O path existe, e não aceita esse método HTTP.                                                       | Use um método que a operação declara na referência da API.                                                 |
| `415`  | O header `Content-Type` nomeia um formato que a operação não lê.                                    | Envie `application/json`.                                                                                  |
| `429`  | O chamador enviou mais requisições do que o rate limit do deploy permite.                           | Leia o header `Retry-After`, aguarde esse número de segundos, então repita a requisição.                   |
| `422`  | A requisição não corresponde ao schema da operação.                                                 | Corrija cada entrada em `errors`, então repita a requisição.                                               |
| `422`  | A requisição corresponde ao schema, e uma regra de negócio recusa seu conteúdo.                     | Leia `detail`, corrija a requisição, então a envie novamente.                                              |

## Erros do servidor

***

O Lender responde com `5xx` quando a requisição está correta e a chamada não pôde ser concluída. Nesses status, `detail` carrega um valor genérico fixo, então a causa subjacente permanece dentro do serviço.

Um `503` cobre duas condições: uma capacidade que o deploy não executa, e uma dependência que o Lender não consegue alcançar no momento da chamada. Um `502` cobre um terceiro que recusa um comando que o Lender encaminha a ele, como o registro que grava uma cessão de recebíveis.

| Status | O que significa                                                    | O que fazer                                                                                                                                                                                                                                         |
| ------ | ------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `500`  | O Lender não conseguiu concluir a requisição.                      | Em uma leitura, repita a requisição. Em um comando que movimenta dinheiro, leia o recurso primeiro, e repita apenas se o comando não tiver sido aplicado. Se o status persistir, contate o suporte com a operação, o tenant e o horário da chamada. |
| `502`  | O registro para o qual o Lender encaminha recusou o comando.       | A resposta não nomeia o motivo. Verifique a configuração de registro do fundo e os dados do comando, então emita o comando novamente.                                                                                                               |
| `503`  | O deploy não executa a capacidade de que a operação precisa.       | Peça à sua equipe de plataforma para habilitar a capacidade no seu deploy.                                                                                                                                                                          |
| `503`  | Um armazenamento ou uma dependência downstream estava inacessível. | Tente novamente com backoff.                                                                                                                                                                                                                        |
