Для 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 — личный ключ
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-приложение
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 — личный ключ
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-приложение
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 нет.
{
"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:
{
"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.