Перейти к содержимому
Разработчикам · Сборки в лаунчере

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.truncatedtrue — операций за период слишком много и суммы неполные: сузьте период
subscriptionsподписчики ваших сборок прямо сейчас, кратко; подробно — в разделе «Подписчики»

Значения source:

sourceСервис
catalogкаталог сборок: подписки и покупки
hostingхостинг
tradeдонаты Trade
marketмаркет
skinsMillida 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доступ закрыт в периоде из-за возврата денег
truncatedtrue — данных слишком много и цифры неполные: сузьте период

В bundle считаются люди, в packs — подписки на отдельные сборки. Если подписку отменили, она попадает в canceled в день отмены, а в expired — когда закончится оплаченный срок.

Ошибки

КодcodeЧто делать
401INVALID_KEYключа нет, он с опечаткой или это ключ другого вида
401REVOKEDключ отозван — выпустите новый
401OWNER_UNAVAILABLEаккаунт владельца ключа заблокирован или удалён
403IP_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"