Перейти к основному содержимому

Журнал изменений

У каждого изменения публичного API есть запись с датой. Новое появляется в /api/v1; несовместимое изменение вышло бы как /api/v2, а v1 работал бы ещё какое-то время для перехода. Glitchmug пока не запущен: до открытой беты v1 может меняться — несовместимые изменения помечены Несовместимо.

2026-10-30​

  • Очки и медали: GET /games/{slug}/leaderboard (period=month|all, в viewer строка вошедшего пользователя) и GET /users/{username}/points. Считаются раз в сутки; три первых места в игре на конец месяца, от 100 очков, получают постоянную медаль.
  • Клиентские ключи для мод-менеджеров: X-Glitchmug-Client в GET /files/{id}/download снимает ограничение скорости для гостей.
  • Звуковые моды сами выбирают превью: мод в категории «Звуки» (или ниже), у которого нет аудио-превью, получает самый длинный найденный звук, в GET /mods/{id}/audio-previews он помечен auto: true. Один раз на мод: удалённый автовыбор не возвращается, а загрузка или выбор звука вручную выключают автовыбор для мода. Переименование превью ставит auto в false.

2026-10-29​

  • Несколько аудио-превью (до 8 на мод): POST /mods/{id}/audio-preview теперь добавляет, а не заменяет, 409, если их уже 8. GET /mods/{id}/audio-previews — все по порядку со статусом и errorCode (владелец или maintainer), PUT /mods/{id}/audio-previews/order меняет порядок ({ ids }), PATCH /mods/{id}/audio-previews/{previewId} задаёт label (до 60 символов), DELETE удаляет, GET …/{previewId}/file отдаёт файл. POST /mods/{id}/audio-preview/candidates/use-all добавляет все найденные звуки, сколько поместится. В карточках и карточке мода появилось audioPreviews: [{ id, url, durationMs, label }]; audioPreview остаётся и равен первому. Одинаковые звуки из разных файлов в кандидатах показываются один раз.
  • Скачивание: GET /files/{id}/download отвечает 302 на подписанную ссылку на dl.glitchmug.com (6 часов) — файлы больше не идут через Cloudflare. Включите следование редиректам.
  • Аудио-превью: один короткий фрагмент на мод. POST /mods/{id}/audio-preview (multipart/form-data, поле file: mp3, ogg, opus, wav, flac или m4a, до 10 МБ и 30 секунд; владелец или соавтор-maintainer; 20 в сутки на пользователя, 429 audio_preview_rate_limited) отвечает 202; задача переводит файл в Ogg Opus, а GET /mods/{id}/audio-preview/state показывает processing, ready или failed (errorCode: no_audio, too_long, unreadable, encode_failed). GET /mods/{id}/audio-preview отдаёт файл audio/ogg (Range поддерживается), DELETE удаляет. В карточках модов и в карточке мода появилось audioPreview: { url, durationMs }, null, пока превью не готово. 415 для других типов файлов, 413 при размере больше 10 МБ.
  • Аудио-превью из ваших файлов: после проверки файла задача ищет в нём звуки: обычные mp3, ogg, opus, wav, flac и m4a и звуки внутри паков Valve VPK (.vpk, v1 и v2, в том числе многотомные _dir.vpk + _NNN.vpk; .wav/.mp3 Source 1 и .vsnd_c Source 2 с данными PCM, MP3 или ADPCM). Из них готовится до 5 кандидатов (не длиннее 30 секунд, сначала самые длинные) в Ogg Opus. GET /mods/{id}/audio-preview/candidates (владелец или соавтор-maintainer) отдаёт список { id, sourcePath, durationMs, url }, GET …/candidates/{candidateId}/file проигрывает кандидата, а POST …/candidates/{candidateId}/use делает его аудио-превью мода (заменяя текущее). Кандидаты удаляются, когда удалён их файл (раз в час; в списке пропадают сразу), когда выбран один из них или загружено другое превью.
  • Ключи API: GET /me/api-keys/{id}/stats?days=30 — запросы по дням UTC (всего и с ответами 4xx/5xx) и самые частые маршруты; считается каждый запрос с ключом, включая отклонённые лимитом. Хранится 30 дней.
  • Загрузки: вместо 10 загрузок в час теперь ограничен объём за 24 часа (по умолчанию 5 ГБ у автора и 20 ГБ у проверенного, настраивается в админке). Сверх лимита POST …/uploads отвечает 429 upload_volume_exceeded с limitBytes и usedBytes. Защита от потока мелких файлов — 100 загрузок в час (upload_rate_limited).
  • Шаблоны загрузки: GET/POST /me/mod-templates, PATCH/DELETE /me/mod-templates/{id}. Личный набор полей мода (game, category, tags, isNsfw, isWip, updatesNotPlanned, license с примечанием, aiUsage, credits, при желании description) под названием до 60 символов; сайт применяет его при создании нового мода. Не больше 10 на человека (409 too_many_templates); PATCH переименовывает и/или заменяет data; чужой шаблон — 404. У шаблона 12-символьный публичный id; на моды он не влияет, пока вы его не примените.

2026-10-28​

  • Моды: updatesNotPlanned (boolean, по умолчанию false) в карточке мода, POST /mods и PATCH /mods/{id}. Автор не планирует регулярные обновления; мод может продолжать работать. Это отдельный признак от isObsolete, он не влияет на скачивание, публикацию и порядок в каталоге: переключение не двигает мод в sort=updated.

  • POST /mods/assist: черновик от ИИ (название, краткое описание, описание в Markdown, факты для проверки) по ответам автора; 10 в сутки на пользователя. Ничего не сохраняется; 503 assist_unavailable, когда ИИ выключен.

  • PATCH /mods/{id} поднимает мод в sort=updated только при реальном изменении содержимого (повторная отправка тех же значений — нет).

  • Гайды: вики-страницы по играм в Markdown. GET /games/{game}/guides (опубликованные, фильтр locale), GET/PATCH /games/{game}/guides/{slug}, POST /games/{game}/guides (10 в сутки; черновик, если нет права guide:publish), публичная история в /revisions и POST …/revert (guide:edit), POST …/hide и /unhide (guide:hide, журнал модерации). Новые права guide:create, guide:publish, guide:edit, guide:hide; guide — тип цели в журнале модерации. См. Гайды.

  • Несовместимо: id мода или коллекции теперь числовой (число, например 1042) везде: карточки модов, коллекции, лента, уведомления, отзывы, жалобы, DMCA, подписки, pinnedMods, modId у версий и объекты mod в вебхуках. Отдельное поле num убрано. У пользователей, комментариев, файлов, версий, отзывов и картинок остаются 12-символьные public id.

  • Входные параметры, принимающие мод или коллекцию (пути, modId, targetId жалоб и подписок, pinnedMods, order коллекции, withhold в DMCA, ownerId картинки), принимают числовой id; старый public id по-прежнему принимается для старых ссылок.

2026-10-27​

  • Адреса на сайте — по числовому id: моды — /mods/{num}/{slug}, коллекции — /collections/{num}; старые ссылки по public id постоянно перенаправляются. Slug мода короче (не больше 6 слов / 50 символов, повторы слов убраны).
  • Любой путь /mods/{id}… и /collections/{id}… (и /collections/{id}/items/{modId}) принимает и числовой id, и public id. id по-прежнему public id.
  • Карточки модов, коллекции, коллекции в ленте, ссылки на мод в уведомлениях и отзывах получили num (числовой id) и path (канонический путь на сайте без префикса языка, например /mods/1042/neon-haze-skin). В вебхуках у mod появился num, url — в новом виде.

2026-10-26​

  • Лента: GET /feed (filter = all, authors, games, mods): новые моды и версии, коллекции и отзывы из ваших подписок, сначала новые. GET /users/{username}/activity: публичная активность одного человека.
  • Стена профиля: GET/POST /users/{username}/wall (2 уровня, Markdown без картинок, 3 записи в сутки на одну стену; ответ говорит canPost и почему нельзя), PATCH/DELETE /wall/{id} (правка 15 минут), POST /wall/{id}/hide и /unhide (владелец стены — без правила, модераторы — с правилом). PATCH /me принимает wallMode (all, followers, closed); /me/wall/bans — список, бан и снятие бана. В профилях появился wallCount, у жалоб — цель wall_post.
  • Бейджи: GET /users/{username}/badges, GET /me/badges (все бейджи с вашим прогрессом). Автоматические бейджи выдаются раз в сутки и не снимаются, если числа упали. PATCH /me принимает shownBadges (до 3 полученных) и frame (полученный бейдж, открывающий рамку аватара). В профилях появились badges и badgesCount, во всех ссылках на пользователя (author, авторы комментариев) — frame.
  • Отзывы: GET /mods/{id}/reviews (sort = helpful, new, negative), GET /users/{username}/reviews, GET /mods/{id}/reviews/me, PUT/DELETE /mods/{id}/review (рекомендую или нет + 20–2000 символов; только после скачивания мода, один на человека, не на свой мод), PUT/DELETE /reviews/{id}/reply (ответ автора мода), POST/DELETE /reviews/{id}/helpful. В карточках модов появились reviewsCount и recommendPercent (null, пока отзывов меньше 5), в профилях — recommendPercent. Новая сортировка sort=best в GET /mods, событие вебхука review.created и цель жалобы review.
  • Профили: PATCH /me принимает accent, links (до 5, https, ссылки на бренды проверяются по их сайту) и pinnedMods (до 4 своих опубликованных модов). GET /users/{username} отдаёт banner, accent, links, pinnedMods (карточки модов), downloadsCount и likesCount.
  • Повторы вебхуков теперь растянуты примерно на 21 час (1 мин, 5 мин, 30 мин, 2 ч, 6 ч, 12 ч) вместо примерно 20 минут.
  • Вебхуки: /me/webhooks с событиями mod.updated, version.published, comment.created, report.resolved и ping. Подпись HMAC-SHA256, повторы, автоотключение. См. Вебхуки.
  • API-ключи: Authorization: Bearer gm_<prefix>_<secret> со scopes mods:read, mods:write, files:upload, comments:write, webhooks:manage; свой лимит запросов у каждого ключа. См. Авторизация.
  • Ключи с files:upload могут загружать картинки (POST /images).
  • Спецификация OpenAPI объявляет оба способа входа (ключ или cookie сайта) у каждого метода; публичные работают без них.
  • Коллекции: GET /collections (публичные списки с sort, game, q), GET /mods/{id}/collections, PUT /collections/{id}/order. У коллекций появилось поле covers.
  • Несовместимо: GET /users/{username}/collections теперь листается курсором (обёртка page).
  • Предложения игр: POST /game-requests (5 в сутки; повторное предложение считается голосом).

2026-10-25​

  • Комментарии к модам (/mods/{id}/comments, ветки до 3 уровней, правка в течение 15 минут).
  • Лайки и подписки на моды, авторов и игры; уведомления (/notifications).
  • Коллекции: именованные списки модов, публичные или приватные, с заметками.
  • Жалобы (POST /reports) на моды, версии, файлы, пользователей и комментарии.
  • DMCA: снятые моды отвечают 451 unavailable_legal.
  • Модерация: очередь премодерации; для отправки мода нужна выпущенная версия с файлами.
  • Несовместимо: загрузка работает по tus 1.0 (POST /versions/{id}/uploads, PATCH/HEAD/DELETE /uploads/{id}). См. Загрузка мода.
  • Скачивание файлов, список содержимого архива (GET /files/{id}/entries), антивирусная проверка перед выпуском (POST /versions/{id}/submit).
  • Каталог: игры, категории, моды, версии, теги, картинки, полнотекстовый поиск (q), публичные профили.

2026-10-24​

  • Открыт /api/v1: health, сессии, /me, лимиты с заголовками RateLimit-*, Idempotency-Key для POST, ошибки RFC 9457, OpenAPI 3.1.