Endereço
Todo espaço tem um endereço estável, com a região dele no nome:https://control.api.niadra.com.
Versões
A versão está no caminho:/v1. Campo novo ou rota nova não mudam a versão, então o seu código precisa ignorar campos que não conhece (os dois SDKs ignoram). Remover um campo ou mudar o sentido dele é /v2, com 12 meses em que as duas versões respondem, aviso por e-mail e o cabeçalho Deprecation em toda resposta da versão antiga.
Autenticação
Uma chave de fonte só autentica com o segredo; o
key_id no prefixo é público. Os escopos são track, act, context, search, identify, admin e analytics. Veja Espaços e chaves.
As rotas de governança (identidade, privacidade, auditoria, medição, revisão, gatilhos) aceitam uma pessoa com um dos papéis da rota ou uma chave de fonte com o escopo admin. Os papéis do Console são admin, security, integration, review, analysis e vendor; admin passa em toda checagem de papel, e uma pessoa vendor só enxerga as fontes nomeadas no vínculo do papel dela. Os vereditos de revisão são a exceção: só uma pessoa com o papel review registra.
Idempotência
As rotas que mudam identidade ou apagam dado recebem o cabeçalhoIdempotency-Key, e nelas ele é obrigatório: toda escrita de identidade (criar ou retirar asserção, unir, separar, bloquear handle, criar ou encerrar vínculo, aceitar ou descartar sugestão), POST /v1/forget e o corte de uma fonte na célula. A Niadra guarda a chave por 24 horas, com um hash do corpo:
- a mesma chave com o mesmo corpo devolve a primeira resposta de novo;
- a mesma chave com outro corpo devolve 409
conflict.
idempotency_key de cada item: o id da mensagem no provedor, ou um UUIDv7 criado pelo SDK. Uma chave repetida entra em duplicates e nunca é gravada duas vezes, mesmo quando um webhook é reenviado dias depois.
Erros
Os erros respondemapplication/problem+json (RFC 9457), com type, title, status, detail, code e request_id. O lote responde 200 quando todos os itens entraram, e 207 com um erro por item recusado quando não. O catálogo completo está em Erros.
Paginação
As listas são paginadas por um cursor opaco, em ordem estável.next_cursor vem null na última página. Nunca monte um cursor na mão: o conteúdo dele pode mudar sem aviso.
Limites de taxa
Passou do limite, a resposta é 429rate_limited com Retry-After em segundos. Os limites valem por chave, e as escritas (/v1/batch, /v1/ingest, /v1/otel, /v1/media, /v1/feedback) são contadas à parte das leituras, então uma enxurrada de escritas nunca corta a leitura primeiro. Um 503 unavailable também traz Retry-After.
Cache e ETag
Toda leitura determinística tem ETag: o contexto, a navegação do histórico e os objetos de negócio. O mesmo pedido, com o mesmo estado, devolve os mesmos bytes.
Os SDKs mandam o ETag que têm em toda atualização do contexto.
Dado pessoal fica fora da URL
Telefone, e-mail, documento, handle, consulta de busca e qualquer texto livre vão só no corpo da requisição, nunca no caminho nem na query. A URL acaba em log de balanceador, de firewall e em span de rastreio, fora da cifra e fora do alcance doforget. É por isso que context, search e timeline por handle são POST, e que a busca de perfis recebe a consulta no corpo. As formas GET do contexto e da linha do tempo recebem um id de perfil. Um teste no nosso CI, com um valor canário, garante que nada disso aparece em URL, log, span ou mensagem de erro.
Ids que não são dado pessoal, como id de perfil, id de item, conversation_id ou id de objeto, podem ir no caminho.
Rastreio
Mande um cabeçalhotraceparent do W3C, e a Niadra o devolve na resposta. Mande X-Request-Id para escolher o id da requisição, ou deixe a Niadra gerar um; toda resposta traz esse id no cabeçalho X-Request-Id e no request_id de um erro. Informe o id quando falar com o suporte.
Tamanhos
Um lote com corpo acima de 2,5 MB, ou com mais de 500 itens, responde 422
invalid_input. Um item acima de 1 MB é recusado sozinho, com o erro de item too_large, e o resto do lote entra.
Velocidade
Nenhum LLM roda no caminho do
context() nem da navegação.
Tetos iniciais de um espaço
São valores de partida, definidos no seu contrato. Fale com a gente quando um caso de uso pedir mais.
Nomes no contrato
Todo nome na API, nos SDKs, nas ferramentas MCP, nos eventos e nos webhooks é em inglês, em ASCII. Os campos sãosnake_case (conversation_id, occurred_at); horários são ISO 8601 com fuso; os enums usam valores fixos em minúsculas, como message, system_event e action para kind, ou customer, ai_agent, human_agent e system para speaker. Os níveis de verificação são V0 a V4 e no_customer. Dentro da /v1, nenhum valor muda de sentido.
Próximos passos
Erros
cada código e o que fazer com ele.
Eventos e o lote
idempotência e erro por item na prática.
Espaços e chaves
escopos, fontes e o formato da chave.
A API da Niadra
todas as rotas, geradas do OpenAPI.

