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.
File uploads: streaming support, reliability fixes, and limits
What’s new?
- Streamed multipart uploads for files:
- POST
/projects/{projectId}/files/upload - POST
/requests/{requestId}/files/upload
- POST
- You can provide
phaseInstanceIdeither as a form field or as a?phaseInstanceId=query parameter; the API will include it once in the forwarded payload.
Fixes and improvements
- Robust parsing: files are fully consumed when building the outgoing
multipart/form-data. - Getting a project returns the project manager data.
- Allow files to be added in a certain project or request phase.
Usage notes
- Send
multipart/form-datawith afilepart; optional fields may includephaseInstanceId. - For non‑multipart uploads, send the raw bytes as the request body and pass filename/content type via:
- Headers
X-File-NameandX-File-Content-Type(case‑insensitive), or - Query params
nameandcontent_type.
- Headers
Platform limits
- The API enforces a 10 MB request limit. With base64 encoding and multipart overhead, practical max payload is ~6–7 MB.
- For larger uploads, use an out‑of‑band approach (e.g., presigned upload) and then create the file record by URL.
Compatibility
- No response shape changes. Successful uploads return:
id,name,downloadUrl,type,updatedAt,createdAt,companyId,metaData,source,createdByUser,isArchived.
