Documentação VerifAge
O VerifAge é uma API de verificação de idade e prova de vida por biometria facial. Sem documentos, sem burocracia — o usuário posiciona o rosto na câmera, executa um movimento simples e você recebe o resultado em segundos.
https://api.verifage.com.br/v1Como funciona
- 1. Câmera abre no navegador — nenhum app instalado, funciona direto no browser.
- 2. Detecção de rosto — o sistema identifica o rosto do usuário em tempo real.
- 3. Prova de vida — o usuário abre e fecha a boca, provando que é uma pessoa real (não foto ou vídeo).
- 4. Estimativa de idade — IA analisa o rosto e retorna a idade estimada.
- 5. Resultado — você recebe um JSON com
aprovado: true/falsee a idade estimada.
Autenticação
Todas as requisições à API devem incluir sua chave de API no header Authorization.
// Header obrigatório em todas as requisições Authorization: Bearer SUA_CHAVE_AQUI
Sua chave de API fica disponível no painel após criar sua conta. Nunca exponha a chave no frontend — use-a apenas em chamadas server-side.
Limites e planos
| Plano | Verificações/mês | Preço | Suporte |
|---|---|---|---|
| Básico | 1.000 | R$ 39/mês | |
| Pro | 3.000 | R$ 99/mês | Prioritário |
| Empresarial | Ilimitado | R$ 249/mês | WhatsApp + SLA |
Ao ultrapassar o limite mensal, as requisições retornam 429 Too Many Requests até o ciclo ser renovado.
Widget JS — integração mais simples
A forma mais rápida de integrar. Você cola dois scripts no seu HTML e pronto — sem backend, sem configuração de servidor.
<!-- 1. Adicione o script antes do </body> --> <script src="https://cdn.verifage.com.br/widget.js"></script> <!-- 2. Inicialize com sua chave --> <script> VerifAge.init({ apiKey: 'SUA_CHAVE_AQUI', idadeMinima: 18, // padrão: 18 idioma: 'pt-BR', // padrão: 'pt-BR' onAprovado: function(resultado) { // Usuário aprovado — libere o acesso console.log('Aprovado, idade:', resultado.idade_estimada); liberarAcesso(); }, onNegado: function(resultado) { // Menor de idade — bloqueie o acesso window.location.href = '/acesso-negado'; }, onErro: function(erro) { console.error('Erro na verificação:', erro.mensagem); } }); // Abre o modal de verificação quando quiser document.getElementById('btnEntrar').addEventListener('click', function() { VerifAge.abrir(); }); </script>
Opções disponíveis
| Opção | Tipo | Descrição |
|---|---|---|
| apiKeyobrigatório | string | Sua chave de API |
| idadeMinimaopcional | number | Idade mínima para aprovação. Padrão: 18 |
| idiomaopcional | string | Idioma da interface. Padrão: pt-BR |
| corPrimariaopcional | string (hex) | Cor do tema. Padrão: #00C4D4 (plano Pro+) |
| onAprovadoobrigatório | function | Callback chamado quando aprovado |
| onNegadoopcional | function | Callback chamado quando negado |
| onErroopcional | function | Callback de erro |
API REST
Para integrações mais avançadas ou quando você quer controle total do fluxo. A câmera e a detecção ficam no seu frontend — você envia o frame capturado para nossa API e recebe o resultado.
// 1. Capture o frame do vídeo em um canvas const canvas = document.createElement('canvas'); canvas.width = video.videoWidth; canvas.height = video.videoHeight; canvas.getContext('2d').drawImage(video, 0, 0); // 2. Converta para base64 const frame = canvas.toDataURL('image/jpeg', 0.8); // 3. Envie para a API const resposta = await fetch('https://api.verifage.com.br/v1/verify', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer SUA_CHAVE_AQUI' }, body: JSON.stringify({ frame: frame, prova_de_vida: true // confirma que o movimento foi feito }) }); const resultado = await resposta.json(); console.log(resultado);
Webhook
Configure um endpoint no seu servidor para receber notificações em tempo real a cada verificação concluída. Disponível no plano Pro e Empresarial.
Configure a URL do webhook no painel. Cada verificação enviará um POST com o resultado:
{
"evento": "verificacao.concluida",
"verificacao_id": "vrf_9a3k2b8c",
"aprovado": true,
"prova_de_vida": true,
"idade_estimada": 24,
"confianca": 0.94,
"verificado_em": "2026-08-04T04:00:00Z",
"metadata": {
"user_id": "123" // valor que você passou na requisição
}
}
X-VerifAge-Signature com um HMAC-SHA256 do payload. Valide-o para garantir que a requisição veio do VerifAge.POST /verify
POSThttps://api.verifage.com.br/v1/verify
Parâmetros do body
| Campo | Tipo | Descrição |
|---|---|---|
| frameobrigatório | string | Frame capturado da câmera em base64 (data URI JPEG ou PNG) |
| prova_de_vidaopcional | boolean | Indica se a prova de vida foi executada. Padrão: false |
| idade_minimaopcional | number | Idade mínima para aprovação. Padrão: 18 |
| metadataopcional | object | Dados adicionais que serão incluídos no webhook (ex: {"user_id":"123"}) |
Formato da resposta
{
"ok": true,
"aprovado": true, // true se idade >= idade_minima
"prova_de_vida": true, // true se movimento detectado
"idade_estimada": 24, // número inteiro
"confianca": 0.94, // 0.0 a 1.0
"verificacao_id": "vrf_9a3k2b8c",
"verificado_em": "2026-08-04T04:00:00Z"
}
{
"ok": false,
"codigo": "ROSTO_NAO_DETECTADO",
"mensagem": "Nenhum rosto detectado no frame enviado."
}
Códigos de erro
| HTTP | Código | Descrição |
|---|---|---|
| 400 | FRAME_INVALIDO | Frame em formato inválido ou corrompido |
| 400 | ROSTO_NAO_DETECTADO | Nenhum rosto encontrado no frame |
| 401 | CHAVE_INVALIDA | Chave de API ausente ou inválida |
| 402 | PLANO_EXPIRADO | Assinatura expirada ou cancelada |
| 429 | LIMITE_EXCEDIDO | Limite mensal de verificações atingido |
| 500 | ERRO_INTERNO | Erro interno. Tente novamente em alguns segundos |
LGPD e privacidade
- Zero armazenamento de imagem — nenhuma foto ou vídeo do usuário é salvo em nossos servidores. O frame é processado e descartado imediatamente.
- Processamento local — a detecção de rosto e prova de vida ocorrem no dispositivo do usuário via Widget JS. Nenhuma imagem trafega pela rede nesse caso.
- Dado mínimo — armazenamos apenas o resultado da verificação (aprovado/negado, idade estimada, timestamp) vinculado à sua chave de API, não ao usuário final.
- Retenção — logs de verificação são mantidos por 90 dias para fins de auditoria e depois descartados.
Para adequação à LGPD, recomendamos incluir no seu aviso de privacidade que a plataforma utiliza verificação de idade por biometria facial e que nenhuma imagem é armazenada.
Perguntas frequentes
A verificação funciona no celular?
Sim. Funciona na câmera frontal de qualquer smartphone moderno com Chrome, Safari ou Firefox, direto no navegador sem instalação de app.
Qual a precisão da estimativa de idade?
A margem de erro é de aproximadamente ±3 a 5 anos. Para fins de verificação de maior/menor de 18 anos, essa margem é segura — a diferença relevante (criança vs. adulto) é muito maior que o erro do modelo.
O que acontece se o rosto não for detectado?
A API retorna ROSTO_NAO_DETECTADO e o Widget exibe uma mensagem orientando o usuário a se reposicionar. O usuário pode tentar quantas vezes precisar.
É possível usar sem câmera?
Não. A verificação de idade com prova de vida exige câmera por definição. Para contextos sem câmera, considere verificação por documento — mas esse produto não cobre esse fluxo.
Posso personalizar a aparência do Widget?
Sim, no plano Pro e Empresarial você pode alterar a cor primária e o logo. No plano Empresarial o white-label é completo — o widget aparece com a identidade visual da sua empresa.