API автора каталога
Ключ автора mca_live_ для своих модов, сборок, карт и паков: черновик, заливка версий, страница, цена и статистика продаж. Адреса API, права ключа, примеры запросов, ошибки и лимиты.
Обновлено 25 сентября 2026 г.
Всё, что автор делает со своими материалами на сайте, можно делать из своего
скрипта или сборочного конвейера: завести черновик, залить новую версию,
поправить страницу, поменять цену и посмотреть продажи. Для этого нужен ключ
автора — строка вида mca_live_….
Ключ работает только с вашими материалами: теми, у которых автор — вы. Чужую работу им не тронуть, даже если знать её адрес.
Ключ
Ключ выпускается в профиле, в разделе автора. Выберите права и срок; ключ покажется один раз — сохраните его в секретах конвейера. Потеряли — отзовите и выпустите новый. Действующих ключей может быть до десяти. Смена пароля или почты отзывает все ключи аккаунта — после неё выпустите новые.
| Право | Что открывает |
|---|---|
items:write | завести черновик, подтвердить авторство, отправить материал на проверку |
versions:write | получить адрес заливки и зарегистрировать версию |
page:write | картинки, черновик страницы и отправка его на проверку |
pricing:write | цена материала |
stats:read | скачивания, игроки и продажи |
Давайте конвейеру только нужное: ключ сборки обычно живёт с
versions:write и stats:read.
Все адреса — от https://api.millida.net/v2, ключ идёт в заголовке:
Authorization: Bearer mca_live_…
Мои материалы
GET /catalog/author-api/items
[
{
"slug": "my-pack",
"type": "MODPACK",
"title": "Моя сборка",
"status": "PUBLISHED",
"moderationStatus": "PUBLISHED",
"pricing": "ONE_TIME",
"priceKopecks": 49900,
"versionsCount": 12,
"downloads": 5310,
"publicUrl": "/modpacks/my-pack"
}
]
Новый материал
POST /catalog/author-api/items
{ "type": "MOD", "title": "Мой мод", "summary": "Коротко о моде" }
Материал появляется черновиком. Адрес (slug) берётся из названия; занятый
адрес вернёт 409 с подсказкой свободного. Цену сразу при создании
(pricing, priceKopecks) можно передать только ключом с правом
pricing:write, иначе ответ — 403 MISSING_SCOPE.
Новая версия
1. Адрес для заливки:
POST /catalog/author-api/items/my-pack/upload-url
{ "version": "1.4.0", "fileName": "my-pack-1.4.0.zip", "size": 734003200 }
{ "uploadUrl": "https://…", "storageKey": "catalog/packs/my-pack/…", "expiresIn": 3600 }
2. Залейте файл запросом PUT на uploadUrl — прямо в хранилище, без нас
посередине:
curl -X PUT --upload-file my-pack-1.4.0.zip "$UPLOAD_URL"
3. Зарегистрируйте версию:
POST /catalog/author-api/items/my-pack/versions
{
"version": "1.4.0",
"storageKey": "catalog/packs/my-pack/…",
"gameVersions": ["1.20.1"],
"loaders": ["fabric"],
"loaderVersion": "0.16.0",
"changelog": "Новые квесты"
}
Версия уходит на автоматическую проверку и игрокам появляется после неё. Каждая заливка — новый файл: уже опубликованную версию перезаписать нельзя.
Отправка на проверку
Новый материал попадает в каталог после модератора. Когда у него есть хотя бы одна версия, подтвердите, что работа ваша и лицензию выбрали вы. Это отдельный запрос: отправка на проверку не делает его за вас.
POST /catalog/author-api/items/my-pack/authorship
{ "ok": true }
Затем отправьте материал:
POST /catalog/author-api/items/my-pack/submit
{ "ok": true, "status": "PENDING" }
Без подтверждения ответ — 400 «Подтвердите, что сборка ваша и лицензия
выбрана вами», без версии — 400 «Сначала загрузите файл сборки».
Страница
PUT /catalog/author-api/items/my-pack/page
{ "title": "Моя сборка", "summary": "…", "descriptionMd": "## Что внутри\n…" }
Это черновик: игроки видят прошлую страницу, пока новая не пройдёт проверку.
Картинки в описании — только загруженные к нам, ссылки — только на страницы Millida.
Иконку (iconUrl), скриншоты (gallery) и картинки описания сначала загрузите:
curl -H "Authorization: Bearer $MCA_KEY" -F "file=@icon.png" https://api.millida.net/v2/catalog/author-api/images
{ "url": "https://…/uploads/…/icon.png" }
Подходят PNG, JPG, WebP и AVIF до 15 МБ, GIF — нет. Загрузка требует права
page:write, в ответе — адрес, который можно ставить в страницу.
Отправить на проверку:
POST /catalog/author-api/items/my-pack/page/submit
Цена
PUT /catalog/author-api/items/my-pack/pricing
{ "pricing": "ONE_TIME", "priceKopecks": 49900 }
pricing | Что значит |
|---|---|
FREE | бесплатно |
ONE_TIME | разовая покупка, доступ навсегда |
SUBSCRIPTION | подписка, списание раз в месяц |
- Суммы — в копейках. Минимальная цена платного материала — 300 ₽ (
30000). - С каждой продажи платформа берёт 5%, остальное приходит на ваш кошелёк Millida.
- Деньги с продажи можно тратить внутри Millida сразу, а вывести — через 7 дней после покупки.
- Файлы платного материала скачивают только те, у кого есть доступ. Вы как автор доступ имеете всегда.
Статистика
GET /catalog/author-api/items/my-pack/stats
{
"versions": [{ "version": "1.4.0", "downloads": 312, "reviewStatus": "APPROVED" }],
"players": { "players": 1204, "playersRecent": 380, "days": [{ "day": "2026-09-24", "players": 41 }] },
"sales": {
"totalKopecks": 998000,
"netKopecks": 948100,
"count": 20,
"refundedCount": 0,
"holdDays": 7,
"last30d": [{ "day": "2026-09-24", "count": 3, "netKopecks": 142215 }]
}
}
Продажи по всем материалам сразу:
GET /catalog/author-api/sales
Ошибки
Ответ с ошибкой всегда содержит message — его можно показать человеку как есть,
и часто code — по нему удобно ветвиться в скрипте.
| Статус | code | Что случилось |
|---|---|---|
| 401 | INVALID_KEY | ключа нет, он с ошибкой или не найден |
| 401 | REVOKED, EXPIRED | ключ отозван или истёк |
| 401 | OWNER_UNAVAILABLE | аккаунт владельца ключа заблокирован |
| 403 | MISSING_SCOPE | у ключа нет нужного права, список — в scopes |
| 404 | — | материала нет или он не ваш |
| 400 | PRICE_TOO_LOW, PRICE_TOO_HIGH, INVALID_PRICING | цена вне правил, границы — в minKopecks и maxKopecks |
| 409 | UNDER_REVIEW | материал на проверке у модератора — новые файлы после его ответа |
| 429 | — | слишком часто, повторите позже |
Лимиты
- 120 запросов в минуту на ключ.
- Новые материалы — 10 в час, адреса заливки и версии — по 30 в час, правки страницы — 120 в час, картинки — 60 в час, смена цены — 60 в час.