
## Создать запись

`POST /v1/timeline-logs`

Создаёт новую запись в журнале (таймлайне) CRM-сущности. Запись появится в истории карточки сделки, лида, контакта, компании или смарт-процесса как сообщение от приложения.

## Поля запроса (body)

| Поле | Тип | Обяз. | Описание |
|------|-----|:-----:|---------|
| **`entityTypeId`** | number | да | Тип родительской CRM-сущности: `1`=лид, `2`=сделка, `3`=контакт, `4`=компания, `7`=предложение, `14`=заказ, `31`=счёт, `≥128`=смарт-процесс. Подробнее — [Типы сущностей](/docs/timeline-logs#типы-родительских-сущностей) |
| **`entityId`** | number | да | ID родительской записи. Источник: `GET /v1/deals`, `GET /v1/leads`, `GET /v1/contacts`, `GET /v1/companies`, `GET /v1/items/:entityTypeId` |
| **`title`** | string | да | Заголовок записи. Отображается жирным в карточке таймлайна |
| **`text`** | string | да | Основной текст записи. Пустая строка допустима (`""`) |
| `iconCode` | string | нет | Код иконки рядом с заголовком. Часто используемые: `info`, `circle-check`, `document`, `link`, `unlink`, `view`, `stage-change`, `sum`, `store`, `relation`, `IM`, `call`, `call-incoming`, `call-completed`. По умолчанию пустая строка `""` (без иконки) |

## Примеры

### curl — личный ключ

```bash
curl -X POST https://vibecode.bitrix24.tech/v1/timeline-logs \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "entityTypeId": 2,
    "entityId": 100,
    "title": "AI-агент обработал заявку",
    "text": "Проанализированы данные клиента. Рекомендация: тариф Enterprise."
  }'
```

### curl — OAuth-приложение

```bash
curl -X POST https://vibecode.bitrix24.tech/v1/timeline-logs \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "entityTypeId": 2,
    "entityId": 100,
    "title": "AI-агент обработал заявку",
    "text": "Проанализированы данные клиента. Рекомендация: тариф Enterprise."
  }'
```

### JavaScript — личный ключ

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/timeline-logs', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    entityTypeId: 2,
    entityId: 100,
    title: 'AI-агент обработал заявку',
    text: 'Проанализированы данные клиента. Рекомендация: тариф Enterprise.',
  }),
})

const { success, data } = await res.json()
console.log('Log ID:', data.id)
```

### JavaScript — OAuth-приложение

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/timeline-logs', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    entityTypeId: 2,
    entityId: 100,
    title: 'AI-агент обработал заявку',
    text: 'Проанализированы данные клиента. Рекомендация: тариф Enterprise.',
  }),
})

const { success, data } = await res.json()
```

## Поля ответа

| Поле | Тип | Описание |
|------|-----|---------|
| `id` | number | ID созданной лог-записи |
| `created` | datetime | Дата создания, ISO 8601 с таймзоной портала |
| `authorId` | number | ID автора. При создании через API соответствует пользователю API-ключа |
| `title` | string | Заголовок |
| `text` | string | Текст записи |
| `iconCode` | string | Код иконки (или `""`, если не задан) |

## Пример ответа

```json
{
  "success": true,
  "data": {
    "id": 5012,
    "created": "2026-04-27T10:00:00+03:00",
    "authorId": 1,
    "title": "AI-агент обработал заявку",
    "text": "Проанализированы данные клиента. Рекомендация: тариф Enterprise.",
    "iconCode": ""
  }
}
```

## Пример ответа при ошибке

400 — пропущено обязательное поле:

```json
{
  "success": false,
  "error": {
    "code": "INVALID_PARAMS",
    "message": "Required: entityTypeId (positive int), entityId (positive int), title (string), text (string). Optional: iconCode (string, default \"\")"
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|------|-----|---------|
| 400 | `INVALID_PARAMS` | Не передан или некорректен `entityTypeId`, `entityId`, `title`, `text` либо тип `iconCode` не строка |
| 422 | `BITRIX_ERROR` | Битрикс24 отклонил запрос (например, родительская сущность не существует) |
| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |
| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |

Полный список общих ошибок API — [Ошибки](/docs/errors).

## Известные особенности

**Удаление возможно только тем же приложением.** Битрикс24 запрещает удалять лог-запись через приложение, отличное от создавшего. Личные ключи (`vibe_api_*`) ротируют OAuth-токены, поэтому через них `DELETE` всегда возвращает `403 CROSS_APP_DELETE_FORBIDDEN`. Для полного жизненного цикла «создать → удалить через API» используйте OAuth-приложение (`vibe_app_*` + `Authorization: Bearer ...`). Подробнее — [Удалить запись](/docs/timeline-logs/logs/delete).

**Поле `text` обязательное, но допускает пустую строку.** Битрикс24 принимает `text: ""`, заголовок `title` всё равно отображается. Если хочется оставить без описания — передавайте пустую строку, а не `null`.

**Поле `iconCode` сохраняется как пустая строка по умолчанию.** В ответе `iconCode` всегда присутствует, даже если не передавали — приходит `""`.

## Смотрите также

- [Список записей](/docs/timeline-logs/logs/list)
- [Получить запись](/docs/timeline-logs/logs/get)
- [Удалить запись](/docs/timeline-logs/logs/delete)
- [Закрепить запись](/docs/timeline-logs/pins/pin)
- [Привязать к ещё одной сущности](/docs/timeline-logs/bindings/bind)
- [Сохранить заметку](/docs/timeline-logs/notes/save)
