Get a list of custom fields for contacts crm.contact.userfield.list
Scope:
crmWho can execute the method: administrator
The method crm.contact.userfield.list returns a list of custom fields for contacts based on a filter.
It also outputs information about these fields, but without the name assigned to the field by the user, only the internal identifier. If you need the user-defined field name, use the method crm.contact.list, which outputs both standard and custom fields.
Method Parameters
|
Name |
Description |
|
filter |
Object format:
where:
All conditions for individual fields are combined using |
|
order |
Object format:
where:
Available fields for sorting:
By default:
|
Available Fields for Filtering
|
Name |
Description |
|
ID |
Identifier of the custom field |
|
FIELD_NAME |
Code of the custom field |
|
USER_TYPE_ID |
Type of the custom field. Possible values:
|
|
XML_ID |
External code |
|
SORT |
Sort index |
|
MULTIPLE |
Is the custom field multiple ( |
|
MANDATORY |
Is the custom field mandatory ( |
|
SHOW_FILTER |
Show in the list filter. Possible values:
|
|
SHOW_IN_LIST |
Show in the list ( This parameter does not affect anything within |
|
EDIT_IN_LIST |
Allow user editing ( |
|
IS_SEARCHABLE |
Are field values included in the search ( This parameter does not affect anything within |
|
LANG |
Language identifier. When filtering by this parameter, a set of fields with values in the provided language will be returned:
|
Code Examples
How to Use Examples in Documentation
Get a list of custom fields that:
- are multiple
- are mandatory
- have custom field labels in German
Set the following sort order for this selection: field type and sort index in ascending order.
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"filter":{"MULTIPLE":"Y","MANDATORY":"Y","LANG":"de"},"order":{"USER_TYPE_ID":"ASC","SORT":"ASC"}}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/crm.contact.userfield.list
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"filter":{"MULTIPLE":"Y","MANDATORY":"Y","LANG":"de"},"order":{"USER_TYPE_ID":"ASC","SORT":"ASC"},"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/crm.contact.userfield.list
// callListMethod: Retrieves all data at once. Use only for small selections (< 1000 items) due to high memory usage.
try {
const response = await $b24.callListMethod(
'crm.contact.userfield.list',
{
filter: {
MULTIPLE: "Y",
MANDATORY: "Y",
LANG: "de",
},
order: {
USER_TYPE_ID: "ASC",
SORT: "ASC",
},
},
(progress) => {
result.error()
? console.error(result.error())
: console.info(result.data())
;
}
);
const items = response.getData() || [];
for (const entity of items) { console.log('Entity:', entity); }
} catch (error) {
console.error('Request failed', error);
}
// fetchListMethod: Retrieves data in parts using an iterator. Use it for large data volumes to optimize memory usage.
try {
const generator = $b24.fetchListMethod('crm.contact.userfield.list', {
filter: {
MULTIPLE: "Y",
MANDATORY: "Y",
LANG: "de",
},
order: {
USER_TYPE_ID: "ASC",
SORT: "ASC",
},
}, 'ID');
for await (const page of generator) {
for (const entity of page) { console.log('Entity:', entity); }
}
} catch (error) {
console.error('Request failed', error);
}
// callMethod: Manually controls pagination through the start parameter. Use it for precise control of request batches. For large datasets, it is less efficient than fetchListMethod.
try {
const response = await $b24.callMethod('crm.contact.userfield.list', {
filter: {
MULTIPLE: "Y",
MANDATORY: "Y",
LANG: "de",
},
order: {
USER_TYPE_ID: "ASC",
SORT: "ASC",
},
}, 0);
const result = response.getData().result || [];
for (const entity of result) { console.log('Entity:', entity); }
} catch (error) {
console.error('Request failed', error);
}
try {
$response = $b24Service
->core
->call(
'crm.contact.userfield.list',
[
'filter' => [
'MULTIPLE' => 'Y',
'MANDATORY' => 'Y',
'LANG' => 'de',
],
'order' => [
'USER_TYPE_ID' => 'ASC',
'SORT' => 'ASC',
],
]
);
$result = $response
->getResponseData()
->getResult();
if ($result->error()) {
error_log($result->error());
echo 'Error: ' . $result->error();
} else {
echo 'Success: ' . print_r($result->data(), true);
}
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error fetching user fields: ' . $e->getMessage();
}
BX24.callMethod(
'crm.contact.userfield.list',
{
filter: {
MULTIPLE: "Y",
MANDATORY: "Y",
LANG: "de",
},
order: {
USER_TYPE_ID: "ASC",
SORT: "ASC",
},
},
(result) => {
result.error()
? console.error(result.error())
: console.info(result.data())
;
},
);
require_once('crest.php');
$result = CRest::call(
'crm.contact.userfield.list',
[
'filter' => [
'MULTIPLE' => "Y",
'MANDATORY' => "Y",
'LANG' => "de",
],
'order' => [
'USER_TYPE_ID' => "ASC",
'SORT' => "ASC",
]
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';
Response Handling
HTTP status: 200
{
"result": [
{
"ID": "474",
"ENTITY_ID": "CRM_CONTACT",
"FIELD_NAME": "UF_CRM_1724412832",
"USER_TYPE_ID": "address",
"XML_ID": null,
"SORT": "300",
"MULTIPLE": "Y",
"MANDATORY": "Y",
"SHOW_FILTER": "E",
"SHOW_IN_LIST": "Y",
"EDIT_IN_LIST": "Y",
"IS_SEARCHABLE": "N",
"SETTINGS": {
"SHOW_MAP": "Y"
},
"EDIT_FORM_LABEL": "Custom Field (Address)",
"LIST_COLUMN_LABEL": "Custom Field (Address)",
"LIST_FILTER_LABEL": "Custom Field (Address)",
"ERROR_MESSAGE": null,
"HELP_MESSAGE": null
},
{
"ID": "475",
"ENTITY_ID": "CRM_CONTACT",
"FIELD_NAME": "UF_CRM_1724412867",
"USER_TYPE_ID": "crm",
"XML_ID": null,
"SORT": "1400",
"MULTIPLE": "Y",
"MANDATORY": "Y",
"SHOW_FILTER": "I",
"SHOW_IN_LIST": "Y",
"EDIT_IN_LIST": "Y",
"IS_SEARCHABLE": "N",
"SETTINGS": {
"CONTACT": "Y",
"COMPANY": "Y",
"DYNAMIC_1224": "Y",
"DYNAMIC_1226": "Y",
"DYNAMIC_1268": "Y",
"DYNAMIC_1278": "Y",
"LEAD": null
},
"EDIT_FORM_LABEL": "Custom Field (Binding to CRM Elements)",
"LIST_COLUMN_LABEL": "Custom Field (Binding to CRM Elements)",
"LIST_FILTER_LABEL": "Custom Field (Binding to CRM Elements)",
"ERROR_MESSAGE": null,
"HELP_MESSAGE": null
},
{
"ID": "472",
"ENTITY_ID": "CRM_CONTACT",
"FIELD_NAME": "UF_CRM_1724412764",
"USER_TYPE_ID": "date",
"XML_ID": null,
"SORT": "2000",
"MULTIPLE": "Y",
"MANDATORY": "Y",
"SHOW_FILTER": "E",
"SHOW_IN_LIST": "Y",
"EDIT_IN_LIST": "Y",
"IS_SEARCHABLE": "N",
"SETTINGS": {
"DEFAULT_VALUE": {
"VALUE": "2024-08-22",
"TYPE": "FIXED"
}
},
"EDIT_FORM_LABEL": "Custom Field (Date)",
"LIST_COLUMN_LABEL": "Custom Field (Date)",
"LIST_FILTER_LABEL": "Custom Field (Date)",
"ERROR_MESSAGE": null,
"HELP_MESSAGE": null
},
{
"ID": "471",
"ENTITY_ID": "CRM_CONTACT",
"FIELD_NAME": "UF_CRM_1724412713",
"USER_TYPE_ID": "double",
"XML_ID": null,
"SORT": "1500",
"MULTIPLE": "Y",
"MANDATORY": "Y",
"SHOW_FILTER": "E",
"SHOW_IN_LIST": "Y",
"EDIT_IN_LIST": "Y",
"IS_SEARCHABLE": "N",
"SETTINGS": {
"PRECISION": 2,
"SIZE": 20,
"MIN_VALUE": 0,
"MAX_VALUE": 0,
"DEFAULT_VALUE": 150
},
"EDIT_FORM_LABEL": "Custom Field (Number)",
"LIST_COLUMN_LABEL": "Custom Field (Number)",
"LIST_FILTER_LABEL": "Custom Field (Number)",
"ERROR_MESSAGE": null,
"HELP_MESSAGE": null
},
{
"ID": "473",
"ENTITY_ID": "CRM_CONTACT",
"FIELD_NAME": "UF_CRM_1724412805",
"USER_TYPE_ID": "employee",
"XML_ID": null,
"SORT": "800",
"MULTIPLE": "Y",
"MANDATORY": "Y",
"SHOW_FILTER": "I",
"SHOW_IN_LIST": "Y",
"EDIT_IN_LIST": "Y",
"IS_SEARCHABLE": "N",
"SETTINGS": [],
"EDIT_FORM_LABEL": "Custom Field (Employee)",
"LIST_COLUMN_LABEL": "Custom Field (Employee)",
"LIST_FILTER_LABEL": "Custom Field (Employee)",
"ERROR_MESSAGE": null,
"HELP_MESSAGE": null
},
{
"ID": "476",
"ENTITY_ID": "CRM_CONTACT",
"FIELD_NAME": "UF_CRM_1724412914",
"USER_TYPE_ID": "file",
"XML_ID": null,
"SORT": "1200",
"MULTIPLE": "Y",
"MANDATORY": "Y",
"SHOW_FILTER": "N",
"SHOW_IN_LIST": "Y",
"EDIT_IN_LIST": "Y",
"IS_SEARCHABLE": "N",
"SETTINGS": {
"SIZE": 20,
"LIST_WIDTH": 0,
"LIST_HEIGHT": 0,
"MAX_SHOW_SIZE": 0,
"MAX_ALLOWED_SIZE": 0,
"EXTENSIONS": [],
"TARGET_BLANK": "Y"
},
"EDIT_FORM_LABEL": "Custom Field (File)",
"LIST_COLUMN_LABEL": "Custom Field (File)",
"LIST_FILTER_LABEL": "Custom Field (File)",
"ERROR_MESSAGE": null,
"HELP_MESSAGE": null
}
],
"total": 6,
"time": {
"start": 1724435524.016968,
"finish": 1724435527.855702,
"duration": 3.8387339115142822,
"processing": 0.366832971572876,
"date_start": "2024-08-23T19:52:04+02:00",
"date_finish": "2024-08-23T19:52:07+02:00",
"operating": 0
}
}
Returned Data
|
Name |
Description |
|
result |
Root element of the response, contains a list of custom fields. The structure of an individual custom field is identical to |
|
total |
Number of found custom fields |
|
time |
Information about the execution time of the request |
Error Handling
HTTP status: 400
{
"error": "",
"error_description": "Parameter 'filter' must be array."
}
|
Name |
Description |
|
error |
String error code. It may consist of digits, Latin letters, and underscores |
|
error_description |
Textual description of the error. The description is not intended to be shown to the end user in its raw form |
Possible Error Codes
|
Code |
Description |
Value |
|
|
|
The provided |
|
|
|
The provided |
|
|
|
The user does not have administrative rights |
Statuses and System Error Codes
HTTP Status: 20x, 40x, 50x
The errors described below may occur when calling any method.
|
Status |
Code |
Description |
|
|
|
An internal server error has occurred, please contact the server administrator or Bitrix24 technical support |
|
|
|
An internal server error has occurred, please contact the server administrator or Bitrix24 technical support |
|
|
|
The request intensity limit has been exceeded |
|
|
|
The current method is not allowed to be called using batch |
|
|
|
The maximum length of parameters passed to the batch method has been exceeded |
|
|
|
Invalid access token or webhook code |
|
|
|
The methods must be called using the HTTPS protocol |
|
|
|
The REST API is blocked due to overload. This is a manual individual block, to remove it you need to contact Bitrix24 technical support |
|
|
|
The REST API is available only on commercial plans |
|
|
|
The user whose access token or webhook was used to call the method lacks permissions |
|
|
|
The manifest is not available |
|
|
|
The request requires higher privileges than those provided by the webhook token |
|
|
|
The provided access token has expired |
|
|
|
The user does not have access to the application. This means that the application is installed, but the account administrator has allowed access to this application only for specific users |
|
|
|
The public part of the site is closed. To open the public part of the site on an on-premise installation, disable the option "Temporary closure of the public part of the site". Path to the setting: Desktop > Settings > Product Settings > Module Settings > Main Module > Temporary closure of the public part of the site |
Continue Learning
- Create a Custom Field for Contacts crm.contact.userfield.add
- Update Existing Custom Contact Field crm.contact.userfield.update
- Get Custom Contact Field by Id crm.contact.userfield.get
- Delete Custom Contact Field crm.contact.userfield.delete