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.
Selfie com desafio (girar a cabeça, retornar ao centro). Frames assinados, nonce e janela temporal validados no servidor.
Compara a selfie capturada com a foto oficial da Receita via Serpro. Retorna similaridade, vivacidade e nome.
Consulta situação cadastral + nome na Serpro Datavalid. Pode exigir correspondência de nome com limiar configurável.
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:
| Valor | Nome | O que faz |
|---|---|---|
1 | SelfieSimples | Captura de selfie sem desafio (apenas foto centrada). |
2 | CpfSerpro | Valida CPF + (opcional) nome na Serpro Datavalid. Sem selfie. |
3 | Liveness | Selfie com desafio de movimento (turnRight → turnLeft → center). |
4 | FacialCpfSerpro | Liveness + comparação facial com a foto da Receita + situação do CPF, em uma única chamada Serpro. |
5 | Disabled | Opt-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 membro | Tipo | O que faz |
|---|---|---|
antifraudFeatures | string[] | Array com "SelfieSimples", "CpfSerpro", "Liveness", "FacialCpfSerpro" ou "Disabled". ["Liveness","CpfSerpro"] é normalizado para FacialCpfSerpro. |
cpf | string | Pré-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[] | Tipo | Conteúdo |
|---|---|---|
ValidationType | string | "Liveness", "FacialCpfSerpro" ou "CpfSerpro". |
Approved | bool | true quando a etapa passou. |
Score | decimal? | Similaridade Serpro (face match). 1.0 para Liveness aprovado, null para CPF. |
NumberOfAttempts | int | Quantidade acumulada de tentativas até o resultado atual. |
Timestamp | datetime? | 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:
| Status | Significado |
|---|---|
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
Blockede dispara notificação por email ao criador da operação. - Com bloqueio desativado → membro fica
SkippedMaxAttemptse segue para a assinatura sem aprovação biométrica.
- Com bloqueio ativo → membro fica
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).