Développeurs

Référence de l’API

Les points d’accès publics derrière les pages Vérification, Recherche, Sources et collections, soit les mêmes que ceux appelés par ce site. Lecture seule, JSON, aucune clé requise pour les points d’accès ci-dessous. Vous découvrez l’API? Commencez par le guide de l’API; format lisible par machine : openapi.json (OpenAPI 3). Pour les volumes de vérification en production et les engagements de soutien, consultez la licence de vérification.

URL de base : https://api.crownintelligence.net. Les réponses sont en JSON, sauf si un format de téléchargement est demandé. Chaque réponse reflète la dernière actualisation de la compilation; il n’existe aucun paramètre distinct « à la date de » : le chiffre affiché est en direct. Le service peut appliquer une limite de requêtes par adresse (HTTP 429 avec Retry-After; voir Authentification). Des limites de débit et des plafonds de volume peuvent s’appliquer à une utilisation automatisée ou systématique; voir les conditions d’utilisation.

POST /api/match/<collection>

Correspondance d’entités. Envoyez ce que vous savez d’une personne, d’une société, d’une organisation ou d’un navire et obtenez les fiches les plus proches dans une collection, chacune avec un score de 0 à 1, un indicateur match et une explication du score caractéristique par caractéristique. Il s’agit du point d’accès derrière la page Vérification. Les corps des requêtes ne sont pas conservés.

ParamètreTypeRemarques
collectionchemindefault, sanctions, peps, crime ou maritime.
limitentierRésultats par requête, jusqu’à 50. Valeur par défaut : 5.
thresholdnombreScore à partir duquel match est vrai, de 0 à 1. Valeur par défaut : 0.75.
algorithmchaînestandard (par défaut) ou name-only; best correspond à la valeur par défaut. Voir Algorithmes.
topicschaîne[]Chaîne de requête, répétable : sanction, role.pep, debarment, reg.action.
include_dataset / exclude_datasetchaîne[]Chaîne de requête, répétable : noms de registres à conserver ou à exclure (comme dans datasets). Plusieurs valeurs d’un même filtre sont combinées par OU; des filtres différents sont combinés par ET.
queriesobjetCorps. Jusqu’à 20 requêtes nommées, chacune {"schema": …, "properties": {…}}. Une seule requête à plat telle que {"schema":"Person","name":"…"} est également acceptée et traitée comme q1.
schemachaînePerson, Company, Organization, LegalEntity ou Vessel. Une fiche d’un type différent est pénalisée (type_mismatch).
properties.namechaîne[]Noms à rapprocher. Obligatoire sauf si imoNumber est fourni.
properties.birthDatechaîne[]YYYY, YYYY-MM ou YYYY-MM-DD.
properties.nationality / countrychaîne[]Codes ISO 3166 à deux lettres. Utilisés pour la nationalité d’une personne, le territoire d’une société ou le pavillon d’un navire.
properties.imoNumberchaîne[]Numéro IMO à sept chiffres pour les navires.
Champ de la réponseContenu
algorithm, threshold, limit, filtersLes paramètres appliqués
responses.<key>.status, total200, ou 400 avec error; fiches candidates comparées pour cette requête
results[].score, matchScore de 0 à 1; match est vrai à partir de 0.75
results[].features[]feature, explanation, score, weight et, pour les noms, matched_name
results[].id, caption, schema, urlID de la fiche (à utiliser avec Entité), nom principal, type et page de la fiche
results[].datasets, topics, source, list_type, programmeNom du registre, thèmes de risque, nom abrégé de la liste, type de liste et programme
results[].birth_date, nationality, imo, aliasesLes valeurs propres à la fiche, pour comparaison avec la requête
results[].merged_entity, first_seen, last_seenID de l’entité fusionnée entre les registres, le cas échéant; date de première collecte de la fiche et de son dernier chargement
checked_atMoment où la vérification a été effectuée (UTC)
CaractéristiqueCe qui est mesuréEffet sur le score
name_matchAlignement mot à mot du nom de la requête avec le nom et les alias de la fiche (exact, puis orthographes proches); les mots de la fiche absents de la requête abaissent légèrement le score.Établit le score de base
dob_matchDate de naissance, selon la précision de la fiche.+0.10 correspondance, 0 même année, −0.25 différente
country_matchNationalité ou code de pays.+0.05 correspondance, −0.10 différente
identifier_matchNuméro IMO.Au moins 0.98 en cas de correspondance, −0.30 si différent
type_mismatchLa fiche est d’un type d’entité différent de schema.−0.20
curl -X POST "https://api.crownintelligence.net/api/match/default?limit=5" \
  -H "Content-Type: application/json" \
  -d '{"queries":{"q1":{"schema":"Person","properties":{"name":["Jane Example"],"birthDate":["1970"],"nationality":["ca"]}}}}'
import requests

body = {"queries": {"q1": {"schema": "Person", "properties": {
    "name": ["Jane Example"], "birthDate": ["1970"], "nationality": ["ca"]}}}}
r = requests.post("https://api.crownintelligence.net/api/match/default", params={"limit": 5}, json=body)
for hit in r.json()["responses"]["q1"]["results"]:
    print(round(hit["score"] * 100), hit["caption"], hit["source"])
const res = await fetch("https://api.crownintelligence.net/api/match/default?limit=5", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ queries: { q1: { schema: "Vessel",
    properties: { name: ["Example Star"], imoNumber: ["9000000"] } } } }),
});
console.log((await res.json()).responses.q1.results);

Un score mesure la ressemblance, non l’identité. Confirmez chaque correspondance à l’aide de la liste officielle du publicateur avant d’agir.

GET /api/algorithms

Les méthodes de notation acceptées par algorithm dans Correspondance, avec chaque caractéristique et son effet, les constantes de comparaison des noms, la méthode et le seuil par défaut, ainsi que les thèmes acceptés par topics. Voir Algorithmes de correspondance.

curl "https://api.crownintelligence.net/api/algorithms"

GET /api/catalog

Toutes les collections de l’index de construction actuel : nom, titre, version, fiches, entités distinctes, registres, dernière modification, liens (page, index de construction, statistiques, et points d’accès de correspondance, de recherche et de réconciliation) et fichiers avec leur taille. Interrogez-le périodiquement et comparez version pour savoir quand une collection a été reconstruite.

curl "https://api.crownintelligence.net/api/catalog"

GET /api/overview

Totaux principaux pour l’ensemble de la compilation : fiches de vérification actives, sanctions, PEPs, interdictions de contracter, nombres du registre, nationalités, totaux des flux sources et répartition par type de fiche. C’est ce qui alimente les chiffres de la page d’accueil.

ParamètreTypeRemarques
Aucun — le point d’accès n’accepte aucun paramètre de requête.
curl "https://api.crownintelligence.net/api/overview"
import requests

r = requests.get("https://api.crownintelligence.net/api/overview")
print(r.json())
const res = await fetch("https://api.crownintelligence.net/api/overview");
console.log(await res.json());

GET /api/sources

Le registre des sources : une ligne par flux de fournisseur réconcilié dans la compilation, avec le publicateur, le pays, le type de liste, la cadence et l’état de la dernière exécution. Alimente la page Sources.

ParamètreTypeRemarques
qchaîneFiltre en texte libre sur le nom de la source, le territoire, le pays et le type de liste.
list_typechaîneFiltrer par type de liste, p. ex. SANCTION, PEP, DEBARMENT.
pageentierNuméro de page, à partir de 1. Valeur par défaut : 1.
limitentierLignes par page, jusqu’à 100. Valeur par défaut : 50.
curl "https://api.crownintelligence.net/api/sources?list_type=SANCTION&limit=25"
import requests

r = requests.get(
    "https://api.crownintelligence.net/api/sources",
    params={"list_type": "SANCTION", "limit": 25},
)
print(r.json())
const url = new URL("https://api.crownintelligence.net/api/sources");
url.searchParams.set("list_type", "SANCTION");
url.searchParams.set("limit", "25");
const res = await fetch(url);
console.log(await res.json());

GET /api/search/<collection>

La même recherche en texte intégral que /api/search, limitée à une seule collection. Elle accepte tous les paramètres de /api/search; les résultats ne sont pas notés.

ParamètreTypeRemarques
collectionchemindefault, sanctions, peps, crime ou maritime.
qchaîneNom à rechercher, minimum 2 caractères, sauf si un filtre est fourni.
autre—type, list_type, nationality, dob, source, program, sort=first_seen, page, limit, comme pour /api/search.
curl "https://api.crownintelligence.net/api/search/sanctions?q=Jane+Example&limit=10"
import requests

r = requests.get("https://api.crownintelligence.net/api/search/sanctions", params={"q": "Jane Example", "limit": 10})
print(r.json()["total"])
const url = new URL("https://api.crownintelligence.net/api/search/sanctions");
url.searchParams.set("q", "Jane Example");
const res = await fetch(url);
console.log((await res.json()).results);

GET /api/facets

Décomptes qui ventilent une recherche par type de liste, type d’entité, nationalité (30 premières) et registre source (30 premiers). Utilisez-les pour créer des filtres à côté des résultats de recherche. Nécessite q ou au moins un filtre.

ParamètreTypeRemarques
qchaîneNom à rechercher, comme pour /api/search.
list_type, type, nationality, sourcechaîneFiltres, combinés avec AND.
scopechaîneCollection : default, sanctions, peps, crime ou maritime.
curl "https://api.crownintelligence.net/api/facets?q=Jane+Example&list_type=SANCTION"
import requests

r = requests.get("https://api.crownintelligence.net/api/facets", params={"q": "Jane Example"})
print(r.json()["nationality"])
const res = await fetch("https://api.crownintelligence.net/api/facets?q=Jane+Example");
console.log((await res.json()).source);

GET /api/entity/<id>

Une seule fiche selon son identifiant numérique, telle que renvoyée par la recherche ou la correspondance : source, registre, nom, autres noms, programme, type de liste, type d’entité, date de naissance et sa précision, nationalité, numéro IMO, lien vers la source, premier et dernier chargement, related (la même partie dans d’autres registres), listings (la fiche et ses fiches connexes sous forme de listes imbriquées) et merged_entity_url. Un UUID d’entité fusionnée dans le chemin renvoie l’entité fusionnée : légende, schéma, propriétés combinées, registres, sujets, referents, ainsi que listings et records imbriqués (jusqu’à 200). Une fiche qui n’est plus active, mais dont l’entité fusionnée l’est, renvoie 308 vers cette dernière. Les formes de requête /api/entity?id= et ?entity_id= fonctionnent toujours. Guide : L’API des entités.

ParamètreTypeRemarques
idcheminIdentifiant de fiche tiré d’un résultat de recherche ou de correspondance (ou crown-<id> issu des fichiers en bloc), ou UUID d’entité fusionnée.
nestedbooléenfalse renvoie uniquement la fiche ou l’entité fusionnée.
formatchaîneftm : la fiche sous forme d’entité FollowTheMoney, comme dans entities.ftm.json; avec nested=true, comme dans targets.nested.json.
entity_idchaîneForme de requête pour un UUID d’entité fusionnée (entity_id sur une fiche, merged_entity sur une correspondance).
curl "https://api.crownintelligence.net/api/entity/379781867"
import requests

r = requests.get("https://api.crownintelligence.net/api/entity/379781867")
print(r.json()["listings"])
const res = await fetch("https://api.crownintelligence.net/api/entity/379781867");
console.log(await res.json());

GET /api/source

Un registre source en détail : son entrée de registre (éditeur, pays, type de liste, statut, dernière exécution), les totaux de fiches et d’entités distinctes, le premier et le dernier chargement, et les ventilations par type d’entité, pays (60 premiers) et programme (50 premiers), ainsi que ses 15 fiches ajoutées le plus récemment.

ParamètreTypeRemarques
namechaîneNom du registre exactement tel que renvoyé par /api/sources. Obligatoire.
curl "https://api.crownintelligence.net/api/source?name=OFAC%20SDN"
import requests

r = requests.get("https://api.crownintelligence.net/api/source", params={"name": "OFAC SDN"})
print(r.json()["records"])
const url = new URL("https://api.crownintelligence.net/api/source");
url.searchParams.set("name", "OFAC SDN");
console.log(await (await fetch(url)).json());

GET /api/countries

Toutes les nationalités présentes dans les fiches actives, avec le nombre de fiches et le nombre de sources distinctes pour chaque nationalité. Aucun paramètre.

ParamètreTypeRemarques
Aucun — le point d’accès n’accepte aucun paramètre de requête.
curl "https://api.crownintelligence.net/api/countries"
import requests

r = requests.get("https://api.crownintelligence.net/api/countries")
print(r.json())
const res = await fetch("https://api.crownintelligence.net/api/countries");
console.log(await res.json());

GET ou POST /api/reconcile/<collection>

Un service de réconciliation pour OpenRefine (API de réconciliation 0.2). Ajoutez https://api.crownintelligence.net/api/reconcile/default comme service standard dans OpenRefine pour faire correspondre une colonne de noms à une collection. Sans queries, il renvoie le manifeste du service; avec ceux-ci, il évalue chaque requête avec le même algorithme de correspondance que /api/match.

ParamètreTypeRemarques
collectionchemindefault, sanctions, peps, crime ou maritime.
queriesJSONChaîne de requête (GET) ou corps de formulaire/JSON (POST). Jusqu’à 20 requêtes : {"q0":{"query":"Jane Example","type":"Person","limit":5,"properties":[{"pid":"birthDate","v":"1970"}]}}. Les identifiants de propriétés sont ceux de /api/match.
réponseobjetPour chaque clé de requête, result : une liste de candidats avec id, name, score (0–100), match et type. id s’ouvre à /estate/record.html?id=.
curl -G "https://api.crownintelligence.net/api/reconcile/default" --data-urlencode 'queries={"q0":{"query":"Jane Example","type":"Person"}}'
import json, requests

q = {"q0": {"query": "Jane Example", "type": "Person"}}
r = requests.post("https://api.crownintelligence.net/api/reconcile/default", data={"queries": json.dumps(q)})
print(r.json()["q0"]["result"])
const res = await fetch("https://api.crownintelligence.net/api/reconcile/default", {
  method: "POST",
  body: new URLSearchParams({ queries: JSON.stringify({ q0: { query: "Jane Example", type: "Person" } }) }),
});
console.log(await res.json());

GET /api/programs

Les programmes de sanctions et autres programmes regroupés à travers les fiches actives, avec le nombre de fiches, le nombre de listes sources distinctes et le nom des listes contributrices pour chaque programme.

ParamètreTypeRemarques
qchaîneFiltre en texte libre sur le nom du programme ou le nom de la liste source.
pageentierNuméro de page, à partir de 1. Valeur par défaut : 1.
limitentierLignes par page, jusqu’à 100. Valeur par défaut : 50.
curl "https://api.crownintelligence.net/api/programs?q=Magnitsky"
import requests

r = requests.get(
    "https://api.crownintelligence.net/api/programs",
    params={"q": "Magnitsky"},
)
print(r.json())
const url = new URL("https://api.crownintelligence.net/api/programs");
url.searchParams.set("q", "Magnitsky");
const res = await fetch(url);
console.log(await res.json());

GET /api/collection

Totaux récapitulatifs pour un type de collection (sanctions, PEPs ou interdictions de contracter), avec une portée facultative permettant de cibler un angle précis, par exemple les fiches maritimes ou les fiches d’entreprises au sein de ce type.

ParamètreTypeRemarques
typechaîneL’une des valeurs suivantes : SANCTION, PEP, DEBARMENT. Obligatoire.
scopechaîneRestriction facultative, p. ex. sanctions, peps, crime, maritime, kyb, securities.
curl "https://api.crownintelligence.net/api/collection?type=SANCTION"
import requests

r = requests.get(
    "https://api.crownintelligence.net/api/collection",
    params={"type": "SANCTION"},
)
print(r.json())
const url = new URL("https://api.crownintelligence.net/api/collection");
url.searchParams.set("type", "SANCTION");
const res = await fetch(url);
console.log(await res.json());

GET /api/export

Diffuse en continu, sans frais, un téléchargement des fiches actives d’un registre au format CSV ou JSON délimité par des sauts de ligne, pour les registres que Crown a autorisés au téléchargement direct. Les registres non autorisés au téléchargement renvoient une erreur précisant que le registre est offert sous licence d’utilisation.

ParamètreTypeRemarques
sourcechaîneNom exact du registre, tel qu’il apparaît dans la ligne de sa page Sources. Obligatoire.
formatchaînecsv ou jsonl. Par défaut : csv.
curl "https://api.crownintelligence.net/api/export?source=OFAC%20SDN&format=csv" -o ofac-sdn.csv
import requests

r = requests.get(
    "https://api.crownintelligence.net/api/export",
    params={"source": "OFAC SDN", "format": "csv"},
)
with open("ofac-sdn.csv", "wb") as f:
    f.write(r.content)
import { writeFile } from "node:fs/promises";

const url = new URL("https://api.crownintelligence.net/api/export");
url.searchParams.set("source", "OFAC SDN");
url.searchParams.set("format", "csv");
const res = await fetch(url);
await writeFile("ofac-sdn.csv", Buffer.from(await res.arrayBuffer()));

GET /downloads/collections/<collection>/<fichier>

Fichiers en bloc pour chaque collection (default, sanctions, peps, crime ou maritime), reconstruits après chaque actualisation et conservés à la même adresse. index.json répertorie chaque fichier avec sa taille, son nombre de lignes et sa somme de contrôle SHA-256, ainsi que les chiffres, la version et la dernière modification de la collection. Les formats, les colonnes et les mises à jour différentielles sont décrits dans Utilisation des données en bloc.

FichierContenu
index.jsonIndex de construction : version, chiffres et chaque fichier avec sa somme de contrôle
targets.simple.csvUne ligne par fiche, tableau à plat
targets.nested.jsonChaque fiche avec les détails des sanctions imbriqués, une par ligne
entities.ftm.jsonEntités FollowTheMoney, une par ligne
senzing.jsonFiches Senzing, une par ligne
statements.csvUne ligne par valeur de propriété
names.txtChaque nom et alias distinct
delta.jsonOpérations ADD, MOD et DEL depuis la construction précédente
curl -O "https://api.crownintelligence.net/downloads/collections/sanctions/index.json"
curl -O "https://api.crownintelligence.net/downloads/collections/sanctions/targets.simple.csv"
import requests

idx = requests.get("https://api.crownintelligence.net/downloads/collections/sanctions/index.json").json()
for f in idx["files"]:
    print(f["name"], f["rows"], f["sha256"])
const idx = await (await fetch("https://api.crownintelligence.net/downloads/collections/sanctions/index.json")).json();
console.log(idx.version, idx.files.map(f => f.name));

Comment ces données sont recueillies et actualisées →

Besoin d’un volume de vérification en production?