Description Sync and Webhooks
Keep your marketplace listing in sync with what the group plans in travelmode. There are two complementary mechanisms; production integrations typically use both.
Pull: the partner trip view
GET /v1/partner/trips/[tripId] returns the partner view — the
fields you mirror onto your site:
name,description,summary,statuspublic_url— the trip's public story page, present once the organizer shares the triprevision— a monotonic change counter; if it hasn't moved since your last read, nothing changedclaim.status,supplier_id,external_ref
Push: trip.* webhooks
Webhook endpoints are managed on the shared platform webhook API with
the trips:webhooks scope:
curl -X POST https://api.travelmode.ai/v1/webhooks \
-H "Authorization: Bearer tm_trips_your_key_here" \
-H "Content-Type: application/json" \
-d '{"url": "https://partner.example.com/hooks/travelmode", "events": ["trip.updated", "trip.claimed"]}'
The response contains the per-endpoint signing secret (whsec_...),
shown exactly once.
Events
| Event | Fires when |
|---|---|
trip.updated | name, description, summary, or status changed — whether by your PATCH or by the organizer in the travelmode app. |
trip.claimed | The group organizer claimed the trip. |
Deliveries use the shared platform envelope: id, type, occurred_at
at the top level, with the trip payload nested at data.payload —
tripId, your externalRef, the supplierId, claimStatus, the
changed field names, and the current values of the synced trip fields
including revision.
Verifying deliveries
Every delivery is signed: X-Travelmode-Signature is the HMAC-SHA256
(hex) of "TIMESTAMP.BODY" using your endpoint secret, with the
timestamp in X-Travelmode-Timestamp. Reject deliveries whose signature
doesn't verify or whose timestamp is older than a few minutes.
Retries and auto-disable
Failed deliveries are retried with backoff (up to 6 attempts). An
endpoint that keeps failing is automatically disabled and a
weather.webhook_endpoint_disabled meta-event is emitted — subscribe to
it from a second endpoint so a broken integration doesn't fail silently.
Deduplication
Deliveries may occasionally arrive more than once or out of order. Use
trip.revision from the payload: ignore any event whose revision is not
greater than the last one you processed for that trip.