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

Recent highlights

  • 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.
  • New: Invoice payments — GET /invoices/{invoiceId}/payments, GET /invoices/{invoiceId}/payments/{paymentId}, and POST /invoices/{invoiceId}/payments (optional paymentReference on create).
  • New: Quotes — full CRUD via GET/POST /quotes, GET/PATCH/DELETE /quotes/{quoteId}, GET /quotes/{quoteId}/pdf, POST /quotes/{quoteId}/send, and GET /opportunities/{opportunityId}/quotes.
  • New: Work order line items — PUT /work-orders/{workOrderId}/line-items replaces line items on service work orders (account type). GET /work-orders/{workOrderId} now includes lineItems when present.
  • New: Taxes — GET /taxes lists company tax rates with pagination and archived filtering.
  • New: Bills — full CRUD for project bills via GET/POST /bills, GET/PATCH/DELETE /bills/{billId}, and GET /projects/{projectId}/bills. Supports LINE_ITEMS and PERCENTAGE calculation methods.
  • Improvement: Nullable fields on PATCH /projects/{projectId}, PATCH /accounts/{accountId}, and PATCH /clients/{clientId} — pass null to clear a field (e.g. description, ownerId, primaryEmail) or any custom property.

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.