Skip to content
Hosting · Konfiguracija servera

Server API za botove

Millida Hosting klijentski API: izdavanje ključa, dozvole, upravljanje serverom i strimovanje konzole iz sopstvenog bota ili skripte.

Ažurirano 13. oktobar 2026.

Sve što panel radi možeš da uradiš i iz svog koda: pokreni server po rasporedu, prikaži status u Discord-u, šalji komande iz bota.

Ključ

API je dostupan na svakom plaćenom planu — na istom mestu gde su fajlovi, SFTP i pristup za tim. Na besplatnom planu ključ se ne izdaje: ključ je isti deljeni pristup, samo za bota.

Sekcija „Igrači i pristup” → „API ključevi” → „Izdaj”. Proveri šta ključ sme da radi — dozvole su iste kao za deljeni pristup.

Ključ se prikazuje samo jednom: čuvamo samo njegov otisak. Ako ga izgubiš, izdaj novi i opozovi stari.

Ključ se prosleđuje u zaglavlju Authorization: Bearer mhk_live_....

Metode

Osnovni URL — https://millida.net/v2/hosting/api.

MetodaŠta radiPotrebna dozvola
GET /serverKartica serveraconsole
GET /statusStatus i onlineconsole
POST /startPokretanjestart
POST /stopZaustavljanjestart
POST /restartRestartstart
POST /commandKomanda u konzoluconsole
GET /consoleLog uživo (SSE)console
GET /files?path=Lista fajlovafiles
GET /files/configsKoje konfiguracije čita formafiles
GET /files/config?path=Podešavanja fajla sa tipovimafiles
POST /files/configIzmena podešavanja fajlafiles
GET /backupsLista bekapabackups
POST /backupsKreiranje bekapabackups
GET /antibotAnti-bot podešavanja, backend-ovi i firewall pravilaprotection
PUT /antibotIzmena podešavanja zaštiteprotection
GET /antibot/overview?range=Konekcije i odbijanja za hour, day ili weekprotection
POST /antibot/backendsDodaj backend {"address":"host:port","label":"..."}protection
DELETE /antibot/backends/{id}Ukloni backendprotection
POST /antibot/rulesFirewall pravilo {"kind":"allow"|"deny","cidr":"1.2.3.0/24"}protection
DELETE /antibot/rules/{id}Ukloni praviloprotection
POST /antibot/verify-domain/checkProveri DNS za domen svoje verifikacione straniceprotection

Primer: pokreni server i sačekaj da dođe 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"

Bekapi se kreiraju u pozadini

POST /backups odmah vraća {"id":"..."}, dok se sam arhiv sastavlja na nodu: svet od nekoliko gigabajta traje minutima. Spremnost proveri u GET /backups preko polja status: pending — još se sastavlja, ready — sačuvan u skladištu (tada se pojavljuje pravi sizeMb), failed — nije uspelo sastavljanje.

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"

Dok je bekaping u toku, ne možeš da napraviš drugi na istom serveru — nod ih radi jedan po jedan.

Konzola uživo

GET /console vraća Server-Sent Events tok: svaka linija stiže sa prefiksom data:. WebSocket nije potreban — SSE prolazi kroz svaki proxy.

Šta treba da znaš

  • Svaka akcija ključa se beleži u log servera sa autorom „API key N”. To je upravo ono što ti treba kada i ljudi i botovi pokreću servere.
  • Ograničenje brzine se računa po ključu, ne po adresi: promena IP-a ne zaobilazi limit, a komšija na kancelarijskoj mreži ga ne troši. Za normalnu automatizaciju je velikodušno, ali proveravanje statusa jednom u sekundi će ga pogoditi — dovoljno je jednom u 10–15 sekundi. Tok konzole možeš da otvoriš do deset puta u minutu: drži jednu konekciju umesto da otvaraš novu za svaku poruku.
  • Ključ odmah prestaje da radi ako je server suspendovan ili plan više nije plaćen. Zbog toga ne moraš ručno da ga opozivaš.
  • Do pet ključeva po serveru. Opozovi one koji ti ne trebaju.

Anti-bot zaštita

GET /antibot vraća podešavanja u dva polja. config — sopstvena podešavanja servera; dok ne postoje, to je null, a server je zaštićen podrazumevano (polje default). effective je uvek prisutno: to su podešavanja koja su trenutno na snazi ili sa kojima će server raditi posle prve izmene — čitaj vrednosti iz njega.

PUT /antibot prihvata samo polja koja želiš da izmeniš:

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

Nivoi (preset): off, under_attack, balanced, aggressive, custom. Nivo sam razvija vrednosti provera, pa za ručnu konfiguraciju izaberi custom i pošalji provere: checkCaptcha, checkPhysics, checkKeepAlive, checkTeleport, checkBrand, checkPing, checkTransfer, checkClientSettings — svaka može biti off, under_attack ili always. Liste adresa (vpnMode, datacenterMode, torMode) — off, log ili block. Geo filter — geoMode (off, allow, deny) i geoCountries (kodovi država, npr. ["RU","BY"]).

Tajna za prosleđivanje se ne izdaje niti menja preko API-ja: prikazuje se samo vlasniku u panelu.

Podešavanja konfiguracija

GET /files/config?path=server.properties vraća parsiran fajl — svaki unos sa svojim tipom, trenutnom vrednošću i oznakom „potreban restart”:

{
  "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 kaže šta možeš sa unosom: platform — vrednost postavlja hosting, izmene se odbijaju; sync — unos postoji i u panelu i u fajlu; file — samo fajl zna za njega.

Upis menja samo ključeve koje pošalješ; sve ostalo u fajlu ostaje netaknuto:

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

Forma čita .properties, .yml/.yaml i .toml — uključujući konfiguracije pluginova za koje panel ne zna: tip polja se zaključuje iz vrednosti. Ugnježdeni ključevi se adresiraju tačkom: settings.bungeecord, advanced.compression-threshold.

Ceo fajl je i dalje dostupan preko GET/PUT /files/content?path= — oba puta pišu na isto mesto.

Gotov klijent u Node.js i Python-u

Ispod je minimalni klijent: proverava status, pokreće server i piše u čet. Ključ se čita iz promenljive okruženja MILLIDA_KEY — ne lepi ga u kod koji završi u gitu. Odgovor sa greškom je JSON sa poljem message; to treba da beleži tvoj bot.

Node.js 18+ (ugrađeni 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 sa bibliotekom requests, plus čitanje konzole uživo:

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 radi i dok si oflajnNapravi server