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

# Consentimento biométrico para BIPA, CUBI e Colorado

> Consentimento biométrico explícito antes da selfie em Illinois, Texas e Colorado: os gatilhos, o SDK nativo 4.10.0 e os campos da decisão na Didit.

Illinois (BIPA), Texas (CUBI) e Colorado exigem um aviso e uma autorização explícita antes de uma empresa coletar a geometria facial, seja de uma selfie ou da foto de um documento de identidade. A Didit pode exibir uma etapa de consentimento antes da primeira captura facial para as pessoas cobertas por essas leis e guarda a resposta na sessão como evidência.

Esta página explica quando a etapa aparece, quais apps podem exibi-la e como a resposta chega à sua decisão e aos seus webhooks.

> [!WARNING]
>
> A Didit exibe a etapa e registra a resposta. Cabe a você decidir se a jornada do seu usuário atende às leis biométricas aplicáveis ao seu negócio. Esta página não é aconselhamento jurídico: revise a sua implementação com o seu advogado.

## Quando a etapa aparece

Uma sessão exibe a etapa de consentimento quando as duas condições abaixo são verdadeiras:

1. **O fluxo de verificação (workflow) captura um rosto.** Uma etapa de Prova de vida, Correspondência facial ou Estimativa de idade, a selfie da câmera frontal que a etapa de Verificação de identidade realiza (a menos que você a tenha desativado) ou a gravação de vídeo da sessão inteira.
2. **O modo de consentimento da aplicação exige.** No modo **Automático**, um dos [gatilhos](#o-que-aciona-a-etapa-no-modo-automático) abaixo se aplica. No modo **Sempre**, toda sessão que captura um rosto pede o consentimento.

A etapa aparece antes da primeira captura facial. Quando apenas o documento de identidade indica um estado coberto, ela aparece logo após a captura do documento e antes da selfie, e nenhuma geometria facial é calculada a partir das imagens da captura do documento até que a pessoa concorde.

A Didit verifica a exigência quando a pessoa abre o fluxo e novamente em cada etapa até que ela se aplique. Quando uma sessão passa a exigir consentimento, ela continua exigindo.

### Modos de consentimento

Escolha o modo no console, em **Configurações > Dados e privacidade > Consentimento biométrico** da aplicação. Cada mudança é registrada no [log de auditoria](https://docs.didit.me/console/audit-logs.md).

| Modo | O que acontece |
| - | - |
| **Automático** (padrão, recomendado) | Exibe a etapa apenas onde um [gatilho](#o-que-aciona-a-etapa-no-modo-automático) se aplica. Todas as outras pessoas veem o aviso padrão de uma linha. |
| **Sempre** | Toda pessoa cujo rosto é capturado vê a etapa, onde quer que esteja. A decisão registra `trigger: "forced"`. |
| **Nunca** | A Didit nunca exibe a etapa. Onde a lei estadual exige consentimento, você o coleta por conta própria antes da selfie e guarda o registro. |

### O que aciona a etapa no modo Automático

A Didit verifica estas regras em ordem e registra a primeira que se aplica em `biometric_consent.trigger`:

| Gatilho | Quando se aplica |
| - | - |
| `declared_state` | Você declarou um estado coberto ao criar a sessão: `user_state`, ou um endereço dos EUA em `expected_details`. |
| `ip_state` | O IP da pessoa está localizado em Illinois, Texas ou Colorado. |
| `ip_unknown` | A pessoa parece estar nos EUA (um IP dos EUA, um documento dos EUA ou dados dos EUA que você enviou), mas não é possível saber o estado: o IP está nos EUA sem estado, ou não pode ser localizado enquanto seus dados ou o documento situam a pessoa nos EUA. |
| `document_issuer` | O documento de identidade lido na captura foi emitido por um estado coberto. |

**VPNs, proxies e redes de hospedagem não acionam a etapa por si sós.** A Didit localiza o IP da pessoa como qualquer outro: um IP em Illinois, Texas ou Colorado exibe a etapa, um IP em qualquer outro lugar não. A etapa só é pedida com evidência clara de um estado coberto (o IP, o estado que emitiu o documento ou um estado que você declarou) ou quando a pessoa é situada nos EUA sem estado (`ip_unknown`). Uma pessoa em um estado coberto atrás de uma VPN que sai em outro lugar, com um documento que nenhum estado coberto emitiu, não é consultada; use o modo **Sempre**, ou envie `user_state`, se você precisar cobrir esse caso.

Outros dois valores descrevem como o consentimento de uma sessão foi resolvido, e não por que ele foi pedido:

| Gatilho | Significado |
| - | - |
| `forced` | O modo da aplicação é **Sempre**. |
| `customer_collected` | Você enviou, ao criar a sessão, um consentimento que já havia coletado (veja abaixo). |

## Informe à Didit o que você já sabe

[Criar sessão](https://docs.didit.me/sessions-api/create-session.md) aceita dois campos opcionais para isso:

| Campo | O que faz |
| - | - |
| `user_state` | Onde a pessoa mora, quando você sabe: um código de subdivisão ISO 3166-2 (`US-IL`, `ES-M`) ou um código ou nome de estado dos EUA (`IL`, `Illinois`). Um estado coberto exibe a etapa com `trigger: "declared_state"`. Um valor desconhecido retorna `400`. |
| `biometric_consent` | Consentimento que você já coletou: `{ "given_at": "<ISO 8601>", "text_version": "<your version id>" }`. O fluxo não pergunta de novo, e a decisão registra `status: "given"` com `trigger: "customer_collected"`. `given_at` não pode estar no futuro. |

```json theme={null}
{
  "workflow_id": "YOUR_WORKFLOW_ID",
  "vendor_data": "user-42",
  "user_state": "US-IL",
  "biometric_consent": {
    "given_at": "2026-10-13T09:12:00Z",
    "text_version": "consent-v3"
  }
}
```

## Quais apps exibem a etapa

A etapa precisa de um app capaz de exibi-la. A Didit decide isso a cada requisição que o app faz:

| Onde a pessoa se verifica | Exibe a etapa |
| - | - |
| O fluxo de verificação hospedado: um navegador, o [Web SDK](https://docs.didit.me/pt-br/integration/web-sdks/overview.md) ou uma WebView | Sim |
| [SDK nativo](https://docs.didit.me/pt-br/integration/native-sdks/overview.md) 4.10.0 ou posterior (iOS, Android e versões de React Native ou Flutter que incluem o nativo 4.10.0 ou posterior) | Sim |
| Um SDK nativo anterior à 4.10.0, ou que não informa sua versão | Não |

### SDKs nativos anteriores à 4.10.0

Os SDKs nativos lançados antes da 4.10.0 não conhecem a etapa de consentimento, então a Didit nunca a solicita a eles. A verificação funciona exatamente como antes: a selfie e as demais capturas faciais são aceitas e processadas, e a sessão chega à decisão normalmente.

A Didit nunca registra um consentimento que não foi dado. Quando a sessão exigia consentimento e um SDK mais antigo capturou um rosto, a decisão mostra:

```json theme={null}
"biometric_consent": {
  "required": true,
  "trigger": "ip_state",
  "status": "pending",
  "given_at": null,
  "reason": "BIOMETRIC_CONSENT_UNSUPPORTED_SDK"
}
```

> [!WARNING]
>
> **Atualize para o SDK nativo 4.10.0 ou posterior se você verifica pessoas em Illinois, Texas ou Colorado em um app nativo.** Até que você o faça, essas sessões terminam sem consentimento explícito, e coletá-lo antes da selfie é responsabilidade sua.

Se a pessoa continuar a mesma sessão no fluxo hospedado (em outro dispositivo, ou em uma WebView que o app abre para alguns tipos de prova de vida), o fluxo hospedado exibe a etapa e não captura nenhum rosto ali até que ela responda. O consentimento dado ali mantém `reason: "BIOMETRIC_CONSENT_UNSUPPORTED_SDK"`, porque os rostos já haviam sido capturados sem ele.

## O que a pessoa vê

A etapa informa à pessoa o que é coletado, por quê, quem o tem e por quanto tempo é mantido, e traz um link para a [Política de dados biométricos](https://didit.me/legal/biometric-data-policy). Ela tem um único botão: **Concordo e continuo**, que permanece desativado até que a pessoa marque a caixa de concordância.

A Didit guarda a resposta como evidência: quando foi dada, a versão e o hash do texto exibido, o idioma, a etapa do fluxo e o IP, a localização e o user agent da requisição. Depois que a pessoa concorda, a resposta é definitiva.

## Quando a pessoa não concorda

A etapa não tem botão de recusa. Uma pessoa que não quer concordar sai do fluxo: nenhum rosto é capturado, e a sessão termina como `Abandoned`, como qualquer outra sessão que a pessoa não conclui (veja [Status de verificação](https://docs.didit.me/integration/verification-statuses.md)). Ofereça a ela outra forma de se verificar.

### Consentimento recusado na API

A decisão mantém um status `declined` e o motivo `BIOMETRIC_CONSENT_DECLINED` como valores da API. Nenhuma tela da Didit oferece hoje uma recusa, então o fluxo hospedado e os SDKs nativos não registram uma. Uma sessão que registra uma recusa:

* Termina como `Declined`, e o webhook `status.updated` dispara como em qualquer outra recusa.
* Mostra `biometric_consent.status` como `declined`, `reason` e `decline_reason` como `BIOMETRIC_CONSENT_DECLINED`, e `declined_at` com o horário.
* Não captura nenhum rosto após a recusa. Toda imagem facial e todo template facial que a sessão já possui são excluídos: selfies, a selfie da câmera frontal da captura do documento, o recorte facial do retrato do documento, vídeos de prova de vida e de sessão inteira. `face_data_deleted_at` registra quando. A decisão deixa de retorná-los, e a exclusão é irreversível.
* Mantém as imagens do documento e os dados lidos delas: a recusa não os afeta.

## Na decisão e nos webhooks

Toda decisão de Verificação de usuários traz um objeto `biometric_consent`, em [Recuperar sessão](https://docs.didit.me/sessions-api/retrieve-session.md) e no `decision` dos [webhooks de sessão](https://docs.didit.me/integration/webhooks.md). Ele é `null` quando a sessão nunca foi avaliada, por exemplo um fluxo sem captura facial.

| `status` | Significado |
| - | - |
| `not_required` | A sessão não exigiu consentimento. |
| `pending` | O consentimento é exigido e não foi dado. Leia `reason` para distinguir um SDK mais antigo de uma pessoa que ainda não respondeu. |
| `given` | A pessoa concordou no fluxo, ou você enviou `biometric_consent` na criação. |
| `declined` | Uma recusa foi registrada, e a sessão terminou como `Declined`. Nenhuma tela da Didit oferece hoje uma recusa (veja [acima](#consentimento-recusado-na-api)). |

| `reason` | Significado |
| - | - |
| `BIOMETRIC_CONSENT_UNSUPPORTED_SDK` | Um SDK nativo anterior à 4.10.0, ou que não informou sua versão, capturou um rosto sem a etapa. |
| `BIOMETRIC_CONSENT_DECLINED` | Uma recusa foi registrada. Nenhuma tela da Didit oferece hoje uma recusa. |
| `null` | Nada a explicar. Sempre `null` quando a sessão não exigiu consentimento. |

Uma sessão em que a pessoa concordou no fluxo hospedado:

```json theme={null}
"biometric_consent": {
  "required": true,
  "trigger": "declared_state",
  "status": "given",
  "given_at": "2026-10-13T18:31:07.412000Z",
  "declined_at": null,
  "text_version": "bio-consent-2026-10-12",
  "locale": "en",
  "policy_url": "https://didit.me/legal/biometric-data-policy",
  "step": "LIVENESS",
  "ip_address": "198.51.100.23",
  "ip_country_code": "ES",
  "detected_ip_address": "198.51.100.23",
  "detected_country_code": "ES",
  "jurisdictions": ["IL"],
  "retention_months": 36,
  "reason": null,
  "decline_reason": null,
  "face_data_deleted_at": null
}
```

O exemplo está abreviado. Todos os campos, com seus tipos, estão em [Modelos de dados](https://docs.didit.me/reference/data-models.md#biometric-consent).

## Relacionados

* [Criar sessão](https://docs.didit.me/sessions-api/create-session.md): `user_state` e `biometric_consent`.
* [Recuperar sessão](https://docs.didit.me/sessions-api/retrieve-session.md): a decisão que traz `biometric_consent`.
* [SDKs nativos](https://docs.didit.me/pt-br/integration/native-sdks/overview.md): versões e etapas de atualização.
* [Segurança e conformidade](https://docs.didit.me/pt-br/getting-started/security-compliance.md): suas responsabilidades nos fluxos de verificação.


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