Este domínio não usa a gramática de
keywords booleanas dos demais endpoints. São três rotas
GET com filtros na query string. Se você já integra com /search/*, o contrato aqui é
diferente de propósito — veja “Diferenças em relação aos buckets”, mais abaixo.O que a API responde
O produto existe para responder três perguntas, e cada rota responde uma:A unidade é a designação, não a pessoa
Um resultado é uma designação — o ato que sancionou alguém —, identificada pelosourceRefNumber (ex.: QDi.436). Essa é a chave de negócio da própria ONU: única em toda a lista,
estável ao longo do tempo, e o valor que você deve guardar do lado de cá para casar registros entre
consultas. Os IDs internos (designationId, subjectId) são UUIDs nossos e não têm significado na
fonte.
subjectType vale individual ou entity. entity não quer dizer só organização: embarcações
designadas entram aí, com a bandeira em extracted.flagState.
Datas: quais são da ONU e quais são nossas
Esta é a distinção que mais gera erro de integração.O texto é da ONU, a tradução é nossa
narrative é o motivo da designação na redação oficial do Conselho, em inglês. Reproduza com
atribuição; não republique como afirmação da Nomos.
Em GET /watchlist/{ref}, o parâmetro lang traz a tradução automática em narrativeTranslated.
narrative continua intacto ao lado — a tradução é sempre um campo adicional, nunca uma
substituição, para que a sua interface consiga rotulá-la como tradução de máquina e manter o
original a um toque de distância.
Uma tradução pode faltar. O texto traduzido passa por uma checagem que descarta a tradução inteira
quando o modelo afirma algo que a fonte não sustenta — nesses casos narrativeTranslated vem null
e o inglês é o que existe. Preferimos a lacuna à afirmação inventada.
O bloco extracted é derivado, não publicado
extracted reúne o que foi lido automaticamente da narrativa, e não o que a ONU publica como
campo estruturado: medidas restritivas (prohibitions), documentos citados, última localização
conhecida, afiliações, janela de validade e situação do indivíduo.
Serve para buscar e filtrar. Não é asserção da Nomos, e narrative continua sendo a autoridade
sobre qualquer ponto em que os dois divirjam.
Dois campos merecem atenção:
prohibitions — a redação é da ONU, em inglês
prohibitions — a redação é da ONU, em inglês
Vocabulário fechado, na redação da própria ONU:
asset freeze, travel ban, arms embargo e
as proibições específicas do regime de embarcações da Líbia. Fica em inglês de propósito — é
chave de filtro (?prohibition=travel%20ban), e um valor que mudasse com o idioma do leitor não
seria indexável.Array vazio é o caso comum: a maioria das narrativas descreve conduta, não consequência.subjectStatus — não é status de sanção
subjectStatus — não é status de sanção
Vale
deceased, in_custody ou null (o caso comum). Registra o que a narrativa diz sobre o
indivíduo.Morte não delista. status e delistedOn continuam sendo a única autoridade sobre a
sanção estar em vigor. Use ?excludeDeceased=true quando a sua tela for sobre o que ainda pode
ser acionado — mas conte o total sem o filtro quando a pergunta for “quantos estão designados”.O histórico
GET /watchlist/{ref}/events devolve o log append-only da designação, do mais recente para o mais
antigo. Em eventos amended, changedFields, before e after dizem exatamente quais campos
mudaram e para quê — é diff por campo, não “algo mudou”.
Duas respostas parecidas que significam o oposto uma da outra:
404— não existe designação com essa referência. Provavelmente erro de digitação.200comdata: []— a designação existe e nada mudou desde a ingestão. Hoje é o caso da maioria: passamos a registrar alterações a partir da carga inicial.
detail: "bootstrap" são dessa carga inicial. Representam o retrato do que já estava na
lista quando começamos a observar — não atividade recente do Conselho. Filtre-os para fora
quando a pergunta for “o que mudou ultimamente”.
Quando conseguimos casar a mudança ao comunicado oficial que a anunciou, pressReleaseUrl e
pressReleaseSymbol (ex.: SC/16324) levam direto à fonte primária.
Diferenças em relação aos buckets
- Método e entrada. É
GETcom query string, nãoPOSTcom corpo.keywords(or/and/not) é ignorado — a busca por nome é por substring, emsearch. - Envelope. A resposta é
{ data, total }, não{ results, pagination }. - Paginação. Por
offsetelimit(máximo 100), não porpage.
qadi encontra QADI, e Muhammad encontra MUHAMMED só se o apelido
estiver grafado assim na fonte (a normalização não é fonética).
O filtro regime é comparação exata, com a grafia da fonte: Al-Qaida, Taliban, DPRK,
Iran, Iraq, DRC, Sudan, Libya, Somalia, CAR, Haiti, Yemen, GB, SouthSudan.
AL_QAIDA ou al-qaida devolvem zero resultados sem erro.
Casos de uso
Triagem de contraparte (KYC / onboarding)
Triagem de contraparte (KYC / onboarding)
Consulte o nome antes de fechar contrato ou abrir conta:Use
status=listed para restringir ao que está em vigor, e trate aliases[].quality com
cuidado: um apelido low não é base segura para afirmar identidade — é pista para revisão
humana, não decisão automática.Monitoramento de mudanças
Monitoramento de mudanças
Ordene por Para cada designação que mexeu,
recently_changed (padrão) e compare lastUpdatedOn com o da última execução:GET /watchlist/{ref}/events diz o que mudou campo a campo.Exposição por regime ou por medida
Exposição por regime ou por medida
Quantos designados carregam congelamento de ativos no regime da Coreia do Norte:
total responde a contagem; limit=1 evita trazer a página inteira só para contar.Dossiê de uma designação
Dossiê de uma designação
GET /watchlist/{ref}?lang=pt-BR traz o registro completo com a narrativa traduzida, e
GET /watchlist/{ref}/events traz a linha do tempo com os links para os comunicados oficiais.Cobertura e limites
- Fonte: apenas a Lista Consolidada do Conselho de Segurança da ONU (
source: "un_sc"). OFAC, União Europeia e listas nacionais não estão cobertas. - Atualização: reconciliação duas vezes ao dia.
- Sem casamento de nomes. A API entrega os dados; decidir se “João da Silva” do seu cadastro é o designado é responsabilidade de quem integra. Não fazemos fuzzy matching nem pontuação de similaridade.
- Nada é apagado. Uma remoção da lista vira mudança de
statusmais um evento. O histórico é o produto.
Nos assistentes de IA
A mesma busca está disponível como ferramentabuscar_watchlist no
servidor MCP, para Claude, Cursor e Claude Code.