Schedules

The SafetyCulture API gives you access to create, update and delete schedule items.

The Schedules API allows you create and manage recurring inspection schedules programmatically. Each schedule defines a recurrence pattern, an inspection work type, a set of assignees, and an optional target, such as the sites or assets that the schedule applies to.

Schedules generate occurrences automatically at the configured frequency. Each occurrence represents a single instance of the scheduled inspection work, assigned to the specified users.

πŸ“˜

The legacy Schedules API remains fully supported.
New API features will only be added to this version.

Targets and sub-schedules

A schedule can be created with or without a target:

  • No target: A single occurrence is created per recurrence, assigned directly to the specified users.
  • Sites (target.sites): A separate occurrence is created for each site at each recurrence.
  • Assets (target.assets): A separate occurrence is created for each asset at each recurrence.

When a target is set, SafetyCulture creates a sub-schedule for each site or asset. Sub-schedules inherit their configuration from the parent schedule. Any update made to the parent schedule automatically applies to all of its sub-schedules Sub-schedules are created asynchronously after the parent schedule is created.

This is the key architectural difference from the legacy API, where each site resulted in a separate, independently managed schedule item.

Recurrence

Recurrence is defined using an iCal-compatible DTSTART + RRULE string in RFC 5545 format, nested in the recurrence object. This defines the start date and time, the repeat frequency, and the interval.

Example
DTSTART:20240101T090000Z\nRRULE:FREQ=WEEKLY;BYDAY=MO;INTERVAL=1

The recurrence.duration field sets the length of each occurrence window as an ISO 8601 duration string, such as PT1H for one hour.

For schedules that target multiple sites in different time zones, set recurrence.use_site_timezone: true to apply each site's configured time zone to the occurrence schedule, rather than a fixed UTC time.

Migration from the legacy endpoint

The legacy Schedules API uses a different schema.

ConceptLegacy fieldNew field
Recurrence rulerecurrence (raw RRULE string)recurrence.dtstart_rrule (DTSTART + RRULE string in an object)
Inspection windowduration (top-level)recurrence.duration (nested in recurrence)
Site assignmentsite_ids[] (deprecated)target.sites
Per-site schedule flagcreate_schedule_per_site (deprecated)Replaced by target object semantics
Assigneesassignees[], intersections[]assignment object
Time zonetimezone_type (enum)recurrence.use_site_timezone (boolean) or TZID in RRULE
Template/formdocument (ScheduleItemDocument)work_type object
Late submissionNot availablerecurrence.late_submission_rule