About Our APIs
The Intrepid Partner API provides programmatic access to our trip catalogue, departures, pricing, and booking management. This page explains the core concepts you need to understand before integrating.
Two API domains
Intrepid's API surface is split into two logical domains:
| Domain | Purpose | Key resources |
|---|---|---|
| Product API | Read-only access to our trip catalogue, departures, room options, accommodations, transfers, activities, additional services, and itineraries | /trips, /departures, /accommodations, /transfers, /activities, /additional-services, /itineraries |
| Booking API | Create and manage bookings on behalf of your customers — add trips, customers, accommodations, transfers, and activities to a booking | /bookings, /bookings/{id}/trips, /bookings/{id}/customers, /bookings/{id}/accommodations |
How they work together
- Browse products — Use the Product API to fetch trips, their departures, and available room options
- Check availability — Query room options for a specific departure to see pricing and capacity
- Create a booking — Use the Booking API to create a booking, add a trip (departure + room option), and attach customer details
- Manage the booking — Update customer info, add optional extras (transfers, accommodations), or cancel
Data model overview
- A Trip is a product template (e.g. "Beautiful Northern Thailand")
- A Departure is a specific instance of a trip with fixed start/end dates
- A Room Option defines the type of room (twin, single, etc.), capacity, price, and availability for a departure
- A Booking is a container that holds one or more booked trips, customers, and optional add-ons
Best practices for consuming our data
- Cache trip data — Trip and departure data changes infrequently. Poll at most every 15 minutes for updates rather than on every user request.
- Use pagination — All list endpoints support
pageandsizeparameters. Default page size is 20. - Filter by date — Use
dateRangeFromanddateRangeToon departures to fetch only relevant future departures. - Check
updatedAt— Compare timestamps to detect changes since your last sync rather than re-fetching all data. - Handle rate limits gracefully — If you receive a
429 Too Many Requestsresponse, back off and retry with exponential delay.