Не нашли ответы на свои вопросы в наших публикациях? Задайте вопрос в службу техподдержки!
С версии 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
Назад в раздел
