Welcome to the Coperniq API release notes. This section highlights noteworthy changes across endpoints, schemas, and docs.

Recent highlights

  • New: Object naming aligned with Coperniq UI — clients are now accounts, requests are now opportunities, and comments are now notes.
  • New: Retrieve archived records by passing include_archived=true on any GET list or get-by-ID endpoint for projects, opportunities, accounts, and workflows.
  • New: Form template endpoints — GET /form-templates and GET /form-templates/{formTemplateId} — let you retrieve workflow templates and their structure.
  • New: PATCH /form-templates/{formTemplateId} — update a form template’s name, layout, assignee, collaborators, labels, and due date configuration.
  • New: Streamed file uploads for projects and opportunities with binary-safe handling

Documentation updates

  • Clarified file upload usage, binary limits, and recommended large-file approach
  • Documented full TradeGroup, ProductCategory, and ServiceCategory enums for catalog items and wired them into the public schemas.

Looking for a specific date? See the entries below.

Form template update endpoint

Update a form template

A new endpoint lets you update an existing form template:

  • PATCH /form-templates/{formTemplateId} — Update a form template’s name, property layout, assignee, collaborators, labels, and due date configuration.

All fields are optional — only provided fields are updated. formLayouts is optional — when provided, it fully replaces all layout groups and their fields; omit it to leave the existing layout untouched. Include existing groups with their id to preserve them, or omit the id for new groups. Groups not included are removed. Array order determines position on the form.

Fields within each group are set via the properties array, where each item specifies a type (TEXT, NUMERIC, DROPDOWN, or FILE) or references an existing project property via projectPropertyKey.

Note: Layout id values (for groups and properties) are not stable — they change after every update. Always re-fetch the template via GET /form-templates/{formTemplateId} to get current IDs before referencing them in a subsequent update.

PATCH /form-templates/{formTemplateId}
1{
2 "name": "Site Inspection Checklist",
3 "formLayouts": [
4 {
5 "name": "Site Details",
6 "properties": [
7 { "projectPropertyKey": "site_address" },
8 { "type": "TEXT", "name": "Inspector Notes", "isRequired": false }
9 ]
10 }
11 ],
12 "assigneeProperty": "OWNER",
13 "dueDateXDaysAfter": 7
14}