Installed equipment
Installed equipment in the BlueSuite REST API
Track units installed at customer properties, such as furnaces and water heaters. A property_id is required; the contact is separate and may change while the unit stays in place. Company trucks and tools belong in Company equipment.
auto_reminders_enabled defaults to true. Warranty/replacement dates can therefore schedule customer-facing reminders. Explicitly disable this field if automatic reminders are not wanted. Custom reminders independently select send_customer and send_internal; their defaults are false and true respectively.
The notifications REST endpoints correspond to installed-equipment reminder tools in MCP. Notes record service history. Job links connect the unit with past work; removing a link does not delete the job or equipment. Setting installed_by_job_id on creation also adds that job link.
There are no public update endpoints for installed-equipment notes or reminders. Their supported operations are listed below.
GET /api/v1/installed-equipment
GET /api/v1/installed-equipmentRequired scopes: installed_equipment:read.
Query parameters
| Field | Type / accepted values | Required | Details |
|---|---|---|---|
page | integer | No | Page number, starting at 1. Default: 1. |
per_page | integer | No | Records per page, from 1 to 100. Default: 25. minimum: 1. maximum: 100. |
search | string | No | Search text. maxLength: 100. |
sort_by | string | No | Sort column. See the supported columns below when listed. |
sort_direction | "asc", "desc" | No | Sort direction. Default: "desc". |
status | string | No | Filter by status. |
contact_id | string | No | Filter by contact ID. |
property_id | string | No | Filter by property ID. |
Response
200 with { "success": true, "data": [...], "pagination": { "page": 1, "per_page": 25, "total_pages": 1 } }.
See response conventions and errors.
POST /api/v1/installed-equipment
POST /api/v1/installed-equipmentRequired scopes: installed_equipment:write.
JSON body
| Field | Type / accepted values | Required | Details |
|---|---|---|---|
name | string | No | |
property_id | integer | Yes | |
contact_id | integer or null | No | |
equipment_type | string or null | No | e.g. "Furnace", "Water heater". |
make | string or null | No | |
model | string or null | No | |
serial_number | string or null | No | |
description | string or null | No | |
status | "active", "needs_service", "replaced", "removed" | No | Default: "active". |
install_date | string or null | No | |
warranty_expiration | string or null | No | |
warranty_number | string or null | No | |
replacement_date | string or null | No | |
auto_reminders_enabled | boolean | No | Default: true. |
installed_by_job_id | integer or null | No | |
custom_fields | JSON value or null | No |
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/installed-equipment/:id
GET /api/v1/installed-equipment/:idRequired scopes: installed_equipment: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/installed-equipment/:id
PUT /api/v1/installed-equipment/:idRequired scopes: installed_equipment:write.
Path parameters: id. Use positive integer record IDs from this workspace.
JSON body
| Field | Type / accepted values | Required | Details |
|---|---|---|---|
name | string | No | |
property_id | integer | No | |
contact_id | integer or null | No | |
equipment_type | string or null | No | e.g. "Furnace", "Water heater". |
make | string or null | No | |
model | string or null | No | |
serial_number | string or null | No | |
description | string or null | No | |
status | "active", "needs_service", "replaced", "removed" | No | Default: "active". |
install_date | string or null | No | |
warranty_expiration | string or null | No | |
warranty_number | string or null | No | |
replacement_date | string or null | No | |
auto_reminders_enabled | boolean | No | Default: true. |
installed_by_job_id | integer or null | No | |
custom_fields | JSON value or null | 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/installed-equipment/:id
DELETE /api/v1/installed-equipment/:idRequired scopes: installed_equipment: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.
GET /api/v1/installed-equipment/:id/jobs
GET /api/v1/installed-equipment/:id/jobsRequired scopes: installed_equipment: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.
POST /api/v1/installed-equipment/:id/jobs
POST /api/v1/installed-equipment/:id/jobsRequired scopes: installed_equipment:write.
Path parameters: id. Use positive integer record IDs from this workspace.
JSON body
| Field | Type / accepted values | Required | Details |
|---|---|---|---|
job_id | integer | Yes |
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/installed-equipment/:id/notes
GET /api/v1/installed-equipment/:id/notesRequired scopes: installed_equipment:read.
Path parameters: id. Use positive integer record IDs from this workspace.
Query parameters
| Field | Type / accepted values | Required | Details |
|---|---|---|---|
page | integer | No | Page number, starting at 1. Default: 1. |
per_page | integer | No | Records per page, from 1 to 100. Default: 25. minimum: 1. maximum: 100. |
search | string | No | Search text. maxLength: 100. |
sort_by | string | No | Sort column. See the supported columns below when listed. |
sort_direction | "asc", "desc" | No | Sort direction. Default: "desc". |
type | string | No | Filter by type. |
Response
200 with { "success": true, "data": [...], "pagination": { "page": 1, "per_page": 25, "total_pages": 1 } }.
See response conventions and errors.
POST /api/v1/installed-equipment/:id/notes
POST /api/v1/installed-equipment/:id/notesRequired scopes: installed_equipment:write.
Path parameters: id. Use positive integer record IDs from this workspace.
JSON body
| Field | Type / accepted values | Required | Details |
|---|---|---|---|
title | string | Yes | minLength: 1. |
content | string or null | No | |
type | "note", "maintenance", "repair", "inspection" | No | Default: "note". |
activity_date | string or string or null | No | When the work happened, if not when it was recorded. |
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/installed-equipment/:id/notifications
GET /api/v1/installed-equipment/:id/notificationsRequired scopes: installed_equipment:read.
Path parameters: id. Use positive integer record IDs from this workspace.
Query parameters
| Field | Type / accepted values | Required | Details |
|---|---|---|---|
page | integer | No | Page number, starting at 1. Default: 1. |
per_page | integer | No | Records per page, from 1 to 100. Default: 25. minimum: 1. maximum: 100. |
search | string | No | Search text. maxLength: 100. |
sort_by | string | No | Sort column. See the supported columns below when listed. |
sort_direction | "asc", "desc" | No | Sort direction. Default: "desc". |
Response
200 with { "success": true, "data": [...], "pagination": { "page": 1, "per_page": 25, "total_pages": 1 } }.
See response conventions and errors.
POST /api/v1/installed-equipment/:id/notifications
POST /api/v1/installed-equipment/:id/notificationsRequired scopes: installed_equipment:write.
Path parameters: id. Use positive integer record IDs from this workspace.
JSON body
| Field | Type / accepted values | Required | Details |
|---|---|---|---|
name | string | Yes | minLength: 1. |
subject | string | Yes | minLength: 1. |
message | string | Yes | minLength: 1. |
remind_on | string | Yes | Date the reminder fires (YYYY-MM-DD). Format: date. |
reason | "warranty", "replacement", "custom" | No | Default: "custom". |
send_customer | boolean | No | Default: false. |
send_internal | boolean | No | Default: true. |
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.
DELETE /api/v1/installed-equipment/:id/jobs/:jobId
DELETE /api/v1/installed-equipment/:id/jobs/:jobIdRequired scopes: installed_equipment:write.
Path parameters: id, jobId. 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.
DELETE /api/v1/installed-equipment/:id/notes/:noteId
DELETE /api/v1/installed-equipment/:id/notes/:noteIdRequired scopes: installed_equipment:write.
Path parameters: id, noteId. 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.
DELETE /api/v1/installed-equipment/:id/notifications/:notificationId
DELETE /api/v1/installed-equipment/:id/notifications/:notificationIdRequired scopes: installed_equipment:write.
Path parameters: id, notificationId. 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.