> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.coperniq.io/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.coperniq.io/_mcp/server.

## Folders & Folder Contents

Added CRUD for project folders.

* `GET /projects/{project_id}/folders` — list root-level folders (not nested in another folder), plus workflow phase rows. Pass `include_archived=true` to include archived folders (default `false`).
* `GET /opportunities/{opportunity_id}/folders` — same functionality as list project folders.
* `POST /projects/{project_id}/folders` - create folder.
* `POST /opportunities/{opportunity_id}/folders` - create folder.
* `GET /folders/{folder_id}` — get by id.
* `PATCH /folders/{folder_id}` — rename, archive/unarchive (`isActive`), or move (set `parentId`/`phaseInstanceId`) — moving isn't a separate operation.
* `DELETE /folders/{folder_id}` — delete (also removes any subfolders and their files).
* `GET /folders/{folder_id}/contents` — list a folder's direct children (subfolders, files, forms).
* `GET /phases/{phase_instance_id}/contents` — list a phase's direct children, same shape as folder contents.

`name` is required on create. `parentId` and `phaseInstanceId` are mutually exclusive — a folder sits either at the root of a phase or nested under another folder, not both — and folders nest at most 2 levels deep. Folders use `isActive` for their archived state.

A project's or opportunity's Docs tab groups everything under workflow phases, but phases aren't real `Folder` rows — they're synthesized from `PhaseInstance`s. So the two list endpoints above return those phase rows (`type: "phase"`) alongside root-level real folders (`type: "folder"`), matching what the UI shows.

Every item from a `/contents` endpoint carries a `type` field (`folder`, `file`, or `form`) — forms are ordinary files under the hood (`isForm: true`), inheriting their folder/phase placement, so they surface here rather than as a separate concept. On these `/contents` endpoints only, a file's MIME/category label is named `fileType` instead of `type`, to avoid colliding with the folder/file/form discriminator; this does not affect `GET /projects/{project_id}/files`.

Also added:

* `GET`/`PATCH`/`DELETE /files/{file_id}` - replace the entity-scoped get/update/delete endpoints, which will still work until fully deprecated.

## Create Form PDF

You can now use the API to create the form PDF similar to what an automation email would send.

* `POST /forms/{form_id}/pdf` to export a form to PDF.
* Optional body fields: `imagesOnly`, `imagesInRow` (0-6), `includeImageMetadata`.
* Returns `{ pdfBase64, contentType, name }`.

## Technical Details page, and documenting how to archive records

Added a **Technical Details** page (between Quick Start and Webhooks in the sidebar). Rate limits moved there from the Authentication page — same content, new home. Also added a new **Archiving records** section: most records can be archived instead of permanently deleted — use that object's `PATCH` endpoint and set `isActive` to `false` (some resources still use `isArchived`; check the endpoint reference).