Получить список элементов crm.item.list

Выберите инструмент для разработки с AI-агентом:

  • используйте Битрикс24 Вайбкод, чтобы создать приложение для Битрикс24 по описанию задачи без знания языков программирования. Агент напишет код и разместит приложение на сервере без ручной настройки хостинга
  • используйте MCP-сервер, чтобы разрабатывать интеграцию через REST API в своем проекте. Агент будет обращаться к официальной REST-документации

Scope: crm

Кто может выполнять метод: любой пользователь с правом «чтения» элементов объекта CRM

Метод получает список элементов определенного типа объекта CRM.

Элементы объекта CRM не попадут в итоговую выборку, если у пользователя нет прав на «чтение» этих элементов.

Параметры метода

Обязательные параметры отмечены *

Название
тип

Описание

entityTypeId*
integer

Идентификатор системного или пользовательского типа, чьи элементы нужно получить.

Числовые значения для системных типов (Лид — 1, Сделка — 2, Контакт — 3, Компания — 4, Счёт — 31 и др.) приведены в справочнике типов объектов CRM. Идентификатор смарт-процесса можно узнать методом crm.type.list

select
array

Список полей, которые должны быть заполнены у элементов в выборке.

Может содержать в себе только названия полей элемента или '*'.

Список всех доступных полей для выборки можно узнать методом crm.item.fields. Перечень стандартных полей доступен в статье Поля объектов CRM

Поле fm (множественные поля: телефоны, e-mail, мессенджеры) не является полем объекта CRM и не может быть запрошено через select явно. Чтобы получить fm в ответе, передайте select: ['*']

filter
object

Объект формата:

{
            field_1: value_1,
            field_2: value_2,
            ...,
            field_n: value_n,
        }
        

где

  • field_n — название поля по которому будет отфильтрована выборка элементов
  • value_n — значение фильтра

Фильтр может иметь неограниченную вложенность и количество условий.
По умолчанию все условия соединяются друг с другом как AND (логическое И). Если нужно использовать OR (Логическое ИЛИ), то можно передать специальный ключ logic со значением OR.

К ключам field_n можно добавить префикс, уточняющий работу фильтра.
Возможные значения префикса:

  • >= — больше либо равно
  • > — больше
  • <= — меньше либо равно
  • < — меньше
  • @ — IN, в качестве значения передается массив
  • !@ — NOT IN, в качестве значения передается массив
  • % — LIKE, поиск по подстроке. Символ % в значении фильтра передавать не нужно. Поиск ищет подстроку в любой позиции строки
  • =% — LIKE, поиск по подстроке. Символ % нужно передавать в значении. Примеры:
    • "мол%" — ищет значения, начинающиеся с «мол»
    • "%мол" — ищет значения, заканчивающиеся на «мол»
    • "%мол%" — ищет значения, где «мол» может быть в любой позиции
  • %= — LIKE (аналогично =%)
  • !% — NOT LIKE, поиск по подстроке. Символ % в значении фильтра передавать не нужно. Поиск идет с обеих сторон
  • !=% — NOT LIKE, поиск по подстроке. Символ % нужно передавать в значении. Примеры:
    • "мол%" — ищет значения, не начинающиеся с «мол»
    • "%мол" — ищет значения, не заканчивающиеся на «мол»
    • "%мол%" — ищет значения, где подстроки «мол» нет в любой позиции
  • !%= — NOT LIKE (аналогично !=%)
  • = — равно, точное совпадение (используется по умолчанию)
  • != — не равно
  • ! — не равно

Список всех доступных полей для фильтрации можно узнать методом crm.item.fields. Перечень стандартных полей доступен в статье Поля объектов CRM

order
object

Объект формата:

{
            field_1: value_1,
            field_2: value_2,
            ...,
            field_n: value_n,
        }
        

где

  • field_n — название поля по которому будет произведена сортировка выборки элементов
  • value_n — значение типа string равное:
    • ASC — сортировка по возрастанию
    • DESC — сортировка по убыванию

Список всех доступных полей для сортировки можно узнать методом crm.item.fields. Перечень стандартных полей доступен в статье Поля объектов CRM

start
integer

Параметр используется для управления постраничной навигацией.

Размер страницы результатов всегда статичный — 50 записей.

Чтобы выбрать вторую страницу результатов, передайте значение 50. Чтобы выбрать третью страницу результатов — значение 100 и так далее.

Формула расчета значения параметра start:

start = (N-1) * 50, где N — номер нужной страницы

useOriginalUfNames
boolean

Параметр для управления форматом имен пользовательских полей в запросе и ответе.
Возможные значения:

  • Y — оригинальные имена пользовательских полей, например UF_CRM_2_1639669411830
  • N — имена пользовательских полей в camelCase, например ufCrm2_1639669411830

По умолчанию — N

Примеры кода

Получить список лидов у которых:

  1. Имя или фамилия не пустые
  2. Находятся в статусе "В работе" или "Не обработан".
  3. Пришли из источников "Реклама" или "Сайт".
  4. Закреплены за менеджерами с идентификаторами 1 или 6.
  5. Имеют сумму сделки от 5000 до 20000.
  6. Режим расчета суммы является ручным

Задать следующий порядок сортировки у данной выборки:

  • Имя и фамилия в порядке возрастания

Для наглядности выберем только необходимые для нас поля:

  • Идентификатор 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
        
// This snippet is an ES module: top-level await requires type="module" or a bundler.
        // $b24 is an already-initialized SDK instance (see the SDK "Get started" guide).
        import { Text } from '@bitrix24/b24jssdk'
        import type { B24Frame } from '@bitrix24/b24jssdk'
        
        declare const $b24: B24Frame
        
        type CrmItem = {
          id: number
          assignedById: number
          stageId: string
          opportunity: number
          sourceId: string
          title: string
          name: string
          lastName: string | null
          isManualOpportunity: string
        }
        
        // Shape of the payload returned in result (match the "response handling" section of the page)
        type CrmItemListResult = {
          items: CrmItem[]
        }
        
        try {
          // crm.item.list returns a single page (max 50 records). For the whole result set
          // use a list helper: $b24.actions.v2.callList.make() returns every record as one
          // array, $b24.actions.v2.fetchList.make() yields them in chunks (async generator).
          // NOTE: the list helpers do not accept `order` (it is excluded from their params, so
          // passing it is a TS error) — keep this call.make + `start` variant when sort matters.
          const response = await $b24.actions.v2.call.make<CrmItemListResult>({
            method: 'crm.item.list',
            params: {
              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',
              },
              start: 0,
            },
            requestId: Text.getUuidRfc4122()
          })
        
          // The payload is available only on a successful response
          if (!response.isSuccess) {
            console.error(response.getErrorMessages().join('; '))
          } else {
            const result = response.getData()!.result
            console.info('Fetched items:', result.items.length, result.items)
          }
        } catch (error) {
          // Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
          console.error(error)
        }
        
<!-- Load the SDK (UMD build); it is exposed as the global B24Js -->
        <script src="https://unpkg.com/@bitrix24/b24jssdk@1/dist/umd/index.min.js"></script>
        <script>
          async function getCrmItemList() {
            try {
              // Initialize the SDK inside a Bitrix24 frame
              const $b24 = await B24Js.initializeB24Frame()
        
              // crm.item.list returns a single page (max 50 records). For the whole result set
              // use a list helper: $b24.actions.v2.callList.make() returns every record as one
              // array, $b24.actions.v2.fetchList.make() yields them in chunks (async generator).
              // NOTE: the list helpers do not accept `order` (it is excluded from their params, so
              // passing it is a TS error) — keep this call.make + `start` variant when sort matters.
              const response = await $b24.actions.v2.call.make({
                method: 'crm.item.list',
                params: {
                  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',
                  },
                  start: 0,
                },
                requestId: B24Js.Text.getUuidRfc4122()
              })
        
              // The payload is available only on a successful response
              if (!response.isSuccess) {
                console.error(response.getErrorMessages().join('; '))
                return
              }
        
              const result = response.getData().result
              console.info('Fetched items:', result.items.length, result.items)
            } catch (error) {
              // Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
              console.error(error)
            }
          }
        
          document.addEventListener('DOMContentLoaded', getCrmItemList)
        </script>
        
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);
        }
        

Пример

from b24pysdk.client import BaseClient
        from b24pysdk.errors import BitrixAPIError, BitrixSDKException
        
        client: BaseClient
        
        try:
            bitrix_response = client.crm.item.list(
                entity_type_id=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",
                },
            ).response
            result = bitrix_response.result
            print(result)
        except BitrixAPIError as error:
            print(
                "Ошибка Bitrix API",
                f"error: {error.error}",
                f"error_description: {error.error_description}",
                sep="\n",
            )
        except BitrixSDKException as error:
            print(f"Ошибка Bitrix SDK: {error.message}")
        except Exception as error:
            print(f"Непредвиденная ошибка: {error}")
        

Пример as_list

from b24pysdk.client import BaseClient
        from b24pysdk.errors import BitrixAPIError, BitrixSDKException
        
        client: BaseClient
        
        try:
            bitrix_response = client.crm.item.list(
                entity_type_id=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",
                },
            ).as_list().response
            result = bitrix_response.result
            for item in result:
                print(item)
        except BitrixAPIError as error:
            print(
                "Ошибка Bitrix API",
                f"error: {error.error}",
                f"error_description: {error.error_description}",
                sep="\n",
            )
        except BitrixSDKException as error:
            print(f"Ошибка Bitrix SDK: {error.message}")
        except Exception as error:
            print(f"Непредвиденная ошибка: {error}")
        

Пример as_list_fast

from b24pysdk.client import BaseClient
        from b24pysdk.errors import BitrixAPIError, BitrixSDKException
        
        client: BaseClient
        
        try:
            bitrix_response = client.crm.item.list(
                entity_type_id=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",
                },
            ).as_list_fast(descending=True).response
            result = bitrix_response.result
            for item in result:
                print(item)
        except BitrixAPIError as error:
            print(
                "Ошибка Bitrix API",
                f"error: {error.error}",
                f"error_description: {error.error_description}",
                sep="\n",
            )
        except BitrixSDKException as error:
            print(f"Ошибка Bitrix SDK: {error.message}")
        except Exception as error:
            print(f"Непредвиденная ошибка: {error}")
        
    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
        
// This snippet is an ES module: top-level await requires type="module" or a bundler.
        // $b24 is an already-initialized SDK instance (see the SDK "Get started" guide).
        import { Text } from '@bitrix24/b24jssdk'
        import type { B24Frame, ISODate } from '@bitrix24/b24jssdk'
        
        declare const $b24: B24Frame
        
        type CrmItem = {
          id: number
          title: string
          createdTime: ISODate | null
        }
        
        // Shape of the payload returned in result (match the "response handling" section of the page)
        type CrmItemListResult = {
          items: CrmItem[]
        }
        
        try {
          // crm.item.list returns a single page (max 50 records). For the whole result set
          // use a list helper: $b24.actions.v2.callList.make() returns every record as one
          // array, $b24.actions.v2.fetchList.make() yields them in chunks (async generator).
          // NOTE: the list helpers do not accept `order` (it is excluded from their params, so
          // passing it is a TS error) — keep this call.make + `start` variant when sort matters.
          const response = await $b24.actions.v2.call.make<CrmItemListResult>({
            method: 'crm.item.list',
            params: {
              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',
                  },
                },
              },
              start: 0,
            },
            requestId: Text.getUuidRfc4122()
          })
        
          // The payload is available only on a successful response
          if (!response.isSuccess) {
            console.error(response.getErrorMessages().join('; '))
          } else {
            const result = response.getData()!.result
            console.info('Fetched items:', result.items.length, result.items)
          }
        } catch (error) {
          // Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
          console.error(error)
        }
        
<!-- Load the SDK (UMD build); it is exposed as the global B24Js -->
        <script src="https://unpkg.com/@bitrix24/b24jssdk@1/dist/umd/index.min.js"></script>
        <script>
          async function getCrmItemListByDate() {
            try {
              // Initialize the SDK inside a Bitrix24 frame
              const $b24 = await B24Js.initializeB24Frame()
        
              // crm.item.list returns a single page (max 50 records). For the whole result set
              // use a list helper: $b24.actions.v2.callList.make() returns every record as one
              // array, $b24.actions.v2.fetchList.make() yields them in chunks (async generator).
              // NOTE: the list helpers do not accept `order` (it is excluded from their params, so
              // passing it is a TS error) — keep this call.make + `start` variant when sort matters.
              const response = await $b24.actions.v2.call.make({
                method: 'crm.item.list',
                params: {
                  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',
                      },
                    },
                  },
                  start: 0,
                },
                requestId: B24Js.Text.getUuidRfc4122()
              })
        
              // The payload is available only on a successful response
              if (!response.isSuccess) {
                console.error(response.getErrorMessages().join('; '))
                return
              }
        
              const result = response.getData().result
              console.info('Fetched items:', result.items.length, result.items)
            } catch (error) {
              // Thrown on transport or SDK failures (AjaxError, SdkError, etc.)
              console.error(error)
            }
          }
        
          document.addEventListener('DOMContentLoaded', getCrmItemListByDate)
        </script>
        
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
object

Корневой элемент ответа. Содержит единственный ключ items

items
item[]

Массив c информацией о найденных элементах.

Возвращаемые поля зависят от параметра select, описание полей

total
integer

Общее количество найденных элементов

next
integer

Содержит значение, которое нужно передать в следующий запрос в параметр start, чтобы получить следующую порцию данных.

Параметр next появляется в ответе, если количество элементов, соответствующих вашему запросу, превышает значение 50.

time
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
string

Строковый код ошибки. Может состоять из цифр, латинских букв и знака подчеркивания

error_description
error_description

Текстовое описание ошибки. Описание не предназначено для показа конечному пользователю в необработанном виде

Возможные коды ошибок

Статус

Код

Описание

Значение

403

allowed_only_intranet_user

Действие разрешено только интранет-пользователям

Пользователь не является интранет-пользователем

400

NOT_FOUND

Смарт-процесс не найден

Возникает, при передаче невалидного entityTypeId

400

INVALID_ARG_VALUE

Invalid filter: field 'field' is not allowed in filter

Переданное в filter поле field недоступно для фильтрации

400

INVALID_ARG_VALUE

Invalid filter: field 'field' has invalid value

Переданное значение для поля field в filter некорректно

400

INVALID_ARG_VALUE

Invalid order: field 'field' is not allowed in order

Переданное в order поле field недоступно для сортировки

400

INVALID_ARG_VALUE

Invalid order: allowed sort directions are ASC, DESC. But got 'orderValue' for field 'field'

Переданное значение orderValue для поля field в параметр order некорректно

Статусы и коды системных ошибок

HTTP-статус: 20x, 40x, 50x

Описанные ниже ошибки могут возникнуть при вызове любого метода

Статус

Код
Текст ошибки

Описание

500

INTERNAL_SERVER_ERROR
Internal server error

Возникла внутренняя ошибка сервера, обратитесь к администратору сервера или в техническую поддержку Битрикс24

500

ERROR_UNEXPECTED_ANSWER
Server returned an unexpected response

Возникла внутренняя ошибка сервера, обратитесь к администратору сервера или в техническую поддержку Битрикс24

503

QUERY_LIMIT_EXCEEDED
Too many requests

Превышен лимит на интенсивность запросов

429

OPERATION_TIME_LIMIT
Method is blocked due to operation time limit

Метод заблокирован из-за превышения лимита на ресурсоемкость запросов. Блокировка снимается автоматически через 10 минут

405

ERROR_BATCH_METHOD_NOT_ALLOWED
Method is not allowed for batch usage

Текущий метод не разрешен для вызова с помощью batch

400

ERROR_BATCH_LENGTH_EXCEEDED
Max batch length exceeded

Превышена максимальная длина параметров, переданных в метод batch

401

NO_AUTH_FOUND
Wrong authorization data

Неверный access-токен или код вебхука

400

INVALID_REQUEST
Https required

Для вызовов методов требуется использовать протокол HTTPS

503

OVERLOAD_LIMIT
REST API is blocked due to overload

REST API заблокирован из-за перегрузки. Это ручная индивидуальная блокировка, для снятия необходимо обращаться в техническую поддержку Битрикс24

403

ACCESS_DENIED
REST API is available only on commercial plans

REST API доступен только на коммерческих планах

403

INVALID_CREDENTIALS
Invalid request credentials

У пользователя, с чьим access-токеном или вебхуком был вызван метод, не хватает прав

404

ERROR_MANIFEST_IS_NOT_AVAILABLE
Manifest is not available

Манифест недоступен

403

insufficient_scope
The request requires higher privileges than provided by the webhook token

Запрос требует более высоких привилегий, чем предоставляет токен вебхука

401

expired_token
The access token provided has expired

Предоставленный access-токен доступа истек

403

user_access_error
The user does not have access to the application

Пользователь не имеет доступа к приложению. Это означает, что приложение установлено, но администратор портала разрешил доступ к этому приложению только конкретным пользователям

500

PORTAL_DELETED
Portal was deleted

Публичная часть сайта закрыта. Чтобы открыть публичную часть сайта на коробочной установке отключите опцию «Временное закрытие публичной части сайта». Путь к настройке: Рабочий стол > Настройки > Настройки продукта > Настройки модулей > Главный модуль > Временное закрытие публичной части сайта

Продолжите изучение