Skip to main content

Endpoints

GET    /api/v1/sites/{siteId}/work-orders/
POST   /api/v1/sites/{siteId}/work-orders/
GET    /api/v1/sites/{siteId}/work-orders/{id}/
PATCH  /api/v1/sites/{siteId}/work-orders/{id}/
DELETE /api/v1/sites/{siteId}/work-orders/{id}/
Work orders track maintenance tasks for building equipment. You can create them manually or link them to an insight for automatic context.
All work order endpoints require authentication. See Authentication for details on API keys and JWT tokens.

Path parameters

ParameterTypeDescription
siteIdstringSite slug (e.g., ucl-east-campus)
iduuidWork order ID (for detail/update/delete)

Query parameters (list endpoint)

ParameterTypeDescription
statusstringFilter by status: open, in_progress, on_hold, completed, cancelled
prioritystringFilter by priority: none, low, medium, high
typestringFilter by type: reactive, preventive, inspection, emergency
equipment_uristringFilter by equipment Fuseki URI
assigned_touuidFilter by assigned user ID

Request body (create / update)

FieldTypeRequiredDescription
titlestringYesShort description of the task
descriptionstringNoDetailed instructions or context
statusstringNoDefault: open. One of: open, in_progress, on_hold, completed, cancelled
prioritystringNoDefault: none. One of: none, low, medium, high
typestringNoDefault: reactive. One of: reactive, preventive, inspection, emergency
categorystringNoFree-text category (e.g., HVAC, Electrical, Plumbing)
equipment_uristringNoFuseki URI of the equipment this task relates to
location_uristringNoFuseki URI of the location (auto-filled from equipment if available)
assigned_touuidNoUser ID of the assignee
requester_namestringNoName of the person who requested the work
requester_emailstringNoEmail of the requester
due_datestringNoISO-8601 deadline
insightuuidNoLink to an insight. Auto-transitions the insight from open to in_progress
parentuuidNoParent work order ID (for sub-tasks)
For PATCH requests, include only the fields you want to change.

Response

FieldTypeDescription
iduuidWork order ID
sitestringSite ID
titlestringTask title
descriptionstringDetailed description
statusstringCurrent status
prioritystringPriority level
typestringWork order type
categorystringCategory label
equipment_uristringEquipment Fuseki URI
location_uristringLocation Fuseki URI
created_byuuidUser who created this work order
created_by_detailobjectCreator’s name and email
assigned_touuid | nullAssigned user ID
assigned_to_detailobject | nullAssignee’s name and email
requester_namestringRequester name
requester_emailstringRequester email
insightuuid | nullLinked insight ID
parentuuid | nullParent work order ID
due_datestring | nullDeadline
started_atstring | nullWhen work began
completed_atstring | nullWhen work finished
created_atstringCreation timestamp
updated_atstringLast update timestamp
comment_countintegerNumber of comments

Insight linking

When you create a work order with an insight field, Tacit automatically transitions that insight from open to in_progress (if it is still open). This connects the detection-to-action pipeline: an FDD system detects a fault, an insight is created, and a work order is assigned to resolve it.

Comments and attachments

Work orders support threaded comments and file attachments:
EndpointMethodDescription
.../work-orders/{id}/comments/GETList comments
.../work-orders/{id}/comments/POSTAdd comment (body field)
.../work-orders/{id}/attachments/GETList attachments
.../work-orders/{id}/attachments/POSTUpload file (file + name fields, multipart)
.../work-orders/{id}/attachments/{attachmentId}/DELETERemove attachment
.../work-orders/{id}/attachments/{attachmentId}/download/GETDownload file

Status codes

CodeDescription
200Success (list, retrieve, update)
201Work order created
204Work order or attachment deleted
400Validation error
401Not authenticated
403No access to this site
404Work order not found
429Rate limit exceeded

Examples

Create a work order

curl -X POST https://app.betacit.com/api/v1/sites/ucl-east-campus/work-orders/ \
  -H "Authorization: Bearer tac_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Inspect cooling coil valve actuator on AHU-01",
    "description": "Valve stuck at 87% open. Check actuator for mechanical failure.",
    "priority": "high",
    "type": "reactive",
    "category": "HVAC",
    "equipment_uri": "http://fuseki:3030/buildings/ucl-east#AHU-01",
    "assigned_to": "7a2b3c4d-5e6f-7890-abcd-ef1234567890",
    "due_date": "2026-03-17T17:00:00Z"
  }'
Response (201)
{
  "id": "b2c3d4e5-6789-0abc-def1-234567890abc",
  "site": "ucl-east-campus",
  "title": "Inspect cooling coil valve actuator on AHU-01",
  "description": "Valve stuck at 87% open. Check actuator for mechanical failure.",
  "status": "open",
  "priority": "high",
  "type": "reactive",
  "category": "HVAC",
  "equipment_uri": "http://fuseki:3030/buildings/ucl-east#AHU-01",
  "location_uri": "",
  "created_by": "5d8a6550-b019-4f56-ac6d-bc128af09a9a",
  "created_by_detail": { "id": "5d8a6550-b019-4f56-ac6d-bc128af09a9a", "username": "pamekitti", "email": "pamekitti.p@betacit.com" },
  "assigned_to": "7a2b3c4d-5e6f-7890-abcd-ef1234567890",
  "assigned_to_detail": { "id": "7a2b3c4d-5e6f-7890-abcd-ef1234567890", "username": "alex", "email": "alex@betacit.com" },
  "requester_name": "",
  "requester_email": "",
  "insight": null,
  "parent": null,
  "due_date": "2026-03-17T17:00:00Z",
  "started_at": null,
  "completed_at": null,
  "created_at": "2026-03-15T11:00:00Z",
  "updated_at": "2026-03-15T11:00:00Z",
  "comment_count": 0
}

Create from an insight

Link a work order to an insight to connect detection to action. The insight automatically transitions to in_progress:
Request
{
  "title": "Replace chiller compressor — efficiency below threshold",
  "priority": "high",
  "type": "reactive",
  "equipment_uri": "http://fuseki:3030/buildings/ucl-east#Chiller-01",
  "insight": "d4f7a1b2-8e3c-4f9a-b5d6-1c2e3f4a5b6c"
}
The response is the standard work order object with the insight field populated.

List with filters

curl "https://app.betacit.com/api/v1/sites/ucl-east-campus/work-orders/?status=open&priority=high" \
  -H "Authorization: Bearer tac_your_api_key_here"
Response (200)
[
  {
    "id": "b2c3d4e5-6789-0abc-def1-234567890abc",
    "title": "Inspect cooling coil valve actuator on AHU-01",
    "status": "open",
    "priority": "high",
    "type": "reactive",
    "category": "HVAC",
    "equipment_uri": "http://fuseki:3030/buildings/ucl-east#AHU-01",
    "assigned_to": "7a2b3c4d-5e6f-7890-abcd-ef1234567890",
    "due_date": "2026-03-17T17:00:00Z",
    "created_at": "2026-03-15T11:00:00Z",
    "comment_count": 0
  }
]

Update status to completed

curl -X PATCH https://app.betacit.com/api/v1/sites/ucl-east-campus/work-orders/b2c3d4e5-6789-0abc-def1-234567890abc/ \
  -H "Authorization: Bearer tac_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{ "status": "completed", "completed_at": "2026-03-16T14:30:00Z" }'
Response (200)
{
  "id": "b2c3d4e5-6789-0abc-def1-234567890abc",
  "title": "Inspect cooling coil valve actuator on AHU-01",
  "status": "completed",
  "priority": "high",
  "type": "reactive",
  "completed_at": "2026-03-16T14:30:00Z",
  "updated_at": "2026-03-16T14:30:00Z",
  "comment_count": 0
}