Aller au contenu
Sursa Developers

Vue d’ensemble des webhooks

Sursa enregistre un événement pour chaque modification importante : une fiche est publiée, validée ou archivée, une annonce est lue, une question reste sans réponse. Vous pouvez recevoir les événements de deux façons, et utiliser les deux ensemble :

WebhooksFlux d’événements
FonctionnementSursa envoie chaque événement à votre adresse HTTPS au moment où il se produit.Vous lisez GET /v1/webhook-events quand vous le souhaitez.
DélaiQuelques secondes.Selon la fréquence de vos interrogations.
PrérequisUn récepteur HTTPS public.Seulement une clé API dotée du rôle admin et de la portée webhooks:manage.
Idéal pourRéagir aux modifications : notifier, synchroniser, lancer un workflow.Les traitements par lots, le rattrapage après une interruption, le rapprochement.

Les deux transportent les mêmes événements, avec les mêmes identifiants. Chaque événement est conservé dans le flux pendant 30 jours, qu’un webhook y soit abonné ou non.

L’événement

{
  "id": "evt_0123456789abcdef0123456789abcdef",
  "type": "card.updated",
  "created_at": "2026-10-24T10:00:03Z",
  "org_id": 1,
  "api_version": "1.60.0",
  "sequence": 1042,
  "object": {"type": "card", "id": "3f2c9a7e-5b1d-4c8e-9f0a-1b2c3d4e5f60"},
  "payload": "full",
  "data": {
    "card": {"id": "3f2c9a7e-5b1d-4c8e-9f0a-1b2c3d4e5f60", "title": "Refund policy", "collection": "support", "version": 4},
    "actor_id": 7,
    "previous_attributes": {"title": "Refunds"}
  },
  "test": false
}
ChampSignification
idL’identifiant de l’événement : evt_ suivi de 32 caractères hexadécimaux. Identique à chaque tentative de livraison et dans le flux.
typeCe qui s’est passé, sous la forme <object>.<past-tense verb> : card.updated, access_request.resolved.
created_atLe moment de la modification, en UTC.
api_versionLa version de l’API dont data suit le schéma.
objectLe type et l’identifiant de l’objet concerné par l’événement.
dataLes détails. Leur forme dépend du type et est décrite dans le catalogue des événements.
data.previous_attributesDans les événements *.updated : les anciennes valeurs des champs qui ont changé.
sequence, payload, testUniquement dans les livraisons de webhooks : la position dans l’ordre du webhook, le mode de charge utile et l’indication qu’il s’agit ou non d’un événement de test.

data ne contient que ce que tout lecteur de l’objet pourrait voir par l’API. Il ne contient jamais de listes d’accès, de permissions d’autres personnes ni de champs masqués. Les motifs indiqués dans les événements sont de courts codes neutres comme no_hits, restricted ou index_failed.

Types d’événements

Les événements couvrent les domaines suivants :

DomaineExemples
Fichescard.created, card.updated, card.published, card.archived, card.deleted, card.indexed, card.index_failed
Validationcard.verified, card.unverified, verification.expired, verification.requested
Structurecollection.created, folder.updated
Collaborationcomment.created, draft.publish_requested, announcement.sent, announcement.read
Réponsesquestion.unanswered, question.feedback_created, access_request.created
Personnes et accèsuser.created, user.deactivated, group.member_added, api_key.expiring
Sources et importsource.sync_completed, import.sync_completed, import.document_failed
Jobsjob.completed, job.failed, export.ready
Webhookswebhook.endpoint_disabled, webhook.ping

La liste complète, avec le schéma et un exemple de chaque événement, figure dans le catalogue des événements de la référence de l’API. GET /v1/webhooks/catalog renvoie les types disponibles sur votre installation.

De nouveaux types d’événements s’ajoutent au fil du temps, et les événements existants gagnent des champs. Les types d’événements ne sont jamais renommés ni supprimés. Votre récepteur doit ignorer les types et les champs qu’il ne connaît pas.

Qui reçoit quoi

Un webhook ne reçoit un événement que si l’objet de l’événement lui est visible, de la même façon que pour une clé API : selon son rôle, son profil de données et ses collections. Un webhook limité à la collection support ne reçoit jamais d’événements sur les fiches de finance. Les événements qui concernent les personnes, les clés, les sources, les imports, les jobs, les exports, la facturation, les applications et les webhooks eux-mêmes ne vont qu’aux webhooks dotés du rôle admin.

Dans ce cadre, chaque webhook choisit ses événements :

  • par type, avec des masques : card.* pour tous les événements des fiches, * pour tous les événements ;
  • par collection et par étiquette, pour les événements des fiches.

Le mode de charge utile d’un webhook est full (l’événement avec data, par défaut) ou thin (l’événement sans data : votre récepteur lit l’objet par l’API avec sa propre clé et voit toujours son état actuel).

La livraison en bref

  • Un POST HTTPS contenant l’événement en JSON, signé avec le secret du webhook dans deux formats : Standard Webhooks (webhook-signature) et l’ancien X-KB-Signature.
  • Toute réponse 2xx en moins de 10 secondes est un succès.
  • Un échec est relancé pendant près de trois jours, avec des pauses de plus en plus longues. Retry-After d’une réponse 429 ou 503 est respecté ; 410 désactive le webhook ; 10 échecs d’affilée le mettent en pause jusqu’à sa reprise.
  • Les livraisons vers un même webhook sont envoyées strictement dans l’ordre. Un webhook lent ne retarde pas les autres webhooks.
  • Le même événement peut arriver plusieurs fois : écartez les doublons grâce à webhook-id.

Recevoir des webhooks décrit pas à pas un récepteur complet, avec la vérification des signatures en Node.js, Python et Go.

Gérer les webhooks

TâchePoint de terminaison
Créer un webhook et obtenir son secretPOST /v1/webhooks
Modifier l’adresse, les événements ou l’étatPATCH /v1/webhooks/{webhook_id}
Envoyer un événement de testPOST /v1/webhooks/{webhook_id}/test
Renouveler le secretPOST /v1/webhooks/{webhook_id}/rotate-secret
Reprendre un webhook en pausePOST /v1/webhooks/{webhook_id}/resume
Consulter les livraisons et les réponsesGET /v1/webhooks/{webhook_id}/deliveries
Renvoyer une livraisonPOST /v1/webhooks/{webhook_id}/deliveries/{delivery_id}/redeliver

La gestion des webhooks nécessite une clé dotée du rôle admin et de la portée webhooks:manage, ou un administrateur dans l’interface d’administration. Une organisation peut avoir jusqu’à 20 webhooks. Les webhooks font partie de l’offre de l’organisation ; sans eux, ces points de terminaison répondent 403 avec le code webhooks.feature_disabled.