Projects
The Project object — a company workspace that holds orders, contacts, catalog and team — and the endpoints for listing, creating, updating and deleting projects.
A project is a company's workspace. Orders, contacts, materials, configurators, products, warehouses, the wiki and the
team all belong to a project. Almost every other endpoint is nested under /api/v1/projects/{project.uuid}.
A user can own projects and be a member of other people's projects. A project works only while its owner has an
active subscription. Otherwise every project-scoped endpoint returns 404 RES_NOT_FOUND, and List Projects
shows the project with is_active: false.
Field types follow the field notation.
Access
Every endpoint on this page requires the projects OAuth scope.
Project Object
Project Structure
What Get Project returns. It describes the project from the authenticated user's point of view: the role and permissions are the user's own in this project.
| Field | Type | Description |
|---|---|---|
| uuid | uuid | Project ID |
| name | string | Name, 1–255 characters |
| owner_uuid | uuid | The project owner |
| is_owner | boolean | Whether the authenticated user owns the project. Owners bypass all permission checks |
| role_uuid | uuid | The user's role in the project |
| role_name | string | Name of that role |
| permissions | integer | The role's permission bitmask |
| price_step | decimal | Rounding step for money amounts, see Price step |
| report_settings | ?object | Report options, see Report Settings Structure |
| created_at | ISO8601 datetime | When the project was created |
Example Project
{
"uuid": "0198e7a0-0000-7000-8000-000000000001",
"name": "Acme Windows",
"owner_uuid": "0198e7aa-91f0-7c22-a4d1-0f9e8d7c6b5a",
"is_owner": true,
"role_uuid": "0198e7a0-0000-7000-8000-0000000000a1",
"role_name": "Owner",
"permissions": 4291608416878591,
"price_step": 0.01,
"report_settings": {
"revenue_mode": "pipeline"
},
"created_at": "2026-06-26T10:00:00.000Z"
}
Price step
price_step is the rounding step applied to money amounts in the project: one of 0.001, 0.01, 0.1, 1, 10,
50, 100, 500, 1000; default 0.01. It is a step, not a number of decimal places: with 50, a price of 1 234
rounds to 1 250.
Configurator pricing and the app's display both round to this step. Amounts stored on orders are returned unrounded.
Report Settings Structure
| Field | Type | Description |
|---|---|---|
| revenue_mode | string | How the revenue report counts revenue: pipeline (default) counts every order that is not canceled; actual counts only orders in a done-type status and reports the rest separately as potential revenue |
null means the defaults.
List Projects
GET /api/v1/projects
Returns every project the user is a member of, owned projects first, then by name. The list includes projects whose owner's subscription has lapsed.
Response
200 OK — an array of objects:
| Field | Type | Description |
|---|---|---|
| uuid | uuid | Project ID |
| name | string | Name |
| user_uuid | uuid | The owner |
| is_owner | boolean | Whether the authenticated user owns the project |
| is_active | boolean | Whether the owner's subscription is active today |
| created_at | ISO8601 datetime | When the project was created |
[
{
"uuid": "0198e7a0-0000-7000-8000-000000000001",
"name": "Acme Windows",
"user_uuid": "0198e7aa-91f0-7c22-a4d1-0f9e8d7c6b5a",
"is_owner": true,
"is_active": true,
"created_at": "2026-06-26T10:00:00.000Z"
}
]
Errors
| Status | Code | When |
|---|---|---|
| 403 | AUTH_INSUFFICIENT_SCOPE |
The token lacks projects |
Create Project
POST /api/v1/projects
Creates a project owned by the authenticated user. The new project is set up with:
- one default funnel with four statuses: New (
new, the default and the widget default), In progress (active), Completed (done) and Canceled (canceled); - two roles, Owner with every permission and Manager with a typical sales set;
- the user as its only member, with the Owner role.
Names are created in the user's language.
The user needs an active subscription, and the number of projects they own must be below their plan's limit.
JSON Params
| Field | Type | Description |
|---|---|---|
| name | string | 1–255 characters |
Example Request
{
"name": "Acme Windows"
}
Response
201 Created
{
"uuid": "0198e7a0-0000-7000-8000-000000000001",
"name": "Acme Windows",
"created_at": "2026-06-26T10:00:00.000Z",
"updated_at": "2026-06-26T10:00:00.000Z"
}
Errors
| Status | Code | When |
|---|---|---|
| 400 | REQ_VALIDATION_FAILED |
The body does not match the schema |
| 403 | AUTH_INSUFFICIENT_SCOPE |
The token lacks projects |
| 403 | BILL_SUBSCRIPTION_EXPIRED |
The user has no active subscription |
| 403 | LIMIT_PROJECT_COUNT_REACHED |
The user already owns as many projects as the plan allows |
Get Project
GET /api/v1/projects/{project.uuid}
Returns the project as seen by the authenticated user. Any member can call it.
Errors
| Status | Code | When |
|---|---|---|
| 403 | AUTH_INSUFFICIENT_SCOPE |
The token lacks projects |
| 404 | RES_NOT_FOUND |
The project does not exist, the user is not a member, or the owner's subscription is not active |
Modify Project
PATCH /api/v1/projects/{project.uuid}
Updates only the fields you send.
Requires can_edit_project.
JSON Params
At least one field must be present.
| Field | Type | Description |
|---|---|---|
| name? | string | 1–255 characters |
| price_step? | decimal | One of the allowed steps |
| report_settings? | ?object | Report settings; null resets them to the defaults |
Example Request
{
"price_step": 10,
"report_settings": {
"revenue_mode": "actual"
}
}
Response
204 No Content
Errors
| Status | Code | When |
|---|---|---|
| 400 | REQ_VALIDATION_FAILED |
The body does not match the schema, or price_step is not an allowed value |
| 400 | REQ_NO_DATA_PROVIDED |
The body has no fields |
| 403 | AUTH_INSUFFICIENT_SCOPE |
The token lacks projects |
| 403 | AUTH_NO_PROJECT_ACCESS |
The user's role lacks can_edit_project |
| 404 | RES_NOT_FOUND |
The project does not exist or is not accessible |
Replace Project
PUT /api/v1/projects/{project.uuid}
Same as Modify Project, but name and report_settings are required. report_settings may be
null. price_step stays optional and is left unchanged when omitted.
Requires can_edit_project.
Response
204 No Content
Errors
Same as Modify Project, except REQ_NO_DATA_PROVIDED.
Delete Project
DELETE /api/v1/projects/{project.uuid}
Permanently deletes the project and everything in it: orders, contacts, catalog, warehouses, wiki and memberships. This cannot be undone.
Only the project owner can delete a project.
Response
204 No Content
Errors
| Status | Code | When |
|---|---|---|
| 403 | AUTH_INSUFFICIENT_SCOPE |
The token lacks projects |
| 403 | PROJECT_OWNER_REQUIRED |
The user is not the project owner |
| 404 | RES_NOT_FOUND |
The project does not exist or is not accessible |