Welcome to the Coperniq API release notes. This section highlights noteworthy changes across endpoints, schemas, and docs.

Recent highlights

  • New: AHJs — GET /ahjs (search, filter, and lat+lng geo lookup), GET /ahjs/{id}, and PATCH /ahjs/{id} to update custom property values. v2 mirrors these under /v2 with the standard success envelope.
  • Updated: GET /properties — now documents the ahj record type (custom AHJ properties only) and adds an isCustom boolean to every property to distinguish custom columns from built-in standard ones.
  • New: Sections — line items on projects, invoices, and bills can now be grouped into named sections (matching quotes and work orders); read responses expose sectionName per line item.
  • New: Vendors — full CRUD via GET/POST /vendors, GET/PATCH/DELETE /vendors/{vendorId}, GET /vendors/search, and many-to-many project linking via POST/DELETE /projects/{projectId}/vendors/{vendorId}. Vendor-specific fields: vendorType (enum), website, and projectIds.
  • New: Labels — GET /labels (filter by type), POST /labels, GET /labels/{labelId}. type is WORK (work orders) or ASSET. v2 mirrors these under /v2 with the standard success envelope.
  • New: Assets — GET /assets (filter by account_id), POST /assets, GET/PATCH /assets/{assetId} (set isArchived: true via PATCH to archive). v2 mirrors these under /v2 with the standard success envelope.

Looking for a specific date? See the entries below.

Work order notes and work items

New: Work order notes endpoints

You can now create and list notes directly on work orders.

MethodPathDescription
POST/work-orders/{workOrderId}/notesAdd a note to a work order
GET/work-orders/{workOrderId}/notesList all notes on a work order

Create a note

POST /work-orders/{workOrderId}/notes
1{
2 "body": "Panels installed. Awaiting inspection sign-off.",
3 "fileIds": []
4}

Response:

1{
2 "id": 4029970,
3 "note": "Panels installed. Awaiting inspection sign-off.",
4 "createdAt": "2026-04-15T22:41:03.548Z",
5 "updatedAt": "2026-04-15T22:41:03.548Z"
6}

List notes

GET /work-orders/{workOrderId}/notes?page=1&page_size=20
1{
2 "notes": [
3 {
4 "id": 4029970,
5 "note": "Panels installed. Awaiting inspection sign-off.",
6 "createdAt": "2026-04-15T22:41:03.548Z",
7 "createdByUser": {
8 "id": 42,
9 "firstName": "Jane",
10 "lastName": "Doe",
11 "email": "jane@example.com"
12 }
13 }
14 ],
15 "totalCount": 1
16}

New: workItems on work order responses

GET /work-orders/{workOrderId} now includes a workItems array containing Blueprint workflow items linked to the work order. Two types are supported:

  • FORM — a form instance (e.g. site survey, roof mount checklist)
  • FILE_REQUEST — a document upload request (e.g. shade report)
1{
2 "id": 2025433,
3 "title": "[BP] Tech site audit (post-sale)",
4 "workItems": [
5 {
6 "type": "FORM",
7 "id": 1236647,
8 "name": "[BP] Site Survey - Roof Mount",
9 "templateId": 50,
10 "status": "OPEN",
11 "isCompleted": false,
12 "completedAt": null,
13 "dueDate": null
14 },
15 {
16 "type": "FILE_REQUEST",
17 "id": 2556,
18 "name": "Shade Report",
19 "status": "IN_PROGRESS"
20 }
21 ]
22}

If no work items are linked, workItems is an empty array.