Verificação biométrica contra a base de dados governamental SERPRO DataValid.
BIOMETRIC_SERPRO adiciona validação de identidade contra a base governamental SERPRO DataValid após a verificação biométrica. Valida nome, data de nascimento e biometria facial do signatário contra os registros do governo. Ideal para contratos que exigem verificação de identidade governamental.
Liveness (câmera) ──> Comparação facial ──> Validação SERPRO ──> COMPLETED
| Campo | Obrigatório | Notas |
|---|---|---|
name |
Sim | Nome completo |
cpf |
Sim | CPF do signatário |
birthDate |
Sim | Data de nascimento (YYYY-MM-DD) — necessário para SERPRO |
userExternalId |
Sim | ID no seu sistema |
Pré-requisito de tenant: Feature flag
serpro.enabled: true(solicitar via Dashboard).
Enrollment biométrico prévio necessário.
Crie a sessão no backend. A página hospedada cuida de tudo.
import { readFileSync } from 'fs';
const pdfBase64 = readFileSync('contrato.pdf').toString('base64');
const session = await client.signingSessions.create({
purpose: 'DOCUMENT_SIGNATURE',
policy: { profile: 'BIOMETRIC_SERPRO' },
signer: {
name: 'Paulo Mendes',
cpf: '12345678901',
birthDate: '1990-07-22',
userExternalId: 'user-006',
},
document: { content: pdfBase64, filename: 'contrato.pdf' },
returnUrl: 'https://app.example.com/done',
locale: 'pt-BR',
expiresInMinutes: 60,
});
console.log('Client Secret:', session.clientSecret);
const result = await client.signingSessions.waitForCompletion(session.sessionId);
console.log('Status:', result.status);
console.log('Evidence ID:', result.evidenceId);
import base64
with open('contrato.pdf', 'rb') as f:
pdf_base64 = base64.b64encode(f.read()).decode()
session = client.signing_sessions.create(CreateSigningSessionRequest(
purpose='DOCUMENT_SIGNATURE',
policy=Policy(profile='BIOMETRIC_SERPRO'),
signer=Signer(
name='Paulo Mendes', cpf='12345678901',
birth_date='1990-07-22', user_external_id='user-006',
),
document=InlineDocument(content=pdf_base64, filename='contrato.pdf'),
return_url='https://app.example.com/done',
locale='pt-BR',
expires_in_minutes=60,
))
print('Client Secret:', session.client_secret)
result = client.signing_sessions.wait_for_completion(session.session_id)
print('Status:', result.status)
print('Evidence ID:', result.evidence_id)
pdfBytes, _ := os.ReadFile("contrato.pdf")
pdfBase64 := base64.StdEncoding.EncodeToString(pdfBytes)
session, err := client.SigningSessions.Create(ctx, &signdocs.CreateSigningSessionRequest{
Purpose: signdocs.PurposeDocumentSignature,
Policy: signdocs.Policy{Profile: "BIOMETRIC_SERPRO"},
Signer: signdocs.Signer{
Name: "Paulo Mendes", CPF: "12345678901",
BirthDate: "1990-07-22", UserExternalID: "user-006",
},
Document: &signdocs.DocumentInline{Content: pdfBase64, Filename: "contrato.pdf"},
ReturnURL: "https://app.example.com/done",
Locale: "pt-BR",
ExpiresInMinutes: 60,
})
if err != nil { log.Fatal(err) }
fmt.Println("Client Secret:", session.ClientSecret)
result, _ := client.SigningSessions.WaitForCompletion(ctx, session.SessionID)
fmt.Println("Status:", result.Status)
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Base64;
String pdfBase64 = Base64.getEncoder().encodeToString(Files.readAllBytes(Path.of("contrato.pdf")));
CreateSigningSessionRequest request = new CreateSigningSessionRequest();
request.purpose = "DOCUMENT_SIGNATURE";
request.policy = new Policy("BIOMETRIC_SERPRO");
request.signer = new Signer("Paulo Mendes", "user-006");
request.signer.cpf = "12345678901";
request.signer.birthDate = "1990-07-22";
request.document = new CreateSigningSessionRequest.InlineDocument(pdfBase64, "contrato.pdf");
request.returnUrl = "https://app.example.com/done";
request.locale = "pt-BR";
request.expiresInMinutes = 60;
SigningSession session = client.signingSessions().create(request);
$pdfBase64 = base64_encode(file_get_contents('contrato.pdf'));
$session = $client->signingSessions->create(new CreateSigningSessionRequest(
purpose: 'DOCUMENT_SIGNATURE',
policy: new Policy(profile: 'BIOMETRIC_SERPRO'),
signer: new Signer(
name: 'Paulo Mendes', cpf: '12345678901',
birthDate: '1990-07-22', userExternalId: 'user-006',
),
document: ['content' => $pdfBase64, 'filename' => 'contrato.pdf'],
returnUrl: 'https://app.example.com/done',
locale: 'pt-BR',
expiresInMinutes: 60,
));
using SignDocsBrasil.Api.Models;
var pdfBase64 = Convert.ToBase64String(await File.ReadAllBytesAsync("contrato.pdf"));
var session = await client.SigningSessions.CreateAsync(new CreateSigningSessionRequest
{
Purpose = "DOCUMENT_SIGNATURE",
Policy = new Policy { Profile = "BIOMETRIC_SERPRO" },
Signer = new Signer
{
Name = "Paulo Mendes", Cpf = "12345678901",
BirthDate = "1990-07-22", UserExternalId = "user-006",
},
Document = new InlineDocument { Content = pdfBase64, Filename = "contrato.pdf" },
ReturnUrl = "https://app.example.com/done",
Locale = "pt-BR",
ExpiresInMinutes = 60,
});
biometricMatch — resultado da comparação biométricabiometricConfidence — pontuação de similaridade (0-1)nameMatch — comparação de nome contra registros governamentaisbirthDateMatch — comparação de data de nascimentoCache de 24 meses na base governamental.
Se a validação SERPRO falhar (baixa pontuação biométrica ou dados incompatíveis), o fluxo é interrompido. Para fallback automático via foto de documento, use BIOMETRIC_SERPRO_AUTO_FALLBACK.
Dica: Consulte o guia NT65 Consignado para o perfil com fallback automático.
← Certificado Digital
Próximo: NT65 Consignado →
Voltar para Visão Geral