Для AI-агентов: markdown этой страницы — /docs-content/entities/tasks/dependencies-bulk.md индекс документации — /llms.txt

Связи нескольких задач

POST /v1/tasks/dependencies/bulk

Возвращает предшественников сразу для нескольких задач, до 50 за вызов.

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

Поле Тип Обяз. Описание
ПолеtaskIds Типarray Обяз.да ОписаниеID задач — числа или десятичные строки: "4203" равно 4203. До 500 элементов и до 50 уникальных ID, повторы учитываются один раз. Список задач: GET /v1/tasks

Примеры

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

Terminal
curl -X POST "https://vibecode.bitrix24.tech/v1/tasks/dependencies/bulk" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "taskIds": [4203, "4201", 4203, 999999999]
  }'

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

Terminal
curl -X POST "https://vibecode.bitrix24.tech/v1/tasks/dependencies/bulk" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "taskIds": [4203, "4201", 4203, 999999999]
  }'

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

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/tasks/dependencies/bulk', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    taskIds: [4203, '4201', 4203, 999999999],
  }),
})

const { success, data, meta } = await res.json()
for (const [taskId, deps] of Object.entries(data.results)) {
  console.log(taskId, 'зависит от', deps.map((dep) => dep.id))
}
for (const [taskId, error] of Object.entries(data.errors)) {
  console.log(taskId, 'не прочитана:', error.code)
}

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

javascript
const res = await fetch('https://vibecode.bitrix24.tech/v1/tasks/dependencies/bulk', {
  method: 'POST',
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    taskIds: [4203, '4201', 4203, 999999999],
  }),
})

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

Поля ответа

Поле Тип Описание
Полеsuccess Типboolean Описаниеtrue, если запрос принят. Отказы по отдельным задачам — в data.errors
Полеdata.results Типobject ОписаниеСвязи задач: ключ — ID задачи строкой, значение — массив предшественников
Полеdata.results.<taskId>[].id Типnumber ОписаниеID задачи-предшественника. Получить: GET /v1/tasks/:id
Полеdata.results.<taskId>[].title Типstring | null ОписаниеНазвание задачи-предшественника. null, если портал его не отдал
Полеdata.errors Типobject ОписаниеОтказы по задачам: ключ — ID задачи строкой, значение — объект ошибки
Полеdata.errors.<taskId>.code Типstring ОписаниеКод отказа — один из пяти, см. «Отказы по отдельным задачам» ниже
Полеdata.errors.<taskId>.message Типstring ОписаниеТекст отказа
Полеmeta.requested Типnumber ОписаниеЧисло уникальных ID в запросе: повторы учитываются один раз. Всегда равно succeeded + failed
Полеmeta.succeeded Типnumber ОписаниеСколько задач прочитано
Полеmeta.failed Типnumber ОписаниеСколько задач попало в data.errors
Полеmeta.direction Типstring ОписаниеВсегда predecessors
Полеmeta.source Типstring ОписаниеВсегда RELATED_TASKS

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

Запрос из примеров: повтор 4203 учтён один раз, строка "4201" прочитана как число, задачи 999999999 нет.

JSON
{
  "success": true,
  "data": {
    "results": {
      "4201": [],
      "4203": [
        {
          "id": 4199,
          "title": "Подготовить смету"
        },
        {
          "id": 4201,
          "title": "Согласовать бюджет"
        }
      ]
    },
    "errors": {
      "999999999": {
        "code": "TASK_NOT_FOUND",
        "message": "Task not found."
      }
    }
  },
  "meta": {
    "requested": 3,
    "succeeded": 2,
    "failed": 1,
    "direction": "predecessors",
    "source": "RELATED_TASKS"
  }
}

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

400 — в taskIds больше 50 уникальных ID:

JSON
{
  "success": false,
  "error": {
    "code": "BATCH_LIMIT_EXCEEDED",
    "message": "taskIds carries 51 unique ids; at most 50 are accepted"
  }
}

Ошибки

Отказы всего запроса:

HTTP Код Описание
HTTP400 КодBATCH_LIMIT_EXCEEDED ОписаниеБольше 50 уникальных ID. Сообщение taskIds carries N unique ids; at most 50 are accepted
HTTP400 КодBATCH_LIMIT_EXCEEDED ОписаниеБольше 500 элементов в исходном массиве, проверяется до разбора элементов. Сообщение taskIds carries N elements; at most 500 are read, and at most 50 unique ids are accepted
HTTP400 КодINVALID_PARAMS ОписаниеЭлемент — не целое положительное число. Сообщение называет позицию в исходном массиве, отсчёт с нуля: taskIds[1] must be a positive integer id …
HTTP400 КодINVALID_REQUEST ОписаниеТело — не JSON-объект. Сообщение Request body must be an object with a taskIds array
HTTP400 КодINVALID_REQUEST ОписаниеНет taskIds, это не массив или массив пустой. Так же отвечает запрос без тела. Сообщение taskIds must be a non-empty array
HTTP401 КодMISSING_API_KEY ОписаниеНе передан X-Api-Key
HTTP401 КодTOKEN_MISSING ОписаниеУ ключа нет токенов Битрикс24
HTTP403 КодSCOPE_DENIED ОписаниеУ ключа нет скоупа task
HTTP415 КодFST_ERR_CTP_INVALID_MEDIA_TYPE ОписаниеНепустое тело с Content-Type, отличным от application/json
HTTP429 КодRATE_LIMITED ОписаниеПревышена частота пакетного вызова. Повторите запрос через время из заголовка retry-after

Отказы по отдельным задачам приходят в data.errors при ответе 200 — даже когда отказ пришёл по всем задачам. Проверяйте data.errors, а не только data.results:

Код Описание
КодTASK_NOT_FOUND ОписаниеЗадачи нет или она не видна ключу
КодRATE_LIMITED ОписаниеБитрикс24 ограничил частоту для этого подвызова. Повторите позже
КодOPERATION_TIME_LIMIT ОписаниеБитрикс24 попросил снизить нагрузку. Повторите позже
КодUPSTREAM_INCOMPLETE ОписаниеПригодного ответа по этой задаче не получено
КодDEPENDENCY_LIMIT_EXCEEDED ОписаниеУ задачи больше 1000 связей

Полный список общих ошибок API — Ошибки.

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

Лимит частоты — на портал, а не на ключ. Пакетный вызов ограничен 30 запросами в минуту на портал. Все ключи одного портала расходуют общий лимит, отказы тоже засчитываются. Лимит делится между репликами платформы: действующее значение — в заголовке x-ratelimit-limit, остаток — в x-ratelimit-remaining.

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