L'API Kortlex donne accès au contenu de Kortlex depuis vos propres outils : un script, un tableau de bord interne, un outil de registre ou de gestion des fournisseurs. Elle est en lecture seule : on y cherche et on y lit, on n'y modifie rien.
- la recherche dans les actualités ;
- les fiches d'actualité ;
- le texte des articles du RGPD annoté, avec leurs explications et considérants ;
- vos recherches sauvegardées sur les actualités et leurs résultats ;
- l'annuaire des tiers : fournisseurs, produits, sous-traitants ultérieurs et changements détectés.
Une description machine (OpenAPI 3) est publiée à l'adresse
https://app.kortlex.com/api/v1/openapi.json, sans
authentification : la plupart des outils (Postman, Insomnia, générateurs de clients)
l'importent directement.
Obtenir une clé
Les clés se créent dans l'onglet
Clés API de la page
Intégrations, avec le bouton « Nouvelle clé API ». Donnez-lui un nom qui dit
où elle sert (« Script de reporting », « Outil de registre »). La clé, de la forme
kx_live_…, s'affiche une seule fois, dans un bandeau muni d'un
bouton « Copier » : Kortlex n'en garde qu'une empreinte et ne peut plus vous
la montrer. Si vous la perdez, créez-en une autre.
Le tableau des clés affiche, pour chacune :
- son nom et le début de la clé (
kx_live_ab12cd34…), pour la reconnaître sans la révéler ; - son statut : Active ou Révoquée ;
- la date du dernier appel - pratique pour repérer une clé qui ne sert plus ;
- sa date de création et deux actions :
| Icône | Bouton | Ce qu'il fait |
|---|---|---|
| Révoquer | Coupe la clé immédiatement, après confirmation. Elle reste dans le tableau, marquée Révoquée, pour garder la trace de son existence. Une révocation est définitive : pour rétablir l'accès, créez une nouvelle clé. | |
| Supprimer | Retire définitivement la clé du tableau, après confirmation. Une clé encore active cesse aussitôt de fonctionner. |
Si une clé a pu fuiter (publiée dans un dépôt, envoyée par e-mail), révoquez-la tout de suite et créez-en une autre.
Authentification
Chaque appel porte la clé dans l'en-tête Authorization, précédée de
Bearer. L'adresse de base est https://app.kortlex.com/api/v1.
curl -H "Authorization: Bearer kx_live_…" \
"https://app.kortlex.com/api/v1/third-parties?q=workday"
La clé est un secret serveur : gardez-la dans une variable d'environnement ou un coffre de secrets, jamais dans le code d'une page web, d'une application mobile ou d'un dépôt. L'API ne répond pas aux appels d'un navigateur depuis un autre site (pas de CORS) et n'accepte aucun cookie de session : seule la clé compte.
À chaque appel, Kortlex revérifie que le compte qui a créé la clé est
toujours abonné : si l'abonnement prend fin, la clé répond 402 jusqu'à sa
reprise, sans qu'il faille la recréer.
Conventions
- Toutes les routes sont en
GET; tout autre verbe répond405. - Les réponses sont en JSON. Le résultat est toujours dans
data; les listes paginées ajoutentpage. - Les dates sont au format ISO 8601 (
2026-10-14ou2026-10-14T09:30:00Z). - Un champ sans valeur vaut
null; une liste vide vaut[]. - Les champs qui finissent par
_htmlcontiennent du HTML déjà assaini par Kortlex, prêt à afficher. - Chaque élément porte une
urlvers sa page dans Kortlex. lang(frpar défaut, ouen) choisit la langue du contenu quand elle existe - voir Langue de l'interface et du contenu.pageva de 1 à 20, avec 30 résultats par page.- Un paramètre inconnu est ignoré ; un paramètre répété ou mal formé répond
400.
Erreurs
Une erreur a toujours la même forme, sans détail technique :
{ "error": { "code": "invalid_request", "message": "q must be 2 to 80 characters" } }
| Statut | code | Cas |
|---|---|---|
| 400 | invalid_request | Paramètre absent, mal formé ou hors bornes. |
| 401 | unauthorized | Clé absente, mal formée, inconnue, révoquée ou supprimée. |
| 402 | subscription_required | Le compte propriétaire de la clé n'est plus abonné. |
| 403 | api_access_disabled | L'accès à l'API n'est pas ouvert pour le compte propriétaire de la clé. |
| 403 | forbidden | La clé n'a pas le droit d'appeler cette route. |
| 404 | not_found | Élément ou route inconnus. |
| 405 | method_not_allowed | Verbe autre que GET. |
| 429 | rate_limited | Trop d'appels (voir ci-dessous). |
| 500 | server_error | Erreur de notre côté ; réessayez plus tard. |
Limites d'usage
- 300 appels par tranche de 5 minutes et 10 000 par jour, par clé ;
- 600 appels par tranche de 15 minutes depuis une même adresse IP, toutes clés confondues.
Au-delà, l'API répond 429. Les en-têtes RateLimit-Remaining et
RateLimit-Reset indiquent ce qu'il reste et quand le compteur repart : attendez
ce délai avant de réessayer, et gardez en cache ce qui change peu (fiches, articles du RGPD).
Les réponses portent Cache-Control: no-store : c'est à votre outil de décider ce
qu'il conserve.
Les routes
Annuaire des tiers
GET /third-parties - chercher un tiers
Cherche dans les noms des tiers, de leurs marques, de leurs produits et de leurs personnes morales ; chaque tiers trouvé est renvoyé avec le nom de ses produits et de ses personnes morales. Renvoie 10 tiers au plus, ceux dont le nom commence par la recherche en premier. Pensée pour l'autocomplétion : il n'y a pas de pagination ni de liste complète.
| Paramètre | Obligatoire | Description |
|---|---|---|
q | oui | 2 à 80 caractères : lettres, chiffres, espaces et . , & ' + -. |
GET /api/v1/third-parties?q=workday
{ "data": [
{ "slug": "workday", "name": "Workday", "country_code": "US",
"products": ["Workday HCM", "Workday Financial Management"],
"legal_entities": ["Workday, Inc.", "Workday Limited"] }
] }
GET /third-parties/:slug - fiche d'un tiers
Le tiers, ses produits (avec le rôle qu'il y tient) et ses
sous-traitants ultérieurs actuels, tels que déclarés dans ses documents.
roles prend les valeurs controller, joint_controller,
processor et recipient. product indique le produit du
tiers concerné par le sous-traitant. dpas liste les accords de sous-traitance publiés
par le tiers, un par scope (produit couvert, null pour tous) ;
legal_entities ses personnes morales, avec leur pays de constitution s'il est connu.
GET /api/v1/third-parties/workday
{ "data": {
"slug": "workday", "name": "Workday", "country_code": "US",
"description": "Applications cloud de finance et de RH.",
"roles": ["processor"],
"kortlex_url": "https://app.kortlex.com/third-parties/workday",
"services": [ { "name": "Workday HCM", "roles": ["processor"] } ],
"subprocessors": [
{ "name": "Amazon Web Services", "country_code": "US", "service": "Hébergement",
"product": "Workday HCM", "purpose": "Infrastructure" }
],
"dpas": [
{ "title": "Data Processing Exhibit", "scope": null, "url": "https://www.workday.com/…/dpa.pdf" }
],
"legal_entities": [ { "name": "Workday, Inc.", "country_code": "US" } ]
} }
GET /third-parties/changes - changements récents
Les changements publiés (politique de confidentialité, DPA, liste de sous-traitants…) d'une
liste de tiers depuis une date. Le détail de chaque changement se lit sur Kortlex, via
kortlex_url.
| Paramètre | Obligatoire | Description |
|---|---|---|
slugs | oui | Jusqu'à 50 slugs séparés par des virgules. |
since | oui | Date AAAA-MM-JJ, au plus 90 jours en arrière. |
GET /api/v1/third-parties/changes?slugs=workday,salesforce&since=2026-09-01
{ "data": [
{ "slug": "workday", "detected_at": "2026-10-02T07:12:00Z", "severity": "major",
"summary": "Ajout d'un sous-traitant ultérieur aux États-Unis",
"kortlex_url": "https://app.kortlex.com/third-parties/workday" }
] }
Contenu juridique
GET /search - rechercher
| Paramètre | Obligatoire | Description |
|---|---|---|
q | oui | Texte recherché, 200 caractères au plus. |
collection | non | actu (actualités), seule valeur acceptée ; peut être omis. |
filter_by | non | Filtres, au format décrit ci-dessous. |
lang, page | non | Voir Conventions. |
filter_by enchaîne des conditions champ:valeur séparées par
&& ; champ:=valeur exige une égalité exacte et une valeur
qui contient des espaces s'écrit entre accents graves (autorite:=`CNIL`). Champs
acceptés : autorite, pays, region,
annee, date, norme, post_type,
type_de_document, apports_themes, apports_secteurs,
apports_references, donnees, acteurs,
personnes, amendes, pert_score
(>=0, >=25, >=55 ou >=75).
Tout autre champ ou toute autre syntaxe répond 400.
GET /api/v1/search?q=transfert&filter_by=autorite:=`CNIL`
{ "data": [
{ "type": "news", "title": "…", "date": "2026-10-02", "authority": "CNIL",
"summary": "…", "url": "https://app.kortlex.com/news/…" }
], "page": 1 }
GET /rgpd/:number - article du RGPD annoté
number va de 1 à 99. Renvoie le titre, le texte de l'article
(content_html), les explications et les considérants. Accepte lang.
GET /api/v1/rgpd/28?lang=fr
{ "data": {
"number": 28, "title": "Sous-traitant",
"content_html": "<p>…</p>", "explanations_html": "…", "recitals_html": "…",
"url": "https://app.kortlex.com/rgpd/article-28"
} }
GET /news/:slug - fiche d'actualité
Titre, date, autorité, pays, région, langue, résumé (summary_html) et lien vers
la source. Le slug figure dans l'url d'un résultat de recherche.
Recherches sauvegardées
GET /saved-searches - vos recherches
Les recherches sauvegardées sur les actualités du compte propriétaire de la clé :
id, label, collection et date de création.
GET /saved-searches/:id/results - leurs résultats
Exécute la recherche avec ses filtres enregistrés et renvoie les résultats les plus récents,
au même format que /search. Accepte lang et page. Une
recherche qui n'est pas la vôtre, ou qui ne porte pas sur les actualités, répond 404.
Qui peut utiliser l'API
L'accès à l'API est ouvert sur demande, après validation par l'équipe Kortlex : écrivez-nous pour en faire la demande. Il suppose un abonnement payant ; l'API n'est pas incluse dans l'essai de 14 jours - voir Essai, offre gratuite et abonnement. Dans une organisation, seul le propriétaire du compte crée et gère les clés ; elles sont rattachées au compte, pas à la personne qui les a créées.
Un service partenaire qui intègre l'annuaire des tiers dans son propre produit peut obtenir une clé dédiée, limitée à l'annuaire, en nous écrivant via la page de contact.