For AI agents: markdown of this page — /docs-content-en/entities/automated-solutions/update.md documentation index — /llms.txt

Update workspace

PATCH /v1/automated-solutions/:id

Updates a CRM digital workspace — this call binds smart process types to the workspace and unbinds them from it.

Fields are passed flat at the JSON root — without a fields wrapper.

Parameters

Parameter Type Required Description
id (path) number yes Workspace ID. List: GET /v1/automated-solutions

Request fields (body)

Field Type Required Description
title string no New workspace name
typeIds number[] no The full set of IDs of the smart process types that must be bound to the workspace — the type id field from GET /v1/smart-processes, not its entityTypeId. The array you send replaces the current set entirely. If the typeIds key is omitted, the set does not change; an empty array [] unbinds all types. Current set: GET /v1/automated-solutions/:id

Examples

curl — personal key

Terminal
curl -X PATCH "https://vibecode.bitrix24.com/v1/automated-solutions/11" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "typeIds": [63]
  }'

curl — OAuth application

Terminal
curl -X PATCH "https://vibecode.bitrix24.com/v1/automated-solutions/11" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "typeIds": [63]
  }'

JavaScript — personal key

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/automated-solutions/11', {
  method: 'PATCH',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    typeIds: [63],
  }),
})

const { success, data } = await res.json()
console.log('Bound types:', data.typeIds)

JavaScript — OAuth application

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/automated-solutions/11', {
  method: 'PATCH',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    typeIds: [63],
  }),
})

const { success, data } = await res.json()
console.log('Bound types:', data.typeIds)

Response fields

The response contains the whole workspace, not only the fields you sent.

Field Type Description
success boolean true on a successful update
data.id number Workspace ID
data.title string Workspace name after the update
data.typeIds number[] IDs of the smart process types actually bound to the workspace after the update

Response example

JSON
{
  "success": true,
  "data": {
    "id": 11,
    "title": "Procurement",
    "typeIds": [63]
  }
}

Error response example

404 — no workspace with this id:

JSON
{
  "success": false,
  "error": {
    "code": "ENTITY_NOT_FOUND",
    "message": "Item not found"
  }
}

Errors

HTTP Code Description
404 ENTITY_NOT_FOUND No workspace with this id
400 READONLY_FIELD The body contains id — a read-only field. The request is rejected before it reaches the Bitrix24 portal
403 BITRIX_ACCESS_DENIED The workspace was installed by a Marketplace application and is locked against changes, or the key owner lacks permissions. The response has no b24Code field; the hint in error.hint names both causes
403 B24_AUTOMATED_SOLUTION_LIMIT_EXCEEDED The portal has reached its limit on the number of workspaces; in the Bitrix24 cloud the limit depends on the plan. Retrying the request does not help. error.hint suggests what to do: move the types and delete an empty workspace, or upgrade the plan
401 MISSING_API_KEY The X-Api-Key header is missing
403 SCOPE_DENIED The API key does not have the crm scope
401 TOKEN_MISSING The API key has no configured tokens

Full list of common API errors — Errors.

Known specifics

A smart process type belongs to only one workspace. If a type in typeIds is already bound to another workspace, the call moves it: the type disappears from the previous workspace's set without a separate request. This is how types are moved before a workspace is deleted.

An unknown ID in typeIds silently unbinds types. A value that matches no smart process type, including an entityTypeId passed instead of the id, is dropped, and the response stays 200. Because the set is replaced entirely, such a call can unbind every type from the workspace. Compare data.typeIds in the response with the set you sent.

See also