История изменений
01.10.2026
Добавлено
- Добавлен метод /config/publish — CI загружает
.cdbпод именем ветки. Повтор тех же байт не увеличивает ревизию.activate=1делает версию активной,set_default=1назначает её версией по умолчанию этого сервера - Добавлен метод /config/archive — снимает версию ветки с выдачи. Версии по умолчанию это не касается; неизвестное имя — пустая операция
Изменено
/config/version, /auth/telegram и /auth/mobile принимают лейбл версии до 191 символа: это имя git-ветки, а не только короткий семвер- Метод /v2/gacha/chest/claim — получение награды за сундук прогресс-бара ивентовой гачи. Награда уходит клиенту событием
rewardсreasonType=gacha_chest_claim - В профиле у гачи с
chestProgressприходятevent_idиprogress(current,max,chests[]с состояниемlocked/available/claimed), см. объект пользователя - Необязательный параметр
event_idу /v2/gacha/spin/free и /v2/gacha/spin/token: если передан, должен совпадать с текущим запуском - Автовыдача несобранных сундуков ивентовой гачи после конца запуска: сервер выдаёт их при первом обращении игрока к гаче и присылает событием
rewardсreasonType=gacha_progress_auto_claimв /event/list - Коды ошибок
10080(гача не активна),10081(запуск не совпадает),10082(сундука нет),10083(сундук закрыт),10084(награда сундука уже выдана)
Изменено
- /arena/targets собирает список заново после каждой собственной атаки игрока (победа, поражение, выход, тайм-аут, брошенный бой, ответный бой) — от его места после боя. Раньше состав держался до суточной границы, и после пары побед над игроком оставались одни топы. Когда на игрока напали, его список не меняется; счётчик и цена обновлений (
next_refresh) после боя не сбрасываются - Окно
lifetime.scheduleбез дат (ниstartAt, ниendAt) больше не считается активным навсегда: гача остаётся скрытой, пока расписание не заполнено
30.09.2026
Изменено
- /rewarded-ad/claim-reward выдаёт награду сразу по запросу клиента, не дожидаясь LevelPlay S2S. Раньше claim без колбека отвечал
10405, а поздний/levelplayсам начислял и клал событие в/event/list - Callback
/levelplayбольше не выдаёт награду: проверяет подпись, пишет факт колбека на показ и логирует его для разбора
25.09.2026
Добавлено
- Поле
character_nameв объекте пользователя (и в ответе/auth/*) — имя персонажа, выбранное на арене. Приходит только после онбординга арены - Код ошибки
10066— имя занято другим игроком - Поле
name.one_alphabet_per_wordв /arena/info — включено ли правило имён «один алфавит на слово». Правило необязательное, по умолчанию выключено, выключатель — страница «Арена → Имена» в админке (там же стоп-слова и исключения фильтра). Dev-метод /dev/arena/names/one-alphabet-set
Изменено
- Имена на арене уникальны: занятым считается имя, которое выглядит так же, как чужое, — без учёта регистра,
ё/е, похожих букв кириллицы и латиницы и разделителей. Касается /arena/onboarding/complete и /arena/customization/set; случайные имена регистрации тоже уникальны, число в конце может стать трёх- или четырёхзначным. Совпадающие имена, выданные раньше, разведены миграцией: имя осталось у игрока, зарегистрированного раньше, остальные получили новое случайное - В имени допускаются только английские и русские буквы (
A–Z a–z А–Я а–я Ё ё), цифры, пробел и- _ . '. Раньше — буквы любого алфавита с диакритикой 10062больше не присылает полеreason: какое структурное правило сработало, клиенту не сообщается. К структурным (10062) перешли правила формата и серии цифр — раньше они приходили кодом10063- Правило «один алфавит на слово» больше не действует по умолчанию: буквы латиницы и кириллицы в одном слове можно смешивать. Включённое в админке, оно отказывает кодом
10062 10063присылает полеreason:profanity(фильтр ненормативной лексики) илиnot_allowed(прочие серверные правила)- /dev/arena/names/check отдаёт ещё
key(ключ уникальности имени) иtaken(занято ли имя другим игроком)
24.09.2026
Добавлено
- Добавлен метод /arena/onboarding/complete — завершение онбординга арены: сервер сам проверяет победу над Цукером в арене (уровень
onboarding.level_cid), применяет выбранные имя и скин и сажает игрока в группу. Идемпотентен - Онбординг арены: /arena/init регистрирует игрока, но в группу он садится только после победы над Цукером. До этого все экраны арены работают, а бой, ре-бой, обновление целей и клейм наград отбиваются кодом
10061; игрока нельзя найти как цель, его нет в чужих рейтингах, арена-дейлики ему не выдаются - Подсказки состояния:
arena_onboardedв объекте пользователя,arena.onboardedв объекте арены, блокиonboardingиnameв /arena/info - Коды ошибок
10061(онбординг не пройден),10062(имя: длина или символы, причина вreason),10063(имя не разрешено),10064(кулдаун смены имени, момент вavailable_at),10065(Цукер не побеждён) - Dev-методы онбординга: /dev/arena/onboarding/complete, /dev/arena/onboarding/reset, /dev/arena/onboarding/win, /dev/arena/onboarding/level-set; имён — /dev/arena/names/check, /dev/arena/names/pool-check, /dev/arena/name-cooldown/set
Изменено
- Имя на арене при регистрации — случайное из пула (латиница, прилагательное + существительное + число), а не имя из Telegram. Параметр
nameу /arena/init убран; присланный старым клиентом он не читается - /arena/customization/set проверяет имя по правилам имени (нормализация, длина в символах, алфавит, фильтр ненормативной лексики, резерв) и соблюдает кулдаун смены. Раньше принималась любая строка 1–50 символов
- /arena/ranking игрока без онбординга показывает группу, в которую он сядет, с ним на последнем месте; /arena/targets — пустой список; /arena/opponent для него отдаёт
null
Изменено
- Награда за баунти рефералки в /bounty/get и /batch/call приходит в событии
rewardсreasonType: referralвместоbounty_claim. Остальные баунти и пакеты, где рефералка смешана с другими баунти, по-прежнемуbounty_claim - /invites/apply/code отказывает, если у владельца кода уже
maxReferralCountприглашённых (commonConstants, по умолчанию 100): ошибка10405сdetails: Inviter has reached the referral limit. Раньше лимит держал только клиент, и сервер принимал 101-го и дальше
23.09.2026
Добавлено
- Добавлен метод /expedition/claim-all — забирает награды со всех завершённых экспедиций одним запросом. Награды приходят одним событием
expedition_claimсreasonId: all, одинаковые ресурсы просуммированы, забранные слоты перечислены вsources
Изменено
- /push/schedule не ставит уведомление повторно, если оно уже успешно ушло в текущие игровые сутки, и возвращает ошибку
Already sent today. Время в следующие сутки по-прежнему принимается - Нативный push на Android и iOS берёт заголовок из первой строки перевода текста уведомления, остальные строки уходят в текст сообщения. В Telegram по-прежнему уходит весь перевод. В админке список и заголовок страницы показывают имя пуша, поле названия на странице содержания убрано
22.09.2026
Добавлено
- Добавлен метод /member/language — сохраняет язык игры, на котором уходят нативные push-уведомления
- В метод /auth/mobile добавлен необязательный параметр language_code. Неизвестный тег игнорируется, авторизация при этом проходит
10.09.2026
Добавлено
- Добавлен метод /event/ack — подтверждение событий из /event/list по
eventId, одним вызовом на любой тип события. Закрывает и строку индекса, и флаг на исходной сущности; повторный вызов безопасен
Изменено
- Клиент подтверждает событие в момент показа игроку. События награды за рекламу (
reasonType=rewarded_ad) до этого не подтверждались ничем и приходили в/event/listпри каждом входе в игру
Удалено
- Удалён метод
/rewarded-ad/ack— его полностью заменяет /event/ack. Живых потребителей у метода не было - Методы /migration/ack, /invoice/ack и /compensation/ack остаются: они нужны там, где сущность приходит к клиенту не событием, а списком
08.09.2026
Добавлено
- Добавлен метод /dev/expedition/reset — возвращает экспедиции игрока в состояние начала суток: снимает блокировки приёмов, убирает слоты, обнуляет потраченные попытки реролла и стирает память о уже выпадавших экспедициях
Изменено
- Сброс сдвига игрового времени (/dev/time/reset) откатывает и таймстемпы экспедиций: момент применённого суточного сброса попыток и таймеры забега, запущенного под сдвигом. Раньше попытки не восстанавливались, пока реальное время не догонит сдвинутый момент
07.09.2026
Добавлено
- В слотах ответа группы /expedition появились поля base_rewards и bonus_rewards — награда предложения в формате
{ type, amount }. Базовая награда теперь зависит от полосы уровней, в которой предложение выпало, поэтому вывести её из шаблона экспедиции больше нельзя
Изменено
- Экспедиция выкатывается в два шага: тир выбирается по весам полосы уровней игрока (
expeditionLevelBands), экспедиция — равновероятно внутри тира. Раньше вес и диапазон уровней задавались у самой экспедиции - Количество параллельных слотов (max_slots) берётся из
expeditionLevelBands.slotCount. ЛистаexpeditionSlotUnlockи настроекminParallel/maxParallelбольше нет - Уже выпадавшие экспедиции не участвуют в новых ролах, пока память о них не сбросится: когда в тире не осталось невыпадавших, при переходе игрока в другую полосу уровней и раз в сутки вместе с попытками реролла. Одинаковых предложений в двух слотах одновременно не бывает
- Реролл заменяет предложение на другое того же тира — раньше той же сложности; при отсутствии замены метод отвечает
No other expedition of this tier is available
02.09.2026
Добавлено
- Добавлены методы /expedition/list, /expedition/start, /expedition/skip, /expedition/reroll и /expedition/claim — экспедиции: выдача доступных, запуск с назначенными приёмами, ускорение за хард, реролл списка и получение награды
- Все методы группы отвечают одним и тем же состоянием, что и /expedition/list; награда за клейм приходит одним событием в секции
eventsсreasonType: expedition_claim
Изменено
- Экспорт профиля игрока отдаёт секцию
expeditions— слоты экспедиций с назначенными приёмами и таймерами; импорт восстанавливает их вместе с блокировками приёмов. Раньше секция была только в сбросе, и загрузка чужого профиля оставляла слоты прежнего владельца
28.08.2026
Добавлено
- Добавлен метод /promo-code/activate — активация промокода с начислением наград
26.08.2026
Добавлено
- Добавлены методы /rewarded-ad/get-status и /rewarded-ad/claim-reward — статус и выдача награды за rewarded-рекламу (LevelPlay S2S)
- /rewarded-ad/get-status отдаёт
availableAt— когда следующий просмотр доступен (кулдаун CDBcooldownили дневной сброс) — иserver_time - LevelPlay S2S callback на сервисе rtdn:
GET/POST /levelplay(тело{EVENT_ID}:OK; ошибка — HTTP 400, телоerror)
Изменено
- Методы /dev/invite/add/random и /dev/invite/add/self выбирают игрока из 50 последних подходящих, а не из всей таблицы игроков
- В методе /dev/invite/add/random условие «прошел хотя бы один уровень» стало предпочтением: если такого игрока в выборке нет, выбирается любой подходящий вместо ошибки
Member not found
20.08.2026
Изменено
- Метод /bounty/ready снова ограничен по частоте — не более 4 вызовов в секунду на пользователя. Ограничение было потеряно при переименовании метода из
checkвready - Метод /bounty/get выдаёт награду ровно один раз: из двух одновременных запросов один получает награду, второй — ошибку «Bounty already received». Раньше оба могли пройти проверку и выдать награду дважды
Удалено
- Из элементов списка метода /invites/list убрано поле levels — прогресс приглашенного пользователя в этом ответе не возвращается
05.08.2026
Добавлено
- Добавлены методы /rewards/daily/status, /rewards/daily/claim и /rewards/daily/available — календарь наград за вход
- Добавлен объект daily_reward_calendar
Изменено
- Если для нового месяца не сконфигурирован standard-календарь наград за вход, сервер автоматически копирует конфиг последнего закончившегося календаря в новый
calendar_idна текущий месяц — раньше фича в этом случае просто пропадала
20.07.2026
Удалено
- Удалены устаревшие dev-методы
/dev/activity/skiptimeи/dev/gacha/skiptime
06.07.2026
Изменено
- Dev-методы управления рефералами по
member_idзаменены на методы без параметров: /dev/invite/add/random, /dev/invite/add/self, /dev/invite/delete/self и /dev/invite/delete/all - Dev-методы удаления реферальных связей сбрасывают связанные referral bounty-состояния через soft delete
18.06.2026
Изменено
- В
update.memberметодов /level/complete и /dev/level/complete добавлена секция gacha, чтобы клиент получал актуальный список доступных гач после изменения прогресса уровней
17.06.2026
Добавлено
- Добавлен метод /dev/energy/tier/reset — сброс шага покупки энергии текущего пользователя на первый тир
- В объект member.options добавлено поле energy_tier_reset_at — время следующего сброса шага покупки энергии
05.06.2026
Добавлено
- В метод /auth/mobile добавлен необязательный параметр push_token для сохранения токена устройства (FCM / APNs) при авторизации
20.05.2026
Добавлено
- Добавлены методы /dev/currencies/set и /dev/currencies/refill для установки и пополнения нескольких валют одним запросом
Изменено
- Методы /dev/currency/set и /dev/currency/refill оставлены для обратной совместимости и скоро перестанут использоваться
15.05.2026
Добавлено
- Добавлен метод /feature/variant/set для сохранения варианта фичи у игрока
- Добавлена таблица
member_feature_variant; для существующих игроков создаётся вариантtutorial = long - В объект member добавлено поле feature_variants
06.05.2026
Добавлено
- В ответ метода /level/complete добавлено поле rewards со списком фактически выданных наград
20.04.2026
Добавлено
- Добавлен метод /batch/call — пакетный вызов одного метода в одном запросе, с текущей поддержкой
/bounty/get
10.04.2026
Добавлено
- Добавлен метод /activity/break — деактивация фоновой активности со сбором накоплений
04.04.2026
Добавлено
- Добавлен метод /battler/combo — сохранение лучшего combo игрока
- Добавлен метод /member/statistics — получение статистики игрока
- Добавлена таблица
member_statsдля хранения лучшего combo игрока - Добавлены серверные конфиг-таблицы
skill_parameters_progressionиskill_battler_calculatorдля расчета силы умения - В таблицу
levelдобавлено полеmode, импортируемое из страницgameMap,specialLevelsиtutorialConfig
31.03.2026
Добавлено
- Добавлен метод /invites/get/code — получение реферального кода пользователя
- Добавлен метод /invites/apply/code — применение реферального кода другого пользователя
- В объект member добавлено поле inviter
Изменено
- Метод /invites/list теперь обновляет статусы реферальных bounty и возвращает обновление объекта member
27.03.2026
Добавлено
- Добавлен метод /activity/upgrade — улучшение (открытие) фоновой активности
- Добавлен метод /activity/upgrade/skip — завершение улучшения фоновой активности
- Добавлен метод /activity/upgrade/confirm — подтверждение завершения улучшения фоновой активности
- Добавлен метод /rewards/grant/missed для выдачи пропущенных наград указанного типа за уже пройденные уровни
- Добавлен метод /dev/player/level/up — повышение уровня игрока на 1
- Добавлен метод /dev/member/shared/get — список
shared_профилей для импорта - Добавлен метод /dev/member/shared/load — загрузка
shared_профиля в текущего пользователя
Изменено
- В объект activity добавлены поля level, upgrading, upgrade_at, upgraded
25.03.2026
Добавлено
- Реализована авторизация iOS Guest (
type: 2) в методе /auth/mobile - В объект member добавлено поле ios_guest_id
- В метод /dev/unlink добавлен тип
5- iOS - Поддержка iOS Guest ID в фильтрах и отображении административной панели
19.03.2026
Добавлено
- Поддержка пороговой стоимости улучшения приемов.
Изменено
- Определение максимального уровня приема (переделана завязка со звездности на уровень игрока).
26.02.2026
Добавлено
- В методы /auth/telegram и /auth/mobile добавлены необязательные параметры device context:
app_platform,distribution,app_version - В метод /auth/mobile дополнительно добавлены параметры device context:
os_version,device_modelи параметры AppsFlyer attribution:appsflyer_id,media_source,campaign,adset,ad,gaid - Attribution-данные сохраняются однократно — повторные авторизации не перезаписывают уже сохранённые значения
19.02.2026
Добавлено
- Ограничение на одну активную сессию на пользователя — при повторной авторизации предыдущая сессия становится невалидной
- Добавлена ошибка 10450
Session replaced— возвращается при использовании токена замененной сессии, содержит поле reason со значениемsession_replaced
13.02.2026
Добавлено
- Добавлен метод /invites/get/link — получение реферальной ссылки
- В сессию добавлены поля auth_type и auth_id для отслеживания типа авторизации
Изменено
- Добавлена проверка whitelist на уровне авторизации в методах /auth/telegram и /auth/mobile
10.02.2026
Добавлено
- Добавлен метод /auth/mobile — авторизация через мобильное приложение
- Добавлена группа методов /link для привязки внешних аккаунтов:
- /link/mobile — привязка внешнего аккаунта
- /link/code/generate — генерация кода для миграции аккаунта
- /link/code/apply — применение кода миграции
- Добавлен административный метод /dev/unlink — отвязка внешнего аккаунта (Telegram, Android, Google)
- Добавлен метод /member/delete — запрос на удаление аккаунта
- Добавлен метод /member/delete/cancel — отмена удаления аккаунта
Изменено
- В метод /invoice/create добавлен необязательный параметр platform (
telegramилиandroid) - В метод /invoice/status добавлены параметры platform и purchase_token для поддержки Android
02.02.2026
Добавлено
- Добавлен метод /dev/invite/add
- Добавлен метод /dev/invite/delete
- В объект member добавлено поле invites
30.01.2026
Добавлено
- В метод /bounty/ready добавлен необязательный параметр member_id
29.01.2026
Добавлено
- В методы /invoice/create, /product/buy добавлен необязательный параметр tag
27.01.2026
Добавлено
- Добавлен метод /invites/list
- В метод /bounty/get добавлен параметр member_id
- В объект bounty добавлено поле bounty_key
21.01.2026
Добавлено
- Добавлен метод /dev/currency/set
- Добавлен метод /dev/currency/withdraw
25.12.2025
Добавлено
- Добавлен метод /invoice/report
- Добавлено объект invoice_report
23.12.2025
Изменено
- Метод /dev/reward/check переименован в /dev/bounty/check
- Метод /reward/ready переименован в /bounty/ready
- Метод /reward/get переименован в /bounty/get
- Объект reward переименован в bounty
14.12.2025
Добавлено
- Добавлен метод /dev/reward/check
- Добавлен метод /dev/attempts/reset
- В объект level добавлено поле attempts
- Добавлена проверка условий главы при старте уровня из этой главы
- Добавлено увеличение количества попыток прохождения в уровнях, где количество попыток ограничено
Изменено
- Параметр reward_id в методе /reward/ready переименован в reward_ids
- Параметр push_id в методе /push/cancel переименован в push_ids
- Изменен тип параметра push_id в методе /push/schedule
10.12.2025
Добавлено
- В метод /push/schedule добавлен параметр delay
Изменено
- Изменен тип параметра push_id в методах /push/schedule, /push/cancel
09.12.2025
Добавлено
- Добавлен объект push
- Добавлен метод /push/list
03.12.2025
Добавлено
- Добавлен метод /dev/jmes/query
24.11.2025
Добавлено
- Добавлен метод /dev/level/complete
- Добавлен метод /dev/fragments/add
- Добавлен метод /reward/ready
13.11.2025
Добавлено
- В метод /level/continue добавлен обязательный параметр level_id
12.11.2025
Добавлено
- Добавлен метод /dev/member/delete
10.11.2025
Добавлено
- В метод /level/complete добавлен параметр result
- В объект member добавлен список rewards
- Добавлен объект reward
- Добавлен метод /reward/get
- Добавлен метод /push/schedule
- Добавлен метод /push/cancel
Изменено
- Метод /member/reset перенесен в группу методов для разработчиков - /dev/member/reset
- Метод /currency/refill перенесен в группу методов для разработчиков - /dev/currency/refill
24.10.2025
Добавлено
- В объект member.options добавлены поля: energy_regeneration, energy_capacity, energy_current_tier
- Добавлено метод /energy/buy
15.10.2025
Добавлено
- В объект spin добавлено поле: synthsphere
- В объект member добавлено поле: triggers
- Добавлен объект trigger
- Добавлен методы /trigger/set
- Добавлен метод /trigger/add
08.10.2025
Добавлено
- Добавлен метод /level/continue
07.10.2025
Исправлено
- Добавлена проверка энергии игрока при старте уровня
Добавлено
- В объект member добавлено дублирующее поле created_at
- В объект member добавлено поле is_premium
- В объект activity добавлены поля launch_at (дублирует launch), reward_at
- В объект member.gacha добавлены дублирующие поля spin_at, spin_free_at
- В объект member.options добавлено поле energy_at
- В метод /activity/collect добавлен параметр activity_id
06.10.2025
Изменено
- Улучшение умения теперь списывает количество фрагментов в соответствии с конфигом priceStarsLevelProgression
- Можно начать(а после - завершить) уровень, если он не привязан ни к одной из глав
- Убрана награда и увеличение уровня игрока после завершения игрового уровня
- Экипирование умения в занятый слот теперь сначала освобождает этот слот
Добавлено
- Добавлено поле community в объект member
- Добавлены поля exp, levelup в объект member.options
- Добавлен метод /member/levelup
- Добавлен метод /activity/collect
- Добавлен метод /product/buy
- Добавлен метод /slot/set
01.10.2025
Изменено
- Поле score в объекте level удалено
- Объект reward в ответе метода /level/complete удален
Добавлено
- Добавлен расчет звезды завершения уровня в соответствии с конфигом gameLevelReward
- Добавлена проверка опыта игрока и увеличение уровня с начислением награды в соответствии с конфигом playerExpProgression
- Добавлено начисление synthSphere в Гача-автомате, в случае если умение игрока имеет максимально-допустимое количество фрагментов
- Добавлен объект options в объект member
30.09.2025
Изменено
- Параметр score в методе /level/complete разделен на два - hp, steps
- Метод /auth/telegram теперь авторизует и регистрирует новых пользователей. Авторизация тестового пользователя описана на странице метода
Добавлено
- Добавлен метод /member/reset, который позволяет сбросить профиль пользователя
- Добавлено списание валюты при улучшении умения игрока (метод /skill/levelup), в соответствии с конфигом priceSkillLevelProgression
- Добавлено начисление в фоновых активностях в соответствии с конфигом afkActivity
- Добавлено начисление награды и объект reward в методе /level/complete за завершение уровня, в соответствии с конфигом gameLevelReward
24.09.2025
Изменено
- Поле status в объекте activity переименовано в active
Добавлено
- Добавлены поля chapter_id, chapter_cid в объект level
- Добавлено восстановление энергии пользователя
- Добавлены значения и записи пользователя по умолчанию (валюты, умения, слоты) - данные тестового пользователя сброшены
- Добавлено списание энергии, при старте уровня, с баланса пользователя, в соответствии с конфигом energySettings.costPerGameLevel
22.09.2025
Изменено
- Методы /skill/equip и /skill/uneqip перенесены в другую группу - /slot/equip, /slot/uneqip
- Поле status в объекте level разделено на два - active, complete
Добавлено
- Добавлен объект spin
- Добавлен метод /gacha/spin/free
- Добавлен метод /gacha/spin/token
- Добавлено поле ref_code в объект member
- Добавлено поле available в объект member.slots
- Добавлена проверка доступности слота в методе /slot/equip
- Добавлено списание фрагментов при улучшении умения
- Добавлена проверка прогресса игрока по уровням, чтобы исключить пропуск незавершенных уровней
- Добавлен параметр filter в метод /member/info
- Добавлен корневой элемент update в ответе api
- Добавлен параметр ref_code в метод /auth/telegram