# UNIFOKAL > Verificação de identidade por API: o seu servidor cria uma sessão, o titular completa a jornada no widget e o resultado chega assinado por webhook no seu backend. Doc aberta, spec OpenAPI 3.1 gerada do código, sandbox determinístico e preços públicos. Este arquivo é o briefing completo para agentes de IA (o índice curto está em https://unifokal.com/llms.txt). O contrato executável é o spec OpenAPI 3.1 em https://unifokal.com/docs/openapi.json, o mesmo documento que a API serve em https://api.unifokal.com/v1/openapi.json. Gere tipos com: npx openapi-typescript@7 https://unifokal.com/docs/openapi.json -o unifokal-api.d.ts Fatos que valem para a API inteira: - Base da API: https://api.unifokal.com/v1 (a versão vive no caminho; não existe header de versão). - A superfície da chave secreta (sk_) tem 4 rotas, e só 4: POST /verification-sessions, POST /verification-links, GET /webhook-events, POST /webhook-events/replay. Todo o resto se opera pelo painel. - Todo erro responde { "error": "", "message": "" }. Ramifique pelo código. - Ids são prefixo + ULID: flow_ (flow), vs_ (sessão), ver_ (verificação), whe_ (destino de webhook). - Descoberta viva: GET https://api.unifokal.com/v1/capabilities lista módulos, preços e dependências direto do banco; com uma chave sk_, a mesma URL devolve o contrato efetivo da organização. - Tipos TypeScript em uma linha: npx openapi-typescript@7 https://unifokal.com/docs/openapi.json -o unifokal-api.d.ts - Toda página da documentação e todo artigo do blog têm versão em Markdown na mesma URL, com .md no fim (https://unifokal.com/docs/webhooks.md). A página anuncia a versão com Link rel="alternate" type="text/markdown". ## 1. A chave secreta nunca sai do seu servidor A chave sk_ (sk_test no sandbox, sk_live em produção) autentica as rotas de servidor e NUNCA entra em código de navegador, app móvel, repositório ou prompt. Carregue do ambiente, nunca de arquivo commitado. O widget monta com o id da sessão (vs_...), que não é segredo. É o único dado que atravessa para o front. Não existe rota de consulta de resultado com sk_: o desfecho oficial chega pelo webhook no SEU backend, você grava, e o seu front pergunta ao seu backend. Chave inválida ou revogada responde 401 invalid_api_key. Vazou? Revogue e gere outra no painel na hora; a chave não expira sozinha. ## 2. O webhook é a fonte da verdade O 201 da criação confirma que a sessão existe, não o resultado. O evento que o widget dispara no navegador serve para a tela (fechar o webview, mostrar spinner) e pode ser forjado pelo usuário: nenhuma decisão passa por ele. A decisão oficial chega assinada no seu backend (webhook verification.completed). Responda 2xx rápido; sem 2xx a entrega re-tenta com backoff exponencial, 3 tentativas no total, ao longo de cerca de 15 minutos. Passada essa janela a entrega para, mas o evento fica registrado e se resgata pelo replay do item seguinte: a janela curta é de propósito, o resgate é o replay. A entrega é ao menos uma vez: deduplique pelo id do evento antes de agir. Seu sistema ficou fora do ar? GET /webhook-events lista o que falhou em definitivo e POST /webhook-events/replay reenvia o corpo exato (até 20 ids por chamada), com assinatura nova, no destino atual do flow. Os eventos que não pertencem a uma verificação, como a revogação de um dispositivo, são resgatados pelo resource_id que veio no próprio evento. ## 3. Valide a assinatura antes de ler o corpo O header X-IDSAAS-Signature tem o formato t=,v1=. Recalcule o HMAC SHA-256 sobre o corpo CRU recebido (nunca o JSON reserializado) e compare em tempo constante. Feche a janela anti-replay: rejeite se |agora - t| passar de 300 segundos. Aceite mais de um v1 na mesma assinatura: é a janela de rotação de segredo. O segredo é FORNECIDO por você no painel (mínimo 32 caracteres); a plataforma nunca o exibe de volta. O header x-idsaas-event carrega o tipo do evento. Corpo acima de 256 KiB chega podado e marcado (truncated: true, truncated_fields): o detalhe pode ser podado, a decisão nunca. ## 4. Retry seguro é o reference_id, e não existe header Não mande header de idempotência na criação de sessão: ela não lê nenhum. O reference_id do corpo é a chave, e por isso ele é obrigatório. Mesma organização, mesmo ambiente, mesmo reference_id devolve a MESMA sessão, com o header Idempotent-Replay: true, em vez de criar (e cobrar) uma segunda. Mesmo reference_id com corpo diferente responde 422 idempotency_key_reuse; com a primeira chamada ainda em voo, 409 idempotency_conflict. A selagem dura exatamente o que a sessão dura (900 s, 15 min), e não 24 h. Isso é deliberado: como a chave é do USUÁRIO e ele volta, um selo longo devolveria amanhã o 201 de hoje, com um id de sessão já vencido, e o widget não subiria. Expirada a sessão, o mesmo reference_id abre uma nova. O Idempotency-Key continua valendo nas rotas de painel que movem dinheiro na hora (recarga de crédito e cadastro de cartão), não na criação de sessão. ## 5. Ramifique pelo código de erro, nunca pela mensagem Todo erro responde { "error": "", "message": "" }. O código é estável e é o único campo para ramificar; a mensagem muda sem aviso. Transitórios: 429 rate_limited e sandbox_limit_reached pedem espera; 5xx pede retry com backoff reaproveitando o MESMO reference_id. 402 insufficient_credit pede recarga no painel, não retry. 401 invalid_api_key, 404 flow_not_found e os 422 são erro de contrato: corrija a chamada antes de repetir. Dois 422 que pegam agente de surpresa, e são gêmeos: email_not_accepted e phone_not_accepted. Contato do titular NÃO entra na criação da sessão. Quem pergunta o e-mail e o telefone, e dispara o código em seguida, é o widget. ## 6. O sandbox é determinístico Com uma chave sk_test o pipeline roda completo, sem custo e sem capturar nada de verdade. O sufixo do CPF de teste decide o desfecho de cada módulo de identidade, e a verificação termina assim: 00 termina approved, 01 termina review, 02 termina denied. Qualquer outro sufixo cai no desfecho padrão desses módulos, que é aprovado, com a exceção do doc_global, que tem sufixos próprios (abaixo). O desfecho da VERIFICAÇÃO sai do motor de decisão. O 01 marca cada módulo como inconclusivo e a verificação termina em review, com ou sem face e liveness no flow. Nas famílias de desfecho e de conteúdo o CPF de teste vai no campo document do POST /v1/verification-sessions/:id/submit; o widget submete sem esse campo, então uma sessão concluída pelo widget termina aprovada. Para testar o webhook de atualização sem caso real: 04 termina review e, cerca de 60 segundos depois, approved; 05 termina review e, cerca de 60 segundos depois, denied. O segundo verification.completed chega com um id de evento novo, terminado em _r seguido de um número, que você aplica por cima do primeiro. Se alguém decidir a verificação pelo painel antes disso, vale a decisão da pessoa e o segundo evento não sai. Existe uma SEGUNDA família de sufixos, e ela não é sobre desfecho e sim sobre CONTEÚDO: 33, 44, 55, 66, 77, 88, 99 escolhem o que os módulos de screening, compliance e risco devolvem naquela verificação (PEP encontrado, sanção, homônimo, IP de datacenter, e-mail descartável e assim por diante). Eles mudam o que vem em signals e em check_details, e NÃO mudam o score do módulo: no sandbox um achado forte de compliance não leva a verificação para review sozinho, ao contrário do que esta página afirmava. A matriz por módulo está na seção do módulo em https://unifokal.com/docs. O documento de viagem (doc_global) tem sufixos PRÓPRIOS, e eles mudam o desfecho: 41 termina review (mrz_visual_mismatch), 42 termina review (mrz_expiry_unverified), 43 termina nova foto (ação requerida) (invalid_media), 45 termina approved (document.expired: true). Como um flow global não lê CPF do documento, esse sufixo viaja no campo opcional document do POST /v1/verification-sessions/:id/submit. O documento brasileiro (cpf_ocr) também tem sufixos próprios, no mesmo campo document do submit: 41 termina review (mrz_visual_mismatch), 45 termina approved (document.expired: true). Documento vencido nunca reprova: document.expired é sinal com três estados (true, false e null). Tudo que o sandbox emite carrega livemode: false. Teto de 500 sessões por mês. Use o sandbox para provar o receptor de webhook de ponta a ponta (assinatura, dedup, os três desfechos) antes da primeira sessão live: é exatamente para isso que os sufixos existem. ## 7. Produção não é o sandbox com outra chave Criar a chave de produção passa por portões que o sandbox não tem. Sandbox: POST /v1/keys com environment sandbox devolve 201 na primeira tentativa. Produção: environment production exige, em cascata: a conta com o e-mail confirmado, a verificação da conta concluída (403 organization_cnpj_required) e a verificação em duas etapas ativa (403 mfa_enrollment_required, depois 403 mfa_code_required pedindo o código no corpo). Flow e destino de webhook são POR AMBIENTE. Sandbox: O flow_id e o endpoint de webhook que você criou no sandbox existem só no sandbox. Produção: Trocar apenas a chave no dia do go-live devolve 404 flow_not_found. Recrie o flow e o destino do webhook em produção e use o novo flow_id. Produção exige as imagens; o sandbox não. Sandbox: O submit com apenas o documento de teste, sem nenhuma mídia, conclui a verificação e dispara o webhook. Produção: O mesmo corpo devolve action_required, com missing_image por módulo, e nenhum webhook sai enquanto a jornada não terminar: as fotos entram pelo widget. Motivo de recusa: o sandbox alcança um subconjunto do catálogo. Sandbox: Os sufixos cobrem aprovado, selfie_nao_confere, vida_nao_confirmada, restricao_do_cliente e verificacao_nao_confirmada. Produção: O motivo mais comum na vida real é doc_ilegivel (documento que o OCR não conseguiu ler), e ele não tem sufixo no sandbox. Trate o campo reason_code como aberto dentro do catálogo, nunca como a lista dos cinco que você viu. Teto de chamadas por minuto. Sandbox: 240 criações de sessão por minuto. Produção: 60 criações de sessão por minuto. O teto real vem sempre no header X-RateLimit-Limit, e o 429 traz Retry-After: leia os headers em vez de fixar o número. Uma rota pode ter mais de um teto ao mesmo tempo, e o header traz sempre o que restringe primeiro, com o X-RateLimit-Remaining correspondente: o número que você lê é o que vai barrar, e não é preciso descobrir qual teto é. Retenção da mídia. Sandbox: 7 dias. Produção: 180 dias. Cobrança. Sandbox: Nada é cobrado, e o teto mensal de sessões é o único limite de volume. Produção: Criar a sessão não cobra e não reserva nada: a cobrança acontece quando a verificação termina, e o saldo atualizado chega no seu webhook. A criação só confere se o saldo cobre o máximo que a verificação pode custar: o preço do flow mais, quando o flow tem cobrança por sócio ou por empresa da cadeia, essas parcelas no teto. Sem saldo para isso, ela devolve 402 insufficient_credit com o saldo e o valor que falta na mensagem. Um 402 de flow com o módulo Proteção de conta nunca aciona a recarga automática. ## 8. Versão no caminho; adição é compatível A base é https://api.unifokal.com/v1 e a versão vive no caminho. Não existe header de versão. Adição compatível (campo novo na resposta, módulo novo no catálogo, chave nova no webhook) NÃO sobe a versão. Parser estrito que explode em chave desconhecida quebra sozinho: ignore o que não conhecer. Mudança que quebra ganha caminho novo e entra no changelog público (https://unifokal.com/docs/changelog). A política completa está em https://unifokal.com/docs/versionamento. ## 9. Ids são prefixo + ULID, e são opacos Todo id é prefixo + ULID de 26 caracteres: flow_ para flow, vs_ para sessão de verificação, ver_ para verificação, whe_ para destino de webhook. O spec publica o pattern exato de cada um. Trate como string opaca: guarde inteiro, não parseie além do prefixo, não assuma tamanho fixo para sempre. O prefixo flw_ nunca existiu (foi um erro antigo de documentação): flow é flow_. ## 10. Descubra o catálogo vivo em GET /v1/capabilities GET https://api.unifokal.com/v1/capabilities sem credencial devolve o catálogo geral com o preço-base público, o mesmo dado da vitrine de preços do site. Com uma chave sk_ no Authorization, a MESMA URL devolve o contrato efetivo da organização da chave: preço negociado, ambiente e livemode. Cada módulo traz status (available ou coming_soon) e requires, o grafo de dependências que a API cobra com 422 na montagem do flow. Não mantenha cópia local do catálogo: o que a rota devolve é a fonte, e módulo novo aparece lá primeiro. ## 11. A superfície sk_ tem 4 rotas; o setup mora no painel A superfície inteira da chave secreta: POST /verification-sessions, POST /verification-links, GET /webhook-events, POST /webhook-events/replay. Qualquer outra rota com sk_ responde 403 credential_type_not_allowed. POST /verification-links é para quem NÃO vai montar o widget: nós hospedamos a página e você entrega a url ao titular. O link vive horas (a sessão só nasce no resgate, e aí vive 900 s), o token vlt_ volta em claro uma única vez e não é reexibido, e o link não cobra nada: quem cobra é a verificação que nascer dele. O setup acontece no painel, uma vez, nesta ordem: confirmar o e-mail da conta, cadastrar o destino de webhook (o flow exige um destino já cadastrado no MESMO ambiente), criar o flow, gerar a chave, registrar as origens onde o widget vai rodar. Sem a origem registrada o navegador recusa a chamada e o widget não sobe, e a falha aparece longe de qualquer log seu: é o passo que mais derruba integração nova. Você nunca envia o contato do titular. Um flow com email_otp cria sessão com o mesmo corpo de qualquer outro: o widget pede o endereço à pessoa e dispara o código, exatamente como já fazia com o telefone do sms_otp. ## Códigos de erro estáveis da criação de sessão O par status + código é contrato; a mensagem não. A lista completa, por rota, está no spec. - 400 validation_error - 400 unknown_policy_key - 400 unknown_monitoring_key - 401 invalid_api_key - 403 organization_suspended - 403 test_key_used_in_production - 403 email_not_verified - 403 credential_type_not_allowed - 404 flow_not_found - 422 flow_not_live - 422 email_not_accepted - 422 phone_not_accepted - 402 insufficient_credit - 429 sandbox_limit_reached - 429 rate_limited - 409 idempotency_conflict - 422 idempotency_key_reuse - 422 policy_module_not_in_flow - 422 policy_ubo_cap_above_flow - 422 session_not_supported ## Referência - [Documentação completa](https://unifokal.com/docs): widget, autenticação, os 4 endpoints, módulos, webhooks e sandbox, sem login. - [Spec OpenAPI 3.1](https://unifokal.com/docs/openapi.json): gerada do código do backend e comparada com ele em teste; a API serve o mesmo documento em https://api.unifokal.com/v1/openapi.json. - [Catálogo vivo de módulos e preços](https://api.unifokal.com/v1/capabilities): JSON, credencial opcional. - [Changelog da API](https://unifokal.com/docs/changelog): tudo o que mudou, em ordem. - [Política de versão](https://unifokal.com/docs/versionamento): o que é mudança compatível e o que nunca muda dentro de /v1. - [Coleção importável (Postman v2.1)](https://unifokal.com/docs/unifokal.postman_collection.json): gerada da spec a cada publicação, sem chave e sem script; defina UNIFOKAL_SECRET_KEY e UNIFOKAL_FLOW_ID no ambiente do seu cliente HTTP. ## Seções da documentação - [O Widget](https://unifokal.com/docs/widget#widget) - [Verificação em aplicativo](https://unifokal.com/docs/aplicativo-nativo#aplicativo-nativo) - [Autenticação](https://unifokal.com/docs/autenticacao#auth) - [Segurança do fluxo](https://unifokal.com/docs/autenticacao#seguranca) - [Acesso da equipe por SSO (SAML 2.0)](https://unifokal.com/docs/autenticacao#sso) - [Integração ponta a ponta](https://unifokal.com/docs/integracao#integracao) - [Os desfechos, e o que fazer com cada um](https://unifokal.com/docs/integracao#desfechos) - [Receitas por jornada](https://unifokal.com/docs/integracao#receitas-das-jornadas) - [Humano verificado: qual peça para qual caso](https://unifokal.com/docs/integracao#humano-verificado) - [API REST (4 endpoints públicos)](https://unifokal.com/docs/api-rest#api) - [Link de verificação hospedado](https://unifokal.com/docs/api-rest#link-hospedado) - [Confirmação fora de banda](https://unifokal.com/docs/api-rest#confirmacao-fora-de-banda) - [Spec OpenAPI e tipos](https://unifokal.com/docs/api-rest#openapi) - [Coleção importável](https://unifokal.com/docs/api-rest#colecao-importavel) - [Para agentes de IA](https://unifokal.com/docs/api-rest#agentes-de-ia) - [Pacotes para o seu assistente de IA](https://unifokal.com/docs/pacotes-para-ia#pacotes-para-ia) - [Cada página em Markdown](https://unifokal.com/docs/pacotes-para-ia#markdown-por-pagina) - [Webhooks e eventos](https://unifokal.com/docs/webhooks#webhooks) - [Valide a assinatura do webhook](https://unifokal.com/docs/webhooks#webhook-signature) - [Conferir e apresentar o atestado de pessoa verificada](https://unifokal.com/docs/webhooks#atestado-de-pessoa-verificada) - [Como conciliar o que foi cobrado](https://unifokal.com/docs/webhooks#conciliacao) - [Lista de bloqueio](https://unifokal.com/docs/ambientes#blocklist) - [Sandbox](https://unifokal.com/docs/ambientes#sandbox) - [Sandbox e produção: o que muda](https://unifokal.com/docs/ambientes#ambientes) - [Exportação de dados](https://unifokal.com/docs/conta-e-dados#exportacao-de-dados) - [Encerramento de conta](https://unifokal.com/docs/conta-e-dados#encerramento-de-conta) - [Privacidade e consentimento](https://unifokal.com/docs/conta-e-dados#privacidade-consentimento) - [Painel de operação](https://unifokal.com/docs/painel-de-operacao#painel-de-operacao) - [Lista de permissão](https://unifokal.com/docs/painel-de-operacao#lista-de-permissao) - [Consulta em lote por planilha](https://unifokal.com/docs/painel-de-operacao#consulta-em-lote) - [Permissões próprias](https://unifokal.com/docs/painel-de-operacao#permissoes-proprias) - [PLD/FT pela regra da norma](https://unifokal.com/docs/pld-ft#pld-ft) - [Dossiê selado: exportar e conferir](https://unifokal.com/docs/pld-ft#pld-ft-dossie-selado) - [A contratação, pelos arts. 44, 45 e 47](https://unifokal.com/docs/pld-ft#pld-ft-contratacao) - [Erros da API](https://unifokal.com/docs/erros#erros) - [Glossário](https://unifokal.com/docs/glossario#glossario) - [Catálogo de módulos](https://unifokal.com/docs/modulos#catalogo-modulos) - [Documento, face match e prova de vida](https://unifokal.com/docs/modulos/identidade#modulos-identidade) - [Comprovante de endereço](https://unifokal.com/docs/modulos/endereco-ocr#modulo-endereco-ocr) - [Verificação de idade](https://unifokal.com/docs/modulos/idade#modulo-idade) - [Detecção de múltiplas contas (1:N)](https://unifokal.com/docs/modulos/face-unica#modulo-face-unica) - [Reautenticação facial](https://unifokal.com/docs/modulos/face-reauth#modulo-face-reauth) - [Aprovação de ato com passkey](https://unifokal.com/docs/modulos/passkey#modulo-passkey) - [Atestado de pessoa verificada](https://unifokal.com/docs/modulos/atestado-humano#modulo-atestado-humano) - [Reuso de Documento](https://unifokal.com/docs/modulos/doclink#modulo-doclink) - [Validação de canal: e-mail e telefone](https://unifokal.com/docs/modulos/canal#modulos-canal) - [PEP e listas restritivas](https://unifokal.com/docs/modulos/pep#modulo-pep) - [Consulta cadastral de CPF e de CNPJ](https://unifokal.com/docs/modulos/cadastrais#modulos-cadastrais) - [OCR do documento de empresa](https://unifokal.com/docs/modulos/cnpj-ocr#modulo-cnpj-ocr) - [Dados cadastrais entregues](https://unifokal.com/docs/modulos/dados-cadastrais#modulo-dados-cadastrais) - [Benefícios do governo](https://unifokal.com/docs/modulos/beneficios-gov#modulo-beneficios-gov) - [Screening do quadro societário](https://unifokal.com/docs/modulos/screening-socios#screening-socios) - [Impedidos de apostar](https://unifokal.com/docs/modulos/impedidos-apostar#modulo-impedidos-apostar) - [Mídia adversa](https://unifokal.com/docs/modulos/midia-adversa#modulo-midia-adversa) - [Coerência cadastral](https://unifokal.com/docs/modulos/coerencia-cadastral#modulo-coerencia-cadastral) - [Forense de documento](https://unifokal.com/docs/modulos/doc-forense#modulo-doc-forense) - [Detecção de rede de fraude](https://unifokal.com/docs/modulos/fraud-network#modulo-fraud-network) - [Cadastro de dispositivo Pix](https://unifokal.com/docs/modulos/pix-device#modulo-pix-device) - [Monitoramento de sessão](https://unifokal.com/docs/modulos/sessao-monitor#modulo-sessao-monitor) - [Sinais do aparelho](https://unifokal.com/docs/modulos/device-intel#modulo-device-intel) - [Assinatura eletrônica](https://unifokal.com/docs/modulos/assinatura#modulo-assinatura) - [Custódia da autorização de consulta](https://unifokal.com/docs/modulos/custodia-autorizacao#modulo-custodia-autorizacao) - [Documento de viagem estrangeiro (MRZ)](https://unifokal.com/docs/modulos/doc-global#modulo-doc-global) - [Cadeia societária até o beneficiário final](https://unifokal.com/docs/modulos/ubo-profundo#modulo-ubo-profundo) - [Inscrição estadual](https://unifokal.com/docs/modulos/inscricao-estadual#modulo-inscricao-estadual) - [Certidão trabalhista (CNDT)](https://unifokal.com/docs/modulos/cndt#modulo-cndt) - [Representante vinculado à empresa](https://unifokal.com/docs/modulos/representante-pj#modulo-representante-pj) - [Empresa estrangeira](https://unifokal.com/docs/modulos/kyb-estrangeira#modulo-kyb-estrangeira) - [Motor Antifraude](https://unifokal.com/docs/modulos/fraud-ai#modulo-fraud-ai) - [Gate transacional](https://unifokal.com/docs/modulos/transacao#modulo-transacao) - [Monitoramento transacional](https://unifokal.com/docs/modulos/transacao-monitor#modulo-transacao-monitor) - [Proteção de conta](https://unifokal.com/docs/modulos/conta#modulo-conta) - [Risco de IP e de e-mail](https://unifokal.com/docs/modulos/risco#modulos-risco) - [Análise de crédito](https://unifokal.com/docs/modulos/credito#modulos-credito) - [Monitoramento contínuo](https://unifokal.com/docs/modulos/monitoring-aml#modulo-monitoring-aml) - [Monitoramento PLD/FT](https://unifokal.com/docs/modulos/pld-monitor#modulo-pld-monitor) - [Classificação de risco PLD/FT](https://unifokal.com/docs/modulos/pld-risco#modulo-pld-risco) - [Vínculos, listas restritivas e processos](https://unifokal.com/docs/modulos/compliance-vinculos#modulos-compliance-vinculos) - [Background check e sanções](https://unifokal.com/docs/modulos/background#modulos-background) ## Pacotes de contexto A documentação em Markdown recortada por produto, gerada a cada publicação, para colar no assistente de IA. O tamanho medido de cada pacote está em https://unifokal.com/docs/pacotes-para-ia. - [Documentação completa](https://unifokal.com/docs/pacotes-para-ia/completo.md): Todos os módulos do catálogo. - [Identidade e biometria](https://unifokal.com/docs/pacotes-para-ia/identidade.md): cpf_ocr, face, liveness, idade, face_unica, endereco_ocr, doc_global, doclink, face_reauth (Em breve), passkey (Em breve), atestado_humano (Em breve). - [Validação cadastral de CPF](https://unifokal.com/docs/pacotes-para-ia/validacao-cadastral.md): cpf_contatos, cpf_enderecos, cpf_receita, cpf_empresas, coerencia_cadastral, dados_cadastrais. - [Empresa (KYB)](https://unifokal.com/docs/pacotes-para-ia/empresa.md): cnpj_ocr, cnpj_socios, cnpj_cadastro, cnpj_receita, cnpj_participacoes, ubo_profundo, inscricao_estadual (Em breve), cndt (Em breve), representante_pj (Em breve), kyb_estrangeira (Em breve). - [Canal (e-mail e telefone)](https://unifokal.com/docs/pacotes-para-ia/canal.md): email_otp, sms_otp. - [Compliance](https://unifokal.com/docs/pacotes-para-ia/compliance.md): pep_sancoes, pld_monitor (Em breve), pld_risco (Em breve), monitoring_aml, ofac_realtime (Em breve), antecedentes_cac (Em breve), mandados_interpol (Em breve), pep_parentes (Em breve), impedidos_apostar, impedidos_vinculos (Em breve), midia_adversa, pep_lista_restritiva (Em breve), antecedentes_estaduais (Em breve), processos_judiciais (Em breve), beneficios_gov (Em breve). - [Análise de crédito](https://unifokal.com/docs/pacotes-para-ia/credito.md): credito_dividas (Em breve), credito_scr (Em breve), credito_boavista (Em breve), credito_protestos (Em breve), credito_cadin (Em breve), credito_pgfn, scr_bacen (Em breve). - [Contrato e assinatura](https://unifokal.com/docs/pacotes-para-ia/assinatura.md): assinatura (Em breve), custodia_autorizacao (Em breve). - [Antifraude](https://unifokal.com/docs/pacotes-para-ia/antifraude.md): fraud_ai, transacao, transacao_monitor, conta (Em breve), ip_risk, email_risk, ip_risk_plus (Em breve), email_risk_plus (Em breve), telefone_risco (Em breve), doc_forense, fraud_network, pix_device (Em breve), sessao_monitor (Em breve), device_intel (Em breve). ## Páginas em Markdown - [Documentação UNIFOKAL](https://unifokal.com/docs.md): A introdução, a jornada do zero ao primeiro resultado e o mapa de todas as páginas. - [O Widget](https://unifokal.com/docs/widget.md): Como instalar o Widget UNIFOKAL em uma linha, montar com o id da sessão, tratar os eventos e fixar a versão do bundle com integridade. - [Verificação em aplicativo](https://unifokal.com/docs/aplicativo-nativo.md): Como abrir a verificação UNIFOKAL numa WebView do seu aplicativo: os ajustes de iOS e de Android que a câmera exige e como o app sabe a hora de fechar a tela. - [Autenticação e segurança](https://unifokal.com/docs/autenticacao.md): Chaves secretas de sandbox e de produção, os erros estáveis da criação de sessão, a segurança do fluxo e o acesso da equipe por SSO (SAML 2.0). - [Integração ponta a ponta](https://unifokal.com/docs/integracao.md): Código completo para criar a sessão, montar o widget, receber o webhook assinado e tratar cada desfecho, em HTTP, TypeScript e Python. - [API REST](https://unifokal.com/docs/api-rest.md): Os 4 endpoints públicos da API UNIFOKAL, o link de verificação hospedado, a confirmação fora de banda, a spec OpenAPI 3.1 com geração de tipos, a coleção importável e o briefing para agentes de IA. - [Pacotes para IA](https://unifokal.com/docs/pacotes-para-ia.md): A documentação da UNIFOKAL recortada por produto, em Markdown, para colar no seu assistente de IA, com o tamanho medido de cada pacote e a versão em Markdown de cada página. - [Webhooks](https://unifokal.com/docs/webhooks.md): O corpo do webhook da UNIFOKAL, os eventos, as retentativas e a validação da assinatura HMAC, com exemplos prontos. - [Sandbox, produção e lista de bloqueio](https://unifokal.com/docs/ambientes.md): Como o sandbox simula cada desfecho, o que muda entre sandbox e produção e como funciona a lista de bloqueio da conta e do flow. - [Conta, dados e privacidade](https://unifokal.com/docs/conta-e-dados.md): Exportação de dados, encerramento de conta e o aviso de privacidade e consentimento que o widget mostra ao titular. - [Painel de operação](https://unifokal.com/docs/painel-de-operacao.md): O funil por etapa e por flow, o registro de requisições sem corpo, o orçamento diário de gasto com o spend_cap_reached, a consulta em lote, a simulação de política no histórico e a lista de permissão. - [PLD/FT pela regra da norma](https://unifokal.com/docs/pld-ft.md): Como ligar o monitoramento de PLD/FT: a política aprovada, os campos do evento, o perfil do cliente, a fila com o prazo legal, o caso e o rascunho do Siscoaf. - [Erros da API](https://unifokal.com/docs/erros.md): Todo código de erro da API UNIFOKAL, com o status HTTP, o que aconteceu, o que fazer e o que não fazer, cada um na própria âncora. - [Glossário](https://unifokal.com/docs/glossario.md): Os termos de verificação de identidade e de empresa (KYC, KYB, PEP, prova de vida, 1:1 e 1:N) e o vocabulário da API UNIFOKAL, um verbete por âncora. - [Catálogo de módulos](https://unifokal.com/docs/modulos.md): Todos os módulos que dá para ligar num Flow da UNIFOKAL, por grupo, com o que cada um entrega e o link para a referência do payload. - [Documento, face match e prova de vida](https://unifokal.com/docs/modulos/identidade.md): Os três módulos base do KYC de pessoa (cpf_ocr, face e liveness): o que cada um entrega e o payload de resultado no webhook. - [Comprovante de endereço](https://unifokal.com/docs/modulos/endereco-ocr.md): O módulo endereco_ocr lê o comprovante de endereço enviado pelo titular, diz se ele é recente e se o nome confere, com o payload completo. - [Verificação de idade](https://unifokal.com/docs/modulos/idade.md): O módulo idade responde se o titular aparenta ter pelo menos a idade que o flow exige, pela selfie e sem documento. - [Detecção de múltiplas contas (1:N)](https://unifokal.com/docs/modulos/face-unica.md): O módulo face_unica busca o rosto da selfie na sua própria base e responde se ele já abriu outra conta, com o payload de resultado. - [Reautenticação facial](https://unifokal.com/docs/modulos/face-reauth.md): O módulo face_reauth reconfirma numa ação sensível que quem age agora é a mesma pessoa aprovada no onboarding, sem pedir documento. - [Aprovação de ato com passkey](https://unifokal.com/docs/modulos/passkey.md): O módulo passkey faz o titular aprovar um ato seu com a passkey vinculada à conta dele, com evidência conferível sem consultar a UNIFOKAL. - [Atestado de pessoa verificada](https://unifokal.com/docs/modulos/atestado-humano.md): O módulo atestado_humano entrega, junto com a verificação aprovada, uma declaração assinada que a sua plataforma confere e apresenta sem consultar a UNIFOKAL e sem dado pessoal direto. - [Reuso de Documento](https://unifokal.com/docs/modulos/doclink.md): O módulo doclink reaproveita a identidade de quem já se verificou com você: o titular faz a prova de vida e não fotografa o documento de novo. - [Validação de canal: e-mail e telefone](https://unifokal.com/docs/modulos/canal.md): Os módulos email_otp, telefone e sms_otp provam a posse do canal de contato, com os endpoints de envio e de conferência do código. - [PEP e listas restritivas](https://unifokal.com/docs/modulos/pep.md): O módulo pep_sancoes confere o CPF e o nome lidos do documento contra listas oficiais de pessoas expostas politicamente e de sanções. - [Consulta cadastral de CPF e de CNPJ](https://unifokal.com/docs/modulos/cadastrais.md): Os sete módulos de consulta cadastral de CPF e de CNPJ, com o que cada um traz e o payload de resultado de cada consulta. - [OCR do documento de empresa](https://unifokal.com/docs/modulos/cnpj-ocr.md): O módulo cnpj_ocr lê o documento societário enviado pela empresa (cartão CNPJ, contrato social, certidão) e extrai os campos impressos. - [Dados cadastrais entregues](https://unifokal.com/docs/modulos/dados-cadastrais.md): O módulo dados_cadastrais entrega quatro campos fixos a partir das consultas de CPF do mesmo flow, com o registro de finalidade. - [Benefícios do governo](https://unifokal.com/docs/modulos/beneficios-gov.md): O módulo beneficios_gov confere na fonte oficial da CGU se o titular verificado é beneficiário de programa social federal. - [Screening do quadro societário](https://unifokal.com/docs/modulos/screening-socios.md): Cada sócio que vem na consulta de quadro societário é conferido contra as mesmas listas de PEP e sanções, sem módulo novo e sem custo a mais. - [Impedidos de apostar](https://unifokal.com/docs/modulos/impedidos-apostar.md): O módulo impedidos_apostar confere o titular contra as listas públicas de pessoas vedadas de apostar pela Lei 14.790/2023, Art. 26. - [Mídia adversa](https://unifokal.com/docs/modulos/midia-adversa.md): O módulo midia_adversa confere o nome lido do documento contra um corpus aberto de notícias, com a evidência no webhook. - [Coerência cadastral](https://unifokal.com/docs/modulos/coerencia-cadastral.md): O módulo coerencia_cadastral compara o que o documento diz com o que o cadastro oficial diz e devolve o veredito campo a campo. - [Forense de documento](https://unifokal.com/docs/modulos/doc-forense.md): O módulo doc_forense faz a perícia do arquivo da foto do documento já capturada, sem pedir foto nova ao titular. - [Detecção de rede de fraude](https://unifokal.com/docs/modulos/fraud-network.md): O módulo fraud_network responde se esta pessoa está ligada a outras contas suas, sem foto nem passo novo para o titular. - [Cadastro de dispositivo Pix](https://unifokal.com/docs/modulos/pix-device.md): O módulo pix_device transforma o cadastro de dispositivo de acesso da Resolução BCB 403/2024 num cadastro verificado por biometria. - [Monitoramento de sessão](https://unifokal.com/docs/modulos/sessao-monitor.md): O módulo sessao_monitor acompanha a sessão já logada depois da aprovação e manda alerta no mesmo webhook assinado. - [Sinais do aparelho](https://unifokal.com/docs/modulos/device-intel.md): O módulo device_intel observa o navegador do titular durante a captura e agrega o resultado num veredito explicável. - [Assinatura eletrônica](https://unifokal.com/docs/modulos/assinatura.md): O módulo assinatura transforma a verificação aprovada em assinatura eletrônica avançada do documento que você indicar, com dossiê. - [Custódia da autorização de consulta](https://unifokal.com/docs/modulos/custodia-autorizacao.md): O módulo custodia_autorizacao guarda a autorização de consulta ao SCR por cinco anos contados da última consulta, com prova verificável sem a UNIFOKAL. - [Documento de viagem estrangeiro (MRZ)](https://unifokal.com/docs/modulos/doc-global.md): O módulo doc_global lê a zona de leitura mecânica (MRZ) de passaportes e documentos em cartão de qualquer país, no padrão ICAO 9303. - [Cadeia societária até o beneficiário final](https://unifokal.com/docs/modulos/ubo-profundo.md): O módulo ubo_profundo sobe a cadeia societária nível a nível até as pessoas naturais que controlam a empresa, com o percentual acumulado. - [Inscrição estadual](https://unifokal.com/docs/modulos/inscricao-estadual.md): O módulo inscricao_estadual consulta a inscrição estadual da empresa na UF da matriz e devolve a situação de cada inscrição encontrada. - [Certidão trabalhista (CNDT)](https://unifokal.com/docs/modulos/cndt.md): O módulo cndt consulta a Certidão Negativa de Débitos Trabalhistas da empresa, válida por 180 dias para todos os estabelecimentos. - [Representante vinculado à empresa](https://unifokal.com/docs/modulos/representante-pj.md): O módulo representante_pj confere o CPF do representante que assina pela empresa contra o quadro societário dela, e devolve se consta como administrador, se consta sem função de administração, ou se não consta no quadro. - [Empresa estrangeira](https://unifokal.com/docs/modulos/kyb-estrangeira.md): O módulo kyb_estrangeira verifica a empresa de fora do Brasil que não tem CNPJ, pelo identificador de entidade legal (LEI) ou por nome e país, e devolve o registro, a situação e as controladoras contábeis. - [Motor Antifraude](https://unifokal.com/docs/modulos/fraud-ai.md): O módulo fraud_ai avalia a sessão e devolve um risco de 0 a 100 com o motivo de cada ponto, no bloco fraud_assessment do webhook. - [Gate transacional](https://unifokal.com/docs/modulos/transacao.md): O módulo transacao avalia a transação que você envia e devolve allow, step_up ou deny na hora, com as razões de cada sinal. - [Monitoramento transacional](https://unifokal.com/docs/modulos/transacao-monitor.md): O módulo transacao_monitor faz a varredura retrospectiva das transações enviadas e manda alerta por webhook quando um padrão fecha. - [Proteção de conta](https://unifokal.com/docs/modulos/conta.md): O módulo conta é um gate síncrono de risco sobre eventos de conta, como login, troca de senha e recuperação de acesso. - [Risco de IP e de e-mail](https://unifokal.com/docs/modulos/risco.md): Os módulos de risco de IP, de e-mail e de telefone avaliam o contexto da verificação e levam para revisão com a evidência no webhook. - [Análise de crédito](https://unifokal.com/docs/modulos/credito.md): Os módulos de crédito consultam dívidas, SCR, Boa Vista, protestos, CADIN e PGFN do CPF lido do documento, com o payload de cada um. - [Monitoramento contínuo](https://unifokal.com/docs/modulos/monitoring-aml.md): O módulo monitoring_aml mantém o titular aprovado sob vigilância nas listas de PEP e sanções e avisa por webhook quando algo muda. - [Monitoramento PLD/FT](https://unifokal.com/docs/modulos/pld-monitor.md): O módulo pld_monitor seleciona operações e situações pela relação da norma do seu setor e avisa por webhook, com o prazo legal do regime. - [Classificação de risco PLD/FT](https://unifokal.com/docs/modulos/pld-risco.md): O módulo pld_risco classifica o risco do cliente na verificação e devolve a faixa, os fatores e a diligência reforçada da norma do regime. - [Vínculos, listas restritivas e processos](https://unifokal.com/docs/modulos/compliance-vinculos.md): Seis módulos de compliance que aprofundam o screening além do titular: parentes de PEP, vínculos com impedidos, listas e processos. - [Background check e sanções](https://unifokal.com/docs/modulos/background.md): Os módulos ofac_realtime, antecedentes_cac e mandados_interpol consultam o CPF do documento em fontes de sanção e de antecedentes. - [Changelog da API](https://unifokal.com/docs/changelog.md): Tudo o que mudou no contrato público, em ordem. - [Política de versão](https://unifokal.com/docs/versionamento.md): O que é mudança compatível e o que nunca muda dentro de /v1. ## Optional - [Preços](https://unifokal.com/precos): preço público por módulo, sem call de vendas. - [Comparativo](https://unifokal.com/comparar): a matriz competitiva com fonte por célula. - [Status da plataforma](https://unifokal.com/status) - [Termos de Uso](https://unifokal.com/termos) e [Política de Privacidade](https://unifokal.com/privacidade)