Skip to content
Dla deweloperów · Modpacki w launcherze

API zarobków partnerskich

Prywatny klucz mek_live_ tylko do odczytu: saldo, dostępne do wypłaty, zarobki za okres we wszystkich usługach Millida i subskrybenci twoich modpacków. Klucz działa tylko z IP twojego serwera.

Zaktualizowano 28 września 2026

Jeśli chcesz widzieć swoje zarobki na własnej stronie albo w panelu, podłącz API zarobków. Zwraca te same liczby co portfel na Millida: saldo, kwotę dostępną do wypłaty oraz zarobki za wybrany okres z podziałem na usługi: subskrypcje modpacków, hosting, darowizny, market i inne.

API działa tylko do odczytu. Nie wypłacisz przez nie pieniędzy, nie zmienisz danych do wypłat i nie zapłacisz za nic. Klucz widzi tylko twój portfel; nie uzyskasz nim dostępu do danych innych osób.

Klucz

Klucz wydajesz w panelu partnera: Profil → sekcja nazwana od twojego studia → API zarobków. Przy wydawaniu podaj adres IP serwera, z którego będą wysyłane zapytania. Klucz nie działa z żadnego innego adresu, nawet jeśli zostanie skradziony.

  • Możesz podać do dziesięciu adresów lub podsieci. Podsieć nie może być szersza niż /24 dla IPv4 i /48 dla IPv6.
  • Adresy domowe i lokalne (127.0.0.1, 10.x, 192.168.x) nie są przyjmowane: potrzebujesz publicznego adresu serwera.
  • Klucz jest pokazywany raz. Trzymaj go na serwerze, w zmiennych środowiskowych albo w sejfie na sekrety i nigdy nie wystawiaj go do przeglądarki.
  • Możesz mieć do pięciu aktywnych kluczy. Jeśli zgubisz klucz albo zmienisz serwer, unieważnij stary klucz i wydaj nowy. Unieważniony klucz przestaje działać natychmiast.

Wszystkie endpointy są względne wobec https://api.millida.net/v2. Klucz przekazujesz w nagłówku:

Authorization: Bearer mek_live_…

Podsumowanie

GET /earnings-api/v1/summary?from=2026-09-01T00:00:00.000Z&to=2026-09-30T23:59:59.999Z

from i to to granice okresu w formacie ISO 8601. Oba parametry są opcjonalne: bez nich okres obejmuje cały czas.

{
  "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
  }
}

Wszystkie kwoty są w kopiejkach: 1254000 oznacza 12 540 ₽.

PoleZnaczenie
balance.balanceKopeckswszystko w portfelu, łącznie ze środkami zamrożonymi
balance.availableKopecksmożna wydać w Millida
balance.withdrawableKopecksmożna wypłacić teraz — ta sama kwota co na przycisku „Wypłać”
balance.heldKopeckszamrożone do końca okresu wstrzymania
period.earnedKopeckszarobione w okresie we wszystkich usługach
period.earnedBySourcezarobki w okresie według usługi, od największej do najmniejszej
period.paidOutKopeckswypłacone w okresie
period.truncatedtrue — w okresie jest za dużo transakcji i kwoty są niepełne: zawęź okres
subscriptionssubskrybenci twoich modpacków teraz, w skrócie; szczegóły w sekcji „Subskrybenci”

Wartości source:

sourceUsługa
catalogkatalog modpacków: subskrypcje i zakupy
hostinghosting
tradedarowizny Trade
marketmarket
skinsMillida Skins
ratingrating
adminnaliczenia Millida

Nowe wartości mogą pojawiać się z czasem. Jeśli nie rozpoznajesz wartości, wyświetl ją taką, jaka jest, i nie traktuj tego jako błąd.

Subskrybenci

GET /earnings-api/v1/subscriptions?from=2026-09-01T00:00:00.000Z&to=2026-09-30T23:59:59.999Z

Ile osób aktualnie gra w twoje modpacki w ramach subskrypcji Millida i co działo się z subskrypcjami w okresie. Subskrybenci są liczeni według aktywnego dostępu, a nie według płatności: osoba liczy się tak długo, jak może uruchomić modpack, w tym przez trzy dni po dacie płatności przewidziane na ponowną próbę obciążenia. Dostęp przez klucze z twojej strony, dostęp zespołowy i jednorazowe zakupy nie liczą się jako subskrypcje.

API zwraca tylko liczby. Nie dowiesz się przez nie, kto dokładnie ma subskrypcję.

from i to określają okres tak samo jak w podsumowaniu. Wpływają tylko na blok period; bloki total, active, renewal i packs zawsze pokazują stan w momencie zapytania.

{
  "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 wymienia wszystkie twoje modpacki, także te bez subskrybentów.

PoleZnaczenie
total.subscribersile różnych osób ma teraz subskrypcję co najmniej jednego z twoich modpacków
total.bundleSubscribersz tego z subskrypcją „Wszystkie modpacki”
total.packSubscribersz tego z subskrypcją pojedynczego modpacka
partners[]jeden wiersz na każde twoje studio; jeśli nie jesteś partnerem, lista jest pusta
active.packSubscriptionsłączna liczba subskrypcji pojedynczych modpacków: jedna osoba może mieć kilka
renewal.autoRenewingsubskrypcje, które odnowią się automatycznie: auto-płatność jest włączona
renewal.canceledStillActiveauto-płatność jest wyłączona, ale opłacony okres wciąż trwa; dostęp zakończy się po nim
packs[].activeSubscribersile osób może grać w ten modpack z subskrypcji
packs[].viaPack / packs[].viaBundlez tego z subskrypcji tego modpacka i z subskrypcji „Wszystkie modpacki”
period.newSubscriptionssubskrypcje, których pierwsze obciążenie nastąpiło w okresie
period.canceledsubskrypcje, dla których wyłączono auto-płatność w okresie
period.expireddostęp zakończył się w okresie i nie został odnowiony
period.refundeddostęp został zamknięty w okresie z powodu zwrotu
truncatedtrue — jest za dużo danych i liczby są niepełne: zawęź okres

bundle liczy osoby, a packs liczy subskrypcje pojedynczych modpacków. Jeśli subskrypcja zostanie anulowana, pojawia się w canceled w dniu anulowania, a w expired, gdy skończy się opłacony okres.

Błędy

KodcodeCo zrobić
401INVALID_KEYbrakuje klucza, jest w nim literówka albo to klucz innego typu
401REVOKEDklucz został unieważniony — wydaj nowy
401OWNER_UNAVAILABLEkonto właściciela klucza jest zablokowane lub usunięte
403IP_NOT_ALLOWEDzapytanie nie przyszło z adresu w kluczu; w treści błędu jest adres, który widzieliśmy
429—przekroczono limit zapytań, ponów zapytanie za minutę

Limity

Jeden klucz może wysłać do 30 zapytań na minutę. Liczby zmieniają się wraz z płatnościami, więc odpytywanie API częściej niż raz na minutę nie ma sensu. Lepiej zbuforować odpowiedź na swoim serwerze.

Przykład

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"