Не нашли ответы на свои вопросы в наших публикациях? Задайте вопрос в службу техподдержки!
С версии 3.9 модуля бонусов появился публичный REST API модуля бонусов для сознания внешних интеграций с бонусной системой и счетами покупателей.
Включить и протестировать методы REST API модуля можно в настройках:

Входная точка запросов (Endpoint)
/bitrix/tools/acrit.bonus/public_api.php
Авторизация
Доступ к Public API выполняется по токену из настроек модуля (Держите его в секрете!).
Header
X-Acrit-Bonus-Token: <token>
Content-Type: application/x-www-form-urlencoded
Формат запроса
Все запросы отправляются методом POST.
Параметры передаются в Body как обычные POST-поля.
Формат ответа
Успешный ответ:
{
"success": true,
"data": {},
"error": null,
"meta": {
"timestamp": "2026-03-25T13:40:00+00:00",
"method": "user.get"
}
}
Ответ с ошибкой:
{
"success": false,
"data": null,
"error": {
"code": "ERROR_CODE",
"message": "Текст ошибки"
},
"meta": {
"timestamp": "2026-03-25T13:40:00+00:00",
"method": "user.get"
}
}
Встроенный тестер
Во вкладке Public API в настройках модуля доступен встроенный блок «Протестировать API».
Что умеет тестер:
- автоматически использует текущий endpoint модуля;
- отправляет запросы с заголовком
X-Acrit-Bonus-Token; - показывает только поля, нужные для выбранного метода;
- выводит «Ответ JSON».
Логирование API
Во вкладке Public API доступна настройка «Вести логи API».
Если опция включена, по умолчанию модуль пишет лог в файл (можно указать свой путь):
#DOCUMENT_ROOT#/bitrix/modules/acrit_bonus_api.log
В лог попадает:
- дата и время;
- метод API;
- HTTP-статус;
- код ошибки, если он есть.
Входные параметры, токен авторизации и полный JSON-ответ в лог не записываются.
Методы Public API
1. user.get
Поиск пользователя Bitrix по login, email, xml_id или по нескольким параметрам сразу.
Поиск выполняется по точному значению полей, без поиска по части строки.
Header
X-Acrit-Bonus-Token: <token>
Content-Type: application/x-www-form-urlencoded
Body
Поиск по login:
method=user.get&login=test_user
Поиск по email:
method=user.get&email=user@example.com
Поиск по внешнему идентификатору:
method=user.get&xml_id=15%7Ctest_user%7CИван
Поиск по нескольким полям:
method=user.get&login=test_user&email=user@example.com&xml_id=15%7Ctest_user%7CИван
Параметры
login— логин пользователяemail— email пользователяxml_id— внешний идентификатор пользователя из поляb_user.XML_ID
Возвращает в data
{
"id": 15,
"login": "test_user",
"email": "user@example.com",
"name": "Иван",
"last_name": "Иванов",
"second_name": "Иванович",
"active": "Y",
"date_register": "2026-03-01T10:12:00+03:00",
"xml_id": "15|test_user|Иван"
}
Если ни login, ни email, ни xml_id не переданы, возвращается ошибка.
Если пользователь не найден, возвращается ошибка.
Если найдено несколько пользователей, возвращается ошибка неоднозначности.
2. account.get
Получить бонусный счёт пользователя.
Header
X-Acrit-Bonus-Token: <token>
Content-Type: application/x-www-form-urlencoded
Body
По account_id:
method=account.get&user_id=15&account_id=1
По site_id:
method=account.get&user_id=15&site_id=s1
Параметры
user_id— ID пользователяaccount_id— ID бонусного счёта системыsite_id— ID сайта, если счёт нужно определить по сайту
3. account.create
Создать бонусный счёт пользователя или вернуть уже существующий.
Header
X-Acrit-Bonus-Token: <token>
Content-Type: application/x-www-form-urlencoded
Body
По site_id:
method=account.create&user_id=15&site_id=s1
По account_id:
method=account.create&user_id=15&account_id=1
Параметры
user_id— ID пользователяaccount_id— ID бонусного счёта системыsite_id— ID сайта, если счёт нужно определить по сайту
4. accounts.get
Получить список бонусных счетов по фильтру
Header
X-Acrit-Bonus-Token: <token>
Content-Type: application/x-www-form-urlencoded
Body
Базовый запрос:
method=accounts.get&user_id=15&limit=20&offset=0&sort=ID&order=ASC
Запрос с фильтрами:
method=accounts.get&user_id=15&site_id=s1&active=Y
Параметры
user_id— ID пользователя (не обязательно, для получения всех счетов не указывать)limit— количество записей, по умолчанию50, максимум100offset— смещение, по умолчанию0sort— поле сортировки:ID,ACCOUNT_ID,TIMESTAMP_X,BALANCEorder— направление сортировки:ASCилиDESCsite_id— необязательный фильтр по сайту бонусного счётаactive— необязательный фильтр активности бонусного счёта:YилиN
Возвращает в data
{
"total": 2,
"limit": 50,
"offset": 0,
"items": [
{
"id": 10,
"user_id": 15,
"user_xml_id": "15|test_user|Иван",
"account_id": 1,
"balance": 150.5,
"account_name": "Основной бонусный счет",
"site_id": "s1",
"active": "Y",
"timestamp_x": "2026-03-01T10:12:00+03:00",
"notes": ""
}
]
}
Если у пользователя нет счетов, метод возвращает пустой список без ошибки:
{
"total": 0,
"limit": 50,
"offset": 0,
"items": []
}
5. transactions.get
Получить список транзакций пользователя.
Header
X-Acrit-Bonus-Token: <token>
Content-Type: application/x-www-form-urlencoded
Body
method=transactions.get&user_id=15&account_id=1&limit=20&offset=0&sort=TIMESTAMP_X&order=DESC&date_from=2026-03-01&date_to=2026-03-31
Параметры
user_id— ID пользователяaccount_id— ID бонусного счёта системыlimit— количество записей, максимум100offset— смещениеsort— поле сортировки:ID,TIMESTAMP_X,VALUE,ACTIVE_FROM,ACTIVE_TOorder— направление сортировки:ASCилиDESCdate_from— дата начала периодаdate_to— дата конца периода
Для обратной совместимости также поддерживается старый формат, когда в sort передавалось только направление сортировки (ASC или DESC).
6. account.update
Изменить баланс счёта пользователя.
Header
X-Acrit-Bonus-Token: <token>
Content-Type: application/x-www-form-urlencoded
Body
Начисление:
method=account.update&user_id=15&account_id=1&mode=delta&value=150&description=Начисление из 1С&operation_id=ERP-20260325-001
Списание:
method=account.update&user_id=15&account_id=1&mode=delta&value=-50&description=Списание на кассе&operation_id=POS-20260325-010
Установка точного баланса:
method=account.update&user_id=15&account_id=1&mode=set&value=500&description=Синхронизация остатка&operation_id=ERP-BALANCE-20260325-001
Параметры
user_id— ID пользователяaccount_id— ID бонусного счёта системыmode— обязательный режим:deltaилиsetvalue— число для операцииdescription— комментарий к операцииoperation_id— обязательный уникальный ID операции, обеспечивающий идемпотентностьexternal_id— совместимый псевдонимoperation_idдля старых интеграций
Коды ошибок
Примеры возможных ошибок:
UNAUTHORIZED— неверный или отсутствующий токенAPI_DISABLED— Public API выключен в настройкахMETHOD_REQUIRED— не передан параметрmethodMETHOD_NOT_FOUND— неизвестный метод APIUSER_LOOKUP_FIELDS_REQUIRED— дляuser.getне переданыlogin,emailиxml_idUSER_NOT_FOUND— пользователь не найденUSER_LOOKUP_AMBIGUOUS— найдено несколько пользователейACCOUNT_ENTITY_NOT_FOUND— не найден бонусный счёт системыACCOUNT_NOT_FOUND— не найден бонусный счёт пользователяOPERATION_ID_REQUIRED— дляaccount.updateне переданoperation_idили его псевдонимexternal_idVALUE_INVALID— некорректное значениеvalueINSUFFICIENT_FUNDS— недостаточно бонусов для списания
Рекомендуемый сценарий интеграции
- Найти пользователя через
user.getпоlogin,emailилиxml_idи получить егоUSER_ID - Создать пользовательский бонусный счёт через
account.create - Получить список счетов через
accounts.get - Проверить текущий баланс через
account.get - Начислять и списывать бонусы через
account.update - Получать историю операций через
transactions.get
Назад в раздел
