[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-timeline-logs\u002Fbindings":3,"docs-tabs-timeline-logs\u002Fbindings":6},{"content":4,"lastmod":5},"# Привязки\n\nСвязывание одной лог-записи с несколькими CRM-сущностями. Помимо родительской сущности (указанной при создании), запись можно дополнительно привязать к другим записям CRM — она появится в их таймлайнах тоже.\n\nБитрикс24 API: `crm.timeline.bindings.*`\nСкоуп: `crm`\n\n## Операции\n\n- [Привязать запись](.\u002Fbindings\u002Fbind.md) — `POST \u002Fv1\u002Ftimeline-logs\u002F:id\u002Fbind`\n- [Отвязать](.\u002Fbindings\u002Funbind.md) — `POST \u002Fv1\u002Ftimeline-logs\u002F:id\u002Funbind`\n- [Список привязок](.\u002Fbindings\u002Flist.md) — `GET \u002Fv1\u002Ftimeline-logs\u002F:id\u002Fbindings`\n\n## Когда использовать\n\n- AI-агент обработал сделку клиента — событие должно появиться и в таймлайне сделки, и в таймлайне контакта, и в таймлайне компании. Создаём запись для сделки, привязываем к контакту и компании.\n- Платёж по счёту прошёл — отметить во всех связанных карточках одновременно.\n- Документ подписан несколькими сторонами — лог в таймлайне всех вовлечённых контактов и компаний.\n\n## Типовой сценарий\n\n1. Создать лог-запись для основной сущности: [`POST \u002Fv1\u002Ftimeline-logs`](\u002Fdocs\u002Ftimeline-logs\u002Flogs\u002Fcreate) с `entityTypeId: 2, entityId: \u003CdealId>`.\n2. Привязать к контакту: [`POST \u002Fv1\u002Ftimeline-logs\u002F:id\u002Fbind`](.\u002Fbindings\u002Fbind.md) с `entityTypeId: 3, entityId: \u003CcontactId>`.\n3. Привязать к компании: ещё один `POST \u002F:id\u002Fbind` с `entityTypeId: 4`.\n4. Проверить итоговый список: [`GET \u002Fv1\u002Ftimeline-logs\u002F:id\u002Fbindings`](.\u002Fbindings\u002Flist.md) — должно быть три привязки.\n\n## Поддерживаемые типы сущностей\n\n| `entityTypeId` | строковый `ENTITY_TYPE` |\n|:---:|---|\n| 1 | `lead` |\n| 2 | `deal` |\n| 3 | `contact` |\n| 4 | `company` |\n| 7 | `quote` |\n| 14 | `order` |\n| 31 | `smart_invoice` |\n| ≥ 128 | `dynamic_\u003CentityTypeId>` (произвольные смарт-процессы) |\n\nВ bind\u002Funbind можно передать либо `entityTypeId` (числовой), либо `entityType` (строка) напрямую — Вайбкод сам подставит нужное значение в B24-вызов. В ответе `bindings.list` приходят оба поля для удобства клиента.\n\n## Смотрите также\n\n- [Таймлайн CRM](\u002Fdocs\u002Ftimeline-logs) — обзор раздела\n- [Записи журнала](\u002Fdocs\u002Ftimeline-logs\u002Flogs) — создание лог-записей перед привязкой\n- [Смарт-процессы](\u002Fdocs\u002Fentities\u002Fsmart-processes) — для пользовательских CRM-типов с `entityTypeId ≥ 128`\n","2026-06-24",{"bindings\u002Fbind.md":7,"bindings\u002Funbind.md":8,"bindings\u002Flist.md":9},"\n## Привязать запись\n\n`POST \u002Fv1\u002Ftimeline-logs\u002F:id\u002Fbind`\n\nПривязывает существующую лог-запись к дополнительной CRM-сущности — в её таймлайне появится та же запись. Используется, когда одно событие должно быть видно сразу в нескольких карточках: сделке, контакте, компании.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `id` (path) | number | да | ID лог-записи |\n\n## Поля запроса (body)\n\n| Поле | Тип | Обяз. | Описание |\n|------|-----|:-----:|---------|\n| **`entityId`** | number | да | ID сущности, к которой привязываем |\n| **`entityTypeId`** | number | да* | Числовой тип CRM-сущности. См. [Типы сущностей](\u002Fdocs\u002Ftimeline-logs#типы-родительских-сущностей) |\n| **`entityType`** | string | да* | Строковый код типа: `\"lead\"`, `\"deal\"`, `\"contact\"`, `\"company\"`, `\"quote\"`, `\"order\"`, `\"smart_invoice\"`, `\"dynamic_\u003CentityTypeId>\"` |\n\n*Передайте **либо** `entityTypeId`, **либо** `entityType` — Вайбкод сам подставит нужное в B24-вызов. Если переданы оба, `entityType` имеет приоритет.\n\n## Поддерживаемые типы\n\n| `entityTypeId` | `entityType` |\n|:---:|---|\n| 1 | `lead` |\n| 2 | `deal` |\n| 3 | `contact` |\n| 4 | `company` |\n| 7 | `quote` |\n| 14 | `order` |\n| 31 | `smart_invoice` |\n| ≥ 128 | `dynamic_\u003CentityTypeId>` (произвольный смарт-процесс) |\n\nЛюбой `entityTypeId` \u003C 128, отсутствующий в таблице, возвращает `400 INVALID_ENTITY_TYPE_ID`. Список смарт-процессов портала — [`GET \u002Fv1\u002Fsmart-processes`](\u002Fdocs\u002Fentities\u002Fsmart-processes\u002Flist).\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftimeline-logs\u002F5012\u002Fbind \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"entityTypeId\": 3, \"entityId\": 50 }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftimeline-logs\u002F5012\u002Fbind \\\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\": 50 }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\n\u002F\u002F Привязать к контакту\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftimeline-logs\u002F5012\u002Fbind', {\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: 50 }),\n})\n\nconst { success } = await res.json()\n\n\u002F\u002F Альтернатива — указать тип строкой (полезно для смарт-процессов)\nawait fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftimeline-logs\u002F5012\u002Fbind', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({ entityType: 'dynamic_174', entityId: 1 }),\n})\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftimeline-logs\u002F5012\u002Fbind', {\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: 50 }),\n})\n\nconst { success } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data.bound` | boolean | Всегда `true` — подтверждение привязки |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": { \"bound\": true }\n}\n```\n\n## Пример ответа при ошибке\n\n400 — `entityTypeId` без отображения на `ENTITY_TYPE`:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"INVALID_ENTITY_TYPE_ID\",\n    \"message\": \"entityTypeId=99 has no ENTITY_TYPE mapping. Use 1=lead, 2=deal, 3=contact, 4=company, 7=quote, 14=order, 31=smart_invoice, or ≥128 for smart-processes.\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | Не передан `entityId` или ни `entityTypeId`, ни `entityType` |\n| 400 | `INVALID_ENTITY_TYPE_ID` | `entityTypeId` \u003C 128 и нет в таблице маппинга |\n| 422 | `BITRIX_ERROR` | Битрикс24 отклонил запрос (например, `entityType` неизвестен или сущность не существует) |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Родительская сущность уже привязана автоматически.** При создании лог-записи через [`POST \u002Fv1\u002Ftimeline-logs`](\u002Fdocs\u002Ftimeline-logs\u002Flogs\u002Fcreate) для `entityTypeId+entityId` запись уже считается привязанной к этой паре. `bind` нужен только для **дополнительных** сущностей.\n\n**Регистр строкового `entityType` не важен.** Вайбкод приводит к нижнему регистру — `\"DEAL\"`, `\"Deal\"`, `\"deal\"` дают одинаковый результат. В ответах [`bindings.list`](\u002Fdocs\u002Ftimeline-logs\u002Fbindings\u002Flist) тип всегда возвращается в нижнем регистре.\n\n**Привязка к одной и той же паре идемпотентна на уровне B24.** Повторный `bind` к уже привязанной сущности — операция отдаст `200 + {bound: true}` без ошибки. В списке привязок дубликат не появится.\n\n**Нельзя привязать к произвольному типу.** Если в `entityType` передать что-то отсутствующее в B24-словаре (`\"random\"`, `\"foo\"`), B24 вернёт `ENTITY_TYPE is not defined or invalid.` — Вайбкод пробросит это как `422 BITRIX_ERROR`. Проверка списка типов на стороне Вайбкод идёт только по `entityTypeId`-маппингу.\n\n**Не валидирует существование `:id` лог-записи.** Если в пути передать `id` несуществующей лог-записи — `bind` всё равно вернёт `200 + {bound: true}` без ошибки. Привязка не создастся, потому что нет источника. Перед `bind` стоит убедиться, что лог-запись существует ([`GET \u002Fv1\u002Ftimeline-logs\u002F:id`](\u002Fdocs\u002Ftimeline-logs\u002Flogs\u002Fget)) или использовать `id`, только что вернувшийся из [`POST \u002Fv1\u002Ftimeline-logs`](\u002Fdocs\u002Ftimeline-logs\u002Flogs\u002Fcreate).\n\n## Смотрите также\n\n- [Отвязать](\u002Fdocs\u002Ftimeline-logs\u002Fbindings\u002Funbind) — обратная операция\n- [Список привязок](\u002Fdocs\u002Ftimeline-logs\u002Fbindings\u002Flist) — все сущности, к которым запись привязана\n- [Создать запись](\u002Fdocs\u002Ftimeline-logs\u002Flogs\u002Fcreate) — родительская сущность привязывается автоматически\n","\n## Отвязать\n\n`POST \u002Fv1\u002Ftimeline-logs\u002F:id\u002Funbind`\n\nУдаляет привязку лог-записи к указанной CRM-сущности. В её таймлайне запись больше не отображается, но остаётся в журналах остальных привязанных сущностей.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `id` (path) | number | да | ID лог-записи |\n\n## Поля запроса (body)\n\nТе же поля, что и в [`bind`](\u002Fdocs\u002Ftimeline-logs\u002Fbindings\u002Fbind):\n\n| Поле | Тип | Обяз. | Описание |\n|------|-----|:-----:|---------|\n| **`entityId`** | number | да | ID сущности, от которой отвязываем |\n| **`entityTypeId`** | number | да* | Числовой тип CRM-сущности |\n| **`entityType`** | string | да* | Строковый код типа: `\"lead\"`, `\"deal\"`, `\"contact\"`, `\"company\"`, `\"quote\"`, `\"order\"`, `\"smart_invoice\"`, `\"dynamic_\u003CentityTypeId>\"` |\n\n*Передайте либо `entityTypeId`, либо `entityType`. Полный список поддерживаемых типов — [Привязать запись](\u002Fdocs\u002Ftimeline-logs\u002Fbindings\u002Fbind#поддерживаемые-типы).\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftimeline-logs\u002F5012\u002Funbind \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{ \"entityTypeId\": 3, \"entityId\": 50 }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftimeline-logs\u002F5012\u002Funbind \\\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\": 50 }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftimeline-logs\u002F5012\u002Funbind', {\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: 50 }),\n})\n\nconst { success } = await res.json()\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftimeline-logs\u002F5012\u002Funbind', {\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: 50 }),\n})\n\nconst { success } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data.bound` | boolean | Всегда `false` — подтверждение, что привязка снята |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": { \"bound\": false }\n}\n```\n\n## Пример ответа при ошибке\n\n400 — `entityTypeId` без отображения:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"INVALID_ENTITY_TYPE_ID\",\n    \"message\": \"entityTypeId=99 has no ENTITY_TYPE mapping. Use 1=lead, 2=deal, 3=contact, 4=company, 7=quote, 14=order, 31=smart_invoice, or ≥128 for smart-processes.\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | Не передан `entityId` или ни `entityTypeId`, ни `entityType` |\n| 400 | `INVALID_ENTITY_TYPE_ID` | `entityTypeId` \u003C 128 и нет в таблице маппинга |\n| 422 | `BITRIX_ERROR` | Битрикс24 отклонил запрос |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Идемпотентно.** Отвязать от уже отвязанной сущности — `200 + {bound: false}` без ошибки.\n\n**Не валидирует существование `:id` лог-записи.** На несуществующий `id` `unbind` тоже возвращает `200 + {bound: false}` — операция silently no-op. Если важен факт «привязка реально существовала и была удалена» — сначала [`GET \u002Fv1\u002Ftimeline-logs\u002F:id\u002Fbindings`](\u002Fdocs\u002Ftimeline-logs\u002Fbindings\u002Flist) и проверьте список перед `unbind`.\n\n**Не отвязывайте единственную привязку — запись «осиротеет».** Если у записи только одна привязка (например, та, что создана автоматически вместе с записью), `unbind` ответит `200 + {bound: false}`, но запись после этого станет недоступна через API: [`GET \u002Fv1\u002Ftimeline-logs\u002F:id`](\u002Fdocs\u002Ftimeline-logs\u002Flogs\u002Fget) вернёт `403 BITRIX_ACCESS_DENIED`. Это поведение Битрикс24 — без активной привязки запись теряет доступ.\n\n**Безопасный порядок при смене родителя.** Сначала привяжите к новой сущности через [`POST \u002F:id\u002Fbind`](.\u002Fbind.md), затем отвяжите от исходной. Пока есть хотя бы одна оставшаяся привязка — запись остаётся доступной через её таймлайн.\n\n**Чтобы убрать запись отовсюду — удаляйте через `DELETE`.** [`DELETE \u002Fv1\u002Ftimeline-logs\u002F:id`](\u002Fdocs\u002Ftimeline-logs\u002Flogs\u002Fdelete) удаляет запись разом из всех привязанных таймлайнов (с учётом ограничения cross-app — см. документацию метода).\n\n## Смотрите также\n\n- [Привязать](\u002Fdocs\u002Ftimeline-logs\u002Fbindings\u002Fbind) — обратная операция\n- [Список привязок](\u002Fdocs\u002Ftimeline-logs\u002Fbindings\u002Flist) — проверить, к чему запись сейчас привязана\n- [Удалить запись](\u002Fdocs\u002Ftimeline-logs\u002Flogs\u002Fdelete) — полностью убрать запись из всех таймлайнов\n","\n## Список привязок\n\n`GET \u002Fv1\u002Ftimeline-logs\u002F:id\u002Fbindings`\n\nВозвращает все CRM-сущности, к которым привязана лог-запись. Удобно проверить, в каких таймлайнах сейчас отображается событие.\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\u002Ftimeline-logs\u002F5012\u002Fbindings \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftimeline-logs\u002F5012\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\u002Ftimeline-logs\u002F5012\u002Fbindings', {\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\n\nconst { data, total } = await res.json()\ndata.forEach(b => console.log(`${b.entityType} #${b.entityId}`))\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftimeline-logs\u002F5012\u002Fbindings', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n\nconst { data, total } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data` | array | Массив привязок |\n| `data[].ownerId` | number | ID самой лог-записи (равен `:id` из пути, продублирован для удобства) |\n| `data[].entityId` | number | ID привязанной CRM-сущности |\n| `data[].entityType` | string | Строковый тип: `\"deal\"`, `\"contact\"`, `\"dynamic_174\"` и т. п. |\n| `data[].entityTypeId` | number | Числовой тип. Присутствует, если строка маппится в таблицу типов; для произвольных смарт-процессов извлекается из `dynamic_\u003Cid>` |\n| `total` | number | Количество привязок |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": [\n    { \"ownerId\": 5012, \"entityId\": 100, \"entityType\": \"deal\", \"entityTypeId\": 2 },\n    { \"ownerId\": 5012, \"entityId\": 50, \"entityType\": \"contact\", \"entityTypeId\": 3 },\n    { \"ownerId\": 5012, \"entityId\": 10, \"entityType\": \"company\", \"entityTypeId\": 4 },\n    { \"ownerId\": 5012, \"entityId\": 1, \"entityType\": \"dynamic_174\", \"entityTypeId\": 174 }\n  ],\n  \"total\": 4\n}\n```\n\n## Пример ответа при ошибке\n\n400 — `id` некорректен:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"INVALID_PARAMS\",\n    \"message\": \"Path parameter :id must be a positive integer\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | `id` не положительное целое |\n| 422 | `BITRIX_ERROR` | Битрикс24 отклонил запрос |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Родительская сущность входит в список.** При создании записи через [`POST \u002Fv1\u002Ftimeline-logs`](\u002Fdocs\u002Ftimeline-logs\u002Flogs\u002Fcreate) пара `entityTypeId+entityId` автоматически добавляется в bindings. Поэтому даже без явных `bind`-вызовов `total ≥ 1`.\n\n**Оба формата типа в одном объекте.** Вайбкод возвращает и `entityType` (строка из B24), и `entityTypeId` (число) — для удобства клиента. Если значение строки не маппится (нестандартный смарт-процесс с `entityTypeId \u003C 128` без ясного названия), `entityTypeId` может отсутствовать в объекте.\n\n**Несуществующий `id` — пустой массив, не 404.** Если запросить bindings для несуществующей лог-записи, B24 отдаст `total: 0, data: []` без ошибки. Чтобы проверить существование записи — используйте [`GET \u002Fv1\u002Ftimeline-logs\u002F:id`](\u002Fdocs\u002Ftimeline-logs\u002Flogs\u002Fget).\n\n**Сортировка не задаётся параметром.** Список приходит обычно по `entityId` возрастанию, но порядок не гарантирован. Если нужен предсказуемый порядок — сортируйте на клиенте.\n\n## Смотрите также\n\n- [Привязать](\u002Fdocs\u002Ftimeline-logs\u002Fbindings\u002Fbind) — добавить новую сущность\n- [Отвязать](\u002Fdocs\u002Ftimeline-logs\u002Fbindings\u002Funbind) — снять привязку\n- [Получить запись](\u002Fdocs\u002Ftimeline-logs\u002Flogs\u002Fget) — проверить существование `id`\n- [Создать запись](\u002Fdocs\u002Ftimeline-logs\u002Flogs\u002Fcreate) — родительская сущность сразу попадает в bindings\n"]