Bookings API
The Bookings API is currently in beta. The interface is stable but may receive additions in future releases.
The Bookings API lets you programmatically retrieve your booking data. Use it to feed data into spreadsheets, BI tools, custom dashboards, or any external system.
Authentication
Every request must include an API key in the Authorization header as a Bearer token.
Authorization: Bearer td_your_key_here You can create and manage API keys from the API settings page. Each company can have up to 2 active keys at a time.
API keys are prefixed with td_ and shown only once at creation. Store them securely — TourDash cannot retrieve a key after it has been created.
Base URL
https://tourdash.app GET /api/v1/bookings
Returns a paginated list of bookings for tours that start within the given date range.
Query parameters
| Parameter | Required | Default | Description |
|---|---|---|---|
from | Yes | — | Start of date range (ISO 8601). Example: 2026-02-01 |
to | Yes | — | End of date range (ISO 8601). Must be after from. |
page | No | 1 | Page number (1-based). |
page_size | No | 50 | Number of bookings per page. Maximum 200. |
Example request
curl -H "Authorization: Bearer td_your_key_here" \
"https://tourdash.app/api/v1/bookings?from=2026-02-01&to=2026-02-28" Example response
{
"data": [
{
"id": 12345,
"ext_ref": "GYG-ABC123",
"tour": {
"name": "Gothic Quarter Walking Tour",
"start_time": "2026-02-15T10:00:00",
"language": "EN"
},
"contact": {
"name": "Jane Doe",
"phone": "+1234567890",
"email": "jane@example.com"
},
"platform": "GetYourGuide",
"booked": {
"adults": 2,
"children": 1,
"infants": 0
},
"attended": {
"adults": 2,
"children": 1,
"infants": 0
},
"checked_in_by": "Alex Smith",
"status": "confirmed",
"received_at": "2026-02-10T14:32:00Z"
}
],
"pagination": {
"page": 1,
"page_size": 50,
"total_count": 1,
"total_pages": 1
}
} Response fields
| Field | Type | Description |
|---|---|---|
id | number | Unique booking ID. |
ext_ref | string | External reference from the booking platform (e.g. GetYourGuide order ID). |
tour.name | string | Name of the tour. |
tour.start_time | string | Tour start time in local timezone (ISO 8601, no offset). |
tour.language | string | Tour language code (e.g. EN, ES). |
contact.name | string | Guest's contact name. |
contact.phone | string | Guest's phone number. |
contact.email | string | Guest's email address. |
platform | string | Booking source (e.g. GetYourGuide, Viator, Civitatis). |
booked | object | Number of guests booked (adults, children, infants). |
attended | object | Number of guests who attended (adults, children, infants). |
checked_in_by | string | null | Name of the guide who checked in the guests, or null if not checked in. |
status | string | Booking status (e.g. confirmed, cancelled). |
received_at | string | Timestamp when the booking was received (ISO 8601 with timezone). |
Rate limiting
Each API key is limited to 20 requests per 60-second window. If you exceed the limit, the API returns a 429 status with a Retry-After: 60 header. Wait for the window to reset before making additional requests.
Error responses
Errors are returned as JSON with an error field:
| Status | Meaning |
|---|---|
401 | Missing, malformed, invalid, or revoked API key. |
422 | Missing or invalid query parameters (from, to). |
429 | Rate limit exceeded. Wait and retry after 60 seconds. |
500 | Internal server error. Please try again or contact support. |
{
"error": "Missing required query parameters: from, to"
} Quick start
- Go to API settings and create an API key.
- Copy the key immediately — it's only shown once.
- Make your first request:
curl -H "Authorization: Bearer td_your_key_here" \ "https://tourdash.app/api/v1/bookings?from=2026-02-01&to=2026-02-28" - Parse the JSON response and use the data in your workflow.