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ż
/24dla IPv4 i/48dla 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 ₽.
| Pole | Znaczenie |
|---|---|
balance.balanceKopecks | wszystko w portfelu, łącznie ze środkami zamrożonymi |
balance.availableKopecks | można wydać w Millida |
balance.withdrawableKopecks | można wypłacić teraz — ta sama kwota co na przycisku „Wypłać” |
balance.heldKopecks | zamrożone do końca okresu wstrzymania |
period.earnedKopecks | zarobione w okresie we wszystkich usługach |
period.earnedBySource | zarobki w okresie według usługi, od największej do najmniejszej |
period.paidOutKopecks | wypłacone w okresie |
period.truncated | true — w okresie jest za dużo transakcji i kwoty są niepełne: zawęź okres |
subscriptions | subskrybenci twoich modpacków teraz, w skrócie; szczegóły w sekcji „Subskrybenci” |
Wartości source:
source | Usługa |
|---|---|
catalog | katalog modpacków: subskrypcje i zakupy |
hosting | hosting |
trade | darowizny Trade |
market | market |
skins | Millida Skins |
rating | rating |
admin | naliczenia 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.
| Pole | Znaczenie |
|---|---|
total.subscribers | ile różnych osób ma teraz subskrypcję co najmniej jednego z twoich modpacków |
total.bundleSubscribers | z tego z subskrypcją „Wszystkie modpacki” |
total.packSubscribers | z 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.autoRenewing | subskrypcje, które odnowią się automatycznie: auto-płatność jest włączona |
renewal.canceledStillActive | auto-płatność jest wyłączona, ale opłacony okres wciąż trwa; dostęp zakończy się po nim |
packs[].activeSubscribers | ile osób może grać w ten modpack z subskrypcji |
packs[].viaPack / packs[].viaBundle | z tego z subskrypcji tego modpacka i z subskrypcji „Wszystkie modpacki” |
period.newSubscriptions | subskrypcje, których pierwsze obciążenie nastąpiło w okresie |
period.canceled | subskrypcje, dla których wyłączono auto-płatność w okresie |
period.expired | dostęp zakończył się w okresie i nie został odnowiony |
period.refunded | dostęp został zamknięty w okresie z powodu zwrotu |
truncated | true — 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
| Kod | code | Co zrobić |
|---|---|---|
| 401 | INVALID_KEY | brakuje klucza, jest w nim literówka albo to klucz innego typu |
| 401 | REVOKED | klucz został unieważniony — wydaj nowy |
| 401 | OWNER_UNAVAILABLE | konto właściciela klucza jest zablokowane lub usunięte |
| 403 | IP_NOT_ALLOWED | zapytanie 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"