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

# Autenticação

> Como autenticar suas requisições usando API Key via Bearer Token.

# Autenticação

Todos os endpoints da API (exceto `/v1/status`) exigem uma **API Key** válida. A key é enviada em cada requisição através do header HTTP `Authorization`, no formato Bearer Token.

A validação é feita pelo middleware `EnsureValidApiKey`, que verifica se a key existe na base de dados e está ativa. Não há cookies, sessões ou JWT — cada requisição é autenticada de forma independente.

## Como enviar a API Key

Adicione o header `Authorization` com o prefixo `Bearer` seguido da sua key:

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

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

## Exemplos de código

Substitua `SUA_API_KEY` pela key fornecida após o cadastro.

<CodeGroup>
  ```bash curl theme={null}
  curl -H "Authorization: Bearer SUA_API_KEY" \
    https://api.dadosfutebol.com.br/v1/campeonatos
  ```

  ```js JavaScript theme={null}
  const resposta = await fetch('https://api.dadosfutebol.com.br/v1/campeonatos', {
    headers: {
      'Authorization': 'Bearer SUA_API_KEY',
      'Accept': 'application/json',
    },
  });

  if (!resposta.ok) {
    const erro = await resposta.json();
    throw new Error(erro.mensagem);
  }

  const { data, meta } = await resposta.json();
  ```

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

  headers = {
      'Authorization': 'Bearer SUA_API_KEY',
      'Accept': 'application/json',
  }

  resposta = requests.get('https://api.dadosfutebol.com.br/v1/campeonatos', headers=headers)
  resposta.raise_for_status()
  dados = resposta.json()
  ```

  ```php PHP theme={null}
  $ch = curl_init('https://api.dadosfutebol.com.br/v1/campeonatos');
  curl_setopt_array($ch, [
      CURLOPT_HTTPHEADER     => ['Authorization: Bearer SUA_API_KEY'],
      CURLOPT_RETURNTRANSFER => true,
  ]);
  $resposta = json_decode(curl_exec($ch), true);
  curl_close($ch);
  ```
</CodeGroup>

## Erros de autenticação

Quando a autenticação falha, a API retorna `HTTP 401` com um JSON explicativo.

### API Key não fornecida

O header `Authorization` está ausente ou vazio.

```json theme={null}
{
  "erro": "Não autorizado",
  "mensagem": "API Key não fornecida. Informe o token no header Authorization: Bearer {api_key}"
}
```

### API Key inválida ou inativa

A key foi fornecida, mas não existe na base de dados ou foi desativada.

```json theme={null}
{
  "erro": "Não autorizado",
  "mensagem": "API Key inválida ou inativa"
}
```

## Planos e acesso a endpoints

Cada API Key pertence a um **plano** que determina quais endpoints e campeonatos estão disponíveis.

### Plano Free

O plano free tem acesso limitado a **campeonatos brasileiros** e aos endpoints de **tabela, artilharia e rodadas**.

| Endpoint                             | Free                                      | Pro / Enterprise |
| ------------------------------------ | ----------------------------------------- | ---------------- |
| `GET /v1/campeonatos`                | Filtrado (Série A/B/C/D e Copa do Brasil) | Completo         |
| `GET /v1/campeonatos/:id`            | Série A/B/C/D e Copa do Brasil            | Todos            |
| `GET /v1/campeonatos/:id/tabela`     | Série A/B/C/D e Copa do Brasil            | Todos            |
| `GET /v1/campeonatos/:id/artilharia` | Série A/B/C/D e Copa do Brasil            | Todos            |
| `GET /v1/campeonatos/:id/rodadas`    | Série A/B/C/D e Copa do Brasil            | Todos            |
| `GET /v1/campeonatos/:id/partidas`   | Bloqueado                                 | Completo         |
| `GET /v1/campeonatos/:id/fases`      | Bloqueado                                 | Completo         |
| `GET /v1/partidas/ao-vivo`           | Bloqueado                                 | Completo         |
| `GET /v1/partidas/:id/eventos`       | Bloqueado                                 | Completo         |
| `GET /v1/partidas/:id/estatisticas`  | Bloqueado                                 | Completo         |
| `GET /v1/times`                      | Bloqueado                                 | Completo         |
| `GET /v1/jogadores`                  | Bloqueado                                 | Completo         |
| `GET /v1/me`                         | Permitido                                 | Permitido        |

<Warning>
  Acessar um endpoint ou campeonato fora do seu plano retorna `HTTP 403`:
</Warning>

```json theme={null}
{
  "erro": "Plano insuficiente",
  "mensagem": "Seu plano (free) não tem acesso a este recurso. Faça upgrade para pro ou enterprise."
}
```

### Plano Pro

Acesso completo a todos os endpoints e campeonatos, incluindo Copa do Mundo, partidas ao vivo, eventos, estatísticas, times e jogadores.

### Plano Enterprise

Mesmo acesso do Pro, com limites de requisições personalizados.

## Rate Limiting

Cada API Key tem um limite de requisições por período, determinado pelo **plano** associado a ela.

| Plano          | Limite diário     | Limite mensal      |
| -------------- | ----------------- | ------------------ |
| **Free**       | 100 requisições   | 3.000 requisições  |
| **Pro**        | 1.000 requisições | 30.000 requisições |
| **Enterprise** | Sob demanda       | Sob demanda        |

Os dois limites (dia e mês) valem em conjunto: ao atingir qualquer um deles, novas requisições retornam **`429 Too Many Requests`** até a renovação da janela.

```json theme={null}
{
  "erro": "Limite de requisições atingido",
  "mensagem": "Você atingiu o limite do plano Free (100 requisições por dia ou 3.000 por mês). Aguarde a renovação ou faça upgrade."
}
```

### Headers de rate limit

Toda resposta bem-sucedida inclui headers informando o consumo atual (valores conforme o plano da key):

```http theme={null}
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 47
```

## Obtendo uma API Key

A API é oferecida apenas em **produção**. Cada cliente recebe uma key própria — não há ambiente de testes público nem keys de sandbox.

As keys são gerenciadas em `https://dadosfutebol.com.br/api-keys`. O administrador pode:

* Criar keys associadas a um cliente ou aplicação
* Definir o plano (free, pro, enterprise)
* Ativar ou desativar uma key a qualquer momento
* Excluir keys comprometidas

A key pode ser consultada novamente e também revogada/excluída a qualquer momento. Guarde-a em local seguro e não a compartilhe.
