API заработка партнёра
Закрытый ключ mek_live_ только на чтение: баланс, доступно к выводу, заработок за период по всем сервисам Millida и подписчики ваших сборок. Ключ работает только с IP вашего сервера.
Обновлено 28 сентября 2026 г.
Если вы хотите видеть свой заработок на собственном сайте или в панели, подключите API заработка. Оно отдаёт те же цифры, что и кошелёк на Millida: баланс, сумму, доступную к выводу, и заработок за выбранный период с разбивкой по сервисам: подписки на сборки, хостинг, донаты, маркет и остальные.
API только читает. Через него нельзя вывести деньги, изменить реквизиты или что-то оплатить. Ключ видит только ваш кошелёк, чужие данные им не получить.
Ключ
Ключ выпускается в кабинете партнёра: Профиль → раздел с названием вашей студии → API заработка. При выпуске укажите IP-адрес сервера, с которого пойдут запросы. С любого другого адреса ключ не работает, даже если его украли.
- Можно указать до десяти адресов или подсетей. Подсеть не шире
/24для IPv4 и/48для IPv6. - Домашние и локальные адреса (
127.0.0.1,10.x,192.168.x) не принимаются: нужен публичный адрес сервера. - Ключ показывается один раз. Храните его на сервере, в переменных окружения или в хранилище секретов, и никогда не отдавайте его в браузер.
- Действующих ключей может быть до пяти. Потеряли ключ или сменили сервер — отзовите старый ключ и выпустите новый. Отозванный ключ перестаёт работать сразу.
Все адреса отсчитываются от https://api.millida.net/v2. Ключ передаётся в заголовке:
Authorization: Bearer mek_live_…
Сводка
GET /earnings-api/v1/summary?from=2026-09-01T00:00:00.000Z&to=2026-09-30T23:59:59.999Z
from и to — границы периода в формате ISO 8601. Оба параметра
необязательны: без них период охватывает всё время.
{
"currency": "RUB",
"balance": {
"balanceKopecks": 1254000,
"availableKopecks": 1204000,
"withdrawableKopecks": 980000,
"heldKopecks": 50000,
"pendingPayoutKopecks": 0,
"tradeHoldKopecks": 0,
"tradeHoldReadyAt": null,
"marketHoldKopecks": 0,
"marketWithdrawalReadyAt": null
},
"period": {
"from": "2026-09-01T00:00:00.000Z",
"to": "2026-09-30T23:59:59.999Z",
"earnedKopecks": 3108000,
"heldKopecks": 0,
"spentKopecks": 0,
"toppedUpKopecks": 0,
"paidOutKopecks": 2000000,
"refundKopecks": 0,
"netKopecks": 1108000,
"operations": 142,
"earnedBySource": [
{ "source": "catalog", "amountKopecks": 2950000, "operations": 131 },
{ "source": "hosting", "amountKopecks": 158000, "operations": 11 }
],
"truncated": false
},
"subscriptions": {
"subscribers": 14,
"bundleSubscribers": 2,
"packSubscribers": 12
}
}
Все суммы указаны в копейках: 1254000 означает 12 540 ₽.
| Поле | Что значит |
|---|---|
balance.balanceKopecks | всё, что лежит на кошельке, включая замороженное |
balance.availableKopecks | можно потратить внутри Millida |
balance.withdrawableKopecks | можно вывести прямо сейчас — та же сумма, что на кнопке «Вывести» |
balance.heldKopecks | заморожено до конца выдержки |
period.earnedKopecks | заработано за период по всем сервисам |
period.earnedBySource | заработок за период по сервисам, от большего к меньшему |
period.paidOutKopecks | выведено за период |
period.truncated | true — операций за период слишком много и суммы неполные: сузьте период |
subscriptions | подписчики ваших сборок прямо сейчас, кратко; подробно — в разделе «Подписчики» |
Значения source:
source | Сервис |
|---|---|
catalog | каталог сборок: подписки и покупки |
hosting | хостинг |
trade | донаты Trade |
market | маркет |
skins | Millida Skins |
rating | рейтинг |
admin | начисления Millida |
Со временем могут добавиться новые значения. Если значение вам не знакомо, покажите его как есть и не считайте ошибкой.
Подписчики
GET /earnings-api/v1/subscriptions?from=2026-09-01T00:00:00.000Z&to=2026-09-30T23:59:59.999Z
Сколько людей сейчас играет в ваши сборки по подписке Millida и что с подписками происходило за период. Подписчики считаются по действующему доступу, а не по оплатам: человек учитывается, пока может запустить сборку, включая три дня после даты оплаты, которые даются на повторное списание. Доступ по ключам вашего сайта, доступ команды и разовые покупки подписками не считаются.
API отдаёт только числа. Кто именно подписан, через него узнать нельзя.
from и to задают период так же, как в сводке. Они влияют только на блок
period; блоки total, active, renewal и packs всегда показывают
состояние на момент запроса.
{
"from": "2026-09-01T00:00:00.000Z",
"to": "2026-09-30T23:59:59.999Z",
"generatedAt": "2026-09-28T16:30:00.000Z",
"total": {
"subscribers": 14,
"bundleSubscribers": 2,
"packSubscribers": 12
},
"partners": [
{
"partner": { "slug": "arcania-labs", "name": "Arcania Labs" },
"active": {
"subscribers": 14,
"bundleSubscribers": 2,
"packSubscribers": 12,
"packSubscriptions": 12
},
"renewal": {
"autoRenewing": { "bundle": 2, "packs": 12 },
"canceledStillActive": { "bundle": 0, "packs": 0 }
},
"packs": [
{ "slug": "arcania", "title": "Arcania 1.4.3", "published": true, "activeSubscribers": 14, "viaPack": 12, "viaBundle": 2 },
{ "slug": "dread", "title": "DREAD - A Horror Survival Pack", "published": true, "activeSubscribers": 2, "viaPack": 0, "viaBundle": 2 }
],
"period": {
"newSubscriptions": { "bundle": 2, "packs": 12 },
"canceled": { "bundle": 0, "packs": 0 },
"expired": { "bundle": 0, "packs": 0 },
"refunded": { "bundle": 0, "packs": 0 }
},
"truncated": false
}
]
}
В packs перечислены все ваши сборки, в том числе те, у которых подписчиков нет.
| Поле | Что значит |
|---|---|
total.subscribers | сколько разных людей подписаны сейчас хотя бы на одну вашу сборку |
total.bundleSubscribers | из них с подпиской «Все сборки» |
total.packSubscribers | из них с подпиской на отдельную сборку |
partners[] | по строке на каждую вашу студию; если вы не партнёр, список пустой |
active.packSubscriptions | сколько всего подписок на отдельные сборки: один человек может оформить несколько |
renewal.autoRenewing | подписки, которые продлятся сами: автоплатёж включён |
renewal.canceledStillActive | автоплатёж отключён, но оплаченный срок ещё идёт; после него доступ закончится |
packs[].activeSubscribers | сколько людей могут играть в эту сборку по подписке |
packs[].viaPack / packs[].viaBundle | из них по подписке на эту сборку и по подписке «Все сборки» |
period.newSubscriptions | подписки, первое списание по которым прошло в периоде |
period.canceled | подписки, у которых в периоде отключили автоплатёж |
period.expired | доступ закончился в периоде и не был продлён |
period.refunded | доступ закрыт в периоде из-за возврата денег |
truncated | true — данных слишком много и цифры неполные: сузьте период |
В bundle считаются люди, в packs — подписки на отдельные сборки.
Если подписку отменили, она попадает в canceled в день отмены, а в
expired — когда закончится оплаченный срок.
Ошибки
| Код | code | Что делать |
|---|---|---|
| 401 | INVALID_KEY | ключа нет, он с опечаткой или это ключ другого вида |
| 401 | REVOKED | ключ отозван — выпустите новый |
| 401 | OWNER_UNAVAILABLE | аккаунт владельца ключа заблокирован или удалён |
| 403 | IP_NOT_ALLOWED | запрос пришёл не с адреса из ключа; в тексте ошибки указан адрес, который мы увидели |
| 429 | — | превышен лимит частоты запросов, повторите запрос через минуту |
Лимиты
Один ключ может отправлять до 30 запросов в минуту. Цифры меняются вместе с оплатами, поэтому опрашивать API чаще раза в минуту нет смысла. Лучше кешируйте ответ на своём сервере.
Пример
curl -s https://api.millida.net/v2/earnings-api/v1/summary \
-H "Authorization: Bearer $MILLIDA_EARNINGS_KEY"
curl -s https://api.millida.net/v2/earnings-api/v1/subscriptions \
-H "Authorization: Bearer $MILLIDA_EARNINGS_KEY"