Início Planos

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.

Base URLhttps://api.verifage.com.br/v1

Como 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/false e a idade estimada.
Requer HTTPSO acesso à câmera do usuário só funciona em conexões seguras (HTTPS). Certifique-se de que seu site tem SSL ativo.

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.

Widget JSSe você usa o Widget JS, a autenticação é feita automaticamente. Você passa a chave apenas na inicialização e ela nunca fica exposta ao usuário.

Limites e planos

PlanoVerificações/mêsPreçoSuporte
Básico1.000R$ 39/mêsE-mail
Pro3.000R$ 99/mêsPrioritário
EmpresarialIlimitadoR$ 249/mêsWhatsApp + 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.

HTML
<!-- 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çãoTipoDescrição
apiKeyobrigatóriostringSua chave de API
idadeMinimaopcionalnumberIdade mínima para aprovação. Padrão: 18
idiomaopcionalstringIdioma da interface. Padrão: pt-BR
corPrimariaopcionalstring (hex)Cor do tema. Padrão: #00C4D4 (plano Pro+)
onAprovadoobrigatóriofunctionCallback chamado quando aprovado
onNegadoopcionalfunctionCallback chamado quando negado
onErroopcionalfunctionCallback 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.

JavaScript
PHP
cURL
// 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:

Payload recebido
{
  "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
  }
}
Valide a assinaturaCada requisição de webhook inclui o header 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

CampoTipoDescrição
frameobrigatóriostringFrame capturado da câmera em base64 (data URI JPEG ou PNG)
prova_de_vidaopcionalbooleanIndica se a prova de vida foi executada. Padrão: false
idade_minimaopcionalnumberIdade mínima para aprovação. Padrão: 18
metadataopcionalobjectDados adicionais que serão incluídos no webhook (ex: {"user_id":"123"})

Formato da resposta

200 OK
{
  "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"
}
4xx Erro
{
  "ok":        false,
  "codigo":    "ROSTO_NAO_DETECTADO",
  "mensagem":  "Nenhum rosto detectado no frame enviado."
}

Códigos de erro

HTTPCódigoDescrição
400FRAME_INVALIDOFrame em formato inválido ou corrompido
400ROSTO_NAO_DETECTADONenhum rosto encontrado no frame
401CHAVE_INVALIDAChave de API ausente ou inválida
402PLANO_EXPIRADOAssinatura expirada ou cancelada
429LIMITE_EXCEDIDOLimite mensal de verificações atingido
500ERRO_INTERNOErro 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.