Skip to main content

Webhooks & events

Private beta

The event contract below is the committed design for Journeys webhooks, being rolled out with private beta tenants. Event names, payload shapes, and delivery semantics documented here are the contract implementations should build against. Confirm activation for your tenant with your implementation team.

Polling works for a booking flow the guest is driving, but operational surfaces — a sales workbench, a CRM timeline, an agent dashboard, downstream fulfilment — need to know when things happen. Journeys emits webhooks for the commerce events that matter.

Subscribing

Webhook endpoints are configured per tenant in journey.yaml:

webhooks:
- url: https://workbench.example.com/hooks/journeys
events:
- booking.created
- payment_request.completed
secret: vault::journeys_webhook_secret

Multiple subscriptions are supported (e.g. one for the workbench, one for analytics), each with its own event filter and signing secret. Secrets are stored in the Edge vault, never in configuration files.

Events

EventFired whenPayload
basket.createdA commerce session startsBasket summary (id, tenant, channel, package, departure, occupancy)
basket.updatedSelections, travellers, or promotions changeBasket summary + changed fields
basket.expiredThe 15-minute basket expiry lapses without bookingBasket summary — useful for abandonment recovery
payment_request.createdA payment request is issuedPayment request (id, basket, amount, currency, status)
payment_request.completedA payment is confirmedPayment request with status: completed
payment_request.failedA payment attempt failsPayment request with status: failed
booking.createdCheckout lands as a Salesforce itineraryitinerary_id, booking_reference, basket summary

Delivery

Each delivery is an HTTPS POST:

{
"id": "evt_9f2c1e0a",
"type": "booking.created",
"tenant_id": "meridian",
"created_at": "2027-06-01T10:05:00Z",
"data": {
"itinerary_id": "a0R0000000000AAAA",
"booking_reference": "MER-104233",
"basket_id": "1f2e3d4c-0000-0000-0000-000000000000"
}
}
SemanticsBehaviour
SigningX-Journeys-Signature header — HMAC-SHA256 of the raw body using the subscription secret. Verify before trusting.
OrderingBest-effort per basket; consumers must treat id as the deduplication key and tolerate out-of-order delivery.
RetriesNon-2xx responses are retried with exponential backoff for up to 24 hours.
At-least-onceDeliveries can repeat — handlers must be idempotent on event id.
TimeoutRespond 2xx within 10 seconds; do processing asynchronously.

Workbench pattern

For a single-view sales workbench the useful combination is:

  1. Drive the booking flow through the Journeys API (or embed the hosted UI).
  2. Subscribe the workbench backend to booking.created and payment_request.completed to update the timeline in real time.
  3. Use Edge Composite for any Salesforce context the workbench needs around the event (itinerary detail, account history) — one composite call per event, no polling loops.