Skip to content
Hosting · Konfigurácia servera

Serverové API pre botov

Klientske API Millida Hosting: vydanie kľúča, oprávnenia, správa servera a streamovanie konzoly z vlastného bota alebo skriptu.

Aktualizované 13. októbra 2026

Všetko, čo vie ovládací panel, sa dá robiť aj z vlastného kódu: naštartovať server podľa plánu, zobraziť stav v Discord, posielať príkazy z bota.

Kľúč

API je dostupné na každom platenom pláne — na tom istom mieste, kde sú súbory, SFTP a prístup pre tím. Na bezplatnom pláne sa kľúč nevydáva: kľúč je ten istý zdieľaný prístup, len pre bota.

Sekcia „Hráči a prístup“ → „API kľúče“ → „Vydať“. Skontroluj, čo kľúč smie robiť — oprávnenia sú rovnaké ako pri zdieľanom prístupe.

Kľúč sa zobrazí raz: ukladáme len jeho odtlačok. Ak ho stratíš, vydaj nový a starý odvolaj.

Kľúč sa odovzdáva v hlavičke Authorization: Bearer mhk_live_....

Metódy

Základná URL — https://millida.net/v2/hosting/api.

MetódaČo robíPožadované oprávnenie
GET /serverKarta serveraconsole
GET /statusStav a onlineconsole
POST /startŠtartstart
POST /stopZastaveniestart
POST /restartReštartstart
POST /commandPríkaz do konzolyconsole
GET /consoleŽivý log (SSE)console
GET /files?path=Zoznam súborovfiles
GET /files/configsKtoré konfigy číta formulárfiles
GET /files/config?path=Nastavenia súboru s typmifiles
POST /files/configZmena nastavení súborufiles
GET /backupsZoznam zálohbackups
POST /backupsVytvorenie zálohybackups
GET /antibotNastavenia anti-bota, backendy a pravidlá firewalluprotection
PUT /antibotZmena nastavení ochranyprotection
GET /antibot/overview?range=Pripojenia a odmietnutia za hour, day alebo weekprotection
POST /antibot/backendsPridanie backendu {"address":"host:port","label":"..."}protection
DELETE /antibot/backends/{id}Odstránenie backenduprotection
POST /antibot/rulesPravidlo firewallu {"kind":"allow"|"deny","cidr":"1.2.3.0/24"}protection
DELETE /antibot/rules/{id}Odstránenie pravidlaprotection
POST /antibot/verify-domain/checkKontrola DNS pre doménu tvojej overovacej stránkyprotection

Príklad: naštartuj server a počkaj, kým nabehne online

KEY="mhk_live_xxx"
API="https://millida.net/v2/hosting/api"

curl -sX POST "$API/start" -H "Authorization: Bearer $KEY"

until curl -s "$API/status" -H "Authorization: Bearer $KEY" | grep -q RUNNING; do
  sleep 5
done
echo "server online"

Zálohy sa vytvárajú na pozadí

POST /backups vráti {"id":"..."} okamžite, zatiaľ čo samotný archív sa skladá na node: svet s niekoľkými gigabajtmi trvá minúty. Pripravenosť skontroluj v GET /backups cez pole status: pending — ešte sa skladá, ready — uložená v storage (vtedy sa objaví reálne sizeMb), failed — skladanie zlyhalo.

ID=$(curl -sX POST "$API/backups" -H "Authorization: Bearer $KEY" | jq -r .id)

until curl -s "$API/backups" -H "Authorization: Bearer $KEY" \
  | jq -e --arg id "$ID" '.[] | select(.id==$id) | select(.status=="ready")' >/dev/null; do
  sleep 15
done
echo "backup ready"

Kým záloha prebieha, na tom istom serveri sa nedá vytvoriť druhá — node ich robí po jednej.

Živá konzola

GET /console vracia Server-Sent Events stream: každý riadok prichádza s prefixom data:. WebSocket netreba — SSE prejde cez akúkoľvek proxy.

Čo by si mal vedieť

  • Každá akcia kľúča sa loguje v logu servera s autorom „API key N“. Presne to potrebuješ, keď servery prevádzkujú aj ľudia, aj boti.
  • Rate limiting sa počíta na kľúč, nie na adresu: zmena IP neobíde limit a sused v office sieti ho nespotrebúva. Pre bežnú automatizáciu je štedrý, ale polling stavu raz za sekundu naň narazí — raz za 10–15 sekúnd stačí. Stream konzoly sa dá otvoriť až desaťkrát za minútu: drž jedno spojenie namiesto otvárania nového pre každú správu.
  • Kľúč prestane fungovať okamžite, ak je server pozastavený alebo plán už nie je platený. Ručne ho na to odvolávať netreba.
  • Až päť kľúčov na server. Tie, ktoré nepotrebuješ, odvolaj.

Anti-bot ochrana

GET /antibot vracia nastavenia v dvoch poliach. config — vlastné nastavenia servera; kým neexistujú, je to null a server je chránený predvolene (pole default). effective je prítomné vždy: to sú nastavenia, ktoré práve platia alebo s ktorými bude server pracovať po prvej úprave — hodnoty čítaj z neho.

PUT /antibot prijíma len polia, ktoré chceš zmeniť:

curl -sX PUT "$API/antibot" -H "Authorization: Bearer $KEY"   -H 'Content-Type: application/json'   -d '{"preset":"balanced"}'

Úrovne (preset): off, under_attack, balanced, aggressive, custom. Úroveň si sama rozbalí hodnoty kontrol, takže pri ručnej konfigurácii zvoľ custom a pošli kontroly: checkCaptcha, checkPhysics, checkKeepAlive, checkTeleport, checkBrand, checkPing, checkTransfer, checkClientSettings — každá z nich off, under_attack alebo always. Zoznamy adries (vpnMode, datacenterMode, torMode) — off, log alebo block. Geo filter — geoMode (off, allow, deny) a geoCountries (kódy krajín, napr. ["RU","BY"]).

Forwarding secret sa cez API nevydáva ani nemení: zobrazuje sa len vlastníkovi v paneli.

Nastavenia konfigov

GET /files/config?path=server.properties vráti naparsovaný súbor — každý záznam s typom, aktuálnou hodnotou a príznakom „vyžaduje reštart“:

{
  "path": "server.properties",
  "format": "properties",
  "options": [
    { "key": "pvp", "type": "boolean", "value": "true", "owner": "sync", "requiresRestart": false },
    { "key": "difficulty", "type": "select", "value": "normal", "values": ["peaceful", "easy", "normal", "hard"], "owner": "sync", "requiresRestart": false },
    { "key": "server-port", "type": "integer", "value": "25565", "owner": "platform", "requiresRestart": true }
  ]
}

owner ti povie, čo sa so záznamom dá robiť: platform — hodnotu nastavuje hosting, úpravy sa odmietnu; sync — záznam existuje aj v paneli, aj v súbore; file — vie o ňom len súbor.

Zápis mení len kľúče, ktoré pošleš; všetko ostatné v súbore zostáva nedotknuté:

curl -sX POST "$API/files/config" -H "Authorization: Bearer $KEY"   -H 'Content-Type: application/json'   -d '{"path":"server.properties","values":{"pvp":"false","difficulty":"hard"}}'

Formulár číta .properties, .yml/.yaml a .toml — vrátane konfigov pluginov, o ktorých panel nič nevie: typ poľa sa odvodí z hodnoty. Vnorené kľúče sa adresujú bodkou: settings.bungeecord, advanced.compression-threshold.

Celý súbor je stále dostupný cez GET/PUT /files/content?path= — obe cesty zapisujú na to isté miesto.

Hotový klient v Node.js a Pythone

Nižšie je minimálny klient: skontroluje stav, spustí server a napíše do chatu. Kľúč sa načítava z premennej prostredia MILLIDA_KEY — nevkladaj ho do kódu, ktorý skončí v gite. Chybová odpoveď je JSON s poľom message; to by mal tvoj bot zalogovať.

Node.js 18+ (vstavaný fetch):

const API = 'https://millida.net/v2/hosting/api';
const KEY = process.env.MILLIDA_KEY;

async function call(method, path, body) {
  const res = await fetch(`${API}${path}`, {
    method,
    headers: { Authorization: `Bearer ${KEY}`, 'Content-Type': 'application/json' },
    body: body ? JSON.stringify(body) : undefined,
  });
  if (!res.ok) throw new Error(`${method} ${path}: ${res.status} ${await res.text()}`);
  return res.status === 204 ? null : res.json();
}

const status = await call('GET', '/status');
if (status.status !== 'RUNNING') await call('POST', '/start');
await call('POST', '/command', { command: 'say Hello from the bot' });

Python 3 s knižnicou requests a navyše čítanie živého konzoly:

import os
import requests

API = "https://millida.net/v2/hosting/api"
session = requests.Session()
session.headers["Authorization"] = f"Bearer {os.environ['MILLIDA_KEY']}"

def call(method, path, body=None):
    res = session.request(method, API + path, json=body, timeout=15)
    res.raise_for_status()
    return res.json() if res.content else None

status = call("GET", "/status")
if status["status"] != "RUNNING":
    call("POST", "/start")
call("POST", "/command", {"command": "say Hello from the bot"})

with session.get(API + "/console", stream=True, timeout=None) as stream:
    for line in stream.iter_lines(decode_unicode=True):
        if line and line.startswith("data:"):
            print(line[5:].strip())
Minecraft hostingTvoj server beží, aj keď si offlineVytvoriť server