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.
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ètre | Type | Remarques |
|---|---|---|
collection | chemin | default, sanctions, peps, crime ou maritime. |
limit | entier | Résultats par requête, jusqu’à 50. Valeur par défaut : 5. |
threshold | nombre | Score à partir duquel match est vrai, de 0 à 1. Valeur par défaut : 0.75. |
algorithm | chaîne | standard (par défaut) ou name-only; best correspond à la valeur par défaut. Voir Algorithmes. |
topics | chaîne[] | Chaîne de requête, répétable : sanction, role.pep, debarment, reg.action. |
include_dataset / exclude_dataset | chaî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. |
queries | objet | Corps. 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. |
schema | chaîne | Person, Company, Organization, LegalEntity ou Vessel. Une fiche d’un type différent est pénalisée (type_mismatch). |
properties.name | chaîne[] | Noms à rapprocher. Obligatoire sauf si imoNumber est fourni. |
properties.birthDate | chaîne[] | YYYY, YYYY-MM ou YYYY-MM-DD. |
properties.nationality / country | chaî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.imoNumber | chaîne[] | Numéro IMO à sept chiffres pour les navires. |
| Champ de la réponse | Contenu |
|---|---|
algorithm, threshold, limit, filters | Les paramètres appliqués |
responses.<key>.status, total | 200, ou 400 avec error; fiches candidates comparées pour cette requête |
results[].score, match | Score 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, url | ID de la fiche (à utiliser avec Entité), nom principal, type et page de la fiche |
results[].datasets, topics, source, list_type, programme | Nom du registre, thèmes de risque, nom abrégé de la liste, type de liste et programme |
results[].birth_date, nationality, imo, aliases | Les valeurs propres à la fiche, pour comparaison avec la requête |
results[].merged_entity, first_seen, last_seen | ID 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_at | Moment où la vérification a été effectuée (UTC) |
| Caractéristique | Ce qui est mesuré | Effet sur le score |
|---|---|---|
name_match | Alignement 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_match | Date de naissance, selon la précision de la fiche. | +0.10 correspondance, 0 même année, −0.25 différente |
country_match | Nationalité ou code de pays. | +0.05 correspondance, −0.10 différente |
identifier_match | Numéro IMO. | Au moins 0.98 en cas de correspondance, −0.30 si différent |
type_mismatch | La 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ètre | Type | Remarques |
|---|---|---|
| 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ètre | Type | Remarques |
|---|---|---|
q | chaîne | Filtre en texte libre sur le nom de la source, le territoire, le pays et le type de liste. |
list_type | chaîne | Filtrer par type de liste, p. ex. SANCTION, PEP, DEBARMENT. |
page | entier | Numéro de page, à partir de 1. Valeur par défaut : 1. |
limit | entier | Lignes 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
Recherche plein texte par nom dans les fiches actives, avec filtres facultatifs. Exige au moins deux caractères dans q. Alimente la page Recherche; chaque résultat renvoie à une fiche par le point d’accès Entité.
| Paramètre | Type | Remarques |
|---|---|---|
q | chaîne | Nom à rechercher, 2 caractères minimum. Facultatif lorsqu’un filtre est défini. |
topics, include_dataset, exclude_dataset | chaîne[] | Filtres répétables, comme dans Correspondance. |
source, program, sort | chaîne | Un registre; programme exact; first_seen pour les plus récents d’abord. |
offset | entier | Décalage de fiche, à la place de page. |
type | chaîne | Filtre par type d’entité, p. ex. INDIVIDUAL, COMPANY, VESSEL, AIRCRAFT, ORGANIZATION. |
list_type | chaîne | Filtrer par type de liste, p. ex. SANCTION, PEP, DEBARMENT. |
nationality | chaîne | Filtre par code de nationalité. |
dob | chaîne | Filtre par date de naissance, YYYY, YYYY-MM ou YYYY-MM-DD. |
page | entier | Numéro de page, à partir de 1. Valeur par défaut : 1. |
limit | entier | Lignes par page, jusqu’à 50. Par défaut : 25. |
curl "https://api.crownintelligence.net/api/search?q=Jane+Example&limit=25"
import requests
r = requests.get(
"https://api.crownintelligence.net/api/search",
params={"q": "Jane Example", "limit": 25},
)
print(r.json())
const url = new URL("https://api.crownintelligence.net/api/search");
url.searchParams.set("q", "Jane Example");
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ètre | Type | Remarques |
|---|---|---|
collection | chemin | default, sanctions, peps, crime ou maritime. |
q | chaîne | Nom à 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ètre | Type | Remarques |
|---|---|---|
q | chaîne | Nom à rechercher, comme pour /api/search. |
list_type, type, nationality, source | chaîne | Filtres, combinés avec AND. |
scope | chaîne | Collection : 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ètre | Type | Remarques |
|---|---|---|
id | chemin | Identifiant 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. |
nested | booléen | false renvoie uniquement la fiche ou l’entité fusionnée. |
format | chaîne | ftm : la fiche sous forme d’entité FollowTheMoney, comme dans entities.ftm.json; avec nested=true, comme dans targets.nested.json. |
entity_id | chaîne | Forme 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ètre | Type | Remarques |
|---|---|---|
name | chaîne | Nom 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ètre | Type | Remarques |
|---|---|---|
| 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ètre | Type | Remarques |
|---|---|---|
collection | chemin | default, sanctions, peps, crime ou maritime. |
queries | JSON | Chaî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éponse | objet | Pour 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ètre | Type | Remarques |
|---|---|---|
q | chaîne | Filtre en texte libre sur le nom du programme ou le nom de la liste source. |
page | entier | Numéro de page, à partir de 1. Valeur par défaut : 1. |
limit | entier | Lignes 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ètre | Type | Remarques |
|---|---|---|
type | chaîne | L’une des valeurs suivantes : SANCTION, PEP, DEBARMENT. Obligatoire. |
scope | chaîne | Restriction 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ètre | Type | Remarques |
|---|---|---|
source | chaîne | Nom exact du registre, tel qu’il apparaît dans la ligne de sa page Sources. Obligatoire. |
format | chaîne | csv 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.
| Fichier | Contenu |
|---|---|
index.json | Index de construction : version, chiffres et chaque fichier avec sa somme de contrôle |
targets.simple.csv | Une ligne par fiche, tableau à plat |
targets.nested.json | Chaque fiche avec les détails des sanctions imbriqués, une par ligne |
entities.ftm.json | Entités FollowTheMoney, une par ligne |
senzing.json | Fiches Senzing, une par ligne |
statements.csv | Une ligne par valeur de propriété |
names.txt | Chaque nom et alias distinct |
delta.json | Opé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));