Skip to content

Schedule

A schedule is the time portion of a resource description. It expresses when something happens or when something is available, using the NimCal format. The same shape is used in two places in the API:

  • A Timeslot wraps a schedule with a name, is owned by an organization, and binds to a bookable. The schedule describes when that bookable is open for booking.
  • A Booking carries a schedule that describes when the reservation occurs, including support for recurring reservations.

See the Examples sidebar for ready to use payloads showing each pattern in context.

Fields

FieldPurpose
start_dateEarliest instant the schedule produces.
end_dateOptional latest instant. Omit for an open ended schedule.
availabletrue for a schedule that opens a window, false for one that consumes a window (a booking).
time_zoneIANA zone name applied to times. Defaults to UTC when omitted.
patternRecurrence definition.

WARNING

available has no implicit default. When the field is omitted on a timeslot payload, the schedule is stored with available: false, which the booking engine reads as a blocking window. Every booking that falls inside the timeslot's time range then returns 409 Conflict with "outside of defined timeslots". Always send "available": true on timeslot schedules. Booking schedules go the other way and must be sent with "available": false.

Timestamps

All timestamp fields across the API are RFC 3339 in UTC with a Z suffix, for example 2024-01-23T09:00:00Z. Sub second precision is optional. Numeric offsets such as +02:00 are accepted on input and normalized to UTC on storage and on the response.

For start_date and end_date on a schedule, a bare YYYY-MM-DD is also accepted; the time defaults to 00:00:00 UTC.

Pattern

FieldTypeMeaning
typestringOne of daily, weekly, monthly, yearly.
intervalintegerRepeat every N units of type. Minimum 1.
days_of_weekint array1..7 where 1 is Monday. Empty or omitted means every day.
weeks_of_monthint array1..5 within a month, or -1 for last. Used with monthly patterns.
days_of_monthint array1..31, or -1 for last. Used with monthly patterns.
months_of_yearint array1..12. Used with yearly patterns.
days_of_yearint array1..366 ordinal day. Used with yearly patterns.
timesstring arrayTime windows in HH:mm/PTnH form.
countintegerOptional cap on the number of occurrences produced.

Time Windows

times is a list of HH:mm/PTnH strings. The first part is the start time and the second is an ISO 8601 duration. Multiple windows per day are allowed, for example ["08:00/PT4H", "13:00/PT4H"] for a split day with a lunch break.

Examples