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
| Field | Purpose |
|---|---|
start_date | Earliest instant the schedule produces. |
end_date | Optional latest instant. Omit for an open ended schedule. |
available | true for a schedule that opens a window, false for one that consumes a window (a booking). |
time_zone | IANA zone name applied to times. Defaults to UTC when omitted. |
pattern | Recurrence 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
| Field | Type | Meaning |
|---|---|---|
type | string | One of daily, weekly, monthly, yearly. |
interval | integer | Repeat every N units of type. Minimum 1. |
days_of_week | int array | 1..7 where 1 is Monday. Empty or omitted means every day. |
weeks_of_month | int array | 1..5 within a month, or -1 for last. Used with monthly patterns. |
days_of_month | int array | 1..31, or -1 for last. Used with monthly patterns. |
months_of_year | int array | 1..12. Used with yearly patterns. |
days_of_year | int array | 1..366 ordinal day. Used with yearly patterns. |
times | string array | Time windows in HH:mm/PTnH form. |
count | integer | Optional 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
- Create Timeslot — schedule on a timeslot bound to a bookable.
- Book Resource — schedule on a single or recurring booking.