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 param | Description |
|---|---|
limit | Page size (max 100, default 50) |
startAfter | Cursor — pass the previous response's nextCursor |
from | Filter to events whose start (from) is on or after this ISO date |
to | Filter to events whose start is on or before this ISO date (not the event end) |
assignedToId | Filter to events assigned to a specific user |
ticketId | Filter 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.