
## Создать задачу

`POST /v1/tasks`

Создаёт новую задачу. Минимум — название и ответственный.

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

| Поле | Тип | Обяз. | Описание |
|------|-----|:-----:|---------|
| `title` | string | ★ | Название задачи |
| `responsibleId` | number | ★ | Ответственный. Список сотрудников: `GET /v1/users` |
| `description` | string | | Описание задачи. Поддерживает BB-код (`[USER=ID]Имя[/USER]`, `[B]...[/B]`, `[QUOTE]...[/QUOTE]`) |
| `priority` | number | | Приоритет: `0` — низкий, `1` — обычный (по умолчанию), `2` — высокий |
| `status` | number | | Статус. По умолчанию `2` (ждёт выполнения). Полный список значений: `GET /v1/tasks/fields` → `fields.status.enum` |
| `deadline` | datetime | | Крайний срок (ISO 8601) |
| `startDatePlan` | datetime | | Плановая дата начала |
| `endDatePlan` | datetime | | Плановая дата окончания |
| `timeEstimate` | number | | Оценка трудозатрат в секундах |
| `groupId` | number | | Рабочая группа. Список: `GET /v1/workgroups` |
| `parentId` | number | | Родительская задача. Список: `GET /v1/tasks` |
| `accomplices` | number[] | | Соисполнители. Список сотрудников: `GET /v1/users` |
| `auditors` | number[] | | Наблюдатели. Список сотрудников: `GET /v1/users` |
| `tags` | string[] | | Метки задачи (массив строк-имён, принимаются прямо при создании) |
| `ufTaskWebdavFiles` | string[] | | Файлы задачи. Массив строк вида `n<id>`, где `id` — идентификатор файла из ответа [`POST /v1/files/upload`](../files/upload.md). Пример — `["n9759"]`. Полное правило для полей-файлов — [Поля задачи](./fields.md) |
| `createdBy` | number | | Постановщик. По умолчанию — пользователь ключа, переопределение применяется в пределах прав вызывающего пользователя. Только существующий сотрудник — см. предупреждение под таблицей. Список сотрудников: `GET /v1/users` |
| `changedBy` | number | | Служебное поле: кто последним изменил задачу. Принимается на записи — см. раздел под таблицей. Список сотрудников: `GET /v1/users` |
| `closedBy` | number | | Служебное поле: кто закрыл задачу. Принимается на записи — см. раздел под таблицей. Список сотрудников: `GET /v1/users` |
| `statusChangedBy` | number | | Служебное поле: кто последним сменил статус. Принимается на записи — см. раздел под таблицей. Список сотрудников: `GET /v1/users` |
| `createdDate` | datetime | | Служебное поле: дата создания задачи, ISO 8601. Принимается на записи — см. раздел под таблицей |
| `changedDate` | datetime | | Служебное поле: дата последнего изменения, ISO 8601. Переданное значение сохраняется вместо текущего времени — см. раздел под таблицей |
| `closedDate` | datetime | | Служебное поле: дата закрытия, ISO 8601. Принимается на записи даже у незакрытой задачи — см. раздел под таблицей |

Полный список полей — [`GET /v1/tasks/fields`](./fields.md). Поля `id`, `dateStart`, `activityDate`, `realStatus` заполняются системой и в body не передаются.

### Служебные поля задачи можно задавать

Кроме `createdBy`, при создании принимаются `changedBy`, `closedBy`, `statusChangedBy`, `createdDate`, `changedDate`, `closedDate`. Битрикс24 сохраняет переданные значения, а Вайбкод — обёртка над ним и не запрещает того, что разрешает платформа. Принимаются оба написания — и `createdBy`, и `CREATED_BY`. Передавайте одно из двух, а не оба сразу: при обоих в одном теле применится то, которое встретится позже. Те же поля принимаются и при [обновлении](./update.md) — там же разобрано, что остаётся в журнале задачи и как ведёт себя дата без часового пояса.

> **Передавайте только существующего сотрудника.** Битрикс24 не проверяет идентификатор пользователя на существование ни в `createdBy`, ни в `changedBy`, `closedBy`, `statusChangedBy` — он запишет любое число. Задача с несуществующим постановщиком перестаёт управляться через API: отказ приходит и на дальнейшее обновление, и на удаление, причём даже ключу администратора и напрямую в Битрикс24, минуя нас. Отменить это через API нельзя. Список сотрудников: [`GET /v1/users`](/docs/entities/users).

> **Важно:** название длиннее 250 символов Битрикс24 не отклоняет — он молча обрезает его до 250. Эмодзи перед обрезкой заменяются служебной последовательностью, поэтому название с эмодзи обрезается раньше. Проверяйте `title` в ответе, если длина названия важна.

## Примеры

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

```bash
curl -X POST "https://vibecode.bitrix24.tech/v1/tasks" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Подготовить отчёт за квартал",
    "responsibleId": 1,
    "priority": 2,
    "deadline": "2026-05-19T18:00:00+03:00"
  }'
```

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

```bash
curl -X POST "https://vibecode.bitrix24.tech/v1/tasks" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Подготовить отчёт за квартал",
    "responsibleId": 1,
    "priority": 2,
    "deadline": "2026-05-19T18:00:00+03:00"
  }'
```

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

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/tasks', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    title: 'Подготовить отчёт за квартал',
    responsibleId: 1,
    priority: 2,
    deadline: '2026-05-19T18:00:00+03:00',
  }),
})

const { success, data } = await res.json()
console.log('ID новой задачи:', data.id)
```

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

```javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/tasks', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    title: 'Подготовить отчёт за квартал',
    responsibleId: 1,
    priority: 2,
    deadline: '2026-05-19T18:00:00+03:00',
  }),
})

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

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

| Поле | Тип | Описание |
|------|-----|---------|
| `success` | boolean | Всегда `true` при успехе |
| `data` | object | Полный объект созданной задачи (как у `GET /v1/tasks/:id`) — см. [Поля задачи](./fields.md) |

URL карточки задачи в Битрикс24 строится из `id` и ID сотрудника:

```
https://<portal>.bitrix24.ru/company/personal/user/<responsibleId>/tasks/task/view/<id>/
```

`<responsibleId>` — ID ответственного (поле `responsibleId` в ответе): задача откроется в его личном кабинете. Сегмент `user/<...>` задаёт, в чьём кабинете отображается страница задач — подставьте ID нужного сотрудника, например текущего. `<portal>` — домен портала. Доступ ограничен правами сотрудника в Битрикс24.

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

```json
{
  "success": true,
  "data": {
    "id": 3871,
    "title": "Подготовить отчёт за квартал",
    "description": "",
    "status": 2,
    "priority": 2,
    "responsibleId": 1,
    "createdBy": 1,
    "createdDate": "2026-05-12T08:46:12.000Z",
    "deadline": "2026-05-19T15:00:00.000Z",
    "groupId": 0,
    "accomplices": [],
    "auditors": [],
    "creator": {
      "id": "1",
      "name": "Текущий пользователь",
      "link": "/company/personal/user/1/"
    },
    "responsible": {
      "id": "1",
      "name": "Текущий пользователь",
      "link": "/company/personal/user/1/"
    }
  }
}
```

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

422 — не указан ответственный:

```json
{
  "success": false,
  "error": {
    "code": "BITRIX_ERROR",
    "message": "Не указан исполнитель"
  }
}
```

## Ошибки

| HTTP | Код | Описание |
|------|-----|---------|
| 422 | `BITRIX_ERROR` | Битрикс24 отклонил создание задачи — например, не передано обязательное поле `title` или `responsibleId`, либо переданное значение отклонено порталом |
| 400 | `READONLY_FIELD` | В теле запроса передано поле, доступное только на чтение (`id`, `dateStart`, `activityDate`, `realStatus`) |
| 400 | `INVALID_DISK_ATTACHMENT_VALUE` | Значение поля-файла передано не массивом строк вида `n<id>` — числом, строкой без префикса или одиночной строкой вместо массива |
| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `tasks` |
| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |

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

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

- [Поля задачи](./fields.md)
- [Получить задачу](./get.md)
- [Обновить задачу](./update.md)
- [Список задач](./list.md)
- [Загрузить файл](../files/upload.md)
- [Batch](/docs/batch)
- [Лимиты и оптимизация](/docs/optimization)
