Skip to main content
POST
Sessão biométrica incorporada

Visão geral

A biometria incorporada revalida se quem conclui o fluxo é a mesma pessoa do KYC aprovado. Diferente do check biométrico síncrono, a Gu1 devolve sessionUrl com UI hospedada. Incorpore em iframe (ou redirecione) para captura com liveness controlado.
Use status da API ou do webhook como resultado biométrico. A Gu1 gere o ciclo completo da sessão e pode definir rejected após políticas da organização (cruzamento entre entidades, limiares de face match).

Pré-requisitos

  1. KYC aprovado na Gu1 para a entidade pessoa.
  2. Retrato de referência disponível a partir desse KYC.
  3. KYC habilitado na organização (mesma API key e permissões da validação por sessão). A Gu1 provisiona a configuração interna de captura incorporada; integradores não definem workflows nem credenciais extras. Se a org ainda não foi habilitada, o create pode retornar BIOMETRIC_WORKFLOW_NOT_CONFIGURED (400) — contate a equipe Gu1.
  4. Gu1 Biometria ativo na organização (global_gueno_biometric_kyc). Se não estiver habilitado, o create retorna NOT_ENABLED (403) — solicite ativação à Gu1.

Criar sessão

POST /api/kyc/biometric/sessionsentityId, entityExternalId ou entityTaxId (exatamente um obrigatório), webhookUrl opcional, callback, language. Fluxo face match (liveness + comparação com retrato do KYC aprovado; NO_PORTRAIT se faltar selfie).
Prévia sandbox (somente GET): GET /api/entities/by-tax-id/{taxId} pode retornar pessoa sintética (sandboxMock: true, id: null) para números de teste do catálogo quando não há linha real. É somente leitura — para POST /sessions é necessária entidade persistida.
Resposta 201: id, sessionUrl, iframeAllow, hostedSessionId, status (pending no fluxo real; approved / rejected imediato no mock sandbox). Ver mock sandbox.

Fluxo recomendado de integração

  1. Entidade pessoa com KYC approved.
  2. POST /api/kyc/biometric/sessions uma vez por intenção do usuário. Guarde id, sessionUrl e hostedSessionId.
  3. Se 409 ACTIVE_SESSION_EXISTS, cancele com POST .../sessions/{activeSessionId}/cancel e só então crie de novo (não reintentar em loop sem tratar o 409).
  4. Se status for pending, incorpore sessionUrl em iframe (ou redirecione).
  5. Aguarde webhooks biometric.session_* (ou GET .../sessions/:id / POST .../sync se necessário).
  6. Use status e rejectionCode como resultado final.
Não use reintentos repetidos de POST /sessions como fluxo normal. Após timeout ou duplo clique podem ocorrer casos de borda de idempotência. Sempre trate 409, cancele sessões ativas explicitamente e prefira webhooks a polling agressivo.

Erros ao criar (POST /sessions)

Exemplo 409 ACTIVE_SESSION_EXISTS (aditivo — clientes que ignoram campos extras não mudam):
Repetir POST /sessions com sessão ainda aberta sempre retorna este 409. A Gu1 não responde 201 com a mesma sessão pending.

Sessões anteriores e “atual”

Uma entidade pode ter várias sessões biométricas (aprovadas, rejeitadas, canceladas). Uma sessão aprovada anterior não impede criar outra. Só bloqueia sessão ativa (pending / in_progress) → 409.

hostedSessionId, cancelamento e reintentos

hostedSessionId é a referência de sessão de captura hospedada retornada na criação. A Gu1 armazena de forma única para webhooks e sync. Recuperação correta: 409 → cancelar activeSessionId → um único POST novo. Após cancelar, você pode criar uma nova sessão. Persistência idempotente (reutilizar linha terminal existente se o mesmo hostedSessionId aparecer de novo) aplica-se só após cancel ou outros outcomes terminais — não enquanto a sessão ainda estiver pending ou in_progress. Mock sandbox: prefixo sandbox-mock-bio-; cada create mock gera um ID novo.

Incorporar

Status e webhooks

  • GET /api/kyc/biometric/sessions/:id — uma sessão por ID
  • GET /api/kyc/biometric/entities/:entityId/currentsessão atual = a mais recente por createdAt. Responde 200 com null se não houver sessões.
  • GET /api/kyc/biometric/entities/by-tax-id/:taxId/current — igual, resolvido por tax ID
  • GET /api/kyc/biometric/entities/by-external-id/:externalId/current — igual, resolvido por external ID
  • GET /api/kyc/biometric/sessions?entityId=... — listagem; também aceita entityTaxId ou entityExternalId (um por vez). currentSessionId é a última sessão approved.
  • POST /api/kyc/biometric/sessions/:id/sync, POST .../cancel (pending/in_progresscancelled), GET .../media?key=.
Se POST /sessions retornar 409 ACTIVE_SESSION_EXISTS, o corpo inclui activeSessionId para cancelar sem consultar /current. In Review aparece como in_progress até o veredito final. Eventos biometric.session_*eventos biométricos.

Sessões mock no sandbox

No sandbox, quando a entidade tem KYC mock aprovado (taxId de teste como 99990001, ou KYC com metadata.sandboxMock: true), POST /api/kyc/biometric/sessions pode retornar um resultado mock imediato (approved ou rejected) sem captura hospedada.
  • Padrão: 99990001 → biometria approved; 99990011 → biometria rejected (KYC continua approved).
  • Override: "metadata": { "sandboxMockOutcome": "rejected" } em qualquer entidade elegível.
  • Respostas mock usam hostedSessionId com prefixo sandbox-mock-bio- e podem trazer status: approved ou rejected no create (não só pending).
Tabelas e exemplos completos: Dados mock sandbox — Biometria incorporada.