# Digital workspaces

Manage CRM digital workspaces: create, get, update and delete them, and bind smart process types to them. A workspace is a separate section of the Bitrix24 account that groups the smart processes bound to it.

Bitrix24 API: `crm.automatedsolution.*`
Scope: `crm`

## Operations

- [Create workspace](./automated-solutions/create.md) — `POST /v1/automated-solutions`
- [List workspaces](./automated-solutions/list.md) — `GET /v1/automated-solutions`
- [Get workspace](./automated-solutions/get.md) — `GET /v1/automated-solutions/:id`
- [Update workspace](./automated-solutions/update.md) — `PATCH /v1/automated-solutions/:id`
- [Delete workspace](./automated-solutions/delete.md) — `DELETE /v1/automated-solutions/:id`
- [Workspace fields](./automated-solutions/fields.md) — `GET /v1/automated-solutions/fields`

## Key fields

| Field | Description |
|------|---------|
| `id` | Workspace identifier. Assigned on creation |
| `title` | Workspace name. Required on creation |
| `typeIds` | IDs of the bound smart process types — the type `id` field from [`GET /v1/smart-processes`](/docs/entities/smart-processes/list), not its `entityTypeId` |

The entity has three fields, all listed above. Field data types and the `readonly` flag: [Workspace fields](./automated-solutions/fields.md).

## Before you start

1. **A smart process is bound from the workspace side.** The binding is set by the workspace's `typeIds` field — on [create](./automated-solutions/create.md) and [update](./automated-solutions/update.md). The `customSectionId` field of a smart process type is deprecated: it is accepted only when the type is created, and `PATCH /v1/smart-processes/:entityTypeId` rejects it with `400 READONLY_FIELD`.
2. **`typeIds` in `PATCH` is overwritten in full.** The array you send replaces the current set of bound types. To add one type, get the current set via [`GET /v1/automated-solutions/:id`](./automated-solutions/get.md) and send it together with the `id` of the new type. If the `typeIds` key is omitted, the set does not change. An empty array `[]` unbinds all types.
3. **A smart process type belongs to only one workspace.** Binding a type to a workspace removes it from its previous one — this is how types are moved between workspaces.
4. **An unknown ID in `typeIds` is dropped without an error.** A value that matches no type, including an `entityTypeId` passed instead of the `id`, is not bound, and the response stays successful. In `PATCH` this can unbind every type from the workspace: compare `typeIds` in the response with the set you sent.
5. **The list can be filtered and sorted only by `id` and `title`.** Any other field name, including `typeIds`, is rejected with `400 UNKNOWN_FILTER_FIELD` or `400 UNKNOWN_SORT_FIELD`. The only way to find a workspace by a bound type is to iterate over the list.
6. **Only a workspace with no bound types can be deleted.** If at least one type is bound to it, `DELETE` returns `422 BITRIX_ERROR` with `b24Code: "HAS_BOUND_TYPES"`. First unbind the types or move them to another workspace, then retry the deletion.
7. **Workspaces installed by a Marketplace application are locked against changes and deletion.** The API response does not distinguish them: the fields carry no origin flag. An attempt to change or delete such a workspace returns `403 BITRIX_ACCESS_DENIED` — the same code as when the key owner lacks permissions. The hint in `error.hint` names both causes. Workspaces created via `POST /v1/automated-solutions` are not locked this way.
8. **The number of workspaces per Bitrix24 account is limited.** In the Bitrix24 cloud, the limit depends on the plan. Once it is reached, `POST /v1/automated-solutions` returns `403 B24_AUTOMATED_SOLUTION_LIMIT_EXCEEDED`; retrying the request does not help.

## Typical scenario

1. Find the smart process type you need and note its `id` — not the `entityTypeId`: [`GET /v1/smart-processes`](/docs/entities/smart-processes/list).
2. See which workspaces already exist: [`GET /v1/automated-solutions`](./automated-solutions/list.md).
3. Create a workspace with the binding in one call: [`POST /v1/automated-solutions`](./automated-solutions/create.md) with `title` and `typeIds`.
4. Add a type to an existing workspace: get the current set via [`GET /v1/automated-solutions/:id`](./automated-solutions/get.md) and send the full set to [`PATCH /v1/automated-solutions/:id`](./automated-solutions/update.md).
5. Remove a workspace: unbind the types via `PATCH` with `typeIds: []`, then call [`DELETE /v1/automated-solutions/:id`](./automated-solutions/delete.md).

## Limits

| Limit | Value |
|-------|----------|
| Number of workspaces per Bitrix24 account | Depends on the Bitrix24 plan. When exceeded — `403 B24_AUTOMATED_SOLUTION_LIMIT_EXCEEDED` |
| Maximum records per request | 5000 (`limit ≤ 5000`) |
| Batch requests | up to 50 operations in [`POST /v1/batch`](/docs/batch) |
| Rate limit | Shared across the Vibecode API — see [Limits and optimization](/docs/optimization) |

## See also

- [Smart process types](/docs/entities/smart-processes)
- [Smart process items](/docs/entities/items)
- [Entity API](/docs/entity-api)
- [Filtering syntax](/docs/filtering)
- [API reference](/docs/api-reference)
