Skip to main content
Toda rota sob /v1/vestibulares exige uma API Key. Mande a chave no header X-API-Key:
Também aceitamos Authorization: Bearer, para clientes HTTP que já têm o campo pronto:
As duas formas são equivalentes. X-API-Key tem prioridade se você mandar as duas.

O formato da chave

Só o hash SHA-256 é armazenado. A chave em claro existe uma única vez, na resposta da criação — depois disso, nem nós conseguimos lê-la.

Escopo: a chave pertence a um produto

Uma chave ehub_vest_... abre as rotas /v1/vestibulares/*. Ela não abre /v1/enem/*, e uma chave ehub_enem_... não abre estas — mesmo que a organização assine os dois produtos. O erro é 403:
Assinando este produto, você não precisa da chave do ENEM: o catálogo de vestibulares já inclui as questões do ENEM, acessíveis por /v1/vestibulares/questions com o examId do ENEM.

Onde guardar

A chave é uma credencial de servidor. Ela dá acesso à cota que você paga e não deve ir para o front-end: qualquer pessoa lê o JavaScript da sua página. Chame a EnemHub do seu backend e sirva o resultado para o cliente.
Em variável de ambiente, não no código:
.env

Rotação e revogação

Em API Keys você cria, lista e revoga chaves. Para rotacionar sem downtime: crie a nova, atualize a aplicação, confirme que o tráfego migrou e só então revogue a antiga. A revogação é imediata — a chave passa a devolver 401 na requisição seguinte. O teto de chaves ativas vem do plano: 10 no Pro, 50 no Business, ilimitadas no Enterprise.

Erros de autenticação

Tentativas de autenticação falhas são contadas por IP. Um volume alto de 401 seguidos passa a receber 429 por alguns minutos — é proteção contra força bruta, e some sozinho. Se apareceu na sua aplicação, quase sempre significa que ela está repetindo uma chave errada em loop.

Limites

Toda resposta de /v1/* traz dois headers: Ao estourar, a resposta é 429 com Retry-After: 60. São três limites independentes:
  • Por minuto — definido pelo plano.
  • Por dia — 10.000 requisições, igual para todos os planos.
  • Por mês — a cota do plano. Ao estourar, a mensagem pede upgrade.
Uma requisição recusada com 429 não consome cota mensal. Estourar o limite por minuto não queima o seu volume contratado.
Retry com backoff