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
- 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.
- 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.
- 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.
| Uprawnienie | Na co pozwala |
|---|---|
account:read | Dane konta (tylko odczyt) |
services:read | Lista usług, stan i statystyki |
services:power | Włącz, wyłącz, restart |
services:console | Konsola |
services:network | Sieć: rDNS, sieć prywatna, adresy |
services:firewall | Zapora |
services:files | Pliki, światy, pluginy i mody |
services:database | Bazy danych |
services:backups | Kopie zapasowe i przywracanie |
services:settings | Ustawienia usługi (gry, boty, harmonogram, alerty, ISO) |
services:secrets | Wrażliwe: reinstalacja, hasła, SFTP, kod transferu domenytylko z ograniczeniem do adresów IP |
domains:read | Rekordy DNS (tylko odczyt) |
domains:write | Rekordy DNS i serwery nazw (zmiany) |
billing:read | Dokumenty i kredyt (tylko odczyt) |
billing:write | Zamó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.
| Status | Kod | Znaczenie |
|---|---|---|
| 400 | cookies_not_allowed | Żądanie zawiera pliki cookie. API używa się tylko z kluczem. |
| 401 | missing_key | Brak klucza w nagłówku Authorization. |
| 401 | invalid_key | Klucz jest nieprawidłowy, wygasły lub unieważniony. |
| 403 | ip_not_allowed | Klucza nie można użyć z tego adresu IP. |
| 403 | insufficient_scope | Klucz nie ma wymaganego uprawnienia (pole requiredScope). |
| 403 | email_unverified | Adres e-mail konta nie jest potwierdzony. |
| 404 | not_found | Nieznany 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). |
| 405 | method_not_allowed | Metoda niedozwolona, nagłówek Allow podaje dozwolone. |
| 429 | rate_limited | Przekroczony limit żądań, ponów po czasie z nagłówka Retry-After. |
| 503 | unavailable | Chwilowo 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
- 401
invalid_keyKlucz 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
- 401
invalid_keyNie 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
ids | string | nie | ID 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. |
locale | string | nie | Ję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
- 404
not_foundKlucz jest ograniczony do wybranych usług, a ids zawiera inną usługę. - 429
rate_limitedPrzekroczono limit 40 zapytań na minutę. - 503
unavailableNie 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
status | string | nie | Filtr według stanu: PENDING, ACTIVE, SUSPENDED lub TERMINATED (wielkość liter nie ma znaczenia). |
locale | string | nie | Ję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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
locale | string | nie | Ję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.
- 403
mfa_requiredWł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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
mode | string | tak | Tylko 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).
- 412
NOT_PROVISIONEDSerwer 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
source | string | nie | auto (domyślnie), latest, crash-report, console lub file. |
name | string | nie | Plik dla source=file, np. logs/latest.log, crash-reports/crash-….txt lub hs_err_pid….log (maks. 120 znaków). |
list | string | nie | files zwraca listę plików, które można przeanalizować (najwyżej 50). |
lang | string | nie | Język komunikatów: cs, en, sk, pl lub de. |
tpl | string | nie | 1 = 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
- 400
bad-requestNieprawidłowy parametr. Kod bad-name: tego pliku nie można przeanalizować. - 403
forbiddenBrak uprawnienia Konsola lub Pliki w udostępnionej usłudze. - 404
no-sourceNie znaleziono logu, serwer mógł jeszcze nie działać. - 412
not-readySerwer nie jest jeszcze gotowy. - 413
too-largeLog jest za duży do analizy (ponad 16 MiB). - 429
ratePrzekroczono limit. Kod busy: trwa analiza innych serwerów. - 502
failedNie 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
locale | string | nie | Ję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.
- 401
AUTH_FAILEDVPS odrzucił dane logowania. - 409
HOST_KEY_CHANGEDOdcisk klucza SSH VPS się zmienił (nowy w presentedHostKey); potwierdź go akcją trustHostKey. - 412
NO_TARGETVPS nie ma jeszcze adresu ani danych dostępowych (także NO_CREDENTIALS). - 502
UNREACHABLEVPS 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | tak | install, connectAuto, connectManual, disconnect, createDatabase, dropDatabase, createUser, dropUser, setPassword lub grant. |
engine | string | nie | install, connectAuto, connectManual: mysql lub postgres. connectAuto tworzy konto panelu przez lokalny dostęp roota. |
port | integer | nie | connectManual: port serwera bazy danych. |
username | string | nie | connectManual: użytkownik, jako który łączy się panel. |
password | string | nie | connectManual: hasło (wymagane). createUser, setPassword: nowe hasło 8–128 znaków; bez niego zostanie wygenerowane. |
name | string | nie | Akcje bazodanowe: nazwa bazy lub użytkownika, litery bez znaków diakrytycznych, cyfry i podkreślenie, najwyżej 63 znaki, nie zaczyna się od cyfry. |
createUser | boolean | nie | createDatabase: utworzyć też użytkownika o tej samej nazwie z pełnymi prawami. |
host | string | nie | createDatabase, createUser (MySQL): localhost (domyślnie) lub %. dropUser: konkretny host, w przeciwnym razie wszystkie. |
database | string | nie | createUser (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).
- 401
AUTH_FAILEDVPS odrzucił dane logowania. - 409
HOST_KEY_CHANGEDOdcisk klucza SSH VPS się zmienił (nowy w presentedHostKey); potwierdź go akcją trustHostKey. - 412
NO_TARGETVPS nie ma jeszcze adresu ani danych dostępowych (także NO_CREDENTIALS). - 502
UNREACHABLEVPS 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
db | string | tak | Nazwa bazy. |
table | string | nie | Nazwa tabeli; bez niej zwracana jest lista tabel. |
schema | string | nie | PostgreSQL: schemat tabeli, domyślnie public. |
page | integer | nie | Strona 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.
- 401
AUTH_FAILEDVPS odrzucił dane logowania. - 409
HOST_KEY_CHANGEDOdcisk klucza SSH VPS się zmienił (nowy w presentedHostKey); potwierdź go akcją trustHostKey. - 412
NO_TARGETVPS nie ma jeszcze adresu ani danych dostępowych (także NO_CREDENTIALS). - 502
UNREACHABLEVPS 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
sql | string | tak | Zapytanie SQL, najwyżej 100 000 znaków. |
db | string | nie | Baza, 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ę.
- 401
AUTH_FAILEDVPS odrzucił dane logowania. - 409
HOST_KEY_CHANGEDOdcisk klucza SSH VPS się zmienił (nowy w presentedHostKey); potwierdź go akcją trustHostKey. - 412
NO_TARGETVPS nie ma jeszcze adresu ani danych dostępowych (także NO_CREDENTIALS). - 502
UNREACHABLEVPS 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
path | string | nie | Bezwzglę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.
- 401
AUTH_FAILEDVPS odrzucił dane logowania. - 409
HOST_KEY_CHANGEDOdcisk klucza SSH VPS się zmienił (nowy w presentedHostKey); potwierdź go akcją trustHostKey. - 412
NO_TARGETVPS nie ma jeszcze adresu ani danych dostępowych (także NO_CREDENTIALS). - 502
UNREACHABLEVPS 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | tak | mkdir, touch, rename, delete, chmod, write; tylko VPS i tylko właściciel: credentials, resetCredentials, trustHostKey; tylko gry i boty: compress, decompress. |
path | string | nie | mkdir, touch, rename, chmod, write, decompress: bezwzględna ścieżka elementu. |
to | string | nie | rename: nowa ścieżka bezwzględna. |
paths | string[] | nie | delete: 1–200 ścieżek bezwzględnych. |
mode | string | nie | chmod: uprawnienia ósemkowo, 3–4 cyfry (np. 644). |
content | string | nie | write: cała nowa zawartość pliku w UTF-8, najwyżej 2 MB. |
username | string | nie | credentials: użytkownik SSH dla menedżera plików (zamiast root). |
password | string | nie | credentials: hasło użytkownika SSH, zapisywane w postaci zaszyfrowanej po udanym logowaniu. |
port | integer | nie | credentials: port SSH 1–65535. |
fingerprint | string | nie | trustHostKey: nowy odcisk klucza w postaci SHA256:…. |
dir | string | nie | compress: folder z elementami do spakowania. |
names | string[] | nie | compress: 1–200 nazw z folderu dir. |
archiveName | string | nie | compress: nazwa archiwum .tar.gz, najwyżej 120 znaków. |
into | string | nie | decompress: here (domyślnie) lub newFolder. |
folderName | string | nie | decompress: nazwa nowego folderu, najwyżej 120 znaków. |
locale | string | nie | Ję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.
- 409
JOB_RUNNINGNa serwerze Minecraft trwa zmiana oprogramowania lub instalacja modpacka. - 409
ARCHIVE_BUSYTrwa inne pakowanie lub rozpakowywanie. - 413 Zawartość dla write przekracza 2 MB.
- 429 Najwyżej 10 pakowań i rozpakowań na 10 minut.
- 401
AUTH_FAILEDVPS odrzucił dane logowania. - 409
HOST_KEY_CHANGEDOdcisk klucza SSH VPS się zmienił (nowy w presentedHostKey); potwierdź go akcją trustHostKey. - 412
NO_TARGETVPS nie ma jeszcze adresu ani danych dostępowych (także NO_CREDENTIALS). - 502
UNREACHABLEVPS 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
path | string | tak | Bezwzględna ścieżka pliku. |
as | string | nie | text = 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.
- 413
TOO_LARGEas=text: plik jest większy niż 1 MB. - 415
BINARYas=text: plik nie jest tekstem UTF-8. - 403 Brak uprawnienia Pliki.
- 401
AUTH_FAILEDVPS odrzucił dane logowania. - 409
HOST_KEY_CHANGEDOdcisk klucza SSH VPS się zmienił (nowy w presentedHostKey); potwierdź go akcją trustHostKey. - 412
NO_TARGETVPS nie ma jeszcze adresu ani danych dostępowych (także NO_CREDENTIALS). - 502
UNREACHABLEVPS 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
poll | string | nie | Wartość 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
- 403
mfa_requiredWł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
- 403
mfa_requiredWł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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
name | string | null | tak | Nowa nazwa, maksymalnie 60 znaków. |
locale | string | nie | Ję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
- 400
invalidNazwa jest dłuższa niż 60 znaków lub treść zawiera inne pola. - 404
not_allowedUsł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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
before | string | nie | ID 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
outlets | number[] | tak | Numery gniazd 1–48 (od 1 do 48 pozycji), tylko gniazda tej usługi. |
command | string | tak | on, 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
- 400
not_yoursKtóreś gniazdo nie należy do tej usługi. Bez kodu: nieprawidłowa treść żądania. - 403
not_allowedSterowanie gniazdami nie jest włączone dla usługi. - 409
inactiveUsługa nie jest aktywna. Kod no_config: PDU jest teraz niedostępne. - 429 Przekroczono limit żądań.
- 502
pdu_failedPDU 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | tak | start, 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
lang | string | nie | en 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
lang | string | nie | en dla komunikatów po angielsku, w przeciwnym razie po czesku. |
Treść żądania (JSON)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | tak | Zawsze setPassword. |
password | string | tak | Nowe 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
- 400
weak_passwordHasło nie spełnia wymagań lub treść jest nieprawidłowa. - 403
insufficient_scopeKluczowi brakuje uprawnienia services:secrets. Kod not_owner: nie jesteś właścicielem. - 404 SFTP nie jest jeszcze uruchomione.
- 409
admin_userSFTP dla tej usługi skonfiguruje pomoc techniczna. Inne kody: email_mismatch, foreign_server, inactive. - 429 Ponad 5 prób na godzinę.
- 502
failedNie 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.
- 412
NOT_PROVISIONEDVPS 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
id | string | tak | id 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | tak | add, update, toggle, delete, move, setInbound lub applyBaseline. |
pos | number | nie | Dla update, toggle, delete i move: pozycja własnej reguły z GET. |
digest | string | nie | Dla update, toggle, delete i move: digest z GET. |
rule | object | nie | Dla 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. |
enable | boolean | nie | Dla toggle: włącz lub wyłącz regułę. |
direction | string | nie | Dla move: up lub down (tylko między własnymi regułami). |
value | string | nie | Dla 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
range | string | nie | hour, day, week, month lub year. Domyślnie day. |
lang | string | nie | en 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | tak | add, delete, attach, boot lub detach. |
name | string | nie | Dla add: nazwa ISO (maks. 80 znaków), w przeciwnym razie z pliku. |
url | string | nie | Dla add: publiczny link https:// do pliku ISO podający jego rozmiar. |
isoId | string | nie | Dla delete i attach: ID ISO z GET. |
boot | boolean | nie | Dla 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
- 400
urlLinku 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. - 404
not_foundNie znaleziono ISO. - 409
unavailableObrazy 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.
- 503
unavailableSieci 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | tak | create, attach, detach lub delete. |
name | string | nie | Dla create: nazwa sieci, 1–40 znaków (litery, cyfry, spacja, . _ -). |
cidr | string | nie | Dla create: prywatny zakres od /16 do /29 zaczynający się adresem sieci, np. 10.20.0.0/24. |
networkId | string | nie | Dla attach, detach i delete: ID sieci z GET. |
address | string|null | nie | Dla attach: adres VPS w sieci; puste = pierwszy wolny. |
cloudInit | boolean | nie | Dla 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
- 400
invalid_requestNieprawidłowa treść. Inne kody: name_invalid, cidr_invalid, address_invalid, address_outside, address_reserved. - 404
network_not_foundNie znaleziono sieci. Kod not_member: VPS nie jest w sieci. - 409
firewall_requiredNajpierw 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. - 412
vm_not_readyVPS nie jest jeszcze gotowy. - 502
apply_failedNie udało się dokończyć zmiany. - 503
unavailableSieci 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
ip | string | tak | Adres IPv4 lub IPv6 usługi (także z jej zakresu IPv6). |
hostname | string|null | tak | Nazwa 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
os | string | tak | Klucz systemu z GET, np. ubuntu-2404 lub debian-13. |
sshKeys | string | nie | Publiczne 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.
- 403
insufficient_scopeKluczowi 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
- 403
insufficient_scopeKluczowi 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
lang | string | nie | en 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
lang | string | nie | en dla komunikatów po angielsku, w przeciwnym razie po czesku. |
Przykładowa odpowiedź
{
"password": "example-Root-Pass-456"
}Możliwe błędy
- 403
insufficient_scopeKluczowi 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
lang | string | nie | Ję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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
lang | string | nie | Język komunikatów: en, w przeciwnym razie cs. |
Treść żądania (JSON)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | tak | save, test (wiadomość testowa na zapisany webhook, raz na minutę i 5 razy na godzinę), removeDiscord lub disable. |
enabled | boolean | nie | save: włączyć monitorowanie. |
email | boolean | nie | save: wysyłać powiadomienia e-mailem do właściciela. |
events | object | nie | save: które zdarzenia zgłaszać, klucze crash, down, recovered, cleanExit, node (boolean). |
includeLog | boolean | nie | save: dołączyć koniec logu. |
webhook | string | nie | save: 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
- 400
bad-requestNieprawidłowa treść lub dodatkowe pola. - 400
webhookAdres nie jest webhookiem Discord. - 400
test-failedNie udało się dostarczyć wiadomości testowej. - 400
no-webhooktest: brak zapisanego webhooka. - 400
no-channelWłączone monitorowanie wymaga e-maila lub webhooka. - 429
rateWiadomość testową można wysłać raz na minutę i 5 razy na godzinę. - 500
failedNie 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
section | string | tak | network (porty i SFTP), databases (bazy danych), backups (kopie zapasowe i dodatek kopii) lub startup (polecenie i zmienne uruchamiania). |
locale | string | nie | Ję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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | tak | createDatabase, rotateDatabasePassword, deleteDatabase, createBackup, restoreBackup, deleteBackup, lockBackup (blokuje lub odblokowuje), setVariable, reinstall, addAllocation lub removeAllocation. |
name | string | nie | createDatabase: nazwa bazy, 1–48 znaków (litery, cyfry, podkreślenie), wymagane. createBackup: opcjonalna nazwa kopii, najwyżej 191 znaków. |
remote | string | nie | createDatabase: skąd wolno łączyć się z bazą (adres IP lub %). Domyślnie % = skądkolwiek. |
databaseId | string | nie | rotateDatabasePassword, deleteDatabase: id bazy z GET ?section=databases. |
uuid | string (uuid) | nie | restoreBackup, deleteBackup, lockBackup: uuid kopii z GET ?section=backups. |
truncate | boolean | nie | restoreBackup: przed przywróceniem usunąć wszystkie pliki serwera. Domyślnie false. |
key | string | nie | setVariable: nazwa zmiennej uruchamiania (wielkie litery, cyfry, podkreślenie). |
value | string | nie | setVariable: nowa wartość, najwyżej 4096 znaków, bez znaków sterujących. |
allocationId | integer | nie | removeAllocation: id portu z GET ?section=network. Głównego portu nie można usunąć. |
locale | string | nie | Ję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.
- 400
CONTROL_CHARSWartość zmiennej zawiera znaki sterujące. - 403 Brak uprawnienia do akcji; reinstalacja wymaga też Plików i Zasilania.
- 403
SECRETS_REQUIREDTajną zmienną może zmienić tylko właściciel lub członek z uprawnieniem Dane poufne. - 403
FILES_REQUIREDŹródło kodu bota Discord można zmienić tylko z uprawnieniem Pliki. - 404 Kopia zapasowa nie istnieje.
- 409
MANAGED_VARIABLEZmienną zarządza StormHost i nie można jej zmienić. - 409
MC_MANAGED_VARIABLEW Minecrafcie tę zmienną ustawia zakładka Oprogramowanie. - 409
PROTECTED_ARGUMENTDowolne argumenty nie mogą nadpisać chronionych parametrów (np. RCON). - 409
JOB_RUNNINGNa serwerze Minecraft trwa zmiana oprogramowania. - 409
PORT_LIMITPakiet nie ma już wolnego portu. - 409
NO_FREE_PORTNa 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
uuid | string (uuid) | tak | uuid kopii z GET …/game?section=backups. |
locale | string | nie | Ję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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
locale | string | nie | Ję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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | tak | create, update, delete, toggle (włączyć lub wyłączyć), run (uruchomić teraz, najwyżej raz na minutę) lub unstick (zwolnić zablokowany harmonogram). |
scheduleId | integer | nie | Wszystkie akcje oprócz create: id harmonogramu z GET. |
preset | object | nie | create, 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.repeat | object | nie | Powtarzanie: {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}. |
name | string | nie | create, update: nazwa harmonogramu, najwyżej 60 znaków. |
ack | boolean | nie | create, update: dla harmonogramu kopii musi być true (potwierdzenie, że nowa kopia zastąpi starszą). |
active | boolean | nie | toggle: true włącza, false wyłącza. |
locale | string | nie | Ję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
- 400
INVALIDHarmonogram nie jest poprawnie wypełniony. - 400
GAPHarmonogram uruchamiałby się zbyt często. - 400
BACKUP_ACKBrak ack: true dla harmonogramu kopii. - 400
COMMAND_FORBIDDENPolecenie wyłączyłoby lub zrestartowało serwer; użyj ustawienia restart lub power. - 403
FORBIDDENBrak uprawnienia do harmonogramu (zależnie od zadań Konsola, Zasilanie lub Kopie zapasowe). - 404
NOT_FOUNDHarmonogram nie istnieje. - 409
LIMITSerwer ma już 10 harmonogramów. - 409
BACKUP_SLOTSKopie według harmonogramu wymagają dodatku kopii. - 409
BACKUP_EXISTSHarmonogram kopii już istnieje. - 409
NOT_EDITABLEHarmonogram powstał poza portalem; można go tylko wyłączyć lub usunąć. - 409
PANEL_TZHarmonogramów na konkretną godzinę nie można teraz ustawić, na razie tylko powtarzanie co godzinę. - 409
SUSPENDEDSerwer jest zawieszony. - 409
JOB_RUNNINGNa serwerze Minecraft trwa zmiana oprogramowania. - 429
RATEHarmonogram można uruchomić najwyżej raz na minutę. - 502
PARTIALHarmonogram 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
lang | string | nie | Ję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
- 400
not_minecraftSklep VIP jest tylko dla serwerów Minecraft. - 404
disabledSklep VIP nie jest teraz dostępny dla konta. - 503
disabledSklep VIP nie jest jeszcze gotowy. - 500
failedAkcja 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
lang | string | nie | Język komunikatów: cs, en, sk, pl lub de. Domyślnie cs. |
Treść żądania (JSON)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | tak | saveShop, setStatus, saveItem lub deleteItem. |
slug | string | nie | saveShop: adres sklepu, 3–32 znaki a–z, 0–9 i myślnik. |
title | string | nie | saveShop: nazwa sklepu (2–60 znaków). saveItem: nazwa pozycji (2–60 znaków). |
sellerName | string | nie | saveShop: imię lub firma sprzedawcy (2–120 znaków). |
sellerIco | string | nie | saveShop: czeski numer firmy sprzedawcy (opcjonalne). |
sellerEmail | string | nie | saveShop: e-mail kontaktowy sprzedawcy. |
sellerAddress | string | nie | saveShop: adres sprzedawcy, 5–200 znaków (opcjonalne). |
playerTerms | string | nie | saveShop: własne warunki dla graczy, najwyżej 20 000 znaków (opcjonalne). |
terms | boolean | nie | saveShop: akceptacja warunków operatora sklepu. |
status | string | nie | setStatus: active lub paused. |
id | string | nie | saveItem: id pozycji do edycji (bez id powstaje nowa, najwyżej 50). deleteItem: id pozycji (wymagane). |
description | string | nie | saveItem: opis, najwyżej 500 znaków. |
priceCzk | integer | nie | saveItem: cena w CZK, 10–10 000 (wymagane). |
category | string | nie | saveItem: kategoria, najwyżej 40 znaków. |
durationDays | integer | null | nie | saveItem: ważność w dniach 1–3650, null = na stałe. |
commandsBuy | string[] | nie | saveItem: 1–10 poleceń po zakupie, każde do 300 znaków; jedyna zmienna to {player}; polecenia jak stop, restart, op są zabronione. |
commandsExpire | string[] | nie | saveItem: najwyżej 10 poleceń po wygaśnięciu. |
active | boolean | nie | saveItem: oferować pozycję w sklepie. Domyślnie true. |
sortOrder | integer | nie | saveItem: 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
- 400
badNieprawidł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.
- 404
no_shopUsługa nie ma jeszcze sklepu. - 404
item_not_foundPozycja nie istnieje. - 409
slug_takenAdres sklepu jest zajęty. - 409
suspendedSklep jest zawieszony przez operatora. - 409
items_maxSklep ma już 50 pozycji. - 400
not_minecraftSklep VIP jest tylko dla serwerów Minecraft. - 500
failedAkcja 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
lang | string | nie | Język komunikatów: cs, en, sk, pl lub de. Domyślnie cs. |
before | string (ISO 8601) | nie | Sprzedaż 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
- 404
no_shopUsługa nie ma jeszcze sklepu. - 400
not_minecraftSklep VIP jest tylko dla serwerów Minecraft. - 500
failedAkcja 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
lang | string | nie | Język komunikatów: cs, en, sk, pl lub de. Domyślnie cs. |
Treść żądania (JSON)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | tak | retry. |
deliveryId | string | tak | id 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
- 400
badNieprawidłowe żądanie. - 404
no_shopUsługa nie ma jeszcze sklepu. - 404
delivery_not_foundDostawa nie istnieje. - 409
delivery_stateDostawy nie można teraz ponowić. - 429
rateNajwyżej 10 prób na minutę. - 400
not_minecraftSklep VIP jest tylko dla serwerów Minecraft. - 500
failedAkcja 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
q | string | nie | Szukany tekst (do 80 znaków). |
offset | integer | nie | Przesunięcie w wynikach wyszukiwania, domyślnie 0. |
project | string | nie | ID 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
- 409
NOT_IMPORTEDOprogramowanie serwera nie jest jeszcze ustawione, najpierw użyj minecraft/software. - 412
NO_PANELSerwer 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | tak | `install`, `remove` lub `reload`. |
projectId | string | nie | Tylko `install`: ID projektu na Modrinth (1–64 znaki). |
versionId | string | nie | Tylko `install`: ID wersji z `GET ?project=` (1–16 znaków). |
name | string | nie | Tylko `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
- 400
INVALIDNieprawidłowa treść żądania. - 403
FORBIDDEN`reload` bez uprawnienia Konsola przy współdzielonej usłudze. - 404
NO_SUCH_PACKW świecie nie ma datapacka o tej nazwie. - 409
NAME_TAKENDatapack o tej samej nazwie już istnieje, najpierw go usuń. - 409
TOO_MANYW świecie jest już 100 datapacków. - 409
NOT_RUNNINGSerwer nie działa, uruchom go i spróbuj ponownie. - 409
JOBNa serwerze trwa inna zmiana lub instalacja dodatku. - 422
INCOMPATIBLETa wersja datapacka nie pasuje do wersji serwera. - 422
NO_PACK_MCMETAPlik nie jest prawidłowym datapackiem (brak pack.mcmeta). - 429
RATE_LIMITEDLimit: 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
check | string | nie | Nazwa do sprawdzenia dostępności, zwraca `{ name, fqdn, available, code?, error? }`. |
locale | string | nie | Ję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
- 400
NOT_MINECRAFTUsługa nie jest serwerem Minecraft. - 503
PANELZarządzanie serwerem jest chwilowo niedostępne. - 500
SETUP_FAILEDNie 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
locale | string | nie | Język komunikatów błędów kontroli dostępu: cs, en, sk, pl, de. |
Treść żądania (JSON)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | tak | `create`, `rename`, `delete` lub `resync`. |
name | string | nie | Dla `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
- 400
INVALIDNieprawidłowa treść żądania. - 400
INVALID_NAMENazwa nie spełnia zasad. - 400
RESERVEDNazwa jest zarezerwowana. - 400
SAME_NAMESerwer ma już ten adres. - 404
NONESerwer nie ma własnego adresu. - 409
TAKENAdres jest zajęty. - 409
EXISTSSerwer ma już własny adres, użyj `rename`. - 409
NO_ALLOCATIONSerwer nie ma domyślnego portu. - 409
NOT_PUBLICDomyślny adres serwera nie jest publiczny. - 412
NO_PANEL_LINKSerwer nie jest teraz dostępny w panelu gry. - 429
RATE_LIMITEDPrzekroczono limit zmian, spróbuj później. - 503
DISABLEDWłasne adresy nie są teraz dostępne. - 502
DNSZapis 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
accept | boolean | tak | Musi mieć wartość `true`. |
start | boolean | nie | Po 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
lang | string | nie | Ję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
- 409
NOT_IMPORTEDOprogramowanie serwera nie jest jeszcze ustawione, najpierw użyj minecraft/software. - 412
NO_PANELSerwer nie jest teraz dostępny w panelu gry. - 413
FILE_TOO_LARGEPlik z zasadami jest za duży. - 422
FILE_CORRUPTPlik 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
rules | object | tak | Mapa `id` zasady (z GET) na wartość `boolean` lub liczbę całkowitą. |
allDimensions | boolean | nie | Na 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
- 400
INVALIDNieprawidłowa treść żądania. - 400
NO_CHANGES`rules` jest puste. - 400
UNKNOWN_RULEZasada nie istnieje w wersji serwera (pole `rule`). - 400
INVALID_VALUENieprawidłowa wartość zasady (pole `rule`). - 409
NOT_RUNNINGSerwer nie działa, uruchom go i spróbuj ponownie. - 409
NOT_IMPORTEDOprogramowanie serwera nie jest jeszcze ustawione, najpierw użyj minecraft/software. - 409
JOBNa serwerze trwa inna zmiana lub instalacja dodatku. - 429
CONSOLE_BUSYKonsola serwera jest zajęta. - 412
NO_PANELSerwer 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | tak | Zawsze `dismiss`. |
jobId | string | tak | `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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
search | string | nie | Szukany tekst na Modrinth. |
mc | string | nie | Z `search`: wersja Minecraft, np. `1.21.1`. |
loader | string | nie | Z `search`: `fabric`, `forge` lub `neoforge`. |
sort | string | nie | Z `search`: `downloads`, `relevance` lub `newest`. |
offset | integer | nie | Z `search`: przesunięcie w wynikach. |
project | string | nie | ID lub slug projektu; z `preview=modrinth` tylko ID (8 znaków). |
preview | string | nie | `modrinth` (z `project` i `version`) lub `upload` (z `upload`). |
version | string | nie | Z `preview=modrinth`: ID wersji (8 znaków). |
upload | string | nie | Z `preview=upload`: `id` z akcji `stageServerFile` (24 znaki hex). |
mode | string | nie | Z `preview`: `all` (domyślnie), `keep-world` lub `wipe`. |
serverFiles | string | nie | `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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | tak | `install`, `rollback`, `deleteAside` lub `stageServerFile`. |
origin | string | nie | `install`: `modrinth` lub `mrpack` (własny plik). |
projectId | string | nie | `install` z Modrinth: ID projektu (8 znaków). |
versionId | string | nie | `install` z Modrinth: ID wersji (8 znaków). |
uploadId | string | nie | `install` z `mrpack`: `id` z `stageServerFile` (24 znaki hex). |
mode | string | nie | `install`: `all` (zastąpić wszystko, stare odłożyć), `keep-world` (zachować świat i server.properties) lub `wipe` (usunąć wszystko, tylko właściciel). |
replaceBackup | boolean | nie | Przy pełnych slotach kopii nadpisać najstarszą kopię (właściciel lub uprawnienie Kopie zapasowe). |
acceptEula | boolean | nie | Zaakceptować licencję Minecraft (EULA) w ramach instalacji. |
confirmDowngrade | boolean | nie | Potwierdzić instalację starszej wersji Minecraft niż ma świat. |
name | string | nie | `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`).
- 403
WIPE_OWNERTryb `wipe` może użyć tylko właściciel. - 403
BACKUP_PERMISSION`replaceBackup` bez uprawnienia Kopie zapasowe. - 409
JOB_RUNNINGNa serwerze trwa już inne zadanie. - 409
ADDON_RUNNINGTrwa instalacja pluginu lub moda. - 409
QUEUE_FULLKolejka instalacji jest pełna, spróbuj później. - 409
DISKZa mało miejsca na dysku serwera (`details.freeMb`, `details.needMb`). - 409
DOWNGRADEModpack ma starszą wersję Minecraft, potwierdź `confirmDowngrade`. - 422
LOADERLoadera 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
range | string | nie | `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
- 503
unavailableWykres graczy nie jest jeszcze dostępny. - 502
ERRORNie 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
enabled | boolean | tak | `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
- 400
INVALIDNieprawidłowa treść żądania. - 503
unavailableWykres 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
lookup | string | nie | Nick 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
- 400
INVALID_NICKNieprawidłowy nick w `lookup`. - 403
FORBIDDEN`lookup` bez uprawnienia Konsola. - 503
MOJANG_BUSYSprawdzenie 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | tak | `whitelist-add`, `whitelist-remove`, `whitelist-toggle`, `op`, `deop`, `ban`, `pardon`, `pardon-ip`, `kick`, `bedrock-whitelist-add` lub `bedrock-whitelist-remove`. |
nick | string | nie | Nick gracza (do 40 znaków); przy akcjach `bedrock-*` nazwa gracza Bedrock. |
uuid | string | nie | UUID z listy, do usunięcia na wyłączonym serwerze nawet bez prawidłowego nicku. |
level | integer | nie | `op`: poziom operatora 1–4. |
bypassesPlayerLimit | boolean | nie | `op`: operator może dołączyć do pełnego serwera. |
reason | string | nie | `ban` i `kick`: powód (do 200 znaków). |
ip | string | nie | `pardon-ip`: zbanowany adres IP. |
enabled | boolean | nie | `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
- 400
INVALIDNieprawidłowa treść żądania. - 400
INVALID_NICKNieprawidłowy nick lub UUID. - 400
INVALID_REASONNieprawidłowy powód. - 400
INVALID_IPNieprawidłowy adres IP. - 409
NOT_RUNNINGAkcja wymaga działającego serwera (np. `kick`). - 409
PLAYER_OFFLINEGracz nie jest online. - 409
NO_FLOODGATEAkcje `bedrock-*` wymagają Floodgate. - 409
CONFLICTPlik w międzyczasie się zmienił, spróbuj ponownie. - 409
JOBNa serwerze trwa inna zmiana. - 422
PLAYER_UNKNOWNGracz o tym nicku nie istnieje. - 429
RATE_LIMITEDPrzekroczono limit zmian, spróbuj później. - 503
MOJANG_BUSYSprawdzenie 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
search | flag | nie | Wyszukiwanie w katalogu (z `source`, `q`, `offset`). |
versions | flag | nie | Zgodne wersje projektu (z `source`, `project`). |
plan | flag | nie | Podgląd instalacji z zależnościami bez zapisu (z `source`, `project`, `version`, `deps`). |
updates | flag | nie | Nowsze wersje plików zainstalowanych przez portal. |
source | string | nie | `modrinth` lub `hangar` (Hangar tylko dla pluginów). |
q | string | nie | Szukany tekst. |
offset | integer | nie | Przesunięcie w wynikach wyszukiwania. |
project | string | nie | ID lub slug projektu (1–64 znaki). |
version | string | nie | Z `plan`: ID wersji, inaczej najnowsza zgodna. |
deps | string | nie | Z `plan`: `0` bez zależności. |
op | string | nie | ID 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
- 400
BAD_REQUESTNieznane źródło, projekt lub wersja. - 400
UNSUPPORTED_TYPETyp serwera nie obsługuje pluginów ani modów (Vanilla). - 404
OP_NOT_FOUNDOperacja nie istnieje lub wygasła. - 429
RATE_LIMITEDLimit zapytań do katalogów: 60 na minutę. - 502
SOURCE_ERRORKatalog 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | tak | `install`, `update`, `remove` lub `toggle`. |
source | string | nie | `install`: `modrinth` lub `hangar`. |
project | string | nie | `install`: ID lub slug projektu. |
version | string | nie | `install` i `update`: ID wersji, inaczej najnowsza zgodna. |
dependencies | boolean | nie | `install`: zainstalować też wymagane zależności, domyślnie `true`. |
skip | string[] | nie | `install`: ID zależności do pominięcia (do 50). |
replace | boolean | nie | `install`: zastąpić kolidujące pliki, domyślnie `false`. |
file | string | nie | `update`, `remove`, `toggle`: nazwa pliku z listy (do 255 znaków). |
dataFolder | string | nie | `remove`: usunąć też folder z danymi pluginu (nazwa z `dataFolders`). |
enabled | boolean | nie | `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
- 400
BAD_REQUESTNieprawidłowa treść żądania lub oznaczenie projektu albo wersji. - 404
NOT_FOUNDNie znaleziono pliku ani projektu. - 404
NO_VERSIONBrak zgodnej wersji. - 409
JOB_RUNNINGNa serwerze trwa inna zmiana. - 409
INSTALLINGSerwer jest właśnie instalowany. - 409
EXISTSPlik już istnieje, użyj `replace`. - 409
UP_TO_DATEPlik ma już najnowszą wersję. - 413
TOO_LARGEPlik jest większy niż 100 MB. - 422
INCOMPATIBLEWersja nie pasuje do tego serwera. - 422
EXTERNALProjekt można pobrać tylko ze strony autora. - 429
RATE_LIMITEDLimit 20 zmian na 10 minut. - 502
SOURCE_ERRORKatalog 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
reveal | string | nie | `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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
etag | string | tak | `etag` z GET; gdy plik nie istnieje, `absent`. |
fields | object | nie | Klucz na wartość (string, liczba lub boolean). Nie razem z `raw`. |
raw | string | nie | Cała zawartość pliku (do 80 000 znaków, wynik do 64 KB). Zablokowane i tajne klucze wracają do zapisanej wartości. |
create | boolean | nie | Utworzyć plik z wartości domyślnych, jeśli jeszcze nie istnieje. |
restart | boolean | nie | Po 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`).
- 400
UNKNOWN_KEYKlucza nie można zmienić przez `fields` (pole `key`). - 400
LOCKEDKlucz jest zablokowany (pole `key`). - 400
INVALIDNieprawidłowa wartość klucza (pole `key`). - 400
RAW_INVALIDTekst pliku jest za długi lub zawiera niedozwolone znaki. - 403
SECRETSZmiana wartości tajnej lub zdalnego zarządzania bez uprawnienia Dane poufne. - 403 `restart` bez uprawnienia Zasilanie.
- 409
CONFLICTPlik w międzyczasie się zmienił, pobierz nowy `etag`. - 409
NO_FILEPlik 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
versions | string | nie | Typ serwera: `paper`, `purpur`, `folia`, `vanilla`, `fabric`, `forge` lub `neoforge`; zwraca do 250 wersji. |
prerelease | string | nie | Z `versions`: `1` dodaje wersje przedpremierowe. |
builds | string | nie | Typ serwera; z `version` zwraca do 100 buildów. |
preview | string | nie | Typ serwera do podglądu zmiany (z `version`, `build`). |
version | string | nie | Wersja Minecraft (dla `preview` domyślnie `latest`). |
build | string | nie | Z `preview`: konkretny build lub wersja loadera. |
unstable | string | nie | `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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | tak | `switch`, `reinstall` lub `import`. |
type | string | nie | `switch` i `import`: `paper`, `purpur`, `folia`, `vanilla`, `fabric`, `forge` lub `neoforge`. |
version | string | nie | `switch` i `import`: wersja Minecraft (1–40 znaków), przy `switch` także `latest`. |
build | string | nie | Build lub wersja loadera, inaczej najnowsza stabilna. |
allowUnstable | boolean | nie | `switch`: dopuścić niestabilny build. |
mode | string | nie | `switch`: `keep` (domyślnie, nic nie usuwać), `clean` (usunąć wszystko poza światem, ustawieniami i listami graczy) lub `wipe` (usunąć wszystko). |
acceptEula | boolean | nie | `switch` i `reinstall`: zaakceptować EULA. |
confirmDowngrade | boolean | nie | `switch`: potwierdzić przejście na starszą lub nieznaną wersję. |
skipBackup | boolean | nie | `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.
- 403
SKIP_BACKUP_OWNER`skipBackup` może użyć tylko właściciel. - 409
JOB_RUNNINGNa serwerze trwa już inne zadanie. - 409
ADDON_RUNNINGTrwa instalacja pluginu lub moda. - 409
BACKUP_SLOTSloty kopii są pełne. - 409
BACKUP_DISABLEDUsługa nie ma kopii, zmiana działa tylko z `skipBackup`. - 409
DISKZa mało miejsca na dysku (`details.freeMb`, `details.needMb`). - 409
DOWNGRADEStarsza wersja, potwierdź `confirmDowngrade`. - 409
UNKNOWN_VERSIONBieżąca wersja jest nieznana, potwierdź `confirmDowngrade`. - 409
NOT_IMPORTED`reinstall` bez znanego oprogramowania, najpierw `import` lub `switch`. - 409
INSTALLINGSerwer się instaluje lub przywraca z kopii. - 422
NEED_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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
java | string | nie | `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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | nie | `apply` (domyślnie), `recalculate`, `revert` lub `java`. |
preset | string | nie | `apply` (wymagane): `standard`, `zgc` (Java 21+), `proxy` lub `none`. |
extraFlags | string | string[] | nie | `apply`: własne flagi JVM (tekst do 4000 znaków lub do 60 pozycji); nowe flagi tylko z uprawnieniem Zasilanie. |
dryRun | boolean | nie | `apply`: tylko zbudować polecenie i nic nie zapisywać. |
major | integer | nie | `java` (wymagane): główna wersja Javy 8–99. |
restart | boolean | nie | Po 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`).
- 403
EXTRA_FLAGS_PERMISSIONNowe własne flagi bez uprawnienia Zasilanie (pole `token`). - 403 `restart` lub `java` bez wymaganych uprawnień.
- 409
NEED_IMPORTOprogramowanie serwera nie jest ustawione. - 409
NO_MEMORY_LIMITSerwer nie ma limitu pamięci. - 409
CHANGEDStartup w międzyczasie się zmienił. - 409 Trwa zmiana oprogramowania lub instalacja.
- 422
PRESETPreset nie pasuje do tej Javy. - 422
EXTRA_FLAGSNiedozwolona flaga (pole `token`). - 422
TOO_OLD`java`: wersja jest za stara dla wersji Minecraft. - 422
NO_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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | tak | `essentials-nick`, `lp-prefix`, `tab-prefix`, `give-nametag` lub `tellraw`. |
target | string | tak | Gracz lub grupa (1–36 znaków); przy `tellraw` także `@a`. |
targetKind | string | nie | `lp-prefix` i `tab-prefix`: `group` (domyślnie) lub `player`. |
priority | integer | null | nie | `lp-prefix`: priorytet 0–1000. |
prefixFormat | string | nie | `lp-prefix`: `ampHex` (domyślnie), `amp`, `minimessage` lub `bungeeHex`. |
tabField | string | nie | `tab-prefix`: `tabprefix` (domyślnie) lub `tagprefix`. |
tabFormat | string | nie | `tab-prefix`: `tabGradient` (domyślnie), `ampHex` lub `minimessage`. |
era | string | nie | Era składni (`legacy`, `json`, `jsonHex`, `components`, `snbt`), używana tylko przy nieznanej wersji serwera. |
spans | object[] | nie | Fragmenty `{ text, color: "#rrggbb" | null, bold?, italic?, underlined?, strikethrough?, obfuscated? }`, do 200. Wyślij `spans` albo `doc`. |
doc | object | nie | `{ 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
- 400
INVALIDNieprawidłowa treść żądania. - 400
TARGETNieprawidłowy gracz lub grupa. - 400
PRIORITYPriorytet musi być liczbą całkowitą 0–1000. - 400
EMPTYTekst jest pusty. - 400
TOO_LONGTekst jest za długi (nick do 64 znaków, pozostałe 256). - 400
TOO_MANY_PARTSTekst ma za dużo kolorowych fragmentów. - 409
JOBNa serwerze trwa zmiana (zadanie). - 409 Serwer nie działa.
- 429
RATE_LIMITEDPrzekroczono 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
- 412
NO_PANELSerwer 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | tak | `export`, `switch`, `delete` lub `reset`. |
world | string | nie | `export`, `switch`, `delete`: nazwa świata z listy (1–64 znaki). |
old | string | nie | `reset` (wymagane): `delete` usunąć stary świat, `keep` zachować jako zapisany. |
keepAs | string | nie | `reset` z `keep`: nowa nazwa starego świata (1–32 znaki A–Z, a–z, 0–9, _ i -). |
seed | string | nie | `reset`: seed nowego świata (do 128 znaków), pusty = losowy. |
levelType | string | nie | `reset`: `normal` (domyślnie), `flat`, `large_biomes` lub `amplified`. |
structures | boolean | nie | `reset`: generować struktury, domyślnie `true`. |
confirmNoBackup | boolean | nie | `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
- 400
INVALIDNieprawidłowa treść żądania. - 400
BAD_NAMENieprawidłowa nazwa świata. - 400
RESERVED_NAMENazwa należy do folderu serwera. - 400
BAD_SEEDNieprawidłowy seed. - 403
FORBIDDENBrak uprawnienia Zasilanie. - 404
NO_SUCH_WORLDŚwiata nie ma na serwerze. - 409
ACTIVE_WORLDŚwiat jest teraz aktywny. - 409
NAME_TAKENFolder o tej nazwie już istnieje. - 409
TOO_MANY_WORLDSSerwer może mieć najwyżej 5 światów. - 409
NEEDS_CONFIRMStary świat zostanie usunięty bez kopii, wyślij `confirmNoBackup: true`. - 409
JOB_RUNNINGNa serwerze trwa już inna zmiana. - 409
EXPORT_RUNNINGPobranie świata jest już przygotowywane. - 409
DISKZa mało miejsca na dysku serwera. - 409
STATESerwer właśnie się uruchamia lub zatrzymuje. - 429
RATE_LIMITEDPrzekroczono limit zmian, spróbuj później. - 412
NO_PANELSerwer 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
id | string | tak | `id` pobrania z `exports` (10 znaków hex). |
format | string | nie | `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
- 400
INVALIDBrak `id` lub jest nieprawidłowe. - 404
EXPORT_GONEPobranie nie jest już przygotowane, przygotuj je ponownie. - 429
DOWNLOAD_BUSYPobieranie już trwa. - 429
RATE_LIMITEDZbyt wiele pobrań. - 412
NO_PANELSerwer 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
locale | string | nie | Ję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
- 400
invalidTreść żą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.
- 409
inactiveDomena nie jest jeszcze aktywna. - 429 Przekroczono limit 3 żądań na godzinę.
- 503
unavailableWysyłka jest chwilowo niedostępna. Spróbuj później. - 422
failedRejestrator 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
service | string | tak | ID twojego aktywnego VPS lub serwera gier (Minecraft, FiveM). Udostępnione usługi nie są dozwolone. |
host | string | tak | Nazwa w domenie: @ dla samej domeny albo subdomena (litery, cyfry, myślniki, bez * i _). |
locale | string | nie | Ję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.
- 409
inactiveDomena nie jest jeszcze aktywna. - 400
hostNieprawidłowa nazwa: podaj @ dla samej domeny albo subdomenę z liter, cyfr i myślników. - 404
serviceUsługa nie istnieje, nie należy do ciebie, nie jest aktywna lub nie da się jej podłączyć. - 409
no_addressUsługa nie ma publicznego adresu, do którego można podłączyć domenę. - 503
unavailableNie 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
serviceId | string | tak | ID twojego aktywnego VPS lub serwera gier, takie samo jak w GET. |
host | string | tak | Nazwa w domenie, taka sama jak w GET (@ lub subdomena). |
planHash | string | tak | Odcisk planu z GET (24 znaki hex). Jeśli strefa w międzyczasie się zmieni, wróci 409 changed z nowym planem. |
confirm | boolean | nie | Potwierdzenie, że istniejące rekordy z replace zostaną zastąpione. Wymagane, gdy replace nie jest puste. |
locale | string | nie | Ję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
- 400
invalidBrakuje 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.
- 409
inactiveDomena nie jest jeszcze aktywna. - 400
hostNieprawidłowa nazwa: podaj @ dla samej domeny albo subdomenę z liter, cyfr i myślników. - 404
serviceUsługa nie istnieje, nie należy do ciebie, nie jest aktywna lub nie da się jej podłączyć. - 409
no_addressUsługa nie ma publicznego adresu, do którego można podłączyć domenę. - 503
unavailableNie można teraz ustalić adresu usługi ani stanu DNS. - 409
manualDomena nie korzysta z naszego DNS. Ustaw rekordy u swojego dostawcy DNS. - 409
changedStrefa zmieniła się od GET. Odpowiedź zawiera nowy plan w polu plan. - 409
confirmPlan zastępuje istniejące rekordy, a brakuje confirm: true. Odpowiedź zawiera plan w polu plan. - 409
limitStrefa 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
locale | string | nie | Ję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ą.
- 409
inactiveDomena nie jest jeszcze aktywna. - 409
no_zoneDomena nie ma strefy na naszym DNS. Przygotuj ją przez domain/zone albo przełącz serwery nazw na nasze. - 503
unavailableSerwer DNS teraz nie odpowiada. Spróbuj później. - 422
failedNie 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
record | object | tak | Nowy rekord. |
record.type | string | tak | Typ rekordu: A, AAAA, CNAME, MX, TXT, SRV lub CAA. |
record.host | string | nie | Nazwa: @ lub puste dla samej domeny, nazwa względna (www, _dmarc, *.dev) albo pełna nazwa kończąca się domeną. |
record.ttl | string | nie | TTL w sekundach jako tekst, od 60 do 86400. Puste = 3600. |
record.address | string | nie | A: adres IPv4, AAAA: adres IPv6. |
record.target | string | nie | CNAME 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.preference | string | nie | MX: priorytet od 0 do 65535 jako tekst. |
record.exchange | string | nie | MX: nazwa serwera poczty (nie adres IP). |
record.text | string | nie | TXT: tekst do 2000 znaków bez znaków sterujących. |
record.priority | string | nie | SRV: priorytet od 0 do 65535 jako tekst. Nazwa SRV musi mieć postać _usługa._protokół (tcp, udp, tls, sctp). |
record.weight | string | nie | SRV: waga od 0 do 65535 jako tekst. |
record.port | string | nie | SRV: port od 0 do 65535 jako tekst. |
record.flags | string | nie | CAA: flaga 0 lub 128 jako tekst. |
record.tag | string | nie | CAA: issue, issuewild lub iodef. |
record.value | string | nie | CAA: dla issue i issuewild domena urzędu certyfikacji, dla iodef adres mailto: lub https:. |
locale | string | nie | Ję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ą.
- 409
inactiveDomena nie jest jeszcze aktywna. - 409
no_zoneDomena nie ma strefy na naszym DNS. Przygotuj ją przez domain/zone albo przełącz serwery nazw na nasze. - 503
unavailableSerwer DNS teraz nie odpowiada. Spróbuj później. - 422
failedNie 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
id | string | tak | ID rekordu z listy (20 znaków hex). |
record | object | tak | Pola do zmiany (takie same jak przy dodawaniu, bez type). |
record.host | string | nie | Nazwa: @ lub puste dla samej domeny, nazwa względna (www, _dmarc, *.dev) albo pełna nazwa kończąca się domeną. |
record.ttl | string | nie | TTL w sekundach jako tekst, od 60 do 86400. Puste = 3600. |
record.address | string | nie | A: adres IPv4, AAAA: adres IPv6. |
record.target | string | nie | CNAME 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.preference | string | nie | MX: priorytet od 0 do 65535 jako tekst. |
record.exchange | string | nie | MX: nazwa serwera poczty (nie adres IP). |
record.text | string | nie | TXT: tekst do 2000 znaków bez znaków sterujących. |
record.priority | string | nie | SRV: priorytet od 0 do 65535 jako tekst. Nazwa SRV musi mieć postać _usługa._protokół (tcp, udp, tls, sctp). |
record.weight | string | nie | SRV: waga od 0 do 65535 jako tekst. |
record.port | string | nie | SRV: port od 0 do 65535 jako tekst. |
record.flags | string | nie | CAA: flaga 0 lub 128 jako tekst. |
record.tag | string | nie | CAA: issue, issuewild lub iodef. |
record.value | string | nie | CAA: dla issue i issuewild domena urzędu certyfikacji, dla iodef adres mailto: lub https:. |
locale | string | nie | Ję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.
- 404
not_foundW 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ą.
- 409
inactiveDomena nie jest jeszcze aktywna. - 409
no_zoneDomena nie ma strefy na naszym DNS. Przygotuj ją przez domain/zone albo przełącz serwery nazw na nasze. - 503
unavailableSerwer DNS teraz nie odpowiada. Spróbuj później. - 422
failedNie 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
id | string | tak | ID rekordu z listy (20 znaków hex). |
locale | string | nie | Ję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
- 400
invalidBrakuje id lub ma ono zły format. - 404
not_foundW 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ą.
- 409
inactiveDomena nie jest jeszcze aktywna. - 409
no_zoneDomena nie ma strefy na naszym DNS. Przygotuj ją przez domain/zone albo przełącz serwery nazw na nasze. - 503
unavailableSerwer DNS teraz nie odpowiada. Spróbuj później. - 422
failedNie 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
mode | string | tak | ours, custom lub wedos. |
nameservers | array | nie | Tylko dla custom: od 2 do 6 serwerów w postaci { name, ipv4?, ipv6? }. |
nameservers[].name | string | tak | Nazwa serwera, np. ns1.example.net. |
nameservers[].ipv4 | string | nie | Adres 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[].ipv6 | string | nie | Adres IPv6, te same zasady co dla ipv4. |
locale | string | nie | Ję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
- 400
invalidNieprawidłowa treść żądania (np. nieznany mode). - 400
ns_countDla custom potrzeba od 2 do 6 różnych serwerów. - 400
ns_nameNieprawidłowa nazwa serwera. Pole index mówi którego. - 400
ns_glueSerwer wewnątrz domeny potrzebuje adresu IPv4 lub IPv6. - 400
ns_ipNieprawidłowy adres IP serwera. - 400
ns_oursWł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.
- 409
inactiveDomena nie jest jeszcze aktywna. - 429 Przekroczono limit 10 zmian na 10 minut.
- 503
unavailableRejestr lub serwer DNS jest teraz niedostępny. Spróbuj później. - 422
failedRejestr 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
locale | string | nie | Ję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
- 400
invalidTreść żą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.
- 409
inactiveDomena nie jest jeszcze aktywna. - 429 Przekroczono limit 10 żądań na 10 minut.
- 503
not_readyDNS dla domen nie jest teraz gotowy. Spróbuj później. - 422
failedNie 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
page | integer | nie | Strona historii od 1. Domyślnie 1. |
locale | string | nie | Ję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
- 429
rate_limitedPrzekroczono 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
invoiceId | string | tak | ID nieopłaconej faktury. |
expectedAmountCzk | number | tak | Oczekiwana kwota faktury w CZK. Musi dokładnie odpowiadać cenie zamówienia, inaczej wróci 409 amount_changed z aktualną kwotą. |
ackOpenGateway | boolean | nie | Potwierdzenie, że chcesz zapłacić kredytem, mimo że do faktury jest otwarta płatność w bramce. Domyślnie false. |
locale | string | nie | Ję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
- 400
invalidBrakuje wymaganego pola lub ma ono zły format. - 403
lockedKonto jest tymczasowo zablokowane. - 404
invoice_not_foundFaktura nie istnieje lub nie należy do ciebie. - 409
insufficientZa mało kredytu. Odpowiedź zawiera balanceCzk i neededCzk. - 409
amount_changedKwota się zmieniła. Aktualna jest w amountCzk. - 409
closedFaktura jest już opłacona lub anulowana. - 409
expiredFaktura proforma wygasła po terminie płatności. - 409
upgrade_expiredOferta ulepszenia była ważna tylko do końca okresu usługi i została anulowana. - 409
gateway_openDo faktury jest otwarta płatność w bramce. Wyślij ackOpenGateway: true. - 409
payment_in_progressPłatność w bramce jest w toku. - 409
paid_unreconciledPłatność już wpłynęła, ale nie została jeszcze przypisana. - 409
topup_not_payableFaktury za doładowanie kredytu nie można opłacić kredytem. - 409
not_payableFaktura nie dotyczy zamówienia, które można opłacić. - 409
capacityBrak teraz wolnych zasobów dla zamówionej usługi. - 409
billing_profile_incompleteBrakuje danych rozliczeniowych konta. Odpowiedź zawiera settingsUrl. - 409
foreign_eu_vatZamówienia firm z innych krajów UE są na razie obsługiwane indywidualnie. - 429
rate_limitedPrzekroczono limit 10 prób na minutę. - 503
unavailableKredyt nie jest teraz dostępny. - 503
gateway_check_failedNie można teraz sprawdzić stanu płatności w bramce. Spróbuj później. - 503
capacity_busyNie 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
status | string | nie | Filtr według stanu: PENDING, PAID, CANCELLED lub REFUNDED. Inna wartość jest ignorowana. |
limit | integer | nie | Liczba 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
lang | string | nie | en = angielska nazwa pliku, w przeciwnym razie czeska. |
Przykładowa odpowiedź
application/pdf (Content-Disposition: attachment; filename="faktura-2026-0042.pdf")Możliwe błędy
- 404
not_foundFaktura nie istnieje, nie należy do ciebie lub nie jest opłacona. - 409
preparingFaktura jest jeszcze wystawiana. Spróbuj później. - 429
rate_limitedPrzekroczono limit 20 pobrań na minutę. - 503
not_readyPDF jest właśnie przygotowywany. Spróbuj za kilka sekund (nagłówek Retry-After). - 503
unavailableNie 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
lang | string | nie | Ję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
- 404
not_foundFaktura lub usługa nie istnieje, nie należy do ciebie albo nie jesteś właścicielem. Odpowiedź jest zawsze taka sama. - 429
rate_limitedPrzekroczono limit 20 pobrań na minutę. - 503
not_readyPDF jest właśnie przygotowywany. Spróbuj za kilka sekund (nagłówek Retry-After). - 503
unavailableNie 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
view | string | nie | restart = zwraca tylko { restartPending } (czy serwer czeka na restart po zmianie pakietu); działa też dla członków. |
locale | string | nie | Ję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.
- 409
unavailableZmiana 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | nie | order (domyślnie), cancelPending (anulować nieopłacone zamówienie), scheduleDowngrade (mniejszy pakiet od następnego okresu) lub cancelScheduled (anulować zaplanowaną zmianę). |
packageId | string | null | nie | order, scheduleDowngrade: id docelowego pakietu z GET (packages, lowerPackages). Bez niego zostaje obecny pakiet. |
backups | integer | nie | order, scheduleDowngrade: liczba dodatków kopii, 0 lub 1. |
immediateStartRequested | boolean | nie | order: konsument prosi o natychmiastowe wykonanie zmiany (regulamin art. 9.8). Bez numeru firmy musi być true. |
businessPurpose | boolean | nie | order: oświadczenie, że zamówienie służy działalności gospodarczej. |
expectedChargeCzk | number | null | nie | order: dopłata, którą widziałeś. Jeśli się różni, zwracane jest 409 price_changed i nic nie powstaje. |
expectedMonthlyCzk | number | null | nie | order, scheduleDowngrade: nowa cena miesięczna, którą widziałeś. Jeśli się różni, zwracane jest 409 price_changed. |
changeId | string | nie | cancelScheduled: id zaplanowanej zmiany (scheduled.id z GET); jeśli się nie zgadza, zwracane jest 409 changed. |
locale | string | nie | Ję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ć.
- 400
immediate_start_requiredKonsument musi wysłać immediateStartRequested: true. - 403 Tylko dla właściciela usługi.
- 404
nonecancelScheduled: brak zaplanowanej zmiany. - 409
billing_profile_incompleteBrakuje danych rozliczeniowych konta. - 409
pending_orderIstnieje już nieopłacone zamówienie upgradu (orderId w odpowiedzi). - 409
upgrade_in_progressOpłacony upgrade jest jeszcze wdrażany. - 409
price_changedCena się zmieniła; odpowiedź zawiera newChargeCzk i newMonthlyCzk. - 409
capacityWiększy pakiet nie mieści się na serwerze. - 409
does_not_fitscheduleDowngrade: dane nie mieszczą się w mniejszym pakiecie (powody w reasons). - 409
transfer_pendingUsługa czeka na przeniesienie. - 409
refund_openDla usługi trwa odstąpienie lub zwrot pieniędzy. - 409
renewal_paidNastępny okres jest opłacony w cenie zaplanowanego mniejszego pakietu. - 409
change_applyingMniejszy pakiet jest właśnie wdrażany. - 409
too_latecancelScheduled: zmiana już obowiązuje. - 503
price_list_unavailableCennika 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
locale | string | nie | en 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | nie | order (domyślnie) lub cancelPending. |
ramGb | number | nie | Nowa RAM w GB (1–32); vCPU wynika z RAM. Brak = bez zmian. |
diskGb | number | nie | Dysk w GB (20–500), tylko w górę. |
ipv4 | number | nie | Liczba adresów IPv4 (1–5). |
cores | number | nie | vCPU (1–16); przy cenie według RAM jest wyliczane. |
locale | string | nie | Język komunikatów i opisu zamówienia: cs, en, sk, pl lub de. |
immediateStartRequested | boolean | nie | Konsument: true = prośba o natychmiastowe wykonanie zmiany; bez niej zamówienie nie powstanie. |
businessPurpose | boolean | nie | Konto z numerem firmy: true = oświadczenie o celu biznesowym (wtedy natychmiastowe wykonanie nie jest wymagane). |
expectedChargeCzk | number | nie | Wyświetlona dopłata; inna niż wyliczona = 409 price_changed. |
expectedMonthlyCzk | number | nie | Wyś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
- 400
immediate_start_requiredBrak prośby o natychmiastowe wykonanie. Bez kodu: nieprawidłowe wartości (pole field) lub brak zwiększenia. - 409
pending_orderIstnieje 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. - 409
price_changedCena się zmieniła; nowe wartości w newChargeCzk i newMonthlyCzk, nic nie utworzono. - 503
capacity_unknownNie 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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
locale | string | nie | en 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).
- 404
not_foundNie 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | tak | Zawsze pay. |
locale | string | nie | Ję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
- 400
invalidNieprawidłowa treść. - 409
not_allowedPrzedłużenie nie jest teraz możliwe. Inne kody: not_managed, terminated, term_end, payment_started, failed. - 429
rate_limitedPonad 20 żądań na godzinę. - 503
failedNie 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
autoCredit | boolean | nie | Opłacaj odnowienie automatycznie z kredytu. |
autoCard | boolean | nie | Opłacaj odnowienie automatycznie zapisaną kartą. |
endAtTermEnd | boolean | nie | true = wypowiedzenie na koniec opłaconego okresu, false = cofnij wypowiedzenie. |
locale | string | nie | Ję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
- 400
invalidNieprawidłowa treść (pola inne niż dozwolone). - 404
not_allowedUsługa nie należy do Twojego konta. - 409
not_managedUsł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
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
locale | string | nie | en 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
- 409
coming_soonZmiany 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)
| Nazwa | Typ | Wymagane | Opis |
|---|---|---|---|
action | string | nie | order (domyślnie) lub cancelPending. |
tier | string | tak | Dla order: business lub pro (tylko wyższy niż obecny). |
locale | string | nie | Język komunikatów i opisu zamówienia: cs, en, sk, pl lub de. |
immediateStartRequested | boolean | nie | Konsument: true = prośba o natychmiastowe wykonanie zmiany; bez niej zamówienie nie powstanie. |
businessPurpose | boolean | nie | Konto z numerem firmy: true = oświadczenie o celu biznesowym. |
expectedChargeCzk | number | nie | Wyświetlona dopłata; inna = 409 price_changed. |
expectedMonthlyCzk | number | nie | Wyś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
- 409
coming_soonZmiany planu nie można jeszcze zamówić online. Inne kody: price_changed, pending_order, billing_profile_incomplete, unavailable, unknown_current. - 400
downgradeNiższego lub tego samego planu nie można ustawić. Inne kody: unknown_tier, immediate_start_required. - 503
price_list_unavailableNie 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)