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

> ## Agent Instructions
> Leia /llms.txt antes de explorar páginas. A API HTTP usa Authorization: Bearer com o JWT da conta. A chave kl_live_ serve só ao assistente MCP e não substitui o JWT. Não invente rotas, hosts públicos, SDKs ou CLI. companyId e userId vêm da sessão. Consultas não aceitam SQL. Exclusão no assistente exige confirm=true. O webhook público é POST /webhook/leads.

# Erros e códigos

> Envelope de regra versus validação, os code da API e quando repetir a chamada.

Toda resposta da KingLog é JSON. Leia `success` antes de usar `data`. O HTTP diz a classe do problema. O `code` diz o motivo, para o seu sistema tratar sem depender do texto em português.

## Envelope de regra

Depois que a operação rodou e a regra recusou:

```json theme={null}
{
  "success": false,
  "status": 400,
  "message": "Mensagem descritiva do erro",
  "code": "CODIGO",
  "errors": []
}
```

`message` é o texto para a pessoa. `code` é o identificador estável. `status` repete o HTTP.

## Envelope de validação

Antes da operação, quando o corpo, o caminho ou a query não passam no schema:

```json theme={null}
{
  "success": false,
  "error": {},
  "code": "CODIGO_OU_AUSENTE"
}
```

Aqui a mensagem fica em `error`. Quando o schema declara um `code` (por exemplo `EMAIL_FORMAT_INVALID`), ele vem no raiz.

## Códigos

| `code` | HTTP | Quando |
| - | - | - |
| `SUCCESS` | `200` | A operação concluiu. O conteúdo está em `data`. |
| `UNAUTHORIZED` | `401` | JWT ausente ou inválido. |
| `MCP_API_KEY_INVALID` | `401` | Chave `kl_live_` ausente, malformada ou revogada, em `POST /mcp/session`. |
| `MISSING_CONTEXT` | `401` | A sessão chegou sem `companyId` e `userId`. |
| `FORBIDDEN` | `403` | A pessoa, ou a chave com `grants`, não pode esse recurso. |
| `NOT_FOUND` | `404` | Registro, rota, funil, coluna ou métrica inexistente. |
| `QUERY_INVALID` | `400` | Consulta recusada: entidade, campo ou operador fora do schema. |
| `QUERY_ENTITY_FORBIDDEN` | `403` | A conta não lê aquela entidade. |
| `QUERY_TOO_COMPLEX` | `422` | A consulta passou da complexidade permitida. |
| `QUERY_RATE_LIMITED` | `429` | A consulta passou do limite de uso. |
| `QUERY_TIMEOUT` | `504` | A consulta passou do tempo. |
| `EMAIL_FORMAT_INVALID` | `400` | E-mail fora do formato, no contato ou no webhook de lead. |
| `MCP_API_KEY_GRANT_FORBIDDEN` | `403` | `grants` pediu uma permissão que a conta não tem. |
| `MCP_API_KEY_LIMIT` | `400` | Já existem 10 chaves ativas para aquele usuário na empresa. |

A página da operação mostra o `code` de exemplo do **Try it**. Esta página é o índice.

## Quando repetir

Repita em `5xx` (`500`, `504`) e em `429`, com espera. Não invente um segundo POST de criação só porque a primeira resposta atrasou: a tarefa, o lead ou a despesa podem ter sido gravados.

Não repita `400`, `401`, `403` ou `404` com o mesmo corpo. Corrija o campo, o token, a permissão ou o id.

O fluxo passo a passo está em [Tratar erro 400, 401 e 403](https://docs.kinglog.com.br/pages/guides/tratar-erro.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.