For AI agents: markdown of this page — /docs-content-en/entities/contacts/fields.md documentation index — /llms.txt

Contact fields

GET /v1/contacts/fields

Returns the full list of available fields, including user fields (ufCrm*).

Examples

curl — personal key

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

curl — OAuth application

Terminal
curl "https://vibecode.bitrix24.com/v1/contacts/fields" \
  -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/contacts/fields', {
  headers: {
    'X-Api-Key': 'YOUR_API_KEY',
  },
})

const { success, data } = await res.json()
console.log('Fields:', Object.keys(data.fields).length)

JavaScript — OAuth application

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

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

Response fields

The label and description field captions are returned in English, while the ones the platform takes straight from the Bitrix24 account come in the account language. Request headers do not switch the language.

Field Type RO Description
id number yes Contact ID
name string First name
lastName string Last name
secondName string Middle name
phone multifield Phone. On input (POST/PATCH) accepts string | string[] | object[]. On output phone is a string with the primary value, per-type values are in phoneWork/phoneMobile, and the full list with types is in the fm[] array (format { id, typeId, valueType, value }). Important: PATCH only adds new records — old phone entries are not removed. See Update contact. Important: The UPPER form [{ "VALUE": "...", "VALUE_TYPE": "WORK" }] is not accepted — it returns 400 INVALID_MULTIFIELD_SHAPE. Use camelCase: [{ "value": "...", "typeId": "WORK" }]. An object with an id field is not accepted on any write door — 400 MULTIFIELD_ID_NOT_SUPPORTED, and nothing is written. The same applies to a row with id inside the raw fm[] array.
email multifield Email. On input accepts string | string[] | object[]. On output email is a string with the primary value, per-type values are in emailWork/emailHome/emailMailing, and the full list is in the fm[] array. Important: PATCH only adds new records — old email entries are not removed. Important: The UPPER form [{ "VALUE": "...", "VALUE_TYPE": "WORK" }] is not accepted — it returns 400 INVALID_MULTIFIELD_SHAPE. Use camelCase: [{ "value": "...", "typeId": "WORK" }]. An object with an id field is not accepted on any write door — 400 MULTIFIELD_ID_NOT_SUPPORTED, and nothing is written. The same applies to a row with id inside the raw fm[] array.
phoneWork string yes Work phone expanded from the phone multifield. Read-only: a number is written through phone; a sent value is stored on no door, so a write is rejected: create and update — 400 READONLY_FIELD, import — 400 IMPORT_ITEM_VALIDATION, entity batch — 400 BATCH_ITEM_VALIDATION, global batch — READONLY_FIELD under the call. null when there is no such number. Filter (exact and $contains) and sorting work
phoneMobile string yes Mobile phone expanded from the phone multifield. Read-only, like phoneWork. null when there is no such number
phoneMailing string yes Mailing phone expanded from the phone multifield. Read-only, like phoneWork. null when there is no such number
imol string yes Open Channel (messenger) contact of the person, expanded from the multifield collection. Read-only. null when there is none
address string yes Address of the contact as a single line (legacy column). Bitrix24 returns it but does not store it through the item API this method writes with: a sent value is stored on no write door and the request is rejected (codes as for phoneWork); only the legacy crm.contact.add of older integrations fills it, and an address is edited in the contact's requisites. null when not filled in. Filter (exact and $contains) and sorting work
shortName string yes Short name — last name with initials ("Smith J. R."), computed by Bitrix24. Comes only in a list or search whose select names the field explicitly (without *); a single GET /v1/contacts/{id}, a list without select and the entity batch list (its select is a projection) return null. Read-only (refusal codes as for phoneWork). Filter (exact and $contains) and sorting work
hasPhone boolean yes Whether a phone is set
hasEmail boolean yes Whether an email is set
hasImol boolean yes Whether there is an Open Channel contact
companyId number Company ID. Lookup: GET /v1/companies
post string Position
comments string Comment
typeId string Contact type. List: GET /v1/statuses?filter[entityId]=CONTACT_TYPE
sourceId string Source. List: GET /v1/statuses?filter[entityId]=SOURCE
sourceDescription string Source description
assignedById number Assignee. List: GET /v1/users
createdBy number yes Creator. Lookup: GET /v1/users
updatedBy number yes Modified by. Lookup: GET /v1/users
createdTime datetime yes Creation date
updatedTime datetime yes Modification date
opened boolean Available to everyone
export boolean Export allowed
leadId number Source lead ID
honorific string Salutation. List: GET /v1/statuses?filter[entityId]=HONORIFIC

User fields (ufCrm*) are also returned in responses and accepted on create/update. For an enumeration field, this endpoint returns an array of options at data.fields.<field name>.items, shaped as { "ID": "3989", "VALUE": "warm" }. To write to a user field, send the ID, while VALUE is the option label for display. A label sent instead of the identifier is lost without an error. Details — Value format by type.

Available includes

The GET /v1/contacts/fields endpoint returns a list of available includes: company.

Usage example: Get contact.

More about includes: Related data.

Response example

JSON
{
  "success": true,
  "data": {
    "fields": {
      "id": { "type": "number", "readonly": true },
      "name": { "type": "string", "readonly": false },
      "assignedById": { "type": "number", "readonly": false }
    },
    "batch": ["create", "update", "delete"]
  }
}

Only 3 of the many fields are shown. The full list is in the table above.

Errors

HTTP Code Description
403 SCOPE_DENIED API key lacks the crm scope
401 TOKEN_MISSING API key has no configured tokens
429 RATE_LIMITED Rate limit exceeded: 300 requests per minute per portal, all API keys of the portal share one limit. The exact value arrives in the x-ratelimit-limit header (the cap is divided across replicas). Retry after the delay in the Retry-After header

Full list of common API errors — Errors.

See also