Przejdź do treści
Aktualny kupon:10% zniżkiUżyj w zamówieniu

API dla własnych paneli i resellingu

Zarządzaj usługami z własnego systemu: te same funkcje co w koncie klienta, z kluczami i uprawnieniami ustawionymi przez Ciebie.

Do czego służy API

API jest dla każdego, kto chce zarządzać usługami StormHost z własnego środowiska: resellerów z własnym panelem dla swoich klientów, firm z narzędziami wewnętrznymi lub programistów, którzy chcą restartować serwer, robić kopie zapasowe lub zmieniać DNS skryptem.

Przez API działa prawie wszystko, co robisz w koncie klienta: włączanie i restart, statystyki, reinstalacja, zapora, rDNS, kopie zapasowe, pliki, bazy danych, ustawienia serwerów gier i Minecrafta, boty Discord, DNS domen, zmiany pakietów, odnowienia i płatność kredytem.

Klucz działa w Twoim imieniu, ale tylko w zakresie nadanych mu uprawnień. W przypadku usługi udostępnionej Ci przez kogoś innego obowiązują dodatkowo uprawnienia nadane przez jej właściciela.

Szybki start

  1. W koncie klienta otwórz Ustawienia konta, kartę Klucze API, i utwórz klucz. Wybierz nazwę, uprawnienia, ewentualnie usługi i adresy IP, z których będziesz go używać, oraz ważność. Utworzenie potwierdzasz kodem z aplikacji lub hasłem.
  2. Klucz jest pokazywany tylko raz. Skopiuj go i przechowuj bezpiecznie, na przykład w zmiennej środowiskowej na serwerze. U nas zapisany jest tylko jego odcisk, więc nie możemy pokazać go ponownie.
  3. Wypróbuj pierwsze żądanie. Endpoint /api/v1/key zwraca informacje o kluczu i działa z każdym ważnym kluczem:
curl https://stormhost.eu/api/v1/key \
  -H "Authorization: Bearer shk_…"

Uwierzytelnianie kluczem

  • Każde żądanie przesyła klucz w nagłówku Authorization w postaci Bearer shk_… (zamiast tego można użyć nagłówka X-API-Key).
  • API nie używa plików cookie. Odrzuca żądania z cookie logowania do konta klienta, więc klucza nie da się nadużyć z przeglądarki.
  • Nigdy nie umieszczaj klucza w kodzie działającym w przeglądarce lub aplikacji mobilnej. Klucz należy tylko na Twój serwer.
  • Po zmianie lub resecie hasła oraz po zablokowaniu konta dotychczasowe klucze przestają działać. Utwórz wtedy nowe.
Authorization: Bearer shk_ab12cd34ef56_…

Uprawnienia

Nadaj kluczowi tylko te uprawnienia, których naprawdę potrzebuje. Brak uprawnienia API odrzuca odpowiedzią 403 z kodem insufficient_scope i nazwą wymaganego uprawnienia w polu requiredScope.

UprawnienieNa co pozwala
account:readDane konta (tylko odczyt)
services:readLista usług, stan i statystyki
services:powerWłącz, wyłącz, restart
services:consoleKonsola
services:networkSieć: rDNS, sieć prywatna, adresy
services:firewallZapora
services:filesPliki, światy, pluginy i mody
services:databaseBazy danych
services:backupsKopie zapasowe i przywracanie
services:settingsUstawienia usługi (gry, boty, harmonogram, alerty, ISO)
services:secretsWrażliwe: reinstalacja, hasła, SFTP, kod transferu domenytylko z ograniczeniem do adresów IP
domains:readRekordy DNS (tylko odczyt)
domains:writeRekordy DNS i serwery nazw (zmiany)
billing:readDokumenty i kredyt (tylko odczyt)
billing:writeZamówienia zmian, odnowienia i płatność kredytem

Ograniczenie do usług i adresów IP

Klucz możesz ograniczyć do wybranych usług. Do pozostałych usług nie ma wtedy dostępu, a API odpowiada 404, jakby nie istniały. Bez ograniczenia działa dla wszystkich Twoich usług, także przyszłych.

Klucz możesz ograniczyć do adresów IP lub zakresów (np. 203.0.113.10 lub 203.0.113.0/24, maksymalnie 20). Z innego adresu API odpowiada 403 z kodem ip_not_allowed. Wrażliwe uprawnienie services:secrets wymaga tego ograniczenia.

Ważność klucza wybierasz przy tworzeniu (od 30 do 365 dni lub bez ograniczenia). Klucz możesz w każdej chwili unieważnić, przestaje wtedy działać natychmiast.

Żądania i odpowiedzi

  • Adres API to https://stormhost.eu/api/v1. Wszystkie odpowiedzi są w formacie JSON w kodowaniu UTF-8, poza pobieraniem plików i PDF.
  • Żądania z treścią (POST, PUT, PATCH, DELETE) wysyłaj jako JSON z nagłówkiem Content-Type: application/json.
  • Język komunikatów wybierasz parametrem ?locale=cs, en, sk, pl lub de, przy zapisach także polem locale w treści. Bez niego odpowiadamy po czesku.
  • Identyfikator usługi {id} znajdziesz na liście usług (GET /api/v1/services) lub w adresie usługi w koncie klienta.
  • Udana odpowiedź ma status 200. Błąd ma status 4xx lub 5xx, a w treści pole error (tekst dla człowieka) i zwykle także code (kod maszynowy).
{
  "error": "This API key lacks the services:power scope.",
  "code": "insufficient_scope",
  "requiredScope": "services:power"
}

Błędy

Błędy wspólne dla wszystkich funkcji. Błędy poszczególnych funkcji znajdziesz przy nich w przeglądzie.

StatusKodZnaczenie
400cookies_not_allowedŻądanie zawiera pliki cookie. API używa się tylko z kluczem.
401missing_keyBrak klucza w nagłówku Authorization.
401invalid_keyKlucz jest nieprawidłowy, wygasły lub unieważniony.
403ip_not_allowedKlucza nie można użyć z tego adresu IP.
403insufficient_scopeKlucz nie ma wymaganego uprawnienia (pole requiredScope).
403email_unverifiedAdres e-mail konta nie jest potwierdzony.
404not_foundNieznany adres lub usługa, do której klucz nie ma dostępu.
400—Funkcja nie dotyczy tego typu usługi (np. ustawienia Minecrafta przy VPS).
409—Usługa nie jest aktywna (czeka na uruchomienie, jest zawieszona lub zakończona).
405method_not_allowedMetoda niedozwolona, nagłówek Allow podaje dozwolone.
429rate_limitedPrzekroczony limit żądań, ponów po czasie z nagłówka Retry-After.
503unavailableChwilowo niedostępne, spróbuj za moment.

Limity

  • Jeden klucz może wysłać maksymalnie 300 żądań na minutę (wszystkie funkcje łącznie).
  • Niektóre funkcje mają własny, ostrzejszy limit, tak samo jak w koncie klienta, na przykład włączanie i restart usługi 5 na minutę.
  • Po przekroczeniu limitu API odpowiada 429, a nagłówek Retry-After podaje, po ilu sekundach spróbować ponownie. Powtarzające się nieprawidłowe klucze z jednego adresu IP są czasowo blokowane.
  • Konto może mieć maksymalnie 20 aktywnych kluczy.

Przykłady kodu

Przykłady sprawdzają klucz i wypisują usługi. Klucz odczytują ze zmiennej środowiskowej STORMHOST_API_KEY. Typowy scenariusz resellera: wypisać usługi, sprawdzić stan i w razie potrzeby zrestartować usługę.

curl

curl https://stormhost.eu/api/v1/key \
  -H "Authorization: Bearer $STORMHOST_API_KEY"

curl "https://stormhost.eu/api/v1/services?status=active" \
  -H "Authorization: Bearer $STORMHOST_API_KEY"

curl -X POST https://stormhost.eu/api/v1/services/SERVICE_ID/power \
  -H "Authorization: Bearer $STORMHOST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"action":"restart"}'

JavaScript (Node.js)

const API = "https://stormhost.eu/api/v1";
const headers = { Authorization: `Bearer ${process.env.STORMHOST_API_KEY}` };

const res = await fetch(`${API}/services`, { headers });
if (!res.ok) throw new Error((await res.json()).error);
const { data } = await res.json();

for (const s of data) console.log(s.id, s.name, s.status);

await fetch(`${API}/services/${data[0].id}/power`, {
  method: "POST",
  headers: { ...headers, "Content-Type": "application/json" },
  body: JSON.stringify({ action: "restart" }),
});

PHP

<?php
$api = "https://stormhost.eu/api/v1";
$key = getenv("STORMHOST_API_KEY");

function call(string $method, string $url, string $key, ?array $body = null): array {
    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST => $method,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => ["Authorization: Bearer $key", "Content-Type: application/json"],
        CURLOPT_POSTFIELDS => $body ? json_encode($body) : null,
    ]);
    $out = json_decode(curl_exec($ch), true);
    curl_close($ch);
    return $out;
}

$services = call("GET", "$api/services", $key)["data"];
call("POST", "$api/services/{$services[0]['id']}/power", $key, ["action" => "restart"]);

Python

import os, requests

API = "https://stormhost.eu/api/v1"
s = requests.Session()
s.headers["Authorization"] = f"Bearer {os.environ['STORMHOST_API_KEY']}"

services = s.get(f"{API}/services").json()["data"]
for svc in services:
    print(svc["id"], svc["name"], svc["status"])

r = s.post(f"{API}/services/{services[0]['id']}/power", json={"action": "restart"})
r.raise_for_status()

Przegląd funkcji

Przy każdej funkcji podano metodę, adres, wymagane uprawnienie, parametry i przykładową odpowiedź. Wartości w przykładach są zmyślone.

Klucz i konto

GET/keyInformacje o kluczu API

Zwraca nazwę klucza, jego uprawnienia, ograniczenia do usług i adresów IP oraz ważność. Nie wymaga uprawnień, przydaje się do sprawdzenia klucza.

Uprawnienie: –

Przykładowa odpowiedź

{
  "name": "Můj panel",
  "key": "shk_a1b2c3d4_…",
  "scopes": [
    "services:read",
    "services:power"
  ],
  "serviceIds": [],
  "allowedIps": [
    "203.0.113.10"
  ],
  "expiresAt": null,
  "createdAt": "2026-10-01T08:00:00.000Z"
}

Możliwe błędy

  • 401invalid_key Klucz jest nieprawidłowy, wygasł lub został unieważniony.
GET/meDane konta

Zwraca podstawowe dane konta, do którego należy klucz: e-mail, imię i nazwisko, firmę, numer firmy, NIP i kraj.

Uprawnienie: account:read

Przykładowa odpowiedź

{
  "id": "clx9k2m4p0000cus01abcdef",
  "email": "[email protected]",
  "firstName": "Jan",
  "lastName": "Novák",
  "companyName": null,
  "ico": null,
  "dic": null,
  "country": "CZ",
  "emailVerified": true,
  "createdAt": "2026-03-12T09:30:00.000Z"
}

Możliwe błędy

  • 401invalid_key Nie znaleziono konta klucza.

Usługi

GET/overview/metricsBieżące metryki usług

Zwraca bieżący stan i wykorzystanie maksymalnie 8 usług naraz: dla VPS i serwerów gier zasilanie, procesor, pamięć i czas działania, dla Minecrafta graczy, dla kolokacji pobór mocy, dla domen datę wygaśnięcia. Gdy danych nie da się odczytać, usługa ma state: unavailable z powodem w reason.

Uprawnienie: services:read

Parametry w adresie

NazwaTypWymaganeOpis
idsstringnieID usług rozdzielone przecinkiem, maksymalnie 8. Bez parametru zwraca pierwsze 8 usług. Nieznane ID są pomijane bez komunikatu. Klucz ograniczony do wybranych usług może wysłać tylko ich ID.
localestringnieJęzyk komunikatów o błędach: cs, en, sk, pl lub de. Domyślnie cs.

Przykładowa odpowiedź

{
  "at": "2026-11-07T10:00:00.000Z",
  "ttlMs": 2500,
  "truncated": false,
  "services": [
    {
      "serviceId": "clx9k2m4p0000svc01abcdef",
      "sampledAt": "2026-11-07T09:59:58.000Z",
      "kind": "vps",
      "state": "ok",
      "power": "running",
      "cpuPercent": 12.5,
      "cpuAt": "2026-11-07T09:59:00.000Z",
      "memUsedMib": 1536,
      "memTotalMib": 4096,
      "uptimeSeconds": 864000,
      "cpuSeries": [
        {
          "t": 1794045540000,
          "v": 11.2
        },
        {
          "t": 1794045600000,
          "v": 12.5
        }
      ]
    },
    {
      "serviceId": "clx9k2m4p0001svc02abcdef",
      "sampledAt": "2026-11-07T09:59:58.000Z",
      "kind": "game",
      "state": "ok",
      "power": "running",
      "cpuPercent": 34.1,
      "memUsedMib": 2900,
      "memTotalMib": 6144,
      "uptimeSeconds": 7200,
      "players": {
        "state": "ok",
        "online": 5,
        "max": 20,
        "at": "2026-11-07T09:55:00.000Z",
        "stale": false
      }
    },
    {
      "serviceId": "clx9k2m4p0002svc03abcdef",
      "sampledAt": "2026-11-07T09:59:58.000Z",
      "kind": "domain",
      "state": "ok",
      "expiresOn": "2027-05-01"
    },
    {
      "serviceId": "clx9k2m4p0003svc04abcdef",
      "sampledAt": "2026-11-07T09:59:58.000Z",
      "kind": "vps",
      "state": "unavailable",
      "reason": "provider"
    }
  ]
}

Możliwe błędy

  • 404not_found Klucz jest ograniczony do wybranych usług, a ids zawiera inną usługę.
  • 429rate_limited Przekroczono limit 40 zapytań na minutę.
  • 503unavailable Nie można teraz wczytać listy usług. Spróbuj za kilka sekund.
GET/servicesLista usług

Zwraca twoje usługi oraz usługi, które ktoś ci udostępnił (rola member, bez ceny i z twoimi uprawnieniami). Klucz ograniczony do wybranych usług widzi tylko je.

Uprawnienie: services:read

Parametry w adresie

NazwaTypWymaganeOpis
statusstringnieFiltr według stanu: PENDING, ACTIVE, SUSPENDED lub TERMINATED (wielkość liter nie ma znaczenia).
localestringnieJęzyk nazw usług: cs, en, sk, pl lub de. Domyślnie cs.

Przykładowa odpowiedź

{
  "data": [
    {
      "id": "clx9k2m4p0000svc01abcdef",
      "name": "VPS Start",
      "type": "VPS",
      "kind": "vps",
      "status": "ACTIVE",
      "role": "owner",
      "plan": "vps-start",
      "address": "203.0.113.25",
      "priceCzk": 249,
      "currency": "CZK",
      "expiresAt": "2026-12-01T00:00:00.000Z",
      "createdAt": "2026-06-01T10:00:00.000Z"
    },
    {
      "id": "clx9k2m4p0001svc02abcdef",
      "name": "Minecraft server",
      "type": "GAME_SERVER",
      "kind": "game",
      "status": "ACTIVE",
      "role": "member",
      "permissions": [
        "power",
        "console"
      ],
      "plan": null,
      "address": "mc.example.com",
      "priceCzk": null,
      "currency": "CZK",
      "expiresAt": "2026-11-20T00:00:00.000Z",
      "createdAt": "2026-08-15T12:00:00.000Z"
    }
  ]
}
GET/services/{id}Szczegóły usługi

Zwraca jedną usługę w tym samym formacie co lista usług. Działa też dla zawieszonych i zakończonych usług.

Uprawnienie: services:read

Parametry w adresie

NazwaTypWymaganeOpis
localestringnieJęzyk nazwy usługi i komunikatów o błędach: cs, en, sk, pl lub de. Domyślnie cs.

Przykładowa odpowiedź

{
  "data": {
    "id": "clx9k2m4p0000svc01abcdef",
    "name": "VPS Start",
    "type": "VPS",
    "kind": "vps",
    "status": "ACTIVE",
    "role": "owner",
    "plan": "vps-start",
    "address": "203.0.113.25",
    "priceCzk": 249,
    "currency": "CZK",
    "expiresAt": "2026-12-01T00:00:00.000Z",
    "createdAt": "2026-06-01T10:00:00.000Z"
  }
}

Możliwe błędy

  • 404 Usługa nie istnieje, nie należy do ciebie lub klucz nie ma do niej dostępu.
  • 400 Ten rodzaj usługi nie jest obsługiwany przez API.
  • 403mfa_required Właściciel udostępnionej usługi wymaga weryfikacji dwuetapowej, której nie masz włączonej.

Usługi ogólnie

POST/services/{id}/console-tokenToken do połączenia z konsolą

Wydaje jednorazowy token ważny 30 s do websocketu konsoli VPS (VNC lub terminal) albo serwera gier. Konsola otwarta tokenem z API działa najwyżej około minuty; tylko aktywna usługa, limit 10 na minutę.

Uprawnienie: services:console

Treść żądania (JSON)

NazwaTypWymaganeOpis
modestringtakTylko VPS: vnc lub term. Dla serwera gier ignorowane.

Przykładowa treść

{
  "mode": "vnc"
}

Przykładowa odpowiedź

{
  "token": "eyJhbGciOi…example",
  "password": "example-rfb-ticket"
}

Możliwe błędy

  • 400 Dla VPS brak lub nieprawidłowa wartość mode.
  • 403 Brak uprawnienia Konsola w udostępnionej usłudze.
  • 404 Nie znaleziono usługi lub nie ma ona konsoli.
  • 409 Usługa nie jest aktywna lub VPS jest zablokowany (przywracanie z kopii).
  • 412NOT_PROVISIONED Serwer nie jest jeszcze gotowy.
  • 429 Ponad 10 tokenów na minutę.
GET/services/{id}/crashAnaliza awarii i logu serwera

Analizuje log, raport awarii lub wyjście konsoli serwera gier albo bota i zwraca wyniki z proponowanymi rozwiązaniami. Niczego na serwerze nie zmienia; wyniki zawierają id i parametry, nie gotowe teksty. Limit 10 analiz na minutę na usługę.

Uprawnienie: services:read

Parametry w adresie

NazwaTypWymaganeOpis
sourcestringnieauto (domyślnie), latest, crash-report, console lub file.
namestringniePlik dla source=file, np. logs/latest.log, crash-reports/crash-….txt lub hs_err_pid….log (maks. 120 znaków).
liststringniefiles zwraca listę plików, które można przeanalizować (najwyżej 50).
langstringnieJęzyk komunikatów: cs, en, sk, pl lub de.
tplstringnie1 = zezwól także na propozycje wysyłające stałe polecenie do konsoli.

Przykładowa odpowiedź

{
  "result": {
    "v": 1,
    "kind": "mc",
    "findings": [
      {
        "id": "mc.oom",
        "sev": "critical",
        "p": {
          "heapMb": 2048
        },
        "evidence": [
          {
            "line": 412,
            "text": "java.lang.OutOfMemoryError: Java heap space"
          }
        ],
        "fix": {
          "type": "recalc-memory"
        },
        "alt": [
          {
            "type": "upgrade"
          }
        ]
      }
    ],
    "rootCause": {
      "cls": "java.lang.OutOfMemoryError",
      "msg": "Java heap space",
      "line": 412
    },
    "stats": {
      "lines": 1830,
      "truncated": false,
      "ms": 42,
      "timedOut": false,
      "crashReport": false
    }
  },
  "sources": [
    {
      "kind": "log",
      "name": "logs/latest.log",
      "mtime": 1762508000,
      "truncated": false
    }
  ]
}

Możliwe błędy

  • 400bad-request Nieprawidłowy parametr. Kod bad-name: tego pliku nie można przeanalizować.
  • 403forbidden Brak uprawnienia Konsola lub Pliki w udostępnionej usłudze.
  • 404no-source Nie znaleziono logu, serwer mógł jeszcze nie działać.
  • 412not-ready Serwer nie jest jeszcze gotowy.
  • 413too-large Log jest za duży do analizy (ponad 16 MiB).
  • 429rate Przekroczono limit. Kod busy: trwa analiza innych serwerów.
  • 502failed Nie udało się wczytać logu.
GET/services/{id}/databaseSerwer bazy danych na VPS i przegląd

Sprawdza, czy na VPS jest MariaDB/MySQL lub PostgreSQL, a po podłączeniu zwraca wersję, bazy i użytkowników. Tylko VPS.

Uprawnienie: services:database

Parametry w adresie

NazwaTypWymaganeOpis
localestringnieJęzyk przyczyny w connectError: cs, en, sk, pl lub de.

Przykładowa odpowiedź

{
  "detection": {
    "mysql": {
      "installed": true,
      "listening": true
    },
    "postgres": {
      "installed": false,
      "listening": false
    },
    "os": {
      "id": "debian",
      "like": "",
      "name": "Debian GNU/Linux 12 (bookworm)"
    },
    "canAutoInstall": true,
    "install": {
      "running": false,
      "engine": null,
      "exitCode": null,
      "logTail": null
    }
  },
  "config": {
    "engine": "mysql",
    "port": 3306,
    "username": "stormhost_panel",
    "auto": true
  },
  "overview": {
    "version": "10.11.6-MariaDB",
    "databases": [
      {
        "name": "shop",
        "sizeBytes": 5242880,
        "tables": 14,
        "system": false
      }
    ],
    "users": [
      {
        "name": "shop",
        "host": "localhost",
        "databases": [
          "shop"
        ],
        "system": false
      }
    ]
  },
  "connectError": null
}

Możliwe błędy

  • 403 Brak uprawnienia Bazy danych.
  • 401AUTH_FAILED VPS odrzucił dane logowania.
  • 409HOST_KEY_CHANGED Odcisk klucza SSH VPS się zmienił (nowy w presentedHostKey); potwierdź go akcją trustHostKey.
  • 412NO_TARGET VPS nie ma jeszcze adresu ani danych dostępowych (także NO_CREDENTIALS).
  • 502UNREACHABLE VPS jest niedostępny (także TIMEOUT, FAILED).
POST/services/{id}/databaseInstalacja, połączenie, bazy i użytkownicy

Zarządza serwerem bazy danych na VPS według pola action. Instalacja działa w tle (tylko Debian/Ubuntu); usunięcie bazy lub użytkownika jest nieodwracalne. Wygenerowane hasło zwracane jest tylko raz.

Uprawnienie: services:database

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringtakinstall, connectAuto, connectManual, disconnect, createDatabase, dropDatabase, createUser, dropUser, setPassword lub grant.
enginestringnieinstall, connectAuto, connectManual: mysql lub postgres. connectAuto tworzy konto panelu przez lokalny dostęp roota.
portintegernieconnectManual: port serwera bazy danych.
usernamestringnieconnectManual: użytkownik, jako który łączy się panel.
passwordstringnieconnectManual: hasło (wymagane). createUser, setPassword: nowe hasło 8–128 znaków; bez niego zostanie wygenerowane.
namestringnieAkcje bazodanowe: nazwa bazy lub użytkownika, litery bez znaków diakrytycznych, cyfry i podkreślenie, najwyżej 63 znaki, nie zaczyna się od cyfry.
createUserbooleanniecreateDatabase: utworzyć też użytkownika o tej samej nazwie z pełnymi prawami.
hoststringniecreateDatabase, createUser (MySQL): localhost (domyślnie) lub %. dropUser: konkretny host, w przeciwnym razie wszystkie.
databasestringniecreateUser (opcjonalne), grant (wymagane): baza, do której użytkownik dostaje pełne prawa.

Przykładowa treść

{
  "action": "createDatabase",
  "name": "shop",
  "createUser": true,
  "host": "localhost"
}

Przykładowa odpowiedź

{
  "ok": true,
  "username": "shop",
  "password": "<generated>"
}

Możliwe błędy

  • 400 Nieprawidłowe żądanie, zastrzeżona nazwa, instalacja już trwa, system nie obsługuje automatycznej instalacji lub błąd serwera bazy danych.
  • 412 Serwer bazy danych nie jest jeszcze podłączony.
  • 403 Brak uprawnienia Bazy danych.
  • 500 Błąd wewnętrzny (odpowiedź zawiera ref dla wsparcia).
  • 401AUTH_FAILED VPS odrzucił dane logowania.
  • 409HOST_KEY_CHANGED Odcisk klucza SSH VPS się zmienił (nowy w presentedHostKey); potwierdź go akcją trustHostKey.
  • 412NO_TARGET VPS nie ma jeszcze adresu ani danych dostępowych (także NO_CREDENTIALS).
  • 502UNREACHABLE VPS jest niedostępny (także TIMEOUT, FAILED).
GET/services/{id}/database/browseTabele i wiersze bazy na VPS

Bez table zwraca tabele bazy z szacunkową liczbą wierszy i rozmiarem. Z table zwraca wiersze po 50. Tylko VPS z podłączonym serwerem bazy danych.

Uprawnienie: services:database

Parametry w adresie

NazwaTypWymaganeOpis
dbstringtakNazwa bazy.
tablestringnieNazwa tabeli; bez niej zwracana jest lista tabel.
schemastringniePostgreSQL: schemat tabeli, domyślnie public.
pageintegernieStrona od 0, po 50 wierszy.

Przykładowa odpowiedź

{
  "columns": [
    "id",
    "name",
    "created_at"
  ],
  "rows": [
    [
      "1",
      "Alice",
      "2026-10-01 12:00:00"
    ],
    [
      "2",
      "Bob",
      "2026-10-03 08:30:00"
    ]
  ],
  "page": 0,
  "pageSize": 50,
  "total": 2
}

Możliwe błędy

  • 400 Nieprawidłowa nazwa lub błąd serwera bazy danych.
  • 412 Serwer bazy danych nie jest jeszcze podłączony.
  • 403 Brak uprawnienia Bazy danych.
  • 401AUTH_FAILED VPS odrzucił dane logowania.
  • 409HOST_KEY_CHANGED Odcisk klucza SSH VPS się zmienił (nowy w presentedHostKey); potwierdź go akcją trustHostKey.
  • 412NO_TARGET VPS nie ma jeszcze adresu ani danych dostępowych (także NO_CREDENTIALS).
  • 502UNREACHABLE VPS jest niedostępny (także TIMEOUT, FAILED).
POST/services/{id}/database/queryUruchomić zapytanie SQL na VPS

Uruchamia zapytanie SQL na koncie, którym panel łączy się z serwerem bazy danych VPS. Zwraca najwyżej 500 wierszy, limit 25 s. Zapytanie może też zmieniać lub usuwać dane.

Uprawnienie: services:database

Treść żądania (JSON)

NazwaTypWymaganeOpis
sqlstringtakZapytanie SQL, najwyżej 100 000 znaków.
dbstringnieBaza, w której zostanie wykonane zapytanie.

Przykładowa treść

{
  "db": "shop",
  "sql": "SELECT id, name FROM customers ORDER BY id LIMIT 10"
}

Przykładowa odpowiedź

{
  "columns": [
    "id",
    "name"
  ],
  "rows": [
    [
      "1",
      "Alice"
    ],
    [
      "2",
      "Bob"
    ]
  ],
  "rowCount": 2,
  "affectedRows": null,
  "truncated": false,
  "command": "SELECT",
  "durationMs": 7
}

Możliwe błędy

  • 400 Nieprawidłowe żądanie lub błąd serwera bazy danych.
  • 412 Serwer bazy danych nie jest jeszcze podłączony.
  • 403 Brak uprawnienia Bazy danych.
  • 429 Najwyżej 60 zapytań na minutę.
  • 401AUTH_FAILED VPS odrzucił dane logowania.
  • 409HOST_KEY_CHANGED Odcisk klucza SSH VPS się zmienił (nowy w presentedHostKey); potwierdź go akcją trustHostKey.
  • 412NO_TARGET VPS nie ma jeszcze adresu ani danych dostępowych (także NO_CREDENTIALS).
  • 502UNREACHABLE VPS jest niedostępny (także TIMEOUT, FAILED).
GET/services/{id}/filesLista folderu na serwerze

Wyświetla zawartość folderu na VPS (przez SFTP) albo na serwerze gry lub bocie Discord, najwyżej 5000 pozycji. Dla VPS dodaje dane dostępu bez hasła.

Uprawnienie: services:files

Parametry w adresie

NazwaTypWymaganeOpis
pathstringnieBezwzględna ścieżka folderu. Domyślnie / dla gier i botów, katalog domowy użytkownika dla VPS.

Przykładowa odpowiedź

{
  "path": "/home/app",
  "entries": [
    {
      "name": "logs",
      "type": "dir",
      "size": 4096,
      "mtime": 1762500000,
      "mode": "drwxr-xr-x",
      "owner": "app",
      "group": "app"
    },
    {
      "name": "config.yml",
      "type": "file",
      "size": 1832,
      "mtime": 1762489123,
      "mode": "-rw-r--r--",
      "owner": "app",
      "group": "app"
    },
    {
      "name": "current",
      "type": "link",
      "size": 12,
      "mtime": 1762400000,
      "mode": "lrwxrwxrwx",
      "owner": "app",
      "group": "app",
      "linkTarget": "/srv/releases/42",
      "linkType": "dir"
    }
  ],
  "truncated": false,
  "access": {
    "host": "203.0.113.20",
    "port": 22,
    "username": "root",
    "customCredentials": false,
    "hasDefaultPassword": true,
    "hostKey": "SHA256:AbCdEfGhIjKlMnOpQrStUvWxYz0123456789abcdefg"
  }
}

Możliwe błędy

  • 400 Nieprawidłowa ścieżka lub błąd SFTP.
  • 403 Brak uprawnienia Pliki.
  • 404 Folder na serwerze gry nie istnieje.
  • 401AUTH_FAILED VPS odrzucił dane logowania.
  • 409HOST_KEY_CHANGED Odcisk klucza SSH VPS się zmienił (nowy w presentedHostKey); potwierdź go akcją trustHostKey.
  • 412NO_TARGET VPS nie ma jeszcze adresu ani danych dostępowych (także NO_CREDENTIALS).
  • 502UNREACHABLE VPS jest niedostępny (także TIMEOUT, FAILED).
POST/services/{id}/filesTworzyć, zmieniać nazwy, edytować lub usuwać pliki

Wykonuje operację na plikach VPS, serwera gry lub bota Discord według pola action. Usuwanie jest nieodwracalne; na VPS foldery są usuwane z zawartością. Przesyłanie plików przez API nie działa, użyj SFTP.

Uprawnienie: services:files

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringtakmkdir, touch, rename, delete, chmod, write; tylko VPS i tylko właściciel: credentials, resetCredentials, trustHostKey; tylko gry i boty: compress, decompress.
pathstringniemkdir, touch, rename, chmod, write, decompress: bezwzględna ścieżka elementu.
tostringnierename: nowa ścieżka bezwzględna.
pathsstring[]niedelete: 1–200 ścieżek bezwzględnych.
modestringniechmod: uprawnienia ósemkowo, 3–4 cyfry (np. 644).
contentstringniewrite: cała nowa zawartość pliku w UTF-8, najwyżej 2 MB.
usernamestringniecredentials: użytkownik SSH dla menedżera plików (zamiast root).
passwordstringniecredentials: hasło użytkownika SSH, zapisywane w postaci zaszyfrowanej po udanym logowaniu.
portintegerniecredentials: port SSH 1–65535.
fingerprintstringnietrustHostKey: nowy odcisk klucza w postaci SHA256:….
dirstringniecompress: folder z elementami do spakowania.
namesstring[]niecompress: 1–200 nazw z folderu dir.
archiveNamestringniecompress: nazwa archiwum .tar.gz, najwyżej 120 znaków.
intostringniedecompress: here (domyślnie) lub newFolder.
folderNamestringniedecompress: nazwa nowego folderu, najwyżej 120 znaków.
localestringnieJęzyk komunikatów: cs, en, sk, pl lub de. Domyślnie cs.

Przykładowa treść

{
  "action": "write",
  "path": "/server.properties",
  "content": "motd=Můj server\nmax-players=20\n"
}

Przykładowa odpowiedź

{
  "ok": true
}

Możliwe błędy

  • 400 Nieprawidłowe żądanie, ścieżka lub nazwa; folderów systemowych oraz /proc, /sys, /dev nie można zmieniać.
  • 403 Dane dostępowe zmienia tylko właściciel; lub brak uprawnienia Pliki.
  • 409 Plik lub folder o tej nazwie już istnieje.
  • 409JOB_RUNNING Na serwerze Minecraft trwa zmiana oprogramowania lub instalacja modpacka.
  • 409ARCHIVE_BUSY Trwa inne pakowanie lub rozpakowywanie.
  • 413 Zawartość dla write przekracza 2 MB.
  • 429 Najwyżej 10 pakowań i rozpakowań na 10 minut.
  • 401AUTH_FAILED VPS odrzucił dane logowania.
  • 409HOST_KEY_CHANGED Odcisk klucza SSH VPS się zmienił (nowy w presentedHostKey); potwierdź go akcją trustHostKey.
  • 412NO_TARGET VPS nie ma jeszcze adresu ani danych dostępowych (także NO_CREDENTIALS).
  • 502UNREACHABLE VPS jest niedostępny (także TIMEOUT, FAILED).
GET/services/{id}/files/downloadPobrać plik lub odczytać tekst

Pobiera plik z VPS, serwera gry lub bota Discord. Z as=text zwraca zawartość pliku tekstowego UTF-8 jako JSON, najwyżej 1 MB.

Uprawnienie: services:files

Parametry w adresie

NazwaTypWymaganeOpis
pathstringtakBezwzględna ścieżka pliku.
asstringnietext = zwrócić zawartość jako JSON zamiast pobrania.

Przykładowa odpowiedź

{
  "path": "/server.properties",
  "content": "motd=Můj server\nmax-players=20\n",
  "eol": "lf",
  "bom": false
}

Możliwe błędy

  • 400 Nieprawidłowa ścieżka, to nie jest zwykły plik lub to /proc, /sys, /dev na VPS.
  • 413TOO_LARGE as=text: plik jest większy niż 1 MB.
  • 415BINARY as=text: plik nie jest tekstem UTF-8.
  • 403 Brak uprawnienia Pliki.
  • 401AUTH_FAILED VPS odrzucił dane logowania.
  • 409HOST_KEY_CHANGED Odcisk klucza SSH VPS się zmienił (nowy w presentedHostKey); potwierdź go akcją trustHostKey.
  • 412NO_TARGET VPS nie ma jeszcze adresu ani danych dostępowych (także NO_CREDENTIALS).
  • 502UNREACHABLE VPS jest niedostępny (także TIMEOUT, FAILED).
GET/services/{id}/liveBieżący stan i użycie serwera

Zwraca stan zasilania i bieżące użycie CPU, RAM, dysku i sieci VPS lub serwera gier. Do ciągłego monitorowania użyj live/stream; gdy stanu nie da się odczytać, odpowiedź to 200 z ok: false.

Uprawnienie: services:read

Parametry w adresie

NazwaTypWymaganeOpis
pollstringnieWartość live dla powtarzanych zapytań (co 2 s); odpowiedź pochodzi z ostatniej próbki na żywo.

Przykładowa odpowiedź

{
  "ok": true,
  "status": {
    "status": "ACTIVE",
    "details": {
      "vmStatus": "running",
      "gameState": null,
      "cpuPercent": 12.4,
      "memUsedMib": 1840,
      "memTotalMib": 4096,
      "diskUsedGb": 18.2,
      "diskTotalGb": 60,
      "netinMbps": 0.42,
      "netoutMbps": 1.1,
      "uptimeSeconds": 86400,
      "diskVolumes": [
        {
          "mountpoint": "/",
          "usedBytes": 19542261760,
          "totalBytes": 64424509440
        }
      ],
      "netInBps": 420000,
      "netOutBps": 1100000,
      "diskReadBytesPerSec": 0,
      "diskWriteBytesPerSec": 24576
    }
  }
}

Możliwe błędy

  • 403mfa_required Właściciel usługi wymaga od członków uwierzytelniania dwuskładnikowego.
  • 404 Nie znaleziono usługi.
  • 429 Ponad 240 zapytań na minutę.
GET/services/{id}/live/streamStatystyki na żywo przez SSE

Otwiera strumień Server-Sent Events z próbkami użycia VPS lub serwera gier mniej więcej co sekundę (hello, backfill, sample, disk, status, unavailable, end). Połączenie z kluczem API kończy się po około minucie zdarzeniem end, potem połącz się ponownie.

Uprawnienie: services:read

Przykładowa odpowiedź

event: hello
data: {"v":1,"kind":"vps","intervalMs":1000,"serverNow":1762508460000}

event: sample
data: {"t":1762508461000,"power":"running","vmStatus":"running","gameState":null,"cpuPercent":8.3,"memUsedMib":1840,"memTotalMib":4096,"netInBps":420000,"netOutBps":1100000,"diskReadBytesPerSec":0,"diskWriteBytesPerSec":24576,"uptimeSeconds":86401}

event: end
data: {"reason":"rotate"}

Możliwe błędy

  • 403mfa_required Właściciel usługi wymaga od członków uwierzytelniania dwuskładnikowego.
  • 404 Nie znaleziono usługi.
  • 200 Pozostałe problemy przychodzą jako zdarzenie end z powodem: unsupported, busy (z retryInMs), revoked, inactive, moved, rotate.
PATCH/services/{id}/nameZmiana nazwy usługi

Ustawia własną nazwę usługi, zwracaną potem w polu name (productName pozostaje nazwą taryfy). null lub pusty ciąg przywraca pierwotną nazwę. Tylko właściciel usługi.

Uprawnienie: services:settings

Treść żądania (JSON)

NazwaTypWymaganeOpis
namestring | nulltakNowa nazwa, maksymalnie 60 znaków.
localestringnieJęzyk komunikatów o błędach (cs, en, sk, pl, de).

Przykładowa treść

{
  "name": "Survival server"
}

Przykładowa odpowiedź

{
  "name": "Survival server"
}

Możliwe błędy

  • 400invalid Nazwa jest dłuższa niż 60 znaków lub treść zawiera inne pola.
  • 404not_allowed Usługa nie należy do Twojego konta.
GET/services/{id}/outletsStan gniazd PDU i zdarzenia

Zwraca stan gniazd rackhousingu (wł., wył., moc, prąd), czy możesz nimi sterować, oraz ostatnie 20 zdarzeń PDU. Tylko rackhousing; bez gniazd view ma wartość null.

Uprawnienie: services:read

Parametry w adresie

NazwaTypWymaganeOpis
beforestringnieID zdarzenia, od którego wczytać starsze zdarzenia (stronicowanie).

Przykładowa odpowiedź

{
  "view": {
    "canControl": true,
    "controlBlocked": null,
    "measuredAt": "2026-11-07T09:41:00.000Z",
    "stale": false,
    "outlets": [
      {
        "n": 3,
        "state": "on",
        "pending": false,
        "powerW": 120,
        "currentA": 0.52
      }
    ],
    "events": [
      {
        "id": "clx9k2m4p0001",
        "at": "2026-11-06T18:12:00.000Z",
        "kind": "command",
        "severity": "info",
        "outlet": 3,
        "action": "reboot",
        "result": "ok",
        "actorType": "customer",
        "actor": "vy",
        "serviceRef": "#A1B2C3",
        "message": "Restart zásuvky 3 — provedeno."
      }
    ],
    "eventsMore": false,
    "eventsAvailable": true
  }
}

Możliwe błędy

  • 400 Usługa nie jest rackhousingiem.
  • 404 Nie znaleziono usługi.
POST/services/{id}/outletsWłącz, wyłącz lub zrestartuj gniazda

Wysyła polecenie do gniazd PDU należących do Twojej usługi rackhousingu. Działa tylko dla aktywnej usługi, dla której pomoc techniczna włączyła sterowanie; limit 6 na minutę na konto i 5 na minutę na usługę.

Uprawnienie: services:power

Treść żądania (JSON)

NazwaTypWymaganeOpis
outletsnumber[]takNumery gniazd 1–48 (od 1 do 48 pozycji), tylko gniazda tej usługi.
commandstringtakon, off, reboot lub cancel (anuluje oczekujące polecenie).

Przykładowa treść

{
  "outlets": [
    3,
    4
  ],
  "command": "reboot"
}

Przykładowa odpowiedź

{
  "ok": true,
  "outlets": [
    {
      "n": 3,
      "state": "on",
      "pending": true
    },
    {
      "n": 4,
      "state": "on",
      "pending": true
    }
  ]
}

Możliwe błędy

  • 400not_yours Któreś gniazdo nie należy do tej usługi. Bez kodu: nieprawidłowa treść żądania.
  • 403not_allowed Sterowanie gniazdami nie jest włączone dla usługi.
  • 409inactive Usługa nie jest aktywna. Kod no_config: PDU jest teraz niedostępne.
  • 429 Przekroczono limit żądań.
  • 502pdu_failed PDU nie wykonało polecenia.
GET/services/{id}/powerZużycie energii w rackhousingu

Zwraca pobór mocy gniazd w porównaniu z przydzieloną mocą, kWh za bieżący i poprzedni miesiąc oraz zestawienie dzienne. Tylko rackhousing, dane z ostatniego odczytu PDU; bez gniazd lub danych view ma wartość null.

Uprawnienie: services:read

Przykładowa odpowiedź

{
  "view": {
    "contractedW": 500,
    "currentW": 212,
    "measuredAt": "2026-11-07T09:41:00.000Z",
    "stale": false,
    "monthKwh": 38.4,
    "lastMonthKwh": 151.2,
    "month": {
      "y": 2026,
      "m": 11,
      "days": 30,
      "today": 7
    },
    "daily": [
      5.1,
      5.3,
      5.4,
      5.6,
      5.5,
      5.7,
      5.8,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null,
      null
    ],
    "outlets": [
      {
        "n": 3,
        "powerW": 120,
        "monthKwh": 21.6
      },
      {
        "n": 4,
        "powerW": 92,
        "monthKwh": 16.8
      }
    ]
  }
}

Możliwe błędy

  • 400 Usługa nie jest rackhousingiem.
  • 404 Usługa nie istnieje lub nie masz do niej dostępu.
POST/services/{id}/powerWłącz, wyłącz lub zrestartuj serwer

Włącza, wyłącza lub restartuje VPS albo serwer gier (także bota). Tylko dla aktywnej usługi, najwyżej 5 żądań na minutę na usługę; status rozliczeniowy się nie zmienia.

Uprawnienie: services:power

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringtakstart, stop lub restart.

Przykładowa treść

{
  "action": "restart"
}

Przykładowa odpowiedź

{
  "ok": true
}

Możliwe błędy

  • 400 Brak lub nieprawidłowa wartość action.
  • 404 Nie znaleziono usługi lub sterowanie zasilaniem nie jest dla niej dostępne (np. rackhousing, web).
  • 409 Usługa nie jest aktywna, trwa zmiana oprogramowania serwera lub nadal trwa przywracanie z kopii.
  • 429 Ponad 5 żądań na minutę dla usługi.
  • 502 Nie udało się wykonać akcji, spróbuj ponownie.
GET/services/{id}/rackhousingPrzegląd rackhousingu

Zwraca położenie w szafie, wysokość, przydzieloną moc, porty ze stanem łącza i adresy IP usługi rackhousingu. Stan portów pochodzi z ostatniego odczytu; zapytanie niczego nie zmienia.

Uprawnienie: services:read

Przykładowa odpowiedź

{
  "view": {
    "site": "Praha",
    "rack": "R12",
    "unitRange": "U20–U21",
    "heightU": 2,
    "powerW": 500,
    "ports1g": 1,
    "ports10g": 1,
    "ports": [
      {
        "port": "port 3",
        "speed": "1g",
        "speedText": "1 Gbit",
        "status": "up"
      },
      {
        "port": "port 4",
        "speed": "10g",
        "speedText": "10 Gbit",
        "status": "down"
      }
    ],
    "ipv4": [
      {
        "address": "203.0.113.10",
        "prefix": 29,
        "gateway": "203.0.113.9"
      }
    ],
    "ipv6": "2001:db8:100::/48",
    "equipment": "1× server 2U",
    "polledAt": "2026-11-07T09:40:00.000Z"
  }
}

Możliwe błędy

  • 400 Usługa nie jest rackhousingiem.
  • 404 Nie znaleziono usługi.
GET/services/{id}/sftpDane logowania SFTP

Zwraca adres, port i nazwę użytkownika SFTP serwera gier lub bota; hasło nie jest zwracane. Członek udostępnionej usługi dostaje tylko owner: false. Funkcja nie jest jeszcze uruchomiona i zwraca 404.

Uprawnienie: services:secrets

Parametry w adresie

NazwaTypWymaganeOpis
langstringnieen dla komunikatów po angielsku, w przeciwnym razie po czesku.

Przykładowa odpowiedź

{
  "owner": true,
  "host": "203.0.113.40",
  "port": 2022,
  "username": "user.1a2b3c4d",
  "canSetPassword": true
}

Możliwe błędy

  • 404 SFTP nie jest jeszcze uruchomione lub nie znaleziono usługi.
  • 400 Usługa nie jest serwerem gier ani botem.
  • 502 Nie udało się wczytać danych.
POST/services/{id}/sftpUstaw hasło SFTP

Ustawia podane hasło SFTP serwera gier lub bota; hasło nie jest nigdzie zapisywane, a właściciel dostaje e-mail. Tylko właściciel, limit 5 na godzinę, potwierdzenie z portalu zastępuje tu uprawnienie services:secrets. Funkcja nie jest jeszcze uruchomiona i zwraca 404.

Uprawnienie: services:secrets

Parametry w adresie

NazwaTypWymaganeOpis
langstringnieen dla komunikatów po angielsku, w przeciwnym razie po czesku.

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringtakZawsze setPassword.
passwordstringtakNowe hasło, 10–200 znaków, nie popularne ani nie z wycieku.

Przykładowa treść

{
  "action": "setPassword",
  "password": "example-Sftp-Pass-2026"
}

Przykładowa odpowiedź

{
  "ok": true,
  "username": "user.1a2b3c4d"
}

Możliwe błędy

  • 400weak_password Hasło nie spełnia wymagań lub treść jest nieprawidłowa.
  • 403insufficient_scope Kluczowi brakuje uprawnienia services:secrets. Kod not_owner: nie jesteś właścicielem.
  • 404 SFTP nie jest jeszcze uruchomione.
  • 409admin_user SFTP dla tej usługi skonfiguruje pomoc techniczna. Inne kody: email_mismatch, foreign_server, inactive.
  • 429 Ponad 5 prób na godzinę.
  • 502failed Nie udało się ustawić hasła. Kod unavailable: usługa jest teraz niedostępna.

VPS i rackhousing

GET/services/{id}/backupsLista kopii zapasowych VPS

Zwraca kopie VPS ze wszystkich magazynów, tylko z okresu obecnego właściciela. Wynik jest buforowany przez 20 s, limit 10 zapytań na minutę; partial: true oznacza, że któryś magazyn nie odpowiedział. Kopia i magazyn mają nieprzejrzyste id (storageId kopii = id magazynu w storages); id kopii wyślij do backups/restore.

Uprawnienie: services:backups

Przykładowa odpowiedź

{
  "backups": [
    {
      "id": "Q2xP7rT0aN4mVb8sKe1wYg",
      "storageId": "h5Jd9LkQ2pWm0ZcR7tUv3A",
      "storageLabel": "Backup 1",
      "sizeBytes": 8589934592,
      "createdAt": 1762394400,
      "name": "vps-000001"
    }
  ],
  "storages": [
    {
      "id": "h5Jd9LkQ2pWm0ZcR7tUv3A",
      "label": "Backup 1",
      "enabled": true
    },
    {
      "id": "Xo3bN6qE8yTf1GsD4lHk9w",
      "label": "Backup 2",
      "enabled": false
    }
  ]
}

Możliwe błędy

  • 403 Brak uprawnienia Kopie zapasowe w udostępnionej usłudze.
  • 409 Usługa nie jest aktywna lub trwa przywracanie z kopii.
  • 412NOT_PROVISIONED VPS nie jest jeszcze gotowy.
  • 429 Ponad 10 zapytań na minutę.
  • 502 Nie udało się wczytać kopii.
POST/services/{id}/backups/restorePrzywróć VPS z kopii zapasowej

Twardo wyłącza VPS i nadpisuje jego dysk zawartością wybranej kopii; nieodwracalne. Przy większych dyskach przywracanie kończy się w tle (pending: true), a VPS można włączyć po jego zakończeniu. Limit 3 na minutę na usługę.

Uprawnienie: services:backups

Treść żądania (JSON)

NazwaTypWymaganeOpis
idstringtakid kopii z listy backups.

Przykładowa treść

{
  "id": "Q2xP7rT0aN4mVb8sKe1wYg"
}

Przykładowa odpowiedź

{
  "ok": true,
  "pending": true,
  "message": "Obnova ze zálohy běží. VPS půjde zapnout, až skončí (u větších disků i několik minut)."
}

Możliwe błędy

  • 400 Brak id.
  • 403 Kopia nie należy do tej usługi lub już nie istnieje.
  • 409 Usługa nie jest aktywna lub trwa już inne przywracanie.
  • 429 Ponad 3 próby na minutę.
  • 502 Nie udało się uruchomić lub dokończyć przywracania.
GET/services/{id}/ddosDostępność ochrony Anti-DDoS

Informuje, czy dla adresów IP VPS dostępne są ustawienia ochrony Anti-DDoS. Na razie zawsze zwraca available: false; w udostępnionej usłudze członek potrzebuje uprawnienia Sieć.

Uprawnienie: services:read

Przykładowa odpowiedź

{
  "available": false
}

Możliwe błędy

  • 400 Usługa nie jest VPS.
  • 409 Usługa nie jest aktywna.
GET/services/{id}/firewallReguły zapory VPS

Zwraca ustawienia zapory VPS i wszystkie reguły, także zarządzane (pole managed), których nie można zmieniać. Wartość digest wyślij przy edycji reguły.

Uprawnienie: services:firewall

Przykładowa odpowiedź

{
  "digest": "3f2a9c0d1e5b7a8c4d6e2f1a0b9c8d7e6f5a4b3c",
  "baseline": true,
  "enabled": true,
  "ipfilter": true,
  "macfilter": true,
  "policyIn": "DROP",
  "policyOut": "ACCEPT",
  "inboundDefault": "accept",
  "scannerBlock": true,
  "ipfilterEntries": [
    "203.0.113.25",
    "2001:db8:10::/64"
  ],
  "rules": [
    {
      "pos": 0,
      "managed": "censys",
      "type": "in",
      "action": "DROP",
      "proto": "",
      "dport": "",
      "sport": "",
      "source": "+dc/censys",
      "dest": "",
      "macro": "",
      "comment": "",
      "enable": true
    },
    {
      "pos": 1,
      "managed": null,
      "type": "in",
      "action": "DROP",
      "proto": "tcp",
      "dport": "3306",
      "sport": "",
      "source": "",
      "dest": "",
      "macro": "",
      "comment": "MySQL ven ne",
      "enable": true
    },
    {
      "pos": 2,
      "managed": "allowIn",
      "type": "in",
      "action": "ACCEPT",
      "proto": "",
      "dport": "",
      "sport": "",
      "source": "",
      "dest": "+guest/ipfilter-net0",
      "macro": "",
      "comment": "",
      "enable": true
    }
  ]
}

Możliwe błędy

  • 403 Brak uprawnienia Zapora w udostępnionej usłudze.
  • 409 Usługa nie jest aktywna lub nie można teraz wykonać akcji.
  • 412 VPS nie jest jeszcze gotowy.
  • 502 Nie udało się wczytać zapory.
POST/services/{id}/firewallEdytuj reguły zapory VPS

Dodaje, edytuje, włącza lub wyłącza, usuwa albo przenosi własną regułę, przełącza domyślny ruch przychodzący lub stosuje zalecane ustawienia. Akcje na pozycji wymagają digest z GET; najwyżej 50 własnych reguł, komunikaty są po czesku.

Uprawnienie: services:firewall

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringtakadd, update, toggle, delete, move, setInbound lub applyBaseline.
posnumbernieDla update, toggle, delete i move: pozycja własnej reguły z GET.
digeststringnieDla update, toggle, delete i move: digest z GET.
ruleobjectnieDla add i update: type (in, out), action (ACCEPT, DROP, REJECT), proto ("", tcp, udp, icmp, ipv6-icmp), dport, sport (np. 22, 80,443, 25565:25570; tylko TCP i UDP), source, dest (IP lub zakres, najwyżej 10), comment (maks. 100), enable.
enablebooleannieDla toggle: włącz lub wyłącz regułę.
directionstringnieDla move: up lub down (tylko między własnymi regułami).
valuestringnieDla setInbound: accept lub drop (domyślny ruch przychodzący).

Przykładowa treść

{
  "action": "add",
  "rule": {
    "type": "in",
    "action": "ACCEPT",
    "proto": "tcp",
    "dport": "22",
    "source": "198.51.100.0/24",
    "comment": "SSH z kanceláře"
  }
}

Przykładowa odpowiedź

{
  "ok": true,
  "firewall": {
    "digest": "9b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c",
    "baseline": true,
    "enabled": true,
    "ipfilter": true,
    "macfilter": true,
    "policyIn": "DROP",
    "policyOut": "ACCEPT",
    "inboundDefault": "accept",
    "scannerBlock": true,
    "ipfilterEntries": [
      "203.0.113.25"
    ],
    "rules": []
  }
}

Możliwe błędy

  • 400 Nieprawidłowa treść lub reguła (port, adres, protokół) albo ponad 50 własnych reguł.
  • 403 Reguły zarządzanej nie można zmienić lub brakuje uprawnienia Zapora.
  • 409 Zapora zmieniła się w międzyczasie (wczytaj digest ponownie), usługa nie jest aktywna, trwa przywracanie lub zalecanych ustawień nie można zastosować.
  • 502 Nie udało się zapisać zmiany.
GET/services/{id}/historyHistoria użycia VPS

Zwraca przebieg CPU, RAM, sieci i dysku VPS za wybrany okres (najwyżej 300 punktów), szczyty CPU oraz transfer za 30 dni i od początku miesiąca. Wynik jest buforowany przez 20 s, limit 30 zapytań na minutę.

Uprawnienie: services:read

Parametry w adresie

NazwaTypWymaganeOpis
rangestringniehour, day, week, month lub year. Domyślnie day.
langstringnieen dla komunikatów błędów po angielsku, w przeciwnym razie po czesku.

Przykładowa odpowiedź

{
  "range": "day",
  "points": [
    {
      "t": 1762473600,
      "cpu": 6.2,
      "ram": 44.8,
      "netIn": 52000,
      "netOut": 138000,
      "diskRead": 0,
      "diskWrite": 20480
    }
  ],
  "cpuPeak": [
    {
      "t": 1762473600,
      "cpu": 31.5
    }
  ],
  "cpu": {
    "avg": 7.1,
    "max": 64.2
  },
  "transfer30d": {
    "inBytes": 18253611008,
    "outBytes": 42949672960
  },
  "transferMonth": {
    "inBytes": 4294967296,
    "outBytes": 9663676416
  }
}

Możliwe błędy

  • 400 Usługa nie jest VPS.
  • 409 VPS nie jest aktywny ani zawieszony albo nie można go teraz zweryfikować.
  • 429 Ponad 30 zapytań na minutę.
  • 502 Nie można teraz wczytać statystyk.
GET/services/{id}/installStan instalacji VPS

Zwraca fazę instalacji lub ponownej instalacji VPS (image, create, start, finish, done) i czy nadal trwa. Przydatne do odpytywania po ponownej instalacji, limit 90 zapytań na minutę.

Uprawnienie: services:read

Przykładowa odpowiedź

{
  "status": "ACTIVE",
  "phase": "finish",
  "active": true,
  "source": "reinstall",
  "restarting": false,
  "running": true,
  "reboot": true,
  "failed": false
}

Możliwe błędy

  • 400 Usługa nie jest VPS.
  • 404 Nie znaleziono usługi.
  • 429 Ponad 90 zapytań na minutę.
GET/services/{id}/isoObrazy ISO i podłączone ISO

Zwraca katalog ISO, Twoje własne ISO, limity, aktualnie podłączone ISO z ustawieniem rozruchu i stan ostatniej operacji. Tylko właściciel VPS.

Uprawnienie: services:settings

Przykładowa odpowiedź

{
  "available": true,
  "catalog": [
    {
      "id": "clx9a0iso0001",
      "kind": "catalog",
      "name": "Debian 13 netinst",
      "osFamily": "debian",
      "sizeBytes": 754974720,
      "createdAt": "2026-10-20T08:00:00.000Z",
      "lastUsedAt": null,
      "expiresAt": null
    }
  ],
  "own": [
    {
      "id": "clx9a0iso0002",
      "kind": "custom",
      "name": "Rescue tools",
      "osFamily": null,
      "sizeBytes": 524288000,
      "createdAt": "2026-11-02T12:00:00.000Z",
      "lastUsedAt": "2026-11-03T09:00:00.000Z",
      "expiresAt": "2026-12-03T09:00:00.000Z"
    }
  ],
  "limits": {
    "count": 2,
    "maxBytes": 10737418240,
    "retentionDays": 30
  },
  "status": {
    "attached": false,
    "bootFromIso": false,
    "isoId": null,
    "name": null
  },
  "job": null
}

Możliwe błędy

  • 400 Usługa nie jest VPS.
  • 403 Nie jesteś właścicielem usługi.
  • 409 Usługa nie jest aktywna.
POST/services/{id}/isoDodaj, podłącz lub odłącz ISO

W zależności od action dodaje własne ISO z linku HTTPS, usuwa je, podłącza ISO do VPS, przełącza rozruch lub wysuwa ISO. Podłączenie działa w tle (plik jest najpierw pobierany); tylko właściciel, najwyżej 2 własne ISO do 10 GB.

Uprawnienie: services:settings

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringtakadd, delete, attach, boot lub detach.
namestringnieDla add: nazwa ISO (maks. 80 znaków), w przeciwnym razie z pliku.
urlstringnieDla add: publiczny link https:// do pliku ISO podający jego rozmiar.
isoIdstringnieDla delete i attach: ID ISO z GET.
bootbooleannieDla attach i boot: true = rozruch z ISO, w przeciwnym razie z dysku.

Przykładowa treść

{
  "action": "attach",
  "isoId": "clx9a0iso0001",
  "boot": true
}

Przykładowa odpowiedź

{
  "ok": true,
  "job": {
    "id": "clx9r1t7w0004",
    "kind": "iso",
    "state": "running",
    "step": null,
    "startedAt": "2026-11-07T10:00:00.000Z",
    "updatedAt": "2026-11-07T10:00:00.000Z"
  }
}

Możliwe błędy

  • 400url Linku nie można użyć (nie HTTPS, sieć niepubliczna, ponad 10 GB, brak rozmiaru, to nie plik). Inne kody: limit, attached; bez kodu nieprawidłowa action.
  • 404not_found Nie znaleziono ISO.
  • 409unavailable Obrazy ISO są teraz niedostępne. Bez kodu: na VPS trwa inna operacja.
  • 429 Ponad 10 dodanych ISO dziennie.
  • 502 Operacja się nie powiodła.
GET/services/{id}/private-networkSieci prywatne w lokalizacji VPS

Zwraca Twoje sieci prywatne w lokalizacji VPS, ich członków, limity i stan tego VPS w każdej sieci. Tylko właściciel VPS.

Uprawnienie: services:network

Przykładowa odpowiedź

{
  "enabled": true,
  "scope": "location",
  "maxNetworks": 5,
  "maxMembers": 20,
  "priceCzk": null,
  "networks": [
    {
      "id": "clx9p7net0001",
      "name": "zalohy",
      "cidr": "10.20.0.0/24",
      "prefix": 24,
      "createdAt": "2026-10-18T08:00:00.000Z",
      "members": [
        {
          "serviceId": "clx9svc000001",
          "shortId": "#000001",
          "ipv4": "203.0.113.25",
          "address": "10.20.0.1",
          "state": "active",
          "isThis": true,
          "own": true
        }
      ],
      "me": {
        "address": "10.20.0.1",
        "mac": "BC:24:11:00:00:01",
        "nicIndex": 1,
        "state": "active",
        "cloudInit": false,
        "failed": false
      },
      "canDelete": false
    }
  ]
}

Możliwe błędy

  • 403 Nie jesteś właścicielem usługi.
  • 409 Usługa nie jest aktywna.
  • 503unavailable Sieci prywatne są teraz niedostępne.
POST/services/{id}/private-networkUtwórz, podłącz lub odłącz sieć

Tworzy sieć prywatną, podłącza lub odłącza ten VPS albo usuwa pustą sieć. Podłączenie wymaga zalecanych ustawień zapory; gdy pendingRestart ma wartość true, zmiana zadziała po restarcie VPS.

Uprawnienie: services:network

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringtakcreate, attach, detach lub delete.
namestringnieDla create: nazwa sieci, 1–40 znaków (litery, cyfry, spacja, . _ -).
cidrstringnieDla create: prywatny zakres od /16 do /29 zaczynający się adresem sieci, np. 10.20.0.0/24.
networkIdstringnieDla attach, detach i delete: ID sieci z GET.
addressstring|nullnieDla attach: adres VPS w sieci; puste = pierwszy wolny.
cloudInitbooleannieDla attach: true = zapisz adres także w cloud-init VPS.

Przykładowa treść

{
  "action": "attach",
  "networkId": "clx9p7net0001",
  "address": "10.20.0.5"
}

Przykładowa odpowiedź

{
  "ok": true,
  "address": "10.20.0.5",
  "mac": "BC:24:11:00:00:05",
  "pendingRestart": true,
  "view": {
    "enabled": true,
    "scope": "location",
    "maxNetworks": 5,
    "maxMembers": 20,
    "priceCzk": null,
    "networks": []
  }
}

Możliwe błędy

  • 400invalid_request Nieprawidłowa treść. Inne kody: name_invalid, cidr_invalid, address_invalid, address_outside, address_reserved.
  • 404network_not_found Nie znaleziono sieci. Kod not_member: VPS nie jest w sieci.
  • 409firewall_required Najpierw zastosuj zalecane ustawienia zapory. Inne kody: cidr_overlap, limit_networks, limit_members, address_taken, network_full, not_empty, detaching, other_location, other_node, no_slot, vm_locked, disabled, no_vlan.
  • 412vm_not_ready VPS nie jest jeszcze gotowy.
  • 502apply_failed Nie udało się dokończyć zmiany.
  • 503unavailable Sieci prywatne są teraz niedostępne.
GET/services/{id}/rdnsOdwrotny DNS adresów VPS

Zwraca rekordy PTR adresów IP VPS: bieżącą, domyślną i własną wartość oraz zakresy IPv6 usługi. W udostępnionej usłudze członek potrzebuje uprawnienia Sieć.

Uprawnienie: services:network

Przykładowa odpowiedź

{
  "configured": true,
  "error": null,
  "entries": [
    {
      "ip": "203.0.113.25",
      "family": 4,
      "current": "mail.example.com",
      "default": "25.113.0.203.example.net",
      "custom": "mail.example.com"
    },
    {
      "ip": "2001:db8:10::2",
      "family": 6,
      "current": null,
      "default": "vps.example.net",
      "custom": null
    }
  ],
  "ranges": [
    {
      "cidr": "2001:db8:10::/64",
      "family": 6
    }
  ],
  "vmIpv6": "2001:db8:10::2"
}

Możliwe błędy

  • 400 Usługa nie jest VPS.
  • 403 Brak uprawnienia Sieć w udostępnionej usłudze.
  • 409 Usługa nie jest aktywna.
POST/services/{id}/rdnsUstaw lub przywróć rekord PTR

Ustawia własny odwrotny DNS dla adresu IP przydzielonego VPS lub przy hostname null przywraca rekord domyślny. Najwyżej 32 własne rekordy, limit 20 zmian na minutę; komunikaty są po czesku.

Uprawnienie: services:network

Treść żądania (JSON)

NazwaTypWymaganeOpis
ipstringtakAdres IPv4 lub IPv6 usługi (także z jej zakresu IPv6).
hostnamestring|nulltakNazwa hosta, np. mail.example.com (maks. 253 znaki); null lub puste = rekord domyślny.

Przykładowa treść

{
  "ip": "203.0.113.25",
  "hostname": "mail.example.com"
}

Przykładowa odpowiedź

{
  "ok": true,
  "ip": "203.0.113.25",
  "ptr": "mail.example.com",
  "isDefault": false
}

Możliwe błędy

  • 400 Nieprawidłowa nazwa hosta, domena odwrotna lub zastrzeżona albo ponad 32 własne rekordy.
  • 403 Adres IP nie należy do tej usługi lub brakuje uprawnienia Sieć.
  • 502 Nie udało się teraz zapisać rDNS.
GET/services/{id}/reinstallSystemy do ponownej instalacji VPS

Zwraca systemy, które można zainstalować na VPS, obecny system, czas ostatniej ponownej instalacji i stan ostatniej operacji. Tylko właściciel usługi.

Uprawnienie: services:read

Przykładowa odpowiedź

{
  "options": [
    {
      "key": "ubuntu-2404",
      "label": "Ubuntu 24.04 LTS"
    },
    {
      "key": "debian-13",
      "label": "Debian 13"
    }
  ],
  "job": {
    "id": "clx9r1t7w0002",
    "kind": "reinstall",
    "state": "done",
    "step": null,
    "startedAt": "2026-11-01T10:00:00.000Z",
    "updatedAt": "2026-11-01T10:06:12.000Z",
    "finishedAt": "2026-11-01T10:06:12.000Z",
    "error": null
  },
  "os": "ubuntu-2404",
  "reinstalledAt": "2026-11-01T10:06:12.000Z"
}

Możliwe błędy

  • 400 Usługa nie jest VPS.
  • 403 Nie jesteś właścicielem usługi.
  • 409 Usługa nie jest aktywna.
POST/services/{id}/reinstallZainstaluj ponownie VPS

Kasuje dysk VPS i instaluje wybrany system; działa w tle, postęp śledź przez install. Nowe hasło root jest tylko w tej odpowiedzi. Tylko właściciel, najwyżej 3 razy dziennie; potwierdzenie z portalu zastępuje tu uprawnienie services:secrets.

Uprawnienie: services:secrets

Treść żądania (JSON)

NazwaTypWymaganeOpis
osstringtakKlucz systemu z GET, np. ubuntu-2404 lub debian-13.
sshKeysstringniePubliczne klucze SSH, jeden w wierszu, najwyżej 10 (ssh-ed25519, ssh-rsa, ecdsa-…).

Przykładowa treść

{
  "os": "debian-13",
  "sshKeys": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExampleKeyExampleKeyExampleKeyExample user@laptop"
}

Przykładowa odpowiedź

{
  "started": true,
  "password": "example-Root-Pass-123",
  "job": {
    "id": "clx9r1t7w0003",
    "kind": "reinstall",
    "state": "running",
    "step": null,
    "startedAt": "2026-11-07T10:00:00.000Z",
    "updatedAt": "2026-11-07T10:00:00.000Z"
  }
}

Możliwe błędy

  • 400 Brak lub nieprawidłowy system, nieprawidłowy klucz SSH lub ponad 10 kluczy.
  • 403insufficient_scope Kluczowi brakuje uprawnienia services:secrets lub nie jesteś właścicielem.
  • 409 Trwa inna operacja, VPS jest w trybie ratunkowym, węzeł jest zajęty lub ponowna instalacja jest niedostępna.
  • 429 Ponowna instalacja odbyła się już 3 razy w ciągu ostatnich 24 godzin.
  • 502 Nie udało się uruchomić ponownej instalacji.
POST/services/{id}/reveal-secretPokaż zapisane hasło root VPS

Zwraca zapisane hasło root VPS z czasu utworzenia, ponownej instalacji lub ostatniej zmiany. Każde wyświetlenie trafia do audytu, a właściciel dostaje e-mail; limit 5 na 10 minut, potwierdzenie z portalu zastępuje tu uprawnienie services:secrets.

Uprawnienie: services:secrets

Przykładowa odpowiedź

{
  "password": "example-Root-Pass-789"
}

Możliwe błędy

  • 403insufficient_scope Kluczowi brakuje uprawnienia services:secrets. Bez kodu: brak uprawnienia w udostępnionej usłudze.
  • 404 Nie znaleziono usługi lub nie ma zapisanego hasła.
  • 429 Ponad 5 wyświetleń w ciągu 10 minut.
  • 503 Nie można teraz pokazać hasła, spróbuj ponownie.
GET/services/{id}/root-passwordCzy można ustawić nowe hasło root?

Sprawdza, czy hasło root VPS można teraz zmienić przez qemu-guest-agent, a jeśli nie, zwraca powód. Wynik jest buforowany przez 60 s.

Uprawnienie: services:secrets

Parametry w adresie

NazwaTypWymaganeOpis
langstringnieen dla komunikatów po angielsku, w przeciwnym razie po czesku.

Przykładowa odpowiedź

{
  "available": false,
  "reason": "stopped",
  "message": "VPS je vypnutá. Heslo jde nastavit jen u běžící VPS."
}

Możliwe błędy

  • 400 Usługa nie jest VPS.
  • 403 Brak uprawnienia Dane poufne w udostępnionej usłudze.
  • 409 Usługa nie jest aktywna.
POST/services/{id}/root-passwordUstaw nowe hasło root VPS

Generuje nowe hasło root, ustawia je w działającym VPS przez qemu-guest-agent i zwraca tylko w tej odpowiedzi; właściciel dostaje e-mail. Limit 3 na godzinę na usługę i 10 dziennie na konto; potwierdzenie z portalu zastępuje tu uprawnienie services:secrets.

Uprawnienie: services:secrets

Parametry w adresie

NazwaTypWymaganeOpis
langstringnieen dla komunikatów po angielsku, w przeciwnym razie po czesku.

Przykładowa odpowiedź

{
  "password": "example-Root-Pass-456"
}

Możliwe błędy

  • 403insufficient_scope Kluczowi brakuje uprawnienia services:secrets. Bez kodu: brak uprawnienia w udostępnionej usłudze.
  • 409 Nie można teraz ustawić hasła; pole reason: agent_down, stopped, rescue, command_disabled, not_configured, no_permission lub busy.
  • 429 Przekroczono limit 3 na godzinę lub 10 dziennie.
  • 502 Agent nie ustawił hasła, stare nadal działa (reason failed lub unavailable).

Serwery gier

GET/services/{id}/alertsUstawienia powiadomień o awarii i przestoju

Zwraca ustawienia powiadomień serwera gry lub bota Discord (e-mail, webhook Discord, zdarzenia) i historię ostatnich powiadomień. Adres webhooka nigdy nie jest zwracany, tylko jego końcówka. Tylko dla właściciela.

Uprawnienie: services:settings

Parametry w adresie

NazwaTypWymaganeOpis
langstringnieJęzyk komunikatów: en, w przeciwnym razie cs.

Przykładowa odpowiedź

{
  "settings": {
    "enabled": true,
    "email": true,
    "discord": {
      "hint": "discord.com/api/webhooks/…ab12",
      "disabled": false
    },
    "events": {
      "crash": true,
      "down": true,
      "recovered": true,
      "cleanExit": false,
      "node": true
    },
    "includeLog": true,
    "updatedAt": "2026-11-02T18:20:00.000Z"
  },
  "history": [
    {
      "id": "alr_01",
      "at": "2026-11-06T21:14:03.000Z",
      "kind": "crash",
      "exitCode": 137,
      "oom": true,
      "reason": null,
      "cause": null,
      "suppressed": null,
      "channels": {
        "email": "sent",
        "discord": "sent"
      },
      "extra": 0,
      "downtimeMin": null
    }
  ]
}

Możliwe błędy

  • 403 Tylko dla właściciela usługi.
POST/services/{id}/alertsZapisać, przetestować lub wyłączyć powiadomienia

Zmienia ustawienia powiadomień według pola action. Nowy webhook Discord zapisuje się tylko wtedy, gdy dotrze do niego wiadomość testowa. Treść nie może zawierać innych pól. Tylko dla właściciela.

Uprawnienie: services:settings

Parametry w adresie

NazwaTypWymaganeOpis
langstringnieJęzyk komunikatów: en, w przeciwnym razie cs.

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringtaksave, test (wiadomość testowa na zapisany webhook, raz na minutę i 5 razy na godzinę), removeDiscord lub disable.
enabledbooleanniesave: włączyć monitorowanie.
emailbooleanniesave: wysyłać powiadomienia e-mailem do właściciela.
eventsobjectniesave: które zdarzenia zgłaszać, klucze crash, down, recovered, cleanExit, node (boolean).
includeLogbooleanniesave: dołączyć koniec logu.
webhookstringniesave: nowy adres webhooka Discord (https://discord.com/api/webhooks/…), najwyżej 300 znaków.

Przykładowa treść

{
  "action": "save",
  "enabled": true,
  "email": true,
  "events": {
    "crash": true,
    "down": true,
    "recovered": true,
    "cleanExit": false,
    "node": true
  },
  "includeLog": true
}

Przykładowa odpowiedź

{
  "ok": true,
  "settings": {
    "enabled": true,
    "email": true,
    "discord": null,
    "events": {
      "crash": true,
      "down": true,
      "recovered": true,
      "cleanExit": false,
      "node": true
    },
    "includeLog": true,
    "updatedAt": "2026-11-07T10:05:00.000Z"
  }
}

Możliwe błędy

  • 400bad-request Nieprawidłowa treść lub dodatkowe pola.
  • 400webhook Adres nie jest webhookiem Discord.
  • 400test-failed Nie udało się dostarczyć wiadomości testowej.
  • 400no-webhook test: brak zapisanego webhooka.
  • 400no-channel Włączone monitorowanie wymaga e-maila lub webhooka.
  • 429rate Wiadomość testową można wysłać raz na minutę i 5 razy na godzinę.
  • 500failed Nie udało się zapisać ustawień.
  • 403 Tylko dla właściciela usługi.
GET/services/{id}/gameSieć, bazy danych, kopie lub uruchamianie

Zwraca jedną część ustawień serwera gry lub bota Discord według parametru section. Hasła do baz danych i tajne wartości zmiennych otrzymuje tylko właściciel i członek z uprawnieniem Dane poufne.

Uprawnienie: services:settings

Parametry w adresie

NazwaTypWymaganeOpis
sectionstringtaknetwork (porty i SFTP), databases (bazy danych), backups (kopie zapasowe i dodatek kopii) lub startup (polecenie i zmienne uruchamiania).
localestringnieJęzyk komunikatów o odmowie dostępu: cs, en, sk, pl lub de.

Przykładowa odpowiedź

{
  "allocations": [
    {
      "id": 1201,
      "ip": "203.0.113.10",
      "port": 25565,
      "notes": null,
      "primary": true
    },
    {
      "id": 1202,
      "ip": "203.0.113.10",
      "port": 25566,
      "notes": "Dynmap",
      "primary": false
    }
  ],
  "limit": 3,
  "sftp": {
    "ip": "203.0.113.10",
    "port": 2022
  }
}

Możliwe błędy

  • 400 Brak sekcji lub sekcja jest nieznana.
  • 403 Brak uprawnienia do tej sekcji (Sieć, Bazy danych, Kopie zapasowe lub Ustawienia).
  • 412 Serwer nie jest jeszcze dostępny w panelu gier.
POST/services/{id}/gameBazy danych, kopie, zmienne, porty i reinstalacja

Wykonuje jedną akcję na serwerze gry lub bocie Discord według pola action. Przywrócenie i usunięcie kopii, usunięcie bazy danych i reinstalacja są nieodwracalne; reinstalacja zatrzymuje serwer i nadpisuje pliki.

Uprawnienie: services:settings

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringtakcreateDatabase, rotateDatabasePassword, deleteDatabase, createBackup, restoreBackup, deleteBackup, lockBackup (blokuje lub odblokowuje), setVariable, reinstall, addAllocation lub removeAllocation.
namestringniecreateDatabase: nazwa bazy, 1–48 znaków (litery, cyfry, podkreślenie), wymagane. createBackup: opcjonalna nazwa kopii, najwyżej 191 znaków.
remotestringniecreateDatabase: skąd wolno łączyć się z bazą (adres IP lub %). Domyślnie % = skądkolwiek.
databaseIdstringnierotateDatabasePassword, deleteDatabase: id bazy z GET ?section=databases.
uuidstring (uuid)nierestoreBackup, deleteBackup, lockBackup: uuid kopii z GET ?section=backups.
truncatebooleannierestoreBackup: przed przywróceniem usunąć wszystkie pliki serwera. Domyślnie false.
keystringniesetVariable: nazwa zmiennej uruchamiania (wielkie litery, cyfry, podkreślenie).
valuestringniesetVariable: nowa wartość, najwyżej 4096 znaków, bez znaków sterujących.
allocationIdintegernieremoveAllocation: id portu z GET ?section=network. Głównego portu nie można usunąć.
localestringnieJęzyk komunikatów: cs, en, sk, pl lub de. Domyślnie cs.

Przykładowa treść

{
  "action": "setVariable",
  "key": "MAX_PLAYERS",
  "value": "32"
}

Przykładowa odpowiedź

{
  "ok": true,
  "value": "32"
}

Możliwe błędy

  • 400 Nieprawidłowa treść żądania lub nazwa bazy.
  • 400CONTROL_CHARS Wartość zmiennej zawiera znaki sterujące.
  • 403 Brak uprawnienia do akcji; reinstalacja wymaga też Plików i Zasilania.
  • 403SECRETS_REQUIRED Tajną zmienną może zmienić tylko właściciel lub członek z uprawnieniem Dane poufne.
  • 403FILES_REQUIRED Źródło kodu bota Discord można zmienić tylko z uprawnieniem Pliki.
  • 404 Kopia zapasowa nie istnieje.
  • 409MANAGED_VARIABLE Zmienną zarządza StormHost i nie można jej zmienić.
  • 409MC_MANAGED_VARIABLE W Minecrafcie tę zmienną ustawia zakładka Oprogramowanie.
  • 409PROTECTED_ARGUMENT Dowolne argumenty nie mogą nadpisać chronionych parametrów (np. RCON).
  • 409JOB_RUNNING Na serwerze Minecraft trwa zmiana oprogramowania.
  • 409PORT_LIMIT Pakiet nie ma już wolnego portu.
  • 409NO_FREE_PORT Na węźle nie ma teraz wolnego portu.
  • 412 Serwer nie jest jeszcze dostępny w panelu gier.
GET/services/{id}/game/backup-downloadPobrać kopię zapasową serwera gry

Pobiera archiwum kopii (.tar.gz) serwera gry lub bota Discord. Archiwum zawiera wszystkie pliki, także dane poufne, dlatego członek potrzebuje też uprawnienia Pliki.

Uprawnienie: services:backups

Parametry w adresie

NazwaTypWymaganeOpis
uuidstring (uuid)takuuid kopii z GET …/game?section=backups.
localestringnieJęzyk komunikatów o odmowie dostępu: cs, en, sk, pl lub de.

Przykładowa odpowiedź

Binární soubor (Content-Type: application/gzip, Content-Disposition: attachment; filename="backup-….tar.gz")

Możliwe błędy

  • 400 Brak uuid lub jest nieprawidłowe.
  • 403 Brak uprawnienia Kopie zapasowe lub Pliki.
  • 404 Kopia zapasowa nie istnieje.
  • 502 Nie udało się pobrać kopii z panelu gier.
  • 429 Najwyżej 10 pobrań na minutę.
GET/services/{id}/schedulesHarmonogramy serwera gry lub bota

Zwraca zaplanowane zadania (restart, kopia, polecenie, włączenie lub wyłączenie) serwera gry lub bota Discord, ich następne i ostatnie uruchomienie, limity i dostępne miejsca na kopie.

Uprawnienie: services:settings

Parametry w adresie

NazwaTypWymaganeOpis
localestringnieJęzyk tekstów w odpowiedzi: en, w przeciwnym razie cs.

Przykładowa odpowiedź

{
  "schedules": [
    {
      "id": 41,
      "name": "Denní restart",
      "cron": {
        "minute": "0",
        "hour": "5",
        "dom": "*",
        "month": "*",
        "dow": "*"
      },
      "target": {
        "minute": "0",
        "hour": "5",
        "dom": "*",
        "month": "*",
        "dow": "*"
      },
      "active": true,
      "onlyWhenOnline": false,
      "processing": false,
      "stuck": false,
      "lastRunAt": "2026-11-07T04:00:00.000Z",
      "nextRunAt": "2026-11-08T04:00:00.000Z",
      "kind": "restart",
      "preset": {
        "kind": "restart",
        "repeat": {
          "kind": "daily",
          "time": "05:00"
        },
        "countdown": {
          "m5": true,
          "m1": true,
          "s10": true
        }
      },
      "origin": "portal",
      "author": "you",
      "lastResult": "ok",
      "lastResultCause": null,
      "allowed": true
    }
  ],
  "panelZone": {
    "expected": "Europe/Prague",
    "detected": "Europe/Prague",
    "ok": true,
    "preview": "Europe/Prague"
  },
  "backupSlots": 1,
  "canBackup": true,
  "backupAddonPriceCzk": 120,
  "game": "minecraft",
  "countdown": true,
  "mcVersion": "1.21.4",
  "isOwner": true,
  "permissions": {
    "console": true,
    "power": true,
    "backups": true
  },
  "limits": {
    "maxSchedules": 10,
    "nameMax": 60,
    "commandMax": 256,
    "messageMax": 100,
    "hourSteps": [
      1,
      2,
      3,
      4,
      6,
      8,
      12
    ]
  }
}

Możliwe błędy

  • 403 Brak uprawnienia Ustawienia.
  • 412 Serwer nie jest jeszcze dostępny w panelu gier.
POST/services/{id}/schedulesUtworzyć, edytować, uruchomić lub usunąć harmonogram

Zarządza harmonogramami według pola action. Serwer może mieć najwyżej 10 harmonogramów; polecenie najczęściej co 15 minut, restart i włączenie lub wyłączenie co godzinę, kopia raz dziennie i tylko jeden harmonogram kopii.

Uprawnienie: services:settings

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringtakcreate, update, delete, toggle (włączyć lub wyłączyć), run (uruchomić teraz, najwyżej raz na minutę) lub unstick (zwolnić zablokowany harmonogram).
scheduleIdintegernieWszystkie akcje oprócz create: id harmonogramu z GET.
presetobjectniecreate, update: kind restart (repeat, countdown {m5, m1, s10}, message do 100 znaków), backup (repeat), command (repeat, command do 256 znaków, onlyWhenOnline) lub power (repeat, signal start|stop).
preset.repeatobjectniePowtarzanie: {kind: daily, time: "HH:MM"}, {kind: weekly, days: [0–6, 0 = niedziela], time}, {kind: hours, every: 1|2|3|4|6|8|12, minute: 0–59} lub {kind: cron, expr}.
namestringniecreate, update: nazwa harmonogramu, najwyżej 60 znaków.
ackbooleanniecreate, update: dla harmonogramu kopii musi być true (potwierdzenie, że nowa kopia zastąpi starszą).
activebooleannietoggle: true włącza, false wyłącza.
localestringnieJęzyk komunikatów: cs, en, sk, pl lub de. Domyślnie cs.

Przykładowa treść

{
  "action": "create",
  "name": "Noční restart",
  "preset": {
    "kind": "restart",
    "repeat": {
      "kind": "daily",
      "time": "04:30"
    },
    "countdown": {
      "m5": true,
      "m1": true,
      "s10": false
    },
    "message": "Server se za chvíli restartuje."
  }
}

Przykładowa odpowiedź

{
  "ok": true,
  "id": 42
}

Możliwe błędy

  • 400INVALID Harmonogram nie jest poprawnie wypełniony.
  • 400GAP Harmonogram uruchamiałby się zbyt często.
  • 400BACKUP_ACK Brak ack: true dla harmonogramu kopii.
  • 400COMMAND_FORBIDDEN Polecenie wyłączyłoby lub zrestartowało serwer; użyj ustawienia restart lub power.
  • 403FORBIDDEN Brak uprawnienia do harmonogramu (zależnie od zadań Konsola, Zasilanie lub Kopie zapasowe).
  • 404NOT_FOUND Harmonogram nie istnieje.
  • 409LIMIT Serwer ma już 10 harmonogramów.
  • 409BACKUP_SLOTS Kopie według harmonogramu wymagają dodatku kopii.
  • 409BACKUP_EXISTS Harmonogram kopii już istnieje.
  • 409NOT_EDITABLE Harmonogram powstał poza portalem; można go tylko wyłączyć lub usunąć.
  • 409PANEL_TZ Harmonogramów na konkretną godzinę nie można teraz ustawić, na razie tylko powtarzanie co godzinę.
  • 409SUSPENDED Serwer jest zawieszony.
  • 409JOB_RUNNING Na serwerze Minecraft trwa zmiana oprogramowania.
  • 429RATE Harmonogram można uruchomić najwyżej raz na minutę.
  • 502PARTIAL Harmonogram nie zapisał się w całości i pozostał wyłączony.
GET/services/{id}/vip-shopSklep VIP serwera Minecraft

Zwraca sklep VIP serwera Minecraft: dane sklepu, pozycje z rozbiciem ceny, aktualne stawki i podsumowanie sprzedaży według miesięcy. Tylko dla właściciela.

Uprawnienie: services:settings

Parametry w adresie

NazwaTypWymaganeOpis
langstringnieJęzyk komunikatów: cs, en, sk, pl lub de. Domyślnie cs.

Przykładowa odpowiedź

{
  "view": {
    "state": {
      "mode": "live",
      "open": true,
      "checkoutOpen": true
    },
    "usable": true,
    "shop": {
      "id": "shp_3k9d",
      "slug": "muj-server",
      "title": "Můj server",
      "status": "active",
      "sellerName": "Jan Novák",
      "sellerIco": null,
      "sellerEmail": "[email protected]",
      "sellerAddress": null,
      "playerTerms": null,
      "termsVersion": "2026-10-29",
      "termsAcceptedAt": "2026-11-01T09:00:00.000Z",
      "termsCurrent": true,
      "suspendedReason": null,
      "createdAt": "2026-11-01T09:00:00.000Z"
    },
    "items": [
      {
        "id": "itm_8f2a",
        "title": "VIP na 30 dní",
        "description": "Barevné jméno a /fly",
        "priceCzk": 99,
        "category": "Ranky",
        "durationDays": 30,
        "commandsBuy": [
          "lp user {player} parent addtemp vip 30d"
        ],
        "commandsExpire": [],
        "active": true,
        "sortOrder": 0,
        "breakdown": null
      }
    ],
    "rates": null,
    "termsVersion": "2026-10-29",
    "summary": [
      {
        "month": "2026-11",
        "count": 3,
        "priceHaler": 29700,
        "commissionHaler": 1485,
        "feeHaler": 1020,
        "creditHaler": 27195
      }
    ]
  }
}

Możliwe błędy

  • 400not_minecraft Sklep VIP jest tylko dla serwerów Minecraft.
  • 404disabled Sklep VIP nie jest teraz dostępny dla konta.
  • 503disabled Sklep VIP nie jest jeszcze gotowy.
  • 500failed Akcja się nie powiodła.
  • 403 Tylko dla właściciela usługi.
POST/services/{id}/vip-shopEdytować sklep VIP i jego pozycje

Tworzy lub edytuje sklep VIP, wstrzymuje go i zarządza pozycjami według pola action. Dane sklepu wysyła się zawsze w całości; przy tworzeniu i po zmianie warunków wymagane jest terms: true. Tylko dla właściciela.

Uprawnienie: services:settings

Parametry w adresie

NazwaTypWymaganeOpis
langstringnieJęzyk komunikatów: cs, en, sk, pl lub de. Domyślnie cs.

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringtaksaveShop, setStatus, saveItem lub deleteItem.
slugstringniesaveShop: adres sklepu, 3–32 znaki a–z, 0–9 i myślnik.
titlestringniesaveShop: nazwa sklepu (2–60 znaków). saveItem: nazwa pozycji (2–60 znaków).
sellerNamestringniesaveShop: imię lub firma sprzedawcy (2–120 znaków).
sellerIcostringniesaveShop: czeski numer firmy sprzedawcy (opcjonalne).
sellerEmailstringniesaveShop: e-mail kontaktowy sprzedawcy.
sellerAddressstringniesaveShop: adres sprzedawcy, 5–200 znaków (opcjonalne).
playerTermsstringniesaveShop: własne warunki dla graczy, najwyżej 20 000 znaków (opcjonalne).
termsbooleanniesaveShop: akceptacja warunków operatora sklepu.
statusstringniesetStatus: active lub paused.
idstringniesaveItem: id pozycji do edycji (bez id powstaje nowa, najwyżej 50). deleteItem: id pozycji (wymagane).
descriptionstringniesaveItem: opis, najwyżej 500 znaków.
priceCzkintegerniesaveItem: cena w CZK, 10–10 000 (wymagane).
categorystringniesaveItem: kategoria, najwyżej 40 znaków.
durationDaysinteger | nullniesaveItem: ważność w dniach 1–3650, null = na stałe.
commandsBuystring[]niesaveItem: 1–10 poleceń po zakupie, każde do 300 znaków; jedyna zmienna to {player}; polecenia jak stop, restart, op są zabronione.
commandsExpirestring[]niesaveItem: najwyżej 10 poleceń po wygaśnięciu.
activebooleanniesaveItem: oferować pozycję w sklepie. Domyślnie true.
sortOrderintegerniesaveItem: kolejność 0–10 000.

Przykładowa treść

{
  "action": "saveItem",
  "title": "VIP na 30 dní",
  "priceCzk": 99,
  "category": "Ranky",
  "durationDays": 30,
  "commandsBuy": [
    "lp user {player} parent addtemp vip 30d"
  ],
  "commandsExpire": [],
  "active": true
}

Przykładowa odpowiedź

{
  "ok": true,
  "item": {
    "id": "itm_8f2a",
    "title": "VIP na 30 dní",
    "description": null,
    "priceCzk": 99,
    "category": "Ranky",
    "durationDays": 30,
    "commandsBuy": [
      "lp user {player} parent addtemp vip 30d"
    ],
    "commandsExpire": [],
    "active": true,
    "sortOrder": 0,
    "breakdown": null
  }
}

Możliwe błędy

  • 400bad Nieprawidłowe żądanie lub nieznana akcja.
  • 400 Błędne pole; kod i field wskazują które, np. slug, title, seller_email, terms, item_price, command_denied.
  • 404no_shop Usługa nie ma jeszcze sklepu.
  • 404item_not_found Pozycja nie istnieje.
  • 409slug_taken Adres sklepu jest zajęty.
  • 409suspended Sklep jest zawieszony przez operatora.
  • 409items_max Sklep ma już 50 pozycji.
  • 400not_minecraft Sklep VIP jest tylko dla serwerów Minecraft.
  • 500failed Akcja się nie powiodła.
  • 403 Tylko dla właściciela usługi.
GET/services/{id}/vip-shop/salesSprzedaż sklepu VIP i dostawy

Zwraca ostatnie 50 sprzedaży sklepu VIP ze stanem dostarczenia poleceń, prowizją, opłatą i zaksięgowanym kredytem. Kwoty są w halerzach (1/100 CZK). Działa też dla nieaktywnej usługi. Tylko dla właściciela.

Uprawnienie: services:settings

Parametry w adresie

NazwaTypWymaganeOpis
langstringnieJęzyk komunikatów: cs, en, sk, pl lub de. Domyślnie cs.
beforestring (ISO 8601)nieSprzedaż starsza niż ten czas (stronicowanie).

Przykładowa odpowiedź

{
  "sales": [
    {
      "id": "sal_51c0",
      "number": "VIP-2026-000123",
      "createdAt": "2026-11-05T19:02:11.000Z",
      "paidAt": "2026-11-05T19:03:40.000Z",
      "state": "paid",
      "refundState": null,
      "test": false,
      "itemTitle": "VIP na 30 dní",
      "durationDays": 30,
      "playerName": "Steve_42",
      "buyerEmail": "[email protected]",
      "priceHaler": 9900,
      "commissionHaler": 495,
      "feeHaler": 340,
      "creditHaler": 9065,
      "reversedHaler": null,
      "deliveries": [
        {
          "id": "dlv_77aa",
          "kind": "purchase",
          "state": "done",
          "attempts": 1,
          "nextAttemptAt": null,
          "doneAt": "2026-11-05T19:03:52.000Z",
          "lastErrorCode": null,
          "sent": 1,
          "total": 1
        }
      ]
    }
  ]
}

Możliwe błędy

  • 404no_shop Usługa nie ma jeszcze sklepu.
  • 400not_minecraft Sklep VIP jest tylko dla serwerów Minecraft.
  • 500failed Akcja się nie powiodła.
  • 403 Tylko dla właściciela usługi.
POST/services/{id}/vip-shop/salesPonowić dostarczenie poleceń za sprzedaż

Od razu ponawia wysłanie poleceń jednej dostawy na serwer. Najwyżej 10 razy na minutę na usługę. Tylko dla właściciela.

Uprawnienie: services:settings

Parametry w adresie

NazwaTypWymaganeOpis
langstringnieJęzyk komunikatów: cs, en, sk, pl lub de. Domyślnie cs.

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringtakretry.
deliveryIdstringtakid dostawy z GET (deliveries[].id).

Przykładowa treść

{
  "action": "retry",
  "deliveryId": "dlv_77aa"
}

Przykładowa odpowiedź

{
  "ok": true,
  "state": "done",
  "code": null
}

Możliwe błędy

  • 400bad Nieprawidłowe żądanie.
  • 404no_shop Usługa nie ma jeszcze sklepu.
  • 404delivery_not_found Dostawa nie istnieje.
  • 409delivery_state Dostawy nie można teraz ponowić.
  • 429rate Najwyżej 10 prób na minutę.
  • 400not_minecraft Sklep VIP jest tylko dla serwerów Minecraft.
  • 500failed Akcja się nie powiodła.
  • 403 Tylko dla właściciela usługi.

Minecraft

GET/services/{id}/minecraft/datapacksDatapacki aktywnego świata

Bez parametrów zwraca datapacki aktywnego świata. Z `q` szuka na Modrinth dla wersji serwera, z `project` zwraca wersje jednego datapacka.

Uprawnienie: services:files

Parametry w adresie

NazwaTypWymaganeOpis
qstringnieSzukany tekst (do 80 znaków).
offsetintegerniePrzesunięcie w wynikach wyszukiwania, domyślnie 0.
projectstringnieID lub slug projektu na Modrinth, zwraca jego wersje z plikiem.

Przykładowa odpowiedź

{
  "version": "1.21.4",
  "world": "world",
  "worldValid": true,
  "worldExists": true,
  "power": "running",
  "busy": null,
  "items": [
    {
      "name": "example-pack.zip",
      "kind": "zip",
      "size": 48211,
      "mtime": 1730970000,
      "source": "modrinth",
      "title": "Example Pack",
      "versionName": "1.2.0",
      "projectId": "AbCdEf12",
      "enabled": true,
      "compat": "ok"
    }
  ],
  "evidenceBroken": false,
  "canConsole": true,
  "maxUploadMb": 50
}

Możliwe błędy

  • 409NOT_IMPORTED Oprogramowanie serwera nie jest jeszcze ustawione, najpierw użyj minecraft/software.
  • 412NO_PANEL Serwer nie jest teraz dostępny w panelu gry.
  • 429 Zbyt wiele żądań, spróbuj ponownie za chwilę.
POST/services/{id}/minecraft/datapacksInstalacja, usuwanie i przeładowanie datapacków

`install` pobiera datapack z Modrinth do aktywnego świata, na działającym serwerze zadziała po `reload`. `remove` wyłącza i usuwa datapack, `reload` uruchamia polecenie `reload` (tylko działający serwer, przy współdzielonej usłudze z uprawnieniem Konsola). Wgrywanie własnego ZIP przez API nie jest dostępne.

Uprawnienie: services:files

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringtak`install`, `remove` lub `reload`.
projectIdstringnieTylko `install`: ID projektu na Modrinth (1–64 znaki).
versionIdstringnieTylko `install`: ID wersji z `GET ?project=` (1–16 znaków).
namestringnieTylko `remove`: nazwa pliku lub folderu datapacka z listy (do 120 znaków).

Przykładowa treść

{
  "action": "install",
  "projectId": "AbCdEf12",
  "versionId": "XyZ98765"
}

Przykładowa odpowiedź

{
  "ok": true,
  "file": "example-pack.zip",
  "replaced": null,
  "needsReload": true,
  "packFormat": "61",
  "compat": "ok"
}

Możliwe błędy

  • 400INVALID Nieprawidłowa treść żądania.
  • 403FORBIDDEN `reload` bez uprawnienia Konsola przy współdzielonej usłudze.
  • 404NO_SUCH_PACK W świecie nie ma datapacka o tej nazwie.
  • 409NAME_TAKEN Datapack o tej samej nazwie już istnieje, najpierw go usuń.
  • 409TOO_MANY W świecie jest już 100 datapacków.
  • 409NOT_RUNNING Serwer nie działa, uruchom go i spróbuj ponownie.
  • 409JOB Na serwerze trwa inna zmiana lub instalacja dodatku.
  • 422INCOMPATIBLE Ta wersja datapacka nie pasuje do wersji serwera.
  • 422NO_PACK_MCMETA Plik nie jest prawidłowym datapackiem (brak pack.mcmeta).
  • 429RATE_LIMITED Limit: instalacja i usuwanie 20 na 10 minut, `reload` 10 na 10 minut.
GET/services/{id}/minecraft/dnsWłasny adres serwera

Zwraca stan własnego adresu (rekordy A/AAAA i SRV), domyślny port serwera i adres bezpośredni. Z `check` tylko sprawdza, czy nazwa jest wolna. Gdy zmienił się IP lub port serwera, rekordy poprawiają się przy odczycie (`resynced`).

Uprawnienie: services:network

Parametry w adresie

NazwaTypWymaganeOpis
checkstringnieNazwa do sprawdzenia dostępności, zwraca `{ name, fqdn, available, code?, error? }`.
localestringnieJęzyk komunikatów błędów kontroli dostępu: cs, en, sk, pl, de.

Przykładowa odpowiedź

{
  "enabled": true,
  "zone": "play.example.com",
  "ttl": 300,
  "nameMin": 3,
  "nameMax": 32,
  "current": {
    "name": "mujserver",
    "fqdn": "mujserver.play.example.com",
    "zone": "play.example.com",
    "ip": "203.0.113.10",
    "port": 25565,
    "recordType": "A",
    "srvName": "_minecraft._tcp.mujserver.play.example.com",
    "createdAt": "2026-11-07T10:15:00.000Z",
    "updatedAt": null,
    "records": {
      "address": "ok",
      "srv": "ok"
    }
  },
  "allocation": {
    "ip": "203.0.113.10",
    "alias": null,
    "port": 25565
  },
  "directAddress": "203.0.113.10:25565",
  "allocationError": null,
  "allocationErrorCode": null,
  "recordsError": null,
  "recordsErrorCode": null,
  "resynced": false,
  "canManage": true
}

Możliwe błędy

  • 400NOT_MINECRAFT Usługa nie jest serwerem Minecraft.
  • 503PANEL Zarządzanie serwerem jest chwilowo niedostępne.
  • 500SETUP_FAILED Nie udało się dokończyć, spróbuj później.
POST/services/{id}/minecraft/dnsUtworzenie, zmiana i usunięcie adresu

Tworzy adres `<name>.<zone>`, zmienia jego nazwę, usuwa go lub ponownie zapisuje rekordy dla bieżącego IP i portu (`resync`). Usługa musi być aktywna; adres można zmienić najwyżej 5 razy na godzinę i 20 razy dziennie.

Uprawnienie: services:network

Parametry w adresie

NazwaTypWymaganeOpis
localestringnieJęzyk komunikatów błędów kontroli dostępu: cs, en, sk, pl, de.

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringtak`create`, `rename`, `delete` lub `resync`.
namestringnieDla `create` i `rename`: 3–32 znaki, małe litery a–z, cyfry i myślniki (nie na początku ani na końcu).

Przykładowa treść

{
  "action": "create",
  "name": "mujserver"
}

Przykładowa odpowiedź

{
  "ok": true,
  "current": {
    "name": "mujserver",
    "fqdn": "mujserver.play.example.com",
    "zone": "play.example.com",
    "ip": "203.0.113.10",
    "port": 25565,
    "recordType": "A",
    "srvName": "_minecraft._tcp.mujserver.play.example.com",
    "createdAt": "2026-11-07T10:15:00.000Z",
    "updatedAt": null,
    "records": {
      "address": "ok",
      "srv": "ok"
    }
  }
}

Możliwe błędy

  • 400INVALID Nieprawidłowa treść żądania.
  • 400INVALID_NAME Nazwa nie spełnia zasad.
  • 400RESERVED Nazwa jest zarezerwowana.
  • 400SAME_NAME Serwer ma już ten adres.
  • 404NONE Serwer nie ma własnego adresu.
  • 409TAKEN Adres jest zajęty.
  • 409EXISTS Serwer ma już własny adres, użyj `rename`.
  • 409NO_ALLOCATION Serwer nie ma domyślnego portu.
  • 409NOT_PUBLIC Domyślny adres serwera nie jest publiczny.
  • 412NO_PANEL_LINK Serwer nie jest teraz dostępny w panelu gry.
  • 429RATE_LIMITED Przekroczono limit zmian, spróbuj później.
  • 503DISABLED Własne adresy nie są teraz dostępne.
  • 502DNS Zapis rekordów DNS nie powiódł się.
GET/services/{id}/minecraft/eulaStan akceptacji EULA

Zwraca, czy licencja Minecraft jest zaakceptowana w eula.txt. `accepted: null` oznacza, że plik jeszcze nie istnieje.

Uprawnienie: services:settings

Przykładowa odpowiedź

{
  "accepted": false,
  "acceptedAt": null,
  "url": "https://aka.ms/MinecraftEULA"
}

Możliwe błędy

  • 412 Serwer nie jest teraz dostępny w panelu gry (komunikat `panel.unavailable` w polu `msg`).
  • 429 Zbyt wiele żądań, spróbuj ponownie za chwilę.
POST/services/{id}/minecraft/eulaAkceptacja EULA

Zapisuje `eula=true` do eula.txt. Z `start: true` uruchamia też wyłączony serwer (przy współdzielonej usłudze z uprawnieniem Zasilanie). Limit 10 na 10 minut.

Uprawnienie: services:settings

Treść żądania (JSON)

NazwaTypWymaganeOpis
acceptbooleantakMusi mieć wartość `true`.
startbooleanniePo akceptacji uruchomić wyłączony serwer.

Przykładowa treść

{
  "accept": true,
  "start": true
}

Przykładowa odpowiedź

{
  "ok": true,
  "accepted": true,
  "acceptedAt": "2026-11-07T10:15:00.000Z",
  "started": true,
  "startError": null,
  "startErrorMsg": null
}

Możliwe błędy

  • 400 Brak `accept: true`.
  • 403 `start` bez uprawnienia Zasilanie.
  • 409 Na serwerze trwa zmiana (zadanie).
  • 412 Serwer nie jest teraz dostępny w panelu gry (komunikat `panel.unavailable` w polu `msg`).
GET/services/{id}/minecraft/gamerulesZasady gry aktywnego świata

Zwraca zasady gry obowiązujące dla wersji serwera z bieżącą i domyślną wartością. Przy współdzielonej usłudze wymagane jest uprawnienie Konsola.

Uprawnienie: services:settings

Parametry w adresie

NazwaTypWymaganeOpis
langstringnieJęzyk nazw zasad: `cs` (domyślnie) lub `en`.

Przykładowa odpowiedź

{
  "version": "1.21.4",
  "world": "world",
  "worldValid": true,
  "power": "running",
  "busy": null,
  "perDimension": true,
  "source": "file",
  "fileAt": "2026-11-07T10:15:00.000Z",
  "pending": [],
  "rules": [
    {
      "id": "minecraft:keep_inventory",
      "name": "keepInventory",
      "type": "bool",
      "min": null,
      "max": null,
      "group": "players",
      "common": true,
      "label": "Keep inventory after death",
      "value": false,
      "default": false
    }
  ]
}

Możliwe błędy

  • 409NOT_IMPORTED Oprogramowanie serwera nie jest jeszcze ustawione, najpierw użyj minecraft/software.
  • 412NO_PANEL Serwer nie jest teraz dostępny w panelu gry.
  • 413FILE_TOO_LARGE Plik z zasadami jest za duży.
  • 422FILE_CORRUPT Plik z zasadami jest uszkodzony.
  • 429 Zbyt wiele żądań, spróbuj ponownie za chwilę.
POST/services/{id}/minecraft/gamerulesZmiana zasad gry

Ustawia zasady poleceniem `gamerule` na działającym serwerze, działają od razu bez restartu. Naraz do 30 zasad, limit 30 żądań na 10 minut.

Uprawnienie: services:settings

Treść żądania (JSON)

NazwaTypWymaganeOpis
rulesobjecttakMapa `id` zasady (z GET) na wartość `boolean` lub liczbę całkowitą.
allDimensionsbooleannieNa Paperze i jego odmianach ustawić we wszystkich wymiarach, domyślnie `true`.

Przykładowa treść

{
  "rules": {
    "minecraft:keep_inventory": true,
    "minecraft:spawn_radius": 0
  },
  "allDimensions": true
}

Przykładowa odpowiedź

{
  "ok": true,
  "world": "world",
  "results": [
    {
      "id": "minecraft:keep_inventory",
      "status": "set"
    },
    {
      "id": "minecraft:spawn_radius",
      "status": "unchanged"
    }
  ]
}

Możliwe błędy

  • 400INVALID Nieprawidłowa treść żądania.
  • 400NO_CHANGES `rules` jest puste.
  • 400UNKNOWN_RULE Zasada nie istnieje w wersji serwera (pole `rule`).
  • 400INVALID_VALUE Nieprawidłowa wartość zasady (pole `rule`).
  • 409NOT_RUNNING Serwer nie działa, uruchom go i spróbuj ponownie.
  • 409NOT_IMPORTED Oprogramowanie serwera nie jest jeszcze ustawione, najpierw użyj minecraft/software.
  • 409JOB Na serwerze trwa inna zmiana lub instalacja dodatku.
  • 429CONSOLE_BUSY Konsola serwera jest zajęta.
  • 412NO_PANEL Serwer nie jest teraz dostępny w panelu gry.
GET/services/{id}/minecraft/jobStan trwającej zmiany serwera

Zwraca ostatnie zadanie (zmiana oprogramowania, reinstalacja, modpack, świat) z krokiem, logiem i postępem. Po uruchomieniu odpytuj mniej więcej co 2 s, aż `status` będzie `done` lub `failed`; zawieszone zadanie dostaje `failed` z `interrupted: true`.

Uprawnienie: services:settings

Przykładowa odpowiedź

{
  "job": {
    "id": "k3j9x2m1q8",
    "kind": "switch",
    "status": "running",
    "step": "install",
    "log": [
      {
        "at": "2026-11-07T10:15:00.000Z",
        "key": "job.log.installing",
        "params": {
          "label": "Paper 1.21.4"
        }
      }
    ],
    "startedAt": "2026-11-07T10:15:00.000Z",
    "updatedAt": "2026-11-07T10:16:10.000Z",
    "error": null,
    "errorMsg": null,
    "progress": {
      "done": 42,
      "total": 168,
      "unit": "files",
      "bytesDone": null,
      "bytesTotal": null
    },
    "from": {
      "type": "paper",
      "version": "1.21.1",
      "build": "130"
    },
    "target": {
      "type": "paper",
      "version": "1.21.4",
      "build": "232"
    },
    "destructive": true,
    "finishedAt": null
  },
  "active": true
}

Możliwe błędy

  • 429 Zbyt wiele żądań, spróbuj ponownie za chwilę.
POST/services/{id}/minecraft/jobUkrycie zakończonego zadania

Ukrywa zakończone lub nieudane zadanie, aby GET już go nie zwracał. Trwającego zadania nie można ukryć.

Uprawnienie: services:settings

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringtakZawsze `dismiss`.
jobIdstringtak`id` zadania z GET (8–40 małych liter i cyfr).

Przykładowa treść

{
  "action": "dismiss",
  "jobId": "k3j9x2m1q8"
}

Przykładowa odpowiedź

{
  "ok": true
}

Możliwe błędy

  • 400 Nieprawidłowa treść żądania (klucz komunikatu w `msg`).
  • 409 Zadanie nadal trwa lub nie jest już ostatnie.
GET/services/{id}/minecraft/modpacksModpacki: stan, wyszukiwanie i podgląd

Bez parametrów zwraca zainstalowany modpack, odłożone pliki i kolejkę. `search` szuka na Modrinth, `project` zwraca projekt z wersjami, `preview` pokazuje, co zrobiłaby instalacja (nic nie zmienia), `serverFiles=1` listuje pliki .mrpack w katalogu głównym serwera.

Uprawnienie: services:files

Parametry w adresie

NazwaTypWymaganeOpis
searchstringnieSzukany tekst na Modrinth.
mcstringnieZ `search`: wersja Minecraft, np. `1.21.1`.
loaderstringnieZ `search`: `fabric`, `forge` lub `neoforge`.
sortstringnieZ `search`: `downloads`, `relevance` lub `newest`.
offsetintegernieZ `search`: przesunięcie w wynikach.
projectstringnieID lub slug projektu; z `preview=modrinth` tylko ID (8 znaków).
previewstringnie`modrinth` (z `project` i `version`) lub `upload` (z `upload`).
versionstringnieZ `preview=modrinth`: ID wersji (8 znaków).
uploadstringnieZ `preview=upload`: `id` z akcji `stageServerFile` (24 znaki hex).
modestringnieZ `preview`: `all` (domyślnie), `keep-world` lub `wipe`.
serverFilesstringnie`1` listuje pliki .mrpack w katalogu głównym serwera.

Przykładowa odpowiedź

{
  "installed": null,
  "aside": null,
  "recovering": false,
  "server": {
    "type": "fabric",
    "version": "1.21.1",
    "memoryMib": 8192
  },
  "perms": {
    "install": true,
    "rollback": true,
    "deleteAside": true,
    "wipe": true,
    "replaceBackup": true
  },
  "queue": {
    "active": 0,
    "waiting": 0,
    "limit": 2
  },
  "limits": {
    "uploadMaxMb": 95,
    "serverFileMaxMb": 1024,
    "serverMb": 3072,
    "files": 30000
  }
}

Możliwe błędy

  • 400 Nieprawidłowy projekt, wersja, plik lub tryb (klucz komunikatu w `msg`).
  • 429 Zbyt wiele żądań, spróbuj ponownie za chwilę.
POST/services/{id}/minecraft/modpacksInstalacja i cofnięcie modpacka

`install` i `rollback` uruchamiają zadanie w tle (odpowiedź 202), postęp śledź przez minecraft/job. Serwer jest na czas instalacji wyłączany; `all` odkłada stare pliki (cofnięcie przez `rollback`), `wipe` usuwa wszystko (tylko właściciel). Limit 3 na godzinę na usługę (wspólny ze zmianą oprogramowania) i 10 dziennie na klienta; własny .mrpack wgraj przez SFTP i przygotuj akcją `stageServerFile`.

Uprawnienie: services:files

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringtak`install`, `rollback`, `deleteAside` lub `stageServerFile`.
originstringnie`install`: `modrinth` lub `mrpack` (własny plik).
projectIdstringnie`install` z Modrinth: ID projektu (8 znaków).
versionIdstringnie`install` z Modrinth: ID wersji (8 znaków).
uploadIdstringnie`install` z `mrpack`: `id` z `stageServerFile` (24 znaki hex).
modestringnie`install`: `all` (zastąpić wszystko, stare odłożyć), `keep-world` (zachować świat i server.properties) lub `wipe` (usunąć wszystko, tylko właściciel).
replaceBackupbooleanniePrzy pełnych slotach kopii nadpisać najstarszą kopię (właściciel lub uprawnienie Kopie zapasowe).
acceptEulabooleannieZaakceptować licencję Minecraft (EULA) w ramach instalacji.
confirmDowngradebooleanniePotwierdzić instalację starszej wersji Minecraft niż ma świat.
namestringnie`stageServerFile`: nazwa pliku .mrpack w katalogu głównym serwera (do 1 GB).

Przykładowa treść

{
  "action": "install",
  "origin": "modrinth",
  "projectId": "AbCdEf12",
  "versionId": "XyZ98765",
  "mode": "all",
  "acceptEula": true
}

Przykładowa odpowiedź

{
  "ok": true,
  "job": {
    "id": "k3j9x2m1q8",
    "kind": "modpack",
    "status": "queued",
    "step": "queued",
    "log": [],
    "startedAt": "2026-11-07T10:15:00.000Z",
    "updatedAt": "2026-11-07T10:15:00.000Z",
    "error": null,
    "errorMsg": null,
    "progress": null
  },
  "warnings": []
}

Możliwe błędy

  • 400 Nieprawidłowa treść żądania (klucz komunikatu w `msg`).
  • 403 Brak uprawnień Ustawienia, Pliki i Zasilanie (klucz komunikatu w `msg`).
  • 403WIPE_OWNER Tryb `wipe` może użyć tylko właściciel.
  • 403BACKUP_PERMISSION `replaceBackup` bez uprawnienia Kopie zapasowe.
  • 409JOB_RUNNING Na serwerze trwa już inne zadanie.
  • 409ADDON_RUNNING Trwa instalacja pluginu lub moda.
  • 409QUEUE_FULL Kolejka instalacji jest pełna, spróbuj później.
  • 409DISK Za mało miejsca na dysku serwera (`details.freeMb`, `details.needMb`).
  • 409DOWNGRADE Modpack ma starszą wersję Minecraft, potwierdź `confirmDowngrade`.
  • 422LOADER Loadera modpacka nie można teraz zainstalować.
  • 429 Przekroczono limit instalacji (godzinowy na usługę lub dzienny na klienta).
GET/services/{id}/minecraft/player-statsWykres liczby graczy

Zwraca punkty wykresu graczy online za wybrany okres ze średnią, maksimum i rekordem. Gdy zbieranie jest wyłączone, `enabled` ma `false`, a `points` jest puste.

Uprawnienie: services:settings

Parametry w adresie

NazwaTypWymaganeOpis
rangestringnie`24h` (domyślnie, punkty co 5 min), `7d` (co godzinę) lub `30d` (co 4 h).

Przykładowa odpowiedź

{
  "enabled": true,
  "collecting": true,
  "range": "24h",
  "canToggle": true,
  "bucketSec": 300,
  "points": [
    {
      "t": 1730973600000,
      "peak": 4,
      "avg": 2.5,
      "slots": 20,
      "state": "up"
    }
  ],
  "average": 2.1,
  "peak": {
    "online": 6,
    "at": "2026-11-07T10:15:00.000Z"
  },
  "record": {
    "online": 14,
    "at": "2026-10-20T19:40:00.000Z"
  },
  "last": {
    "at": "2026-11-07T10:15:00.000Z",
    "online": 3,
    "max": 20
  }
}

Możliwe błędy

  • 503unavailable Wykres graczy nie jest jeszcze dostępny.
  • 502ERROR Nie udało się wczytać wykresu.
  • 429 Zbyt wiele żądań, spróbuj ponownie za chwilę.
POST/services/{id}/minecraft/player-statsWłączenie i wyłączenie wykresu graczy

Włącza lub wyłącza zbieranie liczby graczy. Wyłączenie usuwa wszystkie zebrane dane usługi (`deleted`). Limit 10 na 10 minut.

Uprawnienie: services:settings

Treść żądania (JSON)

NazwaTypWymaganeOpis
enabledbooleantak`true` włączyć, `false` wyłączyć i usunąć dane.

Przykładowa treść

{
  "enabled": false
}

Przykładowa odpowiedź

{
  "ok": true,
  "enabled": false,
  "deleted": 2016
}

Możliwe błędy

  • 400INVALID Nieprawidłowa treść żądania.
  • 503unavailable Wykres graczy nie jest jeszcze dostępny.
  • 429 Zbyt wiele żądań, spróbuj ponownie za chwilę.
GET/services/{id}/minecraft/playersGracze, whitelista, operatorzy i bany

Zwraca whitelistę, operatorów, bany i bany IP z plików serwera, ustawienia z server.properties i graczy online (tylko z uprawnieniem Konsola). Z `lookup` sprawdza nick w Mojang.

Uprawnienie: services:settings

Parametry w adresie

NazwaTypWymaganeOpis
lookupstringnieNick gracza do sprawdzenia, zwraca `{ lookup: { query, found, name, uuid } }` (uprawnienie Konsola).

Przykładowa odpowiedź

{
  "power": "running",
  "busy": null,
  "canConsole": true,
  "version": "1.21.4",
  "settings": {
    "whitelist": true,
    "enforceWhitelist": false,
    "onlineMode": true,
    "opLevel": 4,
    "propsMissing": false
  },
  "propsInvalid": false,
  "floodgatePrefix": null,
  "online": {
    "online": 1,
    "max": 20,
    "players": [
      {
        "name": "Steve",
        "uuid": "0f3c1e2a-4b5d-4c6e-8f70-1a2b3c4d5e6f"
      }
    ],
    "truncated": false,
    "source": "console",
    "at": "2026-11-07T10:15:00.000Z"
  },
  "onlineError": null,
  "onlineErrorMsg": null,
  "lists": {
    "whitelist": {
      "status": "ok",
      "entries": [
        {
          "uuid": "0f3c1e2a-4b5d-4c6e-8f70-1a2b3c4d5e6f",
          "name": "Steve"
        }
      ]
    },
    "ops": {
      "status": "ok",
      "entries": [
        {
          "uuid": "0f3c1e2a-4b5d-4c6e-8f70-1a2b3c4d5e6f",
          "name": "Steve",
          "level": 4,
          "bypassesPlayerLimit": false
        }
      ]
    },
    "bans": {
      "status": "absent",
      "entries": []
    },
    "ipBans": {
      "status": "absent",
      "entries": []
    }
  },
  "known": [],
  "owner": true
}

Możliwe błędy

  • 400INVALID_NICK Nieprawidłowy nick w `lookup`.
  • 403FORBIDDEN `lookup` bez uprawnienia Konsola.
  • 503MOJANG_BUSY Sprawdzenie w Mojang jest teraz niedostępne, spróbuj za minutę.
  • 412 Serwer nie jest teraz dostępny w panelu gry (komunikat `panel.unavailable` w polu `msg`).
  • 429 Zbyt wiele żądań, spróbuj ponownie za chwilę.
POST/services/{id}/minecraft/playersWhitelista, operatorzy, bany i kick

Na działającym serwerze zmiana idzie poleceniem, na wyłączonym przez edycję pliku (`mode`). Przy współdzielonej usłudze wymagane jest uprawnienie Konsola; limit 30 zmian na 10 minut na usługę i 60 na klienta.

Uprawnienie: services:settings

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringtak`whitelist-add`, `whitelist-remove`, `whitelist-toggle`, `op`, `deop`, `ban`, `pardon`, `pardon-ip`, `kick`, `bedrock-whitelist-add` lub `bedrock-whitelist-remove`.
nickstringnieNick gracza (do 40 znaków); przy akcjach `bedrock-*` nazwa gracza Bedrock.
uuidstringnieUUID z listy, do usunięcia na wyłączonym serwerze nawet bez prawidłowego nicku.
levelintegernie`op`: poziom operatora 1–4.
bypassesPlayerLimitbooleannie`op`: operator może dołączyć do pełnego serwera.
reasonstringnie`ban` i `kick`: powód (do 200 znaków).
ipstringnie`pardon-ip`: zbanowany adres IP.
enabledbooleannie`whitelist-toggle` (wymagane): włączyć lub wyłączyć whitelistę.

Przykładowa treść

{
  "action": "op",
  "nick": "Steve",
  "level": 4
}

Przykładowa odpowiedź

{
  "ok": true,
  "mode": "command",
  "result": "done",
  "player": {
    "name": "Steve",
    "uuid": "0f3c1e2a-4b5d-4c6e-8f70-1a2b3c4d5e6f"
  }
}

Możliwe błędy

  • 400INVALID Nieprawidłowa treść żądania.
  • 400INVALID_NICK Nieprawidłowy nick lub UUID.
  • 400INVALID_REASON Nieprawidłowy powód.
  • 400INVALID_IP Nieprawidłowy adres IP.
  • 409NOT_RUNNING Akcja wymaga działającego serwera (np. `kick`).
  • 409PLAYER_OFFLINE Gracz nie jest online.
  • 409NO_FLOODGATE Akcje `bedrock-*` wymagają Floodgate.
  • 409CONFLICT Plik w międzyczasie się zmienił, spróbuj ponownie.
  • 409JOB Na serwerze trwa inna zmiana.
  • 422PLAYER_UNKNOWN Gracz o tym nicku nie istnieje.
  • 429RATE_LIMITED Przekroczono limit zmian, spróbuj później.
  • 503MOJANG_BUSY Sprawdzenie w Mojang jest teraz niedostępne.
GET/services/{id}/minecraft/pluginsPluginy i mody serwera

Bez parametrów listuje zainstalowane pluginy lub mody i `restartRequired`. Przełączniki `search`, `versions`, `plan` i `updates` nie potrzebują wartości (np. `?search&source=modrinth&q=maps`); `op` zwraca stan instalacji w tle.

Uprawnienie: services:files

Parametry w adresie

NazwaTypWymaganeOpis
searchflagnieWyszukiwanie w katalogu (z `source`, `q`, `offset`).
versionsflagnieZgodne wersje projektu (z `source`, `project`).
planflagniePodgląd instalacji z zależnościami bez zapisu (z `source`, `project`, `version`, `deps`).
updatesflagnieNowsze wersje plików zainstalowanych przez portal.
sourcestringnie`modrinth` lub `hangar` (Hangar tylko dla pluginów).
qstringnieSzukany tekst.
offsetintegerniePrzesunięcie w wynikach wyszukiwania.
projectstringnieID lub slug projektu (1–64 znaki).
versionstringnieZ `plan`: ID wersji, inaczej najnowsza zgodna.
depsstringnieZ `plan`: `0` bez zależności.
opstringnieID operacji (UUID) z odpowiedzi POST 202.

Przykładowa odpowiedź

{
  "context": {
    "type": "paper",
    "kind": "plugins",
    "gameVersion": "1.21.4",
    "versionKnown": true,
    "versionSource": "metadata",
    "dir": "/plugins"
  },
  "sources": [
    "modrinth",
    "hangar"
  ],
  "maxBytes": 104857600,
  "items": [
    {
      "file": "ExamplePlugin-1.2.0.jar",
      "filename": "ExamplePlugin-1.2.0.jar",
      "enabled": true,
      "size": 512000,
      "modifiedAt": 1730970000,
      "managed": true,
      "source": "modrinth",
      "projectId": "AbCdEf12",
      "title": "Example Plugin",
      "icon": null,
      "url": "https://modrinth.com/plugin/example-plugin",
      "versionId": "XyZ98765",
      "versionName": "1.2.0",
      "publishedAt": "2026-11-07T10:15:00.000Z",
      "installedAt": "2026-11-07T10:15:00.000Z",
      "installedByYou": true,
      "dependencyOf": null,
      "unverified": true,
      "fromModpack": null,
      "dataFolder": "ExamplePlugin"
    }
  ],
  "dataFolders": [
    "ExamplePlugin"
  ],
  "folderExists": true,
  "changedAt": "2026-11-07T10:15:00.000Z",
  "restartRequired": true,
  "serverState": "running",
  "jobRunning": false,
  "op": null
}

Możliwe błędy

  • 400BAD_REQUEST Nieznane źródło, projekt lub wersja.
  • 400UNSUPPORTED_TYPE Typ serwera nie obsługuje pluginów ani modów (Vanilla).
  • 404OP_NOT_FOUND Operacja nie istnieje lub wygasła.
  • 429RATE_LIMITED Limit zapytań do katalogów: 60 na minutę.
  • 502SOURCE_ERROR Katalog nie odpowiada.
POST/services/{id}/minecraft/pluginsInstalacja i zarządzanie pluginami i modami

`install` i `update` działają w tle: gotowa odpowiedź przychodzi w ciągu 40 s, inaczej 202 z `pending: true` i `op`; stan odczytuj przez `GET ?op=`. Zmiany działają po restarcie serwera; limit 20 zmian na 10 minut na usługę.

Uprawnienie: services:files

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringtak`install`, `update`, `remove` lub `toggle`.
sourcestringnie`install`: `modrinth` lub `hangar`.
projectstringnie`install`: ID lub slug projektu.
versionstringnie`install` i `update`: ID wersji, inaczej najnowsza zgodna.
dependenciesbooleannie`install`: zainstalować też wymagane zależności, domyślnie `true`.
skipstring[]nie`install`: ID zależności do pominięcia (do 50).
replacebooleannie`install`: zastąpić kolidujące pliki, domyślnie `false`.
filestringnie`update`, `remove`, `toggle`: nazwa pliku z listy (do 255 znaków).
dataFolderstringnie`remove`: usunąć też folder z danymi pluginu (nazwa z `dataFolders`).
enabledbooleannie`toggle` (wymagane): włączyć lub wyłączyć plik.

Przykładowa treść

{
  "action": "install",
  "source": "modrinth",
  "project": "example-plugin",
  "dependencies": true
}

Przykładowa odpowiedź

{
  "ok": true,
  "op": {
    "id": "3f1c2a7e-9b4d-4e21-8c3a-5d6e7f809a1b",
    "action": "install",
    "status": "done",
    "step": "Hotovo",
    "stepMsg": {
      "key": "plugin.step.done"
    },
    "startedAt": "2026-11-07T10:15:00.000Z",
    "finishedAt": "2026-11-07T10:15:12.000Z",
    "result": {
      "installed": [
        {
          "file": "ExamplePlugin-1.2.0.jar",
          "title": "Example Plugin",
          "versionName": "1.2.0",
          "role": "target"
        }
      ],
      "removed": [],
      "skipped": [],
      "missing": []
    },
    "error": null,
    "errorMsg": null,
    "code": null,
    "data": null
  },
  "result": {
    "installed": [
      {
        "file": "ExamplePlugin-1.2.0.jar",
        "title": "Example Plugin",
        "versionName": "1.2.0",
        "role": "target"
      }
    ],
    "removed": [],
    "skipped": [],
    "missing": []
  }
}

Możliwe błędy

  • 400BAD_REQUEST Nieprawidłowa treść żądania lub oznaczenie projektu albo wersji.
  • 404NOT_FOUND Nie znaleziono pliku ani projektu.
  • 404NO_VERSION Brak zgodnej wersji.
  • 409JOB_RUNNING Na serwerze trwa inna zmiana.
  • 409INSTALLING Serwer jest właśnie instalowany.
  • 409EXISTS Plik już istnieje, użyj `replace`.
  • 409UP_TO_DATE Plik ma już najnowszą wersję.
  • 413TOO_LARGE Plik jest większy niż 100 MB.
  • 422INCOMPATIBLE Wersja nie pasuje do tego serwera.
  • 422EXTERNAL Projekt można pobrać tylko ze strony autora.
  • 429RATE_LIMITED Limit 20 zmian na 10 minut.
  • 502SOURCE_ERROR Katalog nie odpowiada.
GET/services/{id}/minecraft/propertiesZawartość server.properties

Zwraca server.properties jako tekst i listę kluczy z `etag` do zapisu. Wartości tajne (hasła RCON i Management Protocol) są zamaskowane; `reveal` odsłania jedną, tylko z uprawnieniem Dane poufne.

Uprawnienie: services:settings

Parametry w adresie

NazwaTypWymaganeOpis
revealstringnie`rcon.password`, `management-server-secret` lub `management-server-tls-keystore-password`; zwraca `{ key, value }`.

Przykładowa odpowiedź

{
  "locked": [
    "server-ip",
    "server-port",
    "query.port"
  ],
  "secretKeys": [
    "rcon.password",
    "management-server-secret",
    "management-server-tls-keystore-password"
  ],
  "privilegedKeys": [
    "enable-rcon",
    "rcon.port",
    "management-server-enabled",
    "management-server-host",
    "management-server-port",
    "management-server-tls-enabled",
    "management-server-tls-keystore",
    "management-server-allowed-origins"
  ],
  "allocationPorts": [
    25565,
    25566
  ],
  "canSecrets": true,
  "canPower": true,
  "jobActive": false,
  "exists": true,
  "etag": "9b1f0c2d4e6a8b0c1d2e3f4a5b6c7d8e9f0a1b2c",
  "raw": "motd=A Minecraft Server\nmax-players=20\nrcon.password=********\n",
  "entries": [
    {
      "key": "motd",
      "value": "A Minecraft Server"
    },
    {
      "key": "max-players",
      "value": "20"
    },
    {
      "key": "rcon.password",
      "value": "********"
    }
  ]
}

Możliwe błędy

  • 400 Nieznany klucz w `reveal`.
  • 403 `reveal` bez uprawnienia Dane poufne.
  • 422 Plik jest za duży lub nie jest tekstowy.
  • 412 Serwer nie jest teraz dostępny w panelu gry (komunikat `panel.unavailable` w polu `msg`).
  • 429 Zbyt wiele żądań, spróbuj ponownie za chwilę.
POST/services/{id}/minecraft/propertiesZapis server.properties

Zapisuje pojedyncze klucze (`fields`) lub cały plik (`raw`), zawsze z `etag` z GET. Zablokowane klucze (IP i porty) się nie zmieniają, tajne i zdalne zarządzanie zmienia tylko uprawnienie Dane poufne. Zmiany działają po restarcie, `restart: true` wykonuje go od razu (uprawnienie Zasilanie).

Uprawnienie: services:settings

Treść żądania (JSON)

NazwaTypWymaganeOpis
etagstringtak`etag` z GET; gdy plik nie istnieje, `absent`.
fieldsobjectnieKlucz na wartość (string, liczba lub boolean). Nie razem z `raw`.
rawstringnieCała zawartość pliku (do 80 000 znaków, wynik do 64 KB). Zablokowane i tajne klucze wracają do zapisanej wartości.
createbooleannieUtworzyć plik z wartości domyślnych, jeśli jeszcze nie istnieje.
restartbooleanniePo zapisie zrestartować działający serwer.

Przykładowa treść

{
  "etag": "9b1f0c2d4e6a8b0c1d2e3f4a5b6c7d8e9f0a1b2c",
  "fields": {
    "motd": "Vítejte",
    "max-players": 30
  },
  "restart": true
}

Przykładowa odpowiedź

{
  "ok": true,
  "unchanged": false,
  "etag": "0c1d2e3f4a5b6c7d8e9f0a1b2c9b1f0c2d4e6a8b",
  "changed": [
    "motd",
    "max-players"
  ],
  "restored": [],
  "restarted": true,
  "restartError": null,
  "restartErrorMsg": null
}

Możliwe błędy

  • 400 Nieprawidłowa treść żądania (klucz komunikatu w `msg`).
  • 400UNKNOWN_KEY Klucza nie można zmienić przez `fields` (pole `key`).
  • 400LOCKED Klucz jest zablokowany (pole `key`).
  • 400INVALID Nieprawidłowa wartość klucza (pole `key`).
  • 400RAW_INVALID Tekst pliku jest za długi lub zawiera niedozwolone znaki.
  • 403SECRETS Zmiana wartości tajnej lub zdalnego zarządzania bez uprawnienia Dane poufne.
  • 403 `restart` bez uprawnienia Zasilanie.
  • 409CONFLICT Plik w międzyczasie się zmienił, pobierz nowy `etag`.
  • 409NO_FILE Plik nie istnieje, wyślij `create: true`.
  • 409 Na serwerze trwa zmiana (zadanie).
  • 412 Serwer nie jest teraz dostępny w panelu gry (komunikat `panel.unavailable` w polu `msg`).
GET/services/{id}/minecraft/softwareOprogramowanie serwera i dostępne wersje

Bez parametrów zwraca typ i wersję serwera, historię zmian, trwające zadanie, sloty kopii, EULA i uprawnienia. `versions` i `builds` listują wersje i buildy typu, `preview` pokazuje skutki zmiany (Java, obraz, dysk, ostrzeżenia) bez zapisu.

Uprawnienie: services:settings

Parametry w adresie

NazwaTypWymaganeOpis
versionsstringnieTyp serwera: `paper`, `purpur`, `folia`, `vanilla`, `fabric`, `forge` lub `neoforge`; zwraca do 250 wersji.
prereleasestringnieZ `versions`: `1` dodaje wersje przedpremierowe.
buildsstringnieTyp serwera; z `version` zwraca do 100 buildów.
previewstringnieTyp serwera do podglądu zmiany (z `version`, `build`).
versionstringnieWersja Minecraft (dla `preview` domyślnie `latest`).
buildstringnieZ `preview`: konkretny build lub wersja loadera.
unstablestringnie`1` dopuszcza niestabilne buildy (`builds`, `preview`).

Przykładowa odpowiedź

{
  "state": {
    "type": "paper",
    "version": "1.21.4",
    "build": "232",
    "loaderVersion": null,
    "javaMajor": 21,
    "launch": {
      "kind": "jar",
      "file": "server.jar"
    },
    "history": [],
    "importedAt": null,
    "installedAt": "2026-11-07T10:15:00.000Z"
  },
  "job": null,
  "jobActive": false,
  "server": {
    "memoryMib": 8192,
    "diskMib": 40960,
    "javaMajor": 21,
    "imageOfficial": true,
    "busy": null
  },
  "panelError": null,
  "clientError": null,
  "backups": {
    "used": 1,
    "limit": 3
  },
  "diskFreeMb": 35200,
  "diskFreeUnknown": false,
  "eula": {
    "accepted": true,
    "acceptedAt": "2026-11-07T10:15:00.000Z"
  },
  "importSuggestion": null,
  "perms": {
    "change": true,
    "import": true,
    "eula": true,
    "power": true,
    "skipBackup": true
  },
  "types": [
    "paper",
    "purpur",
    "folia",
    "vanilla",
    "fabric",
    "forge",
    "neoforge"
  ]
}

Możliwe błędy

  • 400 Nieznany typ, wersja lub build (klucz komunikatu w `msg`).
  • 422 Nie można znaleźć wersji ani buildu.
  • 502 Źródło wersji nie odpowiada.
  • 412 Serwer nie jest teraz dostępny w panelu gry (komunikat `panel.unavailable` w polu `msg`).
  • 429 Zbyt wiele żądań, spróbuj ponownie za chwilę.
POST/services/{id}/minecraft/softwareZmiana typu i wersji serwera

`switch` i `reinstall` uruchamiają zadanie (202), postęp śledź przez minecraft/job: serwer jest wyłączany, kopiowany, instaluje się nowe oprogramowanie, a działający wcześniej serwer startuje ponownie. Potrzebny jest wolny slot kopii (albo `skipBackup`, tylko właściciel); najwyżej 3 razy na godzinę. `import` tylko zapisuje, jakie oprogramowanie już jest na serwerze, nic nie zmienia.

Uprawnienie: services:settings

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringtak`switch`, `reinstall` lub `import`.
typestringnie`switch` i `import`: `paper`, `purpur`, `folia`, `vanilla`, `fabric`, `forge` lub `neoforge`.
versionstringnie`switch` i `import`: wersja Minecraft (1–40 znaków), przy `switch` także `latest`.
buildstringnieBuild lub wersja loadera, inaczej najnowsza stabilna.
allowUnstablebooleannie`switch`: dopuścić niestabilny build.
modestringnie`switch`: `keep` (domyślnie, nic nie usuwać), `clean` (usunąć wszystko poza światem, ustawieniami i listami graczy) lub `wipe` (usunąć wszystko).
acceptEulabooleannie`switch` i `reinstall`: zaakceptować EULA.
confirmDowngradebooleannie`switch`: potwierdzić przejście na starszą lub nieznaną wersję.
skipBackupbooleannie`switch` i `reinstall`: bez kopii, tylko właściciel.

Przykładowa treść

{
  "action": "switch",
  "type": "paper",
  "version": "1.21.4",
  "mode": "keep",
  "acceptEula": true
}

Przykładowa odpowiedź

{
  "ok": true,
  "job": {
    "id": "k3j9x2m1q8",
    "kind": "switch",
    "status": "queued",
    "step": "queued",
    "log": [],
    "startedAt": "2026-11-07T10:15:00.000Z",
    "updatedAt": "2026-11-07T10:15:00.000Z",
    "error": null,
    "errorMsg": null,
    "progress": null
  },
  "warnings": []
}

Możliwe błędy

  • 400 Nieprawidłowa treść żądania (klucz komunikatu w `msg`).
  • 403 Zmiana wymaga uprawnień Ustawienia, Pliki i Zasilanie.
  • 403SKIP_BACKUP_OWNER `skipBackup` może użyć tylko właściciel.
  • 409JOB_RUNNING Na serwerze trwa już inne zadanie.
  • 409ADDON_RUNNING Trwa instalacja pluginu lub moda.
  • 409BACKUP_SLOT Sloty kopii są pełne.
  • 409BACKUP_DISABLED Usługa nie ma kopii, zmiana działa tylko z `skipBackup`.
  • 409DISK Za mało miejsca na dysku (`details.freeMb`, `details.needMb`).
  • 409DOWNGRADE Starsza wersja, potwierdź `confirmDowngrade`.
  • 409UNKNOWN_VERSION Bieżąca wersja jest nieznana, potwierdź `confirmDowngrade`.
  • 409NOT_IMPORTED `reinstall` bez znanego oprogramowania, najpierw `import` lub `switch`.
  • 409INSTALLING Serwer się instaluje lub przywraca z kopii.
  • 422NEED_BUILD `import`: dla Forge i NeoForge podaj `build`.
  • 429 Najwyżej 3 zmiany na godzinę.
GET/services/{id}/minecraft/startupPolecenie startowe i pamięć

Zwraca bieżące polecenie startowe, rozmiar sterty, dostępne presety JVM z podglądem sterty, zapisany stan i ryzyko awarii z braku pamięci. Z `java=1` także wersje Javy oferowane przez serwer.

Uprawnienie: services:settings

Parametry w adresie

NazwaTypWymaganeOpis
javastringnie`1` dodaje `javaOptions` (wersje Javy oferowane przez egg).

Przykładowa odpowiedź

{
  "type": "paper",
  "imported": true,
  "javaMajor": 21,
  "arch": "x86_64",
  "envPrefix": true,
  "memoryMib": 8192,
  "launch": {
    "kind": "jar",
    "file": "server.jar"
  },
  "command": "java -Xms6656M -Xmx6656M -XX:+UseG1GC -jar server.jar nogui",
  "heapMb": 6656,
  "addons": 12,
  "modpack": false,
  "presets": [
    {
      "preset": "standard",
      "heapMb": 6656,
      "isDefault": true,
      "vectors": true
    },
    {
      "preset": "zgc",
      "heapMb": 5888,
      "isDefault": false,
      "vectors": true
    },
    {
      "preset": "none",
      "heapMb": 6656,
      "isDefault": false,
      "vectors": true
    }
  ],
  "defaultPreset": "standard",
  "vectors": true,
  "memory": null,
  "stored": {
    "preset": "standard",
    "heapMb": 6656,
    "memoryMib": 8192,
    "vectors": true,
    "extraFlags": [],
    "appliedAt": "2026-11-07T10:15:00.000Z",
    "custom": false,
    "hasPrevious": true,
    "check": null
  },
  "lastSync": null,
  "managed": true,
  "matchesStored": true,
  "drifted": false,
  "needsSync": false,
  "busy": null,
  "jobActive": false,
  "canPower": true,
  "canExtraFlags": true,
  "canJava": true
}

Możliwe błędy

  • 502 Panel gry nie odpowiada.
  • 429 Zbyt wiele żądań, spróbuj ponownie za chwilę.
POST/services/{id}/minecraft/startupZmiana polecenia startowego lub Javy

Bez `action` (lub z `apply`) stosuje preset JVM, `recalculate` przelicza stertę dla bieżącej pamięci, `revert` przywraca poprzednie polecenie, `java` przełącza obraz na inną Javę bez reinstalacji. Zmiana obowiązuje od następnego startu, `restart: true` restartuje od razu (uprawnienie Zasilanie).

Uprawnienie: services:settings

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringnie`apply` (domyślnie), `recalculate`, `revert` lub `java`.
presetstringnie`apply` (wymagane): `standard`, `zgc` (Java 21+), `proxy` lub `none`.
extraFlagsstring | string[]nie`apply`: własne flagi JVM (tekst do 4000 znaków lub do 60 pozycji); nowe flagi tylko z uprawnieniem Zasilanie.
dryRunbooleannie`apply`: tylko zbudować polecenie i nic nie zapisywać.
majorintegernie`java` (wymagane): główna wersja Javy 8–99.
restartbooleanniePo zmianie zrestartować (wyłączony serwer uruchomić).

Przykładowa treść

{
  "preset": "standard",
  "extraFlags": [],
  "restart": true
}

Przykładowa odpowiedź

{
  "ok": true,
  "command": "java -Xms6656M -Xmx6656M -XX:+UseG1GC -jar server.jar nogui",
  "heapMb": 6656,
  "preset": "standard",
  "restarted": true,
  "restartError": null,
  "restartErrorMsg": null
}

Możliwe błędy

  • 400 Nieprawidłowa treść żądania (klucz komunikatu w `msg`).
  • 403EXTRA_FLAGS_PERMISSION Nowe własne flagi bez uprawnienia Zasilanie (pole `token`).
  • 403 `restart` lub `java` bez wymaganych uprawnień.
  • 409NEED_IMPORT Oprogramowanie serwera nie jest ustawione.
  • 409NO_MEMORY_LIMIT Serwer nie ma limitu pamięci.
  • 409CHANGED Startup w międzyczasie się zmienił.
  • 409 Trwa zmiana oprogramowania lub instalacja.
  • 422PRESET Preset nie pasuje do tej Javy.
  • 422EXTRA_FLAGS Niedozwolona flaga (pole `token`).
  • 422TOO_OLD `java`: wersja jest za stara dla wersji Minecraft.
  • 422NO_IMAGE `java`: brak obrazu dla tej Javy.
  • 429 Limit: zmiana presetu 10 na godzinę, zmiana Javy 3 na godzinę.
GET/services/{id}/minecraft/textKolorowy nick i prefiks: opcje

Zwraca, czy serwer działa, erę składni tekstu dla wersji i które pluginy (EssentialsX, LuckPerms, TAB) są zainstalowane. Przy współdzielonej usłudze wymagane jest uprawnienie Konsola.

Uprawnienie: services:settings

Przykładowa odpowiedź

{
  "running": true,
  "state": "running",
  "version": "1.21.4",
  "era": "components",
  "eraKnown": true,
  "plugins": {
    "essentials": true,
    "luckperms": true,
    "tab": false
  }
}

Możliwe błędy

  • 412 Serwer nie jest teraz dostępny w panelu gry (komunikat `panel.unavailable` w polu `msg`).
  • 429 Zbyt wiele żądań, spróbuj ponownie za chwilę.
POST/services/{id}/minecraft/textUstawienie kolorowego tekstu na serwerze

Ze `spans` lub `doc` buduje na serwerze polecenie (nick EssentialsX, prefiks LuckPerms lub TAB, znacznik imienia, tellraw) i wysyła je do konsoli działającego serwera. Limit 20 na 10 minut.

Uprawnienie: services:settings

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringtak`essentials-nick`, `lp-prefix`, `tab-prefix`, `give-nametag` lub `tellraw`.
targetstringtakGracz lub grupa (1–36 znaków); przy `tellraw` także `@a`.
targetKindstringnie`lp-prefix` i `tab-prefix`: `group` (domyślnie) lub `player`.
priorityinteger | nullnie`lp-prefix`: priorytet 0–1000.
prefixFormatstringnie`lp-prefix`: `ampHex` (domyślnie), `amp`, `minimessage` lub `bungeeHex`.
tabFieldstringnie`tab-prefix`: `tabprefix` (domyślnie) lub `tagprefix`.
tabFormatstringnie`tab-prefix`: `tabGradient` (domyślnie), `ampHex` lub `minimessage`.
erastringnieEra składni (`legacy`, `json`, `jsonHex`, `components`, `snbt`), używana tylko przy nieznanej wersji serwera.
spansobject[]nieFragmenty `{ text, color: "#rrggbb" | null, bold?, italic?, underlined?, strikethrough?, obfuscated? }`, do 200. Wyślij `spans` albo `doc`.
docobjectnie`{ segments: [{ text, fill, … }] }`, gdzie `fill` to `{ kind: "solid", color }`, `{ kind: "gradient", colors: [2–5 kolorów] }` lub `{ kind: "rainbow" }`.

Przykładowa treść

{
  "action": "lp-prefix",
  "target": "vip",
  "targetKind": "group",
  "priority": 50,
  "doc": {
    "segments": [
      {
        "text": "[VIP] ",
        "fill": {
          "kind": "solid",
          "color": "#ffaa00"
        },
        "bold": true
      }
    ]
  }
}

Przykładowa odpowiedź

{
  "ok": true,
  "command": "lp group vip meta setprefix 50 \"&#FFAA00&l[VIP] \"",
  "warnings": [],
  "delivered": null
}

Możliwe błędy

  • 400INVALID Nieprawidłowa treść żądania.
  • 400TARGET Nieprawidłowy gracz lub grupa.
  • 400PRIORITY Priorytet musi być liczbą całkowitą 0–1000.
  • 400EMPTY Tekst jest pusty.
  • 400TOO_LONG Tekst jest za długi (nick do 64 znaków, pozostałe 256).
  • 400TOO_MANY_PARTS Tekst ma za dużo kolorowych fragmentów.
  • 409JOB Na serwerze trwa zmiana (zadanie).
  • 409 Serwer nie działa.
  • 429RATE_LIMITED Przekroczono limit zmian, spróbuj później.
  • 412 Serwer nie jest teraz dostępny w panelu gry (komunikat `panel.unavailable` w polu `msg`).
GET/services/{id}/minecraft/worldsŚwiaty serwera i przygotowane pobrania

Zwraca aktywny i zapisane światy (do 5), przygotowane pobrania, trwające zadanie świata, sloty kopii i stan serwera.

Uprawnienie: services:files

Przykładowa odpowiedź

{
  "active": "world",
  "activeValid": true,
  "worlds": [
    {
      "name": "world",
      "active": true,
      "exists": true,
      "extraFolders": [],
      "version": "1.21.4",
      "mtime": 1730970000,
      "seed": null,
      "createdAt": null
    },
    {
      "name": "creative",
      "active": false,
      "exists": true,
      "extraFolders": [],
      "version": "1.21.4",
      "mtime": 1730800000,
      "seed": "12345",
      "createdAt": "2026-11-01T18:00:00.000Z"
    }
  ],
  "unchecked": 0,
  "maxWorlds": 5,
  "exports": [
    {
      "id": "a1b2c3d4e5",
      "world": "world",
      "status": "ready",
      "createdAt": "2026-11-07T10:15:00.000Z",
      "expiresAt": "2026-11-07T12:15:00.000Z",
      "bytes": 104857600,
      "error": null,
      "errorMsg": null
    }
  ],
  "job": null,
  "jobOther": false,
  "backups": {
    "used": 1,
    "limit": 3,
    "free": true
  },
  "power": "running",
  "busy": null,
  "version": "1.21.4",
  "uploadMaxMb": 95,
  "canPower": true
}

Możliwe błędy

  • 412NO_PANEL Serwer nie jest teraz dostępny w panelu gry.
  • 429 Zbyt wiele żądań, spróbuj ponownie za chwilę.
POST/services/{id}/minecraft/worldsEksport, przełączenie, usunięcie i nowy świat

`export` przygotowuje archiwum świata w tle (202), pobierasz je przez worlds/download, najwyżej 3 razy na godzinę. `switch` i `reset` uruchamiają zadanie (202, postęp przez minecraft/job), serwer jest w tym czasie wyłączany i ponownie włączany; `delete` trwale usuwa zapisany świat. Poza `export` potrzebne jest też uprawnienie Zasilanie; najwyżej 10 zmian na godzinę.

Uprawnienie: services:files

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringtak`export`, `switch`, `delete` lub `reset`.
worldstringnie`export`, `switch`, `delete`: nazwa świata z listy (1–64 znaki).
oldstringnie`reset` (wymagane): `delete` usunąć stary świat, `keep` zachować jako zapisany.
keepAsstringnie`reset` z `keep`: nowa nazwa starego świata (1–32 znaki A–Z, a–z, 0–9, _ i -).
seedstringnie`reset`: seed nowego świata (do 128 znaków), pusty = losowy.
levelTypestringnie`reset`: `normal` (domyślnie), `flat`, `large_biomes` lub `amplified`.
structuresbooleannie`reset`: generować struktury, domyślnie `true`.
confirmNoBackupbooleannie`reset` z `delete`: potwierdzić usunięcie bez kopii, gdy brak wolnego slotu.

Przykładowa treść

{
  "action": "reset",
  "old": "keep",
  "keepAs": "stary_svet",
  "seed": "",
  "levelType": "normal",
  "structures": true
}

Przykładowa odpowiedź

{
  "ok": true,
  "job": {
    "id": "k3j9x2m1q8",
    "kind": "world-reset",
    "status": "queued",
    "step": "queued",
    "log": [],
    "startedAt": "2026-11-07T10:15:00.000Z",
    "updatedAt": "2026-11-07T10:15:00.000Z",
    "error": null,
    "errorMsg": null,
    "progress": null
  }
}

Możliwe błędy

  • 400INVALID Nieprawidłowa treść żądania.
  • 400BAD_NAME Nieprawidłowa nazwa świata.
  • 400RESERVED_NAME Nazwa należy do folderu serwera.
  • 400BAD_SEED Nieprawidłowy seed.
  • 403FORBIDDEN Brak uprawnienia Zasilanie.
  • 404NO_SUCH_WORLD Świata nie ma na serwerze.
  • 409ACTIVE_WORLD Świat jest teraz aktywny.
  • 409NAME_TAKEN Folder o tej nazwie już istnieje.
  • 409TOO_MANY_WORLDS Serwer może mieć najwyżej 5 światów.
  • 409NEEDS_CONFIRM Stary świat zostanie usunięty bez kopii, wyślij `confirmNoBackup: true`.
  • 409JOB_RUNNING Na serwerze trwa już inna zmiana.
  • 409EXPORT_RUNNING Pobranie świata jest już przygotowywane.
  • 409DISK Za mało miejsca na dysku serwera.
  • 409STATE Serwer właśnie się uruchamia lub zatrzymuje.
  • 429RATE_LIMITED Przekroczono limit zmian, spróbuj później.
  • 412NO_PANEL Serwer nie jest teraz dostępny w panelu gry.
GET/services/{id}/minecraft/worlds/downloadPobranie przygotowanego świata

Pobiera archiwum przygotowane akcją `export` (ZIP lub tar.gz). Po pełnym pobraniu archiwum jest usuwane z serwera; naraz jedno pobieranie na usługę, najwyżej 10 na godzinę.

Uprawnienie: services:files

Parametry w adresie

NazwaTypWymaganeOpis
idstringtak`id` pobrania z `exports` (10 znaków hex).
formatstringnie`zip` (domyślnie) lub `tar.gz`.

Przykładowa odpowiedź

HTTP/1.1 200 OK
Content-Type: application/zip
Content-Disposition: attachment; filename="world-2026-11-07.zip"

(binary archive)

Możliwe błędy

  • 400INVALID Brak `id` lub jest nieprawidłowe.
  • 404EXPORT_GONE Pobranie nie jest już przygotowane, przygotuj je ponownie.
  • 429DOWNLOAD_BUSY Pobieranie już trwa.
  • 429RATE_LIMITED Zbyt wiele pobrań.
  • 412NO_PANEL Serwer nie jest teraz dostępny w panelu gry.

Domeny

POST/services/{id}/domain/auth-infoWyślij AUTH-ID do transferu domeny

Prosi rejestratora o wysłanie AUTH-ID (kodu do przeniesienia domeny do innego rejestratora) e-mailem do abonenta domeny. Kod nie jest zwracany w odpowiedzi. Tylko właściciel, maksymalnie 3 razy na godzinę. Uprawnienie services:secrets można nadać tylko kluczowi ograniczonemu do adresów IP.

Uprawnienie: services:secrets

Treść żądania (JSON)

NazwaTypWymaganeOpis
localestringnieJęzyk komunikatów o błędach: cs, en, sk, pl lub de. Domyślnie cs.

Przykładowa treść

{
  "locale": "cs"
}

Przykładowa odpowiedź

{
  "ok": true
}

Możliwe błędy

  • 400invalid Treść żądania zawiera nieznane pole.
  • 403 Tę operację może wykonać tylko właściciel domeny, nie członek udostępnionej usługi.
  • 404 Usługa nie istnieje, nie należy do ciebie lub klucz nie ma do niej dostępu.
  • 409inactive Domena nie jest jeszcze aktywna.
  • 429 Przekroczono limit 3 żądań na godzinę.
  • 503unavailable Wysyłka jest chwilowo niedostępna. Spróbuj później.
  • 422failed Rejestrator odrzucił żądanie.
GET/services/{id}/domain/connectPlan podłączenia domeny do usługi

Wylicza rekordy DNS, które kierują domenę lub subdomenę na twój VPS albo serwer gier (Minecraft, FiveM), i pokazuje, co zostanie dodane, a co zastąpione w strefie. Niczego nie zmienia. Dla domeny poza naszym DNS zwraca mode manual z rekordami do ręcznego ustawienia.

Uprawnienie: domains:read

Parametry w adresie

NazwaTypWymaganeOpis
servicestringtakID twojego aktywnego VPS lub serwera gier (Minecraft, FiveM). Udostępnione usługi nie są dozwolone.
hoststringtakNazwa w domenie: @ dla samej domeny albo subdomena (litery, cyfry, myślniki, bez * i _).
localestringnieJęzyk komunikatów o błędach: cs, en, sk, pl lub de. Domyślnie cs.

Przykładowa odpowiedź

{
  "mode": "zone",
  "domain": "example.com",
  "host": "@",
  "kind": "vps",
  "records": [
    {
      "type": "A",
      "host": "@",
      "fqdn": "example.com",
      "value": "203.0.113.25",
      "ttl": 300
    },
    {
      "type": "AAAA",
      "host": "@",
      "fqdn": "example.com",
      "value": "2001:db8::25",
      "ttl": 300
    }
  ],
  "notes": [],
  "add": [
    {
      "type": "AAAA",
      "host": "@",
      "fqdn": "example.com",
      "value": "2001:db8::25",
      "ttl": 300
    }
  ],
  "replace": [
    {
      "type": "A",
      "host": "@",
      "fqdn": "example.com",
      "value": "198.51.100.7",
      "ttl": 3600
    }
  ],
  "unchanged": false,
  "withinLimit": true,
  "planHash": "3f9a0c1b2d4e5f60718293ab"
}

Możliwe błędy

  • 403 Tę operację może wykonać tylko właściciel domeny, nie członek udostępnionej usługi.
  • 404 Usługa nie istnieje, nie należy do ciebie lub klucz nie ma do niej dostępu.
  • 409inactive Domena nie jest jeszcze aktywna.
  • 400host Nieprawidłowa nazwa: podaj @ dla samej domeny albo subdomenę z liter, cyfr i myślników.
  • 404service Usługa nie istnieje, nie należy do ciebie, nie jest aktywna lub nie da się jej podłączyć.
  • 409no_address Usługa nie ma publicznego adresu, do którego można podłączyć domenę.
  • 503unavailable Nie można teraz ustalić adresu usługi ani stanu DNS.
  • 429 Przekroczono limit 60 żądań na 10 minut.
POST/services/{id}/domain/connectPodłącz domenę do usługi

Tworzy w strefie rekordy z planu (A, AAAA, dla Minecrafta także SRV _minecraft._tcp, TTL 300). Wyślij planHash z GET; jeśli plan zastępuje istniejące rekordy, wymagane jest confirm: true. Tylko dla domeny na naszym DNS.

Uprawnienie: domains:write

Treść żądania (JSON)

NazwaTypWymaganeOpis
serviceIdstringtakID twojego aktywnego VPS lub serwera gier, takie samo jak w GET.
hoststringtakNazwa w domenie, taka sama jak w GET (@ lub subdomena).
planHashstringtakOdcisk planu z GET (24 znaki hex). Jeśli strefa w międzyczasie się zmieni, wróci 409 changed z nowym planem.
confirmbooleanniePotwierdzenie, że istniejące rekordy z replace zostaną zastąpione. Wymagane, gdy replace nie jest puste.
localestringnieJęzyk komunikatów o błędach: cs, en, sk, pl lub de. Domyślnie cs.

Przykładowa treść

{
  "serviceId": "clx9k2m4p0000svc01abcdef",
  "host": "@",
  "planHash": "3f9a0c1b2d4e5f60718293ab",
  "confirm": true
}

Przykładowa odpowiedź

{
  "ok": true,
  "mode": "zone",
  "domain": "example.com",
  "host": "@",
  "kind": "vps",
  "records": [
    {
      "type": "A",
      "host": "@",
      "fqdn": "example.com",
      "value": "203.0.113.25",
      "ttl": 300
    },
    {
      "type": "AAAA",
      "host": "@",
      "fqdn": "example.com",
      "value": "2001:db8::25",
      "ttl": 300
    }
  ],
  "notes": [],
  "add": [],
  "replace": [],
  "unchanged": true,
  "withinLimit": true,
  "planHash": "3f9a0c1b2d4e5f60718293ab"
}

Możliwe błędy

  • 400invalid Brakuje wymaganego pola lub ma ono zły format.
  • 403 Tę operację może wykonać tylko właściciel domeny, nie członek udostępnionej usługi.
  • 404 Usługa nie istnieje, nie należy do ciebie lub klucz nie ma do niej dostępu.
  • 409inactive Domena nie jest jeszcze aktywna.
  • 400host Nieprawidłowa nazwa: podaj @ dla samej domeny albo subdomenę z liter, cyfr i myślników.
  • 404service Usługa nie istnieje, nie należy do ciebie, nie jest aktywna lub nie da się jej podłączyć.
  • 409no_address Usługa nie ma publicznego adresu, do którego można podłączyć domenę.
  • 503unavailable Nie można teraz ustalić adresu usługi ani stanu DNS.
  • 409manual Domena nie korzysta z naszego DNS. Ustaw rekordy u swojego dostawcy DNS.
  • 409changed Strefa zmieniła się od GET. Odpowiedź zawiera nowy plan w polu plan.
  • 409confirm Plan zastępuje istniejące rekordy, a brakuje confirm: true. Odpowiedź zawiera plan w polu plan.
  • 409limit Strefa przekroczyłaby limit 200 rekordów.
  • 429 Przekroczono limit 60 zmian DNS na 10 minut (wspólny z zapisami rekordów DNS).
GET/services/{id}/domain/dnsLista rekordów DNS

Zwraca rekordy strefy domeny na naszym DNS (A, AAAA, CNAME, MX, TXT, SRV, CAA), serwery nazw i liczbę rekordów wobec limitu 200. delegated: false oznacza, że strefa jest gotowa, ale domena jeszcze nie wskazuje na nasz DNS.

Uprawnienie: domains:read

Parametry w adresie

NazwaTypWymaganeOpis
localestringnieJęzyk komunikatów o błędach: cs, en, sk, pl lub de. Domyślnie cs.

Przykładowa odpowiedź

{
  "zone": "example.com",
  "unicode": "example.com",
  "records": [
    {
      "id": "a1b2c3d4e5f60718293a",
      "type": "A",
      "host": "@",
      "ttl": 3600,
      "value": "203.0.113.25",
      "fields": {
        "host": "@",
        "ttl": "3600",
        "address": "203.0.113.25"
      }
    },
    {
      "id": "b2c3d4e5f60718293a4b",
      "type": "MX",
      "host": "@",
      "ttl": 3600,
      "value": "10 mail.example.com",
      "fields": {
        "host": "@",
        "ttl": "3600",
        "preference": "10",
        "exchange": "mail.example.com"
      }
    },
    {
      "id": "c3d4e5f60718293a4b5c",
      "type": "TXT",
      "host": "@",
      "ttl": 3600,
      "value": "v=spf1 mx -all",
      "fields": {
        "host": "@",
        "ttl": "3600",
        "text": "v=spf1 mx -all"
      }
    }
  ],
  "nameservers": [
    "ns1.stormhost.eu",
    "ns2.stormhost.eu"
  ],
  "count": 3,
  "limit": 200,
  "delegated": true
}

Możliwe błędy

  • 403 Tę operację może wykonać tylko właściciel domeny, nie członek udostępnionej usługi.
  • 404 Usługa nie istnieje, nie należy do ciebie lub klucz nie ma do niej dostępu.
  • 400 Usługa nie jest domeną.
  • 409inactive Domena nie jest jeszcze aktywna.
  • 409no_zone Domena nie ma strefy na naszym DNS. Przygotuj ją przez domain/zone albo przełącz serwery nazw na nasze.
  • 503unavailable Serwer DNS teraz nie odpowiada. Spróbuj później.
  • 422failed Nie udało się wprowadzić zmiany.
POST/services/{id}/domain/dnsDodaj rekord DNS

Dodaje rekord do strefy domeny na naszym DNS. Wszystkie wartości w record wysyła się jako tekst. Odpowiedź zawiera ID nowego rekordu i pełną nową listę strefy.

Uprawnienie: domains:write

Treść żądania (JSON)

NazwaTypWymaganeOpis
recordobjecttakNowy rekord.
record.typestringtakTyp rekordu: A, AAAA, CNAME, MX, TXT, SRV lub CAA.
record.hoststringnieNazwa: @ lub puste dla samej domeny, nazwa względna (www, _dmarc, *.dev) albo pełna nazwa kończąca się domeną.
record.ttlstringnieTTL w sekundach jako tekst, od 60 do 86400. Puste = 3600.
record.addressstringnieA: adres IPv4, AAAA: adres IPv6.
record.targetstringnieCNAME i SRV: nazwa docelowa (dla SRV także . = brak usługi). CNAME nie może być na samej domenie ani obok innego rekordu o tej samej nazwie.
record.preferencestringnieMX: priorytet od 0 do 65535 jako tekst.
record.exchangestringnieMX: nazwa serwera poczty (nie adres IP).
record.textstringnieTXT: tekst do 2000 znaków bez znaków sterujących.
record.prioritystringnieSRV: priorytet od 0 do 65535 jako tekst. Nazwa SRV musi mieć postać _usługa._protokół (tcp, udp, tls, sctp).
record.weightstringnieSRV: waga od 0 do 65535 jako tekst.
record.portstringnieSRV: port od 0 do 65535 jako tekst.
record.flagsstringnieCAA: flaga 0 lub 128 jako tekst.
record.tagstringnieCAA: issue, issuewild lub iodef.
record.valuestringnieCAA: dla issue i issuewild domena urzędu certyfikacji, dla iodef adres mailto: lub https:.
localestringnieJęzyk komunikatów o błędach: cs, en, sk, pl lub de. Domyślnie cs.

Przykładowa treść

{
  "record": {
    "type": "MX",
    "host": "@",
    "ttl": "3600",
    "preference": "10",
    "exchange": "mail.example.com"
  }
}

Przykładowa odpowiedź

{
  "ok": true,
  "id": "b2c3d4e5f60718293a4b",
  "zone": "example.com",
  "unicode": "example.com",
  "records": [
    {
      "id": "a1b2c3d4e5f60718293a",
      "type": "A",
      "host": "@",
      "ttl": 3600,
      "value": "203.0.113.25",
      "fields": {
        "host": "@",
        "ttl": "3600",
        "address": "203.0.113.25"
      }
    },
    {
      "id": "b2c3d4e5f60718293a4b",
      "type": "MX",
      "host": "@",
      "ttl": 3600,
      "value": "10 mail.example.com",
      "fields": {
        "host": "@",
        "ttl": "3600",
        "preference": "10",
        "exchange": "mail.example.com"
      }
    },
    {
      "id": "c3d4e5f60718293a4b5c",
      "type": "TXT",
      "host": "@",
      "ttl": 3600,
      "value": "v=spf1 mx -all",
      "fields": {
        "host": "@",
        "ttl": "3600",
        "text": "v=spf1 mx -all"
      }
    }
  ],
  "nameservers": [
    "ns1.stormhost.eu",
    "ns2.stormhost.eu"
  ],
  "count": 3,
  "limit": 200,
  "delegated": true
}

Możliwe błędy

  • 400 Rekord nie przeszedł walidacji. Pole code mówi dlaczego (np. type, host, host_zone, cname_apex, srv_host, ipv4, ipv6, target, text, ttl, caa_flags, caa_tag, caa_value, cname_conflict, duplicate, limit), a pole field, którego pola to dotyczy.
  • 403 Tę operację może wykonać tylko właściciel domeny, nie członek udostępnionej usługi.
  • 404 Usługa nie istnieje, nie należy do ciebie lub klucz nie ma do niej dostępu.
  • 400 Usługa nie jest domeną.
  • 409inactive Domena nie jest jeszcze aktywna.
  • 409no_zone Domena nie ma strefy na naszym DNS. Przygotuj ją przez domain/zone albo przełącz serwery nazw na nasze.
  • 503unavailable Serwer DNS teraz nie odpowiada. Spróbuj później.
  • 422failed Nie udało się wprowadzić zmiany.
  • 429 Przekroczono limit 60 zmian na 10 minut.
PATCH/services/{id}/domain/dnsZmień rekord DNS

Zmienia rekord według ID z listy. Pominięte lub puste pola pozostają bez zmian, typu rekordu nie można zmienić. ID wynika z wartości rekordu, więc po zmianie nazwy lub wartości odpowiedź zwraca nowe ID.

Uprawnienie: domains:write

Treść żądania (JSON)

NazwaTypWymaganeOpis
idstringtakID rekordu z listy (20 znaków hex).
recordobjecttakPola do zmiany (takie same jak przy dodawaniu, bez type).
record.hoststringnieNazwa: @ lub puste dla samej domeny, nazwa względna (www, _dmarc, *.dev) albo pełna nazwa kończąca się domeną.
record.ttlstringnieTTL w sekundach jako tekst, od 60 do 86400. Puste = 3600.
record.addressstringnieA: adres IPv4, AAAA: adres IPv6.
record.targetstringnieCNAME i SRV: nazwa docelowa (dla SRV także . = brak usługi). CNAME nie może być na samej domenie ani obok innego rekordu o tej samej nazwie.
record.preferencestringnieMX: priorytet od 0 do 65535 jako tekst.
record.exchangestringnieMX: nazwa serwera poczty (nie adres IP).
record.textstringnieTXT: tekst do 2000 znaków bez znaków sterujących.
record.prioritystringnieSRV: priorytet od 0 do 65535 jako tekst. Nazwa SRV musi mieć postać _usługa._protokół (tcp, udp, tls, sctp).
record.weightstringnieSRV: waga od 0 do 65535 jako tekst.
record.portstringnieSRV: port od 0 do 65535 jako tekst.
record.flagsstringnieCAA: flaga 0 lub 128 jako tekst.
record.tagstringnieCAA: issue, issuewild lub iodef.
record.valuestringnieCAA: dla issue i issuewild domena urzędu certyfikacji, dla iodef adres mailto: lub https:.
localestringnieJęzyk komunikatów o błędach: cs, en, sk, pl lub de. Domyślnie cs.

Przykładowa treść

{
  "id": "a1b2c3d4e5f60718293a",
  "record": {
    "address": "203.0.113.26",
    "ttl": "600"
  }
}

Przykładowa odpowiedź

{
  "ok": true,
  "id": "d4e5f60718293a4b5c6d",
  "zone": "example.com",
  "unicode": "example.com",
  "records": [
    {
      "id": "a1b2c3d4e5f60718293a",
      "type": "A",
      "host": "@",
      "ttl": 3600,
      "value": "203.0.113.25",
      "fields": {
        "host": "@",
        "ttl": "3600",
        "address": "203.0.113.25"
      }
    },
    {
      "id": "b2c3d4e5f60718293a4b",
      "type": "MX",
      "host": "@",
      "ttl": 3600,
      "value": "10 mail.example.com",
      "fields": {
        "host": "@",
        "ttl": "3600",
        "preference": "10",
        "exchange": "mail.example.com"
      }
    },
    {
      "id": "c3d4e5f60718293a4b5c",
      "type": "TXT",
      "host": "@",
      "ttl": 3600,
      "value": "v=spf1 mx -all",
      "fields": {
        "host": "@",
        "ttl": "3600",
        "text": "v=spf1 mx -all"
      }
    }
  ],
  "nameservers": [
    "ns1.stormhost.eu",
    "ns2.stormhost.eu"
  ],
  "count": 3,
  "limit": 200,
  "delegated": true
}

Możliwe błędy

  • 400 Rekord nie przeszedł walidacji. Pole code mówi dlaczego (np. type, host, host_zone, cname_apex, srv_host, ipv4, ipv6, target, text, ttl, caa_flags, caa_tag, caa_value, cname_conflict, duplicate, limit), a pole field, którego pola to dotyczy.
  • 404not_found W strefie nie ma rekordu o tym ID (mógł się w międzyczasie zmienić).
  • 403 Tę operację może wykonać tylko właściciel domeny, nie członek udostępnionej usługi.
  • 404 Usługa nie istnieje, nie należy do ciebie lub klucz nie ma do niej dostępu.
  • 400 Usługa nie jest domeną.
  • 409inactive Domena nie jest jeszcze aktywna.
  • 409no_zone Domena nie ma strefy na naszym DNS. Przygotuj ją przez domain/zone albo przełącz serwery nazw na nasze.
  • 503unavailable Serwer DNS teraz nie odpowiada. Spróbuj później.
  • 422failed Nie udało się wprowadzić zmiany.
  • 429 Przekroczono limit 60 zmian na 10 minut.
DELETE/services/{id}/domain/dnsUsuń rekord DNS

Usuwa rekord według ID z listy. ID wysyła się w treści żądania JSON. Odpowiedź zawiera nową listę strefy.

Uprawnienie: domains:write

Treść żądania (JSON)

NazwaTypWymaganeOpis
idstringtakID rekordu z listy (20 znaków hex).
localestringnieJęzyk komunikatów o błędach: cs, en, sk, pl lub de. Domyślnie cs.

Przykładowa treść

{
  "id": "c3d4e5f60718293a4b5c"
}

Przykładowa odpowiedź

{
  "ok": true,
  "zone": "example.com",
  "unicode": "example.com",
  "records": [
    {
      "id": "a1b2c3d4e5f60718293a",
      "type": "A",
      "host": "@",
      "ttl": 3600,
      "value": "203.0.113.25",
      "fields": {
        "host": "@",
        "ttl": "3600",
        "address": "203.0.113.25"
      }
    },
    {
      "id": "b2c3d4e5f60718293a4b",
      "type": "MX",
      "host": "@",
      "ttl": 3600,
      "value": "10 mail.example.com",
      "fields": {
        "host": "@",
        "ttl": "3600",
        "preference": "10",
        "exchange": "mail.example.com"
      }
    },
    {
      "id": "c3d4e5f60718293a4b5c",
      "type": "TXT",
      "host": "@",
      "ttl": 3600,
      "value": "v=spf1 mx -all",
      "fields": {
        "host": "@",
        "ttl": "3600",
        "text": "v=spf1 mx -all"
      }
    }
  ],
  "nameservers": [
    "ns1.stormhost.eu",
    "ns2.stormhost.eu"
  ],
  "count": 3,
  "limit": 200,
  "delegated": true
}

Możliwe błędy

  • 400invalid Brakuje id lub ma ono zły format.
  • 404not_found W strefie nie ma rekordu o tym ID.
  • 403 Tę operację może wykonać tylko właściciel domeny, nie członek udostępnionej usługi.
  • 404 Usługa nie istnieje, nie należy do ciebie lub klucz nie ma do niej dostępu.
  • 400 Usługa nie jest domeną.
  • 409inactive Domena nie jest jeszcze aktywna.
  • 409no_zone Domena nie ma strefy na naszym DNS. Przygotuj ją przez domain/zone albo przełącz serwery nazw na nasze.
  • 503unavailable Serwer DNS teraz nie odpowiada. Spróbuj później.
  • 422failed Nie udało się wprowadzić zmiany.
  • 429 Przekroczono limit 60 zmian na 10 minut.
POST/services/{id}/domain/nameserversZmień serwery nazw domeny

Zmienia serwery nazw w rejestrze: ours = nasz DNS (strefa zostanie utworzona, jeśli jej brak), custom = własne serwery (od 2 do 6), wedos = domyślny DNS rejestratora. Strefa na naszym DNS nie jest usuwana po przełączeniu, więc można wrócić. Zmiana zacznie działać na świecie dopiero po wygaśnięciu TTL w rejestrze.

Uprawnienie: domains:write

Treść żądania (JSON)

NazwaTypWymaganeOpis
modestringtakours, custom lub wedos.
nameserversarraynieTylko dla custom: od 2 do 6 serwerów w postaci { name, ipv4?, ipv6? }.
nameservers[].namestringtakNazwa serwera, np. ns1.example.net.
nameservers[].ipv4stringnieAdres IPv4. Tylko dla serwera wewnątrz tej samej domeny (np. ns1.example.com dla example.com), wtedy wymagany jest co najmniej jeden adres. W przeciwnym razie ignorowany.
nameservers[].ipv6stringnieAdres IPv6, te same zasady co dla ipv4.
localestringnieJęzyk komunikatów o błędach: cs, en, sk, pl lub de. Domyślnie cs.

Przykładowa treść

{
  "mode": "custom",
  "nameservers": [
    {
      "name": "ns1.example.com",
      "ipv4": "203.0.113.53"
    },
    {
      "name": "ns2.example.net"
    }
  ]
}

Przykładowa odpowiedź

{
  "ok": true,
  "mode": "custom",
  "nsset": null,
  "nameservers": [
    "ns1.example.com",
    "ns2.example.net"
  ]
}

Możliwe błędy

  • 400invalid Nieprawidłowa treść żądania (np. nieznany mode).
  • 400ns_count Dla custom potrzeba od 2 do 6 różnych serwerów.
  • 400ns_name Nieprawidłowa nazwa serwera. Pole index mówi którego.
  • 400ns_glue Serwer wewnątrz domeny potrzebuje adresu IPv4 lub IPv6.
  • 400ns_ip Nieprawidłowy adres IP serwera.
  • 400ns_ours Własne serwery to tylko nasze. Użyj mode ours.
  • 403 Tę operację może wykonać tylko właściciel domeny, nie członek udostępnionej usługi.
  • 404 Usługa nie istnieje, nie należy do ciebie lub klucz nie ma do niej dostępu.
  • 409inactive Domena nie jest jeszcze aktywna.
  • 429 Przekroczono limit 10 zmian na 10 minut.
  • 503unavailable Rejestr lub serwer DNS jest teraz niedostępny. Spróbuj później.
  • 422failed Rejestr odrzucił zmianę.
POST/services/{id}/domain/zonePrzygotuj strefę na naszym DNS

Tworzy pustą strefę domeny na naszym DNS bez zmiany serwerów nazw. Przydaje się po transferze domeny: najpierw uzupełnij rekordy przez domain/dns, a dopiero potem przełącz NS. Rekordy z dotychczasowego DNS nie są przenoszone. Jeśli strefa już istnieje, zwraca ok: true i existed: true.

Uprawnienie: domains:write

Treść żądania (JSON)

NazwaTypWymaganeOpis
localestringnieJęzyk komunikatów o błędach: cs, en, sk, pl lub de. Domyślnie cs.

Przykładowa treść

{
  "locale": "cs"
}

Przykładowa odpowiedź

{
  "ok": true
}

Możliwe błędy

  • 400invalid Treść żądania zawiera nieznane pole.
  • 403 Tę operację może wykonać tylko właściciel domeny, nie członek udostępnionej usługi.
  • 404 Usługa nie istnieje, nie należy do ciebie lub klucz nie ma do niej dostępu.
  • 409inactive Domena nie jest jeszcze aktywna.
  • 429 Przekroczono limit 10 żądań na 10 minut.
  • 503not_ready DNS dla domen nie jest teraz gotowy. Spróbuj później.
  • 422failed Nie udało się utworzyć strefy.

Płatności i dokumenty

GET/creditSaldo i historia kredytu

Zwraca saldo kredytu w CZK z podziałem na bonus, część bezzwrotną i zwrotną, oczekujące doładowania i historię operacji (50 na stronę, od najnowszych). Jeśli kredyt nie jest jeszcze dostępny, zwraca tylko available: false.

Uprawnienie: billing:read

Parametry w adresie

NazwaTypWymaganeOpis
pageintegernieStrona historii od 1. Domyślnie 1.
localestringnieJęzyk komunikatów o błędach: cs, en, sk, pl lub de. Domyślnie cs.

Przykładowa odpowiedź

{
  "available": true,
  "balanceCzk": 450,
  "bonusCzk": 50,
  "nonRefundableCzk": 0,
  "refundableCzk": 400,
  "pending": [
    {
      "orderId": "clx9k2m4p0001ord02abcdef",
      "invoiceId": "clx9k2m4p0001inv02abcdef",
      "number": "DK-2026-0007",
      "amountCzk": 200,
      "dueAt": "2026-11-14T23:59:59.000Z",
      "createdAt": "2026-11-06T12:00:00.000Z",
      "paymentStarted": false
    }
  ],
  "history": {
    "items": [
      {
        "id": "clx9k2m4p0000ctx01abcdef",
        "seq": 2,
        "type": "SPEND",
        "kind": null,
        "amountCzk": -249,
        "balanceAfterCzk": 450,
        "createdAt": "2026-11-02T10:15:00.000Z",
        "invoiceId": "clx9k2m4p0000inv01abcdef",
        "invoiceNumber": "2026-0042",
        "orderId": "clx9k2m4p0000ord01abcdef",
        "note": null,
        "refundRequestId": null
      },
      {
        "id": "clx9k2m4p0000ctx00abcdef",
        "seq": 1,
        "type": "TOPUP",
        "kind": null,
        "amountCzk": 699,
        "balanceAfterCzk": 699,
        "createdAt": "2026-10-20T08:00:00.000Z",
        "invoiceId": "clx9k2m4p0000inv00abcdef",
        "invoiceNumber": "DK-2026-0005",
        "orderId": "clx9k2m4p0000ord00abcdef",
        "note": null,
        "refundRequestId": null
      }
    ],
    "page": 1,
    "pages": 1,
    "total": 2
  }
}

Możliwe błędy

  • 429rate_limited Przekroczono limit 60 zapytań na minutę.
POST/credit/payZapłać fakturę z kredytu

Opłaca nieopłaconą fakturę zamówienia (np. nowej usługi lub ulepszenia) z kredytu konta. Kredyt jest odejmowany od razu, utworzenie usługi lub ulepszenie kończy się po odpowiedzi. Faktur za doładowanie kredytu nie można tak opłacić.

Uprawnienie: billing:write

Treść żądania (JSON)

NazwaTypWymaganeOpis
invoiceIdstringtakID nieopłaconej faktury.
expectedAmountCzknumbertakOczekiwana kwota faktury w CZK. Musi dokładnie odpowiadać cenie zamówienia, inaczej wróci 409 amount_changed z aktualną kwotą.
ackOpenGatewaybooleanniePotwierdzenie, że chcesz zapłacić kredytem, mimo że do faktury jest otwarta płatność w bramce. Domyślnie false.
localestringnieJęzyk komunikatów o błędach: cs, en, sk, pl lub de. Domyślnie cs.

Przykładowa treść

{
  "invoiceId": "clx9k2m4p0000inv01abcdef",
  "expectedAmountCzk": 249
}

Przykładowa odpowiedź

{
  "ok": true,
  "orderId": "clx9k2m4p0000ord01abcdef",
  "amountCzk": 249,
  "balanceCzk": 201,
  "next": "/cs/order/clx9k2m4p0000ord01abcdef?credit=paid"
}

Możliwe błędy

  • 400invalid Brakuje wymaganego pola lub ma ono zły format.
  • 403locked Konto jest tymczasowo zablokowane.
  • 404invoice_not_found Faktura nie istnieje lub nie należy do ciebie.
  • 409insufficient Za mało kredytu. Odpowiedź zawiera balanceCzk i neededCzk.
  • 409amount_changed Kwota się zmieniła. Aktualna jest w amountCzk.
  • 409closed Faktura jest już opłacona lub anulowana.
  • 409expired Faktura proforma wygasła po terminie płatności.
  • 409upgrade_expired Oferta ulepszenia była ważna tylko do końca okresu usługi i została anulowana.
  • 409gateway_open Do faktury jest otwarta płatność w bramce. Wyślij ackOpenGateway: true.
  • 409payment_in_progress Płatność w bramce jest w toku.
  • 409paid_unreconciled Płatność już wpłynęła, ale nie została jeszcze przypisana.
  • 409topup_not_payable Faktury za doładowanie kredytu nie można opłacić kredytem.
  • 409not_payable Faktura nie dotyczy zamówienia, które można opłacić.
  • 409capacity Brak teraz wolnych zasobów dla zamówionej usługi.
  • 409billing_profile_incomplete Brakuje danych rozliczeniowych konta. Odpowiedź zawiera settingsUrl.
  • 409foreign_eu_vat Zamówienia firm z innych krajów UE są na razie obsługiwane indywidualnie.
  • 429rate_limited Przekroczono limit 10 prób na minutę.
  • 503unavailable Kredyt nie jest teraz dostępny.
  • 503gateway_check_failed Nie można teraz sprawdzić stanu płatności w bramce. Spróbuj później.
  • 503capacity_busy Nie można teraz sprawdzić zasobów. Spróbuj za chwilę.
GET/invoicesLista dokumentów

Zwraca dokumenty konta od najnowszego wraz z pozycjami. Kwoty są w CZK.

Uprawnienie: billing:read

Parametry w adresie

NazwaTypWymaganeOpis
statusstringnieFiltr według stanu: PENDING, PAID, CANCELLED lub REFUNDED. Inna wartość jest ignorowana.
limitintegernieLiczba dokumentów, od 1 do 200. Domyślnie 50.

Przykładowa odpowiedź

{
  "data": [
    {
      "id": "clx9k2m4p0000inv01abcdef",
      "number": "2026-0042",
      "status": "PAID",
      "totalCzk": 249,
      "currency": "CZK",
      "items": [
        {
          "description": "VPS Start (1 měsíc)",
          "priceCzk": 249,
          "quantity": 1
        }
      ],
      "dueAt": "2026-11-14T23:59:59.000Z",
      "paidAt": "2026-11-02T10:15:00.000Z",
      "createdAt": "2026-11-01T08:00:00.000Z"
    }
  ]
}
GET/invoices/{id}/pdfPDF faktury

Pobiera PDF opłaconej lub zwróconej faktury. Nieopłacone dokumenty nie mają PDF.

Uprawnienie: billing:read

Parametry w adresie

NazwaTypWymaganeOpis
langstringnieen = angielska nazwa pliku, w przeciwnym razie czeska.

Przykładowa odpowiedź

application/pdf (Content-Disposition: attachment; filename="faktura-2026-0042.pdf")

Możliwe błędy

  • 404not_found Faktura nie istnieje, nie należy do ciebie lub nie jest opłacona.
  • 409preparing Faktura jest jeszcze wystawiana. Spróbuj później.
  • 429rate_limited Przekroczono limit 20 pobrań na minutę.
  • 503not_ready PDF jest właśnie przygotowywany. Spróbuj za kilka sekund (nagłówek Retry-After).
  • 503unavailable Nie można teraz pobrać PDF. Spróbuj później.
GET/services/{id}/external-invoices/{key}/pdfPDF faktury z rozliczeń cyklicznych

Pobiera PDF faktury za usługę opłacaną fakturą cykliczną poza portalem. {key} to 22-znakowy klucz faktury z przeglądu płatności usługi w portalu. Tylko właściciel usługi (VPS, serwer gier, hosting).

Uprawnienie: billing:read

Parametry w adresie

NazwaTypWymaganeOpis
langstringnieJęzyk nazwy pliku: cs, en, sk, pl lub de. Domyślnie cs.

Przykładowa odpowiedź

application/pdf (Content-Disposition: attachment; filename="faktura-2026-0042.pdf")

Możliwe błędy

  • 404not_found Faktura lub usługa nie istnieje, nie należy do ciebie albo nie jesteś właścicielem. Odpowiedź jest zawsze taka sama.
  • 429rate_limited Przekroczono limit 20 pobrań na minutę.
  • 503not_ready PDF jest właśnie przygotowywany. Spróbuj za kilka sekund (nagłówek Retry-After).
  • 503unavailable Nie można teraz pobrać PDF. Spróbuj później.
GET/services/{id}/game-upgradeOpcje zmiany pakietu gry lub bota

Zwraca obecny pakiet serwera gry lub bota Discord, większe i mniejsze pakiety z cenami i dopłatą, dodatek kopii oraz rozpoczęte lub zaplanowane zmiany. Tylko dla właściciela usługi.

Uprawnienie: services:read

Parametry w adresie

NazwaTypWymaganeOpis
viewstringnierestart = zwraca tylko { restartPending } (czy serwer czeka na restart po zmianie pakietu); działa też dla członków.
localestringnieJęzyk tekstów w odpowiedzi: en, w przeciwnym razie cs.

Przykładowa odpowiedź

{
  "product": "minecraft",
  "productName": "Minecraft",
  "current": {
    "planLabel": "Minecraft 4 GB",
    "packageId": "mc-4gb",
    "legacy": false,
    "memoryMib": 4096,
    "diskMib": 30720,
    "cpu": 200,
    "databases": 1,
    "allocations": 2,
    "backups": 0
  },
  "backups": {
    "included": 0,
    "addon": 0,
    "grandfathered": 0,
    "addonAvailable": true,
    "addonPriceCzk": 120,
    "addonUnitCzk": 0,
    "maxAddon": 1
  },
  "monthlyCzk": 249,
  "period": {
    "start": "2026-11-01T00:00:00.000Z",
    "end": "2026-12-01T00:00:00.000Z",
    "remainingDays": 24,
    "periodDays": 30
  },
  "packages": [
    {
      "id": "mc-6gb",
      "name": "Minecraft 6 GB",
      "cores": 3,
      "cpuUnlimited": false,
      "ramGb": 6,
      "diskGb": 45,
      "ports": 3,
      "databases": 2,
      "includedBackups": 0,
      "priceCzk": 349,
      "recommended": true,
      "fits": true,
      "message": null
    }
  ],
  "options": [
    {
      "packageId": "mc-6gb",
      "addon": 0,
      "monthlyCzk": 349,
      "chargeCzk": 80,
      "after": {
        "memoryMib": 6144,
        "diskMib": 46080,
        "cpu": 300,
        "databases": 2,
        "allocations": 3,
        "backups": 0
      }
    }
  ],
  "effectiveAt": "2026-12-01T00:00:00.000Z",
  "lowerPackages": [],
  "downgradeOptions": [],
  "removeBackup": {
    "available": false
  },
  "downgradeBlocker": null,
  "customStartup": false,
  "scheduled": null,
  "lastChange": null,
  "nextPeriodPriceCzk": 249,
  "pendingOrder": null,
  "upgradeInProgress": false,
  "blocker": null,
  "restartPending": false,
  "recurringMaxCzk": null,
  "billingIncomplete": false,
  "customerType": "consumer"
}

Możliwe błędy

  • 403 Tylko dla właściciela usługi.
  • 409unavailable Zmiana pakietu nie jest teraz możliwa (nieznany pakiet lub stan usługi).
  • 503 Panel gier teraz nie odpowiada.
POST/services/{id}/game-upgradeZamówić większy lub zaplanować mniejszy pakiet

Bez action (lub z action order) tworzy zamówienie większego pakietu lub dodatku kopii z fakturą zaliczkową; zmiana nastąpi po opłaceniu. Mniejszy pakiet planuje się od następnego okresu, nic się nie płaci ani nie zwraca. Tylko dla właściciela.

Uprawnienie: billing:write

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringnieorder (domyślnie), cancelPending (anulować nieopłacone zamówienie), scheduleDowngrade (mniejszy pakiet od następnego okresu) lub cancelScheduled (anulować zaplanowaną zmianę).
packageIdstring | nullnieorder, scheduleDowngrade: id docelowego pakietu z GET (packages, lowerPackages). Bez niego zostaje obecny pakiet.
backupsintegernieorder, scheduleDowngrade: liczba dodatków kopii, 0 lub 1.
immediateStartRequestedbooleannieorder: konsument prosi o natychmiastowe wykonanie zmiany (regulamin art. 9.8). Bez numeru firmy musi być true.
businessPurposebooleannieorder: oświadczenie, że zamówienie służy działalności gospodarczej.
expectedChargeCzknumber | nullnieorder: dopłata, którą widziałeś. Jeśli się różni, zwracane jest 409 price_changed i nic nie powstaje.
expectedMonthlyCzknumber | nullnieorder, scheduleDowngrade: nowa cena miesięczna, którą widziałeś. Jeśli się różni, zwracane jest 409 price_changed.
changeIdstringniecancelScheduled: id zaplanowanej zmiany (scheduled.id z GET); jeśli się nie zgadza, zwracane jest 409 changed.
localestringnieJęzyk komunikatów: cs, en, sk, pl lub de. Domyślnie cs.

Przykładowa treść

{
  "packageId": "mc-6gb",
  "backups": 0,
  "immediateStartRequested": true,
  "expectedChargeCzk": 80,
  "expectedMonthlyCzk": 349,
  "locale": "cs"
}

Przykładowa odpowiedź

{
  "orderId": "ord_7Hq2mX9pLk",
  "chargeCzk": 80,
  "monthlyToCzk": 349,
  "scheduledCancelled": false
}

Możliwe błędy

  • 400 Nieprawidłowe żądanie lub pakiet, którego nie można wybrać.
  • 400immediate_start_required Konsument musi wysłać immediateStartRequested: true.
  • 403 Tylko dla właściciela usługi.
  • 404none cancelScheduled: brak zaplanowanej zmiany.
  • 409billing_profile_incomplete Brakuje danych rozliczeniowych konta.
  • 409pending_order Istnieje już nieopłacone zamówienie upgradu (orderId w odpowiedzi).
  • 409upgrade_in_progress Opłacony upgrade jest jeszcze wdrażany.
  • 409price_changed Cena się zmieniła; odpowiedź zawiera newChargeCzk i newMonthlyCzk.
  • 409capacity Większy pakiet nie mieści się na serwerze.
  • 409does_not_fit scheduleDowngrade: dane nie mieszczą się w mniejszym pakiecie (powody w reasons).
  • 409transfer_pending Usługa czeka na przeniesienie.
  • 409refund_open Dla usługi trwa odstąpienie lub zwrot pieniędzy.
  • 409renewal_paid Następny okres jest opłacony w cenie zaplanowanego mniejszego pakietu.
  • 409change_applying Mniejszy pakiet jest właśnie wdrażany.
  • 409too_late cancelScheduled: zmiana już obowiązuje.
  • 503price_list_unavailable Cennika nie można teraz wczytać; nic nie jest naliczane.
GET/services/{id}/order-upgradeOferta rozbudowy VPS

Zwraca obecną konfigurację VPS, cenę miesięczną, stawki, najwyższe możliwe wartości według wolnej pojemności, okres rozliczeniowy i ewentualne nieopłacone zamówienie rozbudowy. Tylko właściciel.

Uprawnienie: services:read

Parametry w adresie

NazwaTypWymaganeOpis
localestringnieen dla tekstów po angielsku, w przeciwnym razie po czesku.

Przykładowa odpowiedź

{
  "tier": "vps-performance",
  "tierName": "VPS Performance",
  "current": {
    "cores": 2,
    "ramGb": 4,
    "diskGb": 60,
    "ipv4": 1
  },
  "monthlyCzk": 390,
  "rates": {
    "perCore": 0,
    "perGbRam": 95,
    "perGbDisk": 0,
    "perIpv4": 60
  },
  "priceList": {
    "fp": "a1b2c3d4",
    "rates": {
      "perCore": 0,
      "perGbRam": 95,
      "perGbDisk": 0,
      "perIpv4": 60
    },
    "packages": [],
    "diskAddon": {
      "perGb": 2,
      "stepGb": 10
    }
  },
  "limits": {
    "max": {
      "cores": 16,
      "ramGb": 24,
      "diskGb": 500,
      "ipv4": 5
    },
    "staticMax": {
      "cores": 16,
      "ramGb": 32,
      "diskGb": 500,
      "ipv4": 5
    }
  },
  "capacity": "limited",
  "unavailable": null,
  "upgradeInProgress": false,
  "period": {
    "start": "2026-11-01T00:00:00.000Z",
    "end": "2026-12-01T00:00:00.000Z",
    "remainingDays": 24,
    "periodDays": 30
  },
  "pendingOrder": null,
  "pendingRestart": false,
  "ipv4Pending": 0,
  "recurringMaxCzk": null,
  "billingIncomplete": false,
  "customerType": "consumer"
}

Możliwe błędy

  • 400 Usługa nie jest VPS.
  • 403 Nie jesteś właścicielem usługi.
  • 409 Usługa nie jest aktywna.
POST/services/{id}/order-upgradeZamów rozbudowę VPS

Tworzy zamówienie rozbudowy VPS z fakturą zaliczkową na proporcjonalną dopłatę do końca okresu; rozbudowa następuje dopiero po zapłacie. Cenę liczy serwer według RAM, dysk można tylko zwiększyć; action cancelPending anuluje nieopłacone zamówienie.

Uprawnienie: billing:write

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringnieorder (domyślnie) lub cancelPending.
ramGbnumbernieNowa RAM w GB (1–32); vCPU wynika z RAM. Brak = bez zmian.
diskGbnumbernieDysk w GB (20–500), tylko w górę.
ipv4numbernieLiczba adresów IPv4 (1–5).
coresnumbernievCPU (1–16); przy cenie według RAM jest wyliczane.
localestringnieJęzyk komunikatów i opisu zamówienia: cs, en, sk, pl lub de.
immediateStartRequestedbooleannieKonsument: true = prośba o natychmiastowe wykonanie zmiany; bez niej zamówienie nie powstanie.
businessPurposebooleannieKonto z numerem firmy: true = oświadczenie o celu biznesowym (wtedy natychmiastowe wykonanie nie jest wymagane).
expectedChargeCzknumbernieWyświetlona dopłata; inna niż wyliczona = 409 price_changed.
expectedMonthlyCzknumbernieWyświetlona nowa cena miesięczna; inna = 409 price_changed.

Przykładowa treść

{
  "ramGb": 8,
  "diskGb": 100,
  "locale": "cs",
  "immediateStartRequested": true,
  "expectedChargeCzk": 312,
  "expectedMonthlyCzk": 780
}

Przykładowa odpowiedź

{
  "orderId": "clx9o4ord0001",
  "chargeCzk": 312,
  "monthlyToCzk": 780
}

Możliwe błędy

  • 400immediate_start_required Brak prośby o natychmiastowe wykonanie. Bez kodu: nieprawidłowe wartości (pole field) lub brak zwiększenia.
  • 409pending_order Istnieje już otwarte zamówienie (orderId). Inne kody: billing_profile_incomplete, foreign_eu_vat, unavailable, transfer_pending, upgrade_in_progress, refund_open, renewal_payment, renewal_overdue, capacity.
  • 409price_changed Cena się zmieniła; nowe wartości w newChargeCzk i newMonthlyCzk, nic nie utworzono.
  • 503capacity_unknown Nie można teraz sprawdzić wolnej pojemności. Kod price_list_unavailable: nie można teraz wczytać cennika.
GET/services/{id}/renewalStan odnowienia i płatności usługi

Zwraca stan odnowienia usługi, koniec opłaconego okresu, następną płatność, płatności automatyczne i historię wezwań. Dla VPS, gier, WWW i domen; członek udostępnionej usługi dostaje tylko managed, status i paidUntil.

Uprawnienie: services:read

Parametry w adresie

NazwaTypWymaganeOpis
localestringnieen dla tekstów po angielsku, w przeciwnym razie po czesku.

Przykładowa odpowiedź

{
  "serviceId": "clx9svc000001",
  "managed": true,
  "status": "awaiting_payment",
  "paidUntil": "2026-12-01T00:00:00.000Z",
  "owner": {
    "nextPayment": {
      "amountCzk": 390,
      "periodStart": "2026-12-01T00:00:00.000Z",
      "periodEnd": "2027-01-01T00:00:00.000Z",
      "issueAt": "2026-11-17T00:00:00.000Z",
      "dueAt": "2026-12-01T00:00:00.000Z",
      "method": "manual",
      "invoice": {
        "orderId": "clx9o4ord0002",
        "invoiceId": "clx9i5inv0002",
        "number": "ZF2026110042",
        "status": "PENDING",
        "payUrl": "/cs/order/clx9o4ord0002"
      }
    },
    "suspendAt": null,
    "terminateAt": null,
    "autoPay": {
      "credit": {
        "enabled": true,
        "globallyAllowed": true,
        "held": false,
        "balanceCzk": 120,
        "sufficient": false
      },
      "card": {
        "enabled": false,
        "available": false,
        "last4": null,
        "maxAmountCzk": null,
        "unavailableReason": null
      }
    },
    "endAtTermEnd": null,
    "canPay": true,
    "canExtendEarly": false,
    "canEndAtTermEnd": true,
    "history": []
  }
}

Możliwe błędy

  • 400 Ten typ usługi nie ma odnowienia w portalu (np. rackhousing).
  • 404not_found Nie znaleziono usługi.
POST/services/{id}/renewalZapłać lub przedłuż wcześniej

Zwraca otwarte wezwanie do zapłaty lub wcześniej wystawia wezwanie na następny okres (najwyżej jeden okres do przodu) wraz z linkiem do płatności. Nowe wezwanie zwraca 201; tylko właściciel, limit 20 na godzinę, treść jako application/json.

Uprawnienie: billing:write

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringtakZawsze pay.
localestringnieJęzyk komunikatów i wezwania: cs, en, sk, pl lub de.

Przykładowa treść

{
  "action": "pay",
  "locale": "cs"
}

Przykładowa odpowiedź

{
  "orderId": "clx9o4ord0003",
  "payUrl": "/cs/order/clx9o4ord0003",
  "created": true
}

Możliwe błędy

  • 400invalid Nieprawidłowa treść.
  • 409not_allowed Przedłużenie nie jest teraz możliwe. Inne kody: not_managed, terminated, term_end, payment_started, failed.
  • 429rate_limited Ponad 20 żądań na godzinę.
  • 503failed Nie udało się teraz wystawić wezwania.
PATCH/services/{id}/renewalPłatności automatyczne i wypowiedzenie na koniec okresu

Włącza lub wyłącza płatność z kredytu i kartą oraz składa lub cofa wypowiedzenie na koniec opłaconego okresu. Wypowiedzenie anuluje otwarte wezwania bez płatności, usługa kończy się z końcem okresu i przychodzi potwierdzenie e-mailem. Tylko właściciel, treść jako application/json.

Uprawnienie: billing:write

Treść żądania (JSON)

NazwaTypWymaganeOpis
autoCreditbooleannieOpłacaj odnowienie automatycznie z kredytu.
autoCardbooleannieOpłacaj odnowienie automatycznie zapisaną kartą.
endAtTermEndbooleannietrue = wypowiedzenie na koniec opłaconego okresu, false = cofnij wypowiedzenie.
localestringnieJęzyk komunikatów: cs, en, sk, pl lub de.

Przykładowa treść

{
  "endAtTermEnd": true,
  "locale": "cs"
}

Przykładowa odpowiedź

{
  "serviceId": "clx9svc000001",
  "managed": true,
  "status": "ending",
  "paidUntil": "2026-12-01T00:00:00.000Z",
  "owner": {
    "nextPayment": null,
    "suspendAt": null,
    "terminateAt": null,
    "autoPay": {
      "credit": {
        "enabled": true,
        "globallyAllowed": true,
        "held": false,
        "balanceCzk": 120,
        "sufficient": null
      },
      "card": {
        "enabled": false,
        "available": false,
        "last4": null,
        "maxAmountCzk": null,
        "unavailableReason": null
      }
    },
    "endAtTermEnd": {
      "requestedAt": "2026-11-07T10:00:00.000Z",
      "by": "customer",
      "termEnd": "2026-12-01T00:00:00.000Z"
    },
    "canPay": false,
    "canExtendEarly": false,
    "canEndAtTermEnd": false,
    "history": []
  }
}

Możliwe błędy

  • 400invalid Nieprawidłowa treść (pola inne niż dozwolone).
  • 404not_allowed Usługa nie należy do Twojego konta.
  • 409not_managed Usługa nie ma ustawionego okresu. Inne kody: terminated, not_active, period_over, too_late, payment_started.
  • 415 Treść nie jest application/json.
GET/services/{id}/web-upgradeOferta wyższego planu hostingu WWW

Zwraca obecny plan hostingu WWW i wyższe plany z dopłatą do końca okresu. Na razie zwraca 409 coming_soon, hostingu WWW nie można jeszcze zmieniać online; tylko właściciel.

Uprawnienie: services:read

Parametry w adresie

NazwaTypWymaganeOpis
localestringnieen dla tekstów po angielsku, w przeciwnym razie po czesku.

Przykładowa odpowiedź

{
  "current": {
    "tier": "starter",
    "name": "Starter",
    "storageGb": 10,
    "sites": 1
  },
  "monthlyCzk": 59,
  "period": {
    "start": "2026-11-01T00:00:00.000Z",
    "end": "2026-12-01T00:00:00.000Z",
    "remainingDays": 24,
    "periodDays": 30
  },
  "options": [
    {
      "tier": "business",
      "name": "Business",
      "storageGb": 30,
      "sites": 5,
      "priceCzk": 119,
      "monthlyCzk": 119,
      "chargeCzk": 48
    }
  ],
  "pendingOrder": null,
  "upgradeInProgress": false,
  "blocker": null,
  "recurringMaxCzk": null,
  "billingIncomplete": false,
  "customerType": "consumer"
}

Możliwe błędy

  • 409coming_soon Zmiany planu hostingu WWW nie można jeszcze zamówić online. Kod unavailable: nie można ustalić planu lub usługa nie pozwala na rozbudowę.
  • 400 Usługa nie jest hostingiem WWW.
  • 403 Nie jesteś właścicielem usługi.
POST/services/{id}/web-upgradeZamów wyższy plan hostingu WWW

Tworzy zamówienie wyższego planu z fakturą zaliczkową na proporcjonalną dopłatę; zmiana następuje po zapłacie, niższego planu ustawić nie można. Na razie zwraca 409 coming_soon; action cancelPending anuluje nieopłacone zamówienie.

Uprawnienie: billing:write

Treść żądania (JSON)

NazwaTypWymaganeOpis
actionstringnieorder (domyślnie) lub cancelPending.
tierstringtakDla order: business lub pro (tylko wyższy niż obecny).
localestringnieJęzyk komunikatów i opisu zamówienia: cs, en, sk, pl lub de.
immediateStartRequestedbooleannieKonsument: true = prośba o natychmiastowe wykonanie zmiany; bez niej zamówienie nie powstanie.
businessPurposebooleannieKonto z numerem firmy: true = oświadczenie o celu biznesowym.
expectedChargeCzknumbernieWyświetlona dopłata; inna = 409 price_changed.
expectedMonthlyCzknumbernieWyświetlona nowa cena miesięczna; inna = 409 price_changed.

Przykładowa treść

{
  "tier": "business",
  "locale": "cs",
  "immediateStartRequested": true
}

Przykładowa odpowiedź

{
  "orderId": "clx9o4ord0004",
  "chargeCzk": 48,
  "monthlyToCzk": 119
}

Możliwe błędy

  • 409coming_soon Zmiany planu nie można jeszcze zamówić online. Inne kody: price_changed, pending_order, billing_profile_incomplete, unavailable, unknown_current.
  • 400downgrade Niższego lub tego samego planu nie można ustawić. Inne kody: unknown_tier, immediate_start_required.
  • 503price_list_unavailable Nie można teraz wczytać cennika, nic nie jest naliczane.

Bezpieczeństwo

  • Każda aplikacja i każde środowisko powinny mieć własny klucz z jak najmniejszymi uprawnieniami. Jeśli jeden wycieknie, unieważniasz tylko ten.
  • Unieważniaj klucze, których nie potrzebujesz. Na liście kluczy widać, kiedy i skąd klucz był ostatnio użyty.
  • Do wrażliwych akcji (reinstalacja, hasła, transfer domeny) używaj klucza ograniczonego do adresu IP Twojego serwera.
  • Klucz, który wyciekł, od razu unieważnij w koncie klienta i utwórz nowy. W razie podejrzenia nadużycia napisz do nas.

Czego nie da się zrobić przez API

  • logowanie, hasło, uwierzytelnianie dwuskładnikowe, passkey i zalogowane urządzenia
  • udostępnianie usługi innym kontom i transfer usługi
  • odstąpienie od umowy i zwroty pieniędzy
  • tworzenie kolejnych kluczy API
  • przesyłanie plików (użyj SFTP, dane dostępu uzyskasz przez API)