/promo-code/activate

Метод активирует промокод и начисляет игроку его награды. Один код активируется одним игроком не более одного раза.

Адрес метода

/promo-code/activate

Требует сессию пользователя

Параметры

Параметр Обязательный Тип Описание
code ДА string Промокод, как его ввел игрок. Регистр и окружающие пробелы значения не имеют

Результат

{
    "response": {
        "success": true,
        "code": "TESTCODE2"
    },
    "update": {
        "member": {
            "wallet": [],
            "options": {},
            "skills": []
        }
    },
    "events": [
        {
            "type": "reward",
            "payload": {
                "reasonType": "promo_code",
                "reasonId": "TESTCODE2",
                "rewards": [
                    { "type": "soft", "amount": 50 }
                ]
            }
        }
    ]
}

code

Код в каноническом виде, как он записан в конфиге, — не в том, как его ввел игрок.

Награды

Выданные награды приходят в секции events reward-событием с reasonType promo_code, как и у остальных источников наград в проекте; в теле ответа они не дублируются. Обновленные значения кошелька, опыта и фрагментов приходят в update.member.

Ошибки

Отказ — это успешный HTTP-ответ с success: false и идентификатором причины в поле error:

{
    "response": {
        "success": false,
        "error": "promo_code_expired"
    }
}
Ситуация error
Кода нет в конфиге версии, на которую закреплен игрок promo_code_not_found
Игрок уже активировал этот код promo_code_already_used
Срок действия кода истек promo_code_expired

Срок действия задается в конфиге колонкой validUntil и работает включительно: код с validUntil = 2026-08-29 действует весь день 29 августа и перестает работать на границе следующих игровых суток. Пустое значение означает бессрочный код. Граница считается по игровому времени пользователя, то есть учитывает сдвиг часов из /dev/time/shift.