API pro vlastní panely a reselling
Ovládejte své služby z vlastního systému: stejné funkce jako v zákaznickém účtu, s klíči a oprávněními, která si sami nastavíte.
K čemu API slouží
API je pro každého, kdo chce služby StormHostu ovládat z vlastního prostředí: reselleři s vlastním panelem pro své zákazníky, firmy s interními nástroji nebo vývojáři, kteří chtějí restart serveru, zálohy nebo DNS řešit skriptem.
Přes API funguje skoro všechno, co děláte v zákaznickém účtu: zapnutí a restart, statistiky, přeinstalace, firewall, rDNS, zálohy, soubory, databáze, nastavení herních serverů a Minecraftu, Discord boti, DNS domén, změny balíčků, obnovy i platba kreditem.
Klíč jedná vaším jménem, ale jen v rozsahu oprávnění, která mu dáte. U služby, kterou s vámi někdo sdílí, navíc platí oprávnění, která vám dal její majitel.
Rychlý start
- V zákaznickém účtu otevřete Nastavení účtu, záložku API klíče, a vytvořte klíč. Zvolte název, oprávnění, případně služby a IP adresy, ze kterých ho budete používat, a platnost. Vytvoření potvrdíte kódem z aplikace nebo heslem.
- Klíč se ukáže jen jednou. Zkopírujte si ho a uložte bezpečně, třeba do proměnné prostředí na serveru. U nás je uložený jen jeho otisk, takže ho neumíme znovu zobrazit.
- Vyzkoušejte první požadavek. Endpoint /api/v1/key vrátí informace o klíči a funguje s každým platným klíčem:
curl https://stormhost.eu/api/v1/key \
-H "Authorization: Bearer shk_…"Ověření klíčem
- Každý požadavek posílá klíč v hlavičce Authorization ve tvaru Bearer shk_… (místo toho jde použít i hlavičku X-API-Key).
- API nepoužívá cookies. Požadavek s přihlašovací cookie zákaznického účtu odmítne, takže klíč nejde zneužít z prohlížeče.
- Klíč nikdy nedávejte do kódu, který běží v prohlížeči nebo v mobilní aplikaci. Patří jen na váš server.
- Po změně nebo obnově hesla a při zablokování účtu dosavadní klíče přestanou platit. Vytvořte pak nové.
Authorization: Bearer shk_ab12cd34ef56_…Oprávnění
Klíči dejte jen oprávnění, která opravdu potřebuje. Chybějící oprávnění API odmítne odpovědí 403 s kódem insufficient_scope a názvem potřebného oprávnění v poli requiredScope.
| Oprávnění | Co povoluje |
|---|---|
account:read | Údaje účtu (jen čtení) |
services:read | Seznam služeb, stav a statistiky |
services:power | Zapnout, vypnout, restartovat |
services:console | Konzole |
services:network | Síť: rDNS, privátní síť, adresy |
services:firewall | Firewall |
services:files | Soubory, světy, pluginy a módy |
services:database | Databáze |
services:backups | Zálohy a obnova |
services:settings | Nastavení služby (hry, boti, plánovač, upozornění, ISO) |
services:secrets | Citlivé: přeinstalace, hesla, SFTP, kód pro převod doményjen s omezením na IP adresy |
domains:read | DNS záznamy (jen čtení) |
domains:write | DNS záznamy a nameservery (úpravy) |
billing:read | Doklady a kredit (jen čtení) |
billing:write | Objednávky změn, obnovy a platba kreditem |
Omezení na služby a IP adresy
Klíč můžete omezit na vybrané služby. K ostatním službám se pak nedostane a API odpoví 404, jako by neexistovaly. Omezený klíč nemá přístup k dokladům a kreditu účtu. Bez omezení platí pro všechny vaše služby, i ty budoucí.
Klíč můžete omezit na IP adresy nebo rozsahy (např. 203.0.113.10 nebo 203.0.113.0/24, nejvýš 20). Z jiné adresy API odpoví 403 s kódem ip_not_allowed. Citlivé oprávnění services:secrets jde jen s tímto omezením.
Platnost klíče volíte při vytvoření (30 až 365 dní, nebo bez omezení). Klíč můžete kdykoli odvolat, přestane platit okamžitě.
Požadavky a odpovědi
- Adresa API je https://stormhost.eu/api/v1. Všechny odpovědi jsou JSON v kódování UTF-8, kromě stahování souborů a PDF.
- Požadavky s tělem (POST, PUT, PATCH, DELETE) posílejte jako JSON s hlavičkou Content-Type: application/json.
- Jazyk hlášek zvolíte parametrem ?locale=cs, en, sk, pl nebo de, u zápisů i polem locale v těle. Bez něj odpovídáme česky.
- Identifikátor služby {id} najdete v seznamu služeb (GET /api/v1/services) nebo v adrese služby v zákaznickém účtu.
- Úspěšná odpověď má stav 200. Chyba má stav 4xx nebo 5xx a v těle pole error (text pro člověka) a obvykle i code (strojový kód).
{
"error": "This API key lacks the services:power scope.",
"code": "insufficient_scope",
"requiredScope": "services:power"
}Chyby
Chyby společné všem funkcím. Chyby jednotlivých funkcí najdete u nich v přehledu.
| Stav | Kód | Význam |
|---|---|---|
| 400 | cookies_not_allowed | Požadavek nese cookies. API se používá jen s klíčem. |
| 401 | missing_key | Chybí klíč v hlavičce Authorization. |
| 401 | invalid_key | Klíč je neplatný, prošlý nebo odvolaný. |
| 403 | ip_not_allowed | Klíč nejde použít z této IP adresy. |
| 403 | insufficient_scope | Klíč nemá potřebné oprávnění (pole requiredScope). |
| 403 | email_unverified | E-mail účtu není ověřený. |
| 404 | not_found | Neznámá adresa, nebo služba, ke které klíč nemá přístup. |
| 400 | — | Funkce není pro tento typ služby (třeba nastavení Minecraftu u VPS). |
| 409 | — | Služba není aktivní (čeká na založení, je pozastavená nebo zrušená). |
| 405 | method_not_allowed | Metoda není povolená, hlavička Allow uvádí povolené. |
| 429 | rate_limited | Překročený limit požadavků, opakujte po době v hlavičce Retry-After. |
| 503 | unavailable | Služba je dočasně nedostupná, zkuste to za chvíli. |
Limity
- Jeden klíč smí poslat nejvýš 300 požadavků za minutu (všechny funkce dohromady).
- Některé funkce mají vlastní, přísnější limit stejně jako v zákaznickém účtu, například zapnutí a restart služby 5 za minutu.
- Po překročení limitu API odpoví 429 a hlavička Retry-After řekne, za kolik sekund to zkusit znovu. Opakované neplatné klíče z jedné IP adresy se dočasně blokují.
- Aktivních klíčů může mít účet nejvýš 20.
Ukázky kódu
Ukázky ověří klíč a vypíšou služby. Klíč čtou z proměnné prostředí STORMHOST_API_KEY. Typický postup resellera: vypsat služby, zjistit stav a podle potřeby službu restartovat.
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()Přehled funkcí
U každé funkce je metoda, adresa, potřebné oprávnění, parametry a ukázka odpovědi. Hodnoty v ukázkách jsou smyšlené.
Klíč a účet
GET/keyInformace o API klíči
Vrátí název klíče, jeho oprávnění, omezení na služby a IP adresy a platnost. Nepotřebuje žádné oprávnění, hodí se k ověření klíče.
Oprávnění: –
Ukázka odpovědi
{
"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žné chyby
- 401
invalid_keyKlíč je neplatný, vypršel nebo byl odvolán.
GET/meÚdaje o účtu
Vrátí základní údaje účtu, ke kterému klíč patří: e-mail, jméno, firmu, IČO, DIČ a zemi.
Oprávnění: account:read
Ukázka odpovědi
{
"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žné chyby
- 401
invalid_keyÚčet klíče nebyl nalezen.
Služby
GET/overview/metricsOkamžité metriky služeb
Vrátí aktuální stav a využití až 8 služeb najednou: u VPS a herních serverů napájení, procesor, paměť a dobu běhu, u Minecraftu hráče, u rackhousingu příkon, u domén datum expirace. Když data nejdou zjistit, služba má state: unavailable s důvodem v reason.
Oprávnění: services:read
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
ids | string | ne | ID služeb oddělená čárkou, nejvýš 8. Bez parametru vrátí prvních 8 služeb. Neznámá ID se tiše vynechají. Klíč omezený na vybrané služby smí poslat jen jejich ID. |
locale | string | ne | Jazyk chybových hlášek: cs, en, sk, pl nebo de. Výchozí je cs. |
Ukázka odpovědi
{
"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žné chyby
- 404
not_foundKlíč je omezený na vybrané služby a ids obsahuje jinou službu. - 429
rate_limitedPřekročený limit 40 dotazů za minutu. - 503
unavailableSeznam služeb teď nejde načíst. Zkuste to za pár sekund.
GET/servicesSeznam služeb
Vrátí vaše služby i služby, které s vámi někdo sdílí (role member, u nich bez ceny a s vašimi oprávněními). Klíč omezený na vybrané služby vidí jen je.
Oprávnění: services:read
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
status | string | ne | Filtr podle stavu: PENDING, ACTIVE, SUSPENDED nebo TERMINATED (na velikosti písmen nezáleží). |
locale | string | ne | Jazyk názvů služeb: cs, en, sk, pl nebo de. Výchozí je cs. |
Ukázka odpovědi
{
"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}Detail služby
Vrátí jednu službu ve stejném tvaru jako seznam služeb. Funguje i pro pozastavené a ukončené služby.
Oprávnění: services:read
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
locale | string | ne | Jazyk názvu služby a chybových hlášek: cs, en, sk, pl nebo de. Výchozí je cs. |
Ukázka odpovědi
{
"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žné chyby
- 404 Služba neexistuje, nepatří vám nebo na ni klíč nemá přístup.
- 400 Tento druh služby API nepodporuje.
- 403
mfa_requiredVlastník sdílené služby vyžaduje dvoufázové ověření, které na účtu nemáte zapnuté.
Služby obecně
POST/services/{id}/console-tokenToken pro připojení ke konzoli
Vydá jednorázový token platný 30 s pro websocket konzole VPS (VNC nebo terminál) nebo herního serveru. Konzole otevřená tokenem z API běží nejdéle asi minutu; jen aktivní služba, limit 10 za minutu.
Oprávnění: services:console
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
mode | string | ano | Jen u VPS: vnc nebo term. U herního serveru se nečte. |
Ukázka těla
{
"mode": "vnc"
}Ukázka odpovědi
{
"token": "eyJhbGciOi…example",
"password": "example-rfb-ticket"
}Možné chyby
- 400 U VPS chybí nebo je neplatná hodnota mode.
- 403 Chybí právo Konzole u sdílené služby.
- 404 Služba nenalezena nebo u ní konzole není.
- 409 Služba není aktivní nebo je VPS zamčená (obnova ze zálohy).
- 412
NOT_PROVISIONEDServer ještě není připravený. - 429 Víc než 10 tokenů za minutu.
GET/services/{id}/crashRozbor pádu a logu serveru
Rozebere log, crash report nebo výpis konzole herního serveru či bota a vrátí nálezy s návrhy řešení. Nic na serveru nemění; nálezy obsahují id a parametry, ne hotové texty. Limit 10 rozborů za minutu na službu.
Oprávnění: services:read
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
source | string | ne | auto (výchozí), latest, crash-report, console nebo file. |
name | string | ne | Soubor pro source=file, např. logs/latest.log, crash-reports/crash-….txt nebo hs_err_pid….log (max. 120 znaků). |
list | string | ne | files vrátí seznam souborů, které jde rozebrat (nejvýš 50). |
lang | string | ne | Jazyk hlášek: cs, en, sk, pl nebo de. |
tpl | string | ne | 1 = povolit i návrhy, které pošlou pevný příkaz do konzole. |
Ukázka odpovědi
{
"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žné chyby
- 400
bad-requestNeplatný parametr. Kód bad-name: tenhle soubor rozebrat nejde. - 403
forbiddenChybí právo Konzole nebo Soubory u sdílené služby. - 404
no-sourceLog se nenašel, server možná ještě neběžel. - 412
not-readyServer ještě není připravený. - 413
too-largeLog je na rozbor příliš velký (nad 16 MiB). - 429
ratePřekročený limit. Kód busy: právě běží rozbory jiných serverů. - 502
failedLog se nepodařilo načíst.
GET/services/{id}/databaseDatabázový server na VPS a přehled
Zjistí, jestli je na VPS MariaDB/MySQL nebo PostgreSQL, a po připojení vrátí verzi, databáze a uživatele. Jen VPS.
Oprávnění: services:database
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
locale | string | ne | Jazyk důvodu v connectError: cs, en, sk, pl nebo de. |
Ukázka odpovědi
{
"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žné chyby
- 403 Chybí oprávnění Databáze.
- 401
AUTH_FAILEDVPS odmítl přihlašovací údaje. - 409
HOST_KEY_CHANGEDOtisk SSH klíče VPS se změnil (nový v presentedHostKey); potvrďte ho akcí trustHostKey. - 412
NO_TARGETVPS zatím nemá adresu nebo přístupové údaje (také NO_CREDENTIALS). - 502
UNREACHABLEVPS není dostupný (také TIMEOUT, FAILED).
POST/services/{id}/databaseInstalace, připojení, databáze a uživatelé
Spravuje databázový server na VPS podle pole action. Instalace běží na pozadí (jen Debian/Ubuntu); smazání databáze nebo uživatele je nevratné. Vygenerované heslo se vrátí jen jednou.
Oprávnění: services:database
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ano | install, connectAuto, connectManual, disconnect, createDatabase, dropDatabase, createUser, dropUser, setPassword nebo grant. |
engine | string | ne | install, connectAuto, connectManual: mysql nebo postgres. connectAuto založí účet panelu přes lokální přístup roota. |
port | integer | ne | connectManual: port databázového serveru. |
username | string | ne | connectManual: uživatel, pod kterým se panel připojí. |
password | string | ne | connectManual: heslo (povinné). createUser, setPassword: nové heslo 8–128 znaků; bez něj se vygeneruje. |
name | string | ne | Databázové akce: název databáze nebo uživatele, písmena bez diakritiky, číslice a podtržítko, nejvýš 63 znaků, nezačíná číslicí. |
createUser | boolean | ne | createDatabase: založit i stejnojmenného uživatele s plnými právy. |
host | string | ne | createDatabase, createUser (MySQL): localhost (výchozí) nebo %. dropUser: konkrétní host, jinak všechny. |
database | string | ne | createUser (nepovinné), grant (povinné): databáze, ke které uživatel dostane plná práva. |
Ukázka těla
{
"action": "createDatabase",
"name": "shop",
"createUser": true,
"host": "localhost"
}Ukázka odpovědi
{
"ok": true,
"username": "shop",
"password": "<generated>"
}Možné chyby
- 400 Neplatný požadavek, vyhrazený název, instalace už běží, systém neumí automatickou instalaci nebo chyba z databázového serveru.
- 412 Databázový server ještě není připojený.
- 403 Chybí oprávnění Databáze.
- 500 Vnitřní chyba (v odpovědi je ref pro podporu).
- 401
AUTH_FAILEDVPS odmítl přihlašovací údaje. - 409
HOST_KEY_CHANGEDOtisk SSH klíče VPS se změnil (nový v presentedHostKey); potvrďte ho akcí trustHostKey. - 412
NO_TARGETVPS zatím nemá adresu nebo přístupové údaje (také NO_CREDENTIALS). - 502
UNREACHABLEVPS není dostupný (také TIMEOUT, FAILED).
GET/services/{id}/database/browseTabulky a řádky databáze na VPS
Bez table vrátí tabulky databáze s odhadem počtu řádků a velikostí. S table vrátí řádky po 50. Jen VPS s připojeným databázovým serverem.
Oprávnění: services:database
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
db | string | ano | Název databáze. |
table | string | ne | Název tabulky; bez něj se vrátí seznam tabulek. |
schema | string | ne | PostgreSQL: schéma tabulky, výchozí public. |
page | integer | ne | Stránka od 0, po 50 řádcích. |
Ukázka odpovědi
{
"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žné chyby
- 400 Neplatný název nebo chyba z databázového serveru.
- 412 Databázový server ještě není připojený.
- 403 Chybí oprávnění Databáze.
- 401
AUTH_FAILEDVPS odmítl přihlašovací údaje. - 409
HOST_KEY_CHANGEDOtisk SSH klíče VPS se změnil (nový v presentedHostKey); potvrďte ho akcí trustHostKey. - 412
NO_TARGETVPS zatím nemá adresu nebo přístupové údaje (také NO_CREDENTIALS). - 502
UNREACHABLEVPS není dostupný (také TIMEOUT, FAILED).
POST/services/{id}/database/querySpustit SQL dotaz na VPS
Spustí SQL dotaz pod účtem, kterým se panel připojuje k databázovému serveru VPS. Vrátí nejvýš 500 řádků, limit 25 s. Dotaz může data i měnit nebo mazat.
Oprávnění: services:database
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
sql | string | ano | SQL dotaz, nejvýš 100 000 znaků. |
db | string | ne | Databáze, ve které dotaz poběží. |
Ukázka těla
{
"db": "shop",
"sql": "SELECT id, name FROM customers ORDER BY id LIMIT 10"
}Ukázka odpovědi
{
"columns": [
"id",
"name"
],
"rows": [
[
"1",
"Alice"
],
[
"2",
"Bob"
]
],
"rowCount": 2,
"affectedRows": null,
"truncated": false,
"command": "SELECT",
"durationMs": 7
}Možné chyby
- 400 Neplatný požadavek nebo chyba z databázového serveru.
- 412 Databázový server ještě není připojený.
- 403 Chybí oprávnění Databáze.
- 429 Nejvýš 60 dotazů za minutu.
- 401
AUTH_FAILEDVPS odmítl přihlašovací údaje. - 409
HOST_KEY_CHANGEDOtisk SSH klíče VPS se změnil (nový v presentedHostKey); potvrďte ho akcí trustHostKey. - 412
NO_TARGETVPS zatím nemá adresu nebo přístupové údaje (také NO_CREDENTIALS). - 502
UNREACHABLEVPS není dostupný (také TIMEOUT, FAILED).
GET/services/{id}/filesVýpis složky na serveru
Vypíše obsah složky na VPS (přes SFTP) nebo na herním serveru či Discord botovi, nejvýš 5000 položek. U VPS přidá přístupové údaje bez hesla.
Oprávnění: services:files
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
path | string | ne | Absolutní cesta ke složce. Výchozí / u her a botů, domovská složka uživatele u VPS. |
Ukázka odpovědi
{
"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žné chyby
- 400 Neplatná cesta nebo chyba SFTP.
- 403 Chybí oprávnění Soubory.
- 404 Složka na herním serveru neexistuje.
- 401
AUTH_FAILEDVPS odmítl přihlašovací údaje. - 409
HOST_KEY_CHANGEDOtisk SSH klíče VPS se změnil (nový v presentedHostKey); potvrďte ho akcí trustHostKey. - 412
NO_TARGETVPS zatím nemá adresu nebo přístupové údaje (také NO_CREDENTIALS). - 502
UNREACHABLEVPS není dostupný (také TIMEOUT, FAILED).
POST/services/{id}/filesVytvořit, přejmenovat, upravit nebo smazat soubory
Provede souborovou akci na VPS, herním serveru nebo Discord botovi podle pole action. Mazání je nevratné; u VPS maže složky i s obsahem. Nahrávání souborů přes API nejde, použijte SFTP.
Oprávnění: services:files
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ano | mkdir, touch, rename, delete, chmod, write; jen VPS a jen vlastník: credentials, resetCredentials, trustHostKey; jen hry a boti: compress, decompress. |
path | string | ne | mkdir, touch, rename, chmod, write, decompress: absolutní cesta k položce. |
to | string | ne | rename: nová absolutní cesta. |
paths | string[] | ne | delete: 1–200 absolutních cest. |
mode | string | ne | chmod: práva osmičkově, 3–4 číslice (např. 644). |
content | string | ne | write: celý nový obsah souboru v UTF-8, nejvýš 2 MB. |
username | string | ne | credentials: SSH uživatel pro správce souborů (místo root). |
password | string | ne | credentials: heslo SSH uživatele, uloží se šifrovaně po úspěšném přihlášení. |
port | integer | ne | credentials: SSH port 1–65535. |
fingerprint | string | ne | trustHostKey: nový otisk klíče ve tvaru SHA256:…. |
dir | string | ne | compress: složka, ve které jsou položky k zabalení. |
names | string[] | ne | compress: 1–200 jmen ze složky dir. |
archiveName | string | ne | compress: název archivu .tar.gz, nejvýš 120 znaků. |
into | string | ne | decompress: here (výchozí) nebo newFolder. |
folderName | string | ne | decompress: název nové složky, nejvýš 120 znaků. |
locale | string | ne | Jazyk hlášek: cs, en, sk, pl nebo de. Výchozí cs. |
Ukázka těla
{
"action": "write",
"path": "/server.properties",
"content": "motd=Můj server\nmax-players=20\n"
}Ukázka odpovědi
{
"ok": true
}Možné chyby
- 400 Neplatný požadavek, cesta nebo název; systémové složky a /proc, /sys, /dev měnit nejde.
- 403 Přístupové údaje mění jen vlastník; nebo chybí oprávnění Soubory.
- 409 Soubor nebo složka s tímto názvem už existuje.
- 409
JOB_RUNNINGNa Minecraft serveru běží změna softwaru nebo instalace modpacku. - 409
ARCHIVE_BUSYProbíhá jiné balení nebo rozbalování. - 413 Obsah pro write je větší než 2 MB.
- 429 Nejvýš 10 balení a rozbalení za 10 minut.
- 401
AUTH_FAILEDVPS odmítl přihlašovací údaje. - 409
HOST_KEY_CHANGEDOtisk SSH klíče VPS se změnil (nový v presentedHostKey); potvrďte ho akcí trustHostKey. - 412
NO_TARGETVPS zatím nemá adresu nebo přístupové údaje (také NO_CREDENTIALS). - 502
UNREACHABLEVPS není dostupný (také TIMEOUT, FAILED).
GET/services/{id}/files/downloadStáhnout soubor nebo přečíst text
Stáhne soubor z VPS, herního serveru nebo Discord bota. S as=text vrátí obsah textového souboru v UTF-8 jako JSON, nejvýš 1 MB.
Oprávnění: services:files
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
path | string | ano | Absolutní cesta k souboru. |
as | string | ne | text = vrátit obsah jako JSON místo stažení. |
Ukázka odpovědi
{
"path": "/server.properties",
"content": "motd=Můj server\nmax-players=20\n",
"eol": "lf",
"bom": false
}Možné chyby
- 400 Neplatná cesta, nejde o běžný soubor, nebo jde o /proc, /sys, /dev na VPS.
- 413
TOO_LARGEas=text: soubor je větší než 1 MB. - 415
BINARYas=text: soubor není text v UTF-8. - 403 Chybí oprávnění Soubory.
- 401
AUTH_FAILEDVPS odmítl přihlašovací údaje. - 409
HOST_KEY_CHANGEDOtisk SSH klíče VPS se změnil (nový v presentedHostKey); potvrďte ho akcí trustHostKey. - 412
NO_TARGETVPS zatím nemá adresu nebo přístupové údaje (také NO_CREDENTIALS). - 502
UNREACHABLEVPS není dostupný (také TIMEOUT, FAILED).
GET/services/{id}/liveAktuální stav a využití serveru
Vrátí stav napájení a aktuální využití CPU, RAM, disku a sítě VPS nebo herního serveru. Pro průběžné sledování použijte live/stream; když stav zjistit nejde, odpověď je 200 s ok: false.
Oprávnění: services:read
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
poll | string | ne | Hodnota live pro opakované dotazy (po 2 s), odpověď jde z posledního živého vzorku. |
Ukázka odpovědi
{
"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žné chyby
- 403
mfa_requiredVlastník služby vyžaduje u členů dvoufázové ověření. - 404 Služba nenalezena.
- 429 Víc než 240 dotazů za minutu.
GET/services/{id}/live/streamŽivé statistiky přes SSE
Otevře proud Server-Sent Events se vzorky využití VPS nebo herního serveru zhruba každou sekundu (hello, backfill, sample, disk, status, unavailable, end). Spojení s API klíčem skončí asi po minutě událostí end, pak se připojte znovu.
Oprávnění: services:read
Ukázka odpovědi
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žné chyby
- 403
mfa_requiredVlastník služby vyžaduje u členů dvoufázové ověření. - 404 Služba nenalezena.
- 200 Ostatní problémy přijdou jako událost end s důvodem: unsupported, busy (s retryInMs), revoked, inactive, moved, rotate.
PATCH/services/{id}/namePřejmenování služby
Nastaví vlastní název služby, který se pak vrací v poli name (productName zůstane název tarifu). null nebo prázdný řetězec vrátí původní název. Jen vlastník služby.
Oprávnění: services:settings
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
name | string | null | ano | Nový název, nejvýš 60 znaků. |
locale | string | ne | Jazyk chybových hlášek (cs, en, sk, pl, de). |
Ukázka těla
{
"name": "Survival server"
}Ukázka odpovědi
{
"name": "Survival server"
}Možné chyby
- 400
invalidNázev je delší než 60 znaků nebo tělo obsahuje jiná pole. - 404
not_allowedSlužba nepatří vašemu účtu.
GET/services/{id}/outletsStav zásuvek PDU a události
Vrátí stav zásuvek rackhousingu (zapnuto, vypnuto, příkon, proud), zda je smíte ovládat, a posledních 20 událostí PDU. Jen pro rackhousing; bez zásuvek je view null.
Oprávnění: services:read
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
before | string | ne | ID události, od které načíst starší události (stránkování). |
Ukázka odpovědi
{
"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žné chyby
- 400 Služba není rackhousing.
- 404 Služba nenalezena.
POST/services/{id}/outletsZapnout, vypnout nebo restartovat zásuvky
Pošle příkaz zásuvkám PDU, které patří vaší službě rackhousingu. Funguje jen u aktivní služby, u které podpora ovládání povolila; limit 6 za minutu na účet a 5 za minutu na službu.
Oprávnění: services:power
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
outlets | number[] | ano | Čísla zásuvek 1–48 (1 až 48 položek), jen zásuvky této služby. |
command | string | ano | on, off, reboot nebo cancel (zruší čekající příkaz). |
Ukázka těla
{
"outlets": [
3,
4
],
"command": "reboot"
}Ukázka odpovědi
{
"ok": true,
"outlets": [
{
"n": 3,
"state": "on",
"pending": true
},
{
"n": 4,
"state": "on",
"pending": true
}
]
}Možné chyby
- 400
not_yoursNěkterá zásuvka k této službě nepatří. Bez kódu: neplatné tělo požadavku. - 403
not_allowedOvládání zásuvek u služby není zapnuté. - 409
inactiveSlužba není aktivní. Kód no_config: PDU teď není dostupné. - 429 Překročený limit požadavků.
- 502
pdu_failedPDU příkaz neprovedlo.
GET/services/{id}/powerSpotřeba elektřiny rackhousingu
Vrátí příkon zásuvek rackhousingu proti přidělenému příkonu, kWh za tento a minulý měsíc a denní přehled. Jen pro rackhousing, data jsou z posledního měření PDU; bez zásuvek nebo dat je view null.
Oprávnění: services:read
Ukázka odpovědi
{
"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žné chyby
- 400 Služba není rackhousing.
- 404 Služba neexistuje nebo k ní nemáte přístup.
POST/services/{id}/powerZapnout, vypnout nebo restartovat server
Zapne, vypne nebo restartuje VPS nebo herní server (i bota). Jen u aktivní služby, nejvýš 5 požadavků za minutu na službu; stav služby ve fakturaci se nemění.
Oprávnění: services:power
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ano | start, stop nebo restart. |
Ukázka těla
{
"action": "restart"
}Ukázka odpovědi
{
"ok": true
}Možné chyby
- 400 Chybí nebo je neplatná hodnota action.
- 404 Služba nenalezena, nebo u ní ovládání napájení není (např. rackhousing, web).
- 409 Služba není aktivní, běží změna softwaru serveru nebo ještě běží obnova ze zálohy.
- 429 Víc než 5 požadavků za minutu na službu.
- 502 Akci se nepodařilo provést, zkuste to znovu.
GET/services/{id}/rackhousingPřehled rackhousingu
Vrátí umístění v racku, výšku, přidělený příkon, porty se stavem linky a IP adresy služby rackhousingu. Stav portů je z posledního měření, nic se při dotazu nepřepíná.
Oprávnění: services:read
Ukázka odpovědi
{
"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žné chyby
- 400 Služba není rackhousing.
- 404 Služba nenalezena.
GET/services/{id}/sftpPřihlašovací údaje SFTP
Vrátí adresu, port a uživatelské jméno SFTP herního serveru nebo bota; heslo se nevrací. Člen sdílené služby dostane jen owner: false. Funkce zatím není spuštěná a vrací 404.
Oprávnění: services:secrets
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
lang | string | ne | en pro anglické hlášky, jinak česky. |
Ukázka odpovědi
{
"owner": true,
"host": "203.0.113.40",
"port": 2022,
"username": "user.1a2b3c4d",
"canSetPassword": true
}Možné chyby
- 404 SFTP zatím není spuštěné, nebo služba nenalezena.
- 400 Služba není herní server ani bot.
- 502 Údaje se nepodařilo načíst.
POST/services/{id}/sftpNastavit heslo SFTP
Nastaví zadané heslo pro SFTP herního serveru nebo bota; heslo se nikam neukládá a vlastník dostane e-mail. Jen vlastník, limit 5× za hodinu, potvrzení z portálu tu nahrazuje oprávnění services:secrets. Funkce zatím není spuštěná a vrací 404.
Oprávnění: services:secrets
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
lang | string | ne | en pro anglické hlášky, jinak česky. |
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ano | Vždy setPassword. |
password | string | ano | Nové heslo, 10–200 znaků, ne běžné ani uniklé heslo. |
Ukázka těla
{
"action": "setPassword",
"password": "example-Sftp-Pass-2026"
}Ukázka odpovědi
{
"ok": true,
"username": "user.1a2b3c4d"
}Možné chyby
- 400
weak_passwordHeslo nesplňuje pravidla nebo je tělo neplatné. - 403
insufficient_scopeKlíči chybí oprávnění services:secrets. Kód not_owner: nejste vlastník. - 404 SFTP zatím není spuštěné.
- 409
admin_userSFTP pro tuto službu nastaví podpora. Další kódy: email_mismatch, foreign_server, inactive. - 429 Víc než 5 pokusů za hodinu.
- 502
failedHeslo se nepodařilo nastavit. Kód unavailable: služba teď není dostupná.
VPS a rackhousing
GET/services/{id}/backupsSeznam záloh VPS
Vrátí zálohy VPS ze všech úložišť, jen z doby současného vlastníka. Výsledek se 20 s drží v mezipaměti, limit 10 dotazů za minutu; partial: true znamená, že některé úložiště neodpovědělo. Záloha i úložiště mají neprůhledné id (storageId zálohy = id úložiště v storages); id zálohy pošlete do backups/restore.
Oprávnění: services:backups
Ukázka odpovědi
{
"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žné chyby
- 403 Chybí právo Zálohy u sdílené služby.
- 409 Služba není aktivní, nebo právě probíhá obnova ze zálohy.
- 412
NOT_PROVISIONEDVPS ještě není připravená. - 429 Víc než 10 dotazů za minutu.
- 502 Zálohy se nepodařilo načíst.
POST/services/{id}/backups/restoreObnovit VPS ze zálohy
Tvrdě vypne VPS a přepíše její disk obsahem zvolené zálohy; nevratné. U větších disků obnova doběhne na pozadí (pending: true) a VPS půjde zapnout, až skončí. Limit 3 za minutu na službu.
Oprávnění: services:backups
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
id | string | ano | id zálohy ze seznamu backups. |
Ukázka těla
{
"id": "Q2xP7rT0aN4mVb8sKe1wYg"
}Ukázka odpovědi
{
"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žné chyby
- 400 Chybí id.
- 403 Záloha k této službě nepatří nebo už neexistuje.
- 409 Služba není aktivní nebo už běží jiná obnova.
- 429 Víc než 3 pokusy za minutu.
- 502 Obnovu se nepodařilo spustit nebo dokončit.
GET/services/{id}/ddosDostupnost ochrany Anti-DDoS
Řekne, zda je pro IP adresy VPS dostupné nastavení ochrany Anti-DDoS. Zatím vrací vždy available: false; u sdílené služby potřebuje člen právo Síť.
Oprávnění: services:read
Ukázka odpovědi
{
"available": false
}Možné chyby
- 400 Služba není VPS.
- 409 Služba není aktivní.
GET/services/{id}/firewallPravidla firewallu VPS
Vrátí nastavení firewallu VPS a všechna pravidla včetně spravovaných (pole managed), která měnit nejdou. Hodnotu digest pošlete při úpravě pravidla.
Oprávnění: services:firewall
Ukázka odpovědi
{
"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žné chyby
- 403 Chybí právo Firewall u sdílené služby.
- 409 Služba není aktivní nebo akci teď nejde provést.
- 412 VPS ještě není připravená.
- 502 Firewall se nepodařilo načíst.
POST/services/{id}/firewallUpravit pravidla firewallu VPS
Přidá, upraví, zapne nebo vypne, smaže či přesune vlastní pravidlo, přepne výchozí příchozí provoz nebo použije doporučené nastavení. Akce nad pozicí chtějí digest z GET; nejvýš 50 vlastních pravidel, hlášky jsou česky.
Oprávnění: services:firewall
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ano | add, update, toggle, delete, move, setInbound nebo applyBaseline. |
pos | number | ne | Pro update, toggle, delete a move: pozice vlastního pravidla z GET. |
digest | string | ne | Pro update, toggle, delete a move: digest z GET. |
rule | object | ne | Pro add a update: type (in, out), action (ACCEPT, DROP, REJECT), proto ("", tcp, udp, icmp, ipv6-icmp), dport, sport (např. 22, 80,443, 25565:25570; jen TCP a UDP), source, dest (IP nebo rozsah, nejvýš 10), comment (max. 100), enable. |
enable | boolean | ne | Pro toggle: zapnout nebo vypnout pravidlo. |
direction | string | ne | Pro move: up nebo down (jen mezi vlastními pravidly). |
value | string | ne | Pro setInbound: accept nebo drop (výchozí příchozí provoz). |
Ukázka těla
{
"action": "add",
"rule": {
"type": "in",
"action": "ACCEPT",
"proto": "tcp",
"dport": "22",
"source": "198.51.100.0/24",
"comment": "SSH z kanceláře"
}
}Ukázka odpovědi
{
"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žné chyby
- 400 Neplatné tělo nebo pravidlo (port, adresa, protokol), nebo víc než 50 vlastních pravidel.
- 403 Spravované pravidlo nejde měnit, nebo chybí právo Firewall.
- 409 Firewall se mezitím změnil (načtěte digest znovu), služba není aktivní, běží obnova ze zálohy nebo doporučené nastavení nejde použít.
- 502 Změnu se nepodařilo uložit.
GET/services/{id}/historyHistorie využití VPS
Vrátí průběh CPU, RAM, sítě a disku VPS za zvolené období (nejvýš 300 bodů), špičky CPU a přenos za 30 dní a od začátku měsíce. Výsledek se 20 s drží v mezipaměti, limit 30 dotazů za minutu.
Oprávnění: services:read
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
range | string | ne | hour, day, week, month nebo year. Výchozí day. |
lang | string | ne | en pro anglické chybové hlášky, jinak česky. |
Ukázka odpovědi
{
"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žné chyby
- 400 Služba není VPS.
- 409 VPS není aktivní ani pozastavená, nebo ji teď nejde ověřit.
- 429 Víc než 30 dotazů za minutu.
- 502 Statistiky teď nejde načíst.
GET/services/{id}/installStav instalace VPS
Vrátí fázi instalace nebo reinstalace VPS (image, create, start, finish, done) a zda ještě běží. Hodí se pro dotazování po reinstalaci, limit 90 dotazů za minutu.
Oprávnění: services:read
Ukázka odpovědi
{
"status": "ACTIVE",
"phase": "finish",
"active": true,
"source": "reinstall",
"restarting": false,
"running": true,
"reboot": true,
"failed": false
}Možné chyby
- 400 Služba není VPS.
- 404 Služba nenalezena.
- 429 Víc než 90 dotazů za minutu.
GET/services/{id}/isoISO obrazy a připojené ISO
Vrátí katalog ISO, vaše vlastní ISO, limity, aktuálně připojené ISO s volbou bootu a stav poslední akce. Jen vlastník VPS.
Oprávnění: services:settings
Ukázka odpovědi
{
"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žné chyby
- 400 Služba není VPS.
- 403 Nejste vlastník služby.
- 409 Služba není aktivní.
POST/services/{id}/isoPřidat, připojit nebo odpojit ISO
Podle action přidá vlastní ISO z odkazu HTTPS, smaže ho, připojí ISO k VPS, přepne boot nebo ISO vysune. Připojení běží jako akce na pozadí (soubor se teprve stáhne); jen vlastník, nejvýš 2 vlastní ISO do 10 GB.
Oprávnění: services:settings
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ano | add, delete, attach, boot nebo detach. |
name | string | ne | Pro add: název ISO (max. 80 znaků), jinak podle souboru. |
url | string | ne | Pro add: veřejný odkaz https:// na soubor ISO s uvedenou velikostí. |
isoId | string | ne | Pro delete a attach: ID ISO z GET. |
boot | boolean | ne | Pro attach a boot: true = bootovat z ISO, jinak z disku. |
Ukázka těla
{
"action": "attach",
"isoId": "clx9a0iso0001",
"boot": true
}Ukázka odpovědi
{
"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žné chyby
- 400
urlOdkaz nejde použít (ne HTTPS, neveřejná síť, nad 10 GB, bez velikosti, není soubor). Další kódy: limit, attached; bez kódu neplatná action. - 404
not_foundISO nenalezeno. - 409
unavailableISO teď nejsou dostupná. Bez kódu: na VPS běží jiná akce. - 429 Víc než 10 přidaných ISO za den.
- 502 Akce se nepodařila.
GET/services/{id}/private-networkPrivátní sítě v lokalitě VPS
Vrátí vaše privátní sítě v lokalitě VPS, jejich členy, limity a stav této VPS v každé síti. Jen vlastník VPS.
Oprávnění: services:network
Ukázka odpovědi
{
"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žné chyby
- 403 Nejste vlastník služby.
- 409 Služba není aktivní.
- 503
unavailablePrivátní sítě teď nejsou k dispozici.
POST/services/{id}/private-networkZaložit, připojit nebo odpojit síť
Založí privátní síť, připojí nebo odpojí tuto VPS, nebo smaže prázdnou síť. Připojení chce zapnuté doporučené nastavení firewallu; když pendingRestart je true, změna se projeví po restartu VPS.
Oprávnění: services:network
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ano | create, attach, detach nebo delete. |
name | string | ne | Pro create: název sítě, 1–40 znaků (písmena, číslice, mezera, . _ -). |
cidr | string | ne | Pro create: privátní rozsah /16 až /29 začínající adresou sítě, např. 10.20.0.0/24. |
networkId | string | ne | Pro attach, detach a delete: ID sítě z GET. |
address | string|null | ne | Pro attach: adresa VPS v síti; prázdné = první volná. |
cloudInit | boolean | ne | Pro attach: true = adresu zapsat i do cloud-initu VPS. |
Ukázka těla
{
"action": "attach",
"networkId": "clx9p7net0001",
"address": "10.20.0.5"
}Ukázka odpovědi
{
"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žné chyby
- 400
invalid_requestNeplatné tělo. Další kódy: name_invalid, cidr_invalid, address_invalid, address_outside, address_reserved. - 404
network_not_foundSíť nenalezena. Kód not_member: VPS v síti není. - 409
firewall_requiredNejdřív použijte doporučené nastavení firewallu. Další kódy: 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 ještě není připravená. - 502
apply_failedZměnu se nepodařilo dokončit. - 503
unavailablePrivátní sítě teď nejsou k dispozici.
GET/services/{id}/rdnsReverzní DNS adres VPS
Vrátí PTR záznamy IP adres VPS: aktuální, výchozí a vlastní hodnotu, a IPv6 rozsahy služby. U sdílené služby potřebuje člen právo Síť.
Oprávnění: services:network
Ukázka odpovědi
{
"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žné chyby
- 400 Služba není VPS.
- 403 Chybí právo Síť u sdílené služby.
- 409 Služba není aktivní.
POST/services/{id}/rdnsNastavit nebo vrátit PTR záznam
Nastaví vlastní reverzní DNS pro IP adresu přidělenou VPS, nebo s hostname null vrátí výchozí záznam. Nejvýš 32 vlastních záznamů, limit 20 změn za minutu; hlášky jsou česky.
Oprávnění: services:network
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
ip | string | ano | IPv4 nebo IPv6 adresa služby (i z jejího IPv6 rozsahu). |
hostname | string|null | ano | Název hostitele, např. mail.example.com (max. 253 znaků); null nebo prázdné = výchozí záznam. |
Ukázka těla
{
"ip": "203.0.113.25",
"hostname": "mail.example.com"
}Ukázka odpovědi
{
"ok": true,
"ip": "203.0.113.25",
"ptr": "mail.example.com",
"isDefault": false
}Možné chyby
- 400 Neplatný název hostitele, reverzní nebo vyhrazená doména, nebo víc než 32 vlastních záznamů.
- 403 IP adresa nepatří této službě, nebo chybí právo Síť.
- 502 rDNS se teď nepodařilo uložit.
GET/services/{id}/reinstallSystémy pro reinstalaci VPS
Vrátí systémy, které jde na VPS nainstalovat, aktuální systém, čas poslední reinstalace a stav poslední akce. Jen vlastník služby.
Oprávnění: services:read
Ukázka odpovědi
{
"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žné chyby
- 400 Služba není VPS.
- 403 Nejste vlastník služby.
- 409 Služba není aktivní.
POST/services/{id}/reinstallPřeinstalovat VPS
Smaže disk VPS a nainstaluje zvolený systém; běží na pozadí, průběh sledujte přes install. Nové root heslo je jen v této odpovědi. Jen vlastník, nejvýš 3× za den; potvrzení z portálu tu nahrazuje oprávnění services:secrets.
Oprávnění: services:secrets
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
os | string | ano | Klíč systému z GET, např. ubuntu-2404 nebo debian-13. |
sshKeys | string | ne | Veřejné SSH klíče, jeden na řádek, nejvýš 10 (ssh-ed25519, ssh-rsa, ecdsa-…). |
Ukázka těla
{
"os": "debian-13",
"sshKeys": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExampleKeyExampleKeyExampleKeyExample user@laptop"
}Ukázka odpovědi
{
"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žné chyby
- 400 Chybí nebo je neplatný systém, neplatný SSH klíč nebo víc než 10 klíčů.
- 403
insufficient_scopeKlíči chybí oprávnění services:secrets, nebo nejste vlastník. - 409 Na VPS běží jiná akce, je v záchranném režimu, uzel je vytížený nebo reinstalace není dostupná.
- 429 Reinstalace už proběhla 3× za posledních 24 hodin.
- 502 Reinstalaci se nepodařilo spustit.
POST/services/{id}/reveal-secretZobrazit uložené root heslo VPS
Vrátí uložené root heslo VPS z doby založení, reinstalace nebo poslední změny. Každé zobrazení se zapíše do auditu a vlastník dostane e-mail; limit 5× za 10 minut, potvrzení z portálu tu nahrazuje oprávnění services:secrets.
Oprávnění: services:secrets
Ukázka odpovědi
{
"password": "example-Root-Pass-789"
}Možné chyby
- 403
insufficient_scopeKlíči chybí oprávnění services:secrets. Bez kódu: chybí právo u sdílené služby. - 404 Služba nenalezena nebo u ní není uložené heslo.
- 429 Víc než 5 zobrazení za 10 minut.
- 503 Heslo teď nejde zobrazit, zkuste to znovu.
GET/services/{id}/root-passwordLze nastavit nové root heslo?
Zjistí, zda jde root heslo VPS teď změnit přes qemu-guest-agent, a když ne, vrátí důvod. Výsledek se 60 s drží v mezipaměti.
Oprávnění: services:secrets
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
lang | string | ne | en pro anglické hlášky, jinak česky. |
Ukázka odpovědi
{
"available": false,
"reason": "stopped",
"message": "VPS je vypnutá. Heslo jde nastavit jen u běžící VPS."
}Možné chyby
- 400 Služba není VPS.
- 403 Chybí právo Tajné údaje u sdílené služby.
- 409 Služba není aktivní.
POST/services/{id}/root-passwordNastavit nové root heslo VPS
Vygeneruje nové root heslo, nastaví ho v běžící VPS přes qemu-guest-agent a vrátí ho jen v této odpovědi; vlastník dostane e-mail. Limit 3× za hodinu na službu a 10× za den na účet; potvrzení z portálu tu nahrazuje oprávnění services:secrets.
Oprávnění: services:secrets
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
lang | string | ne | en pro anglické hlášky, jinak česky. |
Ukázka odpovědi
{
"password": "example-Root-Pass-456"
}Možné chyby
- 403
insufficient_scopeKlíči chybí oprávnění services:secrets. Bez kódu: chybí právo u sdílené služby. - 409 Heslo teď nastavit nejde; pole reason: agent_down, stopped, rescue, command_disabled, not_configured, no_permission nebo busy.
- 429 Překročený limit 3× za hodinu nebo 10× za den.
- 502 Agent heslo nenastavil, staré heslo platí dál (reason failed nebo unavailable).
Herní servery
GET/services/{id}/alertsNastavení upozornění na pád a výpadek
Vrátí nastavení upozornění herního serveru nebo Discord bota (e-mail, Discord webhook, události) a historii posledních upozornění. Adresa webhooku se nikdy nevrací, jen její konec. Jen pro vlastníka služby.
Oprávnění: services:settings
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
lang | string | ne | Jazyk hlášek: en, jinak cs. |
Ukázka odpovědi
{
"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žné chyby
- 403 Jen pro vlastníka služby.
POST/services/{id}/alertsUložit, otestovat nebo vypnout upozornění
Mění nastavení upozornění podle pole action. Nový Discord webhook se uloží, jen když na něj projde zkušební zpráva. Tělo nesmí obsahovat jiná pole. Jen pro vlastníka služby.
Oprávnění: services:settings
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
lang | string | ne | Jazyk hlášek: en, jinak cs. |
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ano | save, test (zkušební zpráva na uložený webhook, 1× za minutu a 5× za hodinu), removeDiscord nebo disable. |
enabled | boolean | ne | save: zapnout hlídání. |
email | boolean | ne | save: posílat upozornění e-mailem vlastníkovi. |
events | object | ne | save: které události hlásit, klíče crash, down, recovered, cleanExit, node (boolean). |
includeLog | boolean | ne | save: přiložit konec logu. |
webhook | string | ne | save: nová adresa Discord webhooku (https://discord.com/api/webhooks/…), nejvýš 300 znaků. |
Ukázka těla
{
"action": "save",
"enabled": true,
"email": true,
"events": {
"crash": true,
"down": true,
"recovered": true,
"cleanExit": false,
"node": true
},
"includeLog": true
}Ukázka odpovědi
{
"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žné chyby
- 400
bad-requestNeplatné tělo nebo pole navíc. - 400
webhookAdresa není Discord webhook. - 400
test-failedZkušební zprávu se nepodařilo doručit. - 400
no-webhooktest: není uložený žádný webhook. - 400
no-channelZapnuté hlídání potřebuje e-mail nebo webhook. - 429
rateZkušební zprávu jde poslat jednou za minutu a 5× za hodinu. - 500
failedNastavení se nepodařilo uložit. - 403 Jen pro vlastníka služby.
GET/services/{id}/gameSíť, databáze, zálohy nebo spuštění serveru
Vrátí jednu část nastavení herního serveru nebo Discord bota podle parametru section. Hesla k databázím a tajné hodnoty proměnných dostane jen vlastník a člen s právem Tajné údaje.
Oprávnění: services:settings
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
section | string | ano | network (porty a SFTP), databases (databáze), backups (zálohy a doplněk záloh) nebo startup (příkaz a proměnné spuštění). |
locale | string | ne | Jazyk hlášek při odmítnutí přístupu: cs, en, sk, pl nebo de. |
Ukázka odpovědi
{
"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žné chyby
- 400 Chybí nebo je neznámá sekce (section).
- 403 Chybí oprávnění k dané sekci (Síť, Databáze, Zálohy nebo Nastavení).
- 412 Server zatím není v herním panelu dostupný.
POST/services/{id}/gameDatabáze, zálohy, proměnné, porty a reinstalace
Provede jednu akci na herním serveru nebo Discord botovi podle pole action. Obnova a smazání zálohy, smazání databáze a reinstalace jsou nevratné; reinstalace zastaví server a přepíše soubory.
Oprávnění: services:settings
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ano | createDatabase, rotateDatabasePassword, deleteDatabase, createBackup, restoreBackup, deleteBackup, lockBackup (zamkne nebo odemkne), setVariable, reinstall, addAllocation nebo removeAllocation. |
name | string | ne | createDatabase: název databáze, 1–48 znaků (písmena, číslice, podtržítko), povinné. createBackup: nepovinný název zálohy, nejvýš 191 znaků. |
remote | string | ne | createDatabase: odkud se k databázi smí připojit (IP adresa nebo %). Výchozí % = odkudkoli. |
databaseId | string | ne | rotateDatabasePassword, deleteDatabase: id databáze z GET ?section=databases. |
uuid | string (uuid) | ne | restoreBackup, deleteBackup, lockBackup: uuid zálohy z GET ?section=backups. |
truncate | boolean | ne | restoreBackup: před obnovou smazat všechny soubory serveru. Výchozí false. |
key | string | ne | setVariable: název proměnné spuštění (velká písmena, číslice, podtržítko). |
value | string | ne | setVariable: nová hodnota, nejvýš 4096 znaků, bez řídicích znaků. |
allocationId | integer | ne | removeAllocation: id portu z GET ?section=network. Hlavní port odebrat nejde. |
locale | string | ne | Jazyk hlášek: cs, en, sk, pl nebo de. Výchozí cs. |
Ukázka těla
{
"action": "setVariable",
"key": "MAX_PLAYERS",
"value": "32"
}Ukázka odpovědi
{
"ok": true,
"value": "32"
}Možné chyby
- 400 Neplatné tělo požadavku nebo název databáze.
- 400
CONTROL_CHARSHodnota proměnné obsahuje řídicí znaky. - 403 Chybí oprávnění k akci; reinstalace navíc chce Soubory a Napájení.
- 403
SECRETS_REQUIREDTajnou proměnnou smí měnit jen vlastník nebo člen s právem Tajné údaje. - 403
FILES_REQUIREDZdroj kódu Discord bota jde měnit jen s oprávněním Soubory. - 404 Záloha neexistuje.
- 409
MANAGED_VARIABLEProměnnou spravuje StormHost, měnit ji nejde. - 409
MC_MANAGED_VARIABLEU Minecraftu proměnnou nastavuje záložka Software. - 409
PROTECTED_ARGUMENTVolné argumenty nesmí přepsat chráněné parametry (např. RCON). - 409
JOB_RUNNINGNa Minecraft serveru právě běží změna softwaru. - 409
PORT_LIMITBalíček už nemá volný port. - 409
NO_FREE_PORTNa uzlu teď není volný port. - 412 Server zatím není v herním panelu dostupný.
GET/services/{id}/game/backup-downloadStáhnout zálohu herního serveru
Stáhne archiv zálohy (.tar.gz) herního serveru nebo Discord bota. Archiv obsahuje všechny soubory včetně tajných údajů, proto člen potřebuje i oprávnění Soubory.
Oprávnění: services:backups
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
uuid | string (uuid) | ano | uuid zálohy z GET …/game?section=backups. |
locale | string | ne | Jazyk hlášek při odmítnutí přístupu: cs, en, sk, pl nebo de. |
Ukázka odpovědi
Binární soubor (Content-Type: application/gzip, Content-Disposition: attachment; filename="backup-….tar.gz")Možné chyby
- 400 Chybí nebo je neplatné uuid.
- 403 Chybí oprávnění Zálohy nebo Soubory.
- 404 Záloha neexistuje.
- 502 Zálohu se nepodařilo stáhnout z herního panelu.
- 429 Nejvýš 10 stažení za minutu.
GET/services/{id}/schedulesPlány herního serveru nebo bota
Vrátí naplánované úlohy (restart, záloha, příkaz, zapnutí nebo vypnutí) herního serveru nebo Discord bota, jejich příští a poslední běh, limity a dostupné sloty záloh.
Oprávnění: services:settings
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
locale | string | ne | Jazyk textů v odpovědi: en, jinak cs. |
Ukázka odpovědi
{
"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žné chyby
- 403 Chybí oprávnění Nastavení.
- 412 Server zatím není v herním panelu dostupný.
POST/services/{id}/schedulesZaložit, upravit, spustit nebo smazat plán
Spravuje plány podle pole action. Na serveru je nejvýš 10 plánů; příkaz nejdřív po 15 minutách, restart a zapnutí nebo vypnutí po hodině, záloha jednou denně a jen jeden zálohový plán.
Oprávnění: services:settings
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ano | create, update, delete, toggle (zapnout nebo vypnout), run (spustit hned, nejvýš 1× za minutu) nebo unstick (uvolnit zaseknutý plán). |
scheduleId | integer | ne | Všechny akce kromě create: id plánu z GET. |
preset | object | ne | create, update: kind restart (repeat, countdown {m5, m1, s10}, message do 100 znaků), backup (repeat), command (repeat, command do 256 znaků, onlyWhenOnline) nebo power (repeat, signal start|stop). |
preset.repeat | object | ne | Opakování: {kind: daily, time: "HH:MM"}, {kind: weekly, days: [0–6, 0 = neděle], time}, {kind: hours, every: 1|2|3|4|6|8|12, minute: 0–59} nebo {kind: cron, expr}. |
name | string | ne | create, update: název plánu, nejvýš 60 znaků. |
ack | boolean | ne | create, update: u zálohového plánu musí být true (potvrzení, že nová záloha nahradí starší). |
active | boolean | ne | toggle: true zapne, false vypne. |
locale | string | ne | Jazyk hlášek: cs, en, sk, pl nebo de. Výchozí cs. |
Ukázka těla
{
"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."
}
}Ukázka odpovědi
{
"ok": true,
"id": 42
}Možné chyby
- 400
INVALIDPlán není vyplněný správně. - 400
GAPPlán by se spouštěl moc často. - 400
BACKUP_ACKU zálohového plánu chybí ack: true. - 400
COMMAND_FORBIDDENPříkaz by server vypnul nebo restartoval; použijte předvolbu restart nebo power. - 403
FORBIDDENK plánu chybí oprávnění (podle úloh Konzole, Napájení nebo Zálohy). - 404
NOT_FOUNDPlán neexistuje. - 409
LIMITServer už má 10 plánů. - 409
BACKUP_SLOTSZálohy podle plánu potřebují doplněk Záloha. - 409
BACKUP_EXISTSZálohový plán už existuje. - 409
NOT_EDITABLEPlán vznikl mimo portál; jde jen vypnout nebo smazat. - 409
PANEL_TZPlány na konkrétní čas teď nejdou nastavit, zatím jen opakování po hodinách. - 409
SUSPENDEDServer je pozastavený. - 409
JOB_RUNNINGNa Minecraft serveru běží změna softwaru. - 429
RATEPlán jde spustit nejvýš jednou za minutu. - 502
PARTIALPlán se neuložil celý a zůstal vypnutý.
GET/services/{id}/vip-shopVIP obchod Minecraft serveru
Vrátí VIP obchod Minecraft serveru: údaje obchodu, položky s rozpadem ceny, aktuální sazby a souhrn prodejů po měsících. Jen pro vlastníka služby.
Oprávnění: services:settings
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
lang | string | ne | Jazyk hlášek: cs, en, sk, pl nebo de. Výchozí cs. |
Ukázka odpovědi
{
"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žné chyby
- 400
not_minecraftVIP obchod je jen u Minecraft serverů. - 404
disabledVIP obchod teď není pro účet dostupný. - 503
disabledVIP obchod ještě není připravený. - 500
failedAkce se nepodařila. - 403 Jen pro vlastníka služby.
POST/services/{id}/vip-shopUpravit obchod a položky VIP obchodu
Založí nebo upraví VIP obchod, pozastaví ho a spravuje položky podle pole action. Údaje obchodu se posílají vždy celé; při založení a po změně podmínek je nutné terms: true. Jen pro vlastníka služby.
Oprávnění: services:settings
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
lang | string | ne | Jazyk hlášek: cs, en, sk, pl nebo de. Výchozí cs. |
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ano | saveShop, setStatus, saveItem nebo deleteItem. |
slug | string | ne | saveShop: adresa obchodu, 3–32 znaků a–z, 0–9 a pomlčka. |
title | string | ne | saveShop: název obchodu (2–60 znaků). saveItem: název položky (2–60 znaků). |
sellerName | string | ne | saveShop: jméno nebo firma prodávajícího (2–120 znaků). |
sellerIco | string | ne | saveShop: IČO prodávajícího (nepovinné). |
sellerEmail | string | ne | saveShop: kontaktní e-mail prodávajícího. |
sellerAddress | string | ne | saveShop: adresa prodávajícího, 5–200 znaků (nepovinné). |
playerTerms | string | ne | saveShop: vlastní podmínky pro hráče, nejvýš 20 000 znaků (nepovinné). |
terms | boolean | ne | saveShop: souhlas s podmínkami provozovatele obchodu. |
status | string | ne | setStatus: active nebo paused. |
id | string | ne | saveItem: id položky pro úpravu (bez id se založí nová, nejvýš 50). deleteItem: id položky (povinné). |
description | string | ne | saveItem: popis, nejvýš 500 znaků. |
priceCzk | integer | ne | saveItem: cena v Kč, 10–10 000 (povinné). |
category | string | ne | saveItem: kategorie, nejvýš 40 znaků. |
durationDays | integer | null | ne | saveItem: platnost ve dnech 1–3650, null = trvale. |
commandsBuy | string[] | ne | saveItem: 1–10 příkazů po nákupu, každý do 300 znaků; jediná proměnná {player}; příkazy jako stop, restart, op zakázané. |
commandsExpire | string[] | ne | saveItem: nejvýš 10 příkazů po vypršení platnosti. |
active | boolean | ne | saveItem: nabízet položku v obchodě. Výchozí true. |
sortOrder | integer | ne | saveItem: pořadí 0–10 000. |
Ukázka těla
{
"action": "saveItem",
"title": "VIP na 30 dní",
"priceCzk": 99,
"category": "Ranky",
"durationDays": 30,
"commandsBuy": [
"lp user {player} parent addtemp vip 30d"
],
"commandsExpire": [],
"active": true
}Ukázka odpovědi
{
"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žné chyby
- 400
badNeplatný požadavek nebo neznámá akce. - 400 Chybné pole; kód a pole (field) říkají které, např. slug, title, seller_email, terms, item_price, command_denied.
- 404
no_shopSlužba ještě nemá obchod. - 404
item_not_foundPoložka neexistuje. - 409
slug_takenAdresa obchodu je obsazená. - 409
suspendedObchod je pozastavený provozovatelem. - 409
items_maxObchod už má 50 položek. - 400
not_minecraftVIP obchod je jen u Minecraft serverů. - 500
failedAkce se nepodařila. - 403 Jen pro vlastníka služby.
GET/services/{id}/vip-shop/salesProdeje VIP obchodu a doručení
Vrátí posledních 50 prodejů VIP obchodu se stavem doručení příkazů, provizí, poplatkem a připsaným kreditem. Částky jsou v haléřích. Funguje i u neaktivní služby. Jen pro vlastníka.
Oprávnění: services:settings
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
lang | string | ne | Jazyk hlášek: cs, en, sk, pl nebo de. Výchozí cs. |
before | string (ISO 8601) | ne | Starší prodeje než tento čas (stránkování). |
Ukázka odpovědi
{
"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žné chyby
- 404
no_shopSlužba ještě nemá obchod. - 400
not_minecraftVIP obchod je jen u Minecraft serverů. - 500
failedAkce se nepodařila. - 403 Jen pro vlastníka služby.
POST/services/{id}/vip-shop/salesZopakovat doručení příkazů za prodej
Hned zkusí znovu poslat příkazy jednoho doručení na server. Nejvýš 10× za minutu na službu. Jen pro vlastníka.
Oprávnění: services:settings
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
lang | string | ne | Jazyk hlášek: cs, en, sk, pl nebo de. Výchozí cs. |
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ano | retry. |
deliveryId | string | ano | id doručení z GET (deliveries[].id). |
Ukázka těla
{
"action": "retry",
"deliveryId": "dlv_77aa"
}Ukázka odpovědi
{
"ok": true,
"state": "done",
"code": null
}Možné chyby
- 400
badNeplatný požadavek. - 404
no_shopSlužba ještě nemá obchod. - 404
delivery_not_foundDoručení neexistuje. - 409
delivery_stateDoručení teď znovu poslat nejde. - 429
rateNejvýš 10 pokusů za minutu. - 400
not_minecraftVIP obchod je jen u Minecraft serverů. - 500
failedAkce se nepodařila. - 403 Jen pro vlastníka služby.
Minecraft
GET/services/{id}/minecraft/datapacksDatapacky aktivního světa
Bez parametrů vrátí datapacky aktivního světa. S `q` hledá datapacky na Modrinthu pro verzi serveru, s `project` vrátí verze jednoho datapacku.
Oprávnění: services:files
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
q | string | ne | Hledaný text (nejvýš 80 znaků). |
offset | integer | ne | Posun ve výsledcích hledání, výchozí 0. |
project | string | ne | ID nebo slug projektu na Modrinthu, vrátí jeho verze se souborem. |
Ukázka odpovědi
{
"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žné chyby
- 409
NOT_IMPORTEDSoftware serveru zatím není nastavený, nejdřív použijte minecraft/software. - 412
NO_PANELServer teď není dostupný v herním panelu. - 429 Příliš mnoho požadavků, zkuste to za chvíli.
POST/services/{id}/minecraft/datapacksInstalace, odebrání a načtení datapacků
`install` stáhne datapack z Modrinthu do aktivního světa, na běžícím serveru se projeví až po `reload`. `remove` datapack vypne a smaže, `reload` spustí příkaz `reload` (jen běžící server, u sdílené služby s oprávněním Konzole). Nahrání vlastního ZIPu přes API nejde.
Oprávnění: services:files
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ano | `install`, `remove` nebo `reload`. |
projectId | string | ne | Jen `install`: ID projektu na Modrinthu (1–64 znaků). |
versionId | string | ne | Jen `install`: ID verze z `GET ?project=` (1–16 znaků). |
name | string | ne | Jen `remove`: název souboru nebo složky datapacku z výpisu (nejvýš 120 znaků). |
Ukázka těla
{
"action": "install",
"projectId": "AbCdEf12",
"versionId": "XyZ98765"
}Ukázka odpovědi
{
"ok": true,
"file": "example-pack.zip",
"replaced": null,
"needsReload": true,
"packFormat": "61",
"compat": "ok"
}Možné chyby
- 400
INVALIDNeplatné tělo požadavku. - 403
FORBIDDEN`reload` bez oprávnění Konzole u sdílené služby. - 404
NO_SUCH_PACKDatapack s tímto názvem ve světě není. - 409
NAME_TAKENDatapack se stejným názvem už ve světě je, nejdřív ho odeberte. - 409
TOO_MANYVe světě je už 100 datapacků. - 409
NOT_RUNNINGServer neběží, zapněte ho a zkuste to znovu. - 409
JOBNa serveru běží jiná změna nebo instalace doplňku. - 422
INCOMPATIBLEVerze datapacku není pro verzi serveru. - 422
NO_PACK_MCMETASoubor není platný datapack (chybí pack.mcmeta). - 429
RATE_LIMITEDLimit: instalace a odebrání 20 za 10 minut, `reload` 10 za 10 minut.
GET/services/{id}/minecraft/dnsVlastní adresa serveru
Vrátí stav vlastní adresy (záznamy A/AAAA a SRV), výchozí port serveru a přímou adresu. S `check` jen ověří, jestli je název volný. Když se změnila IP nebo port serveru, záznamy se při čtení samy srovnají (`resynced`).
Oprávnění: services:network
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
check | string | ne | Název k ověření dostupnosti, vrátí `{ name, fqdn, available, code?, error? }`. |
locale | string | ne | Jazyk chybových hlášek kontroly přístupu: cs, en, sk, pl, de. |
Ukázka odpovědi
{
"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žné chyby
- 400
NOT_MINECRAFTSlužba není Minecraft server. - 503
PANELSpráva serveru je dočasně nedostupná. - 500
SETUP_FAILEDNepodařilo se dokončit, zkuste to později.
POST/services/{id}/minecraft/dnsZaložení, změna a odebrání adresy
Založí adresu `<name>.<zone>`, přejmenuje ji, odebere, nebo znovu zapíše záznamy podle současné IP a portu (`resync`). Služba musí být aktivní; adresu jde měnit nejvýš 5× za hodinu a 20× denně.
Oprávnění: services:network
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
locale | string | ne | Jazyk chybových hlášek kontroly přístupu: cs, en, sk, pl, de. |
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ano | `create`, `rename`, `delete` nebo `resync`. |
name | string | ne | Pro `create` a `rename`: 3–32 znaků, malá písmena a–z, číslice a pomlčky (ne na začátku ani na konci). |
Ukázka těla
{
"action": "create",
"name": "mujserver"
}Ukázka odpovědi
{
"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žné chyby
- 400
INVALIDNeplatné tělo požadavku. - 400
INVALID_NAMENázev nesplňuje pravidla. - 400
RESERVEDNázev je vyhrazený. - 400
SAME_NAMEServer už tuhle adresu má. - 404
NONEServer žádnou vlastní adresu nemá. - 409
TAKENAdresa je obsazená. - 409
EXISTSServer už vlastní adresu má, použijte `rename`. - 409
NO_ALLOCATIONServer nemá výchozí port. - 409
NOT_PUBLICVýchozí adresa serveru není veřejná. - 412
NO_PANEL_LINKServer teď není dostupný v herním panelu. - 429
RATE_LIMITEDPřekročený limit změn, zkuste to později. - 503
DISABLEDVlastní adresy teď nejsou dostupné. - 502
DNSZápis DNS záznamů selhal.
GET/services/{id}/minecraft/eulaStav přijetí EULA
Vrátí, jestli je v eula.txt přijatá licence Minecraftu. `accepted: null` znamená, že soubor zatím neexistuje.
Oprávnění: services:settings
Ukázka odpovědi
{
"accepted": false,
"acceptedAt": null,
"url": "https://aka.ms/MinecraftEULA"
}Možné chyby
- 412 Server teď není dostupný v herním panelu (hláška `panel.unavailable` v poli `msg`).
- 429 Příliš mnoho požadavků, zkuste to za chvíli.
POST/services/{id}/minecraft/eulaPřijetí EULA
Zapíše do eula.txt `eula=true`. Se `start: true` zároveň zapne vypnutý server (u sdílené služby s oprávněním Napájení). Limit 10 za 10 minut.
Oprávnění: services:settings
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
accept | boolean | ano | Musí být `true`. |
start | boolean | ne | Po přijetí zapnout vypnutý server. |
Ukázka těla
{
"accept": true,
"start": true
}Ukázka odpovědi
{
"ok": true,
"accepted": true,
"acceptedAt": "2026-11-07T10:15:00.000Z",
"started": true,
"startError": null,
"startErrorMsg": null
}Možné chyby
- 400 Chybí `accept: true`.
- 403 `start` bez oprávnění Napájení.
- 409 Na serveru právě běží změna (job).
- 412 Server teď není dostupný v herním panelu (hláška `panel.unavailable` v poli `msg`).
GET/services/{id}/minecraft/gamerulesPravidla hry aktivního světa
Vrátí pravidla hry platná pro verzi serveru s aktuální a výchozí hodnotou. U sdílené služby je potřeba oprávnění Konzole.
Oprávnění: services:settings
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
lang | string | ne | Jazyk názvů pravidel: `cs` (výchozí) nebo `en`. |
Ukázka odpovědi
{
"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žné chyby
- 409
NOT_IMPORTEDSoftware serveru zatím není nastavený, nejdřív použijte minecraft/software. - 412
NO_PANELServer teď není dostupný v herním panelu. - 413
FILE_TOO_LARGESoubor s pravidly je příliš velký. - 422
FILE_CORRUPTSoubor s pravidly je poškozený. - 429 Příliš mnoho požadavků, zkuste to za chvíli.
POST/services/{id}/minecraft/gamerulesZměna pravidel hry
Nastaví pravidla příkazem `gamerule` na běžícím serveru, projeví se hned bez restartu. Najednou nejvýš 30 pravidel, limit 30 požadavků za 10 minut.
Oprávnění: services:settings
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
rules | object | ano | Mapa `id` pravidla (z GET) na hodnotu `boolean` nebo celé číslo. |
allDimensions | boolean | ne | Na Paperu a odvozených serverech nastavit ve všech dimenzích, výchozí `true`. |
Ukázka těla
{
"rules": {
"minecraft:keep_inventory": true,
"minecraft:spawn_radius": 0
},
"allDimensions": true
}Ukázka odpovědi
{
"ok": true,
"world": "world",
"results": [
{
"id": "minecraft:keep_inventory",
"status": "set"
},
{
"id": "minecraft:spawn_radius",
"status": "unchanged"
}
]
}Možné chyby
- 400
INVALIDNeplatné tělo požadavku. - 400
NO_CHANGESV `rules` nic není. - 400
UNKNOWN_RULEPravidlo ve verzi serveru neexistuje (pole `rule`). - 400
INVALID_VALUENeplatná hodnota pravidla (pole `rule`). - 409
NOT_RUNNINGServer neběží, zapněte ho a zkuste to znovu. - 409
NOT_IMPORTEDSoftware serveru zatím není nastavený, nejdřív použijte minecraft/software. - 409
JOBNa serveru běží jiná změna nebo instalace doplňku. - 429
CONSOLE_BUSYKonzole serveru je zaneprázdněná. - 412
NO_PANELServer teď není dostupný v herním panelu.
GET/services/{id}/minecraft/jobStav běžící změny serveru
Vrátí poslední job (změna softwaru, reinstalace, modpack, svět) s krokem, záznamem a průběhem. Po spuštění jobu ho dotazujte zhruba každé 2 s, dokud `status` není `done` nebo `failed`; zaseknutý job se označí jako `failed` s `interrupted: true`.
Oprávnění: services:settings
Ukázka odpovědi
{
"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žné chyby
- 429 Příliš mnoho požadavků, zkuste to za chvíli.
POST/services/{id}/minecraft/jobSkrytí dokončeného jobu
Skryje dokončený nebo selhaný job, aby ho GET už nevracel. Běžící job skrýt nejde.
Oprávnění: services:settings
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ano | Vždy `dismiss`. |
jobId | string | ano | `id` jobu z GET (8–40 malých písmen a číslic). |
Ukázka těla
{
"action": "dismiss",
"jobId": "k3j9x2m1q8"
}Ukázka odpovědi
{
"ok": true
}Možné chyby
- 400 Neplatné tělo požadavku (hláška v poli `msg`).
- 409 Job ještě běží nebo už to není poslední job.
GET/services/{id}/minecraft/modpacksModpacky: stav, hledání a náhled
Bez parametrů vrátí nainstalovaný modpack, odložené soubory a frontu. `search` hledá modpacky na Modrinthu, `project` vrátí projekt s verzemi, `preview` ukáže, co by instalace udělala (nic nemění), `serverFiles=1` vypíše soubory .mrpack v kořeni serveru.
Oprávnění: services:files
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
search | string | ne | Hledaný text na Modrinthu. |
mc | string | ne | S `search`: verze Minecraftu, např. `1.21.1`. |
loader | string | ne | S `search`: `fabric`, `forge` nebo `neoforge`. |
sort | string | ne | S `search`: `downloads`, `relevance` nebo `newest`. |
offset | integer | ne | S `search`: posun ve výsledcích. |
project | string | ne | ID nebo slug projektu; s `preview=modrinth` jen ID (8 znaků). |
preview | string | ne | `modrinth` (s `project` a `version`) nebo `upload` (s `upload`). |
version | string | ne | S `preview=modrinth`: ID verze (8 znaků). |
upload | string | ne | S `preview=upload`: `id` z akce `stageServerFile` (24 hex znaků). |
mode | string | ne | S `preview`: `all` (výchozí), `keep-world` nebo `wipe`. |
serverFiles | string | ne | `1` vypíše soubory .mrpack v kořeni serveru. |
Ukázka odpovědi
{
"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žné chyby
- 400 Neplatný projekt, verze, nahraný soubor nebo režim (hláška v poli `msg`).
- 429 Příliš mnoho požadavků, zkuste to za chvíli.
POST/services/{id}/minecraft/modpacksInstalace a návrat modpacku
`install` a `rollback` spustí job na pozadí (odpověď 202), průběh sledujte přes minecraft/job. Server se při instalaci vypne, `all` staré soubory odloží (jde se vrátit přes `rollback`), `wipe` vše smaže (jen vlastník). Limit 3 za hodinu na službu (společný se změnou softwaru) a 10 denně na zákazníka; vlastní .mrpack nahrajte přes SFTP a připravte akcí `stageServerFile`.
Oprávnění: services:files
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ano | `install`, `rollback`, `deleteAside` nebo `stageServerFile`. |
origin | string | ne | `install`: `modrinth` nebo `mrpack` (vlastní soubor). |
projectId | string | ne | `install` z Modrinthu: ID projektu (8 znaků). |
versionId | string | ne | `install` z Modrinthu: ID verze (8 znaků). |
uploadId | string | ne | `install` s `mrpack`: `id` z `stageServerFile` (24 hex znaků). |
mode | string | ne | `install`: `all` (nahradit vše, staré odložit), `keep-world` (ponechat svět a server.properties) nebo `wipe` (smazat vše, jen vlastník). |
replaceBackup | boolean | ne | Při plných slotech záloh přepsat nejstarší zálohu (vlastník nebo oprávnění Zálohy). |
acceptEula | boolean | ne | Přijmout licenci Minecraftu (EULA) v rámci instalace. |
confirmDowngrade | boolean | ne | Potvrdit instalaci se starší verzí Minecraftu, než má svět. |
name | string | ne | `stageServerFile`: název souboru .mrpack v kořeni serveru (do 1 GB). |
Ukázka těla
{
"action": "install",
"origin": "modrinth",
"projectId": "AbCdEf12",
"versionId": "XyZ98765",
"mode": "all",
"acceptEula": true
}Ukázka odpovědi
{
"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žné chyby
- 400 Neplatné tělo požadavku (hláška v poli `msg`).
- 403 Chybí oprávnění Nastavení, Soubory a Napájení (hláška v poli `msg`).
- 403
WIPE_OWNERRežim `wipe` smí jen vlastník. - 403
BACKUP_PERMISSION`replaceBackup` bez oprávnění Zálohy. - 409
JOB_RUNNINGNa serveru už běží jiný job. - 409
ADDON_RUNNINGProbíhá instalace pluginu nebo módu. - 409
QUEUE_FULLFronta instalací je plná, zkuste to později. - 409
DISKNa disku serveru je málo místa (`details.freeMb`, `details.needMb`). - 409
DOWNGRADEModpack má starší verzi Minecraftu, potvrďte `confirmDowngrade`. - 422
LOADERLoader modpacku teď nejde nainstalovat. - 429 Překročený limit instalací (hodinový na službu nebo denní na zákazníka).
GET/services/{id}/minecraft/player-statsGraf počtu hráčů
Vrátí body grafu online hráčů za zvolené období s průměrem, maximem a rekordem. Když je sbírání vypnuté, `enabled` je `false` a `points` je prázdné.
Oprávnění: services:settings
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
range | string | ne | `24h` (výchozí, body po 5 min), `7d` (po hodině) nebo `30d` (po 4 h). |
Ukázka odpovědi
{
"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žné chyby
- 503
unavailableGraf hráčů zatím není k dispozici. - 502
ERRORGraf se nepodařilo načíst. - 429 Příliš mnoho požadavků, zkuste to za chvíli.
POST/services/{id}/minecraft/player-statsZapnutí a vypnutí grafu hráčů
Zapne nebo vypne sbírání počtu hráčů. Vypnutí smaže všechna nasbíraná data služby (`deleted`). Limit 10 za 10 minut.
Oprávnění: services:settings
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
enabled | boolean | ano | `true` zapnout, `false` vypnout a smazat data. |
Ukázka těla
{
"enabled": false
}Ukázka odpovědi
{
"ok": true,
"enabled": false,
"deleted": 2016
}Možné chyby
- 400
INVALIDNeplatné tělo požadavku. - 503
unavailableGraf hráčů zatím není k dispozici. - 429 Příliš mnoho požadavků, zkuste to za chvíli.
GET/services/{id}/minecraft/playersHráči, whitelist, operátoři a bany
Vrátí whitelist, operátory, bany a bany IP ze souborů serveru, nastavení ze server.properties a online hráče (jen s oprávněním Konzole). S `lookup` ověří nick u Mojangu.
Oprávnění: services:settings
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
lookup | string | ne | Nick hráče k ověření, vrátí `{ lookup: { query, found, name, uuid } }` (oprávnění Konzole). |
Ukázka odpovědi
{
"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žné chyby
- 400
INVALID_NICKNeplatný nick v `lookup`. - 403
FORBIDDEN`lookup` bez oprávnění Konzole. - 503
MOJANG_BUSYOvěření u Mojangu teď nejde, zkuste to za minutu. - 412 Server teď není dostupný v herním panelu (hláška `panel.unavailable` v poli `msg`).
- 429 Příliš mnoho požadavků, zkuste to za chvíli.
POST/services/{id}/minecraft/playersWhitelist, operátoři, bany a kick
Na běžícím serveru provede změnu příkazem, na vypnutém úpravou souboru (`mode`). U sdílené služby je potřeba oprávnění Konzole; limit 30 změn za 10 minut na službu a 60 na zákazníka.
Oprávnění: services:settings
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ano | `whitelist-add`, `whitelist-remove`, `whitelist-toggle`, `op`, `deop`, `ban`, `pardon`, `pardon-ip`, `kick`, `bedrock-whitelist-add` nebo `bedrock-whitelist-remove`. |
nick | string | ne | Nick hráče (nejvýš 40 znaků); u akcí `bedrock-*` jméno hráče Bedrocku. |
uuid | string | ne | UUID ze seznamu, pro odebrání na vypnutém serveru i bez platného nicku. |
level | integer | ne | `op`: úroveň operátora 1–4. |
bypassesPlayerLimit | boolean | ne | `op`: operátor se připojí i na plný server. |
reason | string | ne | `ban` a `kick`: důvod (nejvýš 200 znaků). |
ip | string | ne | `pardon-ip`: zabanovaná IP adresa. |
enabled | boolean | ne | `whitelist-toggle` (povinné): zapnout nebo vypnout whitelist. |
Ukázka těla
{
"action": "op",
"nick": "Steve",
"level": 4
}Ukázka odpovědi
{
"ok": true,
"mode": "command",
"result": "done",
"player": {
"name": "Steve",
"uuid": "0f3c1e2a-4b5d-4c6e-8f70-1a2b3c4d5e6f"
}
}Možné chyby
- 400
INVALIDNeplatné tělo požadavku. - 400
INVALID_NICKNeplatný nick nebo UUID. - 400
INVALID_REASONNeplatný důvod. - 400
INVALID_IPNeplatná IP adresa. - 409
NOT_RUNNINGAkce potřebuje běžící server (např. `kick`). - 409
PLAYER_OFFLINEHráč není online. - 409
NO_FLOODGATEAkce `bedrock-*` potřebují Floodgate. - 409
CONFLICTSoubor se mezitím změnil, zkuste to znovu. - 409
JOBNa serveru běží jiná změna. - 422
PLAYER_UNKNOWNHráč s tímto nickem neexistuje. - 429
RATE_LIMITEDPřekročený limit změn, zkuste to později. - 503
MOJANG_BUSYOvěření u Mojangu teď nejde.
GET/services/{id}/minecraft/pluginsPluginy a módy serveru
Bez parametrů vypíše nainstalované pluginy nebo módy a `restartRequired`. Přepínače `search`, `versions`, `plan` a `updates` stačí uvést bez hodnoty (např. `?search&source=modrinth&q=maps`); `op` vrátí stav instalace na pozadí.
Oprávnění: services:files
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
search | flag | ne | Hledání v katalogu (s `source`, `q`, `offset`). |
versions | flag | ne | Kompatibilní verze projektu (s `source`, `project`). |
plan | flag | ne | Náhled instalace se závislostmi bez zápisu (s `source`, `project`, `version`, `deps`). |
updates | flag | ne | Novější verze souborů nainstalovaných přes portál. |
source | string | ne | `modrinth` nebo `hangar` (Hangar jen pro pluginy). |
q | string | ne | Hledaný text. |
offset | integer | ne | Posun ve výsledcích hledání. |
project | string | ne | ID nebo slug projektu (1–64 znaků). |
version | string | ne | S `plan`: ID verze, jinak nejnovější kompatibilní. |
deps | string | ne | S `plan`: `0` bez závislostí. |
op | string | ne | ID operace (UUID) z odpovědi POST s 202. |
Ukázka odpovědi
{
"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žné chyby
- 400
BAD_REQUESTNeznámý zdroj, projekt nebo verze. - 400
UNSUPPORTED_TYPETyp serveru pluginy ani módy nepodporuje (Vanilla). - 404
OP_NOT_FOUNDOperace neexistuje nebo už vypršela. - 429
RATE_LIMITEDLimit dotazů na katalogy: 60 za minutu. - 502
SOURCE_ERRORKatalog teď neodpovídá.
POST/services/{id}/minecraft/pluginsInstalace a správa pluginů a módů
`install` a `update` běží na pozadí: hotová odpověď přijde do 40 s, jinak 202 s `pending: true` a `op`, stav pak čtěte přes `GET ?op=`. Změny se projeví po restartu serveru; limit 20 změn za 10 minut na službu.
Oprávnění: services:files
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ano | `install`, `update`, `remove` nebo `toggle`. |
source | string | ne | `install`: `modrinth` nebo `hangar`. |
project | string | ne | `install`: ID nebo slug projektu. |
version | string | ne | `install` a `update`: ID verze, jinak nejnovější kompatibilní. |
dependencies | boolean | ne | `install`: nainstalovat i povinné závislosti, výchozí `true`. |
skip | string[] | ne | `install`: ID závislostí, které se vynechají (nejvýš 50). |
replace | boolean | ne | `install`: nahradit konfliktní soubory, výchozí `false`. |
file | string | ne | `update`, `remove`, `toggle`: název souboru z výpisu (nejvýš 255 znaků). |
dataFolder | string | ne | `remove`: smazat i složku s daty pluginu (název z `dataFolders`). |
enabled | boolean | ne | `toggle` (povinné): zapnout nebo vypnout soubor. |
Ukázka těla
{
"action": "install",
"source": "modrinth",
"project": "example-plugin",
"dependencies": true
}Ukázka odpovědi
{
"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žné chyby
- 400
BAD_REQUESTNeplatné tělo požadavku nebo označení projektu či verze. - 404
NOT_FOUNDSoubor nebo projekt nebyl nalezen. - 404
NO_VERSIONŽádná kompatibilní verze. - 409
JOB_RUNNINGNa serveru běží jiná změna. - 409
INSTALLINGServer se právě instaluje. - 409
EXISTSSoubor už existuje, použijte `replace`. - 409
UP_TO_DATESoubor už má nejnovější verzi. - 413
TOO_LARGESoubor je větší než 100 MB. - 422
INCOMPATIBLEVerze není pro tento server. - 422
EXTERNALProjekt jde stáhnout jen ze stránky autora. - 429
RATE_LIMITEDLimit 20 změn za 10 minut. - 502
SOURCE_ERRORKatalog teď neodpovídá.
GET/services/{id}/minecraft/propertiesObsah server.properties
Vrátí server.properties jako text i jako seznam klíčů s `etag` pro uložení. Tajné hodnoty (hesla RCON a Management Protocolu) jsou zamaskované; `reveal` jednu odhalí, jen s oprávněním Tajné údaje.
Oprávnění: services:settings
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
reveal | string | ne | `rcon.password`, `management-server-secret` nebo `management-server-tls-keystore-password`; vrátí `{ key, value }`. |
Ukázka odpovědi
{
"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žné chyby
- 400 Neznámý klíč v `reveal`.
- 403 `reveal` bez oprávnění Tajné údaje.
- 422 Soubor je příliš velký nebo není textový.
- 412 Server teď není dostupný v herním panelu (hláška `panel.unavailable` v poli `msg`).
- 429 Příliš mnoho požadavků, zkuste to za chvíli.
POST/services/{id}/minecraft/propertiesUložení server.properties
Uloží jednotlivé klíče (`fields`) nebo celý soubor (`raw`), vždy s `etag` z GET. Zamčené klíče (IP a porty) se nemění, tajné a vzdálenou správu mění jen oprávnění Tajné údaje. Změny se projeví po restartu, `restart: true` ho rovnou provede (oprávnění Napájení).
Oprávnění: services:settings
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
etag | string | ano | `etag` z GET; když soubor neexistuje, `absent`. |
fields | object | ne | Klíč na hodnotu (string, číslo nebo boolean). Nejde spolu s `raw`. |
raw | string | ne | Celý obsah souboru (nejvýš 80 000 znaků, výsledek do 64 KB). Zamčené a tajné klíče se vrátí na původní hodnotu. |
create | boolean | ne | Založit soubor z výchozích hodnot, když ještě neexistuje. |
restart | boolean | ne | Po uložení restartovat běžící server. |
Ukázka těla
{
"etag": "9b1f0c2d4e6a8b0c1d2e3f4a5b6c7d8e9f0a1b2c",
"fields": {
"motd": "Vítejte",
"max-players": 30
},
"restart": true
}Ukázka odpovědi
{
"ok": true,
"unchanged": false,
"etag": "0c1d2e3f4a5b6c7d8e9f0a1b2c9b1f0c2d4e6a8b",
"changed": [
"motd",
"max-players"
],
"restored": [],
"restarted": true,
"restartError": null,
"restartErrorMsg": null
}Možné chyby
- 400 Neplatné tělo požadavku (hláška v poli `msg`).
- 400
UNKNOWN_KEYKlíč nejde měnit přes `fields` (pole `key`). - 400
LOCKEDKlíč je zamčený (pole `key`). - 400
INVALIDNeplatná hodnota klíče (pole `key`). - 400
RAW_INVALIDText souboru je moc dlouhý nebo obsahuje nepovolené znaky. - 403
SECRETSZměna tajné hodnoty nebo vzdálené správy bez oprávnění Tajné údaje. - 403 `restart` bez oprávnění Napájení.
- 409
CONFLICTSoubor se mezitím změnil, načtěte nový `etag`. - 409
NO_FILESoubor neexistuje, pošlete `create: true`. - 409 Na serveru běží změna (job).
- 412 Server teď není dostupný v herním panelu (hláška `panel.unavailable` v poli `msg`).
GET/services/{id}/minecraft/softwareSoftware serveru a dostupné verze
Bez parametrů vrátí typ a verzi serveru, historii změn, běžící job, sloty záloh, EULA a oprávnění. `versions` a `builds` vypíšou verze a buildy typu, `preview` ukáže dopad změny (Java, obraz, disk, varování) bez zápisu.
Oprávnění: services:settings
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
versions | string | ne | Typ serveru: `paper`, `purpur`, `folia`, `vanilla`, `fabric`, `forge` nebo `neoforge`; vrátí až 250 verzí. |
prerelease | string | ne | S `versions`: `1` přidá předběžné verze. |
builds | string | ne | Typ serveru; s `version` vrátí až 100 buildů. |
preview | string | ne | Typ serveru pro náhled změny (s `version`, `build`). |
version | string | ne | Verze Minecraftu (u `preview` výchozí `latest`). |
build | string | ne | S `preview`: konkrétní build nebo verze loaderu. |
unstable | string | ne | `1` povolí nestabilní buildy (`builds`, `preview`). |
Ukázka odpovědi
{
"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žné chyby
- 400 Neznámý typ, verze nebo build (hláška v poli `msg`).
- 422 Verzi nebo build nejde najít.
- 502 Zdroj verzí teď neodpovídá.
- 412 Server teď není dostupný v herním panelu (hláška `panel.unavailable` v poli `msg`).
- 429 Příliš mnoho požadavků, zkuste to za chvíli.
POST/services/{id}/minecraft/softwareZměna typu a verze serveru
`switch` a `reinstall` spustí job (202), průběh sledujte přes minecraft/job: server se vypne, zálohuje, nainstaluje se nový software a běžící server se znovu spustí. Potřebuje volný slot záloh (jinak `skipBackup`, jen vlastník) a lze ho spustit nejvýš 3× za hodinu. `import` jen zapíše, jaký software už na serveru je, nic nemění.
Oprávnění: services:settings
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ano | `switch`, `reinstall` nebo `import`. |
type | string | ne | `switch` a `import`: `paper`, `purpur`, `folia`, `vanilla`, `fabric`, `forge` nebo `neoforge`. |
version | string | ne | `switch` a `import`: verze Minecraftu (1–40 znaků), u `switch` jde i `latest`. |
build | string | ne | Build nebo verze loaderu, jinak nejnovější stabilní. |
allowUnstable | boolean | ne | `switch`: povolit nestabilní build. |
mode | string | ne | `switch`: `keep` (výchozí, nic nemazat), `clean` (smazat vše kromě světa, nastavení a seznamů hráčů) nebo `wipe` (smazat vše). |
acceptEula | boolean | ne | `switch` a `reinstall`: přijmout EULA. |
confirmDowngrade | boolean | ne | `switch`: potvrdit přechod na starší nebo neznámou verzi. |
skipBackup | boolean | ne | `switch` a `reinstall`: bez zálohy, jen vlastník. |
Ukázka těla
{
"action": "switch",
"type": "paper",
"version": "1.21.4",
"mode": "keep",
"acceptEula": true
}Ukázka odpovědi
{
"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žné chyby
- 400 Neplatné tělo požadavku (hláška v poli `msg`).
- 403 Změna potřebuje oprávnění Nastavení, Soubory a Napájení.
- 403
SKIP_BACKUP_OWNER`skipBackup` smí jen vlastník. - 409
JOB_RUNNINGNa serveru už běží jiný job. - 409
ADDON_RUNNINGProbíhá instalace pluginu nebo módu. - 409
BACKUP_SLOTSloty záloh jsou plné. - 409
BACKUP_DISABLEDSlužba nemá zálohy, změna jde jen se `skipBackup`. - 409
DISKNa disku je málo místa (`details.freeMb`, `details.needMb`). - 409
DOWNGRADEStarší verze, potvrďte `confirmDowngrade`. - 409
UNKNOWN_VERSIONSoučasná verze není známá, potvrďte `confirmDowngrade`. - 409
NOT_IMPORTED`reinstall` bez známého softwaru, nejdřív `import` nebo `switch`. - 409
INSTALLINGServer se instaluje nebo obnovuje ze zálohy. - 422
NEED_BUILD`import`: u Forge a NeoForge doplňte `build`. - 429 Nejvýš 3 změny za hodinu.
GET/services/{id}/minecraft/startupSpouštěcí příkaz a paměť
Vrátí současný spouštěcí příkaz, velikost haldy, dostupné presety JVM s náhledem haldy, uložený stav a riziko pádu na paměť. S `java=1` navíc verze Javy, které server nabízí.
Oprávnění: services:settings
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
java | string | ne | `1` přidá `javaOptions` (verze Javy, které egg nabízí). |
Ukázka odpovědi
{
"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žné chyby
- 502 Herní panel teď neodpovídá.
- 429 Příliš mnoho požadavků, zkuste to za chvíli.
POST/services/{id}/minecraft/startupZměna spouštěcího příkazu nebo Javy
Bez `action` (nebo `apply`) použije preset JVM, `recalculate` přepočítá haldu podle současné paměti, `revert` vrátí předchozí příkaz, `java` přepne obraz na jinou Javu bez reinstalace. Změna platí od dalšího startu, `restart: true` server hned restartuje (oprávnění Napájení).
Oprávnění: services:settings
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ne | `apply` (výchozí), `recalculate`, `revert` nebo `java`. |
preset | string | ne | `apply` (povinné): `standard`, `zgc` (Java 21+), `proxy` nebo `none`. |
extraFlags | string | string[] | ne | `apply`: vlastní JVM flagy (text do 4000 znaků nebo až 60 položek); nové flagy jen s oprávněním Napájení. |
dryRun | boolean | ne | `apply`: jen sestavit příkaz a nic neuložit. |
major | integer | ne | `java` (povinné): hlavní verze Javy 8–99. |
restart | boolean | ne | Po změně restartovat (vypnutý server zapnout). |
Ukázka těla
{
"preset": "standard",
"extraFlags": [],
"restart": true
}Ukázka odpovědi
{
"ok": true,
"command": "java -Xms6656M -Xmx6656M -XX:+UseG1GC -jar server.jar nogui",
"heapMb": 6656,
"preset": "standard",
"restarted": true,
"restartError": null,
"restartErrorMsg": null
}Možné chyby
- 400 Neplatné tělo požadavku (hláška v poli `msg`).
- 403
EXTRA_FLAGS_PERMISSIONNové vlastní flagy bez oprávnění Napájení (pole `token`). - 403 `restart` nebo `java` bez potřebných oprávnění.
- 409
NEED_IMPORTSoftware serveru není nastavený. - 409
NO_MEMORY_LIMITServer nemá limit paměti. - 409
CHANGEDStartup se mezitím změnil. - 409 Na serveru běží změna softwaru nebo instalace.
- 422
PRESETPreset není pro tuto Javu. - 422
EXTRA_FLAGSNepovolený flag (pole `token`). - 422
TOO_OLD`java`: verze je pro verzi Minecraftu příliš stará. - 422
NO_IMAGE`java`: pro tuto Javu není obraz. - 429 Limit: použití presetu 10 za hodinu, přepnutí Javy 3 za hodinu.
GET/services/{id}/minecraft/textBarevný nick a prefix: možnosti
Vrátí, jestli server běží, éru syntaxe textu podle verze a které pluginy (EssentialsX, LuckPerms, TAB) jsou nainstalované. U sdílené služby je potřeba oprávnění Konzole.
Oprávnění: services:settings
Ukázka odpovědi
{
"running": true,
"state": "running",
"version": "1.21.4",
"era": "components",
"eraKnown": true,
"plugins": {
"essentials": true,
"luckperms": true,
"tab": false
}
}Možné chyby
- 412 Server teď není dostupný v herním panelu (hláška `panel.unavailable` v poli `msg`).
- 429 Příliš mnoho požadavků, zkuste to za chvíli.
POST/services/{id}/minecraft/textNastavení barevného textu na serveru
Ze `spans` nebo `doc` sestaví na serveru příkaz (nick EssentialsX, prefix LuckPerms nebo TAB, jmenovka, tellraw) a pošle ho do konzole běžícího serveru. Limit 20 za 10 minut.
Oprávnění: services:settings
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ano | `essentials-nick`, `lp-prefix`, `tab-prefix`, `give-nametag` nebo `tellraw`. |
target | string | ano | Hráč nebo skupina (1–36 znaků); u `tellraw` i `@a`. |
targetKind | string | ne | `lp-prefix` a `tab-prefix`: `group` (výchozí) nebo `player`. |
priority | integer | null | ne | `lp-prefix`: priorita 0–1000. |
prefixFormat | string | ne | `lp-prefix`: `ampHex` (výchozí), `amp`, `minimessage` nebo `bungeeHex`. |
tabField | string | ne | `tab-prefix`: `tabprefix` (výchozí) nebo `tagprefix`. |
tabFormat | string | ne | `tab-prefix`: `tabGradient` (výchozí), `ampHex` nebo `minimessage`. |
era | string | ne | Éra syntaxe (`legacy`, `json`, `jsonHex`, `components`, `snbt`), použije se jen u neznámé verze serveru. |
spans | object[] | ne | Úseky `{ text, color: "#rrggbb" | null, bold?, italic?, underlined?, strikethrough?, obfuscated? }`, nejvýš 200. Pošlete buď `spans`, nebo `doc`. |
doc | object | ne | `{ segments: [{ text, fill, … }] }`, kde `fill` je `{ kind: "solid", color }`, `{ kind: "gradient", colors: [2–5 barev] }` nebo `{ kind: "rainbow" }`. |
Ukázka těla
{
"action": "lp-prefix",
"target": "vip",
"targetKind": "group",
"priority": 50,
"doc": {
"segments": [
{
"text": "[VIP] ",
"fill": {
"kind": "solid",
"color": "#ffaa00"
},
"bold": true
}
]
}
}Ukázka odpovědi
{
"ok": true,
"command": "lp group vip meta setprefix 50 \"&#FFAA00&l[VIP] \"",
"warnings": [],
"delivered": null
}Možné chyby
- 400
INVALIDNeplatné tělo požadavku. - 400
TARGETNeplatný hráč nebo skupina. - 400
PRIORITYPriorita musí být celé číslo 0–1000. - 400
EMPTYText je prázdný. - 400
TOO_LONGText je moc dlouhý (nick nejvýš 64 znaků, ostatní 256). - 400
TOO_MANY_PARTSText má moc barevných úseků. - 409
JOBNa serveru běží změna (job). - 409 Server neběží.
- 429
RATE_LIMITEDPřekročený limit změn, zkuste to později. - 412 Server teď není dostupný v herním panelu (hláška `panel.unavailable` v poli `msg`).
GET/services/{id}/minecraft/worldsSvěty serveru a připravená stažení
Vrátí aktivní a uložené světy (nejvýš 5), připravená stažení, běžící job světa, sloty záloh a stav serveru.
Oprávnění: services:files
Ukázka odpovědi
{
"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žné chyby
- 412
NO_PANELServer teď není dostupný v herním panelu. - 429 Příliš mnoho požadavků, zkuste to za chvíli.
POST/services/{id}/minecraft/worldsStažení, přepnutí, smazání a nový svět
`export` připraví archiv světa na pozadí (202), stáhnete ho přes worlds/download, nejvýš 3× za hodinu. `switch` a `reset` spustí job (202, průběh přes minecraft/job), server se během něj vypne a pak zase zapne; `delete` uložený svět trvale smaže. Kromě `export` je potřeba i oprávnění Napájení; změny nejvýš 10× za hodinu.
Oprávnění: services:files
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ano | `export`, `switch`, `delete` nebo `reset`. |
world | string | ne | `export`, `switch`, `delete`: název světa z výpisu (1–64 znaků). |
old | string | ne | `reset` (povinné): `delete` starý svět smazat, `keep` ponechat jako uložený. |
keepAs | string | ne | `reset` s `keep`: nový název starého světa (1–32 znaků A–Z, a–z, 0–9, _ a -). |
seed | string | ne | `reset`: seed nového světa (nejvýš 128 znaků), prázdný = náhodný. |
levelType | string | ne | `reset`: `normal` (výchozí), `flat`, `large_biomes` nebo `amplified`. |
structures | boolean | ne | `reset`: generovat stavby, výchozí `true`. |
confirmNoBackup | boolean | ne | `reset` s `delete`: potvrdit smazání bez zálohy, když není volný slot záloh. |
Ukázka těla
{
"action": "reset",
"old": "keep",
"keepAs": "stary_svet",
"seed": "",
"levelType": "normal",
"structures": true
}Ukázka odpovědi
{
"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žné chyby
- 400
INVALIDNeplatné tělo požadavku. - 400
BAD_NAMENeplatný název světa. - 400
RESERVED_NAMENázev patří složce serveru. - 400
BAD_SEEDNeplatný seed. - 403
FORBIDDENChybí oprávnění Napájení. - 404
NO_SUCH_WORLDSvět na serveru není. - 409
ACTIVE_WORLDSvět je právě aktivní. - 409
NAME_TAKENSložka s tímto názvem už existuje. - 409
TOO_MANY_WORLDSNa serveru může být nejvýš 5 světů. - 409
NEEDS_CONFIRMStarý svět se smaže bez zálohy, pošlete `confirmNoBackup: true`. - 409
JOB_RUNNINGNa serveru už běží jiná změna. - 409
EXPORT_RUNNINGStažení světa se už připravuje. - 409
DISKNa disku serveru je málo místa. - 409
STATEServer se právě zapíná nebo vypíná. - 429
RATE_LIMITEDPřekročený limit změn, zkuste to později. - 412
NO_PANELServer teď není dostupný v herním panelu.
GET/services/{id}/minecraft/worlds/downloadStažení připraveného světa
Stáhne archiv připravený akcí `export` (ZIP nebo tar.gz). Po úplném stažení se archiv na serveru smaže; najednou jde jedno stahování na službu, nejvýš 10 za hodinu.
Oprávnění: services:files
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
id | string | ano | `id` stažení z `exports` (10 hex znaků). |
format | string | ne | `zip` (výchozí) nebo `tar.gz`. |
Ukázka odpovědi
HTTP/1.1 200 OK
Content-Type: application/zip
Content-Disposition: attachment; filename="world-2026-11-07.zip"
(binary archive)Možné chyby
- 400
INVALIDChybí nebo je neplatné `id`. - 404
EXPORT_GONEStažení už není připravené, připravte ho znovu. - 429
DOWNLOAD_BUSYStahování už probíhá. - 429
RATE_LIMITEDPříliš mnoho stažení. - 412
NO_PANELServer teď není dostupný v herním panelu.
Domény
POST/services/{id}/domain/auth-infoOdeslat AUTH-ID pro převod domény
Požádá registrátora, aby poslal AUTH-ID (kód pro převod domény k jinému registrátorovi) e-mailem držiteli domény. Kód se v odpovědi nevrací. Smí jen vlastník domény, nejvýš 3krát za hodinu. Oprávnění services:secrets lze dát jen klíči omezenému na IP adresy.
Oprávnění: services:secrets
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
locale | string | ne | Jazyk chybových hlášek: cs, en, sk, pl nebo de. Výchozí je cs. |
Ukázka těla
{
"locale": "cs"
}Ukázka odpovědi
{
"ok": true
}Možné chyby
- 400
invalidTělo požadavku obsahuje neznámé pole. - 403 Akci smí jen vlastník domény, ne člen sdílené služby.
- 404 Služba neexistuje, nepatří vám nebo na ni klíč nemá přístup.
- 409
inactiveDoména ještě není aktivní. - 429 Překročený limit 3 žádostí za hodinu.
- 503
unavailableOdeslání je dočasně nedostupné. Zkuste to později. - 422
failedRegistrátor žádost odmítl.
GET/services/{id}/domain/connectPlán napojení domény na službu
Spočítá DNS záznamy, které nasměrují doménu nebo subdoménu na vaši VPS nebo herní server (Minecraft, FiveM), a ukáže, co se v zóně přidá a co nahradí. Nic nemění. U domény mimo naše DNS vrátí mode manual se záznamy k ručnímu nastavení.
Oprávnění: domains:read
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
service | string | ano | ID vaší aktivní VPS nebo herního serveru (Minecraft, FiveM). Sdílené služby nejdou. |
host | string | ano | Jméno v doméně: @ pro doménu samotnou, nebo subdoména (písmena, číslice, pomlčky, bez * a _). |
locale | string | ne | Jazyk chybových hlášek: cs, en, sk, pl nebo de. Výchozí je cs. |
Ukázka odpovědi
{
"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žné chyby
- 403 Akci smí jen vlastník domény, ne člen sdílené služby.
- 404 Služba neexistuje, nepatří vám nebo na ni klíč nemá přístup.
- 409
inactiveDoména ještě není aktivní. - 400
hostNeplatné jméno: zadejte @ pro doménu samotnou, nebo subdoménu z písmen, číslic a pomlček. - 404
serviceSlužba neexistuje, nepatří vám, není aktivní nebo ji napojit nejde. - 409
no_addressSlužba nemá veřejnou adresu, na kterou by šlo doménu napojit. - 503
unavailableAdresu služby nebo stav DNS teď nejde zjistit. - 429 Překročený limit 60 požadavků za 10 minut.
POST/services/{id}/domain/connectNapojit doménu na službu
Založí v zóně záznamy z plánu (A, AAAA, u Minecraftu i SRV _minecraft._tcp, TTL 300). Pošlete planHash z GET; když plán nahrazuje stávající záznamy, je potřeba confirm: true. Jen pro doménu na našich DNS.
Oprávnění: domains:write
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
serviceId | string | ano | ID vaší aktivní VPS nebo herního serveru, stejné jako v GET. |
host | string | ano | Jméno v doméně, stejné jako v GET (@ nebo subdoména). |
planHash | string | ano | Otisk plánu z GET (24 hex znaků). Když se zóna mezitím změní, vrátí se 409 changed s novým plánem. |
confirm | boolean | ne | Potvrzení, že se stávající záznamy z replace nahradí. Povinné, když replace není prázdné. |
locale | string | ne | Jazyk chybových hlášek: cs, en, sk, pl nebo de. Výchozí je cs. |
Ukázka těla
{
"serviceId": "clx9k2m4p0000svc01abcdef",
"host": "@",
"planHash": "3f9a0c1b2d4e5f60718293ab",
"confirm": true
}Ukázka odpovědi
{
"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žné chyby
- 400
invalidChybí povinné pole nebo má špatný tvar. - 403 Akci smí jen vlastník domény, ne člen sdílené služby.
- 404 Služba neexistuje, nepatří vám nebo na ni klíč nemá přístup.
- 409
inactiveDoména ještě není aktivní. - 400
hostNeplatné jméno: zadejte @ pro doménu samotnou, nebo subdoménu z písmen, číslic a pomlček. - 404
serviceSlužba neexistuje, nepatří vám, není aktivní nebo ji napojit nejde. - 409
no_addressSlužba nemá veřejnou adresu, na kterou by šlo doménu napojit. - 503
unavailableAdresu služby nebo stav DNS teď nejde zjistit. - 409
manualDoména nepoužívá naše DNS. Záznamy nastavte u svého DNS poskytovatele. - 409
changedZóna se od GET změnila. Odpověď obsahuje nový plán v poli plan. - 409
confirmPlán nahrazuje stávající záznamy a chybí confirm: true. Odpověď obsahuje plán v poli plan. - 409
limitZóna by překročila limit 200 záznamů. - 429 Překročený limit 60 změn DNS za 10 minut (sdílený se zápisy DNS záznamů).
GET/services/{id}/domain/dnsVýpis DNS záznamů
Vrátí záznamy zóny domény na našich DNS (A, AAAA, CNAME, MX, TXT, SRV, CAA), názvové servery a počet záznamů vůči limitu 200. delegated: false znamená, že zóna je připravená, ale doména zatím na naše DNS neukazuje.
Oprávnění: domains:read
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
locale | string | ne | Jazyk chybových hlášek: cs, en, sk, pl nebo de. Výchozí je cs. |
Ukázka odpovědi
{
"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žné chyby
- 403 Akci smí jen vlastník domény, ne člen sdílené služby.
- 404 Služba neexistuje, nepatří vám nebo na ni klíč nemá přístup.
- 400 Služba není doména.
- 409
inactiveDoména ještě není aktivní. - 409
no_zoneDoména nemá zónu na našich DNS. Připravte ji přes domain/zone nebo přepněte názvové servery na naše. - 503
unavailableDNS server teď neodpovídá. Zkuste to později. - 422
failedZměnu se nepodařilo provést.
POST/services/{id}/domain/dnsPřidat DNS záznam
Přidá záznam do zóny domény na našich DNS. Všechny hodnoty v record se posílají jako text. Odpověď obsahuje ID nového záznamu a celý nový výpis zóny.
Oprávnění: domains:write
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
record | object | ano | Nový záznam. |
record.type | string | ano | Typ záznamu: A, AAAA, CNAME, MX, TXT, SRV nebo CAA. |
record.host | string | ne | Jméno: @ nebo prázdné pro doménu samotnou, relativní jméno (www, _dmarc, *.dev) nebo celé jméno končící doménou. |
record.ttl | string | ne | TTL v sekundách jako text, 60 až 86400. Prázdné = 3600. |
record.address | string | ne | A: IPv4 adresa, AAAA: IPv6 adresa. |
record.target | string | ne | CNAME a SRV: cílové jméno (u SRV i . = služba není dostupná). CNAME nesmí být na doméně samotné ani vedle jiného záznamu stejného jména. |
record.preference | string | ne | MX: priorita 0 až 65535 jako text. |
record.exchange | string | ne | MX: jméno poštovního serveru (ne IP adresa). |
record.text | string | ne | TXT: text do 2000 znaků bez řídicích znaků. |
record.priority | string | ne | SRV: priorita 0 až 65535 jako text. Jméno SRV musí mít tvar _služba._protokol (tcp, udp, tls, sctp). |
record.weight | string | ne | SRV: váha 0 až 65535 jako text. |
record.port | string | ne | SRV: port 0 až 65535 jako text. |
record.flags | string | ne | CAA: příznak 0 nebo 128 jako text. |
record.tag | string | ne | CAA: issue, issuewild nebo iodef. |
record.value | string | ne | CAA: u issue a issuewild doména certifikační autority, u iodef adresa mailto: nebo https:. |
locale | string | ne | Jazyk chybových hlášek: cs, en, sk, pl nebo de. Výchozí je cs. |
Ukázka těla
{
"record": {
"type": "MX",
"host": "@",
"ttl": "3600",
"preference": "10",
"exchange": "mail.example.com"
}
}Ukázka odpovědi
{
"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žné chyby
- 400 Záznam neprošel kontrolou. Pole code říká proč (např. 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, kterého pole se to týká.
- 403 Akci smí jen vlastník domény, ne člen sdílené služby.
- 404 Služba neexistuje, nepatří vám nebo na ni klíč nemá přístup.
- 400 Služba není doména.
- 409
inactiveDoména ještě není aktivní. - 409
no_zoneDoména nemá zónu na našich DNS. Připravte ji přes domain/zone nebo přepněte názvové servery na naše. - 503
unavailableDNS server teď neodpovídá. Zkuste to později. - 422
failedZměnu se nepodařilo provést. - 429 Překročený limit 60 změn za 10 minut.
PATCH/services/{id}/domain/dnsUpravit DNS záznam
Upraví záznam podle ID z výpisu. Vynechaná nebo prázdná pole zůstanou beze změny, typ záznamu změnit nejde. ID se počítá z hodnoty záznamu, takže po změně jména nebo hodnoty vrátí odpověď nové ID.
Oprávnění: domains:write
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
id | string | ano | ID záznamu z výpisu (20 hex znaků). |
record | object | ano | Pole, která se mají změnit (stejná jako u přidání, bez type). |
record.host | string | ne | Jméno: @ nebo prázdné pro doménu samotnou, relativní jméno (www, _dmarc, *.dev) nebo celé jméno končící doménou. |
record.ttl | string | ne | TTL v sekundách jako text, 60 až 86400. Prázdné = 3600. |
record.address | string | ne | A: IPv4 adresa, AAAA: IPv6 adresa. |
record.target | string | ne | CNAME a SRV: cílové jméno (u SRV i . = služba není dostupná). CNAME nesmí být na doméně samotné ani vedle jiného záznamu stejného jména. |
record.preference | string | ne | MX: priorita 0 až 65535 jako text. |
record.exchange | string | ne | MX: jméno poštovního serveru (ne IP adresa). |
record.text | string | ne | TXT: text do 2000 znaků bez řídicích znaků. |
record.priority | string | ne | SRV: priorita 0 až 65535 jako text. Jméno SRV musí mít tvar _služba._protokol (tcp, udp, tls, sctp). |
record.weight | string | ne | SRV: váha 0 až 65535 jako text. |
record.port | string | ne | SRV: port 0 až 65535 jako text. |
record.flags | string | ne | CAA: příznak 0 nebo 128 jako text. |
record.tag | string | ne | CAA: issue, issuewild nebo iodef. |
record.value | string | ne | CAA: u issue a issuewild doména certifikační autority, u iodef adresa mailto: nebo https:. |
locale | string | ne | Jazyk chybových hlášek: cs, en, sk, pl nebo de. Výchozí je cs. |
Ukázka těla
{
"id": "a1b2c3d4e5f60718293a",
"record": {
"address": "203.0.113.26",
"ttl": "600"
}
}Ukázka odpovědi
{
"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žné chyby
- 400 Záznam neprošel kontrolou. Pole code říká proč (např. 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, kterého pole se to týká.
- 404
not_foundZáznam s tímto ID v zóně není (mohl se mezitím změnit). - 403 Akci smí jen vlastník domény, ne člen sdílené služby.
- 404 Služba neexistuje, nepatří vám nebo na ni klíč nemá přístup.
- 400 Služba není doména.
- 409
inactiveDoména ještě není aktivní. - 409
no_zoneDoména nemá zónu na našich DNS. Připravte ji přes domain/zone nebo přepněte názvové servery na naše. - 503
unavailableDNS server teď neodpovídá. Zkuste to později. - 422
failedZměnu se nepodařilo provést. - 429 Překročený limit 60 změn za 10 minut.
DELETE/services/{id}/domain/dnsSmazat DNS záznam
Smaže záznam podle ID z výpisu. ID se posílá v JSON těle požadavku. Odpověď obsahuje nový výpis zóny.
Oprávnění: domains:write
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
id | string | ano | ID záznamu z výpisu (20 hex znaků). |
locale | string | ne | Jazyk chybových hlášek: cs, en, sk, pl nebo de. Výchozí je cs. |
Ukázka těla
{
"id": "c3d4e5f60718293a4b5c"
}Ukázka odpovědi
{
"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žné chyby
- 400
invalidChybí id nebo má špatný tvar. - 404
not_foundZáznam s tímto ID v zóně není. - 403 Akci smí jen vlastník domény, ne člen sdílené služby.
- 404 Služba neexistuje, nepatří vám nebo na ni klíč nemá přístup.
- 400 Služba není doména.
- 409
inactiveDoména ještě není aktivní. - 409
no_zoneDoména nemá zónu na našich DNS. Připravte ji přes domain/zone nebo přepněte názvové servery na naše. - 503
unavailableDNS server teď neodpovídá. Zkuste to později. - 422
failedZměnu se nepodařilo provést. - 429 Překročený limit 60 změn za 10 minut.
POST/services/{id}/domain/nameserversZměnit názvové servery domény
Změní názvové servery u registru: ours = naše DNS (zóna se založí, pokud chybí), custom = vlastní servery (2 až 6), wedos = výchozí DNS registrátora. Zóna na našich DNS se při přepnutí jinam nemaže, takže jde přepnout zpět. Změna se ve světě projeví až po vypršení TTL u registru.
Oprávnění: domains:write
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
mode | string | ano | ours, custom nebo wedos. |
nameservers | array | ne | Jen u custom: 2 až 6 serverů ve tvaru { name, ipv4?, ipv6? }. |
nameservers[].name | string | ano | Jméno serveru, např. ns1.example.net. |
nameservers[].ipv4 | string | ne | IPv4 adresa. Jen u serveru uvnitř vlastní domény (např. ns1.example.com pro example.com), tam je potřeba aspoň jedna adresa. Jinak se ignoruje. |
nameservers[].ipv6 | string | ne | IPv6 adresa, platí totéž co u ipv4. |
locale | string | ne | Jazyk chybových hlášek: cs, en, sk, pl nebo de. Výchozí je cs. |
Ukázka těla
{
"mode": "custom",
"nameservers": [
{
"name": "ns1.example.com",
"ipv4": "203.0.113.53"
},
{
"name": "ns2.example.net"
}
]
}Ukázka odpovědi
{
"ok": true,
"mode": "custom",
"nsset": null,
"nameservers": [
"ns1.example.com",
"ns2.example.net"
]
}Možné chyby
- 400
invalidNeplatné tělo požadavku (např. neznámý mode). - 400
ns_countU custom je potřeba 2 až 6 různých serverů. - 400
ns_nameNeplatné jméno serveru. Pole index říká kterého. - 400
ns_glueServer uvnitř domény potřebuje IPv4 nebo IPv6 adresu. - 400
ns_ipNeplatná IP adresa serveru. - 400
ns_oursVlastní servery jsou jen naše. Použijte mode ours. - 403 Akci smí jen vlastník domény, ne člen sdílené služby.
- 404 Služba neexistuje, nepatří vám nebo na ni klíč nemá přístup.
- 409
inactiveDoména ještě není aktivní. - 429 Překročený limit 10 změn za 10 minut.
- 503
unavailableRegistr nebo DNS server je teď nedostupný. Zkuste to později. - 422
failedRegistr změnu odmítl.
POST/services/{id}/domain/zonePřipravit zónu na našich DNS
Založí prázdnou zónu domény na našich DNS bez změny názvových serverů. Hodí se po převodu domény: nejdřív naplníte záznamy přes domain/dns a teprve pak přepnete NS. Záznamy z dosavadních DNS se nepřenášejí. Když zóna už existuje, vrátí ok: true a existed: true.
Oprávnění: domains:write
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
locale | string | ne | Jazyk chybových hlášek: cs, en, sk, pl nebo de. Výchozí je cs. |
Ukázka těla
{
"locale": "cs"
}Ukázka odpovědi
{
"ok": true
}Možné chyby
- 400
invalidTělo požadavku obsahuje neznámé pole. - 403 Akci smí jen vlastník domény, ne člen sdílené služby.
- 404 Služba neexistuje, nepatří vám nebo na ni klíč nemá přístup.
- 409
inactiveDoména ještě není aktivní. - 429 Překročený limit 10 požadavků za 10 minut.
- 503
not_readyDNS pro domény teď není připravené. Zkuste to později. - 422
failedZónu se nepodařilo založit.
Platby a doklady
GET/creditZůstatek a historie kreditu
Vrátí zůstatek kreditu v Kč, z toho bonus, nevratnou a vratnou část, čekající dobití a historii pohybů (50 na stránku, od nejnovějšího). Když kredit na účtu ještě není dostupný, vrátí jen available: false.
Oprávnění: billing:read
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
page | integer | ne | Stránka historie od 1. Výchozí je 1. |
locale | string | ne | Jazyk chybových hlášek: cs, en, sk, pl nebo de. Výchozí je cs. |
Ukázka odpovědi
{
"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žné chyby
- 429
rate_limitedPřekročený limit 60 dotazů za minutu.
POST/credit/payZaplatit fakturu z kreditu
Zaplatí nezaplacenou fakturu objednávky (např. nové služby nebo upgradu) z kreditu účtu. Kredit se odečte hned, založení služby nebo provedení upgradu doběhne až po odpovědi. Faktury za dobití kreditu takhle zaplatit nejde.
Oprávnění: billing:write
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
invoiceId | string | ano | ID nezaplacené faktury. |
expectedAmountCzk | number | ano | Částka faktury v Kč, kterou očekáváte. Musí přesně sedět s cenou objednávky, jinak vrátí 409 amount_changed s aktuální částkou. |
ackOpenGateway | boolean | ne | Potvrzení, že chcete platit kreditem, i když je k faktuře otevřená platba na platební bráně. Výchozí je false. |
locale | string | ne | Jazyk chybových hlášek: cs, en, sk, pl nebo de. Výchozí je cs. |
Ukázka těla
{
"invoiceId": "clx9k2m4p0000inv01abcdef",
"expectedAmountCzk": 249
}Ukázka odpovědi
{
"ok": true,
"orderId": "clx9k2m4p0000ord01abcdef",
"amountCzk": 249,
"balanceCzk": 201,
"next": "/cs/order/clx9k2m4p0000ord01abcdef?credit=paid"
}Možné chyby
- 400
invalidChybí povinné pole nebo má špatný tvar. - 403
lockedÚčet je dočasně zamčený. - 404
invoice_not_foundFaktura neexistuje nebo nepatří vám. - 409
insufficientKredit nestačí. Odpověď obsahuje balanceCzk a neededCzk. - 409
amount_changedČástka se změnila. Aktuální je v amountCzk. - 409
closedFaktura už je zaplacená nebo zrušená. - 409
expiredZálohová faktura propadla po splatnosti. - 409
upgrade_expiredNabídka upgradu platila jen do konce období služby a byla zrušena. - 409
gateway_openK faktuře je otevřená platba na platební bráně. Pošlete ackOpenGateway: true. - 409
payment_in_progressPlatba na bráně právě probíhá. - 409
paid_unreconciledPlatba už dorazila, ale ještě není spárovaná. - 409
topup_not_payableFakturu za dobití kreditu nejde zaplatit kreditem. - 409
not_payableFaktura nepatří k objednávce, kterou jde zaplatit. - 409
capacityPro objednanou službu teď není volná kapacita. - 409
billing_profile_incompleteChybí fakturační údaje účtu. Odpověď obsahuje settingsUrl. - 409
foreign_eu_vatObjednávky firem z jiných států EU se zatím vyřizují individuálně. - 429
rate_limitedPřekročený limit 10 pokusů za minutu. - 503
unavailableKredit teď není dostupný. - 503
gateway_check_failedStav platby na bráně teď nejde ověřit. Zkuste to později. - 503
capacity_busyKapacitu teď nejde ověřit. Zkuste to za chvíli.
GET/invoicesSeznam dokladů
Vrátí doklady účtu od nejnovějšího i s položkami. Částky jsou v Kč.
Oprávnění: billing:read
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
status | string | ne | Filtr podle stavu: PENDING, PAID, CANCELLED nebo REFUNDED. Jiná hodnota se ignoruje. |
limit | integer | ne | Počet dokladů, 1 až 200. Výchozí je 50. |
Ukázka odpovědi
{
"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
Stáhne PDF zaplacené nebo vrácené faktury. Nezaplacené doklady PDF nemají.
Oprávnění: billing:read
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
lang | string | ne | en = anglický název souboru, jinak český. |
Ukázka odpovědi
application/pdf (Content-Disposition: attachment; filename="faktura-2026-0042.pdf")Možné chyby
- 404
not_foundFaktura neexistuje, nepatří vám nebo není zaplacená. - 409
preparingFaktura se teprve vystavuje. Zkuste to později. - 429
rate_limitedPřekročený limit 20 stažení za minutu. - 503
not_readyPDF se právě připravuje. Zkuste to za pár sekund (hlavička Retry-After). - 503
unavailablePDF teď nejde načíst. Zkuste to později.
GET/services/{id}/external-invoices/{key}/pdfPDF faktury z pravidelné fakturace
Stáhne PDF faktury služby, kterou platíte pravidelnou fakturou mimo portál. {key} je 22znakový klíč faktury z přehledu plateb služby v portálu. Smí jen vlastník služby (VPS, herní server, webhosting).
Oprávnění: billing:read
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
lang | string | ne | Jazyk názvu souboru: cs, en, sk, pl nebo de. Výchozí je cs. |
Ukázka odpovědi
application/pdf (Content-Disposition: attachment; filename="faktura-2026-0042.pdf")Možné chyby
- 404
not_foundFaktura nebo služba neexistuje, nepatří vám nebo nejste vlastník. Odpověď je vždy stejná. - 429
rate_limitedPřekročený limit 20 stažení za minutu. - 503
not_readyPDF se právě připravuje. Zkuste to za pár sekund (hlavička Retry-After). - 503
unavailablePDF teď nejde načíst. Zkuste to později.
GET/services/{id}/game-upgradeMožnosti změny balíčku hry nebo bota
Vrátí současný balíček herního serveru nebo Discord bota, větší a menší balíčky s cenami a doplatkem, doplněk záloh a rozpracované či naplánované změny. Jen pro vlastníka služby.
Oprávnění: services:read
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
view | string | ne | restart = vrátí jen { restartPending } (čeká server na restart po změně balíčku); funguje i pro členy. |
locale | string | ne | Jazyk textů v odpovědi: en, jinak cs. |
Ukázka odpovědi
{
"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žné chyby
- 403 Jen pro vlastníka služby.
- 409
unavailableZměna balíčku teď u služby nejde (neznámý balíček nebo stav služby). - 503 Herní panel teď neodpovídá.
POST/services/{id}/game-upgradeObjednat větší nebo naplánovat menší balíček
Bez action (nebo action order) založí objednávku většího balíčku nebo doplňku zálohy se zálohovou fakturou; změna se provede až po zaplacení. Menší balíček se naplánuje od dalšího období a nic se neplatí ani nevrací. Jen pro vlastníka služby.
Oprávnění: billing:write
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ne | order (výchozí), cancelPending (zrušit nezaplacenou objednávku), scheduleDowngrade (menší balíček od dalšího období) nebo cancelScheduled (zrušit naplánovanou změnu). |
packageId | string | null | ne | order, scheduleDowngrade: id cílového balíčku z GET (packages, lowerPackages). Bez něj zůstává současný balíček. |
backups | integer | ne | order, scheduleDowngrade: počet doplňků Záloha, 0 nebo 1. |
immediateStartRequested | boolean | ne | order: spotřebitel žádá o provedení změny hned (VOP čl. 9.8). Bez IČO musí být true. |
businessPurpose | boolean | ne | order: prohlášení, že objednávka slouží podnikání. |
expectedChargeCzk | number | null | ne | order: doplatek, který jste viděli. Když se liší, vrátí se 409 price_changed a nic se nezaloží. |
expectedMonthlyCzk | number | null | ne | order, scheduleDowngrade: nová měsíční cena, kterou jste viděli. Když se liší, vrátí se 409 price_changed. |
changeId | string | ne | cancelScheduled: id naplánované změny (scheduled.id z GET); když nesedí, vrátí se 409 changed. |
locale | string | ne | Jazyk hlášek: cs, en, sk, pl nebo de. Výchozí cs. |
Ukázka těla
{
"packageId": "mc-6gb",
"backups": 0,
"immediateStartRequested": true,
"expectedChargeCzk": 80,
"expectedMonthlyCzk": 349,
"locale": "cs"
}Ukázka odpovědi
{
"orderId": "ord_7Hq2mX9pLk",
"chargeCzk": 80,
"monthlyToCzk": 349,
"scheduledCancelled": false
}Možné chyby
- 400 Neplatný požadavek nebo balíček, který nejde zvolit.
- 400
immediate_start_requiredSpotřebitel musí poslat immediateStartRequested: true. - 403 Jen pro vlastníka služby.
- 404
nonecancelScheduled: žádná naplánovaná změna není. - 409
billing_profile_incompleteChybí fakturační údaje účtu. - 409
pending_orderUž existuje nezaplacená objednávka upgradu (orderId v odpovědi). - 409
upgrade_in_progressZaplacený upgrade se ještě provádí. - 409
price_changedCena se mezitím změnila; v odpovědi jsou newChargeCzk a newMonthlyCzk. - 409
capacityVětší balíček se na server nevejde. - 409
does_not_fitscheduleDowngrade: data se do menšího balíčku nevejdou (důvody v reasons). - 409
transfer_pendingSlužba čeká na převod. - 409
refund_openU služby probíhá odstoupení nebo vrácení peněz. - 409
renewal_paidDalší období je zaplacené za cenu naplánovaného menšího balíčku. - 409
change_applyingMenší balíček se právě nastavuje. - 409
too_latecancelScheduled: změna už začala platit. - 503
price_list_unavailableCeník teď nejde načíst, nic se neúčtuje.
GET/services/{id}/order-upgradeNabídka upgradu VPS
Vrátí současnou sestavu VPS, měsíční cenu, sazby, nejvyšší možné hodnoty podle volné kapacity, období a případnou nezaplacenou objednávku upgradu. Jen vlastník.
Oprávnění: services:read
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
locale | string | ne | en pro anglické texty, jinak česky. |
Ukázka odpovědi
{
"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žné chyby
- 400 Služba není VPS.
- 403 Nejste vlastník služby.
- 409 Služba není aktivní.
POST/services/{id}/order-upgradeObjednat upgrade VPS
Vytvoří objednávku upgradu VPS se zálohovou fakturou na poměrný doplatek do konce období; upgrade se provede až po zaplacení. Cenu počítá server podle RAM, disk jde jen nahoru; action cancelPending zruší nezaplacenou objednávku.
Oprávnění: billing:write
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ne | order (výchozí) nebo cancelPending. |
ramGb | number | ne | Nová RAM v GB (1–32); vCPU se dopočítá z RAM. Chybí = beze změny. |
diskGb | number | ne | Disk v GB (20–500), jen nahoru. |
ipv4 | number | ne | Počet IPv4 adres (1–5). |
cores | number | ne | vCPU (1–16); u ceny podle RAM se dopočítá. |
locale | string | ne | Jazyk hlášek a popisu objednávky: cs, en, sk, pl nebo de. |
immediateStartRequested | boolean | ne | Spotřebitel: true = žádost o okamžité provedení změny, bez ní objednávka nevznikne. |
businessPurpose | boolean | ne | Účet s IČO: true = prohlášení, že jde o podnikání (pak se okamžité provedení nevyžaduje). |
expectedChargeCzk | number | ne | Doplatek, který jste zobrazili; jiný než spočítaný = 409 price_changed. |
expectedMonthlyCzk | number | ne | Nová měsíční cena, kterou jste zobrazili; jiná = 409 price_changed. |
Ukázka těla
{
"ramGb": 8,
"diskGb": 100,
"locale": "cs",
"immediateStartRequested": true,
"expectedChargeCzk": 312,
"expectedMonthlyCzk": 780
}Ukázka odpovědi
{
"orderId": "clx9o4ord0001",
"chargeCzk": 312,
"monthlyToCzk": 780
}Možné chyby
- 400
immediate_start_requiredChybí žádost o okamžité provedení. Bez kódu: neplatné hodnoty (pole field) nebo žádná změna nahoru. - 409
pending_orderUž existuje rozpracovaná objednávka (orderId). Další kódy: billing_profile_incomplete, foreign_eu_vat, unavailable, transfer_pending, upgrade_in_progress, refund_open, renewal_payment, renewal_overdue, capacity. - 409
price_changedCena se změnila; nové hodnoty v newChargeCzk a newMonthlyCzk, nic se nezaložilo. - 503
capacity_unknownVolnou kapacitu teď nejde ověřit. Kód price_list_unavailable: ceník teď nejde načíst.
GET/services/{id}/renewalStav obnovy a platby služby
Vrátí stav obnovy služby, konec zaplaceného období, další platbu, automatické platby a historii výzev. Pro VPS, hry, web a domény; člen sdílené služby dostane jen managed, status a paidUntil.
Oprávnění: services:read
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
locale | string | ne | en pro anglické texty, jinak česky. |
Ukázka odpovědi
{
"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žné chyby
- 400 Tenhle typ služby obnovu v portálu nemá (např. rackhousing).
- 404
not_foundSlužba nenalezena.
POST/services/{id}/renewalZaplatit nebo prodloužit dřív
Vrátí otevřenou výzvu k platbě, nebo vystaví výzvu na další období dřív (nejvýš jedno období dopředu), a odkaz na zaplacení. Nová výzva vrací 201; jen vlastník, limit 20 za hodinu, tělo jako application/json.
Oprávnění: billing:write
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ano | Vždy pay. |
locale | string | ne | Jazyk hlášek a výzvy: cs, en, sk, pl nebo de. |
Ukázka těla
{
"action": "pay",
"locale": "cs"
}Ukázka odpovědi
{
"orderId": "clx9o4ord0003",
"payUrl": "/cs/order/clx9o4ord0003",
"created": true
}Možné chyby
- 400
invalidNeplatné tělo. - 409
not_allowedProdloužit teď nejde. Další kódy: not_managed, terminated, term_end, payment_started, failed. - 429
rate_limitedVíc než 20 požadavků za hodinu. - 503
failedVýzvu se teď nepodařilo vystavit.
PATCH/services/{id}/renewalAutomatické platby a výpověď ke konci období
Zapne nebo vypne platbu z kreditu a kartou a podá nebo zruší výpověď ke konci zaplaceného období. Výpověď zruší otevřené výzvy bez platby, služba skončí s koncem období a přijde potvrzení e-mailem. Jen vlastník, tělo jako application/json.
Oprávnění: billing:write
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
autoCredit | boolean | ne | Platit obnovu automaticky z kreditu. |
autoCard | boolean | ne | Platit obnovu automaticky uloženou kartou. |
endAtTermEnd | boolean | ne | true = výpověď ke konci zaplaceného období, false = zrušit výpověď. |
locale | string | ne | Jazyk hlášek: cs, en, sk, pl nebo de. |
Ukázka těla
{
"endAtTermEnd": true,
"locale": "cs"
}Ukázka odpovědi
{
"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žné chyby
- 400
invalidNeplatné tělo (jiná pole než povolená). - 404
not_allowedSlužba nepatří vašemu účtu. - 409
not_managedSlužba nemá nastavené období. Další kódy: terminated, not_active, period_over, too_late, payment_started. - 415 Tělo není application/json.
GET/services/{id}/web-upgradeNabídka vyššího tarifu webhostingu
Vrátí současný tarif webhostingu a vyšší tarify s doplatkem do konce období. Zatím vrací 409 coming_soon, webhosting ještě nejde měnit online; jen vlastník.
Oprávnění: services:read
Parametry v adrese
| Název | Typ | Povinné | Popis |
|---|---|---|---|
locale | string | ne | en pro anglické texty, jinak česky. |
Ukázka odpovědi
{
"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žné chyby
- 409
coming_soonZměnu tarifu webhostingu zatím nejde objednat online. Kód unavailable: tarif nejde určit nebo služba upgrade nedovoluje. - 400 Služba není webhosting.
- 403 Nejste vlastník služby.
POST/services/{id}/web-upgradeObjednat vyšší tarif webhostingu
Vytvoří objednávku vyššího tarifu se zálohovou fakturou na poměrný doplatek; změna se provede po zaplacení, nižší tarif nastavit nejde. Zatím vrací 409 coming_soon; action cancelPending zruší nezaplacenou objednávku.
Oprávnění: billing:write
Tělo požadavku (JSON)
| Název | Typ | Povinné | Popis |
|---|---|---|---|
action | string | ne | order (výchozí) nebo cancelPending. |
tier | string | ano | Pro order: business nebo pro (jen vyšší než současný). |
locale | string | ne | Jazyk hlášek a popisu objednávky: cs, en, sk, pl nebo de. |
immediateStartRequested | boolean | ne | Spotřebitel: true = žádost o okamžité provedení změny, bez ní objednávka nevznikne. |
businessPurpose | boolean | ne | Účet s IČO: true = prohlášení, že jde o podnikání. |
expectedChargeCzk | number | ne | Doplatek, který jste zobrazili; jiný = 409 price_changed. |
expectedMonthlyCzk | number | ne | Nová měsíční cena, kterou jste zobrazili; jiná = 409 price_changed. |
Ukázka těla
{
"tier": "business",
"locale": "cs",
"immediateStartRequested": true
}Ukázka odpovědi
{
"orderId": "clx9o4ord0004",
"chargeCzk": 48,
"monthlyToCzk": 119
}Možné chyby
- 409
coming_soonZměnu tarifu zatím nejde objednat online. Další kódy: price_changed, pending_order, billing_profile_incomplete, unavailable, unknown_current. - 400
downgradeNižší nebo stejný tarif nastavit nejde. Další kódy: unknown_tier, immediate_start_required. - 503
price_list_unavailableCeník teď nejde načíst, nic se neúčtuje.
Bezpečnost
- Každá aplikace a každé prostředí ať má vlastní klíč s co nejmenšími oprávněními. Když jeden unikne, odvoláte jen ten.
- Klíče, které nepotřebujete, odvolejte. V seznamu klíčů vidíte, kdy a odkud byl klíč naposledy použit.
- Pro citlivé akce (přeinstalace, hesla, převod domény) používejte klíč omezený na IP adresu vašeho serveru.
- Uniklý klíč hned odvolejte v zákaznickém účtu a vytvořte nový. Když máte podezření na zneužití, napište nám.
Co přes API nejde
- přihlášení, heslo, dvoufázové ověření, passkey a přihlášená zařízení
- sdílení služby s dalšími účty a převod služby
- odstoupení od smlouvy a vrácení peněz
- vytváření dalších API klíčů
- nahrávání souborů (použijte SFTP, přístup zjistíte přes API)