Guias de Desenvolvimento

Signing Sessions

Guias dos SDKs

Cadastro de Usuários (Enrollment Biométrico)

O enrollment biométrico cadastra a imagem de referência de um usuário para uso em fluxos de verificação biométrica futuros. Após o cadastro, o fluxo BIOMETRIC não requer envio de referenceImage — a imagem cadastrada é usada automaticamente.


Passo 1: Preparar imagem de referência

A imagem deve ser:


Passo 2: Cadastrar usuário

O método enroll usa HTTP PUT — chamadas subsequentes para o mesmo userExternalId atualizam a imagem de referência.

const result = await client.users.enroll('user-001', {
  image: imageBase64,
  cpf: '12345678901',
  source: 'BANK_PROVIDED',
});

console.log(result.userExternalId); // user-001
console.log(result.enrolled);       // true
console.log(result.enrolledAt);     // 2024-01-15T10:30:00Z
from signdocs_brasil.models import EnrollUserRequest

result = client.users.enroll('user-001', EnrollUserRequest(
    image=image_base64,
    cpf='12345678901',
    source='BANK_PROVIDED',
))

print(result.user_external_id)  # user-001
print(result.enrolled)          # True
print(result.enrolled_at)
result, _ := client.Users.Enroll(ctx, "user-001", &signdocs.EnrollUserRequest{
    Image: imageBase64,
    CPF:   "12345678901",
})

fmt.Println(result.UserExternalID) // user-001
fmt.Println(result.Enrolled)       // true
fmt.Println(result.EnrolledAt)
EnrollUserResponse result = client.users().enroll("user-001",
    new EnrollUserRequest(imageBase64, "12345678901"));

System.out.println(result.userExternalId); // user-001
System.out.println(result.enrolled);       // true
System.out.println(result.enrolledAt);
$result = $client->users->enroll('user-001', new EnrollUserRequest(
    image: $imageBase64,
    cpf: '12345678901',
));

echo $result->userExternalId; // user-001
echo $result->enrolled;       // true
echo $result->enrolledAt;

Usando o enrollment em transações biométricas

Após o cadastro, crie transações BIOMETRIC normalmente. A etapa BIOMETRIC_MATCH usará a imagem cadastrada automaticamente — não é necessário enviar referenceImage no complete.

// 1. Criar transação biométrica (signatário já possui enrollment)
const tx = await client.transactions.create({
  purpose: 'DOCUMENT_SIGNATURE',
  policy: { profile: 'BIOMETRIC' },
  signer: { name: 'João Silva', userExternalId: 'user-001' },
  document: { content: pdfBase64, filename: 'contrato.pdf' },
});

// 2. Completar liveness normalmente
const steps = await client.steps.list(tx.transactionId);
const start = await client.steps.start(tx.transactionId, steps[0].stepId, {
  captureMode: 'HOSTED_PAGE',
});
await client.steps.complete(tx.transactionId, steps[0].stepId, {
  livenessSessionId: start.livenessSessionId,
});

// 3. Completar match SEM referenceImage (usa enrollment)
await client.steps.complete(tx.transactionId, steps[1].stepId, {});

// 4. Completar click e finalizar
await client.steps.start(tx.transactionId, steps[2].stepId);
await client.steps.complete(tx.transactionId, steps[2].stepId, { accepted: true });
await client.transactions.finalize(tx.transactionId);
# Match SEM referenceImage (usa enrollment)
client.steps.complete(tx.transaction_id, steps[1].step_id, CompleteBiometricMatchRequest())
// Match SEM referenceImage (usa enrollment)
client.Steps.Complete(ctx, tx.TransactionID, steps[1].StepID,
    &signdocs.CompleteBiometricMatchRequest{})
// Match SEM referenceImage (usa enrollment)
client.steps().complete(tx.transactionId, steps.get(1).stepId, Map.of());
// Match SEM referenceImage (usa enrollment)
$client->steps->complete($tx->transactionId, $steps[1]->stepId, []);

Para mais detalhes sobre o fluxo biométrico completo, veja Verificação Biométrica.