Docs
API Reference

Calendar Events

Standalone events or events linked to a specific job

Calendar events represent anything time-based — appointments, internal reminders, blocked-out slots — and can optionally be linked to a job via ticketId. Standalone events and job-linked events live in the same collection, so a single list request can power a unified calendar view.

Endpoints

  • GET/organisations/{orgId}/calendar-events — List events (paginated)
  • POST/organisations/{orgId}/calendar-events — Create event
  • GET/organisations/{orgId}/calendar-events/{eventId} — Get event
  • PUT/organisations/{orgId}/calendar-events/{eventId} — Update event
  • DELETE/organisations/{orgId}/calendar-events/{eventId} — Delete event

List filters

Query paramDescription
limitPage size (max 100, default 50)
startAfterCursor — pass the previous response's nextCursor
fromFilter to events whose start (from) is on or after this ISO date
toFilter to events whose start is on or before this ISO date (not the event end)
assignedToIdFilter to events assigned to a specific user
ticketIdFilter to events linked to a specific job

Required scopes: calendar:read / calendar:write / calendar:delete.

serviceRequest is copied from the job's serviceRequired on calendar sync. Updating from / to / allDay on a ticket-linked event writes back to the job's serviceTime / endTime. If the linked job no longer exists, PUT returns 404 (Linked job was not found.) and does not write a partial event. Recurring visits return 409 RECURRING_VISIT and must use occurrence move / resize. Ticket-owned fields (serviceRequest, title, color, ticketLocation) cannot be written on linked events.

To fetch every event linked to a single job, pass ?ticketId={ticketId}. Standalone events (no ticketId set) are returned alongside job-linked events when no ticketId filter is applied.

Job-linked events are auto-managed

When you create or update a job with both serviceTime and endTime, the API maintains a linked calendar event for you. Clearing the job's schedule or deleting the job removes those events. Prefer the jobs API for customer bookings; use these endpoints for standalone calendar items or when you need full control over event fields the job sync does not touch (e.g. custom description on an existing job-linked event).

One event per job

Each ticket may only have one linked calendar event. Creating or re-linking a second event for the same ticketId returns 409 CALENDAR_EVENT_EXISTS. Update the existing event, or change the job schedule via the jobs API.

Machine-readable version: OpenAPI spec.