> ## Documentation Index
> Fetch the complete documentation index at: https://docs.unifokal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Token de rosto

> O módulo face_token pede só a prova de vida e uma selfie, sem documento, e devolve um identificador estável do rosto na sua organização, com o payload de resultado.

## Token de rosto

O módulo `face_token` pede à pessoa a prova de vida e uma selfie, e mais nada: sem documento, sem CPF e sem nenhum outro módulo de identidade. A resposta é um **identificador estável do rosto na sua organização** (`fct_` mais 26 caracteres). A mesma pessoa volta com o mesmo token; uma pessoa nova ganha um token novo. Guarde o token na conta e compare: tokens iguais são a mesma pessoa.

O flow mínimo é `["liveness", "face_token"]`. A prova de vida é o passo próprio do desafio e o módulo exige ela no flow (sem ela o pedido recebe `422 module_dependency_violation`; o painel liga as duas juntas). Ele não entra junto com o `unique_face` (`422 module_conflict`): o `unique_face` já devolve um token do rosto da mesma base, e os dois juntos fariam duas buscas pela mesma selfie. Um rosto que o `unique_face` já identificou na sua base mantém o token dele aqui. A ordem no widget é consentimento, prova de vida e selfie. Sem o consentimento biométrico nada é capturado nem processado (`409 consent_required`, ou `409 consent_refused` quando a pessoa recusou).

O token é aleatório, não sai do rosto e vale só dentro da sua organização e do ambiente: o mesmo rosto em outro cliente recebe outro token, e o de sandbox nunca casa com o de produção. Ele vive enquanto alguma verificação desse rosto continuar na sua base e some quando a última sai, por apagamento ou pelo prazo de 180 dias.

```
// face_token no check_details: pessoa nova (verificação aprovada)
{ "module": "face_token", "passed": true, "outcome": "approved", "score": 95,
  "data": { "decision": "new", "face_token": "fct_01JC3K8Q2M7V4T9X6B1N5R0WZD", "returning": false } }

// face_token: a mesma pessoa de novo (o mesmo token)
{ "module": "face_token", "passed": true, "outcome": "approved", "score": 95,
  "data": { "decision": "returning", "face_token": "fct_01JC3K8Q2M7V4T9X6B1N5R0WZD", "returning": true } }

// face_token: comparação na banda de dúvida, a verificação vai para review e não sai token
{ "module": "face_token", "passed": null, "outcome": "pending", "score": 50,
  "data": { "decision": "inconclusive", "face_token": null, "returning": null } }
```

O token só chega com a **verificação aprovada**. Em `review`, `denied` ou enquanto a análise não terminou, `face_token` e `returning` vêm `null`; quando a revisão aprova, o webhook seguinte já traz o token. Não guarde nem compare nulo. A prova de vida segue as regras do módulo `liveness`: na web, sem o desafio confirmado nos quadros da captura, a verificação vai para revisão e nunca aprova sozinha. A pessoa nunca fica sabendo se o rosto dela já estava na sua base.

No sandbox o token é fixo, `fct_00000000000000000000SANDBX`, com `decision: "new"`. O preço por verificação está na [tabela de preços](https://unifokal.com/precos).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.