Catalogue des événements
Voici les types d’événements auxquels vous pouvez vous abonner. Chaque événement
utilise l’enveloppe standard ;
les exemples ci-dessous montrent l’enveloppe complète avec un data.object
représentatif.
Gérez les types d’événements inconnus avec souplesse — de nouveaux types peuvent être ajoutés au fil du temps.
| Événement | Quand il se déclenche |
|---|---|
reservation.created | Une réservation est créée — son status est confirmed (auto-confirmée) ou pending (en attente d’approbation). |
reservation.confirmed | Une réservation en attente est approuvée par la suite. Les réservations auto-confirmées ne déclenchent pas cet événement. |
reservation.declined | Une réservation en attente est refusée. |
reservation.updated | Les détails d’une réservation changent (taille du groupe, date, notes, …). |
reservation.partially_seated | Une partie du groupe, mais pas la totalité, a été installée. |
reservation.seated | Le groupe a été installé. |
reservation.completed | La réservation est terminée (le groupe est parti). |
reservation.cancelled | La réservation est annulée. |
reservation.no_show | Le groupe ne s’est pas présenté. |
guest.created | Une fiche client est créée. |
guest.updated | Les détails d’un client changent. |
guest.deleted | Un client est supprimé (par ex. effacement pour protection des données). |
feedback.received | Un client soumet un avis après une visite. |
Événements de réservation
Section intitulée « Événements de réservation »Le data.object de chaque événement de réservation est une réservation
complète, dans la même forme que celle renvoyée par la
référence de l’API (en anglais) — l’instantané complet de la
ressource, pas un diff.
Seul reservation.updated porte
data.previous_attributes ; les autres événements de réservation l’omettent.
Lorsqu’il est présent, previous_attributes ne contient que les champs modifiés
parmi party_size, service_date, guest_notes, internal_notes et guest
(le client précédent sous forme de simple identifiant gst_). Les changements
d’horaire sont reflétés dans les starts_at / ends_at de l’instantané, pas
dans previous_attributes.
reservation.created
Section intitulée « reservation.created »Une réservation est créée (via le widget, le back-office, une intégration, etc.).
Cet événement se déclenche pour chaque nouvelle réservation — vérifiez
data.object.status pour les distinguer : confirmed signifie qu’elle a été
auto-confirmée à la création (sans étape d’approbation ; cas typique du
back-office et des réservations par défaut), tandis que pending signifie qu’elle
nécessite une approbation et émettra ensuite
reservation.confirmed ou
reservation.declined.
{ "id": "evt_1K8xQ2m4Vd0pErJ7sN1aZ9bQ", "object": "event", "type": "reservation.created", "created": "2026-06-20T09:04:18Z", "livemode": true, "api_version": "2026-06-27", "data": { "object": { "object": "reservation", "id": "resv_8xKQ2m4Vd0pErJ7sN1aZ9bQ", "status": "pending", "source": "widget", "booking_channel": "website_widget", "party_size": 4, "actual_party_size": null, "service_date": "2026-06-27", "starts_at": "2026-06-27T20:00:00+02:00", "ends_at": "2026-06-27T22:00:00+02:00", "guest_notes": "Window table if possible", "internal_notes": null, "guest": "gst_3Td9Lp0WqZ", "tables": [], "created_at": "2026-06-20T11:04:18+02:00", "updated_at": "2026-06-20T11:04:18+02:00" } }}reservation.confirmed
Section intitulée « reservation.confirmed »Une réservation en attente est approuvée — le flux d’approbation manuelle. Cet
événement se déclenche uniquement pour les réservations créées en pending ;
une réservation auto-confirmée n’émet jamais reservation.confirmed — elle
arrive une seule fois, en tant que reservation.created
avec status: "confirmed".
{ "id": "evt_2M9yR3n5We1qFsK8tO2bA0cR", "object": "event", "type": "reservation.confirmed", "created": "2026-06-20T09:30:00Z", "livemode": true, "api_version": "2026-06-27", "data": { "object": { "object": "reservation", "id": "resv_8xKQ2m4Vd0pErJ7sN1aZ9bQ", "status": "confirmed", "source": "widget", "booking_channel": "website_widget", "party_size": 4, "actual_party_size": null, "service_date": "2026-06-27", "starts_at": "2026-06-27T20:00:00+02:00", "ends_at": "2026-06-27T22:00:00+02:00", "guest_notes": "Window table if possible", "internal_notes": null, "guest": "gst_3Td9Lp0WqZ", "tables": [], "created_at": "2026-06-20T11:04:18+02:00", "updated_at": "2026-06-20T11:30:00+02:00" } }}reservation.declined
Section intitulée « reservation.declined »Une réservation en attente est refusée.
{ "id": "evt_3N0zS4o6Xf2rGtL9uP3cB1dS", "object": "event", "type": "reservation.declined", "created": "2026-06-20T09:31:00Z", "livemode": true, "api_version": "2026-06-27", "data": { "object": { "object": "reservation", "id": "resv_8xKQ2m4Vd0pErJ7sN1aZ9bQ", "status": "cancelled", "source": "widget", "booking_channel": "website_widget", "party_size": 4, "actual_party_size": null, "service_date": "2026-06-27", "starts_at": "2026-06-27T20:00:00+02:00", "ends_at": "2026-06-27T22:00:00+02:00", "guest_notes": "Window table if possible", "internal_notes": null, "guest": "gst_3Td9Lp0WqZ", "tables": [], "created_at": "2026-06-20T11:04:18+02:00", "updated_at": "2026-06-20T11:31:00+02:00" } }}reservation.updated
Section intitulée « reservation.updated »Les détails d’une réservation changent — par exemple la taille du groupe ou les
notes. previous_attributes liste les champs modifiés et leurs valeurs
précédentes (ici, la taille du groupe est passée de 4 à 6 et la note du client a
changé).
{ "id": "evt_4O1aT5p7Yg3sHuM0vQ4dC2eT", "object": "event", "type": "reservation.updated", "created": "2026-06-25T07:12:55Z", "livemode": true, "api_version": "2026-06-27", "data": { "object": { "object": "reservation", "id": "resv_8xKQ2m4Vd0pErJ7sN1aZ9bQ", "status": "confirmed", "source": "widget", "booking_channel": "website_widget", "party_size": 6, "actual_party_size": null, "service_date": "2026-06-27", "starts_at": "2026-06-27T20:00:00+02:00", "ends_at": "2026-06-27T22:00:00+02:00", "guest_notes": "Window table; celebrating an anniversary", "internal_notes": null, "guest": "gst_3Td9Lp0WqZ", "tables": [], "created_at": "2026-06-20T11:04:18+02:00", "updated_at": "2026-06-25T09:12:55+02:00" }, "previous_attributes": { "party_size": 4, "guest_notes": "Window table if possible" } }}reservation.partially_seated
Section intitulée « reservation.partially_seated »Une partie du groupe, mais pas la totalité, a été installée.
{ "id": "evt_5P2bU6q8Zh4tIvN1wR5eD3fU", "object": "event", "type": "reservation.partially_seated", "created": "2026-06-27T18:05:00Z", "livemode": true, "api_version": "2026-06-27", "data": { "object": { "object": "reservation", "id": "resv_8xKQ2m4Vd0pErJ7sN1aZ9bQ", "status": "partially_seated", "source": "widget", "booking_channel": "website_widget", "party_size": 6, "actual_party_size": 4, "service_date": "2026-06-27", "starts_at": "2026-06-27T20:00:00+02:00", "ends_at": "2026-06-27T22:00:00+02:00", "guest_notes": "Window table if possible", "internal_notes": null, "guest": "gst_3Td9Lp0WqZ", "tables": [ { "object": "table", "id": "tbl_QpZ2", "name": "12", "min_capacity": 2, "max_capacity": 6, "section": { "object": "section", "id": "sec_Lm8", "name": "Main room", "area_type": "indoor" } } ], "created_at": "2026-06-20T11:04:18+02:00", "updated_at": "2026-06-27T20:05:00+02:00" } }}reservation.seated
Section intitulée « reservation.seated »Le groupe a été installé.
{ "id": "evt_6Q3cV7r9Ai5uJwO2xS6fE4gV", "object": "event", "type": "reservation.seated", "created": "2026-06-27T18:08:00Z", "livemode": true, "api_version": "2026-06-27", "data": { "object": { "object": "reservation", "id": "resv_8xKQ2m4Vd0pErJ7sN1aZ9bQ", "status": "seated", "source": "widget", "booking_channel": "website_widget", "party_size": 6, "actual_party_size": 6, "service_date": "2026-06-27", "starts_at": "2026-06-27T20:00:00+02:00", "ends_at": "2026-06-27T22:00:00+02:00", "guest_notes": "Window table if possible", "internal_notes": null, "guest": "gst_3Td9Lp0WqZ", "tables": [ { "object": "table", "id": "tbl_QpZ2", "name": "12", "min_capacity": 2, "max_capacity": 6, "section": { "object": "section", "id": "sec_Lm8", "name": "Main room", "area_type": "indoor" } } ], "created_at": "2026-06-20T11:04:18+02:00", "updated_at": "2026-06-27T20:08:00+02:00" } }}reservation.completed
Section intitulée « reservation.completed »La réservation est terminée — le groupe est parti.
{ "id": "evt_7R4dW8s0Bj6vKxP3yT7gF5hW", "object": "event", "type": "reservation.completed", "created": "2026-06-27T20:15:00Z", "livemode": true, "api_version": "2026-06-27", "data": { "object": { "object": "reservation", "id": "resv_8xKQ2m4Vd0pErJ7sN1aZ9bQ", "status": "completed", "source": "widget", "booking_channel": "website_widget", "party_size": 6, "actual_party_size": 6, "service_date": "2026-06-27", "starts_at": "2026-06-27T20:00:00+02:00", "ends_at": "2026-06-27T22:00:00+02:00", "guest_notes": "Window table if possible", "internal_notes": null, "guest": "gst_3Td9Lp0WqZ", "tables": [], "created_at": "2026-06-20T11:04:18+02:00", "updated_at": "2026-06-27T22:15:00+02:00" } }}reservation.cancelled
Section intitulée « reservation.cancelled »La réservation est annulée.
{ "id": "evt_8S5eX9t1Ck7wLyQ4zU8hG6iX", "object": "event", "type": "reservation.cancelled", "created": "2026-06-26T16:00:00Z", "livemode": true, "api_version": "2026-06-27", "data": { "object": { "object": "reservation", "id": "resv_8xKQ2m4Vd0pErJ7sN1aZ9bQ", "status": "cancelled", "source": "widget", "booking_channel": "website_widget", "party_size": 6, "actual_party_size": null, "service_date": "2026-06-27", "starts_at": "2026-06-27T20:00:00+02:00", "ends_at": "2026-06-27T22:00:00+02:00", "guest_notes": "Window table if possible", "internal_notes": null, "guest": "gst_3Td9Lp0WqZ", "tables": [], "created_at": "2026-06-20T11:04:18+02:00", "updated_at": "2026-06-26T18:00:00+02:00" } }}reservation.no_show
Section intitulée « reservation.no_show »Le groupe ne s’est pas présenté.
{ "id": "evt_9T6fY0u2Dl8xMzR5aV9iH7jY", "object": "event", "type": "reservation.no_show", "created": "2026-06-27T18:45:00Z", "livemode": true, "api_version": "2026-06-27", "data": { "object": { "object": "reservation", "id": "resv_8xKQ2m4Vd0pErJ7sN1aZ9bQ", "status": "no_show", "source": "widget", "booking_channel": "website_widget", "party_size": 6, "actual_party_size": null, "service_date": "2026-06-27", "starts_at": "2026-06-27T20:00:00+02:00", "ends_at": "2026-06-27T22:00:00+02:00", "guest_notes": "Window table if possible", "internal_notes": null, "guest": "gst_3Td9Lp0WqZ", "tables": [], "created_at": "2026-06-20T11:04:18+02:00", "updated_at": "2026-06-27T20:45:00+02:00" } }}Événements de client
Section intitulée « Événements de client »Le data.object d’un événement de client est un client complet, dans la même
forme que celle renvoyée par la référence de l’API (en
anglais). Les événements de client ne portent pas previous_attributes —
comparez avec votre propre copie stockée si vous avez besoin d’un diff.
guest.created
Section intitulée « guest.created »Une fiche client est créée.
{ "id": "evt_A1bC2dE3fG4hI5jK6lM7nO8p", "object": "event", "type": "guest.created", "created": "2026-06-20T09:04:18Z", "livemode": true, "api_version": "2026-06-27", "data": { "object": { "object": "guest", "id": "gst_3Td9Lp0WqZ", "first_name": "Marie", "last_name": "Dupont", "phone": "+33612345678", "notes": null, "blacklisted": false, "blacklist_reason": null, "dietary_preferences": [], "allergies": [], "birthday": null, "anniversary": null, "vip": false, "language": "fr", "source": "widget", "marketing_email_consent": true, "marketing_email_consent_at": "2026-06-20T11:04:18+02:00", "marketing_sms_consent": false, "marketing_sms_consent_at": null, "visit_count": 0, "no_show_count": 0, "cancellation_count": 0, "first_visit_at": null, "last_visit_at": null, "created_at": "2026-06-20T11:04:18+02:00", "updated_at": "2026-06-20T11:04:18+02:00" } }}guest.updated
Section intitulée « guest.updated »Les détails d’un client changent. (Les seules statistiques de visite ne déclenchent pas cet événement — voir Pagination.)
{ "id": "evt_B2cD3eF4gH5iJ6kL7mN8oP9q", "object": "event", "type": "guest.updated", "created": "2026-06-28T08:00:00Z", "livemode": true, "api_version": "2026-06-27", "data": { "object": { "object": "guest", "id": "gst_3Td9Lp0WqZ", "first_name": "Marie", "last_name": "Dupont", "phone": "+33612345678", "notes": null, "blacklisted": false, "blacklist_reason": null, "dietary_preferences": ["vegetarian"], "allergies": [], "birthday": null, "anniversary": null, "vip": true, "language": "fr", "source": "widget", "marketing_email_consent": true, "marketing_email_consent_at": "2026-06-20T11:04:18+02:00", "marketing_sms_consent": false, "marketing_sms_consent_at": null, "visit_count": 3, "no_show_count": 0, "cancellation_count": 0, "first_visit_at": "2026-06-21T21:00:00+02:00", "last_visit_at": "2026-06-27T20:00:00+02:00", "created_at": "2026-06-20T11:04:18+02:00", "updated_at": "2026-06-28T10:00:00+02:00" } }}guest.deleted
Section intitulée « guest.deleted »Un client est supprimé (par exemple, une demande d’effacement pour protection des
données). Le data.object est un instantané final du client complet (la même
forme que toute autre charge utile de client) ; le client n’est plus récupérable
depuis l’API par la suite.
{ "id": "evt_C3dE4fG5hI6jK7lM8nO9pQ0r", "object": "event", "type": "guest.deleted", "created": "2026-06-29T07:00:00Z", "livemode": true, "api_version": "2026-06-27", "data": { "object": { "object": "guest", "id": "gst_3Td9Lp0WqZ", "first_name": "Marie", "last_name": "Dupont", "phone": "+33612345678", "notes": null, "blacklisted": false, "blacklist_reason": null, "dietary_preferences": ["vegetarian"], "allergies": [], "birthday": null, "anniversary": null, "vip": true, "language": "fr", "source": "widget", "marketing_email_consent": true, "marketing_email_consent_at": "2026-06-20T11:04:18+02:00", "marketing_sms_consent": false, "marketing_sms_consent_at": null, "visit_count": 3, "no_show_count": 0, "cancellation_count": 0, "first_visit_at": "2026-06-21T21:00:00+02:00", "last_visit_at": "2026-06-27T20:00:00+02:00", "created_at": "2026-06-20T11:04:18+02:00", "updated_at": "2026-06-28T10:00:00+02:00" } }}Événements d’avis
Section intitulée « Événements d’avis »feedback.received
Section intitulée « feedback.received »Un client soumet un avis après une visite. Le data.object est un objet-valeur
d’avis intégré (ce n’est pas une ressource d’API récupérable) portant les notes
et le commentaire, ainsi que des références sous forme de simples identifiants
vers le client et la réservation auxquels il se rapporte.
{ "id": "evt_D4eF5gH6iJ7kL8mN9oP0qR1s", "object": "event", "type": "feedback.received", "created": "2026-06-28T11:20:00Z", "livemode": true, "api_version": "2026-06-27", "data": { "object": { "object": "feedback", "id": "fb_7hn2qp", "overall_rating": 5, "food_rating": 5, "service_rating": 4, "comment": "Lovely evening, great service.", "responded_at": "2026-06-28T13:20:00+02:00", "guest": "gst_3Td9Lp0WqZ", "reservation": "resv_8xKQ2m4Vd0pErJ7sN1aZ9bQ" } }}Les champs overall_rating, food_rating, service_rating et comment peuvent
chacun valoir null lorsque le client ne les a pas fournis. Utilisez cet
événement pour inviter les clients à laisser un avis, acheminer les avis vers la
bonne équipe, ou synchroniser les notes dans vos propres outils.