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 :
| Webhooks | Flux d’événements | |
|---|---|---|
| Fonctionnement | Sursa envoie chaque événement à votre adresse HTTPS au moment où il se produit. | Vous lisez GET /v1/webhook-events quand vous le souhaitez. |
| Délai | Quelques secondes. | Selon la fréquence de vos interrogations. |
| Prérequis | Un récepteur HTTPS public. | Seulement une clé API dotée du rôle admin et de la portée webhooks:manage. |
| Idéal pour | Ré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
}
| Champ | Signification |
|---|---|
id | L’identifiant de l’événement : evt_ suivi de 32 caractères hexadécimaux. Identique à chaque tentative de livraison et dans le flux. |
type | Ce qui s’est passé, sous la forme <object>.<past-tense verb> : card.updated, access_request.resolved. |
created_at | Le moment de la modification, en UTC. |
api_version | La version de l’API dont data suit le schéma. |
object | Le type et l’identifiant de l’objet concerné par l’événement. |
data | Les détails. Leur forme dépend du type et est décrite dans le catalogue des événements. |
data.previous_attributes | Dans les événements *.updated : les anciennes valeurs des champs qui ont changé. |
sequence, payload, test | Uniquement 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 :
| Domaine | Exemples |
|---|---|
| Fiches | card.created, card.updated, card.published, card.archived, card.deleted, card.indexed, card.index_failed |
| Validation | card.verified, card.unverified, verification.expired, verification.requested |
| Structure | collection.created, folder.updated |
| Collaboration | comment.created, draft.publish_requested, announcement.sent, announcement.read |
| Réponses | question.unanswered, question.feedback_created, access_request.created |
| Personnes et accès | user.created, user.deactivated, group.member_added, api_key.expiring |
| Sources et import | source.sync_completed, import.sync_completed, import.document_failed |
| Jobs | job.completed, job.failed, export.ready |
| Webhooks | webhook.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
POSTHTTPS contenant l’événement en JSON, signé avec le secret du webhook dans deux formats : Standard Webhooks (webhook-signature) et l’ancienX-KB-Signature. - Toute réponse
2xxen 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-Afterd’une réponse429ou503est respecté ;410dé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âche | Point de terminaison |
|---|---|
| Créer un webhook et obtenir son secret | POST /v1/webhooks |
| Modifier l’adresse, les événements ou l’état | PATCH /v1/webhooks/{webhook_id} |
| Envoyer un événement de test | POST /v1/webhooks/{webhook_id}/test |
| Renouveler le secret | POST /v1/webhooks/{webhook_id}/rotate-secret |
| Reprendre un webhook en pause | POST /v1/webhooks/{webhook_id}/resume |
| Consulter les livraisons et les réponses | GET /v1/webhooks/{webhook_id}/deliveries |
| Renvoyer une livraison | POST /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.