
## Создать дело

`POST /v1/activities`

Создаёт новое CRM-дело: звонок, встречу, задачу или email. Дело привязывается к CRM-сущности через `ownerTypeId` + `ownerId`.

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

Минимальный набор для создания дела — `subject`, `typeId`, `communications` плюс **привязка** к CRM-сущности. Привязку задаёт **либо** пара `ownerTypeId` + `ownerId`, **либо** поля `entityTypeId` + `entityId` внутри элемента `communications`. Если не задано ни одно из двух, Bitrix24 не может привязать коммуникацию и возвращает ошибку про `communications`.

| Параметр | Тип | Обяз. | Описание |
|----------|-----|:-----:|---------|
| `subject` | string | да | Тема дела |
| `typeId` | number | да | Тип: `1` — встреча, `2` — звонок, `3` — задача, `4` — письмо, `5` — действие, `6` — пользовательское действие |
| `communications` | object[] | да | Коммуникации дела. Массив объектов: `[{ "value": "+7…", "entityTypeId": 3, "entityId": 17 }]`. Вложенные ключи принимаются в camelCase (`type`, `value`, `entityTypeId`, `entityId`) — как и во всём остальном API — либо в ВЕРХНЕМ регистре Bitrix24 (`TYPE`, `VALUE`, `ENTITY_TYPE_ID`, `ENTITY_ID`). `value` — телефон/e-mail; `entityTypeId` + `entityId` — CRM-сущность, которой принадлежит коммуникация (задаёт привязку, если не переданы `ownerTypeId`/`ownerId`). Когда владелец указан, достаточно `[{ "value": "+7…" }]` |
| `ownerTypeId` | number | да¹ | Тип родительской сущности: `1` — лид, `2` — сделка, `3` — контакт, `4` — компания |
| `ownerId` | number | да¹ | ID родительской сущности. Поиск: `GET /v1/deals`, `GET /v1/leads`, `GET /v1/contacts`, `GET /v1/companies` |
| `responsibleId` | number | | Ответственный. По умолчанию — текущий пользователь. Список: `GET /v1/users` |
| `description` | string | | Описание |
| `priority` | number | | Приоритет: `1` — низкий, `2` — средний, `3` — высокий |
| `direction` | number | | Направление: `1` — входящее, `2` — исходящее |
| `completed` | boolean | | Завершена |
| `startTime` | datetime | | Дата начала |
| `endTime` | datetime | | Дата окончания |
| `deadline` | datetime | | Крайний срок. **На создании Bitrix24 игнорирует переданное значение и вычисляет `deadline` из `startTime`/`endTime`** — отдельно задать его при `POST` нельзя |

¹ Пара `ownerTypeId` + `ownerId` нужна вместе и **только если** привязка не задана через `entityTypeId`/`entityId` внутри `communications`. Если привязка идёт через коммуникацию — оба поля можно опустить.

> ℹ️ Вложенные ключи `communications` принимаются в двух формах: camelCase (`type`, `value`, `entityTypeId`, `entityId`) — единообразно с остальным API — и в ВЕРХНЕМ регистре Bitrix24 (`TYPE`, `VALUE`, `ENTITY_TYPE_ID`, `ENTITY_ID`). Если в одном объекте заданы обе формы одного ключа, приоритет у ВЕРХНЕГО регистра.

Полный список полей: [GET /v1/activities/fields](/docs/entities/activities/fields).

## Примеры

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

```bash
curl -X POST https://vibecode.bitrix24.tech/v1/activities \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "typeId": 2,
    "ownerTypeId": 3,
    "ownerId": 17,
    "subject": "Звонок клиенту",
    "description": "Обсудить условия поставки",
    "responsibleId": 1,
    "priority": 2,
    "direction": 2,
    "communications": [
      { "value": "+7 999 123-45-67", "entityTypeId": 3, "entityId": 17 }
    ],
    "startTime": "2026-04-16T10:00:00+03:00",
    "endTime": "2026-04-16T10:15:00+03:00"
  }'
```

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

```bash
curl -X POST https://vibecode.bitrix24.tech/v1/activities \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "typeId": 2,
    "ownerTypeId": 3,
    "ownerId": 17,
    "subject": "Звонок клиенту",
    "description": "Обсудить условия поставки",
    "responsibleId": 1,
    "priority": 2,
    "direction": 2,
    "communications": [
      { "value": "+7 999 123-45-67", "entityTypeId": 3, "entityId": 17 }
    ],
    "startTime": "2026-04-16T10:00:00+03:00",
    "endTime": "2026-04-16T10:15:00+03:00"
  }'
```

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

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/activities', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    typeId: 2,
    ownerTypeId: 3,
    ownerId: 17,
    subject: 'Звонок клиенту',
    description: 'Обсудить условия поставки',
    responsibleId: 1,
    priority: 2,
    direction: 2,
    communications: [
      { value: '+7 999 123-45-67', entityTypeId: 3, entityId: 17 },
    ],
    startTime: '2026-04-16T10:00:00+03:00',
    endTime: '2026-04-16T10:15:00+03:00',
  }),
})

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

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

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/activities', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    typeId: 2,
    ownerTypeId: 3,
    ownerId: 17,
    subject: 'Звонок клиенту',
    description: 'Обсудить условия поставки',
    responsibleId: 1,
    priority: 2,
    direction: 2,
    communications: [
      { value: '+7 999 123-45-67', entityTypeId: 3, entityId: 17 },
    ],
    startTime: '2026-04-16T10:00:00+03:00',
    endTime: '2026-04-16T10:15:00+03:00',
  }),
})

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

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

| Поле | Тип | Описание |
|------|-----|---------|
| `id` | number | ID созданного дела |
| `typeId` | number | Тип дела |
| `ownerTypeId` | number | Тип родительской сущности |
| `ownerId` | number | ID родительской сущности |
| `subject` | string | Тема |
| `responsibleId` | number | Ответственный |
| `createdAt` | datetime | Дата создания |
| `updatedAt` | datetime | Дата изменения |

Ответ содержит все поля дела.

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

```json
{
  "success": true,
  "data": {
    "id": 3894,
    "typeId": 2,
    "ownerTypeId": 3,
    "ownerId": 17,
    "subject": "Звонок клиенту",
    "description": "Обсудить условия поставки",
    "responsibleId": 1,
    "priority": 2,
    "direction": 2,
    "completed": false,
    "startTime": "2026-04-16T10:00:00+03:00",
    "endTime": "2026-04-16T10:15:00+03:00",
    "deadline": "2026-04-16T10:00:00+03:00",
    "createdAt": "2026-04-15T14:30:00+03:00",
    "updatedAt": "2026-04-15T14:30:00+03:00"
  }
}
```

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

400 — не передано обязательное поле (`subject`, `typeId` или `communications`):

```json
{
  "success": false,
  "error": {
    "code": "MISSING_REQUIRED_FIELDS",
    "message": "Body field \"communications\" is required to create activity."
  }
}
```

403 — нет скоупа:

```json
{
  "success": false,
  "error": {
    "code": "SCOPE_DENIED",
    "message": "This endpoint requires 'crm' scope"
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|------|-----|---------|
| 400 | `MISSING_REQUIRED_FIELDS` | Не передано одно из обязательных полей: `subject`, `typeId`, `communications` (проверяется до вызова Bitrix24) |
| 400 | `INVALID_REQUEST` | Невалидные значения полей |
| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `crm` |
| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |

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

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

- [Список дел](/docs/entities/activities/list) — получение с фильтрами
- [Поля дела](/docs/entities/activities/fields) — полный список полей
- [Сделки](/docs/entities/deals) — привязка через `ownerTypeId=2`
- [Лиды](/docs/entities/leads) — привязка через `ownerTypeId=1`
- [Entity API](/docs/entity-api) — общие принципы
- [Лимиты и оптимизация](/docs/optimization) — rate limits
