[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-timeline-logs\u002Fnotes\u002Fsave":3,"docs-tabs-timeline-logs\u002Fnotes\u002Fsave":6},{"content":4,"lastmod":5},"\n## Сохранить заметку\n\n`POST \u002Fv1\u002Ftimeline-logs\u002F:id\u002Fnote`\n\nСохраняет заметку к одному элементу таймлайна. У каждого элемента таймлайна может быть только одна заметка — повторный вызов с тем же `:id` перезаписывает предыдущий текст.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `id` (path) | number | да | ID лог-записи (или другого элемента таймлайна), к которому прикрепляем заметку |\n\n## Поля запроса (body)\n\n| Поле | Тип | Обяз. | По умолч. | Описание |\n|------|-----|:-----:|-----------|---------|\n| **`entityTypeId`** | number | да | — | Тип родительской CRM-сущности — той, в чьём таймлайне находится элемент. См. [Типы сущностей](\u002Fdocs\u002Ftimeline-logs#типы-родительских-сущностей) |\n| **`entityId`** | number | да | — | ID родительской записи |\n| **`text`** | string | да | — | Текст заметки. Перезапишет существующую заметку, если она есть |\n| `itemType` | number | нет | `1` | Тип элемента: `1` — запись истории таймлайна (включая лог-записи), `2` — дело (см. [`\u002Fv1\u002Factivities`](\u002Fdocs\u002Fentities\u002Factivities)) |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftimeline-logs\u002F5012\u002Fnote \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"entityTypeId\": 2,\n    \"entityId\": 100,\n    \"text\": \"Клиент обычно отвечает в течение 2 дней.\"\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftimeline-logs\u002F5012\u002Fnote \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"entityTypeId\": 2,\n    \"entityId\": 100,\n    \"text\": \"Клиент обычно отвечает в течение 2 дней.\"\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Ftimeline-logs\u002F5012\u002Fnote', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    entityTypeId: 2,\n    entityId: 100,\n    text: 'Клиент обычно отвечает в течение 2 дней.',\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\u002Ftimeline-logs\u002F5012\u002Fnote', {\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    entityTypeId: 2,\n    entityId: 100,\n    text: 'Клиент обычно отвечает в течение 2 дней.',\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data.saved` | boolean | Всегда `true` — подтверждение операции |\n\n## Пример ответа\n\nHTTP 201:\n\n```json\n{\n  \"success\": true,\n  \"data\": { \"saved\": true }\n}\n```\n\n## Пример ответа при ошибке\n\n400 — пропущено обязательное поле:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"INVALID_PARAMS\",\n    \"message\": \"Required body: entityTypeId (positive int), entityId (positive int), text (string). Optional: itemType (default 1)\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_PARAMS` | Не передан или некорректен `entityTypeId` \u002F `entityId` \u002F `text`, либо `itemType` не равен 1 или 2 |\n| 422 | `BITRIX_ERROR` | Битрикс24 отклонил запрос (например, item с указанным `id` не существует) |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Один вызов создаёт или обновляет.** Если у элемента нет заметки — создастся; если есть — текст перезапишется. Отдельного метода для обновления нет, повторный `POST` с новым текстом и есть «обновление».\n\n**Не валидирует существование `:id` лог-записи.** Если передать `id` несуществующей записи — `save` всё равно вернёт `201 + {saved: true}`. Заметка реально не привяжется — при попытке прочитать через [`GET \u002F:id\u002Fnote`](\u002Fdocs\u002Ftimeline-logs\u002Fnotes\u002Fget) ответом будет `404 ENTITY_NOT_FOUND`. Перед `save` убедитесь, что лог-запись существует.\n\n**`itemType: 1` подходит для лог-записей и комментариев таймлайна.** Используйте `itemType: 2` только если работаете с делом из [`\u002Fv1\u002Factivities`](\u002Fdocs\u002Fentities\u002Factivities).\n\n**Заметка и лог-запись — разные понятия.** Лог-запись — самостоятельный элемент в истории таймлайна (создаётся через [`POST \u002Fv1\u002Ftimeline-logs`](\u002Fdocs\u002Ftimeline-logs\u002Flogs\u002Fcreate)). Заметка — короткий комментарий, прикреплённый к элементу. У одного элемента максимум одна заметка.\n\n**Заметку нельзя получить без `entityTypeId` + `entityId`.** Несмотря на то что заметка привязана к конкретному `itemId`, B24 требует контекст родительской сущности при чтении и удалении. Сохраняйте эти параметры при создании.\n\n## Смотрите также\n\n- [Получить заметку](\u002Fdocs\u002Ftimeline-logs\u002Fnotes\u002Fget) — прочитать текст и автора\n- [Удалить заметку](\u002Fdocs\u002Ftimeline-logs\u002Fnotes\u002Fdelete) — параметры передаются в query, не в body\n- [Создать лог-запись](\u002Fdocs\u002Ftimeline-logs\u002Flogs\u002Fcreate) — основной элемент, к которому крепится заметка\n- [Закрепить запись](\u002Fdocs\u002Ftimeline-logs\u002Fpins\u002Fpin) — выделить запись с заметкой в верхней части таймлайна\n","2026-06-16",{}]