Docs
Conceitos

Biometria e antifraude

Três camadas de verificação de identidade — prova de vida, comparação facial e validação de CPF na Serpro — configuráveis no nível da empresa, da operação ou do assinante.

A ForSign aplica três camadas de verificação biométrica antes (e durante) a assinatura. Você pode combiná-las livremente: ligar só a selfie, exigir prova de vida com challenge, comparar o rosto contra o CPF na Serpro, ou validar somente a regularidade do CPF. O conjunto inteiro é o que chamamos de antifraude.

Liveness

Selfie com desafio (girar a cabeça, retornar ao centro). Frames assinados, nonce e janela temporal validados no servidor.

Face Match

Compara a selfie capturada com a foto oficial da Receita via Serpro. Retorna similaridade, vivacidade e nome.

CPF (Serpro)

Consulta situação cadastral + nome na Serpro Datavalid. Pode exigir correspondência de nome com limiar configurável.

Status consolidado

Cada assinante tem um AntifraudStatus único: Pending, Approved, Blocked, Bypassed, Rejected, SkippedMaxAttempts, SkippedNoCredits.

As cinco políticas de antifraude

O recurso aplicado a cada assinante é definido por um valor único:

ValorNomeO que faz
1SelfieSimplesCaptura de selfie sem desafio (apenas foto centrada).
2CpfSerproValida CPF + (opcional) nome na Serpro Datavalid. Sem selfie.
3LivenessSelfie com desafio de movimento (turnRight → turnLeft → center).
4FacialCpfSerproLiveness + comparação facial com a foto da Receita + situação do CPF, em uma única chamada Serpro.
5DisabledOpt-out explícito por assinante (exige que a empresa permita override por assinante).

Quando o cliente envia o array antifraudFeatures: ["Liveness", "CpfSerpro"], a ForSign eleva automaticamente para FacialCpfSerpro — a combinação Liveness+CPF sempre vira a verificação Serpro completa.

Como ativar

O antifraude é um recurso por plano — sua empresa precisa ter contratado a biometria. Para habilitar ou ajustar a configuração, fale com o suporte/comercial da ForSign.

A configuração base fica nas configurações da empresa, no painel: define a verificação exigida por padrão, os limiares de aprovação, o número de tentativas e se assinantes que excedem as tentativas ficam bloqueados. Essa configuração é o padrão de toda a empresa — se o painel estiver exigindo Liveness, por exemplo, todas as operações criadas passam a exigir Liveness.

Override por operação

Para uma operação específica, você sobrescreve a política padrão enviando antifraudFeatures em cada members[] no POST /api/v1/operation (detalhado em Configuração no payload, logo abaixo). O override vale só para aquela operação e só funciona se a empresa permitir override por assinante.

A política vigente é congelada no momento da criação da operação — mudanças posteriores nas configurações da empresa não afetam operações já criadas.

Configuração no payload

Por assinante em members[]

POST /api/v1/operation
{
  "members": [
    {
      "name": "Claudio Nogueira",
      "email": "[email protected]",
      "cpf": "12345678901",
      "antifraudFeatures": ["Liveness", "CpfSerpro"]
    },
    {
      "name": "Maria Observer",
      "email": "[email protected]",
      "antifraudFeatures": ["Disabled"]
    }
  ]
}
Campo do membroTipoO que faz
antifraudFeaturesstring[]Array com "SelfieSimples", "CpfSerpro", "Liveness", "FacialCpfSerpro" ou "Disabled". ["Liveness","CpfSerpro"] é normalizado para FacialCpfSerpro.
cpfstringPré-preenche o CPF do membro. Quando informado, prevalece sobre o que o assinante digita — protege contra um assinante malicioso reutilizar outro CPF.

Override só funciona se a empresa permitir. Se o override por assinante não estiver habilitado, qualquer antifraudFeatures no payload é ignorado e a política padrão da empresa é aplicada a todos os assinantes.

Eventos via webhook

Apenas um tipo de webhook é disparado pelo fluxo biométrico — SelfieCaptured (action 8). O bloqueio gera notificação por email ao criador, não webhook.

SelfieCaptured (Action: 8)

Disparado quando a selfie é aceita pelo servidor. O payload inclui Data.Member.AntifraudResults, com um item por validação realizada:

{
  "Action": 8,
  "ActionDescription": "SelfieCaptured",
  "Success": true,
  "CreatedAt": "2026-05-23T10:42:00Z",
  "CompanyId": 67,
  "OperationId": 5538,
  "OperationMemberId": 35845,
  "Data": {
    "Id": 5538,
    "OperationCompanyId": 5538,
    "Name": "Contrato",
    "Member": {
      "Id": 35845,
      "Name": "Claudio Nogueira",
      "Email": "[email protected]",
      "AntifraudResults": [
        {
          "ValidationType": "Liveness",
          "Approved": true,
          "Score": 1.0,
          "NumberOfAttempts": 1,
          "Timestamp": "2026-05-23T10:41:55Z"
        },
        {
          "ValidationType": "FacialCpfSerpro",
          "Approved": true,
          "Score": 0.9123,
          "NumberOfAttempts": 1,
          "Timestamp": "2026-05-23T10:41:58Z"
        },
        {
          "ValidationType": "CpfSerpro",
          "Approved": true,
          "Score": null,
          "NumberOfAttempts": 1,
          "Timestamp": "2026-05-23T10:41:58Z"
        }
      ]
    }
  }
}
Campo de AntifraudResults[]TipoConteúdo
ValidationTypestring"Liveness", "FacialCpfSerpro" ou "CpfSerpro".
Approvedbooltrue quando a etapa passou.
Scoredecimal?Similaridade Serpro (face match). 1.0 para Liveness aprovado, null para CPF.
NumberOfAttemptsintQuantidade acumulada de tentativas até o resultado atual.
Timestampdatetime?Momento do desfecho da etapa.

AntifraudResults também aparece em DocumentSigned (Action 1) e CompletedOperation (Action 2). É o jeito recomendado de saber o resultado final por assinante sem ter que consultar a API depois.

Resultados e bloqueio

Cada assinante tem um AntifraudStatus consolidado:

StatusSignificado
None (0)Antifraude desativada para esse membro.
Pending (1)Aguardando captura/validação.
Approved (3)Todas as validações passaram. Liberado para assinar.
Blocked (4)Excedeu o limite de tentativas e a empresa configurou bloqueio.
Bypassed (5)Liberado por um administrador no painel.
Rejected (6)Validação falhou, mas ainda há tentativas.
SkippedNoCredits (7)Sem créditos no plano e bloqueio desativado. Permite assinar.
SkippedMaxAttempts (8)Esgotou as tentativas e bloqueio desativado. Permite assinar.

Retry e bloqueio

  • Cada falha de validação incrementa o contador de tentativas.
  • Falhas do provedor (5xx, timeout, network) não contam — o watchdog ressuscita o membro automaticamente.
  • Falha do assinante (CPF inválido, foto distinta, vivacidade fake) conta.
  • Ao atingir o limite de tentativas:
    • Com bloqueio ativo → membro fica Blocked e dispara notificação por email ao criador da operação.
    • Com bloqueio desativado → membro fica SkippedMaxAttempts e segue para a assinatura sem aprovação biométrica.

Desbloquear ou dispensar um assinante

Se um assinante ficou Blocked ou você precisa dispensar a verificação biométrica dele, isso é feito no painel, na tela de gestão da operação — não há endpoint público para isso. O desbloqueio reabre as tentativas (o status volta para Pending); o bypass libera a assinatura sem verificação (status Bypassed). Os dois ficam registrados na trilha de auditoria.

Integração Serpro

A validação Face Match (FacialCpfSerpro) e a validação de CPF (CpfSerpro) usam o Serpro Datavalid — serviço público de validação cadastral do governo federal. Por padrão, a ForSign já cuida dessa integração — você não precisa de nenhuma chave. Empresas que queiram usar a própria credencial Serpro (BYOK) podem configurá-la nas configurações da conta; é opcional.

FacialCpfSerpro consome 1 crédito (cobre a chamada inteira, incluindo o CPF). Não cobre crédito de CpfValidation separado. CpfSerpro consome 1 crédito de CpfValidation. Liveness consome 1 crédito de Liveness apenas quando a validação passa (falhas locais não cobram).

Próximo passo

On this page