История изменений

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 — когда следующий просмотр доступен (кулдаун CDB cooldown или дневной сброс) — и 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

Добавлено

Изменено

  • Если для нового месяца не сконфигурирован standard-календарь наград за вход, сервер автоматически копирует конфиг последнего закончившегося календаря в новый calendar_id на текущий месяц — раньше фича в этом случае просто пропадала

20.07.2026

Удалено

  • Удалены устаревшие dev-методы /dev/activity/skiptime и /dev/gacha/skiptime

06.07.2026

Изменено

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/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 для привязки внешних аккаунтов:
  • Добавлен административный метод /dev/unlink — отвязка внешнего аккаунта (Telegram, Android, Google)
  • Добавлен метод /member/delete — запрос на удаление аккаунта
  • Добавлен метод /member/delete/cancel — отмена удаления аккаунта

Изменено

  • В метод /invoice/create добавлен необязательный параметр platform (telegram или android)
  • В метод /invoice/status добавлены параметры platform и purchase_token для поддержки Android

02.02.2026

Добавлено

30.01.2026

Добавлено

  • В метод /bounty/ready добавлен необязательный параметр member_id

29.01.2026

Добавлено

27.01.2026

Добавлено

  • Добавлен метод /invites/list
  • В метод /bounty/get добавлен параметр member_id
  • В объект bounty добавлено поле bounty_key

21.01.2026

Добавлено

25.12.2025

Добавлено

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

Изменено

09.12.2025

Добавлено

  • Добавлен объект push
  • Добавлен метод /push/list

03.12.2025

Добавлено

24.11.2025

Добавлено

13.11.2025

Добавлено

  • В метод /level/continue добавлен обязательный параметр level_id

12.11.2025

Добавлено

10.11.2025

Добавлено

Изменено

  • Метод /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

Добавлено

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
  • Можно начать(а после - завершить) уровень, если он не привязан ни к одной из глав
  • Убрана награда и увеличение уровня игрока после завершения игрового уровня
  • Экипирование умения в занятый слот теперь сначала освобождает этот слот

Добавлено

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