[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-entities\u002Factivities":3,"docs-tabs-entities\u002Factivities":6},{"content":4,"lastmod":5},"# Дела\n\nУправление делами CRM: звонки, встречи, задачи, email. Привязываются к сделкам, лидам, контактам и другим сущностям.\n\nBitrix24 API: `crm.activity.*`\nСкоуп: `crm`\n\nОдно дело можно показать в таймлайне сразу нескольких CRM-сущностей — см. [Привязки дел](.\u002Factivities\u002Fbindings.md).\n\nДело с собственным оформлением в таймлайне — иконка, заголовок, блоки, кнопки — создаётся через [Конфигурируемые дела](.\u002Factivities\u002Fconfigurable.md).\n\nAI-расшифровку звонка клиента — дела типа «Звонок» — возвращает [Расшифровки звонков CRM](.\u002Factivities\u002Ftranscript.md).\n\n## Операции\n\n- [Создать дело](.\u002Factivities\u002Fcreate.md) — `POST \u002Fv1\u002Factivities`\n- [Список дел](.\u002Factivities\u002Flist.md) — `GET \u002Fv1\u002Factivities`\n- [Получить дело](.\u002Factivities\u002Fget.md) — `GET \u002Fv1\u002Factivities\u002F:id`\n- [Обновить дело](.\u002Factivities\u002Fupdate.md) — `PATCH \u002Fv1\u002Factivities\u002F:id`\n- [Удалить дело](.\u002Factivities\u002Fdelete.md) — `DELETE \u002Fv1\u002Factivities\u002F:id`\n- [Поиск дел](.\u002Factivities\u002Fsearch.md) — `POST \u002Fv1\u002Factivities\u002Fsearch`\n- [Поля дела](.\u002Factivities\u002Ffields.md) — `GET \u002Fv1\u002Factivities\u002Ffields`\n- [Агрегация дел](.\u002Factivities\u002Faggregate.md) — `POST \u002Fv1\u002Factivities\u002Faggregate`\n","2026-07-01",{"activities\u002Fcreate.md":7,"activities\u002Flist.md":8,"activities\u002Fget.md":9,"activities\u002Fupdate.md":10,"activities\u002Fdelete.md":11,"activities\u002Fsearch.md":12,"activities\u002Ffields.md":13,"activities\u002Faggregate.md":14},"\n## Создать дело\n\n`POST \u002Fv1\u002Factivities`\n\nСоздаёт новое CRM-дело: звонок, встречу, задачу или email. Дело привязывается к CRM-сущности через `ownerTypeId` + `ownerId`.\n\n## Поля запроса (body)\n\nМинимальный набор для создания дела — `subject`, `typeId`, `communications` плюс **привязка** к CRM-сущности. Привязку задаёт **либо** пара `ownerTypeId` + `ownerId`, **либо** поля `entityTypeId` + `entityId` внутри элемента `communications`. Если не задано ни одно из двух, Bitrix24 не может привязать коммуникацию и возвращает ошибку про `communications`.\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `subject` | string | да | Тема дела |\n| `typeId` | number | да | Тип: `1` — звонок, `2` — встреча, `3` — задача, `6` — email |\n| `communications` | object[] | да | Коммуникации дела. Массив объектов: `[{ \"value\": \"+7…\", \"entityTypeId\": 3, \"entityId\": 17 }]`. Вложенные ключи принимаются в camelCase (`type`, `value`, `entityTypeId`, `entityId`) — как и во всём остальном API — либо в ВЕРХНЕМ регистре Bitrix24 (`TYPE`, `VALUE`, `ENTITY_TYPE_ID`, `ENTITY_ID`). `value` — телефон\u002Fe-mail; `entityTypeId` + `entityId` — CRM-сущность, которой принадлежит коммуникация (задаёт привязку, если не переданы `ownerTypeId`\u002F`ownerId`). Когда владелец указан, достаточно `[{ \"value\": \"+7…\" }]` |\n| `ownerTypeId` | number | да¹ | Тип родительской сущности: `1` — лид, `2` — сделка, `3` — контакт, `4` — компания |\n| `ownerId` | number | да¹ | ID родительской сущности. Поиск: `GET \u002Fv1\u002Fdeals`, `GET \u002Fv1\u002Fleads`, `GET \u002Fv1\u002Fcontacts`, `GET \u002Fv1\u002Fcompanies` |\n| `responsibleId` | number | | Ответственный. По умолчанию — текущий пользователь. Список: `GET \u002Fv1\u002Fusers` |\n| `description` | string | | Описание |\n| `priority` | number | | Приоритет: `1` — низкий, `2` — средний, `3` — высокий |\n| `direction` | number | | Направление: `1` — входящее, `2` — исходящее |\n| `completed` | boolean | | Завершена |\n| `startTime` | datetime | | Дата начала |\n| `endTime` | datetime | | Дата окончания |\n| `deadline` | datetime | | Крайний срок. **На создании Bitrix24 игнорирует переданное значение и вычисляет `deadline` из `startTime`\u002F`endTime`** — отдельно задать его при `POST` нельзя |\n\n¹ Пара `ownerTypeId` + `ownerId` нужна вместе и **только если** привязка не задана через `entityTypeId`\u002F`entityId` внутри `communications`. Если привязка идёт через коммуникацию — оба поля можно опустить.\n\n> ℹ️ Вложенные ключи `communications` принимаются в двух формах: camelCase (`type`, `value`, `entityTypeId`, `entityId`) — единообразно с остальным API — и в ВЕРХНЕМ регистре Bitrix24 (`TYPE`, `VALUE`, `ENTITY_TYPE_ID`, `ENTITY_ID`). Если в одном объекте заданы обе формы одного ключа, приоритет у ВЕРХНЕГО регистра.\n\nПолный список полей: [GET \u002Fv1\u002Factivities\u002Ffields](\u002Fdocs\u002Fentities\u002Factivities\u002Ffields).\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"typeId\": 1,\n    \"ownerTypeId\": 3,\n    \"ownerId\": 17,\n    \"subject\": \"Звонок клиенту\",\n    \"description\": \"Обсудить условия поставки\",\n    \"responsibleId\": 1,\n    \"priority\": 2,\n    \"direction\": 2,\n    \"communications\": [\n      { \"value\": \"+7 999 123-45-67\", \"entityTypeId\": 3, \"entityId\": 17 }\n    ],\n    \"startTime\": \"2026-04-16T10:00:00+03:00\",\n    \"endTime\": \"2026-04-16T10:15:00+03:00\"\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"typeId\": 1,\n    \"ownerTypeId\": 3,\n    \"ownerId\": 17,\n    \"subject\": \"Звонок клиенту\",\n    \"description\": \"Обсудить условия поставки\",\n    \"responsibleId\": 1,\n    \"priority\": 2,\n    \"direction\": 2,\n    \"communications\": [\n      { \"value\": \"+7 999 123-45-67\", \"entityTypeId\": 3, \"entityId\": 17 }\n    ],\n    \"startTime\": \"2026-04-16T10:00:00+03:00\",\n    \"endTime\": \"2026-04-16T10:15:00+03:00\"\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    typeId: 1,\n    ownerTypeId: 3,\n    ownerId: 17,\n    subject: 'Звонок клиенту',\n    description: 'Обсудить условия поставки',\n    responsibleId: 1,\n    priority: 2,\n    direction: 2,\n    communications: [\n      { value: '+7 999 123-45-67', entityTypeId: 3, entityId: 17 },\n    ],\n    startTime: '2026-04-16T10:00:00+03:00',\n    endTime: '2026-04-16T10:15:00+03:00',\n  }),\n})\n\nconst { success, data } = await res.json()\nconsole.log('Activity ID:', data.id)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities', {\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    typeId: 1,\n    ownerTypeId: 3,\n    ownerId: 17,\n    subject: 'Звонок клиенту',\n    description: 'Обсудить условия поставки',\n    responsibleId: 1,\n    priority: 2,\n    direction: 2,\n    communications: [\n      { value: '+7 999 123-45-67', entityTypeId: 3, entityId: 17 },\n    ],\n    startTime: '2026-04-16T10:00:00+03:00',\n    endTime: '2026-04-16T10:15:00+03:00',\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `id` | number | ID созданного дела |\n| `typeId` | number | Тип дела |\n| `ownerTypeId` | number | Тип родительской сущности |\n| `ownerId` | number | ID родительской сущности |\n| `subject` | string | Тема |\n| `responsibleId` | number | Ответственный |\n| `createdAt` | datetime | Дата создания |\n| `updatedAt` | datetime | Дата изменения |\n\nОтвет содержит все поля дела.\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": 3894,\n    \"typeId\": 1,\n    \"ownerTypeId\": 3,\n    \"ownerId\": 17,\n    \"subject\": \"Звонок клиенту\",\n    \"description\": \"Обсудить условия поставки\",\n    \"responsibleId\": 1,\n    \"priority\": 2,\n    \"direction\": 2,\n    \"completed\": false,\n    \"startTime\": \"2026-04-16T10:00:00+03:00\",\n    \"endTime\": \"2026-04-16T10:15:00+03:00\",\n    \"deadline\": \"2026-04-16T10:00:00+03:00\",\n    \"createdAt\": \"2026-04-15T14:30:00+03:00\",\n    \"updatedAt\": \"2026-04-15T14:30:00+03:00\"\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n400 — не передано обязательное поле (`subject`, `typeId` или `communications`):\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"MISSING_REQUIRED_FIELDS\",\n    \"message\": \"Body field \\\"communications\\\" is required to create activity.\"\n  }\n}\n```\n\n403 — нет скоупа:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"SCOPE_DENIED\",\n    \"message\": \"This endpoint requires 'crm' scope\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `MISSING_REQUIRED_FIELDS` | Не передано одно из обязательных полей: `subject`, `typeId`, `communications` (проверяется до вызова Bitrix24) |\n| 400 | `INVALID_REQUEST` | Невалидные значения полей |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Список дел](\u002Fdocs\u002Fentities\u002Factivities\u002Flist) — получение с фильтрами\n- [Поля дела](\u002Fdocs\u002Fentities\u002Factivities\u002Ffields) — полный список полей\n- [Сделки](\u002Fdocs\u002Fentities\u002Fdeals) — привязка через `ownerTypeId=2`\n- [Лиды](\u002Fdocs\u002Fentities\u002Fleads) — привязка через `ownerTypeId=1`\n- [Entity API](\u002Fdocs\u002Fentity-api) — общие принципы\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization) — rate limits\n","\n## Список дел\n\n`GET \u002Fv1\u002Factivities`\n\nВозвращает список CRM-дел с поддержкой фильтрации, сортировки и авто-пагинации. Фильтр по `ownerId` + `ownerTypeId` возвращает дела конкретной сделки, лида или контакта.\n\n## Параметры\n\n| Параметр | Тип | По умолч. | Описание |\n|----------|-----|-----------|---------|\n| `limit` | number | `50` | Количество записей (до 5000). При `limit > 50` авто-пагинация |\n| `offset` | number | `0` | Пропустить N записей. При `offset > 0` рекомендуется `limit ≤ 500` |\n| `select` | string | — | Выборка полей: `?select=id,subject,typeId,completed` |\n| `order` | object | — | Сортировка: `?order[deadline]=asc` |\n| `filter` | object | — | Фильтрация по полям `GET \u002Fv1\u002Factivities\u002Ffields`.\u003Cbr>[Синтаксис фильтрации](\u002Fdocs\u002Ffiltering). Пример: `?filter[ownerTypeId]=2&filter[ownerId]=741` |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities?filter[ownerTypeId]=2&filter[ownerId]=741&limit=10&select=id,subject,typeId,completed\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities?filter[ownerTypeId]=2&filter[ownerId]=741&limit=10&select=id,subject,typeId,completed\" \\\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?filter[ownerTypeId]=2&filter[ownerId]=741&limit=10&select=id,subject,typeId,completed', {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data, meta } = await res.json()\nconsole.log(`Найдено ${meta.total} дел`)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities?filter[ownerTypeId]=2&filter[ownerId]=741&limit=10&select=id,subject,typeId,completed', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success, data, meta } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `data` | array | Массив дел (поля — см. [Поля](\u002Fdocs\u002Fentities\u002Factivities\u002Ffields)) |\n| `meta.total` | number | Общее количество записей |\n| `meta.hasMore` | boolean | Есть ещё записи |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": 3894,\n      \"typeId\": 2,\n      \"ownerTypeId\": 2,\n      \"ownerId\": 741,\n      \"subject\": \"Встреча по проекту\",\n      \"responsibleId\": 1,\n      \"priority\": 2,\n      \"direction\": 2,\n      \"completed\": false,\n      \"deadline\": \"2026-04-16T11:00:00+03:00\",\n      \"createdAt\": \"2026-04-15T14:30:00+03:00\",\n      \"updatedAt\": \"2026-04-15T14:30:00+03:00\"\n    }\n  ],\n  \"meta\": {\n    \"total\": 84,\n    \"hasMore\": true\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n403 — нет скоупа:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"SCOPE_DENIED\",\n    \"message\": \"This endpoint requires 'crm' scope\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Авто-пагинация:** при `limit > 50` Вайбкод автоматически запрашивает несколько страниц.\n\n**Фильтр по сущности:** для получения дел конкретной сделки используйте `filter[ownerTypeId]=2&filter[ownerId]=741`. Значения `ownerTypeId`: `1` — лид, `2` — сделка, `3` — контакт, `4` — компания.\n\n**Поля для группировки и агрегации:** `typeId`, `ownerTypeId`, `responsibleId`, `authorId`, `editorId`, `completed`, `status`, `direction`, `providerId`, `providerTypeId`. Используются в `POST \u002Fv1\u002Factivities\u002Faggregate` (см. [Агрегация](\u002Fdocs\u002Fentities\u002Factivities\u002Faggregate)).\n\n## Смотрите также\n\n- [Поиск дел](\u002Fdocs\u002Fentities\u002Factivities\u002Fsearch) — POST-запрос для сложных фильтров\n- [Создать дело](\u002Fdocs\u002Fentities\u002Factivities\u002Fcreate) — создание нового\n- [Синтаксис фильтрации](\u002Fdocs\u002Ffiltering)\n- [Batch](\u002Fdocs\u002Fbatch) — объединение запросов\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization) — rate limits\n","\n## Получить дело\n\n`GET \u002Fv1\u002Factivities\u002F:id`\n\nВозвращает дело по ID со всеми полями.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `id` (path) | number | да | ID дела |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3894\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3894\" \\\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\u002F3894', {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data } = await res.json()\nconsole.log('Дело:', data.subject, '— завершена:', data.completed)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3894', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\nОбъект дела со всеми полями — см. [Поля дела](\u002Fdocs\u002Fentities\u002Factivities\u002Ffields).\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": 3894,\n    \"typeId\": 2,\n    \"ownerTypeId\": 2,\n    \"ownerId\": 741,\n    \"subject\": \"Встреча по проекту\",\n    \"description\": \"Обсуждение условий поставки\",\n    \"responsibleId\": 1,\n    \"priority\": 2,\n    \"direction\": 2,\n    \"completed\": false,\n    \"startTime\": \"2026-04-16T10:00:00+03:00\",\n    \"endTime\": \"2026-04-16T11:00:00+03:00\",\n    \"deadline\": \"2026-04-16T11:00:00+03:00\",\n    \"createdAt\": \"2026-04-15T14:30:00+03:00\",\n    \"updatedAt\": \"2026-04-15T14:30:00+03:00\"\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| 404 | `ENTITY_NOT_FOUND` | Дело с таким ID не найдено |\n| 403 | `ACCESS_DENIED` | Нет доступа к делу |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Обновить дело](\u002Fdocs\u002Fentities\u002Factivities\u002Fupdate) — изменение полей\n- [Список дел](\u002Fdocs\u002Fentities\u002Factivities\u002Flist) — поиск с фильтрами\n- [Поля дела](\u002Fdocs\u002Fentities\u002Factivities\u002Ffields) — описание всех полей\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization) — rate limits\n","\n## Обновить дело\n\n`PATCH \u002Fv1\u002Factivities\u002F:id`\n\nОбновляет поля существующей дела. Передайте только изменяемые поля. Полный список в [справочнике полей](\u002Fdocs\u002Fentities\u002Factivities\u002Ffields).\n\n## Часто обновляемые поля\n\n| Параметр | Тип | Описание |\n|----------|-----|---------|\n| `completed` | boolean | Отметить завершённой |\n| `subject` | string | Тема |\n| `deadline` | datetime | Крайний срок |\n| `responsibleId` | number | Ответственный. Список: `GET \u002Fv1\u002Fusers` |\n| `priority` | number | Приоритет: `1` — низкий, `2` — средний, `3` — высокий |\n| `description` | string | Описание |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X PATCH \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3894\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"completed\": true,\n    \"subject\": \"Встреча по проекту (завершена)\"\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X PATCH \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3894\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"completed\": true,\n    \"subject\": \"Встреча по проекту (завершена)\"\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3894', {\n  method: 'PATCH',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    completed: true,\n    subject: 'Встреча по проекту (завершена)',\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3894', {\n  method: 'PATCH',\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    completed: true,\n    subject: 'Встреча по проекту (завершена)',\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `data` | object | Обновлённый объект дела со всеми полями — см. [Поля](\u002Fdocs\u002Fentities\u002Factivities\u002Ffields) |\n\nОбновлённый объект дела — см. [Поля дела](\u002Fdocs\u002Fentities\u002Factivities\u002Ffields).\n\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": 100,\n    \"subject\": \"Обновлённая тема\",\n    \"completed\": true,\n    \"responsibleId\": 1,\n    \"createdAt\": \"2026-04-15T12:00:00.000Z\",\n    \"updatedAt\": \"2026-04-15T13:00:00.000Z\"\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| 404 | `ENTITY_NOT_FOUND` | Дело не найдено |\n| 403 | `ACCESS_DENIED` | Нет доступа |\n| 400 | `INVALID_REQUEST` | Невалидные поля |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Получить дело](\u002Fdocs\u002Fentities\u002Factivities\u002Fget) — текущие значения\n- [Поля дела](\u002Fdocs\u002Fentities\u002Factivities\u002Ffields) — все доступные поля\n- [Batch](\u002Fdocs\u002Fbatch) — массовое обновление\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization) — rate limits\n","\n## Удалить дело\n\n`DELETE \u002Fv1\u002Factivities\u002F:id`\n\nУдаляет дело по ID. Восстановить удалённое дело через API нельзя — создавайте новое при необходимости.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `id` (path) | number | да | ID дела |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X DELETE \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3894\" \\\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\u002F3894\" \\\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\u002F3894', {\n  method: 'DELETE',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nif (res.status === 204) {\n  console.log('Дело удалено')\n}\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002F3894', {\n  method: 'DELETE',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nif (res.status === 204) {\n  console.log('Удалено')\n}\n```\n\n## Ответ\n\nПри успешном удалении возвращается HTTP-статус `204 No Content` с пустым телом — признак успеха проверяется по статусу.\n\n## Пример ответа\n\n```\nHTTP\u002F1.1 204 No Content\n```\n\n## Пример ответа при ошибке\n\n422 — дело не найдено:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BITRIX_ERROR\",\n    \"message\": \"Activity is not found.\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 422 | `BITRIX_ERROR` | Дело не найдено или нет прав на удаление |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Список дел](\u002Fdocs\u002Fentities\u002Factivities\u002Flist) — найти перед удалением\n- [Batch](\u002Fdocs\u002Fbatch) — массовое удаление\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization) — rate limits\n","\n## Поиск дел\n\n`POST \u002Fv1\u002Factivities\u002Fsearch`\n\nПоиск дел с фильтрами через POST — удобнее для сложных запросов.\n\n## Поля запроса (body)\n\n| Параметр | Тип | По умолч. | Описание |\n|----------|-----|-----------|---------|\n| `filter` | object | — | Фильтрация по полям `GET \u002Fv1\u002Factivities\u002Ffields`.\u003Cbr>[Синтаксис фильтрации](\u002Fdocs\u002Ffiltering). Пример: `?filter[ownerTypeId]=2&filter[ownerId]=741` |\n| `limit` | number | `50` | Количество записей (до 5000) |\n| `offset` | number | `0` | Пропустить N записей |\n| `order` | object | — | Сортировка: `{ \"deadline\": \"asc\" }` |\n| `select` | string[] | — | Выборка полей: `[\"id\", \"subject\", \"typeId\", \"completed\"]` |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002Fsearch\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"filter\": { \"ownerTypeId\": 2, \"ownerId\": 741, \"completed\": false },\n    \"limit\": 20,\n    \"order\": { \"deadline\": \"asc\" }\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002Fsearch\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"filter\": { \"ownerTypeId\": 2, \"ownerId\": 741, \"completed\": false },\n    \"limit\": 20,\n    \"order\": { \"deadline\": \"asc\" }\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002Fsearch', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    filter: { ownerTypeId: 2, ownerId: 741, completed: false },\n    limit: 20,\n    order: { deadline: 'asc' },\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002Fsearch', {\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    filter: { ownerTypeId: 2, ownerId: 741, completed: false },\n    limit: 20,\n    order: { deadline: 'asc' },\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `data` | array | Массив дел (поля — см. [Поля](\u002Fdocs\u002Fentities\u002Factivities\u002Ffields)) |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": 3894,\n      \"typeId\": 2,\n      \"ownerTypeId\": 2,\n      \"ownerId\": 741,\n      \"subject\": \"Встреча по проекту\",\n      \"responsibleId\": 1,\n      \"completed\": false,\n      \"deadline\": \"2026-04-16T11:00:00+03:00\",\n      \"createdAt\": \"2026-04-15T14:30:00+03:00\"\n    }\n  ]\n}\n```\n\n## Пример ответа при ошибке\n\n403 — нет скоупа:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"SCOPE_DENIED\",\n    \"message\": \"This endpoint requires 'crm' scope\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Поля для группировки и агрегации:** `typeId`, `ownerTypeId`, `responsibleId`, `authorId`, `editorId`, `completed`, `status`, `direction`, `providerId`, `providerTypeId`. Используются в `POST \u002Fv1\u002Factivities\u002Faggregate` (см. [Агрегация](\u002Fdocs\u002Fentities\u002Factivities\u002Faggregate)).\n\n## Смотрите также\n\n- [Список дел](\u002Fdocs\u002Fentities\u002Factivities\u002Flist) — GET-запрос для простых фильтров\n- [Синтаксис фильтрации](\u002Fdocs\u002Ffiltering)\n- [Batch](\u002Fdocs\u002Fbatch) — объединение запросов\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization) — rate limits\n","\n## Поля дела\n\n`GET \u002Fv1\u002Factivities\u002Ffields`\n\nВозвращает полный список доступных полей дела.\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002Ffields\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002Ffields\" \\\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\u002Ffields', {\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n  },\n})\n\nconst { success, data } = await res.json()\nconsole.log('Полей:', Object.keys(data).length)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002Ffields', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | RO | Описание |\n|------|-----|:--:|---------|\n| `id` | number | да | ID дела |\n| `typeId` | number | | Тип: `1` — звонок, `2` — встреча, `3` — задача, `6` — email (**обязательно** при создании) |\n| `ownerTypeId` | number | | Тип родительской сущности: `1` — лид, `2` — сделка, `3` — контакт, `4` — компания |\n| `ownerId` | number | | ID родительской сущности. Поиск зависит от `ownerTypeId`: `GET \u002Fv1\u002Fdeals`, `GET \u002Fv1\u002Fleads`, `GET \u002Fv1\u002Fcontacts`, `GET \u002Fv1\u002Fcompanies` |\n| `associatedEntityId` | number | да | ID связанной сущности (звонок\u002Fписьмо\u002Fвстреча в b24-модуле). Заполняется автоматически после создания дела соответствующим провайдером |\n| `subject` | string | | Тема дела (**обязательно** при создании) |\n| `communications` | object[] | | Коммуникации дела (**обязательно** при создании). Массив объектов: `[{ \"value\": \"+7…\", \"entityTypeId\": 3, \"entityId\": 17 }]` — вложенные ключи в camelCase или ВЕРХНЕМ регистре Bitrix24. Подробнее — [Создать дело](\u002Fdocs\u002Fentities\u002Factivities\u002Fcreate) |\n| `description` | string | | Описание |\n| `descriptionType` | number | | Тип описания: `1` — plain text, `3` — BBCode\u002FHTML |\n| `responsibleId` | number | | Ответственный. Список: `GET \u002Fv1\u002Fusers` |\n| `authorId` | number | да | Автор записи. Заполняется b24 на основании текущего пользователя при создании |\n| `editorId` | number | да | Последний редактор. Обновляется b24 при каждом изменении |\n| `priority` | number | | Приоритет: `1` — низкий, `2` — средний, `3` — высокий |\n| `direction` | number | | Направление: `1` — входящее, `2` — исходящее |\n| `location` | string | | Место проведения (для встреч) |\n| `completed` | boolean | | Завершена |\n| `status` | number | | Статус дела: `1` — ожидание, `2` — в процессе, `3` — выполнено |\n| `startTime` | datetime | | Дата начала |\n| `endTime` | datetime | | Дата окончания |\n| `deadline` | datetime | | Крайний срок |\n| `createdAt` | datetime | да | Дата создания |\n| `updatedAt` | datetime | да | Дата изменения |\n| `notifyType` | number | | Тип напоминания: `0` — выкл., `1` — за минуты, `2` — за часы, `3` — за дни |\n| `notifyValue` | number | | Значение напоминания (в единицах из `notifyType`) |\n| `providerId` | string | | ID провайдера дела (`CRM_CALL_LIST`, `IMOL`, `CRM_REQUEST` и т.п.) |\n| `providerTypeId` | string | | Подтип провайдера (зависит от `providerId`) |\n| `providerGroupId` | string | | Идентификатор группы провайдера (например, по треду e-mail) |\n| `providerParams` | object | | Произвольные параметры провайдера (структура зависит от `providerId`) |\n| `providerData` | string | | Сериализованные данные провайдера (XML\u002FJSON в строке) |\n| `settings` | object | | Дополнительные настройки дела (структура зависит от `typeId` и `providerId`) |\n| `originId` | string | | Внешний ID, если дело пришло из стороннего канала (CTI, email) |\n| `originatorId` | string | | ID источника-инициатора (приложение\u002Fконнектор) |\n| `resultStatus` | number | | Статус результата дела (числовой код) |\n| `resultStream` | number | | Поток обработки результата |\n| `resultSourceId` | string | | Источник результата |\n| `resultMark` | number | | Оценка\u002Fмаркер результата |\n| `resultValue` | number | | Численное значение результата |\n| `resultSum` | number | | Сумма по результату (например, чек) |\n| `resultCurrencyId` | string | | Валюта результата (`RUB`, `USD`, …) |\n| `autocompleteRule` | number | | Правило автозавершения дела (числовой код) |\n| `isIncomingChannel` | boolean | да | Дело пришло из входящего канала (open-line\u002Fзвонок\u002Fписьмо). Только чтение |\n\n> **Обязательные при создании** (`POST \u002Fv1\u002Factivities`): `subject`, `typeId`, `communications`. Поля помечены `required: true` в ответе `\u002Ffields`. Плюс **привязка** к CRM-сущности — через `ownerTypeId` + `ownerId` **или** через `entityTypeId`\u002F`entityId` внутри `communications`. Детали — [Создать дело](\u002Fdocs\u002Fentities\u002Factivities\u002Fcreate).\n\n## Значения typeId\n\n| Значение | Тип дела |\n|----------|---------------|\n| `1` | Звонок |\n| `2` | Встреча |\n| `3` | Задача |\n| `6` | Email |\n\n## Значения ownerTypeId\n\n| Значение | Родительская сущность | Поиск |\n|----------|----------------------|-------|\n| `1` | Лид | `GET \u002Fv1\u002Fleads` |\n| `2` | Сделка | `GET \u002Fv1\u002Fdeals` |\n| `3` | Контакт | `GET \u002Fv1\u002Fcontacts` |\n| `4` | Компания | `GET \u002Fv1\u002Fcompanies` |\n\n\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"fields\": {\n      \"id\": { \"type\": \"number\", \"readonly\": true },\n      \"subject\": { \"type\": \"string\", \"readonly\": false, \"required\": true },\n      \"communications\": { \"type\": \"object\", \"readonly\": false, \"required\": true },\n      \"responsibleId\": { \"type\": \"number\", \"readonly\": false }\n    },\n    \"batch\": [\"create\", \"update\", \"delete\"]\n  }\n}\n```\n\nПоказаны 3 из множества полей. Полный список в таблице выше.\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| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Создать дело](\u002Fdocs\u002Fentities\u002Factivities\u002Fcreate) — какие поля передавать\n- [Entity API](\u002Fdocs\u002Fentity-api) — select для выборки полей\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization) — rate limits\n","\n## Агрегация дел\n\n`POST \u002Fv1\u002Factivities\u002Faggregate`\n\nПодсчёт количества дел с фильтрацией и группировкой.\n\n**Стандартные поля:**\n\n- `typeId` — тип активности (для `groupBy`)\n- `ownerTypeId` — тип родительской сущности (для `groupBy`)\n- `responsibleId` — ответственный (для `groupBy`)\n- `completed` — статус выполнения (для `groupBy`)\n\nВсе поля в `aggregatable` — категориальные идентификаторы, поэтому основной сценарий — `count` с группировкой. Числовые функции `sum`\u002F`avg`\u002F`min`\u002F`max` применяются редко.\n\n## Поля запроса (body)\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `aggregate` | array | нет | Массив агрегаций. Каждый элемент: `{ \"field\": \"*\", \"function\": \"count\" }`. Без массива — только `count` |\n| `filter` | object | нет | Фильтрация по полям `GET \u002Fv1\u002Factivities\u002Ffields`. [Синтаксис фильтрации](\u002Fdocs\u002Ffiltering) |\n| `groupBy` | string \\| string[] | нет | Поле или массив полей для группировки (максимум 5). Допустимые значения — из списка выше |\n\n## Примеры\n\n### curl — личный ключ\n\nКоличество дел по сделке (`ownerTypeId: 2` — сделка), сгруппированное по типу активности:\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002Faggregate\" \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"filter\": { \"ownerTypeId\": 2, \"ownerId\": 741, \"completed\": \"Y\" },\n    \"groupBy\": \"typeId\"\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002Faggregate\" \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"filter\": { \"ownerTypeId\": 2, \"ownerId\": 741, \"completed\": \"Y\" },\n    \"groupBy\": \"typeId\"\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002Faggregate', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    filter: { ownerTypeId: 2, ownerId: 741, completed: 'Y' },\n    groupBy: 'typeId',\n  }),\n})\n\nconst { success, data } = await res.json()\nconsole.log('Всего завершённых дел по сделке:', data.count)\nconsole.log('Распределение по типу:', data.groups)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Factivities\u002Faggregate', {\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    filter: { ownerTypeId: 2, ownerId: 741, completed: 'Y' },\n    groupBy: 'typeId',\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n> Для группировки по нескольким полям передайте массив: `\"groupBy\": [\"typeId\", \"completed\"]` (максимум 5).\n\n## Другие сценарии\n\nОбщее количество дел в портале — самый быстрый запрос, без выгрузки записей:\n\n```json\n{}\n```\n\nГруппировка дел по контакту (`ownerTypeId: 3`) по статусу выполнения:\n\n```json\n{\n  \"filter\": { \"ownerTypeId\": 3, \"ownerId\": 485 },\n  \"groupBy\": \"completed\"\n}\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data.count` | number | Общее количество записей под фильтр |\n| `data.aggregates` | object | Результаты агрегаций (для дел обычно пустой) |\n| `data.groups` | array | Группы (только при `groupBy`). Каждый элемент: поля группировки + `count` |\n| `data.meta.totalRecords` | number | Общее количество записей под фильтр |\n| `data.meta.recordsProcessed` | number | Сколько записей обработано (для `count` — `0`, записи не выгружаются) |\n| `data.meta.truncated` | boolean | `true`, если под фильтр попало больше 5000 записей |\n\n## Пример ответа\n\nОтвет на основной запрос (`groupBy: \"typeId\"`):\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"count\": 2600,\n    \"aggregates\": {},\n    \"groups\": [\n      { \"typeId\": 1, \"count\": 1200 },\n      { \"typeId\": 2, \"count\": 800 },\n      { \"typeId\": 6, \"count\": 600 }\n    ],\n    \"meta\": {\n      \"totalRecords\": 2600,\n      \"recordsProcessed\": 2600,\n      \"truncated\": false\n    }\n  }\n}\n```\n\nБез `groupBy` поле `data.groups` в ответе отсутствует.\n\n## Пример ответа при ошибке\n\n400 — `groupBy` по неаггрегируемому полю или несуществующему полю:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"INVALID_PARAMS\",\n    \"message\": \"groupBy field 'subject' is not aggregatable on this entity. Available: typeId, ownerTypeId, responsibleId, completed\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | `groupBy` по неаггрегируемому полю или больше 5 полей в `groupBy` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Универсальный `ownerTypeId`.** Для счётчиков по родительской сущности используйте пары `ownerTypeId` + `ownerId`: `2` — сделка, `3` — контакт, `4` — компания, `1` — лид. Это самый частый сценарий для `\u002Fv1\u002Factivities\u002Faggregate`.\n\n## Смотрите также\n\n- [Список дел](\u002Fdocs\u002Fentities\u002Factivities\u002Flist) — получить записи с фильтрацией\n- [Поиск дел](\u002Fdocs\u002Fentities\u002Factivities\u002Fsearch) — POST-запрос с фильтрами\n- [Синтаксис фильтрации](\u002Fdocs\u002Ffiltering)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization) — rate limits\n"]