Aller au contenu

Aperçu des webhooks

Les webhooks envoient des événements vers votre serveur en temps réel, ce qui vous évite de sonder l’API. Lorsqu’un événement se produit dans un restaurant — une réservation est créée, un client est mis à jour, un avis arrive — nous envoyons une requête HTTP POST à une URL que vous contrôlez, accompagnée d’un événement JSON décrivant ce qui s’est passé.

Les points de terminaison de webhook sont en libre-service depuis le back-office. Un propriétaire ou copropriétaire peut les gérer dans Paramètres → Développeurs :

  1. Ajoutez un point de terminaison avec son URL — une adresse HTTPS, accessible publiquement (les hôtes internes ou privés sont rejetés).
  2. Choisissez les événements qu’il doit recevoir — des types d’événements individuels ou tous les événements.
  3. Révélez son secret de signature (whsec_…) et stockez-le ; il sert à vérifier les signatures. Vous pouvez le faire tourner par la suite s’il est un jour exposé.

Depuis le même écran, vous pouvez activer, désactiver ou supprimer un point de terminaison, consulter un journal de livraison indiquant le statut et la réponse de chaque tentative, renvoyer une livraison passée et envoyer un événement de test. Un restaurant peut enregistrer jusqu’à 5 points de terminaison.

Chaque point de terminaison est épinglé à une version de l’API à sa création, afin que la forme de la charge utile que vous recevez reste stable.

Chaque livraison est un objet JSON avec cette enveloppe :

{
"id": "evt_1K8xQ2m4Vd0pErJ7sN1aZ9bQ",
"object": "event",
"type": "reservation.updated",
"created": "2026-06-27T17:30:00Z",
"livemode": true,
"api_version": "2026-06-27",
"data": {
"object": { "object": "reservation", "id": "resv_…" },
"previous_attributes": { "party_size": 2 }
}
}
ChampDescription
idIdentifiant d’événement unique (evt_…). Utilisez-le pour dédupliquer (voir ci-dessous).
objectToujours "event".
typeLe type d’événement, par ex. reservation.updated. Voir le catalogue des événements.
createdLe moment où l’événement a été émis — ISO-8601 en UTC (un suffixe Z). Voir la note sur les fuseaux horaires ci-dessous.
livemodeToujours true pour les événements réels.
api_versionLa version dans laquelle la charge utile est rendue (la version épinglée du point de terminaison).
data.objectUn instantané complet de la ressource concernée, dans la même forme que l’API.
data.previous_attributesUniquement sur reservation.updated — une table des champs modifiés vers leurs valeurs précédentes. Omis sur tout autre type d’événement.

Renvoyez rapidement un code de statut 2xx (idéalement en quelques secondes) pour accuser réception. Effectuez le vrai travail de manière asynchrone. Toute réponse non 2xx, un délai d’expiration ou une erreur de connexion est traité comme une livraison échouée et fera l’objet d’une nouvelle tentative.

La livraison est au moins une fois. Le même événement peut être livré plus d’une fois (par exemple, si votre serveur est lent à accuser réception et que nous réessayons, ou après une erreur réseau transitoire). Dédupliquez sur l’id de l’événement (evt_…) : enregistrez les identifiants que vous avez traités et ignorez les répétitions. Rendez votre gestionnaire idempotent.

Les événements ne sont pas garantis d’arriver dans l’ordre où ils se sont produits. Par exemple, vous pourriez recevoir reservation.seated avant reservation.confirmed. Ne présumez pas de l’ordre. Lorsqu’une décision dépend de l’état actuel, traitez l’événement comme un indice et récupérez la dernière version de la ressource depuis l’API, ou réconciliez à l’aide du updated_at de chaque ressource.

Nouvelles tentatives et désactivation automatique

Section intitulée « Nouvelles tentatives et désactivation automatique »

Si une livraison échoue, nous réessayons avec un délai exponentiel sur environ 3 jours. Si toutes les tentatives échouent pendant toute cette fenêtre (le point de terminaison reste injoignable ou continue de renvoyer des erreurs), le point de terminaison est automatiquement désactivé et une alerte est levée. Vous devrez corriger le point de terminaison et le faire réactiver. Pour récupérer les événements manqués pendant qu’un point de terminaison était hors service, relisez les données avec updated_since.

Les réservations importées n’émettent pas de webhooks

Section intitulée « Les réservations importées n’émettent pas de webhooks »