[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-entities\u002Factivities\u002Fbindings":3,"docs-tabs-entities\u002Factivities\u002Fbindings":6},{"content":4,"lastmod":5},"# Привязки дел\n\nДело CRM — звонок, встреча, задача, письмо — отображается в таймлайне той записи, к которой относится. Привязки показывают одно дело сразу в нескольких карточках: например, звонок виден и в сделке, и в карточке смарт-процесса.\n\nБитрикс24 API: `crm.activity.binding.*`\nСкоуп: `crm`\n\n## Операции\n\n- [Список привязок](.\u002Fbindings\u002Flist.md) — `GET \u002Fv1\u002Factivities\u002F:activityId\u002Fbindings`\n- [Привязать](.\u002Fbindings\u002Fbind.md) — `POST \u002Fv1\u002Factivities\u002F:activityId\u002Fbindings`\n- [Отвязать](.\u002Fbindings\u002Funbind.md) — `DELETE \u002Fv1\u002Factivities\u002F:activityId\u002Fbindings`\n- [Переместить привязку](.\u002Fbindings\u002Fmove.md) — `POST \u002Fv1\u002Factivities\u002F:activityId\u002Fbindings\u002Fmove`\n\n## Когда использовать\n\n- Звонок по сделке нужно показать и в карточке связанного смарт-процесса.\n- Встреча относится сразу к контакту и к компании — добавляем вторую привязку.\n- Дело переехало на другую запись CRM — переносим привязку без потери истории.\n\n## Типовой сценарий\n\n1. Посмотреть текущие привязки дела: [`GET \u002Fv1\u002Factivities\u002F:activityId\u002Fbindings`](.\u002Fbindings\u002Flist.md).\n2. Добавить вторую сущность: [`POST \u002Fv1\u002Factivities\u002F:activityId\u002Fbindings`](.\u002Fbindings\u002Fbind.md) с `entityTypeId` и `entityId`.\n3. Перенести привязку на другую запись того же типа: [`POST \u002Fv1\u002Factivities\u002F:activityId\u002Fbindings\u002Fmove`](.\u002Fbindings\u002Fmove.md).\n4. Снять лишнюю привязку: [`DELETE \u002Fv1\u002Factivities\u002F:activityId\u002Fbindings`](.\u002Fbindings\u002Funbind.md).\n\n## Смотрите также\n\n- [Дела](\u002Fdocs\u002Fentities\u002Factivities)\n- [Список привязок](\u002Fdocs\u002Fentities\u002Factivities\u002Fbindings\u002Flist)\n- [Смарт-процессы](\u002Fdocs\u002Fentities\u002Fsmart-processes)\n","2026-06-17",{"bindings\u002Flist.md":7,"bindings\u002Fbind.md":8,"bindings\u002Funbind.md":9,"bindings\u002Fmove.md":10},"\n## Список привязок\n\n`GET \u002Fv1\u002Factivities\u002F:activityId\u002Fbindings`\n\nВозвращает все CRM-сущности, к которым привязано дело. Минимум одна привязка есть всегда — сущность-владелец, указанная при создании дела.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `activityId` (path) | number | да | ID дела. Список: `GET \u002Fv1\u002Factivities` |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3631\u002Fbindings \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3631\u002Fbindings \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3631\u002Fbindings', {\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\n\nconst { data } = await res.json()\ndata.forEach(b => console.log(`${b.entityTypeId}:${b.entityId}`))\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3631\u002Fbindings', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data` | array | Массив привязок |\n| `data[].entityTypeId` | number | Числовой код типа CRM-сущности:\u003Cbr>1 — лид\u003Cbr>2 — сделка\u003Cbr>3 — контакт\u003Cbr>4 — компания\u003Cbr>7 — предложение\u003Cbr>31 — счёт\u003Cbr>≥128 — смарт-процесс, его код — в [`GET \u002Fv1\u002Fsmart-processes`](\u002Fdocs\u002Fentities\u002Fsmart-processes\u002Flist) |\n| `data[].entityId` | number | ID привязанной сущности |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    { \"entityTypeId\": 2, \"entityId\": 4219 },\n    { \"entityTypeId\": 3, \"entityId\": 9 }\n  ]\n}\n```\n\n## Пример ответа при ошибке\n\n404 — дело не существует:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"ENTITY_NOT_FOUND\",\n    \"message\": \"Элемент не найден\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | `activityId` не положительное целое число |\n| 404 | `ENTITY_NOT_FOUND` | Дела с указанным `activityId` не существует |\n| 403 | `SCOPE_DENIED` | Ключу не хватает скоупа `crm` |\n| 401 | `TOKEN_MISSING` | У ключа нет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Привязать](\u002Fdocs\u002Fentities\u002Factivities\u002Fbindings\u002Fbind)\n- [Переместить привязку](\u002Fdocs\u002Fentities\u002Factivities\u002Fbindings\u002Fmove)\n- [Дела](\u002Fdocs\u002Fentities\u002Factivities)\n","\n## Привязать\n\n`POST \u002Fv1\u002Factivities\u002F:activityId\u002Fbindings`\n\nПривязывает дело к дополнительной CRM-сущности — оно появляется в её таймлайне наравне с сущностью-владельцем.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `activityId` (path) | number | да | ID дела. Список: `GET \u002Fv1\u002Factivities` |\n\n## Поля запроса (body)\n\n| Поле | Тип | Обяз. | Описание |\n|------|-----|:-----:|---------|\n| **`entityTypeId`** | number | да | Числовой код типа CRM-сущности:\u003Cbr>1 — лид\u003Cbr>2 — сделка\u003Cbr>3 — контакт\u003Cbr>4 — компания\u003Cbr>7 — предложение\u003Cbr>31 — счёт\u003Cbr>≥128 — смарт-процесс, его код — в [`GET \u002Fv1\u002Fsmart-processes`](\u002Fdocs\u002Fentities\u002Fsmart-processes\u002Flist) |\n| **`entityId`** | number | да | ID сущности, к которой привязываем |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3631\u002Fbindings \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"entityTypeId\": 3, \"entityId\": 9 }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3631\u002Fbindings \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"entityTypeId\": 3, \"entityId\": 9 }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3631\u002Fbindings', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({ entityTypeId: 3, entityId: 9 }),\n})\n\nconst { data } = await res.json()\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3631\u002Fbindings', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({ entityTypeId: 3, entityId: 9 }),\n})\n\nconst { data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data.activityId` | number | ID дела |\n| `data.entityTypeId` | number | Числовой код типа привязанной сущности |\n| `data.entityId` | number | ID привязанной сущности |\n| `data.bound` | boolean | Всегда `true` — подтверждение привязки |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"activityId\": 3631,\n    \"entityTypeId\": 3,\n    \"entityId\": 9,\n    \"bound\": true\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n422 — сущность уже привязана:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"Дело уже привязано к этой сущности\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | `activityId`, `entityTypeId` или `entityId` не положительное целое число |\n| 404 | `ENTITY_NOT_FOUND` | Дела с указанным `activityId` не существует |\n| 422 | `BITRIX_ERROR` | Дело уже привязано к этой паре `entityTypeId` + `entityId`, либо такой сущности нет |\n| 403 | `SCOPE_DENIED` | Ключу не хватает скоупа `crm` |\n| 401 | `TOKEN_MISSING` | У ключа нет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Привязка не идемпотентна.** Повторный запрос к уже привязанной паре возвращает `422`, а не `200`. Это значит «уже привязано», а не сбой — повторять запрос не нужно, дубликат в списке не появляется.\n\n## Смотрите также\n\n- [Отвязать](\u002Fdocs\u002Fentities\u002Factivities\u002Fbindings\u002Funbind)\n- [Список привязок](\u002Fdocs\u002Fentities\u002Factivities\u002Fbindings\u002Flist)\n- [Дела](\u002Fdocs\u002Fentities\u002Factivities)\n","\n## Отвязать\n\n`DELETE \u002Fv1\u002Factivities\u002F:activityId\u002Fbindings`\n\nСнимает привязку дела к указанной CRM-сущности. В её таймлайне дело больше не отображается, но остаётся в таймлайнах остальных привязанных сущностей.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `activityId` (path) | number | да | ID дела. Список: `GET \u002Fv1\u002Factivities` |\n| `entityTypeId` (query) | number | да | Числовой код типа сущности:\u003Cbr>1 — лид\u003Cbr>2 — сделка\u003Cbr>3 — контакт\u003Cbr>4 — компания\u003Cbr>7 — предложение\u003Cbr>31 — счёт\u003Cbr>≥128 — смарт-процесс, его код — в [`GET \u002Fv1\u002Fsmart-processes`](\u002Fdocs\u002Fentities\u002Fsmart-processes\u002Flist) |\n| `entityId` (query) | number | да | ID сущности, от которой отвязываем |\n\n`entityTypeId` и `entityId` можно передать как query-параметры или в теле запроса.\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X DELETE \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3631\u002Fbindings?entityTypeId=3&entityId=9\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X DELETE \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3631\u002Fbindings?entityTypeId=3&entityId=9\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3631\u002Fbindings?entityTypeId=3&entityId=9', {\n  method: 'DELETE',\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\n\nconst { data } = await res.json()\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3631\u002Fbindings?entityTypeId=3&entityId=9', {\n  method: 'DELETE',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data.activityId` | number | ID дела |\n| `data.entityTypeId` | number | Числовой код типа отвязанной сущности |\n| `data.entityId` | number | ID отвязанной сущности |\n| `data.deleted` | boolean | Всегда `true` — подтверждение, что привязка снята |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"activityId\": 3631,\n    \"entityTypeId\": 3,\n    \"entityId\": 9,\n    \"deleted\": true\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n422 — попытка снять единственную привязку:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"Нельзя удалять единственную привязку дела к сущности\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | `activityId`, `entityTypeId` или `entityId` не положительное целое число |\n| 404 | `ENTITY_NOT_FOUND` | Дела с указанным `activityId` не существует |\n| 422 | `BITRIX_ERROR` | Попытка снять единственную оставшуюся привязку дела |\n| 403 | `SCOPE_DENIED` | Ключу не хватает скоупа `crm` |\n| 401 | `TOKEN_MISSING` | У ключа нет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Нельзя снять последнюю привязку.** Дело должно оставаться привязанным минимум к одной сущности — попытка отвязать единственную возвращает `422`, привязка сохраняется.\n\n**Перенос дела на другую запись.** Чтобы перенести дело, не нарушив запрет на снятие последней привязки, см. [Переместить привязку](\u002Fdocs\u002Fentities\u002Factivities\u002Fbindings\u002Fmove) — там описан безопасный порядок и перенос одним вызовом в пределах одного типа.\n\n## Смотрите также\n\n- [Привязать](\u002Fdocs\u002Fentities\u002Factivities\u002Fbindings\u002Fbind)\n- [Переместить привязку](\u002Fdocs\u002Fentities\u002Factivities\u002Fbindings\u002Fmove)\n- [Список привязок](\u002Fdocs\u002Fentities\u002Factivities\u002Fbindings\u002Flist)\n","\n## Переместить привязку\n\n`POST \u002Fv1\u002Factivities\u002F:activityId\u002Fbindings\u002Fmove`\n\nПереносит привязку дела с одной CRM-сущности на другую того же типа: старая привязка снимается, новая создаётся одним вызовом.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `activityId` (path) | number | да | ID дела. Список: `GET \u002Fv1\u002Factivities` |\n\n## Поля запроса (body)\n\n| Поле | Тип | Обяз. | Описание |\n|------|-----|:-----:|---------|\n| **`sourceEntityTypeId`** | number | да | Числовой код типа исходной сущности:\u003Cbr>1 — лид\u003Cbr>2 — сделка\u003Cbr>3 — контакт\u003Cbr>4 — компания\u003Cbr>7 — предложение\u003Cbr>31 — счёт\u003Cbr>≥128 — смарт-процесс, его код — в [`GET \u002Fv1\u002Fsmart-processes`](\u002Fdocs\u002Fentities\u002Fsmart-processes\u002Flist) |\n| **`sourceEntityId`** | number | да | ID исходной сущности |\n| **`targetEntityTypeId`** | number | да | Числовой код типа целевой сущности. Должен совпадать с `sourceEntityTypeId` |\n| **`targetEntityId`** | number | да | ID целевой сущности |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3631\u002Fbindings\u002Fmove \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"sourceEntityTypeId\": 3, \"sourceEntityId\": 9, \"targetEntityTypeId\": 3, \"targetEntityId\": 17 }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3631\u002Fbindings\u002Fmove \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"sourceEntityTypeId\": 3, \"sourceEntityId\": 9, \"targetEntityTypeId\": 3, \"targetEntityId\": 17 }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3631\u002Fbindings\u002Fmove', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    sourceEntityTypeId: 3,\n    sourceEntityId: 9,\n    targetEntityTypeId: 3,\n    targetEntityId: 17,\n  }),\n})\n\nconst { data } = await res.json()\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3631\u002Fbindings\u002Fmove', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    sourceEntityTypeId: 3,\n    sourceEntityId: 9,\n    targetEntityTypeId: 3,\n    targetEntityId: 17,\n  }),\n})\n\nconst { data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data.activityId` | number | ID дела |\n| `data.sourceEntityTypeId` | number | Числовой код типа исходной сущности |\n| `data.sourceEntityId` | number | ID исходной сущности |\n| `data.targetEntityTypeId` | number | Числовой код типа целевой сущности |\n| `data.targetEntityId` | number | ID целевой сущности |\n| `data.moved` | boolean | Всегда `true` — подтверждение переноса |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"activityId\": 3631,\n    \"sourceEntityTypeId\": 3,\n    \"sourceEntityId\": 9,\n    \"targetEntityTypeId\": 3,\n    \"targetEntityId\": 17,\n    \"moved\": true\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n422 — исходная и целевая сущности разного типа:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"Source and target entity types are not equal\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | `activityId` или любое из полей `source*` \u002F `target*` не положительное целое число |\n| 404 | `ENTITY_NOT_FOUND` | Дела с указанным `activityId` не существует |\n| 422 | `BITRIX_ERROR` | Тип исходной сущности не совпадает с типом целевой |\n| 403 | `SCOPE_DENIED` | Ключу не хватает скоупа `crm` |\n| 401 | `TOKEN_MISSING` | У ключа нет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Перенос работает только в пределах одного типа.** Чтобы перенести дело на сущность другого типа, `move` не подходит — сделайте это в два шага:\n\n1. Привяжите дело ко второй сущности — [`POST \u002Fv1\u002Factivities\u002F:activityId\u002Fbindings`](\u002Fdocs\u002Fentities\u002Factivities\u002Fbindings\u002Fbind).\n2. Снимите привязку к первой — [`DELETE \u002Fv1\u002Factivities\u002F:activityId\u002Fbindings`](\u002Fdocs\u002Fentities\u002Factivities\u002Fbindings\u002Funbind).\n\nТакой порядок не нарушает запрет на снятие последней привязки — дело всё время остаётся привязанным минимум к одной сущности.\n\n## Смотрите также\n\n- [Привязать](\u002Fdocs\u002Fentities\u002Factivities\u002Fbindings\u002Fbind)\n- [Отвязать](\u002Fdocs\u002Fentities\u002Factivities\u002Fbindings\u002Funbind)\n- [Список привязок](\u002Fdocs\u002Fentities\u002Factivities\u002Fbindings\u002Flist)\n"]