Skip to main content

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โ€‹

ParameterTypeDescription
idintegerExperience ID

Request Bodyโ€‹

FieldTypeRequiredDescription
datestringYesStart date (YYYY-MM-DD)
start_timestringConditionalStart 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_timestringNoEnd 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_datestringNoReturn 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
capacityintegerNoMaximum participants (uses experience default if not set)
guides_neededintegerNoGuides this session needs before it can take bookings (guide availability link). Omit to inherit the experience default.
guide_idsarrayNoArray of staff IDs to assign as guides
booking_option_idintegerNoReserve 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โ€‹

StatusCodeDescription
400validation_errorInvalid request body
401authentication_requiredNo API key provided
403insufficient_scopeAPI key lacks experiences:write scope
404not_foundExperience not found
409conflictSchedule already exists for this date/time

Validation Rulesโ€‹

  • date must be a valid date in YYYY-MM-DD format
  • date must be today or in the future
  • start_time is 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_time must be a valid time in HH:MM format if provided
  • end_date must be a valid date on or after date
  • end_time is required when end_date is later than date on a timed experience (a timed multi-day trek). A date-only / package departure never needs it
  • capacity must be a positive integer if provided
  • guide_ids must contain valid staff IDs if provided

Notesโ€‹

  • Times are interpreted in the supplier's configured timezone
  • If capacity is 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_utc carries the authoritative return instant (a later day) and multi_day is true. The created booking's end_date is set from this return instant โ€” not from the experience's per-session duration
  • For a tour package / date-only experience, the return date is auto-derived from the experience's configured trip length โ€” send only date and omit start_time/end_time/end_date. This matches the experience's Availability tab and the add_experience_departure MCP tool exactly