Получить список элементов crm.item.list
Scope:
crmКто может выполнять метод: любой пользователь с правом «чтения» элементов объекта CRM
Метод получает список элементов определенного типа объекта CRM.
Элементы объекта CRM не попадут в итоговую выборку, если у пользователя нет прав на «чтение» этих элементов.
Параметры метода
Обязательные параметры отмечены *
|
Название |
Описание |
|
entityTypeId* |
Идентификатор системного или пользовательского типа, чьи элементы нужно получить |
|
select |
Список полей, которые должны быть заполнены у элементов в выборке. Может содержать в себе только названия полей элемента или Список всех доступных полей для выборки можно узнать методом |
|
filter |
Объект формата:
где
Фильтр может иметь неограниченную вложенность и количество условий. К ключам
Список всех доступных полей для фильтрации можно узнать методом |
|
order |
Объект формата:
где
Список всех доступных полей для сортировки можно узнать методом |
|
start |
Параметр используется для управления постраничной навигацией. Размер страницы результатов всегда статичный — 50 записей. Чтобы выбрать вторую страницу результатов, передайте значение Формула расчета значения параметра
|
|
useOriginalUfNames |
Параметр для управления форматом имен пользовательских полей в запросе и ответе.
По умолчанию — |
Примеры кода
Получить список лидов у которых:
- Имя или фамилия не пустые
- Находятся в статусе "В работе" или "Не обработан".
- Пришли из источников "Реклама" или "Сайт".
- Закреплены за менеджерами с идентификаторами 1 или 6.
- Имеют сумму сделки от 5000 до 20000.
- Режим расчета суммы является ручным
Задать следующий порядок сортировки у данной выборки:
- Имя и фамилия в порядке возрастания
Для наглядности выберем только необходимые для нас поля:
- Идентификатор
id - Название
title - Имя
name - Фамилия
lastName - Идентификатор стадии
stageId - Идентификатор источника
sourceId - Идентификатор ответственного
assignedById - Сумма
opportunity - Режим подсчета суммы
isManualOpportunity
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"entityTypeId":1,"select":["id","title","lastName","name","stageId","sourceId","assignedById","opportunity","isManualOpportunity"],"filter":{"0":{"logic":"OR","0":{"!=name":""},"1":{"!=lastName":""}},"@stageId":["NEW","IN_PROCESS"],"@sourceId":["WEB","ADVERTISING"],"@assignedById":[1,6],">=opportunity":5000,"<=opportunity":20000,"isManualOpportunity":"Y"},"order":{"lastName":"ASC","name":"ASC"}}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/crm.item.list
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"entityTypeId":1,"select":["id","title","lastName","name","stageId","sourceId","assignedById","opportunity","isManualOpportunity"],"filter":{"0":{"logic":"OR","0":{"!=name":""},"1":{"!=lastName":""}},"@stageId":["NEW","IN_PROCESS"],"@sourceId":["WEB","ADVERTISING"],"@assignedById":[1,6],">=opportunity":5000,"<=opportunity":20000,"isManualOpportunity":"Y"},"order":{"lastName":"ASC","name":"ASC"},"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/crm.item.list
// callListMethod: Получает все данные сразу. Используйте только для небольших выборок (< 1000 элементов) из-за высокой нагрузки на память.
try {
const response = await $b24.callListMethod(
'crm.item.list',
{
entityTypeId: 1,
select: [
"id",
"title",
"lastName",
"name",
"stageId",
"sourceId",
"assignedById",
"opportunity",
"isManualOpportunity",
],
filter: {
"0": {
logic: "OR",
"0": {
"!=name": "",
},
"1": {
"!=lastName": "",
},
},
"@stageId": ["NEW", "IN_PROCESS"],
"@sourceId": ['WEB', "ADVERTISING"],
"@assignedById": [1, 6],
">=opportunity": 5000,
"<=opportunity": 20000,
"isManualOpportunity": "Y",
},
order: {
lastName: 'ASC',
name: 'ASC',
},
},
(progress) => { console.log('Progress:', progress) }
);
const items = response.getData() || [];
for (const entity of items) { console.log('Entity:', entity); }
} catch (error) {
console.error('Request failed', error);
}
// fetchListMethod: Выбирает данные по частям с помощью итератора. Используйте для больших объемов данных для эффективного потребления памяти.
try {
const generator = $b24.fetchListMethod('crm.item.list', {
entityTypeId: 1,
select: [
"id",
"title",
"lastName",
"name",
"stageId",
"sourceId",
"assignedById",
"opportunity",
"isManualOpportunity",
],
filter: {
"0": {
logic: "OR",
"0": {
"!=name": "",
},
"1": {
"!=lastName": "",
},
},
"@stageId": ["NEW", "IN_PROCESS"],
"@sourceId": ['WEB', "ADVERTISING"],
"@assignedById": [1, 6],
">=opportunity": 5000,
"<=opportunity": 20000,
"isManualOpportunity": "Y",
},
order: {
lastName: 'ASC',
name: '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: Ручное управление постраничной навигацией через параметр start. Используйте для точного контроля над пакетами запросов. Для больших данных менее эффективен, чем fetchListMethod.
try {
const response = await $b24.callMethod('crm.item.list', {
entityTypeId: 1,
select: [
"id",
"title",
"lastName",
"name",
"stageId",
"sourceId",
"assignedById",
"opportunity",
"isManualOpportunity",
],
filter: {
"0": {
logic: "OR",
"0": {
"!=name": "",
},
"1": {
"!=lastName": "",
},
},
"@stageId": ["NEW", "IN_PROCESS"],
"@sourceId": ['WEB', "ADVERTISING"],
"@assignedById": [1, 6],
">=opportunity": 5000,
"<=opportunity": 20000,
"isManualOpportunity": "Y",
},
order: {
lastName: 'ASC',
name: 'ASC',
},
}, 0);
const result = response.getData().result || [];
for (const entity of result) { console.log('Entity:', entity); }
} catch (error) {
console.error('Request failed', error);
}
try {
$entityTypeId = 1; // Replace with actual entity type ID
$order = []; // Replace with actual order array
$filter = []; // Replace with actual filter array
$select = []; // Replace with actual select array
$startItem = 0; // Optional, can be adjusted as needed
$itemsResult = $serviceBuilder
->getCRMScope()
->item()
->list($entityTypeId, $order, $filter, $select, $startItem);
foreach ($itemsResult->getItems() as $item) {
print("ID: " . $item->id . PHP_EOL);
print("XML ID: " . $item->xmlId . PHP_EOL);
print("Title: " . $item->title . PHP_EOL);
print("Created By: " . $item->createdBy . PHP_EOL);
print("Updated By: " . $item->updatedBy . PHP_EOL);
print("Created Time: " . $item->createdTime->format(DATE_ATOM) . PHP_EOL);
print("Updated Time: " . $item->updatedTime->format(DATE_ATOM) . PHP_EOL);
// Add more fields as necessary
}
} catch (Throwable $e) {
print("Error: " . $e->getMessage() . PHP_EOL);
}
BX24.callMethod(
'crm.item.list',
{
entityTypeId: 1,
select: [
"id",
"title",
"lastName",
"name",
"stageId",
"sourceId",
"assignedById",
"opportunity",
"isManualOpportunity",
],
filter: {
"0": {
logic: "OR",
"0": {
"!=name": "",
},
"1": {
"!=lastName": "",
},
},
"@stageId": ["NEW", "IN_PROCESS"],
"@sourceId": ['WEB', "ADVERTISING"],
"@assignedById": [1, 6],
">=opportunity": 5000,
"<=opportunity": 20000,
"isManualOpportunity": "Y",
},
order: {
lastName: 'ASC',
name: 'ASC',
},
},
(result) => {
if (result.error())
{
console.error(result.error());
return;
}
console.info(result.data());
},
);
require_once('crest.php');
$result = CRest::call(
'crm.item.list',
[
'entityTypeId' => 1,
'select' => [
"id",
"title",
"lastName",
"name",
"stageId",
"sourceId",
"assignedById",
"opportunity",
"isManualOpportunity",
],
'filter' => [
"0" => [
"logic" => "OR",
"0" => [
"!=name" => "",
],
"1" => [
"!=lastName" => "",
],
],
"@stageId" => ["NEW", "IN_PROCESS"],
"@sourceId" => ['WEB', "ADVERTISING"],
"@assignedById" => [1, 6],
">=opportunity" => 5000,
"<=opportunity" => 20000,
"isManualOpportunity" => "Y",
],
'order' => [
'lastName' => 'ASC',
'name' => 'ASC',
],
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';
Пример запроса с фильтром по дате с логикой OR
Фильтруем сделки entityTypeId = 2 по двум датам создания. Для каждой даты задаем диапазон начала и конца суток.
Для наглядности выберем только необходимые для нас поля:
- Идентификатор
id - Название
title - Дата создания
createdTime
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"entityTypeId":2,"select":["id","title","createdTime"],"filter":{"0":{"logic":"OR","0":{">=createdTime":"2025-10-31T00:00:00+02:00","<createdTime":"2025-11-01T00:00:00+02:00"},"1":{">=createdTime":"2025-02-28T00:00:00+02:00","<createdTime":"2025-03-01T00:00:00+02:00"}}}}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webhook_here**/crm.item.list
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"entityTypeId":2,"select":["id","title","createdTime"],"filter":{"0":{"logic":"OR","0":{">=createdTime":"2025-10-31T00:00:00+02:00","<createdTime":"2025-11-01T00:00:00+02:00"},"1":{">=createdTime":"2025-02-28T00:00:00+02:00","<createdTime":"2025-03-01T00:00:00+02:00"}}},"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/crm.item.list
try {
const response = await $b24.callMethod(
'crm.item.list',
{
entityTypeId: 2,
select: ['id', 'title', 'createdTime'],
filter: {
'0': {
logic: 'OR',
'0': {
'>=createdTime': '2025-10-31T00:00:00+02:00',
'<createdTime': '2025-11-01T00:00:00+02:00',
},
'1': {
'>=createdTime': '2025-02-28T00:00:00+02:00',
'<createdTime': '2025-03-01T00:00:00+02:00',
},
},
},
},
);
const items = response.getData().items || [];
items.forEach((item) => {
console.info(`Deal #${item.id}: ${item.title} (${item.createdTime})`);
});
} catch (error) {
console.error('crm.item.list error', error);
}
try {
$entityTypeId = 2;
$order = [];
$filter = [
"0" => [
"logic" => "OR",
"0" => [
">=createdTime" => "2025-10-31T00:00:00+02:00",
"<createdTime" => "2025-11-01T00:00:00+02:00",
],
"1" => [
">=createdTime" => "2025-02-28T00:00:00+02:00",
"<createdTime" => "2025-03-01T00:00:00+02:00",
],
],
];
$select = ['id', 'title', 'createdTime'];
$startItem = 0;
$itemsResult = $serviceBuilder
->getCRMScope()
->item()
->list($entityTypeId, $order, $filter, $select, $startItem);
foreach ($itemsResult->getItems() as $item) {
print("ID: " . $item->id . PHP_EOL);
print("Title: " . $item->title . PHP_EOL);
print("Created Time: " . $item->createdTime->format(DATE_ATOM) . PHP_EOL);
print(PHP_EOL);
}
} catch (Throwable $e) {
print("Error: " . $e->getMessage() . PHP_EOL);
}
BX24.callMethod(
'crm.item.list',
{
entityTypeId: 2,
select: ['id', 'title', 'createdTime'],
filter: {
'0': {
logic: 'OR',
'0': {
'>=createdTime': '2025-10-31T00:00:00+02:00',
'<createdTime': '2025-11-01T00:00:00+02:00',
},
'1': {
'>=createdTime': '2025-02-28T00:00:00+02:00',
'<createdTime': '2025-03-01T00:00:00+02:00',
},
},
},
},
function (result) {
if (result.error()) {
console.error('crm.item.list error', result.error());
return;
}
const { items } = result.data();
items.forEach((item) => {
console.log(`Deal #${item.id}: ${item.title} (${item.createdTime})`);
});
if (result.more()) {
result.next();
}
}
);
require_once('crest.php');
$result = CRest::call(
'crm.item.list',
[
'entityTypeId' => 2,
'select' => ['id', 'title', 'createdTime'],
'filter' => [
"0" => [
"logic" => "OR",
"0" => [
">=createdTime" => "2025-10-31T00:00:00+02:00",
"<createdTime" => "2025-11-01T00:00:00+02:00",
],
"1" => [
">=createdTime" => "2025-02-28T00:00:00+02:00",
"<createdTime" => "2025-03-01T00:00:00+02:00",
],
],
],
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';
Обработка ответа
HTTP-статус: 200
{
"result": {
"items": [
{
"id": 253,
"assignedById": 6,
"stageId": "NEW",
"opportunity": 19000,
"sourceId": "WEB",
"title": "Лид #253",
"name": "Админ",
"lastName": null,
"isManualOpportunity": "Y"
},
{
"id": 255,
"assignedById": 1,
"stageId": "NEW",
"opportunity": 19600,
"sourceId": "WEB",
"title": "Лид #255",
"name": "Иван",
"lastName": "Иванов",
"isManualOpportunity": "Y"
},
{
"id": 252,
"assignedById": 1,
"stageId": "NEW",
"opportunity": 12000,
"sourceId": "ADVERTISING",
"title": "Лид #252",
"name": "Иван",
"lastName": "Котов",
"isManualOpportunity": "Y"
},
{
"id": 254,
"assignedById": 6,
"stageId": "IN_PROCESS",
"opportunity": 19000,
"sourceId": "ADVERTISING",
"title": "Лид #254",
"name": "Кот",
"lastName": "Котов",
"isManualOpportunity": "Y"
}
]
},
"total": 4,
"time": {
"start": 1721724354.214286,
"finish": 1721724354.805263,
"duration": 0.5909769535064697,
"processing": 0.24513697624206543,
"date_start": "2024-07-23T10:45:54+02:00",
"date_finish": "2024-07-23T10:45:54+02:00",
"operating": 0
}
}
Возвращаемые данные
|
Название |
Описание |
|
result |
Корневой элемент ответа. Содержит единственный ключ |
|
items |
Массив c информацией о найденных элементах. Возвращаемые поля зависят от параметра |
|
total |
Общее количество найденных элементов |
|
next |
Содержит значение, которое нужно передать в следующий запрос в параметр Параметр |
|
time |
Информация о времени выполнения запроса |
По умолчанию имена пользовательских полей передаются и возвращаются в camelCase, например ufCrm2_1639669411830.
При передаче параметра useOriginalUfNames со значением Y пользовательские поля будут возвращаться с оригинальными именами, например UF_CRM_2_1639669411830.
Обработка ошибок
HTTP-статус: 400, 403
{
"error": "INVALID_ARG_VALUE",
"error_description": "Invalid filter: field 'FIELD' is not allowed in filter"
}
|
Название |
Описание |
|
error |
Строковый код ошибки. Может состоять из цифр, латинских букв и знака подчеркивания |
|
error_description |
Текстовое описание ошибки. Описание не предназначено для показа конечному пользователю в необработанном виде |
Возможные коды ошибок
|
Статус |
Код |
Описание |
Значение |
|
|
|
Действие разрешено только интранет-пользователям |
Пользователь не является интранет-пользователем |
|
|
|
Смарт-процесс не найден |
Возникает, при передаче невалидного |
|
|
|
Invalid filter: field ' |
Переданное в |
|
|
|
Invalid filter: field ' |
Переданное значение для поля |
|
|
|
Invalid order: field ' |
Переданное в |
|
|
|
Invalid order: allowed sort directions are |
Переданное значение |
Статусы и коды системных ошибок
HTTP-статус: 20x, 40x, 50x
Описанные ниже ошибки могут возникнуть при вызове любого метода
|
Статус |
Код |
Описание |
|
|
|
Возникла внутренняя ошибка сервера, обратитесь к администратору сервера или в техническую поддержку Битрикс24 |
|
|
|
Возникла внутренняя ошибка сервера, обратитесь к администратору сервера или в техническую поддержку Битрикс24 |
|
|
|
Превышен лимит на интенсивность запросов |
|
|
|
Текущий метод не разрешен для вызова с помощью batch |
|
|
|
Превышена максимальная длина параметров, переданных в метод batch |
|
|
|
Неверный access-токен или код вебхука |
|
|
|
Для вызовов методов требуется использовать протокол HTTPS |
|
|
|
REST API заблокирован из-за перегрузки. Это ручная индивидуальная блокировка, для снятия необходимо обращаться в техническую поддержку Битрикс24 |
|
|
|
REST API доступен только на коммерческих планах |
|
|
|
У пользователя, с чьим access-токеном или вебхуком был вызван метод, не хватает прав |
|
|
|
Манифест недоступен |
|
|
|
Запрос требует более высоких привилегий, чем предоставляет токен вебхука |
|
|
|
Предоставленный access-токен доступа истек |
|
|
|
Пользователь не имеет доступа к приложению. Это означает, что приложение установлено, но администратор портала разрешил доступ к этому приложению только конкретным пользователям |
|
|
|
Публичная часть сайта закрыта. Чтобы открыть публичную часть сайта на коробочной установке отключите опцию «Временное закрытие публичной части сайта». Путь к настройке: Рабочий стол > Настройки > Настройки продукта > Настройки модулей > Главный модуль > Временное закрытие публичной части сайта |
Продолжите изучение
- Создать новый элемент CRM crm.item.add
- Обновить элемент crm.item.update
- Получить элемент по Id crm.item.get
- Удалить элемент crm.item.delete
- Получить поля элемента crm.item.fields
- Поля объектов CRM
- Как прикрепить задачу к смарт-процессу
- Как отфильтровать элементы по названию стадии
- Как получить список дел из сделок
- Как получить список поставщиков