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

# Autenticação

> Como autenticar requisições do MCP público usando API Key

# Autenticação

As tools autenticadas do **MCP público do IndiqAI** exigem o header `X-API-Key` com uma chave válida.

<Note>
  Nem toda rota pública desta documentação usa API Key. Quests públicas e alguns fluxos de email têm contratos próprios. Sempre confira a página do endpoint.
</Note>

## Header de autenticação

```
X-API-Key: indiqai_sua_chave_aqui
```

A chave é vinculada à sua empresa e identifica automaticamente o tenant. Não é necessário enviar nenhum outro identificador de empresa.

## Regras da autenticação pública

* a chave precisa ter acesso à superfície pública da sua conta
* o plano da empresa precisa ter `api_access=true`
* a empresa sempre é derivada da chave, não do body nem da query string

<Warning>
  Use essa chave apenas em backend, worker, middleware ou adaptador MCP seguro. Não exponha a chave em frontend, app mobile ou código cliente.
</Warning>

## Exemplo de requisição autenticada

<CodeGroup>
  ```bash cURL theme={null}
  curl -X GET "https://api.indiqai.com/api/v1/public/clients" \
    -H "X-API-Key: indiqai_sua_chave_aqui"
  ```

  ```typescript JavaScript theme={null}
  const response = await fetch('https://api.indiqai.com/api/v1/public/clients', {
    headers: {
      'X-API-Key': 'indiqai_sua_chave_aqui'
    }
  });

  const data = await response.json();
  ```

  ```python Python theme={null}
  import httpx

  response = httpx.get(
      'https://api.indiqai.com/api/v1/public/clients',
      headers={'X-API-Key': 'indiqai_sua_chave_aqui'}
  )

  data = response.json()
  ```
</CodeGroup>

## Respostas de erro de autenticação

### 422 — Header ausente

Quando o header obrigatório não é enviado, o middleware de erros responde com `422`.

```json theme={null}
{
  "error": "validation_error",
  "message": "Dados inválidos na requisição",
  "details": [
    {
      "type": "missing",
      "loc": ["header", "X-API-Key"],
      "msg": "Field required",
      "input": null
    }
  ],
  "correlation_id": "<uuid>"
}
```

**Status**: `422 Unprocessable Entity`

### 401 — Formato incorreto

```json theme={null}
{
  "error": "http_error",
  "message": "API Key inválida: formato incorreto",
  "detail": "API Key inválida: formato incorreto",
  "correlation_id": "<uuid>"
}
```

**Status**: `401 Unauthorized`

### 401 — API Key inválida ou revogada

```json theme={null}
{
  "error": "http_error",
  "message": "API Key inválida ou revogada",
  "detail": "API Key inválida ou revogada",
  "correlation_id": "<uuid>"
}
```

**Status**: `401 Unauthorized`

<Note>
  Chaves expiradas também falham na validação e atualmente recebem a mesma resposta `401` acima.
</Note>

### Plano sem acesso à API

```json theme={null}
{
  "detail": "Plano da empresa não permite acesso à API Pública. Faça upgrade para um plano com api_access."
}
```

**Status**: `403 Forbidden`

### 403 — Chave sem acesso a esta superfície

Quando a chave não tem permissão para usar a API pública, a API responde `403`.

**Status**: `403 Forbidden`

## Segurança

<Warning>
  **Nunca exponha sua API Key em código frontend, repositórios públicos ou logs.** Trate-a como uma senha.
</Warning>

* A chave completa é exibida **apenas uma vez** na criação
* Revogue chaves comprometidas imediatamente no Dashboard
* Use chaves separadas para ambientes (produção, staging, testes)
* Todas as requisições devem usar **HTTPS**
* Toda chamada autenticada opera automaticamente no contexto da sua empresa

## Gerenciando API Keys

Acesse **Dashboard > Integrações > Chaves de API** para:

* **Criar** novas chaves com nome descritivo
* **Listar** chaves ativas (apenas prefixo visível)
* **Revogar** chaves que não são mais necessárias
