gamification.transaction.create
Scope:
gamificationКто может вызывать: Только admin или manager; параметр
date— только администратор портала. Подробнее: Права доступа
Создать транзакцию начисления или списания для одного или нескольких пользователей.
HTTP: POST
Побочные эффекты: создаётся одна или несколько транзакций в истории баланса; для accrualType=grat с categoryId — пост в ленте; сбрасывается кеш дашбордов.
Параметр date записывает операцию в прошлое: дата операции (TRANSACT_DATE) и отметка изменения (TIMESTAMP_X) становятся равны переданной. По этой дате операция попадает в историю баланса, в месяцы дашбордов и в месячный лимит благодарностей. Будущая дата не принимается. Пост в ленте для grat публикуется текущим моментом.
Параметры метода
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
userId |
int |
да* | ID одного пользователя |
userIds |
int[] |
да* | Массив ID пользователей (приоритет перед userId) |
amount |
float |
да | Сумма операции |
currency |
string |
да | Валюта: BAL или THX |
operationType |
string |
да | Тип операции: accrual или debit (псевдоним: operation) |
accrualType |
string |
да | Тип начисления (код из справочника начислений модуля) |
description |
string |
нет | Описание транзакции |
categoryId |
int |
нет | ID категории благодарности (для accrualType=grat — пост в ленте) |
date |
string |
нет | Только администратор портала. Дата операции в прошлом: Y-m-d, Y-m-d H:i[:s], ISO 8601 со смещением (2026-05-14T10:00:00+03:00) или в UTC (2026-05-14T07:00:00Z), d.m.Y, d.m.Y H:i[:s] или unix-время. Не позже текущего момента. По умолчанию — момент вызова |
Часовой пояс date. Строка со смещением (+03:00) или Z переводится в часовой пояс сервера; строка без смещения (2026-05-14 10:00:00, 14.05.2026) считается временем сервера. transactDate в ответе и TRANSACT_DATE в истории — во времени сервера: 2026-05-14T07:00:00Z на сервере с поясом Москвы даст 2026-05-14 10:00:00.
* Требуется хотя бы один из: userId или userIds.
Возвращаемые данные
result.result:
| Поле | Тип | Описание |
|---|---|---|
items |
array |
Созданные операции, по одной на пользователя: userId, currency, amount, operationType, transactionId, balance (баланс после операции), transactDate (Y-m-d H:i:s во времени сервера, только если передан date) |
count |
int |
Количество созданных операций |
Обработка ошибок
| Код | Описание |
|---|---|
UNAUTHORIZED |
Пользователь не авторизован |
ACCESS_DENIED |
Вызывающий не является admin/manager; date передал не администратор портала |
VALIDATION_ERROR |
Отсутствует обязательный параметр; date не распознана или в будущем (details.field = date) |
USER_NOT_FOUND |
Пользователь не найден |
INVALID_CURRENCY |
Неизвестная валюта |
INVALID_OPERATION |
Неизвестный тип операции |
INVALID_ACCRUAL_TYPE |
Неизвестный тип начисления |
INSUFFICIENT_BALANCE |
Недостаточно баланса для списания |
Пример запроса (POST)
curl -X POST "https://{портал}/rest/{user_id}/{webhook_code}/gamification.transaction.create.json" \
-H "Content-Type: application/json" \
-d '{
"userId": 42,
"amount": 100,
"currency": "BAL",
"operationType": "accrual",
"accrualType": "manual",
"description": "Награда за проект",
"date": "2026-05-14 10:00:00"
}'
Пример ответа:
{
"result": {
"result": {
"items": [
{
"userId": 42,
"currency": "BAL",
"amount": 100,
"operationType": "accrual",
"transactionId": 9060,
"balance": 1350,
"transactDate": "2026-05-14 10:00:00"
}
],
"count": 1
},
"total": null,
"next": null,
"error": null
}
}