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, andlat+lnggeo lookup),GET /ahjs/{id}, andPATCH /ahjs/{id}to update custom property values. v2 mirrors these under/v2with the standard success envelope. - Updated:
GET /properties— now documents theahjrecord type (custom AHJ properties only) and adds anisCustomboolean 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 exposesectionNameper line item. - New: Vendors — full CRUD via
GET/POST /vendors,GET/PATCH/DELETE /vendors/{vendorId},GET /vendors/search, and many-to-many project linking viaPOST/DELETE /projects/{projectId}/vendors/{vendorId}. Vendor-specific fields:vendorType(enum),website, andprojectIds. - New: Labels —
GET /labels(filter bytype),POST /labels,GET /labels/{labelId}.typeisWORK(work orders) orASSET. v2 mirrors these under/v2with the standard success envelope. - New: Assets —
GET /assets(filter byaccount_id),POST /assets,GET/PATCH /assets/{assetId}(setisArchived: truevia PATCH to archive). v2 mirrors these under/v2with the standard success envelope.
Looking for a specific date? See the entries below.
Assets — list, create, read, update
Manage physical assets tied to a site and account. Reads use project-service GraphQL; creates and updates call fleet-service.
Endpoints
v2 exposes the same routes under the /v2 prefix with the standard { status, message, data } JSON envelope where applicable.
Query parameters (GET /assets)
Create body highlights
- Required:
accountId,siteId,type,manufacturer,model,serialNumber. - Optional:
status,labelIds, dates,description, image file ids,size,expectedLifetime.
PATCH notes
siteIdandaccountIdcannot be changed after creation; PATCH requests that include either field are rejected by request validation with400rather than being silently ignored.- Set
isArchived: trueto archive an asset, orisArchived: falseto unarchive it.
Invoice payments
New: List, get, and create payments on an invoice
You can list payments for an invoice, fetch a single payment by id, and record manual payments. Paths are scoped under the invoice (there is no global /payments resource).
v1 returns a JSON array for list, a single object for get-by-id, and the payment service payload for create (amounts in dollars on reads; create accepts dollars and converts to cents for core).
v2 (/v2/...) uses the same paths with the standard { status, message, data } envelope and dollar amounts on all responses.
Create a payment
Notes
paymentReferenceandnotesare optional.paymentMethodmust be one of:CASH,ACH,CREDIT_CARD,KLARNA,AFFIRM,CHECK.- Core does not expose
GET /payment-records/:id; get-by-id resolves the payment from the invoice’s nested payment records.
