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

# Introdução

> A API de questões do ENEM: o que ela entrega, como o dado vem e o que você precisa para começar.

A **ENEM API** entrega questões do Exame Nacional do Ensino Médio já
estruturadas: enunciado, alternativas com a correta marcada, matéria, área e ano.
É uma API REST sobre HTTPS, com respostas em JSON e autenticação por API Key.

<Card title="Precisa de vestibulares também?" icon="school" href="/vestibulares/introducao" horizontal>
  A **Vestibulares API** cobre o ENEM e os principais vestibulares do país, com
  um endpoint a mais para listar exames e instituições.
</Card>

## Base URL

```
https://api.enemhub.com.br
```

Todos os endpoints deste produto ficam sob o prefixo `/v1/enem`.

## Endpoints

| Método | Rota                      | O que faz                                |
| ------ | ------------------------- | ---------------------------------------- |
| `GET`  | `/v1/enem/questions`      | Lista questões, com filtros e paginação. |
| `GET`  | `/v1/enem/questions/{id}` | Uma questão pelo ID, com alternativas.   |

A referência completa, com playground para testar cada rota com a sua própria
chave, está em [API Reference](/enem/api-reference).

## Formato das respostas

Listagens vêm num envelope com `data` e `meta`:

```json theme={null}
{
  "data": [ /* ... */ ],
  "meta": { "page": 1, "limit": 20, "total": 4821 }
}
```

`total` é a contagem do conjunto filtrado inteiro, não da página — é com ele que
você sabe quantas páginas existem.

Já a busca por ID devolve **a questão diretamente**, sem envelope.

## A questão

```json theme={null}
{
  "id": "9f3c...",
  "year": 2023,
  "difficulty": "medium",
  "statement": "Enunciado da questão...",
  "imageUrl": null,
  "correctAlternative": "C",
  "exam": { "id": "…", "name": "ENEM 2023", "institution": "INEP" },
  "subject": { "id": "…", "name": "Matemática", "area": "Matemática e suas Tecnologias" },
  "alternatives": [
    { "id": "…", "letter": "A", "text": "…", "imageUrl": null, "isCorrect": false },
    { "id": "…", "letter": "C", "text": "…", "imageUrl": null, "isCorrect": true }
  ]
}
```

Alguns campos são anuláveis de propósito: nem toda questão tem imagem
(`imageUrl`), e nem toda tem matéria classificada (`subject`). `alternatives` vem
sempre ordenado por letra.

## Erros

| Status | `error`             | Quando acontece                                                        |
| ------ | ------------------- | ---------------------------------------------------------------------- |
| `401`  | `Unauthorized`      | Header `X-API-Key` ausente, ou chave inválida, revogada ou expirada.   |
| `403`  | `Forbidden`         | A chave é de outro produto, ou a organização não tem assinatura ativa. |
| `404`  | —                   | O recurso não existe, ou não pertence ao produto da sua chave.         |
| `429`  | `Too Many Requests` | Estourou o limite por minuto, por dia ou a cota mensal do plano.       |
| `500`  | —                   | Erro interno. Se persistir, fale com o suporte.                        |

<Warning>
  O corpo do erro não é uniforme em toda a API — documentamos o que existe hoje,
  não o que gostaríamos que existisse.

  As rotas de gestão devolvem `{ "error", "message", "statusCode" }`. Os erros de
  autenticação e de rate limit devolvem `{ "error", "message" }`, sem
  `statusCode`. E o `404` das rotas de questão devolve só
  `{ "error": "Questão não encontrada" }`.

  Ou seja: **trate pelo status HTTP**, que é consistente, e use `error` /
  `message` apenas para exibir ou registrar em log.
</Warning>

## Plano

O acesso ao produto ENEM é vendido no plano **Starter**, a R\$ 99/mês:
250.000 requisições por mês, 60 por minuto e até 2 API Keys por organização.

<Card title="Ver planos e assinar" icon="credit-card" href="https://platform.enemhub.com.br/#planos" horizontal />

## Próximo passo

<Card title="Quick Start" icon="rocket" href="/enem/quickstart" horizontal>
  Da criação da conta à primeira questão na tela, em quatro passos.
</Card>
