Contract changes
New endpoints, changed fields, deprecations, and behavior changes that can affect an integration are recorded here.
The API remains under the v1 path. Breaking changes require an explicit migration path and will be announced here before they take effect.
- v1File uploads
- Added `POST /api/v1/files`: upload a file (raw request body, max. 20 MB, common image and document types) and receive a file id. Unused uploads expire after 24 hours.
- File fields in `POST /api/v1/form-submissions` now accept an array of file ids as their answer value (max. 5 per field, each id usable once). Previously file fields were rejected with `file_upload_not_supported`.
- Added `POST /api/v1/customer-requests/{customerRequestId}/files` to attach an uploaded file directly to a customer request.
- v1Customer requests
- Added customer requests as a first-class REST resource: list, create, get, patch, and delete (archive) under `/api/v1/customer-requests`.
- Creating a customer request now places a Kanban card on the organization's customer request board. `POST /api/v1/form-submissions` with the form option "Create customer request" enabled does the same — those requests are readable via this resource.
- POST `/api/v1/customer-requests/{customerRequestId}/offers` creates a new draft quote for the request. Webhooks fire once the quote is finalized, not for drafts.
- v1Public API launch
- Published the first stable v1 contract for customers, projects, tasks, members, documents, forms, and webhook subscriptions.
- Standardized success and error envelopes, cursor pagination, public field whitelists, idempotency, and rate-limit responses.
- Added signed webhook delivery with retries, secret rotation, wildcard subscriptions, and automatic endpoint disabling.
- Published this Developer Portal and the complete Scalar OpenAPI reference.