BlueSuite Developers
REST API v1

Contacts, properties, and tasks

Contacts, properties, and tasks in the BlueSuite REST API

Contacts represent people and companies; properties represent service locations. Use contact IDs from this workspace and user UUIDs from Users. Contact creation defaults to type none; Leads defaults a newly created contact to lead.

Property operations under a contact create, update, or remove that contact's link to a property. Deleting the link does not mean deleting the property everywhere. GET /properties searches properties across the workspace.

Contact tasks have a title, optional due date and assignee, and optional recurring schedule. Reminders default to off. A recurring task needs a due date; a finite repeat duration needs a count, and a custom weekly/monthly pattern needs selected days. See recurring work for the shared pattern fields. Task status uses its dedicated endpoint. When updating a repeating task, choose the appropriate update_scope.

List contacts with any of a set of tags using tag_ids=1,2. A record carrying either tag matches. When no records match, the result is empty.

Example: create a contact

curl 'https://my.bluesuite.app/api/v1/contacts' \
  -H "Authorization: Bearer $BLUESUITE_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"first_name":"Jamie","last_name":"Rivera","email":"jamie@example.com","type":"customer"}'

GET /api/v1/contacts

GET /api/v1/contacts

Required scopes: contacts: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".
typestringNoFilter by type.
owner_idstringNoFilter by owner UUID from GET /users.
tag_idsstringNoComma-separated tag IDs. Tags must match this resource type.

Response

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

See response conventions and errors.

POST /api/v1/contacts

POST /api/v1/contacts

Required scopes: contacts:write.

JSON body

FieldType / accepted valuesRequiredDetails
first_namestringNoDefault: "".
last_namestringNoDefault: "".
emailstring or nullNo
phonestring or nullNo
secondary_emailstring or nullNo
secondary_phonestring or nullNo
companystring or nullNo
company_departmentstring or nullNo
company_positionstring or nullNo
title"mr", "mrs", "miss", "ms", "dr", "prof", "rev" or nullNo
type"none", "customer", "lead", "former_customer", "contractor", "partner", "vendor", "other"NoDefault: "none".
owner_idstring or nullNo
infoJSON value or nullNo
custom_fieldsJSON value or nullNo

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/properties

GET /api/v1/properties

Required scopes: properties: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".
property_typestringNoProperty type.

Response

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

See response conventions and errors.

GET /api/v1/contacts/:id

GET /api/v1/contacts/:id

Required scopes: contacts: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/contacts/:id

PUT /api/v1/contacts/:id

Required scopes: contacts:write.

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

JSON body

FieldType / accepted valuesRequiredDetails
first_namestringNoDefault: "".
last_namestringNoDefault: "".
emailstring or nullNo
phonestring or nullNo
secondary_emailstring or nullNo
secondary_phonestring or nullNo
companystring or nullNo
company_departmentstring or nullNo
company_positionstring or nullNo
title"mr", "mrs", "miss", "ms", "dr", "prof", "rev" or nullNo
type"none", "customer", "lead", "former_customer", "contractor", "partner", "vendor", "other"NoDefault: "none".
owner_idstring or nullNo
infoJSON value or nullNo
custom_fieldsJSON value 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.

DELETE /api/v1/contacts/:id

DELETE /api/v1/contacts/:id

Required scopes: contacts: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/contacts/:id/properties

GET /api/v1/contacts/:id/properties

Required scopes: properties:read.

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

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".

Response

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

See response conventions and errors.

POST /api/v1/contacts/:id/properties

POST /api/v1/contacts/:id/properties

Required scopes: properties:write.

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

JSON body

FieldType / accepted valuesRequiredDetails
addressobjectYes
address.streetstringNoDefault: "".
address.street_2stringNoDefault: "".
address.citystringNoDefault: "".
address.statestringNoDefault: "".
address.postal_codestringNoDefault: "".
address.countrystringNoDefault: "".
property_type"single-family", "apartment", "complex", "townhouse", "land", "commercial", "other"NoDefault: "single-family".
role"owner", "tenant", "manager", "agent", "other"NoDefault: "owner".

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/contacts/:id/tasks

GET /api/v1/contacts/:id/tasks

Required scopes: contacts:read.

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

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".
statusstringNoFilter by status.

Response

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

See response conventions and errors.

POST /api/v1/contacts/:id/tasks

POST /api/v1/contacts/:id/tasks

Required scopes: contacts:write.

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

JSON body

FieldType / accepted valuesRequiredDetails
titlestringYesminLength: 1.
descriptionstring or nullNo
due_datestring or nullNoISO timestamp. Reminders fire relative to this.
assignee_idstring or nullNo
reminders_enabledbooleanNoDefault: false.
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.

PUT /api/v1/contacts/:id/properties/:propertyId

PUT /api/v1/contacts/:id/properties/:propertyId

Required scopes: properties:write.

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

JSON body

FieldType / accepted valuesRequiredDetails
addressobjectNo
address.streetstringNoDefault: "".
address.street_2stringNoDefault: "".
address.citystringNoDefault: "".
address.statestringNoDefault: "".
address.postal_codestringNoDefault: "".
address.countrystringNoDefault: "".
property_type"single-family", "apartment", "complex", "townhouse", "land", "commercial", "other"No
role"owner", "tenant", "manager", "agent", "other"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/contacts/:id/properties/:propertyId

DELETE /api/v1/contacts/:id/properties/:propertyId

Required scopes: properties:write.

Path parameters: id, propertyId. 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/contacts/:id/tasks/:taskId

GET /api/v1/contacts/:id/tasks/:taskId

Required scopes: contacts:read.

Path parameters: id, taskId. 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/contacts/:id/tasks/:taskId

PUT /api/v1/contacts/:id/tasks/:taskId

Required scopes: contacts:write.

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

JSON body

FieldType / accepted valuesRequiredDetails
titlestringNominLength: 1.
descriptionstring or nullNo
due_datestring or nullNoISO timestamp. Reminders fire relative to this.
assignee_idstring or nullNo
reminders_enabledbooleanNoDefault: false.
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/contacts/:id/tasks/:taskId

DELETE /api/v1/contacts/:id/tasks/:taskId

Required scopes: contacts:write.

Path parameters: id, taskId. 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/contacts/:id/tasks/:taskId/status

PUT /api/v1/contacts/:id/tasks/:taskId/status

Required scopes: contacts:write.

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

JSON body

FieldType / accepted valuesRequiredDetails
status"open", "completed", "overdue"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