PHPackages                             denx-b/b24-rest - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. denx-b/b24-rest

ActiveLibrary[API Development](/categories/api)

denx-b/b24-rest
===============

Bitrix24 REST wrapper library

v1.1.1(2mo ago)03proprietaryPHPPHP &gt;=8.1

Since Feb 15Pushed 2mo agoCompare

[ Source](https://github.com/denx-b/b24-rest)[ Packagist](https://packagist.org/packages/denx-b/b24-rest)[ RSS](/packages/denx-b-b24-rest/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (14)Used By (0)

REST-обёртка Bitrix24
---------------------

[](#rest-обёртка-bitrix24)

```
composer require denx-b/b24-rest:dev-main
```

Базовая инициализация
---------------------

[](#базовая-инициализация)

```
use B24Rest\Rest\Bitrix24RestFactory;

$b24 = Bitrix24RestFactory::fromWebhook('https:///rest/1//');
```

Сделки (примеры)
----------------

[](#сделки-примеры)

```
// Получить список сделок через crm.item.list
$page = $b24->deals()->list();
```

```
// Выгрузить все сделки (start = -1 + внутренний курсор по deals()->all();
```

```
// Выгрузить все сделки с фильтром
$allInWork = $b24->deals()->all([
    'filter' => ['STAGE_ID' => 'NEW'],
    'select' => ['ID', 'TITLE', 'STAGE_ID'],
]);
```

```
// Получить сделку по ID
$deal = $b24->deals()->getById(123);
```

```
// Добавить сделку
$created = $b24->deals()->add([
    'TITLE' => 'Сделка из API',
    'STAGE_ID' => 'NEW',
]);
```

```
// Обновить сделку
$ok = $b24->deals()->update(123, [
    'TITLE' => 'Обновлённый заголовок',
]);
```

```
// Массовое добавление (под капотом batch, с чанками по 50)
$created = $b24->deals()->addMany([
    ['TITLE' => 'Сделка #1', 'STAGE_ID' => 'NEW'],
    ['TITLE' => 'Сделка #2', 'STAGE_ID' => 'NEW'],
]);
```

```
// Массовое обновление
$updated = $b24->deals()->updateMany([
    ['id' => 123, 'fields' => ['TITLE' => 'Сделка #123 v2']],
    ['id' => 124, 'fields' => ['TITLE' => 'Сделка #124 v2']],
]);
```

```
// Удалить сделку
$deleted = $b24->deals()->delete(123);
```

```
// Добавить товарную позицию в сделку
$row = $b24->deals()->productRowAdd(359, [
    'productName' => 'Пакет услуг',
    'price' => 1000,
    'quantity' => 1,
]);
```

```
// Обновить товарную позицию
$row = $b24->deals()->productRowUpdate(5001, [
    'price' => 1500,
    'quantity' => 2,
]);
```

```
// Получить товарную позицию по ID
$row = $b24->deals()->productRowGet(5001);
```

```
// Получить список товарных позиций по сделке
$rows = $b24->deals()->productRowList(359);
```

```
// Удалить товарную позицию
$deleted = $b24->deals()->productRowDelete(5001);
```

```
// Направления сделок (воронки)
$directions = $b24->dealCategories()->list();
```

```
// Направление сделки по ID
$direction = $b24->dealCategories()->getById(1);
```

```
// Добавить направление сделки
$createdDirection = $b24->dealCategories()->add([
    'name' => 'Новая воронка',
    'sort' => 500,
]);
```

```
// Обновить направление сделки
$updatedDirection = $b24->dealCategories()->update(1, [
    'name' => 'Воронка v2',
]);
```

```
// Удалить направление сделки
$deletedDirection = $b24->dealCategories()->delete(1);
```

```
// Получить список стадий выбранного направления (ID категории)
$stages = $b24->dealCategoryStages()
    ->listByCategoryId(1);
```

```
// Получить список стадий (любой фильтр ENTITY_ID можно передать в params)
$allStages = $b24->dealCategoryStages()->list([
    'filter' => ['ENTITY_ID' => 'DEAL_STAGE_1'],
]);
```

```
// Получить стадию по ID
$stage = $b24->dealCategoryStages()
    ->getById(100);
```

```
// Добавить стадию (с явным ENTITY_ID)
$createdStage = $b24->dealCategoryStages()->add([
    'ENTITY_ID' => 'DEAL_STAGE_1',
    'STATUS_ID' => 'NEW_CUSTOM_STAGE',
    'NAME' => 'Новая пользовательская стадия',
    'SORT' => 500,
]);
```

```
// Добавить стадию в выбранное направление
$createdStage = $b24->dealCategoryStages()->addForCategory(1, [
    'STATUS_ID' => 'NEW_CUSTOM_STAGE',
    'NAME' => 'Новая пользовательская стадия',
    'SORT' => 500,
]);
```

```
// Добавить стадию в выбранное направление (STATUS_ID генерируется автоматически)
$createdStage = $b24->dealCategoryStages()->addForCategoryWithGeneratedStatusId(
    1,
    'Стадия с авто STATUS_ID'
);
```

```
// Обновить стадию
$updatedStage = $b24->dealCategoryStages()->updateForCategory(1, 100, [
    'NAME' => 'Переименованная стадия',
]);
```

```
// Обновить стадию по ID (с явным ENTITY_ID)
$updatedStage = $b24->dealCategoryStages()->update(100, [
    'ENTITY_ID' => 'DEAL_STAGE_1',
    'NAME' => 'Переименованная стадия',
]);
```

```
// Удалить стадию
$deletedStage = $b24->dealCategoryStages()->delete(100);
```

Другие сущности crm.item (примеры)
----------------------------------

[](#другие-сущности-crmitem-примеры)

```
// Лиды
$lead = $b24->leads()->list();
```

```
// Контакты
$contactsPage = $b24->contacts()->list();
```

```
// Компании
$companyId = $b24->companies()->list();
```

```
// Счета
$invoice = $b24->invoices()->list();
```

```
// Предложения
$quote = $b24->quotes()->list();
```

```
// Элементы смарт-процесса (пример entityTypeId=136)
$smartItems = $b24->smartItems(1086)->list();
```

`contacts()` и `companies()` поддерживают только `crm.item.*` (без `productRow*`).

Задачи
------

[](#задачи)

```
// Добавить задачу
$task = $b24->tasks()->add([
    'TITLE' => 'Задача из API',
    'RESPONSIBLE_ID' => 1,
]);
```

```
// Обновить задачу
$ok = $b24->tasks()->update(100, [
    'TITLE' => 'Обновлённый заголовок задачи',
]);
```

```
// Массовое добавление задач (под капотом tasks.task.add через batch, с чанками по 50)
$createdTasks = $b24->tasks()->addMany([
    ['TITLE' => 'Задача #1', 'RESPONSIBLE_ID' => 1],
    ['TITLE' => 'Задача #2', 'RESPONSIBLE_ID' => 1],
]);
```

```
// Массовое обновление задач (под капотом tasks.task.update через batch, с чанками по 50)
$updated = $b24->tasks()->updateMany([
    ['taskId' => 100, 'fields' => ['TITLE' => 'Задача #100 v2']],
    ['taskId' => 101, 'fields' => ['TITLE' => 'Задача #101 v2']],
]);
```

```
// Получить задачу
$task = $b24->tasks()->get(100);
```

```
// Список задач (page = 1, фиксированный размер страницы = 50)
$tasks = $b24->tasks()->list([
    'order' => ['ID' => 'DESC'],
    'select' => ['ID', 'TITLE', 'STATUS'],
], 1);
```

```
// Все задачи (start=-1 + курсор по ID)
$allTasks = $b24->tasks()->taskAll([
    'filter' => ['GROUP_ID' => 7],
    'select' => ['ID', 'TITLE', 'STATUS'],
]);
```

```
// Список шаблонов задач
$templates = $b24->tasks()->templateList();
```

```
// Создать задачу по шаблону (поля задачи можно переопределить)
$created = $b24->tasks()->taskAddFromTemplate(3, [
    'RESPONSIBLE_ID' => 1,
    'TITLE' => 'Задача из шаблона #3',
]);
```

```
// Получить шаблон задачи по ID
$template = $b24->tasks()->templateGet(3);
```

```
// Получить чек-лист шаблона задачи
$templateChecklist = $b24->tasks()
    ->templateChecklistList(3);
```

```
// Прикрепить файл к задаче
$ok = $b24->tasks()->taskFilesAttach(100, 555);
```

```
// Делегировать задачу
$ok = $b24->tasks()->taskDelegate(100, 1);
```

```
// Массово делегировать задачи (под капотом tasks.task.delegate через batch, с чанками по 50)
$delegated = $b24->tasks()->taskDelegateMany([
    ['taskId' => 100, 'userId' => 1],
    ['taskId' => 101, 'userId' => 1],
]);
```

```
// Завершить задачу
$ok = $b24->tasks()->taskComplete(100);
```

```
// Массово завершить задачи (под капотом tasks.task.complete через batch, с чанками по 50)
$completed = $b24->tasks()
    ->taskCompleteMany([100, 101, 102]);
```

```
// Удалить задачу
$ok = $b24->tasks()->taskDelete(100);
```

```
// Массово удалить задачи (под капотом tasks.task.delete через batch, с чанками по 50)
$deleted = $b24->tasks()->taskDeleteMany([100, 101, 102]);
```

```
// Добавить пункты чек-листа (всегда через batch, даже для одного пункта): создать новый чек-лист по названию
$checklistItems = $b24->tasks()->checklistItemAdd(100, 'Основной чек-лист', [
    ['TITLE' => 'Первый пункт'],
    ['TITLE' => 'Второй пункт'],
]);
```

```
// Добавить пункты в существующий чек-лист (checklistId / parentId)
$checklistItems = $b24->tasks()->checklistItemAdd(100, '', [
    ['TITLE' => 'Третий пункт'],
], [
    'checklistId' => 200,
]);
```

```
// Обновить пункт чек-листа
$ok = $b24->tasks()->checklistItemUpdate(100, 200, [
    'TITLE' => 'Пункт обновлён',
]);
```

```
// Получить пункт чек-листа
$checklistItem = $b24->tasks()->checklistItemGet(100, 200);
```

```
// Получить список пунктов чек-листа
$checklist = $b24->tasks()->checklistItemGetList(100);
```

```
// Переместить пункт чек-листа после другого пункта
$ok = $b24->tasks()->checklistItemMoveAfterItem(100, 201, 200);
```

```
// Отметить пункт чек-листа как выполненный
$ok = $b24->tasks()->checklistItemComplete(100, 200);
```

```
// Возобновить пункт чек-листа
$ok = $b24->tasks()->checklistItemRenew(100, 200);
```

```
// Удалить пункт чек-листа
$ok = $b24->tasks()->checklistItemDelete(100, 200);
```

```
// Переименовать чек-лист по текущему названию
$ok = $b24->tasks()->checklistRenameByTitle(100, 'Основной чек-лист', 'Основной чек-лист v2');
```

```
// Добавить комментарий к задаче
$comment = $b24->tasks()->commentItemAdd(100, 'Комментарий к задаче из API', 1);
```

```
// Добавить запись о затраченном времени
$elapsed = $b24->tasks()->elapsedItemAdd(100, 600, 'Потратил 10 минут', 1);
```

```
// Обновить запись о затраченном времени
$ok = $b24->tasks()->elapsedItemUpdate(100, 300, 900, 'Потратил 15 минут');
```

```
// Получить запись о затраченном времени
$elapsedItem = $b24->tasks()->elapsedItemGet(100, 300);
```

```
// Получить список записей о затраченном времени
$elapsedItems = $b24->tasks()->elapsedItemGetList([
    'filter' => ['TASK_ID' => 100],
    'order' => ['ID' => 'DESC'],
]);
```

```
// Удалить запись о затраченном времени
$ok = $b24->tasks()->elapsedItemDelete(100, 300);
```

```
// Получить все записи о затраченном времени по произвольному фильтру
$allElapsed = $b24->tasks()->elapsedItemAll([
    'filter' => ['USER_ID' => 1],
    'order' => ['ID' => 'DESC'],
]);
```

```
// Получить все записи о затраченном времени по задаче
$allTaskElapsed = $b24->tasks()->elapsedItemAllByTaskId(100);
```

```
// Получить все записи о затраченном времени по группе (сначала собираются ID задач группы, затем выборка по TASK_ID)
$allGroupElapsed = $b24->tasks()->elapsedItemAllByGroupId(7);
```

```
// Добавить пользовательское поле задачи
$userField = $b24->tasks()->itemUserFieldAdd([
    'ENTITY_ID' => 'TASKS_TASK',
    'FIELD_NAME' => 'UF_API_FIELD',
    'USER_TYPE_ID' => 'string',
    'EDIT_FORM_LABEL' => ['ru' => 'Поле API'],
]);
```

Структура компании
------------------

[](#структура-компании)

```
// Все департаменты (внутренняя пагинация по start/next, сортировка по умолчанию ID DESC)
$departments = $b24->departments()->all();
```

```
// Департамент по ID
$department = $b24->departments()->getById(1);
```

```
// Сотрудники департамента по ID департамента
$departmentUsers = $b24->departments()->getUsersById(1, [
    'SELECT' => ['ID', 'NAME', 'LAST_NAME', 'UF_DEPARTMENT'],
]);
```

```
// Добавить департамент
$createdDepartment = $b24->departments()->add([
    'NAME' => 'Новый департамент',
    'PARENT' => 1,
]);
```

```
// Обновить департамент
$updatedDepartment = $b24->departments()->update(100, [
    'NAME' => 'Переименованный департамент',
]);
```

```
// Удалить департамент
$deletedDepartment = $b24->departments()->delete(100);
```

Типы цен
--------

[](#типы-цен)

```
// Список типов цен (page = 1, фиксированный размер страницы = 50)
$priceTypesPage = $b24->priceTypes()->list([
    'select' => ['id', 'name', 'xmlId'],
], 1);
```

```
// Все типы цен (start=-1 + внутренний курсор по priceTypes()->all([
    'select' => ['id', 'name', 'xmlId'],
]);
```

```
// Тип цены по ID
$priceType = $b24->priceTypes()->getById(2);
```

```
// Добавить тип цены
$createdPriceType = $b24->priceTypes()->add([
    'name' => 'Base wholesale price',
    'base' => 'N',
    'sort' => 200,
    'xmlId' => 'basewholesale',
]);
```

```
// Обновить тип цены
$updatedPriceType = $b24->priceTypes()->update(2, [
    'name' => 'Base wholesale price v2',
    'sort' => 300,
]);
```

```
// Массовое добавление типов цен (под капотом catalog.priceType.add через batch, с чанками по 50)
$createdPriceTypes = $b24->priceTypes()->addMany([
    ['name' => 'Wholesale A', 'base' => 'N', 'sort' => 400, 'xmlId' => 'wholesale_a'],
    ['name' => 'Wholesale B', 'base' => 'N', 'sort' => 500, 'xmlId' => 'wholesale_b'],
]);
```

```
// Массовое обновление типов цен (под капотом catalog.priceType.update через batch, с чанками по 50)
$updatedPriceTypes = $b24->priceTypes()->updateMany([
    ['id' => 2, 'fields' => ['name' => 'Base wholesale price v3']],
    ['id' => 3, 'fields' => ['sort' => 600]],
]);
```

```
// Удалить тип цены
$deletedPriceType = $b24->priceTypes()->delete(2);
```

```
// Получить доступные поля типа цены
$priceTypeFields = $b24->priceTypes()->getFields();
```

Единицы измерения
-----------------

[](#единицы-измерения)

```
// Список единиц измерения (page = 1, фиксированный размер страницы = 50)
$measuresPage = $b24->measures()->list([
    'select' => ['id', 'code', 'symbolIntl'],
], 1);
```

```
// Все единицы измерения (start=-1 + внутренний курсор по measures()->all([
    'select' => ['id', 'code', 'symbolIntl'],
]);
```

```
// Единица измерения по ID
$measure = $b24->measures()->getById(6);
```

```
// Добавить единицу измерения
$createdMeasure = $b24->measures()->add([
    'code' => 800,
    'measureTitle' => 'Комплект',
    'symbolLetterIntl' => 'set',
    'symbolIntl' => 'pcs',
]);
```

```
// Обновить единицу измерения
$updatedMeasure = $b24->measures()->update(6, [
    'measureTitle' => 'Комплект v2',
    'symbolIntl' => 'set.',
]);
```

```
// Массовое добавление единиц измерения (под капотом catalog.measure.add через batch, с чанками по 50)
$createdMeasures = $b24->measures()->addMany([
    ['code' => 801, 'measureTitle' => 'Набор A', 'symbolIntl' => 'setA'],
    ['code' => 802, 'measureTitle' => 'Набор B', 'symbolIntl' => 'setB'],
]);
```

```
// Массовое обновление единиц измерения (под капотом catalog.measure.update через batch, с чанками по 50)
$updatedMeasures = $b24->measures()->updateMany([
    ['id' => 6, 'fields' => ['measureTitle' => 'Комплект v3']],
    ['id' => 7, 'fields' => ['symbolIntl' => 'pcs.']],
]);
```

```
// Удалить единицу измерения
$deletedMeasure = $b24->measures()->delete(6);
```

```
// Получить доступные поля единиц измерения
$measureFields = $b24->measures()->getFields();
```

Валюты
------

[](#валюты)

```
// Список валют (page = 1, фиксированный размер страницы = 50)
$currenciesPage = $b24->currencies()->list([
    'order' => ['currency' => 'DESC'],
], 1);
```

```
// Все валюты (первый запрос с start=-1)
$allCurrencies = $b24->currencies()->all([
    'order' => ['currency' => 'DESC'],
]);
```

```
// Валюта по коду
$currency = $b24->currencies()->getById('USD');
```

```
// Добавить валюту
$createdCurrency = $b24->currencies()->add([
    'CURRENCY' => 'CNY',
    'AMOUNT' => 1,
    'AMOUNT_CNT' => 1,
    'SORT' => 100,
]);
```

```
// Обновить валюту
$updatedCurrency = $b24->currencies()->update('CNY', [
    'AMOUNT' => 15.3449,
]);
```

```
// Массовое добавление валют (под капотом crm.currency.add через batch, с чанками по 50)
$createdCurrencies = $b24->currencies()->addMany([
    ['CURRENCY' => 'KZT', 'AMOUNT' => 1, 'AMOUNT_CNT' => 1, 'SORT' => 200],
    ['CURRENCY' => 'AED', 'AMOUNT' => 1, 'AMOUNT_CNT' => 1, 'SORT' => 300],
]);
```

```
// Массовое обновление валют (под капотом crm.currency.update через batch, с чанками по 50)
$updatedCurrencies = $b24->currencies()->updateMany([
    ['id' => 'CNY', 'fields' => ['AMOUNT' => 15.5000]],
    ['id' => 'USD', 'fields' => ['SORT' => 50]],
]);
```

```
// Удалить валюту
$deletedCurrency = $b24->currencies()->delete('IDR');
```

```
// Получить базовую валюту
$baseCurrency = $b24->currencies()->baseGet();
```

```
// Установить базовую валюту
$setBaseCurrency = $b24->currencies()->baseSet('RUB');
```

###  Health Score

38

—

LowBetter than 85% of packages

Maintenance84

Actively maintained with recent releases

Popularity3

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~1 days

Total

13

Last Release

75d ago

Major Versions

v0.0.9 → v1.0.02026-02-15

### Community

Maintainers

![](https://www.gravatar.com/avatar/a5f9f6fb94f80e3743be107451c9f85d28e476101517bd07b4c4d50ab80ddbbe?d=identicon)[dbogdanoff](/maintainers/dbogdanoff)

---

Top Contributors

[![denx-b](https://avatars.githubusercontent.com/u/3990426?v=4)](https://github.com/denx-b "denx-b (19 commits)")

### Embed Badge

![Health badge](/badges/denx-b-b24-rest/health.svg)

```
[![Health](https://phpackages.com/badges/denx-b-b24-rest/health.svg)](https://phpackages.com/packages/denx-b-b24-rest)
```

###  Alternatives

[stripe/stripe-php

Stripe PHP Library

4.0k143.3M480](/packages/stripe-stripe-php)[twilio/sdk

A PHP wrapper for Twilio's API

1.6k92.9M272](/packages/twilio-sdk)[facebook/php-business-sdk

PHP SDK for Facebook Business

90821.9M34](/packages/facebook-php-business-sdk)[meilisearch/meilisearch-php

PHP wrapper for the Meilisearch API

74513.7M114](/packages/meilisearch-meilisearch-php)[google/gax

Google API Core for PHP

265103.1M454](/packages/google-gax)[google/common-protos

Google API Common Protos for PHP

173103.7M50](/packages/google-common-protos)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
