✈
    TravelmodeDevelopers
    🔎/
    🔑Manage API Keys
    Feature
    🌦️Weather🛂Visa🧩Platform🧭Trips🤝Partner Trips🤖Agent Runs📅Events

    Partner Trips API · v1

    📖Overview🧪API Reference (Try It)
    Guides
    🚀Getting Started🔐Authentication & Scopes🔗The Claim Flow🔔Description Sync & Webhooks⚠️Errors
    ⬇️Download openapi.yaml
    Developers / Partner Trips / Description Sync & Webhooks

    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, status
    • public_url — the trip's public story page, present once the organizer shares the trip
    • revision — a monotonic change counter; if it hasn't moved since your last read, nothing changed
    • claim.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

    EventFires when
    trip.updatedname, description, summary, or status changed — whether by your PATCH or by the organizer in the travelmode app.
    trip.claimedThe 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.

    Previous
    ← The Claim Flow
    Next
    Errors →