Welcome to the Coperniq API release notes. This section highlights noteworthy changes across endpoints, schemas, and docs.
Recent highlights
- 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. - New: Invoice payments —
GET /invoices/{invoiceId}/payments,GET /invoices/{invoiceId}/payments/{paymentId}, andPOST /invoices/{invoiceId}/payments(optionalpaymentReferenceon create). - New: Quotes — full CRUD via
GET/POST /quotes,GET/PATCH/DELETE /quotes/{quoteId},GET /quotes/{quoteId}/pdf,POST /quotes/{quoteId}/send, andGET /opportunities/{opportunityId}/quotes. - New: Work order line items —
PUT /work-orders/{workOrderId}/line-itemsreplaces line items on service work orders (account type).GET /work-orders/{workOrderId}now includeslineItemswhen present. - New: Taxes —
GET /taxeslists company tax rates with pagination and archived filtering. - New: Bills — full CRUD for project bills via
GET/POST /bills,GET/PATCH/DELETE /bills/{billId}, andGET /projects/{projectId}/bills. Supports LINE_ITEMS and PERCENTAGE calculation methods. - Improvement: Nullable fields on
PATCH /projects/{projectId},PATCH /accounts/{accountId}, andPATCH /clients/{clientId}— passnullto clear a field (e.g.description,ownerId,primaryEmail) or any custom property.
Looking for a specific date? See the entries below.
Projects search endpoint
What’s new?
- Added GET
/projects/searchto query projects using up to two filters joined bylogic(and/or). - Supports standard fields (e.g.,
status,title,city,type, numeric/datetime fields) and custom properties by key name. - Operators:
eq,neq,gt,gte,lt,lte,contains,in,nin,between,exists. - Pagination and sorting supported via
page_size,page, andorder_by.
Parameters
prop1,op1,value1(required)prop2,op2,value2(optional)logic:and|or(defaultand)page_size,page,order_by
Value formats
in/ninlists:- Plain CSV:
value1=ACTIVE,ON_HOLD - Quoted CSV (values with commas):
value1="Last, First",Other - JSON array:
value1=["Last, First","Other"]
- Plain CSV:
betweenranges:- Dates:
value1=2025-01-01,2025-12-31 - Numbers:
value1=10000,50000
- Dates:
Examples
- Status equals ACTIVE:
GET /v1/projects/search?prop1=status&op1=eq&value1=ACTIVE
- Title contains “Solar”:
GET /v1/projects/search?prop1=name&op1=contains&value1=Solar
- Status IN (ACTIVE, ON_HOLD) AND city = Austin:
GET /v1/projects/search?prop1=status&op1=in&value1=ACTIVE,ON_HOLD&logic=and&prop2=city&op2=eq&value2=Austin
- Custom multiselect includes any of [“1”, “Option, with a comma”]:
GET /v1/projects/search?prop1=custom_multiselect&op1=in&value1=["1","Option, with a comma"]
- Updated within 2025:
GET /v1/projects/search?prop1=updatedAt&op1=between&value1=2025-01-01,2025-12-31
