---
title: "Consultar o enrollment biométrico"
method: GET
path: "/v1/users/{userExternalId}/enrollment"
tags: ["Users"]
---

# Consultar o enrollment biométrico

`GET /v1/users/{userExternalId}/enrollment`

## Request

- Base URL: `https://api.signdocs.com.br`
- URL: `https://api.signdocs.com.br/v1/users/{userExternalId}/enrollment`
- Auth: HTTP bearer

Informa se o usuário tem enrollment e **até quando**.

A imagem de referência é apagada por ciclo de vida do S3 90 dias após o
cadastro, mas o registro do enrollment permanece. Quem só pergunta "esse
usuário está cadastrado?" recebe sim muito depois da foto ter sumido, e
descobre o problema como um 422 no meio da assinatura. `expiresAt` e
`expired` existem para permitir uma varredura de recadastramento antes
disso.

O CPF volta mascarado: a rota é enumerável por `userExternalId`.

Requer scope `transactions:read`.

## Path parameters

- `userExternalId` string, required

## Response `200`

Enrollment encontrado.

- EnrollmentStatusResponse: Situação do enrollment biométrico de um usuário.
  - `userExternalId` string
  - `enrollmentSource` 'ORGANIZATION_PROVIDED' | 'FIRST_LIVENESS' | 'DOCUMENT_PHOTO' | 'BANK_PROVIDED': Origem do cadastro em vigor, sempre na forma canônica — enviar `BANK_PROVIDED` devolve `ORGANIZATION_PROVIDED`. Cadastros feitos antes de setembro de 2026 podem devolver `BANK_PROVIDED`.
  - `enrollmentVersion` integer: Incrementa a cada novo PUT para o mesmo usuário.
  - `enrollmentHash` string: SHA-256 da imagem de referência em vigor.
  - `enrolledAt` string, date-time
  - `expiresAt` string, date-time: Momento em que a imagem de referência é apagada pelo ciclo de vida do S3 (`enrolledAt` + `retentionDays`). Depois disso a etapa de comparação falha com 422 até haver novo cadastro.
  - `expired` boolean: `true` quando `expiresAt` já passou — recadastre. O registro sobrevive à imagem de propósito, por 30 dias, justamente para que uma varredura de recadastramento encontre `expired: true`. Passada essa folga o registro também é apagado, e a mesma consulta passa a responder 404 — que é indistinguível de "nunca cadastrado". Quem depende disso deve varrer dentro da folga, não depois.
  - `retentionDays` integer: Janela de retenção de dados biométricos, em dias.
  - `maskedCpf` string: Últimos 4 dígitos do CPF, prefixados por `***`.
  - `faceConfidence` number, double: Confiança da detecção facial no momento do cadastro (0-100).
  - `documentImageHash` string: Presente apenas em enrollment com `source: DOCUMENT_PHOTO`.

## Other responses

- `401`: Autenticação ausente ou inválida.
- `403`: Permissões insuficientes para a operação solicitada. Inclui `purpose: "ACTION_AUTHENTICATION"` sem `featureFlags.trustSessionsEnabled`. A verificação é pelo `purpose`, não pela rota: vale em `/v1/transactions`, `/v1/signing-sessions` e `/v1/envelopes/{envelopeId}/sessions`, além de `/v1/trust-sessions`. O remédio é habilitar a flag para o tenant e provisionar a cota `monthlyTrustSessions`.
- `404`: Recurso não encontrado.
- `500`: Erro interno do servidor.

---

[API](https://skmtc.dev/signdocs/apis/signdocs-brasil-external-api.md) · [All operations](https://skmtc.dev/signdocs/apis/signdocs-brasil-external-api/llms.txt) · [OpenAPI document](https://skmtc.dev/signdocs/apis/signdocs-brasil-external-api/revisions/2d3805aed161?raw)
