Для AI-агентов: markdown этой страницы — /docs-content/openlines/sessions/transfers.md индекс документации — /llms.txt
История переназначений
Метод выходит в обновлении
imopenlines 26.700.0и доступен пока не на всех порталах Битрикс24. Если обновление на ваш портал ещё не пришло, API вернёт422 METHOD_NOT_YET_AVAILABLE— это признак того, что метод на портале ещё не выпущен, а не ошибка интеграции.
POST /v1/openlines/sessions/transfers
Хронологический список переназначений (переводов) по конкретным сессиям — от кого к кому, между какими линиями, по какой причине.
Поля запроса (body)
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
ПолеsessionId |
Типnumber[] | Обяз.да | ОписаниеМассив идентификаторов сессий, до 50 элементов. Источник: POST /v1/openlines/sessions/search. Одиночное число тоже принимается и оборачивается в массив |
Повторы в sessionId учитываются один раз. Несуществующий, чужой или недоступный sessionId не приводит к ошибке — для него не будет записей в transfers.
Примеры
curl — личный ключ
curl -X POST "https://vibecode.bitrix24.tech/v1/openlines/sessions/transfers" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "sessionId": [809, 805] }'
curl — OAuth-приложение
curl -X POST "https://vibecode.bitrix24.tech/v1/openlines/sessions/transfers" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "sessionId": [809, 805] }'
JavaScript — личный ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/openlines/sessions/transfers', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({ sessionId: [809, 805] }),
})
const { data } = await res.json()
JavaScript — OAuth-приложение
const res = await fetch('https://vibecode.bitrix24.tech/v1/openlines/sessions/transfers', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({ sessionId: [809, 805] }),
})
const { data } = await res.json()
Поля ответа
Переводы всех запрошенных сессий идут общим списком в хронологическом порядке по возрастанию date. Для группировки по сессиям используйте поле data.transfers[].sessionId.
| Поле | Тип | Описание |
|---|---|---|
Полеsuccess |
Типboolean | Описаниеtrue при успешном ответе |
Полеdata.transfers |
Типarray | ОписаниеПереназначения по всем запрошенным сессиям. Пустой массив, если переводов не было |
Полеdata.transfers[].sessionId |
Типnumber | ОписаниеИдентификатор сессии |
Полеdata.transfers[].date |
Типstring | ОписаниеДата и время переназначения, ISO 8601 |
Полеdata.transfers[].fromOperatorId |
Типnumber | null | ОписаниеОператор, от которого ушёл диалог. null, если из очереди. Сотрудник — GET /v1/users |
Полеdata.transfers[].toOperatorId |
Типnumber | null | ОписаниеОператор, которому перешёл диалог. null, если в очередь. Сотрудник — GET /v1/users |
Полеdata.transfers[].fromConfigId |
Типnumber | ОписаниеЛиния-источник. Описание линии — GET /v1/openline-configs/:id |
Полеdata.transfers[].toConfigId |
Типnumber | null | ОписаниеЛиния-назначение, если перевод в другую линию. Описание линии — GET /v1/openline-configs/:id |
Полеdata.transfers[].reason |
Типstring | ОписаниеПричина: manual / auto |
Полеdata.transfers[].mode |
Типstring | ОписаниеРежим: MANUAL / AUTO |
Полеdata.transfers[].type |
Типstring | ОписаниеТип: USER / QUEUE |
Полеdata.transfers[].initiatorId |
Типnumber | null | ОписаниеИнициатор перевода. Может прийти null. При reason: auto поле тоже бывает заполнено. Сотрудник — GET /v1/users |
Пример ответа
Сессия 805 дважды вернулась в очередь, сессию 809 оператор вручную перевёл коллеге:
{
"success": true,
"data": {
"transfers": [
{ "sessionId": 805, "date": "2026-10-14T18:41:13+03:00", "fromOperatorId": 1, "toOperatorId": null, "fromConfigId": 59, "toConfigId": null, "reason": "auto", "mode": "MANUAL", "type": "QUEUE", "initiatorId": 1 },
{ "sessionId": 805, "date": "2026-10-14T18:41:14+03:00", "fromOperatorId": 1, "toOperatorId": null, "fromConfigId": 59, "toConfigId": null, "reason": "auto", "mode": "MANUAL", "type": "QUEUE", "initiatorId": 1 },
{ "sessionId": 809, "date": "2026-10-14T19:07:47+03:00", "fromOperatorId": 1, "toOperatorId": 1295, "fromConfigId": 59, "toConfigId": null, "reason": "manual", "mode": "MANUAL", "type": "USER", "initiatorId": 1 }
]
}
}
Пример ответа при ошибке
400 — в запросе больше 50 идентификаторов:
{
"success": false,
"error": { "code": "BATCH_LIMIT_EXCEEDED", "message": "sessionId batch must not exceed 50 unique ids (got 51)" }
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| HTTP400 | КодINVALID_JSON_BODY |
ОписаниеТело запроса не разобралось как JSON. JSON разбирается до проверки полей, поэтому про отсутствующие параметры ответ ничего не говорит |
| HTTP400 | КодMISSING_PARAMS |
ОписаниеsessionId пустой массив или не передан |
| HTTP400 | КодINVALID_PARAMS |
ОписаниеЭлемент sessionId не целое положительное число. Тот же код, когда тело запроса не объект |
| HTTP400 | КодBATCH_LIMIT_EXCEEDED |
ОписаниеБольше 50 уникальных идентификаторов (повторы считаются один раз) |
| HTTP401 | КодTOKEN_MISSING |
ОписаниеУ ключа нет настроенных токенов |
| HTTP403 | КодSCOPE_DENIED |
ОписаниеУ ключа нет скоупа imopenlines |
| HTTP403 | КодB24_TARIFF_RESTRICTION |
ОписаниеТариф не включает статистику Открытых линий (report_open_lines) |
| HTTP422 | КодMETHOD_NOT_YET_AVAILABLE |
ОписаниеОбновление imopenlines 26.700.0 ещё не пришло на портал. Ответ содержит поле error.release со значением imopenlines 26.700.0 |
Полный список общих ошибок API — Ошибки.