{"openapi":"3.1.0","info":{"title":"CTS-Hosting Kundenbereich API","version":"1.0.0","description":"Referenz für Kundenrouten. Authentifizierung per API-Key (Bearer cts_live_...), ausgenommen die Kontoverwaltung unter /auth/*, die eine Browser-Sitzung voraussetzt. Administrative, Staff-, Webhook- und öffentliche Login-Routen sind bewusst ausgeschlossen."},"servers":[{"url":"https://api-v1.cts-hosting.com/api","description":"Production API"}],"tags":[{"name":"Konto & Sicherheit","description":"Daten und Sicherheitsfunktionen des angemeldeten Kundenkontos."},{"name":"KVM Cloud","description":"Nur die virtuellen Server des angemeldeten Kunden verwalten."},{"name":"Storage & Object Storage","description":"Eigene Storage-Server, Freigaben und S3-Buckets verwalten."},{"name":"Game Server","description":"Eigene Game Server, Dateien, Backups und Teamzugänge steuern."},{"name":"Domains & DNS","description":"Nur Domains und DNS-Zonen, die dem angemeldeten Kunden gehören."},{"name":"Abrechnung","description":"Rechnungen, Guthaben und Zahlungsdaten des eigenen Kundenkontos."}],"components":{"securitySchemes":{"apiKeyAuth":{"type":"http","scheme":"bearer","bearerFormat":"API-Key (cts_live_...)","description":"API-Key aus dem Kundenbereich (Einstellungen -> API-Keys) als Bearer-Token. Kein Login und kein CSRF-Header nötig. Die Scopes des Keys entscheiden, welche Aufrufe erlaubt sind."},"sessionAuth":{"type":"http","scheme":"bearer","bearerFormat":"Session-Access-Token (nur Browser-Panel)"}}},"paths":{"/auth/me":{"get":{"tags":["Konto & Sicherheit"],"summary":"Eigenes Profil","description":"Profil des angemeldeten Kunden abrufen.","security":[{"sessionAuth":[]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Keys duerfen hier nichts aendern"}}}},"/auth/sessions":{"get":{"tags":["Konto & Sicherheit"],"summary":"Aktive Sitzungen","description":"Angemeldete Geräte und Sitzungen auflisten.","security":[{"sessionAuth":[]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Keys duerfen hier nichts aendern"}}}},"/auth/sessions/{sessionId}":{"delete":{"tags":["Konto & Sicherheit"],"summary":"Sitzung widerrufen","description":"Eine eigene Sitzung abmelden.","security":[{"sessionAuth":[]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Keys duerfen hier nichts aendern"}}}},"/auth/api-keys":{"get":{"tags":["Konto & Sicherheit"],"summary":"API-Keys auflisten","description":"Eigene API-Keys und Berechtigungen anzeigen.","security":[{"sessionAuth":[]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Keys duerfen hier nichts aendern"}}},"post":{"tags":["Konto & Sicherheit"],"summary":"API-Key erstellen","description":"Einen API-Key für das eigene Konto anlegen.","security":[{"sessionAuth":[]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Keys duerfen hier nichts aendern"}}}},"/auth/api-keys/{apiKeyId}":{"delete":{"tags":["Konto & Sicherheit"],"summary":"API-Key löschen","description":"Einen eigenen API-Key unwiderruflich entfernen.","security":[{"sessionAuth":[]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Keys duerfen hier nichts aendern"}}}},"/customer/panel-overview":{"get":{"tags":["Konto & Sicherheit"],"summary":"Kundenübersicht","description":"Produkte, Guthaben, Benachrichtigungen und offene Vorgänge abrufen.","security":[{"apiKeyAuth":[]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Keys duerfen hier nichts aendern"}}}},"/kvm/servers":{"get":{"tags":["KVM Cloud"],"summary":"Server auflisten","description":"Eigene KVM-Server abrufen.","security":[{"apiKeyAuth":["servers:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:read nicht"}}}},"/kvm/servers/{serverId}":{"get":{"tags":["KVM Cloud"],"summary":"Server-Details","description":"Details eines eigenen KVM-Servers abrufen.","security":[{"apiKeyAuth":["servers:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:read nicht"}}},"patch":{"tags":["KVM Cloud"],"summary":"Server bearbeiten","description":"Name oder kundenbezogene Einstellungen ändern.","security":[{"apiKeyAuth":["servers:write"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:write nicht"}}}},"/kvm/servers/{serverId}/power":{"post":{"tags":["KVM Cloud"],"summary":"Power-Aktion","description":"Server starten, stoppen oder neu starten.","security":[{"apiKeyAuth":["servers:write"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:write nicht"}}}},"/kvm/servers/{serverId}/history":{"get":{"tags":["KVM Cloud"],"summary":"Verlauf abrufen","description":"Metriken und Ereignisse des eigenen Servers abrufen.","security":[{"apiKeyAuth":["servers:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:read nicht"}}}},"/kvm/servers/{serverId}/backups":{"get":{"tags":["KVM Cloud"],"summary":"Backups auflisten","description":"Sicherungen eines eigenen Servers auflisten.","security":[{"apiKeyAuth":["servers:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:read nicht"}}},"post":{"tags":["KVM Cloud"],"summary":"Backup erstellen","description":"Eine neue Sicherung erstellen.","security":[{"apiKeyAuth":["servers:write"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:write nicht"}}}},"/kvm/servers/{serverId}/firewall/rules":{"get":{"tags":["KVM Cloud"],"summary":"Firewall-Regeln","description":"Eigene Firewall-Regeln abrufen.","security":[{"apiKeyAuth":["servers:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:read nicht"}}},"post":{"tags":["KVM Cloud"],"summary":"Firewall-Regel erstellen","description":"Eine Regel für den eigenen Server anlegen.","security":[{"apiKeyAuth":["servers:write"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:write nicht"}}}},"/storage/servers":{"get":{"tags":["Storage & Object Storage"],"summary":"Storage-Server auflisten","description":"Eigene Storage-Server abrufen.","security":[{"apiKeyAuth":["servers:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:read nicht"}}}},"/storage/servers/{serverId}":{"get":{"tags":["Storage & Object Storage"],"summary":"Storage-Details","description":"Details eines eigenen Storage-Servers abrufen.","security":[{"apiKeyAuth":["servers:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:read nicht"}}}},"/storage/servers/{serverId}/power":{"post":{"tags":["Storage & Object Storage"],"summary":"Storage Power-Aktion","description":"Eigenen Storage-Server starten oder stoppen.","security":[{"apiKeyAuth":["servers:write"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:write nicht"}}}},"/storage/servers/{serverId}/ftp":{"patch":{"tags":["Storage & Object Storage"],"summary":"FTP-Einstellungen","description":"FTP für den eigenen Server konfigurieren.","security":[{"apiKeyAuth":["servers:write"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:write nicht"}}}},"/s3/buckets":{"get":{"tags":["Storage & Object Storage"],"summary":"S3-Buckets auflisten","description":"Buckets des angemeldeten Kunden abrufen.","security":[{"apiKeyAuth":["servers:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:read nicht"}}},"post":{"tags":["Storage & Object Storage"],"summary":"S3-Bucket erstellen","description":"Einen Bucket im eigenen Storage anlegen.","security":[{"apiKeyAuth":["servers:write"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:write nicht"}}}},"/s3/buckets/{bucketId}/access-keys":{"get":{"tags":["Storage & Object Storage"],"summary":"S3-Zugangsdaten","description":"Access Keys eines eigenen Buckets auflisten.","security":[{"apiKeyAuth":["servers:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:read nicht"}}},"post":{"tags":["Storage & Object Storage"],"summary":"S3 Access Key erstellen","description":"Zugangsdaten für einen eigenen Bucket erstellen.","security":[{"apiKeyAuth":["servers:write"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:write nicht"}}}},"/game-servers":{"get":{"tags":["Game Server"],"summary":"Game Server auflisten","description":"Eigene Game Server abrufen.","security":[{"apiKeyAuth":["servers:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:read nicht"}}}},"/game-servers/{serverId}":{"get":{"tags":["Game Server"],"summary":"Game Server-Details","description":"Details eines eigenen Game Servers abrufen.","security":[{"apiKeyAuth":["servers:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:read nicht"}}}},"/game-servers/{serverId}/power":{"post":{"tags":["Game Server"],"summary":"Power-Aktion","description":"Den eigenen Game Server starten, stoppen oder neu starten.","security":[{"apiKeyAuth":["servers:write"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:write nicht"}}}},"/game-servers/{serverId}/console":{"get":{"tags":["Game Server"],"summary":"Konsole abrufen","description":"Ausgabe der eigenen Serverkonsole lesen.","security":[{"apiKeyAuth":["servers:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:read nicht"}}}},"/game-servers/{serverId}/console/command":{"post":{"tags":["Game Server"],"summary":"Konsolenbefehl","description":"Einen Befehl an den eigenen Game Server senden.","security":[{"apiKeyAuth":["servers:write"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:write nicht"}}}},"/game-servers/{serverId}/files":{"get":{"tags":["Game Server"],"summary":"Dateien auflisten","description":"Dateien des eigenen Game Servers auflisten.","security":[{"apiKeyAuth":["servers:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:read nicht"}}},"put":{"tags":["Game Server"],"summary":"Datei speichern","description":"Eine Datei auf dem eigenen Game Server speichern.","security":[{"apiKeyAuth":["servers:write"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:write nicht"}}}},"/game-servers/{serverId}/backups":{"get":{"tags":["Game Server"],"summary":"Backups auflisten","description":"Eigene Game-Server-Backups abrufen.","security":[{"apiKeyAuth":["servers:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:read nicht"}}},"post":{"tags":["Game Server"],"summary":"Backup erstellen","description":"Ein Backup des eigenen Game Servers erstellen.","security":[{"apiKeyAuth":["servers:write"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:write nicht"}}}},"/domains":{"get":{"tags":["Domains & DNS"],"summary":"Domains auflisten","description":"Eigene Domains abrufen.","security":[{"apiKeyAuth":["servers:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:read nicht"}}}},"/domains/{id}":{"get":{"tags":["Domains & DNS"],"summary":"Domain-Details","description":"Details einer eigenen Domain abrufen.","security":[{"apiKeyAuth":["servers:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:read nicht"}}}},"/domains/{id}/dns":{"get":{"tags":["Domains & DNS"],"summary":"DNS-Einträge","description":"DNS-Einträge einer eigenen Domain auflisten.","security":[{"apiKeyAuth":["servers:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:read nicht"}}},"post":{"tags":["Domains & DNS"],"summary":"DNS-Eintrag erstellen","description":"Einen DNS-Eintrag für eine eigene Domain erstellen.","security":[{"apiKeyAuth":["servers:write"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:write nicht"}}}},"/domains/{id}/dns/{recordId}":{"patch":{"tags":["Domains & DNS"],"summary":"DNS-Eintrag ändern","description":"Einen DNS-Eintrag der eigenen Domain ändern.","security":[{"apiKeyAuth":["servers:write"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:write nicht"}}},"delete":{"tags":["Domains & DNS"],"summary":"DNS-Eintrag löschen","description":"Einen DNS-Eintrag der eigenen Domain löschen.","security":[{"apiKeyAuth":["servers:write"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope servers:write nicht"}}}},"/billing/invoices":{"get":{"tags":["Abrechnung"],"summary":"Rechnungen auflisten","description":"Rechnungen des eigenen Kundenkontos abrufen.","security":[{"apiKeyAuth":["billing:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope billing:read nicht"}}}},"/billing/invoices/{id}/pdf":{"get":{"tags":["Abrechnung"],"summary":"Rechnung als PDF","description":"Eine eigene Rechnung herunterladen.","security":[{"apiKeyAuth":["billing:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope billing:read nicht"}}}},"/billing/credits":{"get":{"tags":["Abrechnung"],"summary":"Guthaben abrufen","description":"Aktuelles Kontoguthaben abrufen.","security":[{"apiKeyAuth":["billing:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope billing:read nicht"}}}},"/billing/credits/topup":{"post":{"tags":["Abrechnung"],"summary":"Guthaben aufladen","description":"Eine Guthabenaufladung starten.","security":[{"apiKeyAuth":["billing:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope billing:read nicht"}}}},"/billing/payment-methods":{"get":{"tags":["Abrechnung"],"summary":"Zahlungsarten","description":"Eigene Zahlungsarten auflisten.","security":[{"apiKeyAuth":["billing:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope billing:read nicht"}}}},"/billing/payment-methods/{pmId}":{"delete":{"tags":["Abrechnung"],"summary":"Zahlungsart entfernen","description":"Eine eigene Zahlungsart entfernen.","security":[{"apiKeyAuth":["billing:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope billing:read nicht"}}}},"/billing/tax-profile":{"get":{"tags":["Abrechnung"],"summary":"Steuerprofil","description":"Eigenes Steuerprofil abrufen.","security":[{"apiKeyAuth":["billing:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope billing:read nicht"}}},"put":{"tags":["Abrechnung"],"summary":"Steuerprofil speichern","description":"Eigenes Steuerprofil ändern.","security":[{"apiKeyAuth":["billing:read"]}],"responses":{"200":{"description":"OK"},"401":{"description":"API-Key ungueltig oder gesperrt"},"403":{"description":"API-Key hat den Scope billing:read nicht"}}}}}}