Experience Schedules
Manage schedule slots for an experience. Schedules define when an experience is available for booking.
Endpointsโ
| Method | Endpoint | Description |
|---|---|---|
| GET | /v1/experiences/{id}/schedules | List schedules |
| GET | /v1/experiences/{id}/schedules/{scheduleId} | Get schedule |
| POST | /v1/experiences/{id}/schedules | Add schedule |
| PATCH | /v1/experiences/{id}/schedules/{scheduleId} | Update schedule |
| DELETE | /v1/experiences/{id}/schedules/{scheduleId} | Delete schedule |
Authenticationโ
All schedule endpoints require an API key with the experiences:read scope for GET requests, and experiences:write scope for POST/PATCH/DELETE requests.
Schedule Fieldsโ
| Field | Type | Description |
|---|---|---|
id | integer | Unique schedule identifier |
date | string | The date of the experience slot (YYYY-MM-DD) |
start_time | string | Local start time in the supplier's timezone (HH:MM) |
capacity | integer | Maximum number of participants allowed |
groups_capacity | integer|null | Groups-per-slot override for this departure (null = inherit the experience default) |
effective_groups_capacity | integer|null | The cap in force (override, else the experience default). null = unlimited |
available_groups | integer|null | Groups still bookable under that cap |
booked_slots | integer | Number of participants currently booked |
held_slots | integer | Spots customers are holding in their booking-page carts right now, in the same unit as booked_slots. Not booked, and not free to sell until the hold ends |
available_slots | integer|null | Spots that can still be sold, the same number the booking page shows: capacity minus booked_slots and held_slots, then lowered by a closure, a guide who is not free, a private booking holding the departure, gear every guest takes that is out on rentals or other departures, and places shared with another experience. For a departure that has started, capacity minus booked and held. null = unlimited |
available | boolean | Whether the slot can still accept bookings |
guides | array | Assigned staff members who will lead the experience |
timezone | string | Timezone the schedule was created in |
start_datetime_utc | string | UTC datetime for the slot start (ISO 8601) |
created_at | string | ISO 8601 datetime |
updated_at | string | ISO 8601 datetime |
Timezone Handlingโ
- Schedule times are stored in UTC for consistency
- The
start_timein responses is displayed in the supplier's timezone - When creating schedules, times are converted from the supplier's timezone to UTC
- Use the
start_datetime_utcfield for accurate timestamp comparisons
Bulk Creating Schedulesโ
To create multiple schedules (e.g., for a week), send multiple POST requests. A future enhancement may support bulk creation in a single request.
# Create morning and afternoon slots for a week
for date in 2026-02-{16..22}; do
curl -X POST ".../experiences/1/schedules" \
-d "{\"date\": \"$date\", \"start_time\": \"09:00\", \"capacity\": 10}"
curl -X POST ".../experiences/1/schedules" \
-d "{\"date\": \"$date\", \"start_time\": \"14:00\", \"capacity\": 10}"
done