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.0 update and is not yet available on all Bitrix24 accounts. If the update has not reached your Bitrix24 account yet, the API returns 422 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

Terminal
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

Terminal
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

javascript
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

javascript
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:

JSON
{
  "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:

JSON
{
  "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.

See also