Skip to main content
A Niadra reconhece o mesmo cliente no WhatsApp, na voz, no app e no CRM. Ela faz isso sem adivinhar: cada ligação entre dois identificadores é uma asserção registrada, com método e evidência, e pode ser desfeita. Esta página explica handles, perfis, asserções e os níveis de verificação que decidem o que cada conversa pode ler.

Handles

Um handle é um identificador de um sujeito num canal ou sistema. Ele tem um type, um value e, quando o tipo pede, um scope: O valor é classificado pelo formato, nunca pelo nome do campo de onde veio, e normalizado no servidor. Os SDKs têm funções que montam cada tipo:
Todo handle pertence a um tipo de sujeito, em subject_kind: person (o padrão), account ou partner. org_registry_hmac e email_domain já nascem de organização. Veja Contas e parceiros.

Perfis e asserções

Um perfil é o cliente como a memória o enxerga: o conjunto de handles ligados entre si. Cada ligação é uma asserção num registro imutável, com o método que a produziu: Quando dois handles do mesmo evento resolvem para perfis diferentes, a união acontece fora da resposta do lote, com trava. A memória fica presa ao handle de origem de cada fato, então separar dois perfis unidos por engano é uma operação de verdade: os fatos, os pedidos e as faturas voltam sozinhos para o dono certo.
identify() sai na hora, fora da fila, para o próximo context() já enxergar o perfil unido.

Proteções contra união errada

  • Dois perfis que já têm handle com nível V3 ou mais nunca se unem sozinhos; só por união forçada, com ator e motivo.
  • Valores de teste e marcadores de QA ficam bloqueados por tipo, numa lista fixa que você pode estender.
  • Cada perfil tem limite por tipo: um documento por país, um system_id por namespace, poucos telefones. Ao estourar, o handle mais fraco é rebaixado, e a ingestão nunca é recusada.
  • Handle que liga muitos perfis em pouco tempo (tablet de loja, número de PABX, WhatsApp de atendimento) vira ambiguous: serve para leitura, não para novas uniões.
  • Troca de número ou de BSUID cria um alias, nunca uma união automática.
  • Pessoa e organização nunca se unem. O que liga as duas é um vínculo.
Handle desconhecido, parcial (um BSUID ainda sem telefone) ou ambíguo recebe um perfil provisório e um contexto vazio. Na dúvida, a memória não revela nada.

Governar a identidade

O seu time corrige a identidade pelas rotas de governança, com uma pessoa do Console que tenha o papel security ou integration, ou com uma chave de fonte de escopo admin. Toda escrita exige o cabeçalho Idempotency-Key, responde 202 com o id da operação e é aplicada sob a trava do perfil, em ordem: A Niadra também propõe ligações que não consegue provar, como dois perfis com o mesmo nome e um e-mail parecido. Ela nunca aplica sozinha: GET /v1/identity/suggestions lista as sugestões com um score e os sinais que o sustentam, aceitar transforma uma delas numa asserção accepted_suggestion, e descartar encerra a sugestão. Para achar um perfil a partir de um handle, use POST /v1/profiles/search: o valor vai no corpo e nunca entra em log. GET /v1/profiles/{profile_id} devolve os handles, os vínculos, o tipo de sujeito e o pseudônimo, com a máscara do papel de quem lê.

Níveis de verificação

O mesmo cliente recebe contextos diferentes conforme o quanto a conversa provou quem ele é: A sua política diz, por categoria de memória, o nível mínimo. O contexto informa em withheld quantos itens ficaram retidos: o agente sabe que verificar libera mais, sem ver o conteúdo. no_customer fica fora da escala e só é aceito de fontes com audiência internal_agent; esse contexto nunca vai ao cliente final.

Nível efetivo

O nível que vale é o menor entre três: o que você pediu, o teto da fonte e o que a conversa provou. O teto é atributo da fonte: agente automatizado V2, fonte que executa OTP V3, V4 só para mesa humana ou sistema de registro. Uma chave de agente vazada não consegue declarar V4. A resposta do contexto mostra os dois lados em verification: requested, effective e, quando o efetivo é menor, reason (source_ceiling ou not_proven).

Elevar o nível

O nível sobe por um evento verify, nunca por inferência. Ele vale para aquela conversa ou tarefa, com validade opcional. Depois dele, peça um context() novo: o SDK já descarta o contexto guardado daquela conversa.
Os métodos são otp_whatsapp, otp_sms, login, kba, network_attestation e human_agent. Um verify acima do teto da fonte volta no 207 com o código verification_not_allowed. Em voz, o atestado de rede da chamada (STIR/SHAKEN e equivalentes) mapeia A para V2, e B e C para V1.

Próximos passos

O contexto e as views

o que cada nível libera no contexto.

Contas e parceiros

organizações e vínculos com papel.

Listar asserções

a API do registro de identidade.

Sugestões de identidade

ligações para revisar, nunca aplicadas sozinhas.