Para desenvolvedores
API do estudante.id
Confirme em tempo real que a pessoa à sua frente é estudante de ensino superior verificada — a partir do código que ela mesma te mostra. Sem e-mail, sem CPF, sem documento para guardar.
Visão geral
O estudante se verifica uma vez no estudante.id, recebendo um link de acesso no e-mail institucional; o domínio é conferido no Cadastro e-MEC de instituições de ensino superior. A verificação vale por 12 meses.
Seu sistema envia o código do estudante e recebe: se está verificado, a instituição, a validade e se ele declarou ter 18 anos ou mais.
Quando usar — e quando não usar
✓ Use para
- Preço para estudante, lote estudante e cupons universitários definidos por você
- Conferir estudantes na portaria de eventos universitários
- Um sinal a mais contra fraude em compras declaradas como estudante
✕ Não use para
- Meia-entrada legal. A Lei 12.933/2013 exige a Carteira de Identificação Estudantil (CIE), emitida por entidades como UNE, UBES e ANPG. O estudante.id não é uma CIE.
- Identificar uma pessoa — não é documento de identidade.
- Nada voltado a menores: o estudante.id cobre o ensino superior, 18+.
Autenticação
Toda requisição leva sua chave no cabeçalho Authorization. As chaves começam com eid_test_ (modo de teste) ou eid_live_ (produção).
Chame a API só do seu servidor. Ela não envia cabeçalhos CORS de propósito: chave dentro de página web ou de app é chave vazada. Se uma chave vazar, peça a revogação — uma nova sai em minutos.
Authorization: Bearer eid_live_…Consultar um código
GET https://estudante.id/api/v1/verifications/{code}
Devolve a verificação ligada a um código. Verificações vencidas voltam com 200 e "verified": false, para você poder explicar o motivo ao estudante.
{
"object": "student_verification",
"status": "verified",
"verified": true,
"name": "Ana S.",
"institution": {
"name": "Universidade de Teste",
"acronym": "UTESTE",
"emec_code": 0,
"city": "São Paulo",
"uf": "SP"
},
"age_over_18": true,
"verified_at": "2026-03-01T12:00:00.000Z",
"valid_until": "2099-03-01T12:00:00.000Z",
"code": "TESTVALID1",
"checked_at": "2026-10-02T18:30:00.000Z",
"livemode": false
}Campos da resposta
| Campo | Descrição |
|---|---|
| verified | true só quando a verificação está ativa. Conceda o benefício apenas com true. |
| status | "verified" ou "expired". |
| name | Primeiro nome e inicial do sobrenome, se o estudante cadastrou um nome. Pode ser null. |
| institution | Nome, sigla, código e-MEC, cidade e UF da instituição. |
| age_over_18 | O estudante declarou ter 18 anos ou mais ao se verificar. |
| verified_at / valid_until | Quando a verificação aconteceu e até quando vale (ISO 8601, UTC). |
| livemode | false para chaves de teste. |
Erros
Todos os erros têm o mesmo formato: { "error": { "code", "message", "docs" } }.
| Status | Código | Significado |
|---|---|---|
| 400 | invalid_code | O código não tem 10 letras e números. |
| 401 | missing_api_key / invalid_api_key | Sem chave, ou uma chave que não reconhecemos. |
| 403 | revoked_api_key | A chave foi revogada. |
| 404 | not_found | Nenhuma verificação ativa para este código. Pedidos em análise, recusados e códigos inexistentes respondem igual, de propósito. |
| 429 | rate_limited | Chamadas demais neste minuto. Espere os segundos de Retry-After. |
| 500 | server_error | Problema do nosso lado. Tente de novo com intervalo crescente. |
Modo de teste
Uma chave de teste nunca toca dados reais de estudantes. Ela responde só a estes códigos:
| Código | Significado |
|---|---|
| TESTVALID1 | 200 — verificado |
| TESTEXPIRD | 200 — vencido ("verified": false) |
| qualquer outro | 404 — not_found |
Exemplos
curl https://estudante.id/api/v1/verifications/TESTVALID1 \
-H "Authorization: Bearer $ESTUDANTE_ID_KEY"const res = await fetch(
`https://estudante.id/api/v1/verifications/${encodeURIComponent(code)}`,
{ headers: { Authorization: `Bearer ${process.env.ESTUDANTE_ID_KEY}` } },
);
if (res.status === 404) return { grant: false };
if (!res.ok) throw new Error(`estudante.id ${res.status}`);
const verification = await res.json();
return { grant: verification.verified === true, verification };import os, requests
r = requests.get(
f"https://estudante.id/api/v1/verifications/{code}",
headers={"Authorization": f"Bearer {os.environ['ESTUDANTE_ID_KEY']}"},
timeout=5,
)
if r.status_code == 404:
grant = False
else:
r.raise_for_status()
grant = r.json()["verified"] is TrueLimites
- 60 requisições por minuto por chave, por padrão. Precisa de mais? Fale com a gente.
- As respostas nunca são cacheadas (Cache-Control: no-store). Consulte no momento de conceder o benefício, não antes.
- O contrato só cresce: campos novos podem aparecer nas respostas; os existentes não mudam de significado.
Privacidade e LGPD
- Nunca compartilhamos o e-mail, o CPF ou o nome completo do estudante.
- Uma consulta só é possível com o código que o estudante escolheu te mostrar, e toda consulta aparece para ele na página do ID, com o nome da sua empresa.
- Guarde só o necessário para comprovar que o benefício foi concedido — o código, o resultado e a data. Você é o controlador do que guardar.
Verificar com estudante.id
Acesso antecipado
Para checkout online: um botão "Verificar com estudante.id". O estudante entra, vê qual empresa está pedindo e aprova; seu servidor recebe uma confirmação assinada que ele confere sozinho — sem digitar código.
Você recebe só: estudante verificado, instituição, validade e 18+, com um identificador exclusivo da sua empresa, para que dois parceiros não consigam cruzar o mesmo estudante.
Estamos construindo junto com parceiros piloto. Conte como é o seu checkout no formulário abaixo.
Pedir uma chave
Conte quem você é e como pretende usar. Todo parceiro começa com uma chave de teste.