API автора сборки: выдача кодов активации
Как автору платной сборки выдавать коды активации через API Millida Hosting: выпуск партии, статус кода, отзыв и вебхук об активации.
Обновлено 4 августа 2026 г.
Эта статья — для авторов платных сборок, которые продают их сами, а установку на сервер отдают нам. Покупателю при этом ничего скачивать не нужно: он вводит код и получает поднятую сборку. Как это выглядит с его стороны — Платная сборка по коду активации.
Что нужно, чтобы подключиться
- Прислать нам серверный архив сборки —
.zipсmods/в корне (без обёртки видаServer Files/) или.mrpack. Архив лежит у нас в приватном хранилище, ссылка наружу не отдаётся никогда. - Сказать ядро, версию игры и минимальную память — по ним мастер отсеет тарифы, на которых сборка не запустится.
- Получить от нас ключ сборки (
key, напримерarcania) и токен выдачи — им ваш сайт печатает коды.
Токен показывается один раз: у нас хранится только его отпечаток. Потеряли — попросите перевыпустить, старый перестанет работать.
Как устроена схема
- Оплату принимаете вы, у себя.
- После оплаты ваш сайт дёргает наш API и получает код активации.
- Код вы отдаёте покупателю — письмом, ботом, на странице «спасибо».
- Покупатель вводит код у нас и получает сервер со сборкой на платном тарифе.
- Файлы сборки на сервере закрыты: скачать
modsнельзя ни из панели, ни по SFTP.
Физически покупатель серверную сборку в руки не получает — только работающий сервер.
Адрес и авторизация
Базовый адрес — https://millida.net/v2/hosting.
Токен передаётся заголовком X-Pack-Token. Он не JWT и не Bearer — это отдельный секрет вашей сборки.
X-Pack-Token: mpk_pack_XXXXXXXXXXXXXXXX
Content-Type: application/json
Токен живёт на вашем сервере — держите его в переменных окружения, не в коде фронта.
Выпустить коды
POST /v2/hosting/packs/{key}/keys
| Поле | Тип | По умолчанию | Что делает |
|---|---|---|---|
count | число 1–200 | 1 | Сколько кодов напечатать за вызов |
note | строка до 120 | — | Ваша пометка: номер заказа, ник покупателя |
maxServers | число 1–20 | 1 | На сколько серверов можно активировать один код |
expiresAt | дата ISO | — | Срок годности кода |
curl -X POST https://millida.net/v2/hosting/packs/arcania/keys \
-H "X-Pack-Token: $PACK_TOKEN" \
-H "Content-Type: application/json" \
-d '{"count": 1, "note": "заказ 4821"}'
{
"code": "A7K2-9MHD-4RTP-QW38",
"codes": ["A7K2-9MHD-4RTP-QW38"]
}
Поле code — первый код партии, оставлено для совместимости; при count > 1 берите codes.
Коды возвращаются только здесь и больше нигде. У нас хранится их хеш — как пароль. Если код потерялся у вас, восстановить его мы не можем: выпускайте новый и отзывайте старый.
Лимит — 30 запросов в минуту на сборку. Партия до 200 кодов за вызов сделана как раз для распродаж: печатайте пачкой, а не по одному коду в запросе.
Что стало с кодами
GET /v2/hosting/packs/{key}/keys?limit=100
[
{
"codeHint": "A7K29MHD",
"note": "заказ 4821",
"maxServers": 1,
"usedCount": 1,
"state": "spent",
"expiresAt": null,
"revokedAt": null,
"createdAt": "2026-08-03T12:20:11.000Z"
}
]
Самих кодов в ответе нет и быть не может. codeHint — начало кода, по нему вы свяжете строку со своим заказом.
Состояния: free — не использован, spent — израсходован, expired — истёк срок, revoked — отозван вами.
Проверить один код
POST /v2/hosting/packs/{key}/keys/status, тело {"code": "A7K2-9MHD-4RTP-QW38"}.
Ответ — та же строка, что и в списке. Код идёт телом, а не в адресе: адреса оседают в логах прокси и в истории браузера, а до активации код — рабочий ключ.
Дефисы и регистр не важны: a7k29mhd4rtpqw38 найдётся так же, как A7K2-9MHD-4RTP-QW38.
Отозвать код
POST /v2/hosting/packs/{key}/keys/revoke, тело {"code": "..."}.
Нужен при возврате денег, ошибочной выдаче или споре. Отзыв закрывает будущие активации, но не снимает уже поставленную сборку — покупатель, который её активировал, останется с рабочим сервером.
Вебхук об активации
Если вы дадите нам адрес вебхука, мы позовём его в момент, когда код сработал:
POST <ваш адрес>
X-Millida-Pack: arcania
Content-Type: application/json
{
"event": "pack.activated",
"packKey": "arcania",
"codeHint": "A7K29MHD",
"serverId": "cm4x...",
"activatedAt": "2026-08-04T09:14:02.000Z"
}
Подписи у вызова нет: проверить факт можно тем же токеном через keys/status — по codeHint вы найдёте свою строку и увидите state: "spent". Так вам не приходится хранить второй секрет.
Вебхук отправляется без ожидания ответа и не повторяется: если ваш сервер лежал, активация всё равно прошла, а увидеть её вы сможете в списке кодов. Адрес должен быть публичным — на внутренние и локальные адреса мы не ходим. Редиректы не выполняются.
Карточка сборки
GET /v2/hosting/packs/{key} — публичная, без токена. Отдаёт то, что видит покупатель: название, ядро, версию, минимум памяти, список тарифов и флаги защит. Ссылки на архив в ответе нет.
Удобно для страницы «Купить» на вашем сайте: требования к тарифу берутся из одного источника и не расходятся с тем, что скажет наш мастер.
Коды ответов
| Код | Когда | Что делать |
|---|---|---|
403 | Неверный токен выдачи | Проверьте X-Pack-Token |
404 | Сборка выключена или не подключена к выдаче | Напишите нам |
400 | Не разобрана дата expiresAt | ISO-строка, например 2026-12-31T23:59:59Z |
429 | Больше 30 запросов в минуту | Печатайте партией, а не по одному коду |
Как проверить всё до продажи
Попросите у нас пару кодов на тест: выпустите код через API, активируйте его на своём сервере на нашем хостинге, посмотрите, что пришло в вебхук и что показывает keys/status. Так вы увидите весь путь покупателя до того, как по нему пойдёт первый оплативший.