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.

Labels — list and create

Manage labels that can be applied to work orders and assets.

Endpoints

MethodPathDescription
GET/labelsList all active labels (paginated, filterable by type)
POST/labelsCreate a label
GET/labels/{labelId}Get a label by ID

v2 exposes the same routes under the /v2 prefix with the standard { status, message, data } envelope.

Query parameters (GET /labels)

ParameterTypeDefaultDescription
typeWORK | ASSETFilter by label type. Omit to return all types.
pageinteger1Page number (1-based, max 1000)
page_sizeinteger20Results per page (max 100)

Create a label

POST /labels
1{
2 "name": "Urgent",
3 "color": "#FF5733",
4 "type": "WORK"
5}
  • name — required, non-empty string.
  • type — required; WORK applies the label to work orders, ASSET to assets. Note: the public API uses WORK where the internal system uses TASK.
  • color — optional hex color code; pass null to create a label with no color.

Label object

1{
2 "id": 101,
3 "name": "Urgent",
4 "color": "#FF5733",
5 "type": "WORK",
6 "createdAt": "2026-04-30T00:00:00.000Z",
7 "updatedAt": "2026-04-30T00:00:00.000Z"
8}