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 on or after this ISO date |
to | Filter to events on or before this ISO date |
assignedToId | Filter to events assigned to a specific user |
ticketId | Filter to events linked to a specific job |
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 Conflict.
Update the existing event, or change the job schedule via the jobs API.
API key for authentication. Get your key from the Developer Dashboard.
In: header
Path Parameters
Organisation ID
Query Parameters
Maximum number of items to return (max 100)
1 <= value <= 10050Cursor for pagination - ID of the last item from previous page
Filter events starting from this date (ISO 8601)
date-timeFilter events ending before this date (ISO 8601)
date-timeFilter by assigned user ID
Filter by associated ticket ID
Response Body
application/json
application/json
application/json
curl -X GET "https://example.com/organisations/string/calendar-events"{ "success": true, "data": { "events": [ { "id": "string", "title": "string", "description": "string", "notes": "string", "from": "2019-08-24T14:15:22Z", "to": "2019-08-24T14:15:22Z", "allDay": true, "assignedTo": "string", "assignedToId": "string", "ticketId": "string", "ticketLocation": "string", "color": 0 } ], "pagination": { "limit": 0, "hasMore": true, "nextCursor": "string" } }}{ "success": false, "error": "An error occurred"}{ "success": false, "error": "You do not have access to this organisation"}API key for authentication. Get your key from the Developer Dashboard.
In: header
Path Parameters
Organisation ID
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/organisations/string/calendar-events" \ -H "Content-Type: application/json" \ -d '{ "title": "Service Appointment", "from": "2025-01-15T10:00:00Z", "to": "2025-01-15T11:00:00Z", "allDay": false, "assignedToId": "user123", "ticketId": "1" }'{ "success": true, "data": { "id": "string", "title": "string", "description": "string", "notes": "string", "from": "2019-08-24T14:15:22Z", "to": "2019-08-24T14:15:22Z", "allDay": true, "assignedTo": "string", "assignedToId": "string", "ticketId": "string", "ticketLocation": "string", "color": 0 }}{ "success": false, "error": "An error occurred"}{ "success": false, "error": "An error occurred"}{ "success": false, "error": "You do not have access to this organisation"}{ "success": false, "error": "An error occurred"}API key for authentication. Get your key from the Developer Dashboard.
In: header
Path Parameters
Organisation ID
Calendar event ID
Response Body
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/organisations/string/calendar-events/string"{ "success": true, "data": { "id": "string", "title": "string", "description": "string", "notes": "string", "from": "2019-08-24T14:15:22Z", "to": "2019-08-24T14:15:22Z", "allDay": true, "assignedTo": "string", "assignedToId": "string", "ticketId": "string", "ticketLocation": "string", "color": 0 }}{ "success": false, "error": "An error occurred"}{ "success": false, "error": "You do not have access to this organisation"}{ "success": false, "error": "An error occurred"}API key for authentication. Get your key from the Developer Dashboard.
In: header
Path Parameters
Organisation ID
Calendar event ID
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PUT "https://example.com/organisations/string/calendar-events/string" \ -H "Content-Type: application/json" \ -d '{}'{ "success": true, "data": { "id": "string", "title": "string", "description": "string", "notes": "string", "from": "2019-08-24T14:15:22Z", "to": "2019-08-24T14:15:22Z", "allDay": true, "assignedTo": "string", "assignedToId": "string", "ticketId": "string", "ticketLocation": "string", "color": 0 }}{ "success": false, "error": "An error occurred"}{ "success": false, "error": "An error occurred"}{ "success": false, "error": "You do not have access to this organisation"}{ "success": false, "error": "An error occurred"}{ "success": false, "error": "An error occurred"}API key for authentication. Get your key from the Developer Dashboard.
In: header
Path Parameters
Organisation ID
Calendar event ID
Response Body
application/json
application/json
application/json
application/json
curl -X DELETE "https://example.com/organisations/string/calendar-events/string"{ "success": true, "data": { "message": "Operation completed successfully" }}{ "success": false, "error": "An error occurred"}{ "success": false, "error": "You do not have access to this organisation"}{ "success": false, "error": "An error occurred"}Machine-readable version: OpenAPI 3.1 spec.