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
curl "https://vibecode.bitrix24.com/v1/contacts/fields" \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth app
curl "https://vibecode.bitrix24.com/v1/contacts/fields" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN"
JavaScript — personal key
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 app
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" }]. |
|
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" }]. |
|
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.
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
{
"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.