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.

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}