Les webhooks

Prévenir Slack, Teams, Zapier, Make, n8n ou vos propres outils à chaque nouvelle correspondance de veille : création, signature, actions et tutoriels.

Un webhook fait sortir votre veille de Kortlex : au lieu d'ouvrir l'application, vous recevez chaque nouveauté là où votre équipe travaille déjà - un canal Slack, un tableau Teams, un scénario d'automatisation. Dès qu'une de vos recherches sauvegardées a une nouvelle correspondance, Kortlex envoie une requête HTTP (un petit message JSON) à l'URL de votre choix.

Les webhooks se gèrent dans l'onglet Webhooks de la page Intégrations. Les autres intégrations ont leur page : Les flux RSS et L'API Kortlex.

Les webhooks sortants

Créer un webhook

Le bouton « Nouveau webhook », en haut à droite de la page, déplie un formulaire qui demande :

  • une URL de destination en HTTPS (le HTTP simple est refusé, de même que les adresses internes ou privées) ;
  • les recherches concernées : soit toutes vos recherches (présentes et futures), soit une sélection que vous cochez. Seules vos propres recherches sont proposées - la recherche d'un membre de l'organisation ne déclenche jamais de webhook.

Il n'y a rien à choisir côté événement : Kortlex n'en émet aujourd'hui qu'un seul, « nouvelle correspondance de veille » (veille.match), et tout webhook le reçoit.

À la création, Kortlex affiche une seule fois un secret de signature, dans un bandeau orange muni d'un bouton « Copier » - servez-vous-en tout de suite : le secret n'est jamais réaffiché, et le seul recours est de le régénérer. Chaque envoi porte un en-tête Kortlex-Signature (un HMAC SHA-256 calculé avec ce secret) : votre outil peut ainsi vérifier que la requête vient bien de Kortlex et non d'un tiers.

Le corps de chaque envoi est un objet JSON de cette forme :

{
  "type": "veille.match",
  "created_at": "2026-01-15T09:30:00Z",
  "saved_search": { "id": "…", "label": "Sanctions CNIL - santé" },
  "matches": [
    { "collection": "jurisprudence", "id": "…", "title": "…",
      "url": "https://app.kortlex.com/…", "date": "2026-01-14", "autorite": "CNIL" }
  ]
}

Le tableau

Les webhooks existants occupent un tableau, une ligne chacun :

  • URL - l'adresse appelée, tronquée si elle est longue ; survolez-la pour la lire en entier. La description facultative s'affiche en dessous.
  • Recherches - Toutes (présentes et futures) ou le nom des recherches sélectionnées.
  • Statut - Actif ou Désactivé. Un webhook désactivé est conservé, avec son secret et sa sélection, mais ne reçoit plus rien.
  • Dernier envoi - la date de la dernière livraison tentée, ou un tiret tant qu'il n'y en a pas eu.
  • Actions - les cinq boutons ci-dessous.

Les actions

La bascule, la modification des recherches et l'envoi de test s'appliquent sans recharger la page : un « ✓ Enregistré » passager s'affiche sous le tableau, comme sur Recherches sauvegardées. La régénération du secret et la suppression, elles, rechargent - l'une doit vous montrer le nouveau secret, l'autre retire la ligne.

IcôneBoutonCe qu'il fait
Activer / Désactiver Bascule le webhook d'un état à l'autre, sans confirmation et sans rien perdre : l'URL, le secret et la sélection de recherches sont conservés. C'est la manière propre de suspendre les envois le temps d'une maintenance de votre côté, plutôt que de supprimer puis recréer.
Modifier les recherches Ouvre une fenêtre où l'on rebascule entre toutes mes recherches et une sélection, avec un champ pour filtrer la liste et des raccourcis « Tout » / « Aucun ». Enregistrer valide, Annuler ferme sans rien changer.
Régénérer le secret Remplace le secret de signature. L'ancien cesse immédiatement de signer les livraisons : votre outil les rejettera tant que vous n'aurez pas reporté le nouveau secret. Demande confirmation, puis affiche le nouveau secret une seule fois.
Tester Envoie un message d'exemple à l'URL, sans attendre qu'une vraie correspondance survienne. C'est ce qu'il faut déclencher pour qu'un outil comme Zapier ou Make « découvre » la structure des champs. Le résultat apparaît dans les Envois récents au passage suivant.
Supprimer Supprime définitivement le webhook et son secret, après confirmation. Pour une interruption temporaire, préférez le bouton d'activation.

Sous le tableau, « Envois récents » tient le journal des livraisons - statut (réussie, échouée, en attente, abandonnée), type d'événement, date et code HTTP de réponse. C'est là qu'on vérifie un câblage et qu'on diagnostique une panne. Un envoi qui échoue est réessayé plusieurs fois avec des délais croissants ; après une longue série d'échecs, le webhook est désactivé automatiquement et le propriétaire du compte est prévenu par e-mail.

Les webhooks sont indépendants des alertes e-mail : ils partent même si les notifications de la recherche ou du compte sont coupées. C'est une infrastructure que l'organisation branche volontairement, pas un canal de notification personnel.

Brancher un outil

Le message envoyé par un webhook est du JSON brut. Certains outils l'acceptent tel quel ; d'autres (Slack, Discord, Teams) attendent un format de message précis et ont besoin d'un intermédiaire (Zapier, Make, n8n, ou un petit script) pour le reformater. Les tutoriels ci-dessous partent du plus direct au plus souple.

Zapier
  1. Créez un Zap avec le déclencheur « Webhooks by Zapier » → « Catch Hook ».
  2. Copiez l'URL personnalisée fournie par Zapier dans le champ URL du webhook Kortlex.
  3. Dans Kortlex, cliquez sur le bouton Tester de la ligne : Zapier reçoit un exemple de message et découvre la structure des champs (saved_search.label, matches[]…).
  4. Ajoutez l'action de votre choix - « Send Channel Message » vers Slack, une ligne de Google Sheets, une carte Teams… - en glissant les champs du message.
  5. Facultatif : une étape « Code » qui recalcule le HMAC SHA-256 de l'en-tête Kortlex-Signature pour rejeter les requêtes non signées.
Make (ex-Integromat)
  1. Créez un scénario, module de départ « Webhooks » → « Custom webhook », puis « Add ».
  2. Copiez l'adresse générée dans le champ URL du webhook Kortlex.
  3. Laissez Make « en écoute » et cliquez sur Tester dans Kortlex : Make enregistre la structure du message.
  4. Enchaînez les modules voulus - Slack, Microsoft Teams, HTTP, Data store - en mappant saved_search.label et la liste matches (module « Iterator » pour parcourir les correspondances une à une).
n8n
  1. Ajoutez un nœud « Webhook », méthode POST, et copiez son URL de production dans Kortlex.
  2. Facultatif mais recommandé : un nœud « Crypto » (HMAC, SHA-256, la valeur du secret Kortlex) suivi d'un « IF » pour comparer au v1= de l'en-tête Kortlex-Signature et arrêter le flux si ça ne correspond pas.
  3. Un nœud « Item Lists » / « Split Out » sur matches pour traiter chaque correspondance, puis le nœud de sortie (Slack, Discord, e-mail, base de données…).
  4. Activez le workflow, puis cliquez sur Tester dans Kortlex.
Slack

Deux voies. La plus simple passe par un intermédiaire (Zapier / Make / n8n ci-dessus) qui reçoit le JSON de Kortlex et poste un message formaté dans le canal.

Sans intermédiaire, utilisez le Générateur de workflows Slack : créez un workflow démarré par « Webhook », définissez les variables attendues (par ex. label et title), collez l'URL du workflow dans Kortlex, puis ajoutez une étape « Envoyer un message » qui compose le texte à partir de ces variables. Les Incoming Webhooks Slack classiques, eux, n'acceptent que leur propre format {"text": "…"} et ne conviennent pas directement.

Discord

Un webhook Discord attend un corps {"content": "…"} (ou des embeds) : il ne peut pas recevoir le JSON de Kortlex tel quel. Passez par un intermédiaire - n8n ou Make conviennent bien - qui reçoit le message Kortlex, met en forme un texte lisible (titre, autorité, lien) et appelle l'URL du webhook Discord du salon.

Microsoft Teams

Comme Discord, Teams attend un format de carte précis (Adaptive Card via un connecteur ou un Workflow Power Automate). Le plus fiable est d'utiliser Power Automate avec un déclencheur « Lorsqu'une requête HTTP est reçue » : collez son URL dans Kortlex, puis ajoutez l'action « Publier une carte dans un canal » en réutilisant saved_search.label et matches. Zapier et Make proposent la même chose avec leurs modules Teams.

Votre propre outil (script, API interne)
  1. Exposez un point d'entrée HTTPS qui accepte une requête POST avec un corps JSON.
  2. Vérifiez l'en-tête Kortlex-Signature : format t=<horodatage>,v1=<hmac>, où hmac est le HMAC SHA-256 de la chaîne <t>.<corps brut> avec votre secret. Rejetez si la signature ou l'horodatage ne collent pas.
  3. Répondez rapidement un code 2xx ; tout autre code (ou un délai trop long) est considéré comme un échec et sera réessayé.
  4. Traitez le message de façon idempotente : en cas de nouvel essai, la même correspondance peut arriver deux fois (dédupliquez sur l'id de la livraison).

Qui peut gérer les webhooks

L'accès est réservé aux abonnés et à l'essai de 14 jours - voir Essai, offre gratuite et abonnement. Dans une organisation, seuls le propriétaire du compte et les gestionnaires voient la page Intégrations et peuvent créer ou modifier un webhook. Chaque webhook est rattaché à l'organisation, pas à la personne qui l'a créé : il continue de fonctionner si cette personne quitte l'équipe.

Centre d'aide