LumenHost API

Eine schlanke REST-API zur Verwaltung deiner Server, Domains und Webspaces – Bestellen, Verlängern, Neuinstallieren, DNS verwalten und Live-Werte abrufen, alles direkt aus deinen eigenen Anwendungen.

Vorübergehend deaktiviert – die API ist gerade abgeschaltet und antwortet mit 503. Die Dokumentation bleibt zur Vorbereitung verfügbar; API-Schlüssel kannst du anlegen, sobald sie wieder freigeschaltet ist.
Base URL – alle Pfade in dieser Doku beziehen sich auf https://lumenhost.de/api/v1. Aus /server/list wird also https://lumenhost.de/api/v1/server/list.

Authentifizierung

Jeder Endpoint verlangt einen API-Key. Den Key findest du im Kundenbereich unter API. Er beginnt immer mit pfx_ und wird bei jeder Anfrage im Authorization-Header als Bearer-Token mitgeschickt.

HeaderWert
AuthorizationBearer DEIN_API_KEY erforderlich
Content-Typeapplication/json bei POST/PUT mit Body
Acceptapplication/json optional
Beispiel
curl "https://lumenhost.de/api/v1/server/list" \
  -H "Authorization: Bearer DEIN_API_KEY"

Antwortformat

Jede Antwort ist ein JSON-Objekt mit denselben Feldern. Ob eine Anfrage geklappt hat, erkennst du am HTTP-Statuscode und am Feld state.

FeldBeschreibung
statesuccess wenn die Anfrage ausgeführt wurde, error bei einem Fehler.
messageKurze Meldung. Bei Erfolg meist OK, bei einem Fehler der Grund.
dataDie eigentlichen Nutzdaten. Das Feld fehlt komplett, wenn eine Aktion keine Daten zurückgibt (z. B. beim Starten eines Servers).
Erfolg
{
  "state": "success",
  "message": "OK",
  "data": { ... }
}
Fehler
{
  "state": "error",
  "message": "Server nicht gefunden."
}

HTTP-Statuscodes

200Anfrage erfolgreich ausgeführt.
400Anfrage nicht ausführbar: falscher Zustand des Produkts, ungültige Werte oder ungültiges JSON.
401API-Key fehlt oder ist ungültig.
402Nicht genug Guthaben. Die Meldung nennt den benötigten Betrag.
403Kein Zugriff, Aktion nur für den Inhaber erlaubt oder Konto nicht aktiv.
404Produkt, Paket oder Endpoint nicht gefunden.
409Konflikt mit dem aktuellen Zustand, z. B. Produkt gerade in Bearbeitung.
422Pflichtfeld fehlt oder ein Wert hat das falsche Format. Die Meldung nennt das Feld.
429Rate Limit erreicht.
500Interner Fehler. Bitte den Support mit Uhrzeit und Endpoint kontaktieren.
502Ein angebundenes System (z. B. Registry oder Host) hat nicht korrekt geantwortet. Später erneut versuchen.

Rate Limit

Pro API-Key sind 120 Anfragen innerhalb von 60 Sekunden erlaubt. Jede Antwort enthält den aktuellen Stand im Header.

HeaderBeschreibung
X-RateLimit-LimitErlaubte Anfragen pro 60 Sekunden.
X-RateLimit-RemainingVerbleibende Anfragen im aktuellen Zeitfenster.
Retry-AfterNur bei Status 429: Sekunden bis zum nächsten Versuch.

Datenformate

idProdukte werden über ihre Kennung angesprochen, z. B. PFX-A1B2C3. Domains nehmen auch direkt den Domainnamen.
pricePreise sind Text mit zwei Nachkommastellen und Punkt als Trennzeichen, immer in EUR, z. B. "17.99".
durationLaufzeit in Monaten.
expire_atDatum und Uhrzeit im Format JJJJ-MM-TT HH:MM:SS (Europe/Berlin).
auto_renewAutomatische Verlängerung aus dem Guthaben, immer als Zahl: 1 = aktiv, 0 = aus.

Konto

GET/account/balance Auth

Aktuelles Guthaben des Kontos in Euro abrufen. Alle Bestellungen und Verlängerungen werden sofort hiervon abgebucht.

Response
{
  "state": "success",
  "message": "OK",
  "data": {
    "balance": "25.00",
    "currency": "EUR"
  }
}

Server

GET/server/list Auth

Alle eigenen KVM-Server auflisten, neueste zuerst. Gekündigte Server erscheinen weiterhin mit state = cancelled.

Response
{
  "state": "success",
  "message": "OK",
  "data": {
    "servers": [
      {
        "id": "PFX-A1B2C3",
        "type": "ryzen",
        "state": "active",
        "price": "17.99",
        "duration": 1,
        "expire_at": "2026-11-10 20:43:48",
        "created_at": "2026-10-10 20:43:48",
        "custom_name": "Mein Server",
        "auto_renew": 0
      }
    ]
  }
}
GET/server/os Auth

Verfügbare Betriebssysteme für Bestellung und Neuinstallation. Den Wert proxmox_id gibst du bei /order/server und /server/{id}/reinstall im Feld os an.

Response
{
  "state": "success",
  "message": "OK",
  "data": {
    "operating_systems": [
      { "proxmox_id": "debian-13", "name": "Debian 13" },
      { "proxmox_id": "ubuntu-2404", "name": "Ubuntu 24.04" }
    ]
  }
}
GET/server/{id} Auth

Details, Hardware, Adressen und Live-Werte eines Servers abrufen.

Pfad-Parameter
FeldTypBeschreibung
idstringerforderlichServer-Kennung aus /server/list.
Response
{
  "state": "success",
  "message": "OK",
  "data": {
    "id": "PFX-A1B2C3",
    "type": "ryzen",
    "state": "active",
    "custom_name": "Mein Server",
    "price": "17.99",
    "expire_at": "2026-11-10 20:43:48",
    "auto_renew": 0,
    "hardware": {
      "cores": 4,
      "memory_mb": 16384,
      "disk_gb": 150,
      "connection": 1260
    },
    "network": {
      "ipv4": "203.0.113.21",
      "ipv6": null
    },
    "status": "running",
    "os": "Debian 13",
    "stats": {
      "cpu_percent": 0,
      "memory_used_mb": 1480.91,
      "memory_total_mb": 16384,
      "uptime_seconds": 688637,
      "disk_total_gb": 0,
      "disk_used_gb": 0
    }
  }
}
Mögliche Fehler
404Server nicht gefunden – die Kennung gibt es nicht oder der Server wurde gelöscht.
403Kein Zugriff – der Server gehört dir nicht und ist dir nicht freigegeben.
GET/server/{id}/status Auth

Schnellstatus mit Laufzeit und aktuellen Ressourcenwerten. Schneller als /server/{id} und ideal für regelmäßige Abfragen.

Pfad-Parameter
FeldTypBeschreibung
idstringerforderlichServer-Kennung.
Response
{
  "state": "success",
  "message": "OK",
  "data": {
    "status": "running",
    "uptime": 261355,
    "cpu_percent": 0.29,
    "memory_used_mb": 508.88
  }
}
GET/server/{id}/network Auth

Alle Adressen des Servers mit Gateway. Diese Werte brauchst du, wenn du das Netzwerk im Server selbst einrichtest.

Pfad-Parameter
FeldTypBeschreibung
idstringerforderlichServer-Kennung.
Response
{
  "state": "success",
  "message": "OK",
  "data": {
    "ipv4": [
      { "ip": "203.0.113.21", "gateway": "203.0.113.1", "type": "main" }
    ],
    "ipv6": []
  }
}
GET/server/{id}/console Auth

VNC-Konsolenzugang im Browser. Der Link ist nur 2 Minuten gültig – direkt öffnen und nicht speichern.

Pfad-Parameter
FeldTypBeschreibung
idstringerforderlichServer-Kennung. Der Server muss eingerichtet sein.
Response
{
  "state": "success",
  "message": "Der Link ist 2 Minuten gültig.",
  "data": {
    "console_url": "https://lumenhost.de/console.php?token=..."
  }
}
POST/server/{id}/start Auth

Server starten. Der Befehl wird sofort abgesetzt, der Server braucht danach noch einige Sekunden. Kein Request Body. Bei Erfolg enthält die Antwort kein Feld data.

Pfad-Parameter
FeldTypBeschreibung
idstringerforderlichServer-Kennung.
Response
{
  "state": "success",
  "message": "Server is starting"
}
POST/server/{id}/stop Auth

Server sofort ausschalten (vergleichbar mit dem Ziehen des Stromkabels). Für ein sauberes Herunterfahren den Server vorher im Betriebssystem herunterfahren.

Pfad-Parameter
FeldTypBeschreibung
idstringerforderlichServer-Kennung.
Response
{
  "state": "success",
  "message": "Server is stopping"
}
POST/server/{id}/restart Auth

Server neustarten. Er wird ausgeschaltet und danach automatisch wieder gestartet.

Pfad-Parameter
FeldTypBeschreibung
idstringerforderlichServer-Kennung.
Response
{
  "state": "success",
  "message": "Server is restarting"
}
POST/server/{id}/password Auth

Root-Passwort ändern. Das Passwort wird direkt im Server gesetzt – der Server muss dafür eingeschaltet sein.

Pfad-Parameter
FeldTypBeschreibung
idstringerforderlichServer-Kennung.
Request Body
FeldTypBeschreibung
passwordstringerforderlichNeues Passwort, mindestens 8 Zeichen.
Request
{
  "password": "NeuesPasswort123"
}
Response
{
  "state": "success",
  "message": "Password changed successfully"
}
Mögliche Fehler
422Pflichtfeld password fehlt.
400Passwort zu kurz (mindestens 8 Zeichen).
POST/server/{id}/reinstall Auth

Server mit einem neuen Betriebssystem neu installieren. Alle Daten werden gelöscht. Adressen, Hardware und Laufzeit bleiben gleich. Nur der Inhaber.

Pfad-Parameter
FeldTypBeschreibung
idstringerforderlichServer-Kennung.
Request Body
FeldTypBeschreibung
osstringerforderlichBetriebssystem-ID (proxmox_id) aus /server/os.
passwordstringoptionalNeues Root-Passwort. Ohne Angabe wird automatisch eines erzeugt.
Request
{
  "os": "debian-13",
  "password": "NeuesPasswort123"
}
Response
{
  "state": "success",
  "message": "Server reinstallation queued",
  "data": {
    "password": "NeuesPasswort123"
  }
}
POST/server/{id}/renew Auth

Server um seine Laufzeit verlängern. Der Preis wird sofort vom Guthaben abgebucht, das neue Ende wird vom bisherigen Ablaufdatum aus gerechnet. Nur der Inhaber.

Pfad-Parameter
FeldTypBeschreibung
idstringerforderlichServer-Kennung.
Response
{
  "state": "success",
  "message": "Server renewed successfully",
  "data": {
    "new_expire_at": "2026-12-10 20:43:48",
    "charged": "17.99"
  }
}
Mögliche Fehler
403Only the owner can renew – der Server ist dir nur freigegeben.
402Insufficient balance – nicht genug Guthaben.
PUT/server/{id}/auto-renew Auth

Automatische Verlängerung aktivieren oder deaktivieren. Nur der Inhaber.

Pfad-Parameter
FeldTypBeschreibung
idstringerforderlichServer-Kennung.
Request Body
FeldTypBeschreibung
enablednumberoptional1 = aktivieren, 0 = deaktivieren. Ohne Angabe wird der aktuelle Wert umgeschaltet.
Request
{
  "enabled": 1
}
Response
{
  "state": "success",
  "message": "Auto-renew enabled",
  "data": {
    "auto_renew": 1
  }
}
GET/server/{id}/traffic Auth

Netzwerk-Traffic über einen Zeitraum, passend für eigene Diagramme. Die Listen time, in und out sind gleich lang.

Pfad-Parameter
FeldTypBeschreibung
idstringerforderlichServer-Kennung.
Query-Parameter
FeldTypBeschreibung
periodstringoptionalZeitraum: hour, day, week, month, year (Standard: hour).
Response
{
  "state": "success",
  "message": "OK",
  "data": {
    "period": "hour",
    "unit": "bit/s",
    "time": [1723632000, 1723632060],
    "in":   [1200000, 1450000],
    "out":  [850000, 930000]
  }
}

Webspace

GET/webspace/list Auth

Alle eigenen Webspaces auflisten, neueste zuerst.

Response
{
  "state": "success",
  "message": "OK",
  "data": {
    "webspaces": [
      {
        "id": "PFX-W1X2Y3",
        "type": "webspace",
        "state": "active",
        "price": "4.99",
        "duration": 1,
        "created_at": "2026-09-20 12:00:00",
        "expire_at": "2026-10-20 12:00:00",
        "auto_renew": 0,
        "plan": "WEB STARTER"
      }
    ]
  }
}
GET/webspace/{id} Auth

Details und Benutzername eines Webspaces. Nur für den Inhaber. Das Passwort wird aus Sicherheitsgründen nicht ausgegeben.

Pfad-Parameter
FeldTypBeschreibung
idstringerforderlichWebspace-Kennung aus /webspace/list.
Response
{
  "state": "success",
  "message": "OK",
  "data": {
    "id": "PFX-W1X2Y3",
    "type": "webspace",
    "state": "active",
    "price": "4.99",
    "duration": 1,
    "created_at": "2026-09-20 12:00:00",
    "expire_at": "2026-10-20 12:00:00",
    "auto_renew": 0,
    "credentials": {
      "username": "web1268ec03",
      "ftp_username": "web1268ec03"
    },
    "plan": "WEB STARTER"
  }
}
POST/webspace/{id}/renew Auth

Aktiven Webspace um seine Laufzeit verlängern. Der Betrag wird sofort vom Guthaben abgebucht.

Pfad-Parameter
FeldTypBeschreibung
idstringerforderlichWebspace-Kennung.
Response
{
  "state": "success",
  "message": "Webspace renewed",
  "data": {
    "new_expire_at": "2026-11-20 12:00:00"
  }
}
POST/webspace/{id}/reinstall Auth

Webspace vollständig neu installieren. Alle Dateien, Datenbanken und Postfächer werden gelöscht. Der Benutzername bleibt erhalten. Nur der Inhaber.

Pfad-Parameter
FeldTypBeschreibung
idstringerforderlichWebspace-Kennung.
Request Body
FeldTypBeschreibung
passwordstringoptionalNeues Passwort, mindestens 8 Zeichen. Ohne Angabe wird eines erzeugt.
Request
{
  "password": "NeuesPasswort123"
}
Response
{
  "state": "success",
  "message": "Webspace reinstallation queued",
  "data": {
    "product_id": "PFX-W1X2Y3",
    "state": "reinstall",
    "username": "web1268ec03",
    "password": "NeuesPasswort123"
  }
}
GET/products/webspace/packages Auth

Alle bestellbaren Webspace-Pakete mit Leistungen und Preisen. Die id gibst du bei /order/webspace als package_id an.

Response
{
  "state": "success",
  "message": "OK",
  "data": [
    {
      "id": "1",
      "name": "WEB STARTER",
      "disk": 25,
      "domains": 1,
      "subdomains": 5,
      "databases": 5,
      "ftp_accounts": 5,
      "emails": 10,
      "price": "4.99",
      "offer_price": "4.99",
      "duration": 1
    }
  ]
}

Domain

GET/domain/list Auth

Alle eigenen Domains auflisten, neueste zuerst.

Query-Parameter
FeldTypBeschreibung
pagenumberoptionalSeite der Ergebnisse (Standard: 1).
per_pagenumberoptionalEinträge pro Seite, höchstens 100 (Standard: 20).
Response
{
  "state": "success",
  "message": "OK",
  "data": {
    "domains": [
      {
        "id": "PFX-D1E2F3",
        "domain": "beispiel.de",
        "tld": "de",
        "state": "active",
        "price": "4.99",
        "auto_renew": 0,
        "expire_at": "2027-10-03 12:00:00",
        "created_at": "2026-10-03 12:00:00"
      }
    ],
    "page": 1,
    "per_page": 20,
    "total": 1
  }
}
GET/domain/pricelist Auth

Domain-Preisliste für alle angebotenen Endungen. Die Preise gelten für deine Resellerstufe und sind genau die Beträge, die bei Bestellung oder Verlängerung berechnet werden.

Query-Parameter
FeldTypBeschreibung
tldstringoptionalNur eine Endung, mit oder ohne Punkt, z. B. de.
Response
{
  "state": "success",
  "message": "OK",
  "data": {
    "tlds": [
      {
        "tld": "de",
        "register_price": "4.99",
        "renew_price": "4.99",
        "transfer_price": "0.99",
        "restore_price": "0.00"
      }
    ]
  }
}
POST/domain/check Auth

Prüfen, ob eine Domain frei ist. Ist sie vergeben, kann sie mit AuthCode über /order/domain transferiert werden.

Request Body
FeldTypBeschreibung
domainstringerforderlichDomainname ohne http:// und ohne Pfad, z. B. beispiel.de.
Request
{
  "domain": "beispiel.de"
}
Response
{
  "state": "success",
  "message": "OK",
  "data": {
    "domain": "beispiel.de",
    "available": true,
    "premium": false
  }
}
GET/domain/{id} Auth

Domain-Details abrufen, inklusive der hinterlegten Inhaberdaten (WHOIS).

Pfad-Parameter
FeldTypBeschreibung
idstringerforderlichDomain-Kennung oder direkt der Domainname, z. B. /domain/beispiel.de.
Response
{
  "state": "success",
  "message": "OK",
  "data": {
    "id": "PFX-D1E2F3",
    "domain": "beispiel.de",
    "tld": "de",
    "state": "active",
    "price": "4.99",
    "auto_renew": 0,
    "expire_at": "2027-10-03 12:00:00",
    "created_at": "2026-10-03 12:00:00",
    "whois": {
      "firstname": "Max",
      "lastname": "Mustermann",
      "street": "Musterstraße",
      "number": "1",
      "postcode": "54290",
      "city": "Trier",
      "state": "Rheinland-Pfalz",
      "country": "DE",
      "email": "[email protected]",
      "phone": "+49.65112345"
    }
  }
}
GET/domain/{id}/dns Auth

DNS-Records der Domain auf unseren Nameservern auflisten.

Pfad-Parameter
FeldTypBeschreibung
idstringerforderlichDomain-Kennung oder Domainname.
Response
{
  "state": "success",
  "message": "OK",
  "data": {
    "records": [
      { "name": "", "type": "A", "data": "203.0.113.10", "ttl": 3600 },
      { "name": "www", "type": "CNAME", "data": "beispiel.de", "ttl": 3600 }
    ]
  }
}
POST/domain/{id}/dns Auth

DNS-Records ändern. Es wird immer die komplette Liste geschickt: Alles, was nicht in der Liste steht, wird gelöscht. Am einfachsten lädst du die Liste per GET, änderst sie und schickst sie zurück.

Pfad-Parameter
FeldTypBeschreibung
idstringerforderlichDomain-Kennung oder Domainname.
Request Body
FeldTypBeschreibung
recordsarrayerforderlichKomplette Liste der gewünschten Records. Ein leeres Array löscht alle Records.
Request
{
  "records": [
    { "name": "@",   "type": "A",     "data": "203.0.113.10", "ttl": 3600 },
    { "name": "www", "type": "CNAME", "data": "beispiel.de" },
    { "name": "@",   "type": "MX",    "data": "10 mail.beispiel.de" },
    { "name": "@",   "type": "TXT",   "data": "v=spf1 mx -all" }
  ]
}
Response
{
  "state": "success",
  "message": "OK",
  "data": {
    "records": [
      { "name": "", "type": "A", "data": "203.0.113.10", "ttl": 3600 }
    ]
  }
}
GET/domain/{id}/nameserver Auth

Aktuell bei der Registry eingetragene Nameserver abrufen.

Pfad-Parameter
FeldTypBeschreibung
idstringerforderlichDomain-Kennung oder Domainname.
Response
{
  "state": "success",
  "message": "OK",
  "data": {
    "nameservers": ["ns1.lumenhost.de", "ns2.lumenhost.de"]
  }
}
POST/domain/{id}/nameserver Auth

Nameserver der Domain ändern. Fremde Nameserver sind erlaubt. Ohne Angabe gültiger Werte werden unsere Standard-Nameserver gesetzt.

Pfad-Parameter
FeldTypBeschreibung
idstringerforderlichDomain-Kennung oder Domainname.
Request Body
FeldTypBeschreibung
nameserversarrayerforderlich2 bis 5 Hostnamen.
Request
{
  "nameservers": ["ns1.lumenhost.de", "ns2.lumenhost.de"]
}
Response
{
  "state": "success",
  "message": "OK",
  "data": {
    "nameservers": ["ns1.lumenhost.de", "ns2.lumenhost.de"]
  }
}
GET/domain/{id}/authcode Auth

AuthCode für den Transfer der Domain zu einem anderen Anbieter abrufen. Nur für den Inhaber und nur bei aktiven Domains.

Pfad-Parameter
FeldTypBeschreibung
idstringerforderlichDomain-Kennung oder Domainname.
Response
{
  "state": "success",
  "message": "OK",
  "data": {
    "authcode": "A1b2-C3d4-E5f6"
  }
}
POST/domain/{id}/renew Auth

Domain um ihre Laufzeit (12 Monate) verlängern. Der Preis wird vom Guthaben abgebucht. Lehnt die Registry ab, wird der Betrag sofort zurückgebucht. Nur der Inhaber.

Pfad-Parameter
FeldTypBeschreibung
idstringerforderlichDomain-Kennung oder Domainname.
Response
{
  "state": "success",
  "message": "OK",
  "data": {
    "expire_at": "2028-10-03 12:00:00",
    "charged": "4.99"
  }
}

Bestellungen

GET/order/server/priceöffentlich

Öffentliche Preisliste aller KVM-Pakete – ohne Token abrufbar, z. B. für eigene Preisvergleiche oder Shops.

Response
{
  "state": "success",
  "message": "OK",
  "data": {
    "prices": [
      { "type": "server-ryzen", "plan": "RYZEN 4G", "cores": 1, "memory_gb": 4, "disk_gb": 50, "price": "5.99" }
    ]
  }
}
GET/order/webspace/priceöffentlich

Öffentliche Preisliste aller Webspace-Pakete. Limits mit dem Wert unlimited sind unbegrenzt.

Response
{
  "state": "success",
  "message": "OK",
  "data": {
    "prices": [
      { "plan_id": 1, "name": "WEB STARTER", "disk_gb": 10, "databases": 1, "domains": 1, "mailboxes": 5, "price": "0.99" }
    ]
  }
}
GET/webspace/plansöffentlich

Alias für /products/webspace/packages – liefert dieselben Webspace-Pakete, ohne Token.

Response
{
  "state": "success",
  "message": "OK",
  "data": [ { "id": "1", "name": "WEB STARTER", "disk": 10, "price": "0.99", "duration": 1 } ]
}
GET/products/server/packages Auth

Alle bestellbaren KVM-Pakete. Die id gibst du bei /order/server als package_id an.

Response
{
  "state": "success",
  "message": "OK",
  "data": [
    {
      "id": "12",
      "name": "EPYC S",
      "type": "epyc",
      "cores": 2,
      "memory": 4096,
      "disk": 50,
      "ipv4_amount": 1,
      "ipv6_amount": 1,
      "price": "7.99",
      "offer_price": "7.99",
      "duration": 1
    }
  ]
}
POST/order/server Auth

Neuen KVM-Server bestellen. Zwei Modi: Paketbestellung über package_id oder frei konfigurierbar über type, cores, memory, disk. Beides zusammen ist nicht erlaubt. Der Preis wird sofort vom Guthaben abgebucht.

Request Body
FeldTypBeschreibung
package_idstringoptionalPaket-ID aus /products/server/packages (Paketmodus).
typestringoptionalCPU-Typ: epyc, ryzen oder xeon (Konfigurationsmodus).
coresnumberoptionalAnzahl CPU-Kerne (Konfigurationsmodus).
memorynumberoptionalRAM in MB, nur volle GB-Schritte (Vielfaches von 1024).
disknumberoptionalSpeicher in GB (Konfigurationsmodus).
ipv4numberoptionalAnzahl IPv4-Adressen (aktuell nur 1 möglich).
osstringerforderlichBetriebssystem-ID aus /server/os.
passwordstringoptionalRoot-Passwort. Ohne Angabe wird eines erzeugt.
namestringoptionalAnzeigename.
auto_renewnumberoptional1 = automatische Verlängerung von Anfang an aktiv.
tosbooleanerforderlichAGB und Datenschutz mit true akzeptieren.
cancellationbooleanerforderlichWiderrufsverzicht mit true bestätigen.
Request
{
  "type": "epyc",
  "cores": 4,
  "memory": 16384,
  "disk": 150,
  "ipv4": 1,
  "os": "debian-13",
  "tos": true,
  "cancellation": true,
  "auto_renew": 0
}
Response
{
  "state": "success",
  "message": "Server order placed. Installation in progress.",
  "data": {
    "product_id": "PFX-A1B2C3",
    "proxmox_id": null,
    "order_mode": "config",
    "package_id": null,
    "type": "epyc",
    "cpu_typ": "EPYC",
    "state": "install",
    "cores": 4,
    "memory": 16384,
    "disk": 150,
    "ipv4_amount": 1,
    "ipv6_amount": 1,
    "duration": 1,
    "price": "17.99",
    "offer_price": "17.99",
    "password": "...",
    "expire_at": "2026-11-10 20:43:48"
  }
}
Mögliche Fehler
400Paket und Einzelwerte zusammen geschickt, oder weder Paket noch Konfiguration angegeben.
422Pflichtfeld fehlt (z. B. os) oder tos/cancellation nicht bestätigt.
402Insufficient balance – nicht genug Guthaben.
POST/order/webspace Auth

Neuen Webspace bestellen. Das Paket wählst du über die package_id aus /products/webspace/packages.

Request Body
FeldTypBeschreibung
package_idstringerforderlichPaket-ID aus /products/webspace/packages.
passwordstringoptionalPasswort, mindestens 8 Zeichen. Ohne Angabe wird eines erzeugt.
namestringoptionalAnzeigename.
auto_renewnumberoptional1 = automatische Verlängerung aktiv.
tosbooleanerforderlichAGB und Datenschutz mit true akzeptieren.
cancellationbooleanerforderlichWiderrufsverzicht mit true bestätigen.
Request
{
  "package_id": "1",
  "name": "Mein Webspace",
  "tos": true,
  "cancellation": true
}
Response
{
  "state": "success",
  "message": "Webspace order placed. Installation in progress.",
  "data": {
    "product_id": "PFX-W1X2Y3",
    "type": "webspace",
    "state": "install",
    "package_id": "1",
    "package": "WEB STARTER",
    "username": "web1268ec03",
    "password": "NeuesPasswort123",
    "duration": 1,
    "price": "4.99",
    "expire_at": "2026-10-20 12:00:00",
    "auto_renew": 0
  }
}
POST/order/domain Auth

Neue Domain registrieren oder eine bestehende Domain mit AuthCode transferieren. Der Preis wird sofort vom Guthaben abgebucht. Die Kontaktdaten werden als Inhaber bei der Registry hinterlegt.

Request Body
FeldTypBeschreibung
domainstringerforderlichDomainname, z. B. beispiel.de.
authcodestringoptionalAuthCode vom bisherigen Anbieter (nur für Transfer).
firstnamestringerforderlichVorname des Inhabers.
lastnamestringerforderlichNachname des Inhabers.
streetstringerforderlichStraße ohne Hausnummer.
numberstringerforderlichHausnummer.
postcodestringerforderlichPostleitzahl.
citystringerforderlichStadt.
countrystringerforderlichLand als ISO-Code, z. B. DE.
emailstringerforderlichE-Mail des Inhabers.
phonestringerforderlichTelefonnummer, z. B. +49.65112345.
Request
{
  "domain": "beispiel.de",
  "firstname": "Max",
  "lastname": "Mustermann",
  "street": "Musterstraße",
  "number": "1",
  "postcode": "54290",
  "city": "Trier",
  "country": "DE",
  "email": "[email protected]",
  "phone": "+49.65112345"
}
Response
{
  "state": "success",
  "message": "Domain bestellt.",
  "data": {
    "id": "PFX-D1E2F3",
    "domain": "beispiel.de",
    "price": "4.99"
  }
}