> ## 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 e dos principais vestibulares do país.

A **Vestibulares API** entrega questões do ENEM **e** dos principais vestibulares
brasileiros, já estruturadas: enunciado, alternativas com a correta marcada,
matéria, área, ano e o exame de origem.

<Card title="Só precisa do ENEM?" icon="graduation-cap" href="/enem/introducao" horizontal>
  A **ENEM API** cobre exclusivamente o ENEM, por um preço menor.
</Card>

## Base URL

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

Os endpoints deste produto ficam sob o prefixo `/v1/vestibulares`.

## Endpoints

| Método | Rota                              | O que faz                                   |
| ------ | --------------------------------- | ------------------------------------------- |
| `GET`  | `/v1/vestibulares/exams`          | Lista os exames e instituições do catálogo. |
| `GET`  | `/v1/vestibulares/questions`      | Lista questões, com filtros e paginação.    |
| `GET`  | `/v1/vestibulares/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](/vestibulares/api-reference).

<Note>
  Este produto **inclui o ENEM**. O ENEM aparece em `/exams` como mais um exame, e
  as questões dele saem normalmente na listagem — filtre por `examId` se quiser
  apenas uma instituição.
</Note>

## Formato das respostas

Listagens de questões vêm num envelope com `data` e `meta`:

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

`total` é a contagem do conjunto filtrado inteiro, não da página.

`/exams` devolve `{ "data": [...] }` **sem** `meta` — o catálogo de exames não é
paginado. E a busca por ID devolve a questão diretamente, sem envelope.

## O exame

```json theme={null}
{
  "id": "3b1e...",
  "name": "FUVEST 2023",
  "institution": "USP",
  "type": "vestibular"
}
```

## A questão

```json theme={null}
{
  "id": "9f3c...",
  "year": 2023,
  "difficulty": "medium",
  "statement": "Enunciado da questão...",
  "imageUrl": null,
  "correctAlternative": "C",
  "exam": { "id": "3b1e...", "name": "FUVEST 2023", "institution": "USP" },
  "subject": { "id": "…", "name": "Biologia", "area": "Ciências da Natureza" },
  "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>

## Planos

| Plano          | Preço         | Requisições/mês | Por minuto | API Keys   |
| -------------- | ------------- | --------------- | ---------- | ---------- |
| **Pro**        | R\$ 399/mês   | 2.000.000       | 300        | 10         |
| **Business**   | R\$ 1.490/mês | 20.000.000      | 1.000      | 50         |
| **Enterprise** | sob consulta  | negociado       | negociado  | ilimitadas |

<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="/vestibulares/quickstart" horizontal>
  Da criação da conta à primeira questão na tela, em quatro passos.
</Card>
