Обзор REST API 3.0

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

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

REST 3.0 — новая версия API в Битрикс24, которая делает работу с интеграциями более предсказуемой и структурированной. Ключевые улучшения:

  • единый формат ответов,
  • получение связанных данных одним запросом,
  • встроенная OpenAPI-документация.

Таблица сравнения версий REST

Как вызвать новую версию

Адрес вызова: https://{адрес_установки}/rest/api/{id_пользователя}/{код_вебхука}/{method}.

  • {адрес_установки} — адрес Битрикс24.

  • /rest/api/ — указание на версию REST. После rest/ укажите /api/ — это главное отличие вызова новой версии от старой. Если не указать /api/, Битрикс24 выполнит метод старой версии REST, если он существует, или вернет ошибку Method not found для методов, доступных только в REST 3.0.

  • /{id_пользователя}/{код_вебхука}/ — данные авторизации вебхука. Для приложения передавайте токен авторизации в поле auth в теле запроса.

  • {method} — вызываемый метод.

Пример вызова нового метода с авторизацией вебхука

curl -X POST \
        -H "Content-Type: application/json" \
        -H "Accept: application/json" \
        -d '{"fields":{"taskId":51,"text":"Сообщение из внешней системы"}}' \
        https://**put_your_bitrix24_address**/rest/api/**put_your_user_id_here**/**put_your_webhook_here**/tasks.task.chat.message.send
        

Пример вызова нового метода с авторизацией приложения

curl -X POST \
        -H "Content-Type: application/json" \
        -H "Accept: application/json" \
        -d '{"fields":{"taskId":51,"text":"Сообщение из внешней системы"},"auth":"**put_access_token_here**"}' \
        https://**put_your_bitrix24_address**/rest/api/tasks.task.chat.message.send
        

Технические требования

  • Тело запроса передавайте в формате JSON с заголовком Content-Type: application/json.

  • Все запросы с параметрами передавайте только в формате POST, например метод tasks.task.chat.message.send с параметрами taskId и text.

curl -X POST \
        -H "Content-Type: application/json" \
        -H "Accept: application/json" \
        -d '{"fields":{"taskId":51,"text":"Сообщение из внешней системы"}}' \
        https://**put_your_bitrix24_address**/rest/api/**put_your_user_id_here**/**put_your_webhook_here**/tasks.task.chat.message.send
        
  • Запросы без параметров можно отправлять как GET или POST, например метод без параметров rest.documentation.openapi.
curl -X GET "https://{portal}/rest/api/{user_id}/{webhook}/documentation"
        

SDK пока не поддерживают в вызовах адрес /rest/api/. Используйте прямые HTTP-запросы, например, через curl, fetch.

OpenAPI-документация

В REST 3.0 доступна автоматически генерируемая документация в стандарте OpenAPI.

Чтобы получить документацию, вызовите метод rest.documentation.openapi или documentation без параметров.

curl -X POST "https://{portal}/rest/api/{user_id}/{webhook}/documentation"
        

Результат — JSON в формате OpenAPI.

Метод можно вызвать в Swagger, Postman или другой программе, которая работает с OpenAPI.

Единый формат ответа

В предыдущей версии REST разные модули по-разному возвращали результат. Например, идентификатор созданного элемента мог быть вложенным объектом "result": { "id": 1823 } или сразу возвращаться в результате "result": 1823. Для разных методов необходимо было писать свою логику обработки ответа.

Новая версия REST возвращает ответ на запрос в едином формате, который применяется ко всем методам, независимо от модуля.

Структура успешного ответа

Если метод возвращает данные, например список найденных элементов или идентификатор созданного элемента, они вернутся вложенным объектом внутри "result": {...}.

{
          "result": {
            "item": {
              "id": 42,
              "title": "Подготовить отчет"
            }
          }
        }
        

Если метод возвращает результат выполнения операции true или false, например при удалении элемента, он вернется вложенным объектом внутри "result": {...}.

{
          "result": {
            "result": true
          }
        } 
        

Структура неуспешного ответа

Любой метод может вернуть ошибку, например из-за запрета доступа или неверных параметров запроса. В новом формате ошибка содержит:

  • code — код ошибки, возвращается всегда,

  • message — сообщение об ошибке на языке вашего Битрикс24, возвращается всегда,

  • validation — подробности об ошибке, возвращаются, если ошибка связана с параметрами запроса.

{
            "error": {
                "code": "BITRIX_REST_V3_EXCEPTION_VALIDATION_REQUESTVALIDATIONEXCEPTION",
                "message": "Ошибка при валидации объекта запроса",
                "validation": [
                    {
                        "message": "Обязательное поле `id` не указано",
                        "field": "id"
                    }
                ]
            }
        }
        

Связи между объектами

REST 3.0 позволяет получать данные связанных объектов сразу в одном ответе. Например, у задачи есть поле responsible — это поле с идентификатором другого объекта, пользователя. В старой версии REST необходимо сначала получить идентификатор из поля responsible старым методом tasks.task.get, затем отдельно вызвать метод user.get, чтобы получить данные по идентификатору пользователя.

В новой версии REST можно сразу в запросе tasks.task.get указать поля связанных объектов в select: "select": ["responsible.name", "responsible.email"].

curl -X POST \
        -H "Content-Type: application/json" \
        -H "Accept: application/json" \
        -d '{"id":3835,"select":["responsible.name","responsible.email"]}' \
        https://**put_your_bitrix24_address**/rest/api/**put_your_user_id_here**/**put_your_webhook_here**/tasks.task.get
        

Связанные поля указываются в запросе через точку: responsible.name, group.title, company.phone. В ответе связанные поля превращаются в объект со структурой, соответствующей выбранным полям.

{
            "result": {
                "item": {
                    "id": 3835,
                    "title": "задача",
                    "...": "", // другие поля
                    "responsible": {
                        "name": "Имя",
                        "email": "mail@bitrix.ru"
                    },
                }
            },
        }
        

Если в select указаны некорректные или недоступные поля, запрос вернет ошибку.

{
            "error": {
                "code": "BITRIX_REST_V3_EXCEPTION_UNKNOWNDTOPROPERTYEXCEPTION",
                "message": "Неизвестное поле `stageId` для сущности `UserDto`"
            }
        }
        

Чтобы узнать, какие связи и поля поддерживаются, используйте OpenAPI-документацию или статью Поля задачи в REST 3.0.

Фильтрация

В REST 3.0 фильтрация данных построена на логических выражениях, которые можно комбинировать. Все методы, поддерживающие параметр filter, работают по этой схеме.

Принципы работы фильтра

  • Условия внутри одного уровня соединяются логикой И — то есть должны выполняться все сразу.

  • Группы условий можно объединять логикой ИЛИ с помощью специального объекта с ключом "logic": "or".

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

  1. Статус = "NEW".

  2. ID равен 3, 4 или 5.

{
            "filter": [
                ["status", "=", "NEW"],
                ["id", "in", [3,4,5]]
            ]
        }
        

Все элементы в массиве filter соединяются между собой логикой И -> Статус = NEW И (ID = 3, 4 или 5).

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

  1. Статус = "NEW".

  2. ID равен 1 или 2, ИЛИ ID равен 3, 4 или 5.

{
            "filter": [
                ["status", "=", "NEW"],
                {
                    "logic": "or", 
                    "conditions": [
                        ["id", [1,2]], // id in (1,2)
                        ["id", "in", [3,4,5]]
                    ]
                }
            ]
        }
        
  1. ["status", "=", "NEW"] -> Это простое условие: найди все элементы, где поле status равно значению NEW.
  2. { "logic": "or", "conditions": [...] } -> Это группа условий, соединенных логикой ИЛИ (or). Внутри группы два условия:
    • ["id", [1,2]] — это сокращенная запись для ["id", "in", [1,2]] -> «ID должен быть одним из этих чисел: 1 или 2»,
    • ["id", "in", [3,4,5]] -> «ID должен быть 3, 4 или 5». "logic": "or" обозначает, что элемент подойдет, если хотя бы одно из этих двух условий выполнено.
  3. Все элементы в массиве filter соединяются логикой И между собой -> Статус = NEW И (ID = 1 или 2 ИЛИ ID = 3 или 4 или 5).

Поддерживаемые операторы

Оператор

Значение

Пример

=

равно

["status", "=", "NEW"] → статус точно NEW

!=

не равно

["status", "!=", "CLOSED"] → не закрыт

>

больше

["date", ">", "2025-01-01"] → позже 1 января 2025

>=

больше или равно

["price", ">=", 1000] → цена от 1000 и выше

<

меньше

["date", "<", "2025-01-01"] → до 1 января 2025

<=

меньше или равно

["price", "<=", 1000] → цена до 1000 включительно

in

одно из значений в списке

["id", "in", [1,2,3]] → id = 1 или 2 или 3

between

в диапазоне

["date", "between", ["2025-01-01", "2025-12-31"]] → в 2025 году

Сравнение REST 3.0 со старой версией API

Что меняется

REST v2

REST v3

Путь вызова

/rest/{id}/{webhook}/{method}

/rest/api/{id}/{webhook}/{method}

Формат тела

JSON или form-data

Только JSON

Структура ответа

Разный формат ответа в модулях

Единый формат для всех методов

Поля и связи

Доступны только поля текущего объекта вызова

Доступны поля связанных объектов, связи RelationToOne/RelationToMany

Документация

apidocs.bitrix24.ru и github

OpenAPI, apidocs.bitrix24.ru и github

Количество запросов

Больше, все связанные объекты — отдельными вызовами

Меньше, вложенные выборки уменьшают количество отдельных запросов и снижают общую нагрузку на сервера

batch

URL‑кодирование вложенных запросов, ограниченная возможность передачи данных в следующие шаги

JSON‑массив объектов, данные из предыдущих шагов подставляются структурно, можно использовать массивы из результатов предыдущего метода

Фильтр

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

Все методы поддерживают сложную логику

Ошибки

Формат зависит от метода

Унифицированный код и описание