Add Schedule
Add a new schedule slot to an experience.
Endpointโ
POST /v1/experiences/{id}/schedules
Authenticationโ
Requires an API key with the experiences:write scope.
Path Parametersโ
| Parameter | Type | Description |
|---|---|---|
id | integer | Experience ID |
Request Bodyโ
| Field | Type | Required | Description |
|---|---|---|---|
date | string | Yes | Start date (YYYY-MM-DD) |
start_time | string | Conditional | Start time (HH:MM). Required for timed experiences (time-point and timed multi-day treks). Optional for a date-only experience (a tour package or open-window) โ omit it to create a date-only departure (departs on the day, with no clock time) |
end_time | string | No | End time (HH:MM). Required for an open-window (time-period) row when a start_time is set (the window close), and for a timed multi-day departure (see end_date). Never needed for a date-only package departure |
end_date | string | No | Return date (YYYY-MM-DD) for a multi-day departure โ one booking spanning several days. For a tour package / date-only experience this is auto-derived from the experience's configured trip length when omitted (you send only date). For a timed multi-day trek, set it explicitly. Omit for a same-day session; defaults to date. Must be on or after date, and requires end_time when later than date on a timed experience |
capacity | integer | No | Maximum participants (uses experience default if not set) |
guides_needed | integer | No | Guides this session needs before it can take bookings (guide availability link). Omit to inherit the experience default. |
guide_ids | array | No | Array of staff IDs to assign as guides |
booking_option_id | integer | No | Reserve this session for one booking option. Omit it or send null and the session runs for every option, which is what every session did before options existed. Must be an option of this experience |
Example Requestโ
curl -X POST "https://app.equipdash.com/api/v1/experiences/1/schedules" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"date": "2026-02-20",
"start_time": "10:00",
"capacity": 12,
"guide_ids": [1, 2]
}'
Multi-day departureโ
A multi-day departure is a single booking that runs across several days (e.g. a 3-day guided trek). Provide end_date (a later day) and end_time (the return time):
curl -X POST "https://app.equipdash.com/api/v1/experiences/1/schedules" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"date": "2026-07-13",
"start_time": "09:00",
"end_date": "2026-07-15",
"end_time": "17:00",
"capacity": 12
}'
Tour package departure (auto-derived return date)โ
A tour package (and any date-only / open-window experience) departs on a day and runs for a fixed number of days configured once on the experience (its trip length, e.g. "5 Days / 4 Nights"). You send only the start date โ start_time, end_time and end_date are all omitted. The API derives the return date from the trip length, so the departure lands the correct multi-day span automatically:
curl -X POST "https://app.equipdash.com/api/v1/experiences/1/schedules" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"date": "2026-08-10",
"capacity": 12
}'
For a 5-day package the response carries start_time: null, multi_day: true, and an end_datetime_utc four days later at end-of-day (the 14th) โ identical to adding the departure from the experience's Availability tab or via the add_experience_departure MCP tool. A package with a one-day trip length stays same-day (multi_day: false, end_datetime_utc: null).
Responseโ
Success (201 Created)โ
{
"data": {
"id": 3,
"date": "2026-02-20",
"start_time": "10:00",
"capacity": 12,
"booked_slots": 0,
"available_slots": 12,
"available": true,
"guides": [
{
"id": 1,
"name": "John Smith"
},
{
"id": 2,
"name": "Jane Doe"
}
],
"timezone": "America/New_York",
"start_datetime_utc": "2026-02-20T15:00:00+00:00",
"end_datetime_utc": null,
"multi_day": false,
"days_nights": null,
"days_nights_short": null,
"created_at": "2026-02-01T10:00:00+00:00",
"updated_at": "2026-02-01T10:00:00+00:00"
},
"meta": {
"request_id": "req_abc123",
"timestamp": "2026-02-01T10:00:00+00:00"
}
}
Errorsโ
| Status | Code | Description |
|---|---|---|
| 400 | validation_error | Invalid request body |
| 401 | authentication_required | No API key provided |
| 403 | insufficient_scope | API key lacks experiences:write scope |
| 404 | not_found | Experience not found |
| 409 | conflict | Schedule already exists for this date/time |
Validation Rulesโ
datemust be a valid date in YYYY-MM-DD formatdatemust be today or in the futurestart_timeis required for a timed experience and must be a valid time in HH:MM format; it is optional for a date-only experience (tour package / open-window)end_timemust be a valid time in HH:MM format if providedend_datemust be a valid date on or afterdateend_timeis required whenend_dateis later thandateon a timed experience (a timed multi-day trek). A date-only / package departure never needs itcapacitymust be a positive integer if providedguide_idsmust contain valid staff IDs if provided
Notesโ
- Times are interpreted in the supplier's configured timezone
- If
capacityis not provided, the experience's default capacity is used - Guides must be active staff members with the guide role
- For a multi-day departure,
end_datetime_utccarries the authoritative return instant (a later day) andmulti_dayistrue. The created booking'send_dateis set from this return instant โ not from the experience's per-sessionduration - For a tour package / date-only experience, the return date is auto-derived from the experience's configured trip length โ send only
dateand omitstart_time/end_time/end_date. This matches the experience's Availability tab and theadd_experience_departureMCP tool exactly