For AI agents: markdown of this page — /docs-content-en/openlines/sessions/transfers.md documentation index — /llms.txt
Reassignment history
The method ships in the
imopenlines 26.700.0update and is not yet available on all Bitrix24 accounts. If the update has not reached your Bitrix24 account yet, the API returns422 METHOD_NOT_YET_AVAILABLE— this means the method has not been released on the account yet, not that the integration is broken.
POST /v1/openlines/sessions/transfers
A chronological list of reassignments (transfers) for specific sessions — the source and target operators, the Open Channels involved, and the reason. Up to 50 identifiers per call.
Request fields (body)
| Field | Type | Req. | Description |
|---|---|---|---|
sessionId |
number[] | yes | Array of session identifiers, up to 50 elements. Source: POST /v1/openlines/sessions/search. A single number is also accepted and wrapped in an array |
Duplicates in sessionId are collapsed. A sessionId that does not exist, belongs to someone else, or is not accessible does not cause an error — there will simply be no records for it in transfers.
Examples
curl — personal key
curl -X POST "https://vibecode.bitrix24.com/v1/openlines/sessions/transfers" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "sessionId": [1024, 1025] }'
curl — OAuth application
curl -X POST "https://vibecode.bitrix24.com/v1/openlines/sessions/transfers" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "sessionId": [1024, 1025] }'
JavaScript — personal key
const res = await fetch('https://vibecode.bitrix24.com/v1/openlines/sessions/transfers', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({ sessionId: [1024, 1025] }),
})
const { data } = await res.json()
JavaScript — OAuth application
const res = await fetch('https://vibecode.bitrix24.com/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: [1024, 1025] }),
})
const { data } = await res.json()
Response fields
The response is { "success": true, "data": { "transfers": [...] } }. Transfers for all requested sessions are returned interleaved, in chronological order (by date ascending). To group by session, use the transfers[].sessionId field.
| Key | Description |
|---|---|
sessionId |
Session identifier |
date |
Date and time of the reassignment |
fromOperatorId |
Operator the session was transferred from (null if it came from the queue) |
toOperatorId |
Operator the session was transferred to (null if it went to the queue) |
fromConfigId |
Source Open Channel |
toConfigId |
Target Open Channel (if the session was transferred to another Open Channel) |
reason |
Reason: manual / auto |
mode |
Mode: MANUAL / AUTO |
type |
Type: USER / QUEUE |
initiatorId |
Transfer initiator (null if automatic) |
Response example
Session 1024 — auto-distributed from the queue, then manually transferred to an operator. Session 1025 — no transfers:
{
"success": true,
"data": {
"transfers": [
{ "sessionId": 1024, "date": "2026-06-15T14:30:05+00:00", "fromOperatorId": null, "toOperatorId": 42, "fromConfigId": 3, "toConfigId": null, "reason": "auto", "mode": "AUTO", "type": "USER", "initiatorId": null },
{ "sessionId": 1024, "date": "2026-06-15T14:40:00+00:00", "fromOperatorId": 42, "toOperatorId": 51, "fromConfigId": 3, "toConfigId": null, "reason": "manual", "mode": "MANUAL", "type": "USER", "initiatorId": 42 }
]
}
}
Error response example
400 — more than 50 identifiers in the batch:
{
"success": false,
"error": { "code": "BATCH_LIMIT_EXCEEDED", "message": "sessionId batch must not exceed 50 unique ids" }
}
Errors
| HTTP | Code | When |
|---|---|---|
| 403 | B24_TARIFF_RESTRICTION |
The Bitrix24 plan does not include Open Channels statistics (report_open_lines) |
| 400 | INVALID_JSON_BODY |
The request body did not parse as JSON. The check runs before field validation, so the response says nothing about missing parameters |
| 400 | MISSING_PARAMS |
sessionId is an empty array or missing |
| 400 | INVALID_PARAMS |
A non-numeric element in sessionId |
| 400 | BATCH_LIMIT_EXCEEDED |
More than 50 unique identifiers (after collapsing duplicates) |
| 422 | METHOD_NOT_YET_AVAILABLE |
The imopenlines 26.700.0 update has not reached the portal yet. The response contains an error.release field set to imopenlines 26.700.0 |
The full list of system codes — API errors.