FaceAuth Docs

Documentação FaceAuth

Bem-vindo à documentação técnica do FaceAuth. Aqui você encontra tudo para integrar verificação facial com IA ao seu produto em minutos.

O que é o FaceAuth?

FaceAuth é uma API de verificação de identidade por biometria facial com IA. Com ela você pode:

  • Verificar idade — estimativa de idade por reconhecimento facial em tempo real
  • KYC de documentos — extração de dados de RG, CNH, Passaporte e CPF com IA Vision
  • Login por selfie — autenticação de retorno dos seus usuários por reconhecimento facial
  • Detecção de liveness — detecta se é uma pessoa real (anti-spoofing)

URL Base da API

https://facebio.goodbits.tech/api/v1

Autenticação

Todas as requisições à API exigem uma chave de API enviada no header X-API-Key.

📍 Onde obter sua chave Acesse o painel do cliente → Chaves de API para gerar e gerenciar suas chaves.
# Exemplo com curl
curl -X POST https://facebio.goodbits.tech/api/v1/sessions/create \
  -H "X-API-Key: fa_sua_chave_aqui" \
  -H "Content-Type: application/json" \
  -d '{ "callback_url": "https://seusite.com/callback" }'

Formato da chave

Chaves de API seguem o formato fa_<prefixo>_<hash>. Guarde sua chave em segurança — ela não pode ser recuperada após criação, apenas revogada e recriada.

Quickstart — 5 minutos

Integração mais rápida usando o SDK JavaScript em modo popup:

1. Backend — criar sessão

// PHP (Laravel)
use Illuminate\Support\Facades\Http;

$response = Http::withHeaders(['X-API-Key' => $suaChave])
    ->post('https://facebio.goodbits.tech/api/v1/sessions/create', [
        'callback_url' => 'https://seusite.com/callback?user_id=' . $userId,
        'metadata'     => ['user_id' => $userId],
    ]);

$token = $response->json('token');
// Passe $token para o frontend

2. Frontend — carregar o SDK

<!-- Adicione no <head> -->
<script src="https://facebio.goodbits.tech/sdk/faceauth.js"></script>

<script>
  FaceAuth.init({
    token:    '{{ $token }}',     // token gerado no backend
    apiKey:   'fa_prefix_...',   // prefixo público da chave
    mode:     'popup',
    onSuccess: (result) => {
      console.log('Aprovado!', result.jwt);
    },
    onError: (err) => {
      console.error(err);
    }
  });
</script>

3. Resultado no callback

// GET https://seusite.com/callback?faceauth_jwt=xxx&faceauth_status=approved

// PHP — validar o JWT retornado
$jwt     = $request->query('faceauth_jwt');
$status  = $request->query('faceauth_status'); // 'approved' | 'rejected'

$payload = Http::withHeaders(['X-API-Key' => $suaChave])
    ->post('https://facebio.goodbits.tech/api/v1/sessions/validate', ['token' => $jwt])
    ->json();

// $payload['age_estimate'], $payload['liveness_score'], etc.

SDK JavaScript — Instalação

O SDK FaceAuth é um arquivo JavaScript standalone — sem dependências, sem npm necessário.

Via tag <script> (recomendado)

<script src="https://facebio.goodbits.tech/sdk/faceauth.js"></script>
✅ Sem dependências externas O SDK não requer jQuery, React, Vue ou qualquer outro framework. Funciona em qualquer página HTML.

Modos de Integração

O FaceAuth suporta três modos de integração, cada um adequado a um cenário diferente:

ModoDescriçãoIdeal para
popupAbre uma janela modal sobre o seu siteSites com SPA ou fluxo inline
redirectRedireciona o usuário para a página hospedada FaceAuthSites tradicionais, simplicidade máxima
iframeIncorpora o widget em um <iframe> existenteFluxos customizados em checkout

Modo Popup

FaceAuth.init({
  token:     'SESSION_TOKEN',
  apiKey:    'fa_prefix',
  mode:      'popup',
  onSuccess: (r) => console.log(r),
  onError:   (e) => console.error(e),
});

Modo Redirect

FaceAuth.init({
  token:   'SESSION_TOKEN',
  apiKey:  'fa_prefix',
  mode:    'redirect',
  // O usuário será redirecionado automaticamente
  // Resultado chega via callback_url
});

Modo iFrame

<div id="faceauth-container"></div>

FaceAuth.init({
  token:       'SESSION_TOKEN',
  apiKey:      'fa_prefix',
  mode:        'iframe',
  containerId: 'faceauth-container',
  onSuccess:   (r) => console.log(r),
});

Opções de Configuração

OpçãoTipoObrigatórioDescrição
tokenstringToken de sessão gerado via POST /api/v1/sessions/create
apiKeystringPrefixo público da sua chave de API (formato fa_prefix)
modestringpopup | redirect | iframe
langstringIdioma da interface: pt_BR (padrão) | en | es
containerIdstringID do elemento para modo iframe
onSuccessfunctionCallback chamado após aprovação/rejeição
onErrorfunctionCallback chamado em caso de erro técnico

Eventos & Callbacks

onSuccess

Chamado quando a verificação é concluída (aprovada ou rejeitada).

FaceAuth.init({
  // ...
  onSuccess: (result) => {
    // result.status      → 'approved' | 'rejected'
    // result.jwt         → token JWT RS256 assinado
    // result.session_id  → UUID da sessão
    // result.approved    → boolean
    console.log(result.status);
  }
});

postMessage (para iframe)

Em modo iframe, o resultado também é emitido via window.postMessage:

window.addEventListener('message', (event) => {
  if (event.data.source === 'faceauth') {
    const { status, jwt, session_id } = event.data;
    // processar resultado
  }
});

API — Criar Sessão

Cria uma sessão de verificação que será usada pelo SDK JavaScript.

POST /api/v1/sessions/create

Body (JSON)

CampoTipoObrigatórioDescrição
callback_urlstringURL para redirect após verificação (modo redirect)
metadataobjectDados extras (ex: user_id) retornados no JWT e webhook
expires_inintegerValidade em minutos (padrão: 30, máx: 1440)

Resposta

{
  "token":       "uuid-da-sessao",
  "session_url": "https://facebio.goodbits.tech/sdk/verify/uuid-da-sessao",
  "expires_at":  "2026-03-19T14:00:00Z"
}

API — Status da Sessão

GET /api/v1/sessions/{token}
{
  "token":          "uuid-da-sessao",
  "status":         "approved",
  "liveness_score": 0.94,
  "age_estimate":   24,
  "approved":       true,
  "metadata":       { "user_id": 42 },
  "processed_at":   "2026-03-19T13:58:12Z"
}

Status possíveis: pending · approved · rejected · error · expired

API — Verificar (envio direto de imagem)

Envia uma imagem em base64 diretamente para verificação, sem criar sessão. Útil para integrações backend-to-backend.

POST /api/v1/verify
{
  "image":    "data:image/jpeg;base64,...",  // base64 da selfie
  "metadata": { "user_id": 42 }              // opcional
}

Resposta

{
  "status":         "approved",
  "approved":       true,
  "liveness_score": 0.91,
  "age_estimate":   28,
  "jwt":            "eyJhbGciOiJSUzI1NiJ9...",
  "session_id":     "uuid-da-sessao"
}

API — KYC de Documentos

Extrai dados de documentos (RG, CNH, Passaporte, CPF) e opcionalmente compara a foto do documento com uma selfie.

⚠️ Disponível a partir do plano Starter O serviço KYC de documentos precisa estar habilitado no seu painel em Serviços.
POST /api/v1/sessions/create → Use a sessão KYC hospedada

Para KYC completo (documento + selfie + face match), utilize a sessão KYC hospedada:

$response = Http::withHeaders(['X-API-Key' => $suaChave])
    ->post('https://facebio.goodbits.tech/api/v1/kyc/session', [
        'callback_url'           => 'https://seusite.com/kyc/callback',
        'metadata'               => ['user_id' => $userId],
        'allowed_document_types' => ['rg', 'cnh'], // opcional
        'lang'                   => 'pt_BR',
    ]);

$sessionUrl = $response->json('session_url');
// Redirecionar o usuário para $sessionUrl

O usuário passa pelo wizard hospedado (foto do documento + selfie), e ao final é redirecionado para o callback_url com ?kyc_jwt=xxx.

Dados extraídos (retornados no JWT)

CampoFonte
nameIA Vision (documento)
birth_dateIA Vision (documento)
document_numberIA Vision (documento)
cpfIA Vision (documento)
expiryIA Vision (documento)
face_matchedFaceAuth Engine (comparação)
face_match_scoreFaceAuth Engine (0.0 – 1.0)

API — Validar JWT

Valida e decodifica um JWT retornado pelo FaceAuth. Use isto no seu backend para verificar autenticidade do token.

POST /api/v1/sessions/validate
{ "token": "eyJhbGciOiJSUzI1NiJ9..." }

Resposta (JWT decodificado)

{
  "valid":          true,
  "session_id":     "uuid",
  "status":         "approved",
  "liveness_score": 0.94,
  "age_estimate":   24,
  "metadata":       { "user_id": 42 },
  "issued_at":      1742390292,
  "expires_at":     1742476692
}

Webhooks — Configuração

⚠️ Disponível nos planos Starter, Pro e Enterprise Webhooks não estão disponíveis no plano Free.

Configure sua URL de webhook no painel em Integração → Webhook. Você também pode definir um segredo para verificar a autenticidade das requisições via HMAC-SHA256.

Dica: use o botão "Testar Webhook" no painel para verificar se seu servidor está recebendo corretamente antes de entrar em produção.

Webhooks — Eventos

EventoQuando é disparado
verification.approvedVerificação facial aprovada
verification.rejectedVerificação rejeitada (liveness baixo, menor de idade)
verification.errorErro técnico na verificação
kyc.approvedVerificação KYC de documento aprovada
kyc.rejectedVerificação KYC rejeitada
testDisparo manual via painel (teste de conectividade)

Webhooks — Payload & Assinatura

Headers enviados

X-FaceAuth-Signature: sha256=<hmac-sha256-hex>
X-FaceAuth-Event: verification.approved
Content-Type: application/json
User-Agent: FaceAuth-Webhooks/1.0

Payload

{
  "event":          "verification.approved",
  "timestamp":      "2026-03-19T14:00:00Z",
  "session_id":     "uuid-da-sessao",
  "status":         "approved",
  "liveness_score": 0.94,
  "age_estimate":   24,
  "metadata":       { "user_id": 42 },
  "jwt":            "eyJhbGciOiJSUzI1NiJ9...",
  "origin_domain":  "seusite.com",
  "processed_at":   "2026-03-19T13:59:58Z"
}

Verificar assinatura

// PHP
function verificarWebhook(string $payload, string $header, string $segredo): bool
{
    $esperado = 'sha256=' . hash_hmac('sha256', $payload, $segredo);
    return hash_equals($esperado, $header);
}

// Uso
$payload = file_get_contents('php://input');
$sig     = $_SERVER['HTTP_X_FACEAUTH_SIGNATURE'];
$ok      = verificarWebhook($payload, $sig, 'seu_segredo');

Webhooks — Exemplo de Handler (Laravel)

use Illuminate\Http\Request;

Route::post('/webhook/faceauth', function (Request $request) {
    $payload   = $request->getContent();
    $signature = $request->header('X-FaceAuth-Signature');
    $segredo   = config('services.faceauth.webhook_secret');

    if ('sha256=' . hash_hmac('sha256', $payload, $segredo) !== $signature) {
        return response('Unauthorized', 401);
    }

    $data  = $request->json()->all();
    $event = $data['event'];

    match ($event) {
        'verification.approved' => handleAprovado($data),
        'verification.rejected' => handleRejeitado($data),
        default                 => null,
    };

    return response()->json(['ok' => true]);
})->withoutMiddleware([\App\Http\Middleware\VerifyCsrfToken::class]);

JWT Payload — Referência

Todos os JWTs do FaceAuth são assinados com RS256 (RSA). Você pode verificar localmente usando a chave pública disponível em GET /api/v1/status.

CampoTipoDescrição
substringUUID da sessão
client_idintegerID do cliente FaceAuth
statusstringapproved | rejected
liveness_scorefloat|nullScore de liveness (0.0 – 1.0)
age_estimateinteger|nullIdade estimada em anos
origin_domainstring|nullDomínio de origem da verificação
metadataobjectDados passados em createSession
iatunix timestampEmitido em
expunix timestampExpira em (24h após emissão)

Códigos de Erro

CódigoHTTPDescrição
INVALID_API_KEY401Chave de API inválida ou revogada
QUOTA_EXCEEDED429Limite mensal de verificações atingido
SESSION_EXPIRED410Token de sessão expirado
SESSION_NOT_FOUND404Token de sessão não encontrado
NO_FACE_DETECTED422Nenhum rosto detectado na imagem
LIVENESS_FAILED422Score de liveness abaixo do threshold
AGE_BELOW_MINIMUM422Idade estimada abaixo do mínimo configurado
DOMAIN_NOT_ALLOWED403Domínio de origem não autorizado para esta chave
SERVICE_DISABLED403Serviço não habilitado no plano atual

Rate Limits

Além do limite mensal de verificações por plano, aplicamos rate limiting por API Key:

PlanoReq/minuto (API)Verificações/mês
Free5100
Starter151.000
Pro305.000
Enterprise60+50.000+

Quando o rate limit é atingido, a API retorna HTTP 429 com header Retry-After.

Planos & Limites

RecursoFreeStarterProEnterprise
Verificações/mês1001.0005.00050.000+
SDK (popup/redirect/iframe)
API REST
Webhooks
KYC de Documentos
Login por Selfie
SLA & Suporte dedicado
💡 Gerenciar plano Acesse Faturamento no painel para fazer upgrade ou ver o uso atual.
© 2026 FaceAuth Home suporte@faceauth.io Status da API