For AI agents: markdown of this page — /docs-content-en/telephony/lines/update.md documentation index — /llms.txt

Update a line

PATCH /v1/telephony-lines/:number

Updates the parameters of an existing external application line. The number identifier is set at creation and does not change. Fields are passed flat at the JSON root — without a fields wrapper.

Parameters

Parameter Type Required Description
number (path) string yes Line identifier set at creation. If it contains special characters — URL-encode it

Request fields (body)

Field Type Required Description
name string no New display name of the line
crmAutoCreate boolean no Auto-create a CRM entity on an outbound call: true / false

Examples

curl — personal key

Terminal
curl -X PATCH "https://vibecode.bitrix24.com/v1/telephony-lines/sip-line-1" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Main line (updated)"
  }'

curl — OAuth application

Terminal
curl -X PATCH "https://vibecode.bitrix24.com/v1/telephony-lines/sip-line-1" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Main line (updated)"
  }'

JavaScript — personal key

javascript
const number = 'sip-line-1'
const res = await fetch(
  `https://vibecode.bitrix24.com/v1/telephony-lines/${encodeURIComponent(number)}`,
  {
    method: 'PATCH',
    headers: {
      'X-Api-Key': 'YOUR_API_KEY',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      name: 'Main line (updated)',
    }),
  }
)

const { success, data } = await res.json()
console.log('Line identifier:', data.id)

JavaScript — OAuth application

javascript
const number = 'sip-line-1'
const res = await fetch(
  `https://vibecode.bitrix24.com/v1/telephony-lines/${encodeURIComponent(number)}`,
  {
    method: 'PATCH',
    headers: {
      'X-Api-Key': 'YOUR_APP_KEY',
      'Authorization': 'Bearer USER_SESSION_TOKEN',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      name: 'Main line (updated)',
    }),
  }
)

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

Response fields

Field Type Description
success boolean Always true on success
data.id string Identifier of the updated line (the number value from the URL)

Response example

JSON
{
  "success": true,
  "data": {
    "id": "sip-line-1"
  }
}

Error response example

422 — line not found or Bitrix24 error:

JSON
{
  "success": false,
  "error": {
    "code": "BITRIX_ERROR",
    "message": "NUMBER should not be empty"
  }
}

Errors

HTTP Code Description
422 BITRIX_ERROR Bitrix24 returned an error — text in error.message
401 MISSING_API_KEY The X-Api-Key header was not provided
401 INVALID_API_KEY Invalid API key
401 TOKEN_MISSING The key has no configured tokens
401 KEY_INACTIVE The API key is inactive or revoked
403 SCOPE_DENIED The key lacks the telephony scope
429 RATE_LIMITED Request rate limit exceeded
502 BITRIX_UNAVAILABLE Bitrix24 is unavailable

Full list of common API errors — Errors.

Known specifics

At least one updatable field is required. Only name and crmAutoCreate are recognized. A body without them (empty or with only unrecognized fields) responds 422 "There are no fields to update".

serverName is not updated. The field is present in GET /v1/telephony-lines/fields, but a PATCH with serverName alone responds 422 "There are no fields to update" — it is not recognized as updatable. The value is neither stored nor returned on read.

data.id is the number from the URL, not an integer. Unlike the POST /v1/telephony-lines response, where data.id is the internal numeric record identifier, the update response returns a string — the number value from the request path.

You cannot change number via an update. The identifier is fixed at creation. To change number — delete the line and create a new one with the desired value.

See also

List application lines

GET /v1/telephony-lines

Returns the list of external lines added by the application via POST /v1/telephony-lines. The list is returned in full — filtering, sorting, and offset are not supported; select the line you need on the client side.

Parameters

Parameter Type Default Description
select (query) string Field selection in camelCase: ?select=number,name
limit (query) number 50 Number of records (up to 5000)

Examples

curl — personal key

Terminal
curl "https://vibecode.bitrix24.com/v1/telephony-lines" \
  -H "X-Api-Key: YOUR_API_KEY"

curl — OAuth application

Terminal
curl "https://vibecode.bitrix24.com/v1/telephony-lines" \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN"

JavaScript — personal key

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/telephony-lines', {
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
  },
})

const { success, data, meta } = await res.json()
console.log(`Found ${meta.total} lines`)

JavaScript — OAuth application

javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/telephony-lines', {
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
})

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

Response fields

Field Type Description
success boolean Always true on success
data array Array of lines
data[].number string Line identifier set at creation
data[].name string | null Display name. null if not set at creation
data[].crmAutoCreate boolean Auto-create a CRM entity on an outbound call through this line: true — create, false — do not create
meta.total number Total number of application lines
meta.hasMore boolean Whether more records exist beyond limit

Response example

HTTP 200, empty selection:

JSON
{"success":true,"data":[],"meta":{"total":0,"hasMore":false}}

HTTP 200, one line:

JSON
{
  "success": true,
  "data": [
    {
      "number": "doc-test-line-001",
      "name": "Test line (audit)",
      "crmAutoCreate": true
    }
  ],
  "meta": {
    "total": 1,
    "hasMore": false
  }
}

Error response example

403 — no scope:

JSON
{
  "success": false,
  "error": {
    "code": "SCOPE_DENIED",
    "message": "This endpoint requires 'telephony' scope"
  }
}

Errors

HTTP Code Description
401 MISSING_API_KEY The X-Api-Key header was not provided
401 INVALID_API_KEY Invalid API key
401 TOKEN_MISSING The key has no configured tokens
401 KEY_INACTIVE The API key is inactive or revoked
403 SCOPE_DENIED The key lacks the telephony scope
429 RATE_LIMITED Request rate limit exceeded
502 BITRIX_UNAVAILABLE Bitrix24 is unavailable

Full list of common API errors — Errors.

Known specifics

Only this application's lines. The list contains lines created via POST /v1/telephony-lines under the current API key. Lines rented from Voximplant or connected over SIP are available via GET /v1/voximplant-lines.

Filtering, sorting, and offset do not work. The filter, order, and offset parameters are accepted without error but ignored — the whole list of lines is returned. Only limit (caps the count) and select (field selection in camelCase) work. Filter by number or name on the client side.

All response fields are in camelCase, including crmAutoCreate (boolean). Previously this field came back in UPPER_SNAKE_CASE as the string "Y"/"N" — since 07.2026 it is normalized to a camelCase boolean, like the other fields.

serverName is not returned. The field is declared in GET /v1/telephony-lines/fields but never comes back in the list under any condition — even if it was set at creation (details).

See also