L'API Kortlex

Interroger Kortlex depuis vos outils, en lecture seule : authentification par clé, conventions, erreurs, limites et le détail de chaque route.

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ôneBoutonCe 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épond 405.
  • Les réponses sont en JSON. Le résultat est toujours dans data ; les listes paginées ajoutent page.
  • Les dates sont au format ISO 8601 (2026-10-14 ou 2026-10-14T09:30:00Z).
  • Un champ sans valeur vaut null ; une liste vide vaut [].
  • Les champs qui finissent par _html contiennent du HTML déjà assaini par Kortlex, prêt à afficher.
  • Chaque élément porte une url vers sa page dans Kortlex.
  • lang (fr par défaut, ou en) choisit la langue du contenu quand elle existe - voir Langue de l'interface et du contenu.
  • page va 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" } }
StatutcodeCas
400invalid_requestParamètre absent, mal formé ou hors bornes.
401unauthorizedClé absente, mal formée, inconnue, révoquée ou supprimée.
402subscription_requiredLe compte propriétaire de la clé n'est plus abonné.
403api_access_disabledL'accès à l'API n'est pas ouvert pour le compte propriétaire de la clé.
403forbiddenLa clé n'a pas le droit d'appeler cette route.
404not_foundÉlément ou route inconnus.
405method_not_allowedVerbe autre que GET.
429rate_limitedTrop d'appels (voir ci-dessous).
500server_errorErreur 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ètreObligatoireDescription
qoui2 à 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ètreObligatoireDescription
slugsouiJusqu'à 50 slugs séparés par des virgules.
sinceouiDate 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

ParamètreObligatoireDescription
qouiTexte recherché, 200 caractères au plus.
collectionnonactu (actualités), seule valeur acceptée ; peut être omis.
filter_bynonFiltres, au format décrit ci-dessous.
lang, pagenonVoir 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.

Centre d'aide