BlueSuite Developers
REST API v1

Events and visits

Events and visits in the BlueSuite REST API

Manage appointments, tasks, and calendar events. Input dates/times use the workspace timezone and are converted to UTC for storage. Times returned from saved events may therefore differ from the local input.

Scheduling rules

Both start_time and end_time are required unless all_day: true. The end must be after the start. For date-only work, explicitly use all_day: true. Flexible visits can use is_flexible and duration_minutes.

Standalone tasks and calendar events can repeat. Appointments repeat through recurring job schedules, rather than standalone appointment recurrence. A custom weekly/monthly pattern requires selected days, and a finite repeat duration requires a count. Only send repeat_frequency_schedule when repeat_frequency_unit is custom.

On updates, update_scope controls which occurrences change. Partial time edits are merged with the existing schedule before validation. Use the dedicated status endpoint for completion/cancellation and PUT /events/:id/line-items to replace a visit's line items; this is a complete replacement of that visit's pricing list.

Example: create a timed appointment

curl 'https://my.bluesuite.app/api/v1/events' \
  -H "Authorization: Bearer $BLUESUITE_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"name":"Site inspection","job_id":42,"type":"appointment","start_date":"2026-11-02","end_date":"2026-11-02","start_time":"09:00","end_time":"10:00"}'

GET /api/v1/events

GET /api/v1/events

Required scopes: events:read.

Query parameters

FieldType / accepted valuesRequiredDetails
pageintegerNoPage number, starting at 1. Default: 1.
per_pageintegerNoRecords per page, from 1 to 100. Default: 25. minimum: 1. maximum: 100.
searchstringNoSearch text. maxLength: 100.
sort_bystringNoSort column. See the supported columns below when listed.
sort_direction"asc", "desc"NoSort direction. Default: "desc".
start_datestringNoInclusive start date, YYYY-MM-DD.
end_datestringNoInclusive end date, YYYY-MM-DD.
job_idstringNoFilter by job ID.
typestringNoFilter by type.
assignee_idsstringNoComma-separated user UUIDs.
statusstringNoFilter by status.
request_idstringNoFilter by request ID.

Response

200 with { "success": true, "data": [...], "pagination": { "page": 1, "per_page": 25, "total_pages": 1 } }.

See response conventions and errors.

POST /api/v1/events

POST /api/v1/events

Required scopes: events:write.

JSON body

FieldType / accepted valuesRequiredDetails
namestring or nullNo
descriptionstring or nullNo
job_idinteger or nullNo
request_idinteger or nullNo
start_datestringYes
end_datestringYes
start_timestring or nullNo
end_timestring or nullNo
all_daybooleanNoDefault: false.
multi_daybooleanNoDefault: false.
is_flexibleboolean or nullNo
duration_minutesinteger or nullNo
type"appointment", "task", "event"NoDefault: "event".
status"scheduled", "cancelled", "missed", "completed"NoDefault: "scheduled".
assignee_idsarray of stringNo
recurrence_type"single", "recurring"NoDefault: "single".
repeat_frequencyinteger or nullNo
repeat_frequency_unit"daily", "weekly", "monthly", "yearly", "custom", "forever", "occurrences"NoDefault: "weekly".
repeat_frequency_unit_custom"daily", "weekly", "monthly", "yearly", "custom", "forever", "occurrences"NoDefault: "weekly".
repeat_frequency_scheduleobject or nullNo
repeat_frequency_schedule.daysarray of integerWhen parent supplied
repeat_frequency_schedule.type"weekDays", "monthWeekDays", "monthDays"When parent supplied
repeat_durationinteger or nullNo
repeat_duration_unit"daily", "weekly", "monthly", "yearly", "custom", "forever", "occurrences"NoDefault: "forever".

Unknown body fields are rejected. Conditional requirements are explained above.

Response

201 with { "success": true, "data": ... }. The data contains the result of the operation.

See response conventions and errors.

GET /api/v1/events/:id

GET /api/v1/events/:id

Required scopes: events:read.

Path parameters: id. Use positive integer record IDs from this workspace.

Response

200 with { "success": true, "data": ... }. The data contains the result of the operation.

See response conventions and errors.

PUT /api/v1/events/:id

PUT /api/v1/events/:id

Required scopes: events:write.

Path parameters: id. Use positive integer record IDs from this workspace.

JSON body

FieldType / accepted valuesRequiredDetails
namestring or nullNo
descriptionstring or nullNo
job_idinteger or nullNo
request_idinteger or nullNo
start_datestringNo
end_datestringNo
start_timestring or nullNo
end_timestring or nullNo
all_daybooleanNoDefault: false.
multi_daybooleanNoDefault: false.
is_flexibleboolean or nullNo
duration_minutesinteger or nullNo
type"appointment", "task", "event"NoDefault: "event".
status"scheduled", "cancelled", "missed", "completed"NoDefault: "scheduled".
assignee_idsarray of stringNo
recurrence_type"single", "recurring"NoDefault: "single".
repeat_frequencyinteger or nullNo
repeat_frequency_unit"daily", "weekly", "monthly", "yearly", "custom", "forever", "occurrences"NoDefault: "weekly".
repeat_frequency_unit_custom"daily", "weekly", "monthly", "yearly", "custom", "forever", "occurrences"NoDefault: "weekly".
repeat_frequency_scheduleobject or nullNo
repeat_frequency_schedule.daysarray of integerWhen parent supplied
repeat_frequency_schedule.type"weekDays", "monthWeekDays", "monthDays"When parent supplied
repeat_durationinteger or nullNo
repeat_duration_unit"daily", "weekly", "monthly", "yearly", "custom", "forever", "occurrences"NoDefault: "forever".
update_scope"single", "all", "recreate"No

Unknown body fields are rejected. Conditional requirements are explained above.

Response

200 with { "success": true, "data": ... }. The data contains the result of the operation.

See response conventions and errors.

DELETE /api/v1/events/:id

DELETE /api/v1/events/:id

Required scopes: events:write.

Path parameters: id. Use positive integer record IDs from this workspace.

No request body.

Response

200 with { "success": true, "data": ... }. The data contains the result of the operation.

See response conventions and errors.

PUT /api/v1/events/:id/line-items

PUT /api/v1/events/:id/line-items

Required scopes: events:write.

Path parameters: id. Use positive integer record IDs from this workspace.

JSON body

FieldType / accepted valuesRequiredDetails
line_itemsJSON value or array of object or object or nullNo

Unknown body fields are rejected. Conditional requirements are explained above.

Response

200 with { "success": true, "data": ... }. The data contains the result of the operation.

See response conventions and errors.

PUT /api/v1/events/:id/status

PUT /api/v1/events/:id/status

Required scopes: events:write.

Path parameters: id. Use positive integer record IDs from this workspace.

JSON body

FieldType / accepted valuesRequiredDetails
status"scheduled", "cancelled", "missed", "completed"Yes

Unknown body fields are rejected. Conditional requirements are explained above.

Response

200 with { "success": true, "data": ... }. The data contains the result of the operation.

See response conventions and errors.

On this page