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

# Autenticação

> Como autenticar requisições na API da That's Me via HTTP

## Autenticação

Todas as requisições autenticadas usam **Bearer token** no header HTTP:

```http theme={null}
Authorization: Bearer SUA_API_KEY
```

## Obtendo sua API Key

1. Acesse [app.thatsme.com.br/settings/integrations](https://app.thatsme.com.br/settings/integrations)
2. Clique em **Nova chave de API**
3. Dê um nome descritivo (ex: "Integração n8n", "Script Python")
4. Copie a chave — ela não será exibida novamente

<Warning>
  Nunca exponha sua API key em código público, repositórios ou frontend. Trate como uma senha.
</Warning>

## Fazendo sua primeira requisição

<CodeGroup>
  ```bash cURL theme={null}
  curl https://api.thatsme.com.br/api/v1.0/events \
    -H "Authorization: Bearer SUA_API_KEY" \
    -H "Content-Type: application/json"
  ```

  ```javascript Node.js theme={null}
  const response = await fetch(
    'https://api.thatsme.com.br/api/v1.0/events',
    {
      headers: {
        'Authorization': 'Bearer SUA_API_KEY',
        'Content-Type': 'application/json',
      },
    }
  );
  const data = await response.json();
  console.log(data);
  ```

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

  response = requests.get(
      'https://api.thatsme.com.br/api/v1.0/events',
      headers={
          'Authorization': 'Bearer SUA_API_KEY',
          'Content-Type': 'application/json',
      }
  )
  print(response.json())
  ```

  ```typescript TypeScript theme={null}
  const apiKey = process.env.THATSME_API_KEY;

  const response = await fetch(
    'https://api.thatsme.com.br/api/v1.0/events',
    {
      headers: {
        Authorization: `Bearer ${apiKey}`,
        'Content-Type': 'application/json',
      },
    }
  );

  if (!response.ok) {
    throw new Error(`API error: ${response.status}`);
  }

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

## Ambientes

| Ambiente     | URL base                                 | Quando usar              |
| ------------ | ---------------------------------------- | ------------------------ |
| **Produção** | `https://api.thatsme.com.br/api`         | Dados reais              |
| **Sandbox**  | `https://servicetest.thatsme.com.br/api` | Testes e desenvolvimento |

<Info>
  Use sempre o ambiente Sandbox durante o desenvolvimento.
  Emissões no Sandbox não enviam WhatsApp nem email reais.
</Info>

## Tiers de acesso

| Plano      | Tier API | Acesso                                            |
| ---------- | -------- | ------------------------------------------------- |
| Free       | —        | Sem acesso à API                                  |
| Starter    | Basic    | Leitura (listar eventos, badges, destinatários)   |
| Pro        | Advanced | Leitura + escrita (emitir certificados, webhooks) |
| Business   | Advanced | Mesmo que Pro, com rate limits maiores            |
| Enterprise | Advanced | Rate limits customizados                          |

## Rate limits

| Plano      | Limite                   |
| ---------- | ------------------------ |
| Starter    | 100 requisições/minuto   |
| Pro        | 1.000 requisições/minuto |
| Business   | 1.000 requisições/minuto |
| Enterprise | Customizado              |

Quando o limite é atingido, a API retorna `429 Too Many Requests` com o header `Retry-After` indicando quantos segundos aguardar.

## Erros de autenticação

| Código | Mensagem          | Causa                                 |
| ------ | ----------------- | ------------------------------------- |
| `401`  | Unauthorized      | API key ausente, inválida ou revogada |
| `403`  | Forbidden         | Plano insuficiente para o endpoint    |
| `429`  | Too Many Requests | Rate limit atingido                   |

### Exemplo de resposta de erro

```json theme={null}
{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}
```

<Card title="Referência completa de erros" icon="triangle-exclamation" href="/api/erros">
  Veja todos os códigos de erro e boas práticas de tratamento.
</Card>
