{"openapi":"3.1.0","info":{"title":"KernHosting CDN – Kunden-API","version":"1","description":"Alles, was Sie im Kundenportal tun, geht auch per API. Anmeldung mit API-Key als Bearer-Token (`Authorization: Bearer khcdn_…`), erstellt im Portal unter API-Keys. Keys mit Rechten `read` dürfen nur lesen (GET).","contact":{"name":"KernHosting","url":"https://portal.kernhosting.com"}},"servers":[{"url":"https://portal.kernhosting.com"}],"tags":[{"name":"Konto","description":"Ihr Konto, Limits und Verbrauch, Verbindungen zwischen den Produkten."},{"name":"Websites","description":"Websites und HTTP(S)-Load-Balancer: anlegen, Server, Hostnamen, DNS-Prüfung, Verlauf."},{"name":"Cache","description":"Cache-Einstellungen, Regeln, Weiterleitungen und Cache leeren."},{"name":"Sicherheit","description":"Sperren, Länder, Rate-Limits, Wartung, WAF, Bots, Origin-Schutz."},{"name":"Statistik","description":"Anfragen, Traffic und Abgefangenes."},{"name":"Berichte","description":"Monatsbericht (auch per E-Mail am 1.) und Angriffsberichte als öffentliche Seite zum Teilen."},{"name":"DNS","description":"DNS-Zonen, Einträge, Verlauf, DNSSEC, DynDNS und ACME (DNS-01)."},{"name":"Spielserver","description":"Minecraft-Server über das CDN: Einstellungen, Plugin, Tests und Statistik."},{"name":"Gameserver-Schnittstelle","description":"Für Gameserver-Hoster: Schutz je Server mit Stufe und wenigen Schaltern anlegen, adressiert über die Kennung im eigenen Panel. Schlüssel dafür legen Inhaber im Admin-Bereich an (Einstellungen → Gameserver-Schnittstelle)."},{"name":"Load Balancer","description":"TCP/UDP-Load-Balancer."},{"name":"Geräte","description":"Geräte mit dem KernHosting-Client und ihre Freigaben."},{"name":"Benachrichtigungen","description":"Störungen und Kanäle (E-Mail, Webhook, Discord, Slack, Telegram …)."},{"name":"Statusseite","description":"Ihre öffentliche Statusseite (`/status/<adresse>`): Dienste und Meldungen."},{"name":"API-Keys","description":"Schlüssel für diese API."},{"name":"Support","description":"Anfragen an den Support – mit dem Dienst, um den es geht (Name und Störungen der letzten 7 Tage stehen gleich dabei)."}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","bearerFormat":"khcdn_…","description":"API-Key aus dem Kundenportal (API-Keys)."},"session":{"type":"apiKey","in":"cookie","name":"kh_session","description":"Nur im Portal."}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"details":{}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}},"paths":{"/v1/account":{"get":{"operationId":"get-v1-account","tags":["Konto"],"summary":"Konto, Limits und Verbrauch","description":"Kunde, gültige Limits, wie viel davon belegt ist, Traffic im laufenden Monat und – mit API-Key – dessen Rechte und Ablauf. Gut als erster Test eines neuen Keys.","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"customer":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"company":{"type":["string","null"]}},"required":["id","name","company"],"additionalProperties":false},"limits":{"type":"object","properties":{"trafficGbPerMonth":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"maxDomains":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxGameServers":{"default":2,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDnsZones":{"default":5,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxNetBalancers":{"default":2,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDevices":{"default":3,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDevicePorts":{"default":10,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxTeamMembers":{"default":25,"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxApiKeys":{"default":20,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxRequestsPerSecond":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"purgesPerHour":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"onLimit":{"type":"string","enum":["notify","suspend"]}},"required":["trafficGbPerMonth","maxDomains","maxGameServers","maxDnsZones","maxNetBalancers","maxDevices","maxDevicePorts","maxTeamMembers","maxApiKeys","maxRequestsPerSecond","purgesPerHour","onLimit"],"additionalProperties":false},"used":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"}},"apiKey":{"anyOf":[{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"scope":{"type":"string","enum":["full","read"]},"expiresAt":{"type":["string","null"]}},"required":["id","name","scope","expiresAt"],"additionalProperties":false},{"type":"null"}]}},"required":["customer","limits","used","apiKey"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/news":{"get":{"operationId":"get-v1-news","tags":["Konto"],"summary":"Neuigkeiten","description":"Erschienene Beiträge („Was ist neu“), neueste zuerst. `body` ist einfaches Markdown. Öffentliche Beiträge auch ohne Anmeldung als RSS unter `/news/feed.xml`.","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"news":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":"string"},"summary":{"type":"string"},"body":{"type":"string"},"category":{"type":"string","enum":["new","improved","fixed","notice"]},"areas":{"type":"array","items":{"type":"string","enum":["websites","spielserver","dns","loadbalancer","geraete","konto","allgemein"]}},"publishedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"public":{"type":"boolean"},"highlight":{"type":"boolean"}},"required":["id","title","summary","body","category","areas","publishedAt","public","highlight"],"additionalProperties":false}}},"required":["news"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/plans":{"get":{"operationId":"get-v1-plans","tags":["Konto"],"summary":"Wählbare Tarife","description":"Ohne Anmeldung (z. B. für eine Preisseite). `free` = dauerhaft kostenloser Tarif, der sofort gilt; `limits` ohne Wert = Standard, `null` = unbegrenzt.","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"plans":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"description":{"type":"string"},"priceLabel":{"type":"string"},"features":{"type":"array","items":{"type":"string"}},"limits":{"type":"object","properties":{"trafficGbPerMonth":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"maxDomains":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxGameServers":{"default":2,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDnsZones":{"default":5,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxNetBalancers":{"default":2,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDevices":{"default":3,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDevicePorts":{"default":10,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxTeamMembers":{"default":25,"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxApiKeys":{"default":20,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxRequestsPerSecond":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"purgesPerHour":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"onLimit":{"type":"string","enum":["notify","suspend"]}},"additionalProperties":false},"flags":{"type":"object","propertyNames":{"type":"string","enum":["waf","underAttack","attackReports","players","queue","serverList","vpnExceptions","monthlyReport","statusPage","prioritySupport"]},"additionalProperties":{"type":"boolean"}},"free":{"type":"boolean"},"public":{"type":"boolean"},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","name","description","priceLabel","features","limits","flags","free","public","sortOrder"],"additionalProperties":false}}},"required":["plans"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/account/plan":{"get":{"operationId":"get-v1-account-plan","tags":["Konto"],"summary":"Eigener Tarif","description":"Tarif, seit wann, Befristung und ein offener Antrag.","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"plan":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"description":{"type":"string"},"priceLabel":{"type":"string"},"features":{"type":"array","items":{"type":"string"}},"limits":{"type":"object","properties":{"trafficGbPerMonth":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"maxDomains":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxGameServers":{"default":2,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDnsZones":{"default":5,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxNetBalancers":{"default":2,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDevices":{"default":3,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDevicePorts":{"default":10,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxTeamMembers":{"default":25,"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxApiKeys":{"default":20,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxRequestsPerSecond":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"purgesPerHour":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"onLimit":{"type":"string","enum":["notify","suspend"]}},"additionalProperties":false},"flags":{"type":"object","propertyNames":{"type":"string","enum":["waf","underAttack","attackReports","players","queue","serverList","vpnExceptions","monthlyReport","statusPage","prioritySupport"]},"additionalProperties":{"type":"boolean"}},"free":{"type":"boolean"},"public":{"type":"boolean"},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","name","description","priceLabel","features","limits","flags","free","public","sortOrder"],"additionalProperties":false},{"type":"null"}]},"since":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"until":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"requested":{"anyOf":[{"type":"object","properties":{"plan":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"description":{"type":"string"},"priceLabel":{"type":"string"},"features":{"type":"array","items":{"type":"string"}},"limits":{"type":"object","properties":{"trafficGbPerMonth":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"maxDomains":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxGameServers":{"default":2,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDnsZones":{"default":5,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxNetBalancers":{"default":2,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDevices":{"default":3,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDevicePorts":{"default":10,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxTeamMembers":{"default":25,"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxApiKeys":{"default":20,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxRequestsPerSecond":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"purgesPerHour":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"onLimit":{"type":"string","enum":["notify","suspend"]}},"additionalProperties":false},"flags":{"type":"object","propertyNames":{"type":"string","enum":["waf","underAttack","attackReports","players","queue","serverList","vpnExceptions","monthlyReport","statusPage","prioritySupport"]},"additionalProperties":{"type":"boolean"}},"free":{"type":"boolean"},"public":{"type":"boolean"},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","name","description","priceLabel","features","limits","flags","free","public","sortOrder"],"additionalProperties":false},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["plan","at"],"additionalProperties":false},{"type":"null"}]},"features":{"type":"object","propertyNames":{"type":"string","enum":["waf","underAttack","attackReports","players","queue","serverList","vpnExceptions","monthlyReport","statusPage","prioritySupport"]},"additionalProperties":{"type":"boolean"},"required":["waf","underAttack","attackReports","players","queue","serverList","vpnExceptions","monthlyReport","statusPage","prioritySupport"]},"legacy":{"type":"boolean"},"overage":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"used":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"allowed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["key","label","used","allowed"],"additionalProperties":false}},"graceUntil":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"history":{"type":"array","items":{"type":"object","properties":{"plan":{"type":"string"},"from":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"to":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"reason":{"type":"string"}},"required":["plan","from","to","reason"],"additionalProperties":false}}},"required":["plan","since","until","requested","features","legacy","overage","graceUntil","history"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post-v1-account-plan","tags":["Konto"],"summary":"Tarif wechseln oder beantragen","description":"Der Free-Tarif gilt sofort; andere Tarife werden beantragt und von uns freigeschaltet (Antwort mit `requested`). Nur Inhaber bzw. API-Key. Gleicher Tarif: 409 `same_plan`.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"planId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"confirmOverage":{"type":"boolean"}},"required":["planId"]},"example":{"planId":"7b1f3c2e-4a5d-4e6f-8a9b-0c1d2e3f4a5b"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"plan":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"description":{"type":"string"},"priceLabel":{"type":"string"},"features":{"type":"array","items":{"type":"string"}},"limits":{"type":"object","properties":{"trafficGbPerMonth":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"maxDomains":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxGameServers":{"default":2,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDnsZones":{"default":5,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxNetBalancers":{"default":2,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDevices":{"default":3,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDevicePorts":{"default":10,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxTeamMembers":{"default":25,"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxApiKeys":{"default":20,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxRequestsPerSecond":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"purgesPerHour":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"onLimit":{"type":"string","enum":["notify","suspend"]}},"additionalProperties":false},"flags":{"type":"object","propertyNames":{"type":"string","enum":["waf","underAttack","attackReports","players","queue","serverList","vpnExceptions","monthlyReport","statusPage","prioritySupport"]},"additionalProperties":{"type":"boolean"}},"free":{"type":"boolean"},"public":{"type":"boolean"},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","name","description","priceLabel","features","limits","flags","free","public","sortOrder"],"additionalProperties":false},{"type":"null"}]},"since":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"until":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"requested":{"anyOf":[{"type":"object","properties":{"plan":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"description":{"type":"string"},"priceLabel":{"type":"string"},"features":{"type":"array","items":{"type":"string"}},"limits":{"type":"object","properties":{"trafficGbPerMonth":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"maxDomains":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxGameServers":{"default":2,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDnsZones":{"default":5,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxNetBalancers":{"default":2,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDevices":{"default":3,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDevicePorts":{"default":10,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxTeamMembers":{"default":25,"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxApiKeys":{"default":20,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxRequestsPerSecond":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"purgesPerHour":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"onLimit":{"type":"string","enum":["notify","suspend"]}},"additionalProperties":false},"flags":{"type":"object","propertyNames":{"type":"string","enum":["waf","underAttack","attackReports","players","queue","serverList","vpnExceptions","monthlyReport","statusPage","prioritySupport"]},"additionalProperties":{"type":"boolean"}},"free":{"type":"boolean"},"public":{"type":"boolean"},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","name","description","priceLabel","features","limits","flags","free","public","sortOrder"],"additionalProperties":false},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["plan","at"],"additionalProperties":false},{"type":"null"}]},"features":{"type":"object","propertyNames":{"type":"string","enum":["waf","underAttack","attackReports","players","queue","serverList","vpnExceptions","monthlyReport","statusPage","prioritySupport"]},"additionalProperties":{"type":"boolean"},"required":["waf","underAttack","attackReports","players","queue","serverList","vpnExceptions","monthlyReport","statusPage","prioritySupport"]},"legacy":{"type":"boolean"},"overage":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"used":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"allowed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["key","label","used","allowed"],"additionalProperties":false}},"graceUntil":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"history":{"type":"array","items":{"type":"object","properties":{"plan":{"type":"string"},"from":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"to":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"reason":{"type":"string"}},"required":["plan","from","to","reason"],"additionalProperties":false}}},"required":["plan","since","until","requested","features","legacy","overage","graceUntil","history"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/account/plan/request":{"delete":{"operationId":"delete-v1-account-plan-request","tags":["Konto"],"summary":"Tarifantrag zurückziehen","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"plan":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"description":{"type":"string"},"priceLabel":{"type":"string"},"features":{"type":"array","items":{"type":"string"}},"limits":{"type":"object","properties":{"trafficGbPerMonth":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"maxDomains":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxGameServers":{"default":2,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDnsZones":{"default":5,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxNetBalancers":{"default":2,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDevices":{"default":3,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDevicePorts":{"default":10,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxTeamMembers":{"default":25,"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxApiKeys":{"default":20,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxRequestsPerSecond":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"purgesPerHour":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"onLimit":{"type":"string","enum":["notify","suspend"]}},"additionalProperties":false},"flags":{"type":"object","propertyNames":{"type":"string","enum":["waf","underAttack","attackReports","players","queue","serverList","vpnExceptions","monthlyReport","statusPage","prioritySupport"]},"additionalProperties":{"type":"boolean"}},"free":{"type":"boolean"},"public":{"type":"boolean"},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","name","description","priceLabel","features","limits","flags","free","public","sortOrder"],"additionalProperties":false},{"type":"null"}]},"since":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"until":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"requested":{"anyOf":[{"type":"object","properties":{"plan":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"description":{"type":"string"},"priceLabel":{"type":"string"},"features":{"type":"array","items":{"type":"string"}},"limits":{"type":"object","properties":{"trafficGbPerMonth":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"maxDomains":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxGameServers":{"default":2,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDnsZones":{"default":5,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxNetBalancers":{"default":2,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDevices":{"default":3,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxDevicePorts":{"default":10,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxTeamMembers":{"default":25,"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxApiKeys":{"default":20,"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"maxRequestsPerSecond":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"purgesPerHour":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"onLimit":{"type":"string","enum":["notify","suspend"]}},"additionalProperties":false},"flags":{"type":"object","propertyNames":{"type":"string","enum":["waf","underAttack","attackReports","players","queue","serverList","vpnExceptions","monthlyReport","statusPage","prioritySupport"]},"additionalProperties":{"type":"boolean"}},"free":{"type":"boolean"},"public":{"type":"boolean"},"sortOrder":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","name","description","priceLabel","features","limits","flags","free","public","sortOrder"],"additionalProperties":false},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["plan","at"],"additionalProperties":false},{"type":"null"}]},"features":{"type":"object","propertyNames":{"type":"string","enum":["waf","underAttack","attackReports","players","queue","serverList","vpnExceptions","monthlyReport","statusPage","prioritySupport"]},"additionalProperties":{"type":"boolean"},"required":["waf","underAttack","attackReports","players","queue","serverList","vpnExceptions","monthlyReport","statusPage","prioritySupport"]},"legacy":{"type":"boolean"},"overage":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"used":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"allowed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["key","label","used","allowed"],"additionalProperties":false}},"graceUntil":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"history":{"type":"array","items":{"type":"object","properties":{"plan":{"type":"string"},"from":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"to":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"reason":{"type":"string"}},"required":["plan","from","to","reason"],"additionalProperties":false}}},"required":["plan","since","until","requested","features","legacy","overage","graceUntil","history"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/account/bonus":{"get":{"operationId":"get-v1-account-bonus","tags":["Konto"],"summary":"Boni, Testphase, Partnerprogramm","description":"Aktive und abgelaufene Boni (Gutscheine, Testphase, Partnerprogramm, Support), ihre Summe, ob die Testphase noch frei ist und der eigene Einladungslink. Boni stecken schon in den Limits von `/v1/account`.","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"bonuses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"source":{"type":"string","enum":["coupon","trial","referral","admin"]},"label":{"type":"string"},"bonus":{"type":"object","properties":{"trafficGbPerMonth":{"type":"integer","minimum":0,"maximum":100000},"maxDomains":{"type":"integer","minimum":0,"maximum":1000},"maxGameServers":{"type":"integer","minimum":0,"maximum":1000},"maxDnsZones":{"type":"integer","minimum":0,"maximum":1000},"maxNetBalancers":{"type":"integer","minimum":0,"maximum":1000},"maxDevices":{"type":"integer","minimum":0,"maximum":1000},"maxDevicePorts":{"type":"integer","minimum":0,"maximum":1000}},"additionalProperties":false},"startsAt":{"type":"string"},"expiresAt":{"type":["string","null"]},"active":{"type":"boolean"}},"required":["id","source","label","bonus","startsAt","expiresAt","active"],"additionalProperties":false}},"total":{"type":"object","properties":{"trafficGbPerMonth":{"type":"integer","minimum":0,"maximum":100000},"maxDomains":{"type":"integer","minimum":0,"maximum":1000},"maxGameServers":{"type":"integer","minimum":0,"maximum":1000},"maxDnsZones":{"type":"integer","minimum":0,"maximum":1000},"maxNetBalancers":{"type":"integer","minimum":0,"maximum":1000},"maxDevices":{"type":"integer","minimum":0,"maximum":1000},"maxDevicePorts":{"type":"integer","minimum":0,"maximum":1000}},"additionalProperties":false},"trial":{"type":"object","properties":{"available":{"type":"boolean"},"days":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"bonus":{"type":"object","properties":{"trafficGbPerMonth":{"type":"integer","minimum":0,"maximum":100000},"maxDomains":{"type":"integer","minimum":0,"maximum":1000},"maxGameServers":{"type":"integer","minimum":0,"maximum":1000},"maxDnsZones":{"type":"integer","minimum":0,"maximum":1000},"maxNetBalancers":{"type":"integer","minimum":0,"maximum":1000},"maxDevices":{"type":"integer","minimum":0,"maximum":1000},"maxDevicePorts":{"type":"integer","minimum":0,"maximum":1000}},"additionalProperties":false},"usedAt":{"type":["string","null"]}},"required":["available","days","bonus","usedAt"],"additionalProperties":false},"referral":{"type":"object","properties":{"enabled":{"type":"boolean"},"code":{"type":["string","null"]},"link":{"type":["string","null"]},"referrer":{"type":"object","properties":{"trafficGbPerMonth":{"type":"integer","minimum":0,"maximum":100000},"maxDomains":{"type":"integer","minimum":0,"maximum":1000},"maxGameServers":{"type":"integer","minimum":0,"maximum":1000},"maxDnsZones":{"type":"integer","minimum":0,"maximum":1000},"maxNetBalancers":{"type":"integer","minimum":0,"maximum":1000},"maxDevices":{"type":"integer","minimum":0,"maximum":1000},"maxDevicePorts":{"type":"integer","minimum":0,"maximum":1000}},"additionalProperties":false},"referred":{"type":"object","properties":{"trafficGbPerMonth":{"type":"integer","minimum":0,"maximum":100000},"maxDomains":{"type":"integer","minimum":0,"maximum":1000},"maxGameServers":{"type":"integer","minimum":0,"maximum":1000},"maxDnsZones":{"type":"integer","minimum":0,"maximum":1000},"maxNetBalancers":{"type":"integer","minimum":0,"maximum":1000},"maxDevices":{"type":"integer","minimum":0,"maximum":1000},"maxDevicePorts":{"type":"integer","minimum":0,"maximum":1000}},"additionalProperties":false},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["enabled","code","link","referrer","referred","count"],"additionalProperties":false}},"required":["bonuses","total","trial","referral"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/account/bonus/coupon":{"post":{"operationId":"post-v1-account-bonus-coupon","tags":["Konto"],"summary":"Gutschein einlösen","description":"Jeder Code einmal je Konto; höchstens 10 Versuche je Stunde. Fehler: `invalid_code`, `expired`, `used_up`, `already_redeemed` (409), `new_customers_only`.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"}},"required":["code"]},"example":{"code":"SOMMER26"}}}},"responses":{"201":{"description":"Angelegt","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"source":{"type":"string","enum":["coupon","trial","referral","admin"]},"label":{"type":"string"},"bonus":{"type":"object","properties":{"trafficGbPerMonth":{"type":"integer","minimum":0,"maximum":100000},"maxDomains":{"type":"integer","minimum":0,"maximum":1000},"maxGameServers":{"type":"integer","minimum":0,"maximum":1000},"maxDnsZones":{"type":"integer","minimum":0,"maximum":1000},"maxNetBalancers":{"type":"integer","minimum":0,"maximum":1000},"maxDevices":{"type":"integer","minimum":0,"maximum":1000},"maxDevicePorts":{"type":"integer","minimum":0,"maximum":1000}},"additionalProperties":false},"startsAt":{"type":"string"},"expiresAt":{"type":["string","null"]},"active":{"type":"boolean"}},"required":["id","source","label","bonus","startsAt","expiresAt","active"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/account/bonus/trial":{"post":{"operationId":"post-v1-account-bonus-trial","tags":["Konto"],"summary":"Testphase starten","description":"Einmal je Konto, solange der Betreiber eine Testphase anbietet (`trial_off`, `trial_used` 409).","parameters":[],"responses":{"201":{"description":"Angelegt","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"source":{"type":"string","enum":["coupon","trial","referral","admin"]},"label":{"type":"string"},"bonus":{"type":"object","properties":{"trafficGbPerMonth":{"type":"integer","minimum":0,"maximum":100000},"maxDomains":{"type":"integer","minimum":0,"maximum":1000},"maxGameServers":{"type":"integer","minimum":0,"maximum":1000},"maxDnsZones":{"type":"integer","minimum":0,"maximum":1000},"maxNetBalancers":{"type":"integer","minimum":0,"maximum":1000},"maxDevices":{"type":"integer","minimum":0,"maximum":1000},"maxDevicePorts":{"type":"integer","minimum":0,"maximum":1000}},"additionalProperties":false},"startsAt":{"type":"string"},"expiresAt":{"type":["string","null"]},"active":{"type":"boolean"}},"required":["id","source","label","bonus","startsAt","expiresAt","active"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/team":{"get":{"operationId":"get-v1-team","tags":["Konto"],"summary":"Team: Mitglieder und Einladungen","description":"Mitglieder mit Rolle (`owner`, `admin`, `viewer`), Zwei-Faktor, zuletzt aktiv, angemeldeten Geräten und eigenen API-Keys; offene Einladungen. Einladen und Rollen ändern nur im Portal (Inhaber).","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"twoFactorRequired":{"type":"boolean"},"members":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"role":{"type":"string","enum":["owner","admin","viewer"]},"twoFactor":{"type":"boolean"},"sso":{"type":"boolean"},"lastLoginAt":{"type":["string","null"]},"lastActiveAt":{"type":["string","null"]},"sessions":{"type":"number"},"apiKeys":{"type":"number"},"createdAt":{"type":"string"}},"required":["id","name","email","role","twoFactor","sso","lastLoginAt","lastActiveAt","sessions","apiKeys","createdAt"],"additionalProperties":false}},"invites":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string"},"role":{"type":"string","enum":["owner","admin","viewer"]},"invitedBy":{"type":["string","null"]},"expiresAt":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","email","role","invitedBy","expiresAt","createdAt"],"additionalProperties":false}}},"required":["twoFactorRequired","members","invites"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/team/activity":{"get":{"operationId":"get-v1-team-activity","tags":["Konto"],"summary":"Aktivität des Teams","description":"Wer hat wann was geändert (Portal, API-Key, Support, CDN), neueste zuerst. Filter: `member` (ID), `area` (`websites`, `dns`, `spielserver`, `geraete`, `load-balancer`, `team`, `konto`), `q` (Suche), `logins=1` (mit Anmeldungen); Blättern mit `before` = `next`, `limit` bis 200.","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"at":{"type":"string"},"action":{"type":"string"},"label":{"type":"string"},"actor":{"type":"object","properties":{"kind":{"type":"string","enum":["member","support","api","cdn"]},"name":{"type":"string"},"userId":{"type":["string","null"]}},"required":["kind","name","userId"],"additionalProperties":false},"target":{"type":["string","null"]},"detail":{"type":["string","null"]},"href":{"type":["string","null"]}},"required":["id","at","action","label","actor","target","detail","href"],"additionalProperties":false}},"next":{"type":["number","null"]}},"required":["rows","next"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/usage":{"get":{"operationId":"get-v1-usage","tags":["Konto"],"summary":"Traffic im laufenden Monat","description":"Ausgelieferte Daten im Kalendermonat (deutsche Zeit) und Anteil am Limit.","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/network":{"get":{"operationId":"get-v1-network","tags":["Konto"],"summary":"Adressen des CDN","description":"Feste IP-Adressen der Edges und Ziele für CNAME-Einträge – z. B. für Firewalls (nur das CDN zum Server lassen).","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/related":{"get":{"operationId":"get-v1-related","tags":["Konto"],"summary":"Verbunden mit …","description":"Was mit einem Dienst, Gerät oder einer DNS-Zone zusammenhängt (wie „Verbunden mit“ im Portal): die DNS-Zone eines Namens, das Gerät hinter einem Server (mit `online`), Dienste, die ein Gerät nutzen.","parameters":[{"name":"kind","in":"query","required":true,"description":"`website`, `loadbalancer`, `game`, `netlb`, `device` oder `zone`","schema":{"type":"string","enum":["website","loadbalancer","game","netlb","device","zone"]},"example":"website"},{"name":"id","in":"query","required":true,"description":"Kennung des Objekts","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/domains":{"get":{"operationId":"get-v1-domains","tags":["Websites"],"summary":"Alle Websites","description":"Websites und HTTP(S)-Load-Balancer mit Hostnamen und DNS-Status.","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"domains":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"customerId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"status":{"type":"string","enum":["pending_dns","issuing_cert","active","error","disabled"]},"lastError":{"type":["string","null"]},"hostnames":{"type":"array","items":{"type":"object","properties":{"fqdn":{"type":"string"},"connectMethod":{"type":"string","enum":["cname","alias","static"]},"cnameTarget":{"type":["string","null"]},"ownershipTxt":{"type":["string","null"]},"dnsStatus":{"type":"string","enum":["unchecked","ok","wrong_target","not_found","error","unverified"]},"dnsCheckedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"redirectToPrimary":{"type":"boolean"}},"required":["fqdn","connectMethod","cnameTarget","ownershipTxt","dnsStatus","dnsCheckedAt","redirectToPrimary"],"additionalProperties":false}},"kind":{"type":"string","enum":["website","loadbalancer"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","customerId","name","status","lastError","hostnames","kind","createdAt","updatedAt"],"additionalProperties":false}}},"required":["domains"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post-v1-domains","tags":["Websites"],"summary":"Website anlegen","description":"Das Gegenstück (`www.kunde.de` ↔ `kunde.de`) kommt automatisch dazu und leitet auf den Haupt-Hostnamen weiter. Mit `\"kind\": \"loadbalancer\"` ein HTTP(S)-Load-Balancer.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"hostname":{"type":"string"},"origin":{"type":"object","properties":{"scheme":{"default":"https","type":"string","enum":["https","http"]},"host":{"type":"string"},"port":{"type":"integer","minimum":1,"maximum":65535},"hostHeader":{"type":"string"},"verifyTls":{"default":true,"type":"boolean"},"connectTimeoutMs":{"default":5000,"type":"integer","minimum":500,"maximum":30000},"firstByteTimeoutMs":{"default":60000,"type":"integer","minimum":1000,"maximum":300000},"weight":{"type":"integer","minimum":1,"maximum":100},"state":{"type":"string","enum":["active","backup","paused"]},"servers":{"maxItems":9,"type":"array","items":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer","minimum":1,"maximum":65535},"weight":{"default":1,"type":"integer","minimum":1,"maximum":100},"state":{"default":"active","type":"string","enum":["active","backup","paused"]}},"required":["host"]}},"balance":{"type":"string","enum":["round_robin","least_conn","sticky"]},"healthCheck":{"type":"boolean"},"healthPath":{"type":"string","maxLength":200,"pattern":"^\\/[A-Za-z0-9._~!$&'()*+,;=:@%\\/?-]*$"}},"required":["host"]},"preset":{"default":"none","type":"string","enum":["none","wordpress","static"]},"includeCounterpart":{"default":true,"type":"boolean"},"kind":{"default":"website","type":"string","enum":["website","loadbalancer"]}},"required":["hostname","origin"]},"example":{"hostname":"www.kunde.de","origin":{"host":"server.kunde.de","port":443}}}}},"responses":{"201":{"description":"Angelegt","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"customerId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"status":{"type":"string","enum":["pending_dns","issuing_cert","active","error","disabled"]},"lastError":{"type":["string","null"]},"hostnames":{"type":"array","items":{"type":"object","properties":{"fqdn":{"type":"string"},"connectMethod":{"type":"string","enum":["cname","alias","static"]},"cnameTarget":{"type":["string","null"]},"ownershipTxt":{"type":["string","null"]},"dnsStatus":{"type":"string","enum":["unchecked","ok","wrong_target","not_found","error","unverified"]},"dnsCheckedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"redirectToPrimary":{"type":"boolean"}},"required":["fqdn","connectMethod","cnameTarget","ownershipTxt","dnsStatus","dnsCheckedAt","redirectToPrimary"],"additionalProperties":false}},"kind":{"type":"string","enum":["website","loadbalancer"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","customerId","name","status","lastError","hostnames","kind","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/domains/{id}":{"get":{"operationId":"get-v1-domains-id","tags":["Websites"],"summary":"Eine Website","description":"Mit Server, Cache-Einstellungen, Regeln, Zertifikat (`certificate`).","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"customerId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"status":{"type":"string","enum":["pending_dns","issuing_cert","active","error","disabled"]},"lastError":{"type":["string","null"]},"hostnames":{"type":"array","items":{"type":"object","properties":{"fqdn":{"type":"string"},"connectMethod":{"type":"string","enum":["cname","alias","static"]},"cnameTarget":{"type":["string","null"]},"ownershipTxt":{"type":["string","null"]},"dnsStatus":{"type":"string","enum":["unchecked","ok","wrong_target","not_found","error","unverified"]},"dnsCheckedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"redirectToPrimary":{"type":"boolean"}},"required":["fqdn","connectMethod","cnameTarget","ownershipTxt","dnsStatus","dnsCheckedAt","redirectToPrimary"],"additionalProperties":false}},"kind":{"type":"string","enum":["website","loadbalancer"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","customerId","name","status","lastError","hostnames","kind","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch-v1-domains-id","tags":["Websites"],"summary":"Website ändern","description":"Server (`origin`, auch mehrere mit `origin.servers`) oder an/aus (`enabled`). Nur übergebene Felder ändern sich.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"origin":{"type":"object","properties":{"scheme":{"default":"https","type":"string","enum":["https","http"]},"host":{"type":"string"},"port":{"type":"integer","minimum":1,"maximum":65535},"hostHeader":{"type":"string"},"verifyTls":{"default":true,"type":"boolean"},"connectTimeoutMs":{"default":5000,"type":"integer","minimum":500,"maximum":30000},"firstByteTimeoutMs":{"default":60000,"type":"integer","minimum":1000,"maximum":300000},"weight":{"type":"integer","minimum":1,"maximum":100},"state":{"type":"string","enum":["active","backup","paused"]},"servers":{"maxItems":9,"type":"array","items":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer","minimum":1,"maximum":65535},"weight":{"default":1,"type":"integer","minimum":1,"maximum":100},"state":{"default":"active","type":"string","enum":["active","backup","paused"]}},"required":["host"]}},"balance":{"type":"string","enum":["round_robin","least_conn","sticky"]},"healthCheck":{"type":"boolean"},"healthPath":{"type":"string","maxLength":200,"pattern":"^\\/[A-Za-z0-9._~!$&'()*+,;=:@%\\/?-]*$"}},"required":["host"]},"enabled":{"type":"boolean"}}},"example":{"enabled":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"customerId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"status":{"type":"string","enum":["pending_dns","issuing_cert","active","error","disabled"]},"lastError":{"type":["string","null"]},"hostnames":{"type":"array","items":{"type":"object","properties":{"fqdn":{"type":"string"},"connectMethod":{"type":"string","enum":["cname","alias","static"]},"cnameTarget":{"type":["string","null"]},"ownershipTxt":{"type":["string","null"]},"dnsStatus":{"type":"string","enum":["unchecked","ok","wrong_target","not_found","error","unverified"]},"dnsCheckedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"redirectToPrimary":{"type":"boolean"}},"required":["fqdn","connectMethod","cnameTarget","ownershipTxt","dnsStatus","dnsCheckedAt","redirectToPrimary"],"additionalProperties":false}},"kind":{"type":"string","enum":["website","loadbalancer"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","customerId","name","status","lastError","hostnames","kind","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"},"delete":{"operationId":"delete-v1-domains-id","tags":["Websites"],"summary":"Website löschen","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"204":{"description":"Erledigt, ohne Inhalt"},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/domains/{id}/hostnames":{"post":{"operationId":"post-v1-domains-id-hostnames","tags":["Websites"],"summary":"Hostnamen hinzufügen","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"hostname":{"type":"string"},"connectMethod":{"type":"string","enum":["cname","alias","static"]},"redirectToPrimary":{"default":false,"type":"boolean"}},"required":["hostname"]},"example":{"hostname":"shop.kunde.de"}}}},"responses":{"201":{"description":"Angelegt","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/domains/{id}/hostnames/{hostname}":{"patch":{"operationId":"patch-v1-domains-id-hostnames-hostname","tags":["Websites"],"summary":"Hostnamen ändern","description":"Anbindung (`cname`, `alias`, `static`) und Weiterleitung auf den Haupt-Hostnamen.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"},{"name":"hostname","in":"path","required":true,"description":"Hostname, z. B. www.kunde.de","schema":{"type":"string"},"example":"www.kunde.de"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"connectMethod":{"type":"string","enum":["cname","alias","static"]},"redirectToPrimary":{"type":"boolean"}}},"example":{"redirectToPrimary":true}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"},"delete":{"operationId":"delete-v1-domains-id-hostnames-hostname","tags":["Websites"],"summary":"Hostnamen entfernen","description":"Nicht den Haupt-Hostnamen.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"},{"name":"hostname","in":"path","required":true,"description":"Hostname, z. B. www.kunde.de","schema":{"type":"string"},"example":"www.kunde.de"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/domains/{id}/dns-check":{"post":{"operationId":"post-v1-domains-id-dns-check","tags":["Websites"],"summary":"DNS jetzt prüfen","description":"Zeigen die Hostnamen auf das CDN? `dnsStatus`: `unchecked`, `ok`, `wrong_target`, `not_found`, `error`, `unverified`. Höchstens 6 je Minute.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/domains/{id}/origin-test":{"post":{"operationId":"post-v1-domains-id-origin-test","tags":["Websites"],"summary":"Server testen","description":"Verbindung zum Server der Website jetzt testen (wie „Server prüfen“ im Portal): erreichbar, TLS, Antwort. 20 Tests je 10 Minuten.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/domains/{id}/activity":{"get":{"operationId":"get-v1-domains-id-activity","tags":["Websites"],"summary":"Verlauf","description":"Ausfälle, Zertifikate, Wartung, Schutz, Cache-Leerungen und Änderungen – neueste zuerst.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"},{"name":"kind","in":"query","required":false,"description":"Nur eine Art von Ereignis: `outage`, `certificate`, `maintenance`, `security`, `cache`, `change`","schema":{"type":"string","enum":["outage","certificate","maintenance","security","cache","change"]}},{"name":"days","in":"query","required":false,"description":"Zeitraum in Tagen (1–30, Standard 14)","schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},{"name":"limit","in":"query","required":false,"description":"Höchstens so viele (1–200, Standard 50)","schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/domains/{id}/cache":{"put":{"operationId":"put-v1-domains-id-cache","tags":["Cache"],"summary":"Cache-Einstellungen","description":"Ersetzt alle Einstellungen; fehlende Felder bekommen den Standardwert.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"respectOriginHeaders":{"default":true,"type":"boolean"},"defaultTtlSeconds":{"default":3600,"type":"integer","minimum":0,"maximum":31536000},"maxTtlSeconds":{"default":2592000,"type":"integer","minimum":0,"maximum":31536000},"staleIfErrorSeconds":{"default":86400,"type":"integer","minimum":0,"maximum":31536000},"queryMode":{"default":"include","type":"string","enum":["include","ignore","whitelist"]},"queryWhitelist":{"default":[],"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"bypassCookies":{"default":[],"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":200}},"preset":{"default":"none","type":"string","enum":["none","wordpress","static"]},"compression":{"default":true,"type":"boolean"}}},"example":{"preset":"wordpress"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/domains/{id}/rules":{"put":{"operationId":"put-v1-domains-id-rules","tags":["Cache"],"summary":"Cache-Regeln ersetzen","description":"Ersetzt alle Regeln (höchstens 100).","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rules":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"priority":{"default":100,"type":"integer","minimum":0,"maximum":10000},"matchType":{"type":"string","enum":["prefix","exact","extension","regex"]},"pattern":{"type":"string","minLength":1,"maxLength":200},"action":{"type":"string","enum":["bypass","cache","override_ttl"]},"ttlSeconds":{"type":"integer","minimum":0,"maximum":31536000},"description":{"type":"string","maxLength":200}},"required":["matchType","pattern","action"]}}},"required":["rules"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/domains/{id}/routing":{"get":{"operationId":"get-v1-domains-id-routing","tags":["Cache"],"summary":"Weiterleitungen und Header-Regeln","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"redirects":{"default":[],"maxItems":200,"type":"array","items":{"type":"object","properties":{"match":{"default":"exact","type":"string","enum":["exact","prefix"]},"path":{"type":"string","maxLength":300,"pattern":"^\\/[A-Za-z0-9._~!*()@,:=+\\/-]*$"},"target":{"type":"string","minLength":1,"maxLength":1000,"pattern":"^(https?:\\/\\/[A-Za-z0-9.-]+(:\\d{1,5})?(\\/[A-Za-z0-9._~!*()@,:=+%\\/?&#-]*)?|\\/[A-Za-z0-9._~!*()@,:=+%\\/?&#-]*)$"},"status":{"default":301,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"keepPath":{"default":true,"type":"boolean"},"keepQuery":{"default":true,"type":"boolean"},"note":{"default":"","type":"string","maxLength":100}},"required":["match","path","target","status","keepPath","keepQuery","note"],"additionalProperties":false}},"headers":{"default":[],"maxItems":50,"type":"array","items":{"type":"object","properties":{"path":{"default":"/","type":"string","maxLength":300,"pattern":"^\\/[A-Za-z0-9._~!*()@,:=+\\/-]*$"},"name":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9][A-Za-z0-9-]*$"},"action":{"default":"set","type":"string","enum":["set","remove"]},"value":{"default":"","type":"string","maxLength":1000,"pattern":"^[\\x20-\\x7e]*$"}},"required":["path","name","action","value"],"additionalProperties":false}}},"required":["redirects","headers"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"operationId":"put-v1-domains-id-routing","tags":["Cache"],"summary":"Weiterleitungen und Header-Regeln ersetzen","description":"Ersetzt die übergebenen Teile (`redirects`, `headers`).","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"redirects":{"maxItems":200,"type":"array","items":{"type":"object","properties":{"match":{"default":"exact","type":"string","enum":["exact","prefix"]},"path":{"type":"string","maxLength":300,"pattern":"^\\/[A-Za-z0-9._~!*()@,:=+\\/-]*$"},"target":{"type":"string","minLength":1,"maxLength":1000,"pattern":"^(https?:\\/\\/[A-Za-z0-9.-]+(:\\d{1,5})?(\\/[A-Za-z0-9._~!*()@,:=+%\\/?&#-]*)?|\\/[A-Za-z0-9._~!*()@,:=+%\\/?&#-]*)$"},"status":{"default":301,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"keepPath":{"default":true,"type":"boolean"},"keepQuery":{"default":true,"type":"boolean"},"note":{"default":"","type":"string","maxLength":100}},"required":["path","target"]}},"headers":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"path":{"default":"/","type":"string","maxLength":300,"pattern":"^\\/[A-Za-z0-9._~!*()@,:=+\\/-]*$"},"name":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9][A-Za-z0-9-]*$"},"action":{"default":"set","type":"string","enum":["set","remove"]},"value":{"default":"","type":"string","maxLength":1000,"pattern":"^[\\x20-\\x7e]*$"}},"required":["name"]}}}},"example":{"redirects":[{"path":"/alt","target":"/neu"}]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"redirects":{"default":[],"maxItems":200,"type":"array","items":{"type":"object","properties":{"match":{"default":"exact","type":"string","enum":["exact","prefix"]},"path":{"type":"string","maxLength":300,"pattern":"^\\/[A-Za-z0-9._~!*()@,:=+\\/-]*$"},"target":{"type":"string","minLength":1,"maxLength":1000,"pattern":"^(https?:\\/\\/[A-Za-z0-9.-]+(:\\d{1,5})?(\\/[A-Za-z0-9._~!*()@,:=+%\\/?&#-]*)?|\\/[A-Za-z0-9._~!*()@,:=+%\\/?&#-]*)$"},"status":{"default":301,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"keepPath":{"default":true,"type":"boolean"},"keepQuery":{"default":true,"type":"boolean"},"note":{"default":"","type":"string","maxLength":100}},"required":["match","path","target","status","keepPath","keepQuery","note"],"additionalProperties":false}},"headers":{"default":[],"maxItems":50,"type":"array","items":{"type":"object","properties":{"path":{"default":"/","type":"string","maxLength":300,"pattern":"^\\/[A-Za-z0-9._~!*()@,:=+\\/-]*$"},"name":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9][A-Za-z0-9-]*$"},"action":{"default":"set","type":"string","enum":["set","remove"]},"value":{"default":"","type":"string","maxLength":1000,"pattern":"^[\\x20-\\x7e]*$"}},"required":["path","name","action","value"],"additionalProperties":false}}},"required":["redirects","headers"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/domains/{id}/purges":{"get":{"operationId":"get-v1-domains-id-purges","tags":["Cache"],"summary":"Letzte Cache-Leerungen","description":"Die letzten 50.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"purges":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"domainId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"type":{"type":"string","enum":["url","prefix","all","tag"]},"value":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"nodesTotal":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"nodesDone":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"nodesFailed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"completed":{"type":"boolean"}},"required":["id","domainId","type","value","createdAt","nodesTotal","nodesDone","nodesFailed","completed"],"additionalProperties":false}}},"required":["purges"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post-v1-domains-id-purges","tags":["Cache"],"summary":"Cache leeren","description":"Eine Adresse (`url`), alles unter einem Pfad (`prefix`), nach Cache-Tags (`tag`) oder alles (`all`). Gilt in Sekunden auf allen Knoten; Fortschritt über `GET /v1/purges/{id}`.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"url"},"url":{"type":"string","maxLength":2048,"format":"uri"}},"required":["type","url"]},{"type":"object","properties":{"type":{"type":"string","const":"prefix"},"prefix":{"type":"string","minLength":1,"maxLength":200}},"required":["type","prefix"]},{"type":"object","properties":{"type":{"type":"string","const":"all"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","const":"tag"},"tags":{"minItems":1,"maxItems":30,"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_:.-]{1,128}$"}}},"required":["type","tags"]}]},"example":{"type":"all"}}}},"responses":{"202":{"description":"Angenommen","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"domainId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"type":{"type":"string","enum":["url","prefix","all","tag"]},"value":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"nodesTotal":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"nodesDone":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"nodesFailed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"completed":{"type":"boolean"}},"required":["id","domainId","type","value","createdAt","nodesTotal","nodesDone","nodesFailed","completed"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/purges/{id}":{"get":{"operationId":"get-v1-purges-id","tags":["Cache"],"summary":"Fortschritt einer Cache-Leerung","description":"`nodesDone`, `nodesFailed`, `completed` über alle Knoten.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"domainId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"type":{"type":"string","enum":["url","prefix","all","tag"]},"value":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"nodesTotal":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"nodesDone":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"nodesFailed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"completed":{"type":"boolean"}},"required":["id","domainId","type","value","createdAt","nodesTotal","nodesDone","nodesFailed","completed"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/domains/{id}/security":{"get":{"operationId":"get-v1-domains-id-security","tags":["Sicherheit"],"summary":"Schutzfunktionen","description":"IP-Regeln, Länder, Rate-Limits je Pfad, „Unter Angriff“, Wartung, Sicherheits-Header, WAF und Bots.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ipRules":{"default":[],"maxItems":500,"type":"array","items":{"type":"object","properties":{"cidr":{"type":"string"},"action":{"type":"string","enum":["block","allow"]},"note":{"default":"","type":"string","maxLength":100}},"required":["cidr","action","note"],"additionalProperties":false}},"countries":{"default":{"mode":"off","list":[]},"type":"object","properties":{"mode":{"default":"off","type":"string","enum":["off","block","allow"]},"list":{"default":[],"maxItems":250,"type":"array","items":{"type":"string"}}},"required":["mode","list"],"additionalProperties":false},"pathLimits":{"default":[],"maxItems":20,"type":"array","items":{"type":"object","properties":{"path":{"type":"string","maxLength":200,"pattern":"^\\/[A-Za-z0-9._~!*()@,:=+%\\/-]*$"},"requests":{"type":"integer","minimum":1,"maximum":10000},"per":{"type":"string","enum":["second","minute"]}},"required":["path","requests","per"],"additionalProperties":false}},"underAttack":{"default":false,"type":"boolean"},"maintenance":{"default":{"enabled":false,"title":"","message":"","until":"","startsAt":"","autoEnd":false},"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"title":{"default":"","type":"string","maxLength":100},"message":{"default":"","type":"string","maxLength":1000},"until":{"default":"","type":"string"},"startsAt":{"default":"","type":"string"},"autoEnd":{"default":false,"type":"boolean"}},"required":["enabled","title","message","until","startsAt","autoEnd"],"additionalProperties":false},"unavailable":{"default":{"title":"","message":""},"type":"object","properties":{"title":{"default":"","type":"string","maxLength":100},"message":{"default":"","type":"string","maxLength":1000}},"required":["title","message"],"additionalProperties":false},"contact":{"default":"","type":"string","maxLength":200},"headers":{"default":{"hstsMaxAge":0,"hstsSubdomains":false,"hstsPreload":false,"nosniff":false,"frameOptions":"off","referrerPolicy":"off","hidePoweredBy":false},"type":"object","properties":{"hstsMaxAge":{"default":0,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"hstsSubdomains":{"default":false,"type":"boolean"},"hstsPreload":{"default":false,"type":"boolean"},"nosniff":{"default":false,"type":"boolean"},"frameOptions":{"default":"off","type":"string","enum":["off","sameorigin","deny"]},"referrerPolicy":{"default":"off","type":"string","enum":["off","strict-origin-when-cross-origin","same-origin","no-referrer"]},"hidePoweredBy":{"default":false,"type":"boolean"}},"required":["hstsMaxAge","hstsSubdomains","hstsPreload","nosniff","frameOptions","referrerPolicy","hidePoweredBy"],"additionalProperties":false},"waf":{"default":{"mode":"off","groups":["sqli","xss","traversal","files","rce","scanner"],"skipPaths":[]},"type":"object","properties":{"mode":{"default":"off","type":"string","enum":["off","log","block"]},"groups":{"default":["sqli","xss","traversal","files","rce","scanner"],"maxItems":6,"type":"array","items":{"type":"string","enum":["sqli","xss","traversal","files","rce","scanner"]}},"skipPaths":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","maxLength":300,"pattern":"^\\/[A-Za-z0-9._~!*()@,:=+\\/-]*$"}}},"required":["mode","groups","skipPaths"],"additionalProperties":false},"bots":{"default":{"verifyGood":false,"blockAi":false},"type":"object","properties":{"verifyGood":{"default":false,"type":"boolean"},"blockAi":{"default":false,"type":"boolean"}},"required":["verifyGood","blockAi"],"additionalProperties":false},"access":{"default":{"team":false,"ips":[],"hours":12},"type":"object","properties":{"team":{"default":false,"type":"boolean"},"ips":{"default":[],"maxItems":100,"type":"array","items":{"type":"string"}},"hours":{"default":12,"type":"integer","minimum":1,"maximum":168}},"required":["team","ips","hours"],"additionalProperties":false}},"required":["ipRules","countries","pathLimits","underAttack","maintenance","unavailable","contact","headers","waf","bots","access"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch-v1-domains-id-security","tags":["Sicherheit"],"summary":"Schutzfunktionen ändern","description":"Nur die übergebenen Teile – z. B. den Wartungsmodus vor einem Update einschalten. `action: \"allow\"` nimmt eine Adresse von Länder-Sperre, Wartung und „Unter Angriff“ aus.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ipRules":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"cidr":{"type":"string"},"action":{"type":"string","enum":["block","allow"]},"note":{"default":"","type":"string","maxLength":100}},"required":["cidr","action"]}},"countries":{"type":"object","properties":{"mode":{"type":"string","enum":["off","block","allow"]},"list":{"maxItems":250,"type":"array","items":{"type":"string"}}},"required":["mode","list"]},"pathLimits":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"path":{"type":"string","maxLength":200,"pattern":"^\\/[A-Za-z0-9._~!*()@,:=+%\\/-]*$"},"requests":{"type":"integer","minimum":1,"maximum":10000},"per":{"type":"string","enum":["second","minute"]}},"required":["path","requests","per"]}},"underAttack":{"type":"boolean"},"maintenance":{"type":"object","properties":{"enabled":{"type":"boolean"},"title":{"type":"string","maxLength":100},"message":{"type":"string","maxLength":1000},"until":{"type":"string"},"startsAt":{"type":"string"},"autoEnd":{"type":"boolean"}}},"contact":{"type":"string","maxLength":200},"unavailable":{"type":"object","properties":{"title":{"type":"string","maxLength":100},"message":{"type":"string","maxLength":1000}}},"headers":{"type":"object","properties":{"hstsMaxAge":{"default":0,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"hstsSubdomains":{"default":false,"type":"boolean"},"hstsPreload":{"default":false,"type":"boolean"},"nosniff":{"default":false,"type":"boolean"},"frameOptions":{"default":"off","type":"string","enum":["off","sameorigin","deny"]},"referrerPolicy":{"default":"off","type":"string","enum":["off","strict-origin-when-cross-origin","same-origin","no-referrer"]},"hidePoweredBy":{"default":false,"type":"boolean"}}},"waf":{"type":"object","properties":{"mode":{"default":"off","type":"string","enum":["off","log","block"]},"groups":{"default":["sqli","xss","traversal","files","rce","scanner"],"maxItems":6,"type":"array","items":{"type":"string","enum":["sqli","xss","traversal","files","rce","scanner"]}},"skipPaths":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","maxLength":300,"pattern":"^\\/[A-Za-z0-9._~!*()@,:=+\\/-]*$"}}}},"bots":{"type":"object","properties":{"verifyGood":{"default":false,"type":"boolean"},"blockAi":{"default":false,"type":"boolean"}}},"access":{"type":"object","properties":{"team":{"default":false,"type":"boolean"},"ips":{"default":[],"maxItems":100,"type":"array","items":{"type":"string"}},"hours":{"default":12,"type":"integer","minimum":1,"maximum":168}}}}},"example":{"maintenance":{"enabled":true}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ipRules":{"default":[],"maxItems":500,"type":"array","items":{"type":"object","properties":{"cidr":{"type":"string"},"action":{"type":"string","enum":["block","allow"]},"note":{"default":"","type":"string","maxLength":100}},"required":["cidr","action","note"],"additionalProperties":false}},"countries":{"default":{"mode":"off","list":[]},"type":"object","properties":{"mode":{"default":"off","type":"string","enum":["off","block","allow"]},"list":{"default":[],"maxItems":250,"type":"array","items":{"type":"string"}}},"required":["mode","list"],"additionalProperties":false},"pathLimits":{"default":[],"maxItems":20,"type":"array","items":{"type":"object","properties":{"path":{"type":"string","maxLength":200,"pattern":"^\\/[A-Za-z0-9._~!*()@,:=+%\\/-]*$"},"requests":{"type":"integer","minimum":1,"maximum":10000},"per":{"type":"string","enum":["second","minute"]}},"required":["path","requests","per"],"additionalProperties":false}},"underAttack":{"default":false,"type":"boolean"},"maintenance":{"default":{"enabled":false,"title":"","message":"","until":"","startsAt":"","autoEnd":false},"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"title":{"default":"","type":"string","maxLength":100},"message":{"default":"","type":"string","maxLength":1000},"until":{"default":"","type":"string"},"startsAt":{"default":"","type":"string"},"autoEnd":{"default":false,"type":"boolean"}},"required":["enabled","title","message","until","startsAt","autoEnd"],"additionalProperties":false},"unavailable":{"default":{"title":"","message":""},"type":"object","properties":{"title":{"default":"","type":"string","maxLength":100},"message":{"default":"","type":"string","maxLength":1000}},"required":["title","message"],"additionalProperties":false},"contact":{"default":"","type":"string","maxLength":200},"headers":{"default":{"hstsMaxAge":0,"hstsSubdomains":false,"hstsPreload":false,"nosniff":false,"frameOptions":"off","referrerPolicy":"off","hidePoweredBy":false},"type":"object","properties":{"hstsMaxAge":{"default":0,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"hstsSubdomains":{"default":false,"type":"boolean"},"hstsPreload":{"default":false,"type":"boolean"},"nosniff":{"default":false,"type":"boolean"},"frameOptions":{"default":"off","type":"string","enum":["off","sameorigin","deny"]},"referrerPolicy":{"default":"off","type":"string","enum":["off","strict-origin-when-cross-origin","same-origin","no-referrer"]},"hidePoweredBy":{"default":false,"type":"boolean"}},"required":["hstsMaxAge","hstsSubdomains","hstsPreload","nosniff","frameOptions","referrerPolicy","hidePoweredBy"],"additionalProperties":false},"waf":{"default":{"mode":"off","groups":["sqli","xss","traversal","files","rce","scanner"],"skipPaths":[]},"type":"object","properties":{"mode":{"default":"off","type":"string","enum":["off","log","block"]},"groups":{"default":["sqli","xss","traversal","files","rce","scanner"],"maxItems":6,"type":"array","items":{"type":"string","enum":["sqli","xss","traversal","files","rce","scanner"]}},"skipPaths":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","maxLength":300,"pattern":"^\\/[A-Za-z0-9._~!*()@,:=+\\/-]*$"}}},"required":["mode","groups","skipPaths"],"additionalProperties":false},"bots":{"default":{"verifyGood":false,"blockAi":false},"type":"object","properties":{"verifyGood":{"default":false,"type":"boolean"},"blockAi":{"default":false,"type":"boolean"}},"required":["verifyGood","blockAi"],"additionalProperties":false},"access":{"default":{"team":false,"ips":[],"hours":12},"type":"object","properties":{"team":{"default":false,"type":"boolean"},"ips":{"default":[],"maxItems":100,"type":"array","items":{"type":"string"}},"hours":{"default":12,"type":"integer","minimum":1,"maximum":168}},"required":["team","ips","hours"],"additionalProperties":false}},"required":["ipRules","countries","pathLimits","underAttack","maintenance","unavailable","contact","headers","waf","bots","access"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/domains/{id}/origin-check":{"post":{"operationId":"post-v1-domains-id-origin-check","tags":["Sicherheit"],"summary":"Origin-Schutz prüfen","description":"Ist der Server direkt erreichbar, verraten DNS-Einträge seine Adresse, erkennt er das CDN? 10 Prüfungen je 10 Minuten.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"checkedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"originIps":{"type":"array","items":{"type":"string"}},"visitors":{"type":"array","items":{"type":"object","properties":{"fqdn":{"type":"string"},"ips":{"type":"array","items":{"type":"string"}},"onlyCdn":{"type":"boolean"}},"required":["fqdn","ips","onlyCdn"],"additionalProperties":false}},"leaks":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"detail":{"type":"string"}},"required":["name","type","detail"],"additionalProperties":false}},"direct":{"type":"object","properties":{"result":{"type":"string","enum":["blocked","rejected","open","unknown"]},"detail":{"type":"string"}},"required":["result","detail"],"additionalProperties":false}},"required":["checkedAt","originIps","visitors","leaks","direct"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/domains/{id}/stats":{"get":{"operationId":"get-v1-domains-id-stats","tags":["Statistik"],"summary":"Anfragen und Traffic","description":"Anfragen, ausgelieferte Daten, Cache-Treffer und Statuscodes aus Sicht der Edges. Standard: letzte 24 Stunden je Stunde.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"},{"name":"from","in":"query","required":false,"description":"Beginn (ISO 8601)","schema":{"type":"string"},"example":"2026-11-01T00:00:00Z"},{"name":"to","in":"query","required":false,"description":"Ende (ISO 8601)","schema":{"type":"string"},"example":"2026-11-02T00:00:00Z"},{"name":"interval","in":"query","required":false,"description":"`5m`, `1h` oder `1d`","schema":{"type":"string","enum":["5m","1h","1d"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/domains/{id}/stats/security":{"get":{"operationId":"get-v1-domains-id-stats-security","tags":["Statistik"],"summary":"Abgefangene Anfragen","description":"Was die Schutzfunktionen abgefangen haben, nach Grund.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"},{"name":"range","in":"query","required":false,"description":"`24h` (Standard) oder `7d`","schema":{"type":"string","enum":["24h","7d"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/dns/zones":{"get":{"operationId":"get-v1-dns-zones","tags":["DNS"],"summary":"Alle DNS-Zonen","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post-v1-dns-zones","tags":["DNS"],"summary":"Zone anlegen","description":"Zustand `pending`, bis die Nameserver beim Registrar umgestellt sind.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Domain ohne www, z. B. kunde.de"}},"required":["name"]},"example":{"name":"kunde.de"}}}},"responses":{"201":{"description":"Angelegt","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/dns/zones/{id}":{"get":{"operationId":"get-v1-dns-zones-id","tags":["DNS"],"summary":"Eine Zone","description":"Mit Einträgen und `cdnNameservers` (beim Registrar einzutragen).","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"operationId":"delete-v1-dns-zones-id","tags":["DNS"],"summary":"Zone entfernen","description":"Vorher beim Registrar andere Nameserver einstellen.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"204":{"description":"Erledigt, ohne Inhalt"},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/dns/zones/{id}/check":{"post":{"operationId":"post-v1-dns-zones-id-check","tags":["DNS"],"summary":"Nameserver jetzt prüfen","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/dns/zones/{id}/records":{"get":{"operationId":"get-v1-dns-zones-id-records","tags":["DNS"],"summary":"Einträge","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post-v1-dns-zones-id-records","tags":["DNS"],"summary":"Eintrag anlegen","description":"Namen relativ zur Zone (`@`, `www`) oder voll. MX/SRV mit `priority`, SRV mit `weight`/`port`, CAA mit `tag`; `proxied` schaltet einen Namen über das CDN.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"default":"@","type":"string","maxLength":253},"type":{"type":"string","enum":["A","AAAA","CNAME","MX","TXT","SRV","CAA","NS"]},"ttl":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"content":{"type":"string","maxLength":4000},"priority":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"weight":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"port":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"tag":{"anyOf":[{"type":"string","enum":["issue","issuewild","iodef"]},{"type":"null"}]},"proxied":{"type":"boolean"},"comment":{"type":"string","maxLength":200}},"required":["type","content"]},"example":{"name":"www","type":"A","content":"203.0.113.10","ttl":3600}}}},"responses":{"201":{"description":"Angelegt","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/dns/zones/{id}/records/{recordId}":{"put":{"operationId":"put-v1-dns-zones-id-records-recordid","tags":["DNS"],"summary":"Eintrag ersetzen","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"},{"name":"recordId","in":"path","required":true,"description":"Kennung des Eintrags","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"default":"@","type":"string","maxLength":253},"type":{"type":"string","enum":["A","AAAA","CNAME","MX","TXT","SRV","CAA","NS"]},"ttl":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"content":{"type":"string","maxLength":4000},"priority":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"weight":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"port":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"tag":{"anyOf":[{"type":"string","enum":["issue","issuewild","iodef"]},{"type":"null"}]},"proxied":{"type":"boolean"},"comment":{"type":"string","maxLength":200}},"required":["type","content"]},"example":{"name":"www","type":"A","content":"203.0.113.11","ttl":3600}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"},"delete":{"operationId":"delete-v1-dns-zones-id-records-recordid","tags":["DNS"],"summary":"Eintrag löschen","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"},{"name":"recordId","in":"path","required":true,"description":"Kennung des Eintrags","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"204":{"description":"Erledigt, ohne Inhalt"},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/dns/zones/{id}/records/bulk":{"post":{"operationId":"post-v1-dns-zones-id-records-bulk","tags":["DNS"],"summary":"Mehrere Einträge auf einmal","description":"Löschen bzw. über das CDN an/aus – eine Änderung im Verlauf (auf einmal rückgängig).","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["delete","proxied_on","proxied_off"]},"ids":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}}},"required":["action","ids"]},"example":{"action":"delete","ids":["01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/dns/zones/{id}/export":{"get":{"operationId":"get-v1-dns-zones-id-export","tags":["DNS"],"summary":"Zonendatei (BIND)","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"text/plain":{"schema":{"type":"string"}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/dns/zones/{id}/import":{"post":{"operationId":"post-v1-dns-zones-id-import","tags":["DNS"],"summary":"Zonendatei übernehmen","description":"Antwort: übernommen, übersprungen, Fehler, nicht unterstützt.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"zonefile":{"type":"string","description":"Inhalt im BIND-Format"}},"required":["zonefile"]},"example":{"zonefile":"$ORIGIN kunde.de.\nwww 3600 IN A 203.0.113.10"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/dns/zones/{id}/changes":{"get":{"operationId":"get-v1-dns-zones-id-changes","tags":["DNS"],"summary":"Verlauf der Zone","description":"Je Änderung Urheber, Zusammenfassung, Einträge vorher/nachher und `undoable`.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/dns/zones/{id}/changes/export":{"get":{"operationId":"get-v1-dns-zones-id-changes-export","tags":["DNS"],"summary":"Verlauf als CSV","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"},{"name":"q","in":"query","required":false,"description":"Suchtext","schema":{"type":"string"}},{"name":"wer","in":"query","required":false,"description":"Urheber (Name, E-Mail oder API-Key)","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"text/csv":{"schema":{"type":"string"}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/dns/zones/{id}/changes/{changeId}/undo":{"post":{"operationId":"post-v1-dns-zones-id-changes-changeid-undo","tags":["DNS"],"summary":"Änderung rückgängig machen","description":"`409`, wenn die Einträge seitdem geändert wurden oder das Ergebnis ungültig wäre.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"},{"name":"changeId","in":"path","required":true,"description":"Kennung der Änderung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/dns/zones/{id}/dnssec":{"get":{"operationId":"get-v1-dns-zones-id-dnssec","tags":["DNS"],"summary":"DNSSEC-Zustand","description":"`dsStatus`: `none`, `ok`, `foreign`, `error`; `key` mit DS und DNSKEY.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post-v1-dns-zones-id-dnssec","tags":["DNS"],"summary":"DNSSEC einschalten","description":"Nur aktive Zonen. Antwort mit DS und DNSKEY für den Registrar.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"201":{"description":"Angelegt","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"},"delete":{"operationId":"delete-v1-dns-zones-id-dnssec","tags":["DNS"],"summary":"DNSSEC ausschalten","description":"`409`, solange der DS-Eintrag beim Registrar steht.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"204":{"description":"Erledigt, ohne Inhalt"},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/dns/zones/{id}/dyndns":{"get":{"operationId":"get-v1-dns-zones-id-dyndns","tags":["DNS"],"summary":"DynDNS-Zugänge","description":"Ohne Tokens.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post-v1-dns-zones-id-dyndns","tags":["DNS"],"summary":"DynDNS-Zugang anlegen","description":"Antwort mit `token` – nur dieses eine Mal.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":60},"names":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"string"}},"ipv6InterfaceId":{"type":["string","null"]}},"required":["label","names"]},"example":{"label":"Fritzbox","names":["home"]}}}},"responses":{"201":{"description":"Angelegt","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/dns/zones/{id}/dyndns/{dyndnsId}":{"delete":{"operationId":"delete-v1-dns-zones-id-dyndns-dyndnsid","tags":["DNS"],"summary":"DynDNS-Zugang löschen","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"},{"name":"dyndnsId","in":"path","required":true,"description":"Kennung des DynDNS-Zugangs","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"204":{"description":"Erledigt, ohne Inhalt"},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/dns/zones/{id}/dyndns/{dyndnsId}/token":{"post":{"operationId":"post-v1-dns-zones-id-dyndns-dyndnsid-token","tags":["DNS"],"summary":"Neues DynDNS-Token","description":"Das alte gilt sofort nicht mehr; das neue steht nur in dieser Antwort.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"},{"name":"dyndnsId","in":"path","required":true,"description":"Kennung des DynDNS-Zugangs","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/dns/acme/present":{"post":{"operationId":"post-v1-dns-acme-present","tags":["DNS"],"summary":"ACME-Eintrag setzen (DNS-01)","description":"Für eigene Zertifikate (z. B. Platzhalter) mit lego `httpreq`. Antwortet, sobald alle Nameserver des CDN den Eintrag ausliefern (höchstens nach einer Minute). Auch per Basic-Auth (Kennwort = API-Key).","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"fqdn":{"type":"string","minLength":1,"maxLength":255},"value":{"type":"string","minLength":1,"maxLength":255}},"required":["fqdn"]},"example":{"fqdn":"_acme-challenge.kunde.de.","value":"abc…"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/dns/acme/cleanup":{"post":{"operationId":"post-v1-dns-acme-cleanup","tags":["DNS"],"summary":"ACME-Eintrag entfernen","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"fqdn":{"type":"string","minLength":1,"maxLength":255},"value":{"type":"string","minLength":1,"maxLength":255}},"required":["fqdn"]},"example":{"fqdn":"_acme-challenge.kunde.de.","value":"abc…"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/integration/game-servers":{"get":{"operationId":"get-v1-integration-game-servers","tags":["Gameserver-Schnittstelle"],"summary":"Alle Server der Schnittstelle","description":"Zum Abgleich mit dem Panel: alle Server, die über die Schnittstelle angelegt wurden.","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"servers":{"type":"array","items":{"type":"object","properties":{"externalId":{"type":"string"},"id":{"type":"string"},"label":{"type":"string"},"address":{"type":"string"},"addressDomain":{"type":["string","null"]},"cnameTarget":{"type":"string"},"dns":{"type":"object","properties":{"automatic":{"type":"boolean"},"status":{"type":"string","enum":["unchecked","ok","missing","wrong"]}},"required":["automatic","status"],"additionalProperties":false},"server":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["host","port"],"additionalProperties":false},"protection":{"type":"string","enum":["basis","standard","streng"]},"options":{"type":"object","properties":{"countries":{"type":"array","items":{"type":"string"}},"blockVpn":{"type":"boolean"},"edgeWhitelist":{"type":"boolean"},"publicStatus":{"type":"boolean"}},"required":["countries","blockVpn","edgeWhitelist","publicStatus"],"additionalProperties":false},"forwarding":{"type":"string","enum":["plugin","proxy"]},"enabled":{"type":"boolean"},"maintenance":{"type":"boolean"},"plugin":{"anyOf":[{"type":"object","properties":{"seenAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"version":{"type":"string"},"players":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxPlayers":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["seenAt","version","players","maxPlayers"],"additionalProperties":false},{"type":"null"}]},"protectedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["externalId","id","label","address","addressDomain","cnameTarget","dns","server","protection","options","forwarding","enabled","maintenance","plugin","protectedAt","createdAt","updatedAt"],"additionalProperties":false}}},"required":["servers"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/integration/plugins":{"get":{"operationId":"get-v1-integration-plugins","tags":["Gameserver-Schnittstelle"],"summary":"Plugins und Mods zur Auswahl","description":"Alle Jars mit Plattform, Minecraft-Versionen, Ordner und Java – für die Auswahl im Panel, statt einer festen Liste. Mit `minecraft` (und `loader`) steht in `recommended` das passende (`null` = keins, dann PROXY-Protokoll). Herunterladen über `…/game-servers/{externalId}/plugin?platform=…`.","parameters":[{"name":"minecraft","in":"query","required":false,"description":"Minecraft-Version des Servers","schema":{"type":"string"},"example":"1.12.2"},{"name":"loader","in":"query","required":false,"description":"`paper` (Standard, auch Spigot), `fabric`, `forge`, `neoforge`","schema":{"type":"string"},"example":"forge"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"plugins":{"type":"array","items":{"type":"object","properties":{"platform":{"type":"string","enum":["paper","velocity","bungeecord","fabric","fabric-1.21","neoforge","neoforge-1.21","paper-legacy","forge","forge-legacy","fabric-legacy"]},"name":{"type":"string"},"label":{"type":"string"},"minecraft":{"type":"string"},"loader":{"type":"string","enum":["paper","velocity","bungeecord","fabric","forge","neoforge"]},"folder":{"type":"string","enum":["plugins","mods"]},"java":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"commands":{"type":"boolean"}},"required":["platform","name","label","minecraft","loader","folder","java","commands"],"additionalProperties":false}},"recommended":{"anyOf":[{"type":"string","enum":["paper","velocity","bungeecord","fabric","fabric-1.21","neoforge","neoforge-1.21","paper-legacy","forge","forge-legacy","fabric-legacy"]},{"type":"null"}]}},"required":["plugins","recommended"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/integration/domains":{"get":{"operationId":"get-v1-integration-domains","tags":["Gameserver-Schnittstelle"],"summary":"Adress-Domains zur Auswahl","description":"Domains, unter denen Kunden im Panel einen Namen wählen (ohne eigene Domain). Beim `PUT` dann `\"address\": { \"domain\", \"name\" }` – den DNS-Eintrag legt das CDN an.","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"domains":{"type":"array","items":{"type":"object","properties":{"domain":{"type":"string"},"label":{"type":"string"}},"required":["domain","label"],"additionalProperties":false}}},"required":["domains"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/integration/domains/check":{"get":{"operationId":"get-v1-integration-domains-check","tags":["Gameserver-Schnittstelle"],"summary":"Ist der Name frei?","description":"Für die Prüfung beim Tippen im Panel.","parameters":[{"name":"domain","in":"query","required":true,"description":"Adress-Domain","schema":{"type":"string"},"example":"play.ihr-hosting.de"},{"name":"name","in":"query","required":true,"description":"Wunschname","schema":{"type":"string"},"example":"meinserver"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"available":{"type":"boolean"},"address":{"type":"string"},"reason":{"type":"string"}},"required":["available","address"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/integration/game-servers/{externalId}":{"get":{"operationId":"get-v1-integration-game-servers-externalid","tags":["Gameserver-Schnittstelle"],"summary":"Ein Server","description":"Zustand: DNS, Plugin (Version, Spieler), Schutz geprüft, Wartung.","parameters":[{"name":"externalId","in":"path","required":true,"description":"Kennung des Servers in Ihrem Panel, z. B. srv-1234","schema":{"type":"string"},"example":"srv-1234"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"externalId":{"type":"string"},"id":{"type":"string"},"label":{"type":"string"},"address":{"type":"string"},"addressDomain":{"type":["string","null"]},"cnameTarget":{"type":"string"},"dns":{"type":"object","properties":{"automatic":{"type":"boolean"},"status":{"type":"string","enum":["unchecked","ok","missing","wrong"]}},"required":["automatic","status"],"additionalProperties":false},"server":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["host","port"],"additionalProperties":false},"protection":{"type":"string","enum":["basis","standard","streng"]},"options":{"type":"object","properties":{"countries":{"type":"array","items":{"type":"string"}},"blockVpn":{"type":"boolean"},"edgeWhitelist":{"type":"boolean"},"publicStatus":{"type":"boolean"}},"required":["countries","blockVpn","edgeWhitelist","publicStatus"],"additionalProperties":false},"forwarding":{"type":"string","enum":["plugin","proxy"]},"enabled":{"type":"boolean"},"maintenance":{"type":"boolean"},"plugin":{"anyOf":[{"type":"object","properties":{"seenAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"version":{"type":"string"},"players":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxPlayers":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["seenAt","version","players","maxPlayers"],"additionalProperties":false},{"type":"null"}]},"protectedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["externalId","id","label","address","addressDomain","cnameTarget","dns","server","protection","options","forwarding","enabled","maintenance","plugin","protectedAt","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"operationId":"put-v1-integration-game-servers-externalid","tags":["Gameserver-Schnittstelle"],"summary":"Schutz anlegen oder ändern","description":"Gleiche Anfrage für neu (`201`) und geändert (`200`). `protection`: `basis`, `standard` oder `streng`; `options` optional. `address`: Wunschname unter einer Adress-Domain (`{ \"domain\", \"name\" }`, ohne `name` aus der Kennung; DNS automatisch) oder eine eigene Adresse des Kunden (Text; CNAME auf `cnameTarget`, außer sie liegt in einer DNS-Zone des Kontos im CDN). Die Adresse lässt sich danach nicht ändern (`409`) – dafür löschen und neu anlegen.","parameters":[{"name":"externalId","in":"path","required":true,"description":"Kennung des Servers in Ihrem Panel, z. B. srv-1234","schema":{"type":"string"},"example":"srv-1234"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"address":{"anyOf":[{"type":"string"},{"type":"object","properties":{"domain":{"type":"string"},"name":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{1,38})[a-z0-9]$"}},"required":["domain"]}]},"server":{"type":"object","properties":{"host":{"type":"string"},"port":{"default":25565,"type":"integer","minimum":1,"maximum":65535}},"required":["host"]},"protection":{"default":"standard","type":"string","enum":["basis","standard","streng"]},"options":{"default":{"countries":[],"blockVpn":false,"edgeWhitelist":true,"publicStatus":false},"type":"object","properties":{"countries":{"default":[],"maxItems":50,"type":"array","items":{"type":"string"}},"blockVpn":{"default":false,"type":"boolean"},"edgeWhitelist":{"default":true,"type":"boolean"},"publicStatus":{"default":false,"type":"boolean"}}},"forwarding":{"default":"plugin","type":"string","enum":["plugin","proxy"]},"label":{"default":"","type":"string","maxLength":100}},"required":["address","server"]},"example":{"address":{"domain":"play.ihr-hosting.de","name":"meinserver"},"server":{"host":"node7.ihr-hosting.de","port":25601},"protection":"standard","options":{"countries":["DE","AT","CH"],"blockVpn":false},"label":"Kunde 4711"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"externalId":{"type":"string"},"id":{"type":"string"},"label":{"type":"string"},"address":{"type":"string"},"addressDomain":{"type":["string","null"]},"cnameTarget":{"type":"string"},"dns":{"type":"object","properties":{"automatic":{"type":"boolean"},"status":{"type":"string","enum":["unchecked","ok","missing","wrong"]}},"required":["automatic","status"],"additionalProperties":false},"server":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["host","port"],"additionalProperties":false},"protection":{"type":"string","enum":["basis","standard","streng"]},"options":{"type":"object","properties":{"countries":{"type":"array","items":{"type":"string"}},"blockVpn":{"type":"boolean"},"edgeWhitelist":{"type":"boolean"},"publicStatus":{"type":"boolean"}},"required":["countries","blockVpn","edgeWhitelist","publicStatus"],"additionalProperties":false},"forwarding":{"type":"string","enum":["plugin","proxy"]},"enabled":{"type":"boolean"},"maintenance":{"type":"boolean"},"plugin":{"anyOf":[{"type":"object","properties":{"seenAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"version":{"type":"string"},"players":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxPlayers":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["seenAt","version","players","maxPlayers"],"additionalProperties":false},{"type":"null"}]},"protectedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["externalId","id","label","address","addressDomain","cnameTarget","dns","server","protection","options","forwarding","enabled","maintenance","plugin","protectedAt","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"},"delete":{"operationId":"delete-v1-integration-game-servers-externalid","tags":["Gameserver-Schnittstelle"],"summary":"Schutz entfernen","parameters":[{"name":"externalId","in":"path","required":true,"description":"Kennung des Servers in Ihrem Panel, z. B. srv-1234","schema":{"type":"string"},"example":"srv-1234"}],"responses":{"204":{"description":"Erledigt, ohne Inhalt"},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/integration/game-servers/{externalId}/maintenance":{"post":{"operationId":"post-v1-integration-game-servers-externalid-maintenance","tags":["Gameserver-Schnittstelle"],"summary":"Wartung an oder aus","description":"Spieler sehen den Text (`motd`) in der Serverliste; der Server bekommt nichts.","parameters":[{"name":"externalId","in":"path","required":true,"description":"Kennung des Servers in Ihrem Panel, z. B. srv-1234","schema":{"type":"string"},"example":"srv-1234"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"},"motd":{"type":"string","maxLength":200}},"required":["enabled"]},"example":{"enabled":true,"motd":"§eWartung – gleich zurück"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"externalId":{"type":"string"},"id":{"type":"string"},"label":{"type":"string"},"address":{"type":"string"},"addressDomain":{"type":["string","null"]},"cnameTarget":{"type":"string"},"dns":{"type":"object","properties":{"automatic":{"type":"boolean"},"status":{"type":"string","enum":["unchecked","ok","missing","wrong"]}},"required":["automatic","status"],"additionalProperties":false},"server":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["host","port"],"additionalProperties":false},"protection":{"type":"string","enum":["basis","standard","streng"]},"options":{"type":"object","properties":{"countries":{"type":"array","items":{"type":"string"}},"blockVpn":{"type":"boolean"},"edgeWhitelist":{"type":"boolean"},"publicStatus":{"type":"boolean"}},"required":["countries","blockVpn","edgeWhitelist","publicStatus"],"additionalProperties":false},"forwarding":{"type":"string","enum":["plugin","proxy"]},"enabled":{"type":"boolean"},"maintenance":{"type":"boolean"},"plugin":{"anyOf":[{"type":"object","properties":{"seenAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"version":{"type":"string"},"players":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxPlayers":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["seenAt","version","players","maxPlayers"],"additionalProperties":false},{"type":"null"}]},"protectedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["externalId","id","label","address","addressDomain","cnameTarget","dns","server","protection","options","forwarding","enabled","maintenance","plugin","protectedAt","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/integration/game-servers/{externalId}/plugin":{"get":{"operationId":"get-v1-integration-game-servers-externalid-plugin","tags":["Gameserver-Schnittstelle"],"summary":"Plugin bzw. Mod für den Server","description":"Mit Geheimnis und Adresse dieses Servers; in `plugins` bzw. `mods` legen. Aktualisiert sich danach selbst.","parameters":[{"name":"externalId","in":"path","required":true,"description":"Kennung des Servers in Ihrem Panel, z. B. srv-1234","schema":{"type":"string"},"example":"srv-1234"},{"name":"platform","in":"query","required":false,"description":"paper (Standard, 1.18.2+), velocity, bungeecord, paper-legacy (Spigot/Paper 1.8.8–1.18.1), fabric (26.x), fabric-1.21, fabric-legacy (1.14–1.20.x), neoforge (26.x), neoforge-1.21, forge (Forge 1.13–1.20.x, NeoForge 1.20.x), forge-legacy (Forge 1.8.9–1.12.2)","schema":{"type":"string","enum":["paper","velocity","bungeecord","fabric","fabric-1.21","neoforge","neoforge-1.21","paper-legacy","forge","forge-legacy","fabric-legacy"]},"example":"paper"},{"name":"minecraft","in":"query","required":false,"description":"Statt `platform`: Minecraft-Version (z. B. `1.12.2`) – das Portal wählt das passende Jar, zusammen mit `loader`. Nicht unterstützt → `400 unsupported_version`.","schema":{"type":"string"},"example":"1.12.2"},{"name":"loader","in":"query","required":false,"description":"`paper` (Standard, auch Spigot), `fabric`, `forge`, `neoforge` – nur mit `minecraft`","schema":{"type":"string","enum":["paper","fabric","forge","neoforge"]},"example":"forge"}],"responses":{"200":{"description":"OK","content":{"application/java-archive":{"schema":{"type":"string"}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/game-servers":{"get":{"operationId":"get-v1-game-servers","tags":["Spielserver"],"summary":"Alle Spielserver","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"gameServers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"customerId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"edition":{"type":"string","const":"java"},"hostname":{"type":"string"},"cnameTarget":{"type":"string"},"origin":{"type":"object","properties":{"host":{},"port":{"default":25565,"type":"integer","minimum":1,"maximum":65535},"weight":{"type":"integer","minimum":1,"maximum":100},"state":{"type":"string","enum":["active","backup","paused"]},"servers":{"maxItems":9,"type":"array","items":{"type":"object","properties":{"host":{},"port":{"default":25565,"type":"integer","minimum":1,"maximum":65535},"weight":{"default":1,"type":"integer","minimum":1,"maximum":100},"state":{"default":"active","type":"string","enum":["active","backup","paused"]}},"required":["host","port","weight","state"],"additionalProperties":false}},"balance":{"type":"string","enum":["round_robin","least_conn"]}},"required":["host","port"],"additionalProperties":false},"enabled":{"type":"boolean"},"dnsStatus":{"type":"string","enum":["unchecked","ok","missing","wrong"]},"dnsCheckedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"protectedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"pluginDownloadedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"pluginSeenAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"plugin":{"anyOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["paper","velocity","bungeecord","fabric","fabric-1.21","neoforge","neoforge-1.21","paper-legacy","forge","forge-legacy","fabric-legacy"]},"pluginVersion":{"type":"string","maxLength":32},"serverVersion":{"type":"string","maxLength":100},"onlyCdn":{"type":"boolean"},"players":{"type":"object","properties":{"online":{"type":"integer","minimum":0,"maximum":1000000},"max":{"type":"integer","minimum":-1,"maximum":1000000}},"required":["online","max"],"additionalProperties":false},"tps":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"rejected":{"type":"integer","minimum":0,"maximum":9007199254740991},"uptimeSeconds":{"type":"integer","minimum":0,"maximum":9007199254740991},"autoUpdate":{"type":"boolean"},"updateReady":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"diag":{"type":"object","properties":{"memUsedMb":{"type":"integer","minimum":0,"maximum":10000000},"memMaxMb":{"type":"integer","minimum":0,"maximum":10000000},"mspt":{"anyOf":[{"type":"number","minimum":0,"maximum":100000},{"type":"null"}]},"worlds":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","maxLength":64},"chunks":{"type":"integer","minimum":0,"maximum":9007199254740991},"entities":{"type":"integer","minimum":0,"maximum":9007199254740991},"players":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["name","chunks","entities","players"],"additionalProperties":false}}},"required":["memUsedMb","memMaxMb","mspt","worlds"],"additionalProperties":false}},"required":["platform","pluginVersion","serverVersion","onlyCdn","players","tps","rejected","uptimeSeconds"],"additionalProperties":false},{"type":"null"}]},"restartingUntil":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"sync":{"anyOf":[{"type":"object","properties":{"bans":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"whitelist":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["bans","whitelist","at"],"additionalProperties":false},{"type":"null"}]},"settings":{"type":"object","properties":{"connectionsPerMinute":{"default":20,"type":"integer","minimum":2,"maximum":600},"ipRules":{"default":[],"maxItems":500,"type":"array","items":{"type":"object","properties":{"cidr":{"type":"string"},"action":{"type":"string","enum":["block","allow"]},"note":{"default":"","type":"string","maxLength":100}},"required":["cidr","action","note"],"additionalProperties":false}},"countries":{"default":{"mode":"off","list":[]},"type":"object","properties":{"mode":{"default":"off","type":"string","enum":["off","block","allow"]},"list":{"default":[],"maxItems":250,"type":"array","items":{"type":"string"}}},"required":["mode","list"],"additionalProperties":false},"maintenance":{"default":{"enabled":false,"motd":"","message":"","startsAt":null,"endsAt":null},"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"motd":{"default":"","type":"string","maxLength":200},"message":{"default":"","type":"string","maxLength":300},"startsAt":{"default":null,"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"endsAt":{"default":null,"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["enabled","motd","message","startsAt","endsAt"],"additionalProperties":false},"unavailableMessage":{"default":"","type":"string","maxLength":300},"botProtection":{"default":"auto","type":"string","enum":["off","auto","always"]},"vpnFilter":{"default":"verify","type":"string","enum":["off","verify","block"]},"loginChecks":{"default":true,"type":"boolean"},"publicStatus":{"default":false,"type":"boolean"},"forwarding":{"default":"plugin","type":"string","enum":["plugin","proxy"]},"syncBans":{"default":true,"type":"boolean"},"edgeWhitelist":{"default":true,"type":"boolean"},"vpnRegulars":{"default":{"enabled":true,"minSessions":3},"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"minSessions":{"default":3,"type":"integer","minimum":1,"maximum":50}},"required":["enabled","minSessions"],"additionalProperties":false},"vpnAllow":{"default":[],"maxItems":1000,"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_]{1,16}$"}},"serverList":{"default":{"mode":"off","motd":"","icon":null,"hidePlayers":false},"type":"object","properties":{"mode":{"default":"off","type":"string","enum":["off","offline","always"]},"motd":{"default":"","type":"string","maxLength":256},"icon":{"default":null,"anyOf":[{"type":"string","maxLength":24000,"pattern":"^data:image\\/png;base64,[A-Za-z0-9+/=]+$"},{"type":"null"}]},"hidePlayers":{"default":false,"type":"boolean"}},"required":["mode","motd","icon","hidePlayers"],"additionalProperties":false},"queue":{"default":{"enabled":true,"maxWaitSeconds":180,"whenFull":true},"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"maxWaitSeconds":{"default":180,"type":"integer","minimum":30,"maximum":600},"whenFull":{"default":true,"type":"boolean"}},"required":["enabled","maxWaitSeconds","whenFull"],"additionalProperties":false}},"required":["connectionsPerMinute","ipRules","countries","maintenance","unavailableMessage","botProtection","vpnFilter","loginChecks","publicStatus","forwarding","syncBans","edgeWhitelist","vpnRegulars","vpnAllow","serverList","queue"],"additionalProperties":false},"externalId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","customerId","edition","hostname","cnameTarget","origin","enabled","dnsStatus","dnsCheckedAt","protectedAt","pluginDownloadedAt","pluginSeenAt","plugin","restartingUntil","sync","settings","externalId","createdAt","updatedAt"],"additionalProperties":false}}},"required":["gameServers"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post-v1-game-servers","tags":["Spielserver"],"summary":"Spielserver anlegen","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"hostname":{"type":"string"},"origin":{"type":"object","properties":{"host":{"type":"string"},"port":{"default":25565,"type":"integer","minimum":1,"maximum":65535},"weight":{"type":"integer","minimum":1,"maximum":100},"state":{"type":"string","enum":["active","backup","paused"]},"servers":{"maxItems":9,"type":"array","items":{"type":"object","properties":{"host":{"type":"string"},"port":{"default":25565,"type":"integer","minimum":1,"maximum":65535},"weight":{"default":1,"type":"integer","minimum":1,"maximum":100},"state":{"default":"active","type":"string","enum":["active","backup","paused"]}},"required":["host"]}},"balance":{"type":"string","enum":["round_robin","least_conn"]}},"required":["host"]},"forwarding":{"type":"string","enum":["plugin","proxy"]}},"required":["hostname","origin"]},"example":{"hostname":"play.kunde.de","origin":{"host":"mc.kunde.de","port":25565}}}}},"responses":{"201":{"description":"Angelegt","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"customerId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"edition":{"type":"string","const":"java"},"hostname":{"type":"string"},"cnameTarget":{"type":"string"},"origin":{"type":"object","properties":{"host":{},"port":{"default":25565,"type":"integer","minimum":1,"maximum":65535},"weight":{"type":"integer","minimum":1,"maximum":100},"state":{"type":"string","enum":["active","backup","paused"]},"servers":{"maxItems":9,"type":"array","items":{"type":"object","properties":{"host":{},"port":{"default":25565,"type":"integer","minimum":1,"maximum":65535},"weight":{"default":1,"type":"integer","minimum":1,"maximum":100},"state":{"default":"active","type":"string","enum":["active","backup","paused"]}},"required":["host","port","weight","state"],"additionalProperties":false}},"balance":{"type":"string","enum":["round_robin","least_conn"]}},"required":["host","port"],"additionalProperties":false},"enabled":{"type":"boolean"},"dnsStatus":{"type":"string","enum":["unchecked","ok","missing","wrong"]},"dnsCheckedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"protectedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"pluginDownloadedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"pluginSeenAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"plugin":{"anyOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["paper","velocity","bungeecord","fabric","fabric-1.21","neoforge","neoforge-1.21","paper-legacy","forge","forge-legacy","fabric-legacy"]},"pluginVersion":{"type":"string","maxLength":32},"serverVersion":{"type":"string","maxLength":100},"onlyCdn":{"type":"boolean"},"players":{"type":"object","properties":{"online":{"type":"integer","minimum":0,"maximum":1000000},"max":{"type":"integer","minimum":-1,"maximum":1000000}},"required":["online","max"],"additionalProperties":false},"tps":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"rejected":{"type":"integer","minimum":0,"maximum":9007199254740991},"uptimeSeconds":{"type":"integer","minimum":0,"maximum":9007199254740991},"autoUpdate":{"type":"boolean"},"updateReady":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"diag":{"type":"object","properties":{"memUsedMb":{"type":"integer","minimum":0,"maximum":10000000},"memMaxMb":{"type":"integer","minimum":0,"maximum":10000000},"mspt":{"anyOf":[{"type":"number","minimum":0,"maximum":100000},{"type":"null"}]},"worlds":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","maxLength":64},"chunks":{"type":"integer","minimum":0,"maximum":9007199254740991},"entities":{"type":"integer","minimum":0,"maximum":9007199254740991},"players":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["name","chunks","entities","players"],"additionalProperties":false}}},"required":["memUsedMb","memMaxMb","mspt","worlds"],"additionalProperties":false}},"required":["platform","pluginVersion","serverVersion","onlyCdn","players","tps","rejected","uptimeSeconds"],"additionalProperties":false},{"type":"null"}]},"restartingUntil":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"sync":{"anyOf":[{"type":"object","properties":{"bans":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"whitelist":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["bans","whitelist","at"],"additionalProperties":false},{"type":"null"}]},"settings":{"type":"object","properties":{"connectionsPerMinute":{"default":20,"type":"integer","minimum":2,"maximum":600},"ipRules":{"default":[],"maxItems":500,"type":"array","items":{"type":"object","properties":{"cidr":{"type":"string"},"action":{"type":"string","enum":["block","allow"]},"note":{"default":"","type":"string","maxLength":100}},"required":["cidr","action","note"],"additionalProperties":false}},"countries":{"default":{"mode":"off","list":[]},"type":"object","properties":{"mode":{"default":"off","type":"string","enum":["off","block","allow"]},"list":{"default":[],"maxItems":250,"type":"array","items":{"type":"string"}}},"required":["mode","list"],"additionalProperties":false},"maintenance":{"default":{"enabled":false,"motd":"","message":"","startsAt":null,"endsAt":null},"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"motd":{"default":"","type":"string","maxLength":200},"message":{"default":"","type":"string","maxLength":300},"startsAt":{"default":null,"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"endsAt":{"default":null,"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["enabled","motd","message","startsAt","endsAt"],"additionalProperties":false},"unavailableMessage":{"default":"","type":"string","maxLength":300},"botProtection":{"default":"auto","type":"string","enum":["off","auto","always"]},"vpnFilter":{"default":"verify","type":"string","enum":["off","verify","block"]},"loginChecks":{"default":true,"type":"boolean"},"publicStatus":{"default":false,"type":"boolean"},"forwarding":{"default":"plugin","type":"string","enum":["plugin","proxy"]},"syncBans":{"default":true,"type":"boolean"},"edgeWhitelist":{"default":true,"type":"boolean"},"vpnRegulars":{"default":{"enabled":true,"minSessions":3},"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"minSessions":{"default":3,"type":"integer","minimum":1,"maximum":50}},"required":["enabled","minSessions"],"additionalProperties":false},"vpnAllow":{"default":[],"maxItems":1000,"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_]{1,16}$"}},"serverList":{"default":{"mode":"off","motd":"","icon":null,"hidePlayers":false},"type":"object","properties":{"mode":{"default":"off","type":"string","enum":["off","offline","always"]},"motd":{"default":"","type":"string","maxLength":256},"icon":{"default":null,"anyOf":[{"type":"string","maxLength":24000,"pattern":"^data:image\\/png;base64,[A-Za-z0-9+/=]+$"},{"type":"null"}]},"hidePlayers":{"default":false,"type":"boolean"}},"required":["mode","motd","icon","hidePlayers"],"additionalProperties":false},"queue":{"default":{"enabled":true,"maxWaitSeconds":180,"whenFull":true},"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"maxWaitSeconds":{"default":180,"type":"integer","minimum":30,"maximum":600},"whenFull":{"default":true,"type":"boolean"}},"required":["enabled","maxWaitSeconds","whenFull"],"additionalProperties":false}},"required":["connectionsPerMinute","ipRules","countries","maintenance","unavailableMessage","botProtection","vpnFilter","loginChecks","publicStatus","forwarding","syncBans","edgeWhitelist","vpnRegulars","vpnAllow","serverList","queue"],"additionalProperties":false},"externalId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","customerId","edition","hostname","cnameTarget","origin","enabled","dnsStatus","dnsCheckedAt","protectedAt","pluginDownloadedAt","pluginSeenAt","plugin","restartingUntil","sync","settings","externalId","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/game-servers/{id}":{"get":{"operationId":"get-v1-game-servers-id","tags":["Spielserver"],"summary":"Ein Spielserver","description":"Mit Einstellungen, DNS-Status und der letzten Meldung des Plugins (`plugin`).","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"customerId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"edition":{"type":"string","const":"java"},"hostname":{"type":"string"},"cnameTarget":{"type":"string"},"origin":{"type":"object","properties":{"host":{},"port":{"default":25565,"type":"integer","minimum":1,"maximum":65535},"weight":{"type":"integer","minimum":1,"maximum":100},"state":{"type":"string","enum":["active","backup","paused"]},"servers":{"maxItems":9,"type":"array","items":{"type":"object","properties":{"host":{},"port":{"default":25565,"type":"integer","minimum":1,"maximum":65535},"weight":{"default":1,"type":"integer","minimum":1,"maximum":100},"state":{"default":"active","type":"string","enum":["active","backup","paused"]}},"required":["host","port","weight","state"],"additionalProperties":false}},"balance":{"type":"string","enum":["round_robin","least_conn"]}},"required":["host","port"],"additionalProperties":false},"enabled":{"type":"boolean"},"dnsStatus":{"type":"string","enum":["unchecked","ok","missing","wrong"]},"dnsCheckedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"protectedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"pluginDownloadedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"pluginSeenAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"plugin":{"anyOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["paper","velocity","bungeecord","fabric","fabric-1.21","neoforge","neoforge-1.21","paper-legacy","forge","forge-legacy","fabric-legacy"]},"pluginVersion":{"type":"string","maxLength":32},"serverVersion":{"type":"string","maxLength":100},"onlyCdn":{"type":"boolean"},"players":{"type":"object","properties":{"online":{"type":"integer","minimum":0,"maximum":1000000},"max":{"type":"integer","minimum":-1,"maximum":1000000}},"required":["online","max"],"additionalProperties":false},"tps":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"rejected":{"type":"integer","minimum":0,"maximum":9007199254740991},"uptimeSeconds":{"type":"integer","minimum":0,"maximum":9007199254740991},"autoUpdate":{"type":"boolean"},"updateReady":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"diag":{"type":"object","properties":{"memUsedMb":{"type":"integer","minimum":0,"maximum":10000000},"memMaxMb":{"type":"integer","minimum":0,"maximum":10000000},"mspt":{"anyOf":[{"type":"number","minimum":0,"maximum":100000},{"type":"null"}]},"worlds":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","maxLength":64},"chunks":{"type":"integer","minimum":0,"maximum":9007199254740991},"entities":{"type":"integer","minimum":0,"maximum":9007199254740991},"players":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["name","chunks","entities","players"],"additionalProperties":false}}},"required":["memUsedMb","memMaxMb","mspt","worlds"],"additionalProperties":false}},"required":["platform","pluginVersion","serverVersion","onlyCdn","players","tps","rejected","uptimeSeconds"],"additionalProperties":false},{"type":"null"}]},"restartingUntil":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"sync":{"anyOf":[{"type":"object","properties":{"bans":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"whitelist":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["bans","whitelist","at"],"additionalProperties":false},{"type":"null"}]},"settings":{"type":"object","properties":{"connectionsPerMinute":{"default":20,"type":"integer","minimum":2,"maximum":600},"ipRules":{"default":[],"maxItems":500,"type":"array","items":{"type":"object","properties":{"cidr":{"type":"string"},"action":{"type":"string","enum":["block","allow"]},"note":{"default":"","type":"string","maxLength":100}},"required":["cidr","action","note"],"additionalProperties":false}},"countries":{"default":{"mode":"off","list":[]},"type":"object","properties":{"mode":{"default":"off","type":"string","enum":["off","block","allow"]},"list":{"default":[],"maxItems":250,"type":"array","items":{"type":"string"}}},"required":["mode","list"],"additionalProperties":false},"maintenance":{"default":{"enabled":false,"motd":"","message":"","startsAt":null,"endsAt":null},"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"motd":{"default":"","type":"string","maxLength":200},"message":{"default":"","type":"string","maxLength":300},"startsAt":{"default":null,"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"endsAt":{"default":null,"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["enabled","motd","message","startsAt","endsAt"],"additionalProperties":false},"unavailableMessage":{"default":"","type":"string","maxLength":300},"botProtection":{"default":"auto","type":"string","enum":["off","auto","always"]},"vpnFilter":{"default":"verify","type":"string","enum":["off","verify","block"]},"loginChecks":{"default":true,"type":"boolean"},"publicStatus":{"default":false,"type":"boolean"},"forwarding":{"default":"plugin","type":"string","enum":["plugin","proxy"]},"syncBans":{"default":true,"type":"boolean"},"edgeWhitelist":{"default":true,"type":"boolean"},"vpnRegulars":{"default":{"enabled":true,"minSessions":3},"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"minSessions":{"default":3,"type":"integer","minimum":1,"maximum":50}},"required":["enabled","minSessions"],"additionalProperties":false},"vpnAllow":{"default":[],"maxItems":1000,"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_]{1,16}$"}},"serverList":{"default":{"mode":"off","motd":"","icon":null,"hidePlayers":false},"type":"object","properties":{"mode":{"default":"off","type":"string","enum":["off","offline","always"]},"motd":{"default":"","type":"string","maxLength":256},"icon":{"default":null,"anyOf":[{"type":"string","maxLength":24000,"pattern":"^data:image\\/png;base64,[A-Za-z0-9+/=]+$"},{"type":"null"}]},"hidePlayers":{"default":false,"type":"boolean"}},"required":["mode","motd","icon","hidePlayers"],"additionalProperties":false},"queue":{"default":{"enabled":true,"maxWaitSeconds":180,"whenFull":true},"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"maxWaitSeconds":{"default":180,"type":"integer","minimum":30,"maximum":600},"whenFull":{"default":true,"type":"boolean"}},"required":["enabled","maxWaitSeconds","whenFull"],"additionalProperties":false}},"required":["connectionsPerMinute","ipRules","countries","maintenance","unavailableMessage","botProtection","vpnFilter","loginChecks","publicStatus","forwarding","syncBans","edgeWhitelist","vpnRegulars","vpnAllow","serverList","queue"],"additionalProperties":false},"externalId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","customerId","edition","hostname","cnameTarget","origin","enabled","dnsStatus","dnsCheckedAt","protectedAt","pluginDownloadedAt","pluginSeenAt","plugin","restartingUntil","sync","settings","externalId","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch-v1-game-servers-id","tags":["Spielserver"],"summary":"Spielserver ändern","description":"Server (`origin`, auch mehrere) oder an/aus (`enabled`).","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"origin":{"type":"object","properties":{"host":{"type":"string"},"port":{"default":25565,"type":"integer","minimum":1,"maximum":65535},"weight":{"type":"integer","minimum":1,"maximum":100},"state":{"type":"string","enum":["active","backup","paused"]},"servers":{"maxItems":9,"type":"array","items":{"type":"object","properties":{"host":{"type":"string"},"port":{"default":25565,"type":"integer","minimum":1,"maximum":65535},"weight":{"default":1,"type":"integer","minimum":1,"maximum":100},"state":{"default":"active","type":"string","enum":["active","backup","paused"]}},"required":["host"]}},"balance":{"type":"string","enum":["round_robin","least_conn"]}},"required":["host"]},"enabled":{"type":"boolean"}}},"example":{"enabled":true}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"customerId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"edition":{"type":"string","const":"java"},"hostname":{"type":"string"},"cnameTarget":{"type":"string"},"origin":{"type":"object","properties":{"host":{},"port":{"default":25565,"type":"integer","minimum":1,"maximum":65535},"weight":{"type":"integer","minimum":1,"maximum":100},"state":{"type":"string","enum":["active","backup","paused"]},"servers":{"maxItems":9,"type":"array","items":{"type":"object","properties":{"host":{},"port":{"default":25565,"type":"integer","minimum":1,"maximum":65535},"weight":{"default":1,"type":"integer","minimum":1,"maximum":100},"state":{"default":"active","type":"string","enum":["active","backup","paused"]}},"required":["host","port","weight","state"],"additionalProperties":false}},"balance":{"type":"string","enum":["round_robin","least_conn"]}},"required":["host","port"],"additionalProperties":false},"enabled":{"type":"boolean"},"dnsStatus":{"type":"string","enum":["unchecked","ok","missing","wrong"]},"dnsCheckedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"protectedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"pluginDownloadedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"pluginSeenAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"plugin":{"anyOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["paper","velocity","bungeecord","fabric","fabric-1.21","neoforge","neoforge-1.21","paper-legacy","forge","forge-legacy","fabric-legacy"]},"pluginVersion":{"type":"string","maxLength":32},"serverVersion":{"type":"string","maxLength":100},"onlyCdn":{"type":"boolean"},"players":{"type":"object","properties":{"online":{"type":"integer","minimum":0,"maximum":1000000},"max":{"type":"integer","minimum":-1,"maximum":1000000}},"required":["online","max"],"additionalProperties":false},"tps":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"rejected":{"type":"integer","minimum":0,"maximum":9007199254740991},"uptimeSeconds":{"type":"integer","minimum":0,"maximum":9007199254740991},"autoUpdate":{"type":"boolean"},"updateReady":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"diag":{"type":"object","properties":{"memUsedMb":{"type":"integer","minimum":0,"maximum":10000000},"memMaxMb":{"type":"integer","minimum":0,"maximum":10000000},"mspt":{"anyOf":[{"type":"number","minimum":0,"maximum":100000},{"type":"null"}]},"worlds":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","maxLength":64},"chunks":{"type":"integer","minimum":0,"maximum":9007199254740991},"entities":{"type":"integer","minimum":0,"maximum":9007199254740991},"players":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["name","chunks","entities","players"],"additionalProperties":false}}},"required":["memUsedMb","memMaxMb","mspt","worlds"],"additionalProperties":false}},"required":["platform","pluginVersion","serverVersion","onlyCdn","players","tps","rejected","uptimeSeconds"],"additionalProperties":false},{"type":"null"}]},"restartingUntil":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"sync":{"anyOf":[{"type":"object","properties":{"bans":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"whitelist":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["bans","whitelist","at"],"additionalProperties":false},{"type":"null"}]},"settings":{"type":"object","properties":{"connectionsPerMinute":{"default":20,"type":"integer","minimum":2,"maximum":600},"ipRules":{"default":[],"maxItems":500,"type":"array","items":{"type":"object","properties":{"cidr":{"type":"string"},"action":{"type":"string","enum":["block","allow"]},"note":{"default":"","type":"string","maxLength":100}},"required":["cidr","action","note"],"additionalProperties":false}},"countries":{"default":{"mode":"off","list":[]},"type":"object","properties":{"mode":{"default":"off","type":"string","enum":["off","block","allow"]},"list":{"default":[],"maxItems":250,"type":"array","items":{"type":"string"}}},"required":["mode","list"],"additionalProperties":false},"maintenance":{"default":{"enabled":false,"motd":"","message":"","startsAt":null,"endsAt":null},"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"motd":{"default":"","type":"string","maxLength":200},"message":{"default":"","type":"string","maxLength":300},"startsAt":{"default":null,"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"endsAt":{"default":null,"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["enabled","motd","message","startsAt","endsAt"],"additionalProperties":false},"unavailableMessage":{"default":"","type":"string","maxLength":300},"botProtection":{"default":"auto","type":"string","enum":["off","auto","always"]},"vpnFilter":{"default":"verify","type":"string","enum":["off","verify","block"]},"loginChecks":{"default":true,"type":"boolean"},"publicStatus":{"default":false,"type":"boolean"},"forwarding":{"default":"plugin","type":"string","enum":["plugin","proxy"]},"syncBans":{"default":true,"type":"boolean"},"edgeWhitelist":{"default":true,"type":"boolean"},"vpnRegulars":{"default":{"enabled":true,"minSessions":3},"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"minSessions":{"default":3,"type":"integer","minimum":1,"maximum":50}},"required":["enabled","minSessions"],"additionalProperties":false},"vpnAllow":{"default":[],"maxItems":1000,"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_]{1,16}$"}},"serverList":{"default":{"mode":"off","motd":"","icon":null,"hidePlayers":false},"type":"object","properties":{"mode":{"default":"off","type":"string","enum":["off","offline","always"]},"motd":{"default":"","type":"string","maxLength":256},"icon":{"default":null,"anyOf":[{"type":"string","maxLength":24000,"pattern":"^data:image\\/png;base64,[A-Za-z0-9+/=]+$"},{"type":"null"}]},"hidePlayers":{"default":false,"type":"boolean"}},"required":["mode","motd","icon","hidePlayers"],"additionalProperties":false},"queue":{"default":{"enabled":true,"maxWaitSeconds":180,"whenFull":true},"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"maxWaitSeconds":{"default":180,"type":"integer","minimum":30,"maximum":600},"whenFull":{"default":true,"type":"boolean"}},"required":["enabled","maxWaitSeconds","whenFull"],"additionalProperties":false}},"required":["connectionsPerMinute","ipRules","countries","maintenance","unavailableMessage","botProtection","vpnFilter","loginChecks","publicStatus","forwarding","syncBans","edgeWhitelist","vpnRegulars","vpnAllow","serverList","queue"],"additionalProperties":false},"externalId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","customerId","edition","hostname","cnameTarget","origin","enabled","dnsStatus","dnsCheckedAt","protectedAt","pluginDownloadedAt","pluginSeenAt","plugin","restartingUntil","sync","settings","externalId","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"},"delete":{"operationId":"delete-v1-game-servers-id","tags":["Spielserver"],"summary":"Spielserver löschen","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/game-servers/{id}/settings":{"patch":{"operationId":"patch-v1-game-servers-id-settings","tags":["Spielserver"],"summary":"Einstellungen ändern","description":"Wartung (auch geplant), Bot-Schutz, VPN-Filter mit Ausnahmen (`vpnRegulars`, `vpnAllow`), Länder, IP-Regeln, Serverliste (`serverList`: Text, Icon, Spielerzahl), Warteschlange (`queue`), Echte Spieler-IP (`forwarding`) … Nur übergebene Teile.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"connectionsPerMinute":{"type":"integer","minimum":2,"maximum":600},"ipRules":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"cidr":{"type":"string"},"action":{"type":"string","enum":["block","allow"]},"note":{"default":"","type":"string","maxLength":100}},"required":["cidr","action"]}},"countries":{"type":"object","properties":{"mode":{"type":"string","enum":["off","block","allow"]},"list":{"maxItems":250,"type":"array","items":{"type":"string"}}},"required":["mode","list"]},"maintenance":{"type":"object","properties":{"enabled":{"type":"boolean"},"motd":{"type":"string","maxLength":200},"message":{"type":"string","maxLength":300},"startsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}}},"unavailableMessage":{"type":"string","maxLength":300},"botProtection":{"type":"string","enum":["off","auto","always"]},"vpnFilter":{"type":"string","enum":["off","verify","block"]},"loginChecks":{"type":"boolean"},"publicStatus":{"type":"boolean"},"syncBans":{"type":"boolean"},"edgeWhitelist":{"type":"boolean"},"forwarding":{"type":"string","enum":["plugin","proxy"]},"vpnRegulars":{"type":"object","properties":{"enabled":{"type":"boolean"},"minSessions":{"type":"integer","minimum":1,"maximum":50}}},"vpnAllow":{"maxItems":1000,"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_]{1,16}$"}},"serverList":{"type":"object","properties":{"mode":{"default":"off","type":"string","enum":["off","offline","always"]},"motd":{"default":"","type":"string","maxLength":256},"icon":{"default":null,"anyOf":[{"type":"string","maxLength":24000,"pattern":"^data:image\\/png;base64,[A-Za-z0-9+/=]+$"},{"type":"null"}]},"hidePlayers":{"default":false,"type":"boolean"}}},"queue":{"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"maxWaitSeconds":{"default":180,"type":"integer","minimum":30,"maximum":600},"whenFull":{"default":true,"type":"boolean"}}}}},"example":{"maintenance":{"enabled":true,"motd":"Gleich zurück"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"customerId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"edition":{"type":"string","const":"java"},"hostname":{"type":"string"},"cnameTarget":{"type":"string"},"origin":{"type":"object","properties":{"host":{},"port":{"default":25565,"type":"integer","minimum":1,"maximum":65535},"weight":{"type":"integer","minimum":1,"maximum":100},"state":{"type":"string","enum":["active","backup","paused"]},"servers":{"maxItems":9,"type":"array","items":{"type":"object","properties":{"host":{},"port":{"default":25565,"type":"integer","minimum":1,"maximum":65535},"weight":{"default":1,"type":"integer","minimum":1,"maximum":100},"state":{"default":"active","type":"string","enum":["active","backup","paused"]}},"required":["host","port","weight","state"],"additionalProperties":false}},"balance":{"type":"string","enum":["round_robin","least_conn"]}},"required":["host","port"],"additionalProperties":false},"enabled":{"type":"boolean"},"dnsStatus":{"type":"string","enum":["unchecked","ok","missing","wrong"]},"dnsCheckedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"protectedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"pluginDownloadedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"pluginSeenAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"plugin":{"anyOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["paper","velocity","bungeecord","fabric","fabric-1.21","neoforge","neoforge-1.21","paper-legacy","forge","forge-legacy","fabric-legacy"]},"pluginVersion":{"type":"string","maxLength":32},"serverVersion":{"type":"string","maxLength":100},"onlyCdn":{"type":"boolean"},"players":{"type":"object","properties":{"online":{"type":"integer","minimum":0,"maximum":1000000},"max":{"type":"integer","minimum":-1,"maximum":1000000}},"required":["online","max"],"additionalProperties":false},"tps":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"rejected":{"type":"integer","minimum":0,"maximum":9007199254740991},"uptimeSeconds":{"type":"integer","minimum":0,"maximum":9007199254740991},"autoUpdate":{"type":"boolean"},"updateReady":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"diag":{"type":"object","properties":{"memUsedMb":{"type":"integer","minimum":0,"maximum":10000000},"memMaxMb":{"type":"integer","minimum":0,"maximum":10000000},"mspt":{"anyOf":[{"type":"number","minimum":0,"maximum":100000},{"type":"null"}]},"worlds":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","maxLength":64},"chunks":{"type":"integer","minimum":0,"maximum":9007199254740991},"entities":{"type":"integer","minimum":0,"maximum":9007199254740991},"players":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["name","chunks","entities","players"],"additionalProperties":false}}},"required":["memUsedMb","memMaxMb","mspt","worlds"],"additionalProperties":false}},"required":["platform","pluginVersion","serverVersion","onlyCdn","players","tps","rejected","uptimeSeconds"],"additionalProperties":false},{"type":"null"}]},"restartingUntil":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"sync":{"anyOf":[{"type":"object","properties":{"bans":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"whitelist":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["bans","whitelist","at"],"additionalProperties":false},{"type":"null"}]},"settings":{"type":"object","properties":{"connectionsPerMinute":{"default":20,"type":"integer","minimum":2,"maximum":600},"ipRules":{"default":[],"maxItems":500,"type":"array","items":{"type":"object","properties":{"cidr":{"type":"string"},"action":{"type":"string","enum":["block","allow"]},"note":{"default":"","type":"string","maxLength":100}},"required":["cidr","action","note"],"additionalProperties":false}},"countries":{"default":{"mode":"off","list":[]},"type":"object","properties":{"mode":{"default":"off","type":"string","enum":["off","block","allow"]},"list":{"default":[],"maxItems":250,"type":"array","items":{"type":"string"}}},"required":["mode","list"],"additionalProperties":false},"maintenance":{"default":{"enabled":false,"motd":"","message":"","startsAt":null,"endsAt":null},"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"motd":{"default":"","type":"string","maxLength":200},"message":{"default":"","type":"string","maxLength":300},"startsAt":{"default":null,"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"endsAt":{"default":null,"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["enabled","motd","message","startsAt","endsAt"],"additionalProperties":false},"unavailableMessage":{"default":"","type":"string","maxLength":300},"botProtection":{"default":"auto","type":"string","enum":["off","auto","always"]},"vpnFilter":{"default":"verify","type":"string","enum":["off","verify","block"]},"loginChecks":{"default":true,"type":"boolean"},"publicStatus":{"default":false,"type":"boolean"},"forwarding":{"default":"plugin","type":"string","enum":["plugin","proxy"]},"syncBans":{"default":true,"type":"boolean"},"edgeWhitelist":{"default":true,"type":"boolean"},"vpnRegulars":{"default":{"enabled":true,"minSessions":3},"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"minSessions":{"default":3,"type":"integer","minimum":1,"maximum":50}},"required":["enabled","minSessions"],"additionalProperties":false},"vpnAllow":{"default":[],"maxItems":1000,"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_]{1,16}$"}},"serverList":{"default":{"mode":"off","motd":"","icon":null,"hidePlayers":false},"type":"object","properties":{"mode":{"default":"off","type":"string","enum":["off","offline","always"]},"motd":{"default":"","type":"string","maxLength":256},"icon":{"default":null,"anyOf":[{"type":"string","maxLength":24000,"pattern":"^data:image\\/png;base64,[A-Za-z0-9+/=]+$"},{"type":"null"}]},"hidePlayers":{"default":false,"type":"boolean"}},"required":["mode","motd","icon","hidePlayers"],"additionalProperties":false},"queue":{"default":{"enabled":true,"maxWaitSeconds":180,"whenFull":true},"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"maxWaitSeconds":{"default":180,"type":"integer","minimum":30,"maximum":600},"whenFull":{"default":true,"type":"boolean"}},"required":["enabled","maxWaitSeconds","whenFull"],"additionalProperties":false}},"required":["connectionsPerMinute","ipRules","countries","maintenance","unavailableMessage","botProtection","vpnFilter","loginChecks","publicStatus","forwarding","syncBans","edgeWhitelist","vpnRegulars","vpnAllow","serverList","queue"],"additionalProperties":false},"externalId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","customerId","edition","hostname","cnameTarget","origin","enabled","dnsStatus","dnsCheckedAt","protectedAt","pluginDownloadedAt","pluginSeenAt","plugin","restartingUntil","sync","settings","externalId","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/game-servers/{id}/player-bans":{"get":{"operationId":"get-v1-game-servers-id-player-bans","tags":["Spielserver"],"summary":"Gesperrte Spieler","description":"Namen, die schon der Edge abweist (Kleinbuchstaben).","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"reason":{"type":"string"},"by":{"type":"string"},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["name","reason","by","at"],"additionalProperties":false}}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post-v1-game-servers-id-player-bans","tags":["Spielserver"],"summary":"Spieler sperren","description":"Gilt in wenigen Sekunden auf allen Edges – auch auf Velocity/BungeeCord und ohne Plugin. Schon gesperrt: 409.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","pattern":"^[A-Za-z0-9_]{1,16}$"},"reason":{"type":"string","maxLength":200}},"required":["name"]},"example":{"name":"Griefer123","reason":"Grief am Spawn"}}}},"responses":{"201":{"description":"Angelegt","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"reason":{"type":"string"},"by":{"type":"string"},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["name","reason","by","at"],"additionalProperties":false}}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/game-servers/{id}/player-bans/{name}":{"delete":{"operationId":"delete-v1-game-servers-id-player-bans-name","tags":["Spielserver"],"summary":"Sperre aufheben","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"},{"name":"name","in":"path","required":true,"description":"name","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"204":{"description":"Erledigt, ohne Inhalt"},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/players":{"get":{"operationId":"get-v1-players","tags":["Spielserver"],"summary":"Spieler suchen","description":"Spieler aller eigenen Spielserver der letzten 30 Tage (aus dem Verbindungslog der Edges), neueste zuerst, höchstens 100.","parameters":[{"name":"q","in":"query","required":false,"description":"Teil des Spielernamens; leer = zuletzt aktive","schema":{"type":"string"},"example":"Steve"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"lastSeen":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"sessions":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"servers":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"edge":{"type":["string","null"]},"country":{"type":["string","null"]},"banned":{"type":"boolean"}},"required":["name","lastSeen","sessions","servers","edge","country","banned"],"additionalProperties":false}}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/players/{name}":{"get":{"operationId":"get-v1-players-name","tags":["Spielserver"],"summary":"Spielerprofil","description":"Zuletzt online, Server mit Spielzeit und Sperren, Edges, Länder (aus gekürzten Adressen), Verbindungsqualität, was der Edge abgewiesen hat, letzte 30 Verbindungen.","parameters":[{"name":"name","in":"path","required":true,"description":"name","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"firstSeen":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"lastSeen":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"servers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"hostname":{"type":"string"},"lastSeen":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"sessions":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"banned":{"anyOf":[{"type":"object","properties":{"reason":{"type":"string"},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"by":{"type":"string"}},"required":["reason","at","by"],"additionalProperties":false},{"type":"null"}]}},"required":["id","hostname","lastSeen","sessions","minutes","banned"],"additionalProperties":false}},"edges":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"sessions":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["name","sessions"],"additionalProperties":false}},"countries":{"type":"array","items":{"type":"object","properties":{"country":{"type":["string","null"]},"sessions":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["country","sessions"],"additionalProperties":false}},"quality":{"type":"object","properties":{"avgMinutes":{"type":"number"},"shortSessions":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"edgeMs":{"type":["number","null"]},"rejected":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["reason","count"],"additionalProperties":false}}},"required":["avgMinutes","shortSessions","edgeMs","rejected"],"additionalProperties":false},"recent":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"server":{"type":"string"},"edge":{"type":["string","null"]},"country":{"type":["string","null"]},"minutes":{"type":"number"},"action":{"type":"string"}},"required":["at","server","edge","country","minutes","action"],"additionalProperties":false}}},"required":["name","firstSeen","lastSeen","servers","edges","countries","quality","recent"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/game-servers/{id}/plugin":{"get":{"operationId":"get-v1-game-servers-id-plugin","tags":["Spielserver"],"summary":"Plugin bzw. Mod herunterladen","description":"Fertig eingerichtet für diesen Server (mit Geheimnis – nicht weitergeben).","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"},{"name":"platform","in":"query","required":false,"description":"paper (Standard, 1.18.2+), velocity, bungeecord, paper-legacy (Spigot/Paper 1.8.8–1.18.1), fabric (26.x), fabric-1.21, fabric-legacy (1.14–1.20.x), neoforge (26.x), neoforge-1.21, forge (Forge 1.13–1.20.x, NeoForge 1.20.x), forge-legacy (Forge 1.8.9–1.12.2)","schema":{"type":"string","enum":["paper","velocity","bungeecord","fabric","fabric-1.21","neoforge","neoforge-1.21","paper-legacy","forge","forge-legacy","fabric-legacy"]},"example":"paper"},{"name":"minecraft","in":"query","required":false,"description":"Statt `platform`: Minecraft-Version (z. B. `1.12.2`) – das Portal wählt das passende Jar, zusammen mit `loader`. Nicht unterstützt → `400 unsupported_version`.","schema":{"type":"string"},"example":"1.12.2"},{"name":"loader","in":"query","required":false,"description":"`paper` (Standard, auch Spigot), `fabric`, `forge`, `neoforge` – nur mit `minecraft`","schema":{"type":"string","enum":["paper","fabric","forge","neoforge"]},"example":"forge"}],"responses":{"200":{"description":"OK","content":{"application/java-archive":{"schema":{"type":"string"}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/game-servers/{id}/dns-check":{"post":{"operationId":"post-v1-game-servers-id-dns-check","tags":["Spielserver"],"summary":"DNS jetzt prüfen","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"customerId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"edition":{"type":"string","const":"java"},"hostname":{"type":"string"},"cnameTarget":{"type":"string"},"origin":{"type":"object","properties":{"host":{},"port":{"default":25565,"type":"integer","minimum":1,"maximum":65535},"weight":{"type":"integer","minimum":1,"maximum":100},"state":{"type":"string","enum":["active","backup","paused"]},"servers":{"maxItems":9,"type":"array","items":{"type":"object","properties":{"host":{},"port":{"default":25565,"type":"integer","minimum":1,"maximum":65535},"weight":{"default":1,"type":"integer","minimum":1,"maximum":100},"state":{"default":"active","type":"string","enum":["active","backup","paused"]}},"required":["host","port","weight","state"],"additionalProperties":false}},"balance":{"type":"string","enum":["round_robin","least_conn"]}},"required":["host","port"],"additionalProperties":false},"enabled":{"type":"boolean"},"dnsStatus":{"type":"string","enum":["unchecked","ok","missing","wrong"]},"dnsCheckedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"protectedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"pluginDownloadedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"pluginSeenAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"plugin":{"anyOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["paper","velocity","bungeecord","fabric","fabric-1.21","neoforge","neoforge-1.21","paper-legacy","forge","forge-legacy","fabric-legacy"]},"pluginVersion":{"type":"string","maxLength":32},"serverVersion":{"type":"string","maxLength":100},"onlyCdn":{"type":"boolean"},"players":{"type":"object","properties":{"online":{"type":"integer","minimum":0,"maximum":1000000},"max":{"type":"integer","minimum":-1,"maximum":1000000}},"required":["online","max"],"additionalProperties":false},"tps":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"rejected":{"type":"integer","minimum":0,"maximum":9007199254740991},"uptimeSeconds":{"type":"integer","minimum":0,"maximum":9007199254740991},"autoUpdate":{"type":"boolean"},"updateReady":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"diag":{"type":"object","properties":{"memUsedMb":{"type":"integer","minimum":0,"maximum":10000000},"memMaxMb":{"type":"integer","minimum":0,"maximum":10000000},"mspt":{"anyOf":[{"type":"number","minimum":0,"maximum":100000},{"type":"null"}]},"worlds":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","maxLength":64},"chunks":{"type":"integer","minimum":0,"maximum":9007199254740991},"entities":{"type":"integer","minimum":0,"maximum":9007199254740991},"players":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["name","chunks","entities","players"],"additionalProperties":false}}},"required":["memUsedMb","memMaxMb","mspt","worlds"],"additionalProperties":false}},"required":["platform","pluginVersion","serverVersion","onlyCdn","players","tps","rejected","uptimeSeconds"],"additionalProperties":false},{"type":"null"}]},"restartingUntil":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"sync":{"anyOf":[{"type":"object","properties":{"bans":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"whitelist":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["bans","whitelist","at"],"additionalProperties":false},{"type":"null"}]},"settings":{"type":"object","properties":{"connectionsPerMinute":{"default":20,"type":"integer","minimum":2,"maximum":600},"ipRules":{"default":[],"maxItems":500,"type":"array","items":{"type":"object","properties":{"cidr":{"type":"string"},"action":{"type":"string","enum":["block","allow"]},"note":{"default":"","type":"string","maxLength":100}},"required":["cidr","action","note"],"additionalProperties":false}},"countries":{"default":{"mode":"off","list":[]},"type":"object","properties":{"mode":{"default":"off","type":"string","enum":["off","block","allow"]},"list":{"default":[],"maxItems":250,"type":"array","items":{"type":"string"}}},"required":["mode","list"],"additionalProperties":false},"maintenance":{"default":{"enabled":false,"motd":"","message":"","startsAt":null,"endsAt":null},"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"motd":{"default":"","type":"string","maxLength":200},"message":{"default":"","type":"string","maxLength":300},"startsAt":{"default":null,"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"endsAt":{"default":null,"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["enabled","motd","message","startsAt","endsAt"],"additionalProperties":false},"unavailableMessage":{"default":"","type":"string","maxLength":300},"botProtection":{"default":"auto","type":"string","enum":["off","auto","always"]},"vpnFilter":{"default":"verify","type":"string","enum":["off","verify","block"]},"loginChecks":{"default":true,"type":"boolean"},"publicStatus":{"default":false,"type":"boolean"},"forwarding":{"default":"plugin","type":"string","enum":["plugin","proxy"]},"syncBans":{"default":true,"type":"boolean"},"edgeWhitelist":{"default":true,"type":"boolean"},"vpnRegulars":{"default":{"enabled":true,"minSessions":3},"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"minSessions":{"default":3,"type":"integer","minimum":1,"maximum":50}},"required":["enabled","minSessions"],"additionalProperties":false},"vpnAllow":{"default":[],"maxItems":1000,"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_]{1,16}$"}},"serverList":{"default":{"mode":"off","motd":"","icon":null,"hidePlayers":false},"type":"object","properties":{"mode":{"default":"off","type":"string","enum":["off","offline","always"]},"motd":{"default":"","type":"string","maxLength":256},"icon":{"default":null,"anyOf":[{"type":"string","maxLength":24000,"pattern":"^data:image\\/png;base64,[A-Za-z0-9+/=]+$"},{"type":"null"}]},"hidePlayers":{"default":false,"type":"boolean"}},"required":["mode","motd","icon","hidePlayers"],"additionalProperties":false},"queue":{"default":{"enabled":true,"maxWaitSeconds":180,"whenFull":true},"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"maxWaitSeconds":{"default":180,"type":"integer","minimum":30,"maximum":600},"whenFull":{"default":true,"type":"boolean"}},"required":["enabled","maxWaitSeconds","whenFull"],"additionalProperties":false}},"required":["connectionsPerMinute","ipRules","countries","maintenance","unavailableMessage","botProtection","vpnFilter","loginChecks","publicStatus","forwarding","syncBans","edgeWhitelist","vpnRegulars","vpnAllow","serverList","queue"],"additionalProperties":false},"externalId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","customerId","edition","hostname","cnameTarget","origin","enabled","dnsStatus","dnsCheckedAt","protectedAt","pluginDownloadedAt","pluginSeenAt","plugin","restartingUntil","sync","settings","externalId","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/game-servers/{id}/test":{"post":{"operationId":"post-v1-game-servers-id-test","tags":["Spielserver"],"summary":"Server testen","description":"Antwortet er, wie viele Spieler, ist er vor direkten Verbindungen geschützt? 20 Tests je 10 Minuten.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/game-servers/{id}/stats":{"get":{"operationId":"get-v1-game-servers-id-stats","tags":["Spielserver"],"summary":"Statistik","description":"Verbindungen und Abgewiesene (24 h, `traffic`), Erreichbarkeit (30 Tage, `uptime`), Antwortzeit je Edge (`edges`) und Spieler/TPS aus dem Plugin (`history`).","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"},{"name":"range","in":"query","required":false,"description":"Verlauf: `24h` (Standard) oder `7d`","schema":{"type":"string","enum":["24h","7d"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/game-servers/{id}/activity":{"get":{"operationId":"get-v1-game-servers-id-activity","tags":["Spielserver"],"summary":"Verlauf","description":"Ausfälle, Neustarts, Sperren aus dem Spiel, Wartung, Updates des Plugins, Änderungen – neueste zuerst.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"},{"name":"kind","in":"query","required":false,"description":"Nur eine Art von Ereignis: `outage`, `restart`, `block`, `maintenance`, `update`, `change`","schema":{"type":"string","enum":["outage","restart","block","maintenance","update","change"]}},{"name":"days","in":"query","required":false,"description":"Zeitraum in Tagen (1–30, Standard 14)","schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},{"name":"limit","in":"query","required":false,"description":"Höchstens so viele (1–200, Standard 50)","schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/game-servers/{id}/secret":{"post":{"operationId":"post-v1-game-servers-id-secret","tags":["Spielserver"],"summary":"Neues Geheimnis","description":"Das bisherige Plugin ist sofort ungültig – danach das Plugin neu laden und austauschen.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"customerId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"edition":{"type":"string","const":"java"},"hostname":{"type":"string"},"cnameTarget":{"type":"string"},"origin":{"type":"object","properties":{"host":{},"port":{"default":25565,"type":"integer","minimum":1,"maximum":65535},"weight":{"type":"integer","minimum":1,"maximum":100},"state":{"type":"string","enum":["active","backup","paused"]},"servers":{"maxItems":9,"type":"array","items":{"type":"object","properties":{"host":{},"port":{"default":25565,"type":"integer","minimum":1,"maximum":65535},"weight":{"default":1,"type":"integer","minimum":1,"maximum":100},"state":{"default":"active","type":"string","enum":["active","backup","paused"]}},"required":["host","port","weight","state"],"additionalProperties":false}},"balance":{"type":"string","enum":["round_robin","least_conn"]}},"required":["host","port"],"additionalProperties":false},"enabled":{"type":"boolean"},"dnsStatus":{"type":"string","enum":["unchecked","ok","missing","wrong"]},"dnsCheckedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"protectedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"pluginDownloadedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"pluginSeenAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"plugin":{"anyOf":[{"type":"object","properties":{"platform":{"type":"string","enum":["paper","velocity","bungeecord","fabric","fabric-1.21","neoforge","neoforge-1.21","paper-legacy","forge","forge-legacy","fabric-legacy"]},"pluginVersion":{"type":"string","maxLength":32},"serverVersion":{"type":"string","maxLength":100},"onlyCdn":{"type":"boolean"},"players":{"type":"object","properties":{"online":{"type":"integer","minimum":0,"maximum":1000000},"max":{"type":"integer","minimum":-1,"maximum":1000000}},"required":["online","max"],"additionalProperties":false},"tps":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"rejected":{"type":"integer","minimum":0,"maximum":9007199254740991},"uptimeSeconds":{"type":"integer","minimum":0,"maximum":9007199254740991},"autoUpdate":{"type":"boolean"},"updateReady":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"diag":{"type":"object","properties":{"memUsedMb":{"type":"integer","minimum":0,"maximum":10000000},"memMaxMb":{"type":"integer","minimum":0,"maximum":10000000},"mspt":{"anyOf":[{"type":"number","minimum":0,"maximum":100000},{"type":"null"}]},"worlds":{"maxItems":30,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","maxLength":64},"chunks":{"type":"integer","minimum":0,"maximum":9007199254740991},"entities":{"type":"integer","minimum":0,"maximum":9007199254740991},"players":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["name","chunks","entities","players"],"additionalProperties":false}}},"required":["memUsedMb","memMaxMb","mspt","worlds"],"additionalProperties":false}},"required":["platform","pluginVersion","serverVersion","onlyCdn","players","tps","rejected","uptimeSeconds"],"additionalProperties":false},{"type":"null"}]},"restartingUntil":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"sync":{"anyOf":[{"type":"object","properties":{"bans":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"whitelist":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["bans","whitelist","at"],"additionalProperties":false},{"type":"null"}]},"settings":{"type":"object","properties":{"connectionsPerMinute":{"default":20,"type":"integer","minimum":2,"maximum":600},"ipRules":{"default":[],"maxItems":500,"type":"array","items":{"type":"object","properties":{"cidr":{"type":"string"},"action":{"type":"string","enum":["block","allow"]},"note":{"default":"","type":"string","maxLength":100}},"required":["cidr","action","note"],"additionalProperties":false}},"countries":{"default":{"mode":"off","list":[]},"type":"object","properties":{"mode":{"default":"off","type":"string","enum":["off","block","allow"]},"list":{"default":[],"maxItems":250,"type":"array","items":{"type":"string"}}},"required":["mode","list"],"additionalProperties":false},"maintenance":{"default":{"enabled":false,"motd":"","message":"","startsAt":null,"endsAt":null},"type":"object","properties":{"enabled":{"default":false,"type":"boolean"},"motd":{"default":"","type":"string","maxLength":200},"message":{"default":"","type":"string","maxLength":300},"startsAt":{"default":null,"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"endsAt":{"default":null,"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["enabled","motd","message","startsAt","endsAt"],"additionalProperties":false},"unavailableMessage":{"default":"","type":"string","maxLength":300},"botProtection":{"default":"auto","type":"string","enum":["off","auto","always"]},"vpnFilter":{"default":"verify","type":"string","enum":["off","verify","block"]},"loginChecks":{"default":true,"type":"boolean"},"publicStatus":{"default":false,"type":"boolean"},"forwarding":{"default":"plugin","type":"string","enum":["plugin","proxy"]},"syncBans":{"default":true,"type":"boolean"},"edgeWhitelist":{"default":true,"type":"boolean"},"vpnRegulars":{"default":{"enabled":true,"minSessions":3},"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"minSessions":{"default":3,"type":"integer","minimum":1,"maximum":50}},"required":["enabled","minSessions"],"additionalProperties":false},"vpnAllow":{"default":[],"maxItems":1000,"type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9_]{1,16}$"}},"serverList":{"default":{"mode":"off","motd":"","icon":null,"hidePlayers":false},"type":"object","properties":{"mode":{"default":"off","type":"string","enum":["off","offline","always"]},"motd":{"default":"","type":"string","maxLength":256},"icon":{"default":null,"anyOf":[{"type":"string","maxLength":24000,"pattern":"^data:image\\/png;base64,[A-Za-z0-9+/=]+$"},{"type":"null"}]},"hidePlayers":{"default":false,"type":"boolean"}},"required":["mode","motd","icon","hidePlayers"],"additionalProperties":false},"queue":{"default":{"enabled":true,"maxWaitSeconds":180,"whenFull":true},"type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"maxWaitSeconds":{"default":180,"type":"integer","minimum":30,"maximum":600},"whenFull":{"default":true,"type":"boolean"}},"required":["enabled","maxWaitSeconds","whenFull"],"additionalProperties":false}},"required":["connectionsPerMinute","ipRules","countries","maintenance","unavailableMessage","botProtection","vpnFilter","loginChecks","publicStatus","forwarding","syncBans","edgeWhitelist","vpnRegulars","vpnAllow","serverList","queue"],"additionalProperties":false},"externalId":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","customerId","edition","hostname","cnameTarget","origin","enabled","dnsStatus","dnsCheckedAt","protectedAt","pluginDownloadedAt","pluginSeenAt","plugin","restartingUntil","sync","settings","externalId","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/net-balancers":{"get":{"operationId":"get-v1-net-balancers","tags":["Load Balancer"],"summary":"Alle TCP/UDP-Load-Balancer","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post-v1-net-balancers","tags":["Load Balancer"],"summary":"TCP/UDP-Load-Balancer anlegen","description":"Antwort mit `address` (persönlich, aus dem Namen) und `port`.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60},"protocol":{"type":"string","enum":["tcp","udp"]},"hostname":{"type":["string","null"]},"origin":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer","minimum":1,"maximum":65535},"weight":{"type":"integer","minimum":1,"maximum":100},"state":{"type":"string","enum":["active","backup","paused"]},"servers":{"maxItems":9,"type":"array","items":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer","minimum":1,"maximum":65535},"weight":{"default":1,"type":"integer","minimum":1,"maximum":100},"state":{"default":"active","type":"string","enum":["active","backup","paused"]}},"required":["host","port"]}},"balance":{"type":"string","enum":["round_robin","least_conn","hash"]}},"required":["host","port"]},"proxyProtocol":{"default":false,"type":"boolean"}},"required":["name","protocol","origin"]},"example":{"name":"Teamspeak","protocol":"udp","origin":{"host":"ts.kunde.de","port":9987}}}}},"responses":{"201":{"description":"Angelegt","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/net-balancers/{id}":{"get":{"operationId":"get-v1-net-balancers-id","tags":["Load Balancer"],"summary":"Ein Load Balancer","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch-v1-net-balancers-id","tags":["Load Balancer"],"summary":"Load Balancer ändern","description":"`name`, `hostname` (`null` entfernt), `origin`, `proxyProtocol`, `enabled`.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60},"hostname":{"type":["string","null"]},"origin":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer","minimum":1,"maximum":65535},"weight":{"type":"integer","minimum":1,"maximum":100},"state":{"type":"string","enum":["active","backup","paused"]},"servers":{"maxItems":9,"type":"array","items":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer","minimum":1,"maximum":65535},"weight":{"default":1,"type":"integer","minimum":1,"maximum":100},"state":{"default":"active","type":"string","enum":["active","backup","paused"]}},"required":["host","port"]}},"balance":{"type":"string","enum":["round_robin","least_conn","hash"]}},"required":["host","port"]},"proxyProtocol":{"type":"boolean"},"enabled":{"type":"boolean"}}},"example":{"enabled":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"},"delete":{"operationId":"delete-v1-net-balancers-id","tags":["Load Balancer"],"summary":"Load Balancer löschen","description":"Der Port wird frei.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"204":{"description":"Erledigt, ohne Inhalt"},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/devices":{"get":{"operationId":"get-v1-devices","tags":["Geräte"],"summary":"Alle Geräte","description":"Mit Zustand (`online`, Verbindung je Edge) und Freigaben.","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post-v1-devices","tags":["Geräte"],"summary":"Gerät anlegen","description":"Antwort mit Code für die Anmeldung des Clients.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60}},"required":["name"]},"example":{"name":"NAS"}}}},"responses":{"201":{"description":"Angelegt","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/devices/{id}":{"get":{"operationId":"get-v1-devices-id","tags":["Geräte"],"summary":"Ein Gerät","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch-v1-devices-id","tags":["Geräte"],"summary":"Gerät ändern","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60},"enabled":{"type":"boolean"},"selfManage":{"type":"boolean"}}},"example":{"enabled":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"},"delete":{"operationId":"delete-v1-devices-id","tags":["Geräte"],"summary":"Gerät entfernen","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"204":{"description":"Erledigt, ohne Inhalt"},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/devices/{id}/code":{"post":{"operationId":"post-v1-devices-id-code","tags":["Geräte"],"summary":"Neuer Code zum Anmelden","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"201":{"description":"Angelegt","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/devices/{id}/ports":{"post":{"operationId":"post-v1-devices-id-ports","tags":["Geräte"],"summary":"Freigabe anlegen","description":"Server im CDN (`internal`, für Websites und Spielserver) oder offener Port auf den Edges.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60},"protocol":{"default":"tcp","type":"string","enum":["tcp","udp"]},"target":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer","minimum":1,"maximum":65535}},"required":["host","port"]},"hostname":{"type":["string","null"]},"proxyProtocol":{"default":false,"type":"boolean"},"internal":{"default":false,"type":"boolean"},"remote":{"anyOf":[{"type":"string","enum":["ssh","rdp","vnc","other"]},{"type":"null"}]}},"required":["name","target"]},"example":{"name":"Home Assistant","target":{"host":"localhost","port":8123},"internal":true}}}},"responses":{"201":{"description":"Angelegt","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/devices/{id}/ports/{portId}":{"patch":{"operationId":"patch-v1-devices-id-ports-portid","tags":["Geräte"],"summary":"Freigabe ändern","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"},{"name":"portId","in":"path","required":true,"description":"Kennung der Freigabe","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60},"protocol":{"type":"string","enum":["tcp","udp"]},"target":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer","minimum":1,"maximum":65535}},"required":["host","port"]},"hostname":{"type":["string","null"]},"proxyProtocol":{"type":"boolean"},"enabled":{"type":"boolean"}}},"example":{"enabled":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"},"delete":{"operationId":"delete-v1-devices-id-ports-portid","tags":["Geräte"],"summary":"Freigabe entfernen","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"},{"name":"portId","in":"path","required":true,"description":"Kennung der Freigabe","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"204":{"description":"Erledigt, ohne Inhalt"},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/devices/{id}/ports/{portId}/zugang":{"post":{"operationId":"post-v1-devices-id-ports-portid-zugang","tags":["Geräte"],"summary":"Fernzugriff auf Zeit öffnen","description":"Nur für Dienste mit `remote` (SSH, RDP, VNC, anderes): Der Port gilt auf allen Edges, aber nur für `ip` (fehlt sie: die des Aufrufers) und höchstens 8 Stunden. Danach schließt er von selbst.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"},{"name":"portId","in":"path","required":true,"description":"Kennung der Freigabe","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ip":{"type":"string"},"hours":{"default":1,"type":"integer","minimum":1,"maximum":8}}},"example":{"ip":"203.0.113.7","hours":2}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"until":{"type":"string"},"port":{"type":"number"},"ip":{"type":"string"}},"required":["until","port","ip"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"},"delete":{"operationId":"delete-v1-devices-id-ports-portid-zugang","tags":["Geräte"],"summary":"Fernzugriff sofort schließen","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"},{"name":"portId","in":"path","required":true,"description":"Kennung der Freigabe","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"204":{"description":"Erledigt, ohne Inhalt"},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/alerts":{"get":{"operationId":"get-v1-alerts","tags":["Benachrichtigungen"],"summary":"Störungen und Hinweise","description":"Neueste zuerst.","parameters":[{"name":"open","in":"query","required":false,"description":"`1` = nur offene","schema":{"type":"string"}},{"name":"area","in":"query","required":false,"description":"Bereich: `websites`, `dns`, `spielserver`, `geraete`, `load-balancer`, `konto`","schema":{"type":"string"}},{"name":"kind","in":"query","required":false,"description":"`problems` (Warnung, kritisch) oder `notices` (Hinweise)","schema":{"type":"string"}},{"name":"days","in":"query","required":false,"description":"Zeitraum in Tagen (offene immer dabei)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Höchstens so viele, bis 500 (Standard 100)","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"alerts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"event":{"type":"string","enum":["registration.pending","support.ticket","support.reply","plan.requested","plan.changed","plan.expiring","plan.over_limit","domain.active","domain.error","certificate.renewal_failed","certificate.expiring","purge.failed","limit.traffic_80","limit.traffic_100","node.offline","node.degraded","node.apply_failed","node.setup_failed","edge.acme_failed","node.stats_failed","domain.origin_down","game.down","game.lag","api.unreachable","control.degraded","backup.failed","control.standby_down","node.firewall_open","static_ips.changed","cdn_ips.changed","dns.sync_failed","dns.zone_active","dns.zone_moved","dns.ds_problem","dns.dnssec_active","dns.dyndns_silent","lb.server_down","device.offline","device.target_down","api_key.expiring"]},"severity":{"type":"string","enum":["info","warning","critical"]},"title":{"type":"string"},"message":{"type":"string"},"url":{"type":["string","null"]},"customerId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"openedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"resolvedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"mutedUntil":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["id","event","severity","title","message","url","customerId","openedAt","resolvedAt"],"additionalProperties":false}}},"required":["alerts"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/alerts/{id}/mute":{"post":{"operationId":"post-v1-alerts-id-mute","tags":["Benachrichtigungen"],"summary":"Erinnerungen stummschalten","description":"Für eine offene Störung: keine Erinnerungen mehr für `hours` Stunden bzw. bis sie behoben ist (`null`). Die Entwarnung kommt trotzdem.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"hours":{"anyOf":[{"type":"integer","minimum":1,"maximum":720},{"type":"null"}]}},"required":["hours"]},"example":{"hours":24}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"event":{"type":"string","enum":["registration.pending","support.ticket","support.reply","plan.requested","plan.changed","plan.expiring","plan.over_limit","domain.active","domain.error","certificate.renewal_failed","certificate.expiring","purge.failed","limit.traffic_80","limit.traffic_100","node.offline","node.degraded","node.apply_failed","node.setup_failed","edge.acme_failed","node.stats_failed","domain.origin_down","game.down","game.lag","api.unreachable","control.degraded","backup.failed","control.standby_down","node.firewall_open","static_ips.changed","cdn_ips.changed","dns.sync_failed","dns.zone_active","dns.zone_moved","dns.ds_problem","dns.dnssec_active","dns.dyndns_silent","lb.server_down","device.offline","device.target_down","api_key.expiring"]},"severity":{"type":"string","enum":["info","warning","critical"]},"title":{"type":"string"},"message":{"type":"string"},"url":{"type":["string","null"]},"customerId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"openedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"resolvedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"mutedUntil":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["id","event","severity","title","message","url","customerId","openedAt","resolvedAt"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"},"delete":{"operationId":"delete-v1-alerts-id-mute","tags":["Benachrichtigungen"],"summary":"Erinnerungen wieder an","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"event":{"type":"string","enum":["registration.pending","support.ticket","support.reply","plan.requested","plan.changed","plan.expiring","plan.over_limit","domain.active","domain.error","certificate.renewal_failed","certificate.expiring","purge.failed","limit.traffic_80","limit.traffic_100","node.offline","node.degraded","node.apply_failed","node.setup_failed","edge.acme_failed","node.stats_failed","domain.origin_down","game.down","game.lag","api.unreachable","control.degraded","backup.failed","control.standby_down","node.firewall_open","static_ips.changed","cdn_ips.changed","dns.sync_failed","dns.zone_active","dns.zone_moved","dns.ds_problem","dns.dnssec_active","dns.dyndns_silent","lb.server_down","device.offline","device.target_down","api_key.expiring"]},"severity":{"type":"string","enum":["info","warning","critical"]},"title":{"type":"string"},"message":{"type":"string"},"url":{"type":["string","null"]},"customerId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"openedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"resolvedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"mutedUntil":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["id","event","severity","title","message","url","customerId","openedAt","resolvedAt"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/notification-settings":{"get":{"operationId":"get-v1-notification-settings","tags":["Benachrichtigungen"],"summary":"Eigene Einstellungen für E-Mails","description":"Nur mit Anmeldung (Sitzung) – die Einstellungen gehören zu einem Konto. Je Schwere `instant`, `digest` (täglich um 8 Uhr) oder `off`; `mutedAreas`: Bereiche ohne E-Mails; `monthlyReport`: Monatsbericht am 1. (Standard an).","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"modes":{"type":"object","properties":{"info":{"type":"string","enum":["instant","digest","off"]},"warning":{"type":"string","enum":["instant","digest","off"]},"critical":{"type":"string","enum":["instant","off"]}},"required":["info","warning","critical"],"additionalProperties":false},"mutedAreas":{"maxItems":7,"type":"array","items":{"type":"string","enum":["websites","dns","spielserver","geraete","load-balancer","konto","system"]}},"monthlyReport":{"default":true,"type":"boolean"},"productNews":{"default":false,"type":"boolean"}},"required":["modes","mutedAreas","monthlyReport","productNews"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"operationId":"put-v1-notification-settings","tags":["Benachrichtigungen"],"summary":"Eigene Einstellungen speichern","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"modes":{"type":"object","properties":{"info":{"type":"string","enum":["instant","digest","off"]},"warning":{"type":"string","enum":["instant","digest","off"]},"critical":{"type":"string","enum":["instant","off"]}},"required":["info","warning","critical"]},"mutedAreas":{"maxItems":7,"type":"array","items":{"type":"string","enum":["websites","dns","spielserver","geraete","load-balancer","konto","system"]}},"monthlyReport":{"default":true,"type":"boolean"},"productNews":{"default":false,"type":"boolean"}},"required":["modes","mutedAreas"]},"example":{"modes":{"critical":"instant","warning":"digest","info":"off"},"mutedAreas":["dns"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"modes":{"type":"object","properties":{"info":{"type":"string","enum":["instant","digest","off"]},"warning":{"type":"string","enum":["instant","digest","off"]},"critical":{"type":"string","enum":["instant","off"]}},"required":["info","warning","critical"],"additionalProperties":false},"mutedAreas":{"maxItems":7,"type":"array","items":{"type":"string","enum":["websites","dns","spielserver","geraete","load-balancer","konto","system"]}},"monthlyReport":{"default":true,"type":"boolean"},"productNews":{"default":false,"type":"boolean"}},"required":["modes","mutedAreas","monthlyReport","productNews"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/notification-channels":{"get":{"operationId":"get-v1-notification-channels","tags":["Benachrichtigungen"],"summary":"Kanäle","description":"Webhook-Adressen nur als Host, nie mit Geheimnissen.","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"channels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"type":{"type":"string","enum":["email","webhook","discord","matrix","ntfy","chat"]},"target":{"type":"string"},"events":{"type":"array","items":{"type":"string","enum":["registration.pending","support.ticket","support.reply","plan.requested","plan.changed","plan.expiring","plan.over_limit","domain.active","domain.error","certificate.renewal_failed","certificate.expiring","purge.failed","limit.traffic_80","limit.traffic_100","node.offline","node.degraded","node.apply_failed","node.setup_failed","edge.acme_failed","node.stats_failed","domain.origin_down","game.down","game.lag","api.unreachable","control.degraded","backup.failed","control.standby_down","node.firewall_open","static_ips.changed","cdn_ips.changed","dns.sync_failed","dns.zone_active","dns.zone_moved","dns.ds_problem","dns.dnssec_active","dns.dyndns_silent","lb.server_down","device.offline","device.target_down","api_key.expiring"]}},"enabled":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"lastSentAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"lastError":{"type":["string","null"]}},"required":["id","name","type","target","events","enabled","createdAt","lastSentAt","lastError"],"additionalProperties":false}}},"required":["channels"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post-v1-notification-channels","tags":["Benachrichtigungen"],"summary":"Kanal anlegen","description":"Arten: `email` (`to`), `webhook` (`url`, `secret`), `discord` (`url`), `matrix` (`homeserver`, `room`, `token`), `ntfy` (`url`, `token`), `chat` (Slack-kompatibler Webhook: Mattermost, Rocket.Chat, Slack – `url`).","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"channel":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"email"},"to":{"type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"required":["type","to"]},{"type":"object","properties":{"type":{"type":"string","const":"webhook"},"url":{"type":"string","format":"uri"},"secret":{"type":"string","minLength":16,"maxLength":200}},"required":["type","url"]},{"type":"object","properties":{"type":{"type":"string","const":"discord"},"url":{"type":"string","format":"uri"}},"required":["type","url"]},{"type":"object","properties":{"type":{"type":"string","const":"matrix"},"homeserver":{"type":"string","format":"uri"},"room":{"type":"string","pattern":"^![A-Za-z0-9._=/+-]+:[A-Za-z0-9.-]+(:\\d+)?$"},"token":{"type":"string","minLength":10,"maxLength":500}},"required":["type","homeserver","room","token"]},{"type":"object","properties":{"type":{"type":"string","const":"ntfy"},"url":{"type":"string","format":"uri"},"token":{"type":"string","minLength":5,"maxLength":200}},"required":["type","url"]},{"type":"object","properties":{"type":{"type":"string","const":"chat"},"url":{"type":"string","format":"uri"}},"required":["type","url"]}]},"events":{"minItems":1,"type":"array","items":{"type":"string","enum":["registration.pending","support.ticket","support.reply","plan.requested","plan.changed","plan.expiring","plan.over_limit","domain.active","domain.error","certificate.renewal_failed","certificate.expiring","purge.failed","limit.traffic_80","limit.traffic_100","node.offline","node.degraded","node.apply_failed","node.setup_failed","edge.acme_failed","node.stats_failed","domain.origin_down","game.down","game.lag","api.unreachable","control.degraded","backup.failed","control.standby_down","node.firewall_open","static_ips.changed","cdn_ips.changed","dns.sync_failed","dns.zone_active","dns.zone_moved","dns.ds_problem","dns.dnssec_active","dns.dyndns_silent","lb.server_down","device.offline","device.target_down","api_key.expiring"]}}},"required":["name","channel","events"]},"example":{"name":"Bereitschaft","channel":{"type":"matrix","homeserver":"https://matrix.kunde.de","room":"!abc123:kunde.de","token":"syt_Ym90_AbCdEfGhIj"},"events":["domain.origin_down","certificate.renewal_failed"]}}}},"responses":{"201":{"description":"Angelegt","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/notification-channels/{id}":{"patch":{"operationId":"patch-v1-notification-channels-id","tags":["Benachrichtigungen"],"summary":"Kanal ändern","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"events":{"minItems":1,"type":"array","items":{"type":"string","enum":["registration.pending","support.ticket","support.reply","plan.requested","plan.changed","plan.expiring","plan.over_limit","domain.active","domain.error","certificate.renewal_failed","certificate.expiring","purge.failed","limit.traffic_80","limit.traffic_100","node.offline","node.degraded","node.apply_failed","node.setup_failed","edge.acme_failed","node.stats_failed","domain.origin_down","game.down","game.lag","api.unreachable","control.degraded","backup.failed","control.standby_down","node.firewall_open","static_ips.changed","cdn_ips.changed","dns.sync_failed","dns.zone_active","dns.zone_moved","dns.ds_problem","dns.dnssec_active","dns.dyndns_silent","lb.server_down","device.offline","device.target_down","api_key.expiring"]}},"enabled":{"type":"boolean"}}},"example":{"enabled":false}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"},"delete":{"operationId":"delete-v1-notification-channels-id","tags":["Benachrichtigungen"],"summary":"Kanal löschen","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"204":{"description":"Erledigt, ohne Inhalt"},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/notification-channels/{id}/test":{"post":{"operationId":"post-v1-notification-channels-id-test","tags":["Benachrichtigungen"],"summary":"Testnachricht","description":"Sofort; bei Fehler `400` mit Grund. Höchstens 5 je 10 Minuten.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"204":{"description":"Erledigt, ohne Inhalt"},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/status-page":{"get":{"operationId":"get-v1-status-page","tags":["Statusseite"],"summary":"Einstellungen der Statusseite","description":"Adresse, Titel, Beschreibung, öffentlich ja/nein und die Dienste. Ohne gespeicherte Seite ein Vorschlag (`id` ist `null`). Öffentlich als JSON unter `/api/status/<adresse>`.","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"operationId":"put-v1-status-page","tags":["Statusseite"],"summary":"Statusseite speichern","description":"Nur eigene Websites und Spielserver; fremde oder doppelte werden ignoriert.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"slug":{"type":"string","pattern":"^[a-z0-9](?:[a-z0-9-]{1,38}[a-z0-9])$"},"title":{"type":"string","minLength":1,"maxLength":80},"description":{"default":"","type":"string","maxLength":300},"enabled":{"type":"boolean"},"items":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["website","game"]},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string","maxLength":80}},"required":["kind","id"]}}},"required":["slug","title","enabled","items"]},"example":{"slug":"kunde","title":"Status von Kunde GmbH","enabled":true,"items":[{"kind":"website","id":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b","name":"Shop"}]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/status-page/notices":{"get":{"operationId":"get-v1-status-page-notices","tags":["Statusseite"],"summary":"Meldungen","description":"Laufende, geplante und die der letzten 30 Tage.","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post-v1-status-page-notices","tags":["Statusseite"],"summary":"Meldung veröffentlichen","description":"Hinweis (`info`), geplante Wartung (`maintenance`) oder Störung (`incident`). Ohne `startsAt` ab sofort, ohne `endsAt` bis zum Löschen.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["info","maintenance","incident"]},"title":{"type":"string","minLength":1,"maxLength":120},"body":{"default":"","type":"string","maxLength":2000},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"endsAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"required":["kind","title"]},"example":{"kind":"maintenance","title":"Update auf 1.21","startsAt":"2026-11-10T20:00:00+01:00","endsAt":"2026-11-10T21:00:00+01:00"}}}},"responses":{"201":{"description":"Angelegt","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/status-page/notices/{id}":{"delete":{"operationId":"delete-v1-status-page-notices-id","tags":["Statusseite"],"summary":"Meldung löschen","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"204":{"description":"Erledigt, ohne Inhalt"},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/api-keys":{"get":{"operationId":"get-v1-api-keys","tags":["API-Keys"],"summary":"Aktive API-Keys","description":"Ohne Klartext.","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"apiKeys":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"prefix":{"type":"string"},"scope":{"type":"string","enum":["full","read","games"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"lastUsedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]}},"required":["id","name","prefix","scope","createdAt","lastUsedAt","expiresAt"],"additionalProperties":false}}},"required":["apiKeys"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post-v1-api-keys","tags":["API-Keys"],"summary":"API-Key erstellen","description":"Nur im Portal (ein Key kann keine weiteren Keys erzeugen). Der Klartext steht **einmalig** in der Antwort.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"scope":{"default":"full","type":"string","enum":["full","read"]},"expiresInDays":{"anyOf":[{"anyOf":[{"type":"number","const":30},{"type":"number","const":90},{"type":"number","const":365}]},{"type":"null"}]}},"required":["name"]},"example":{"name":"Monitoring","scope":"read","expiresInDays":90}}}},"responses":{"201":{"description":"Angelegt","content":{"application/json":{"schema":{}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"security":[{"session":[]}],"x-session-only":true}},"/v1/api-keys/{id}":{"delete":{"operationId":"delete-v1-api-keys-id","tags":["API-Keys"],"summary":"API-Key widerrufen","description":"Gilt sofort.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"204":{"description":"Erledigt, ohne Inhalt"},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/support/tickets":{"get":{"operationId":"get-v1-support-tickets","tags":["Support"],"summary":"Anfragen","description":"Neueste zuerst. `open` = wartet auf den Support, `answered` = wartet auf Sie, `closed` = erledigt.","parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"tickets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"number":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"subject":{"type":"string"},"status":{"type":"string","enum":["open","answered","closed"]},"context":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["website","game","device","zone","netlb"]},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"label":{"type":"string"},"alerts":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"severity":{"type":"string"},"openedAt":{"type":"string"},"open":{"type":"boolean"}},"required":["title","severity","openedAt","open"],"additionalProperties":false}}},"required":["kind","id","label","alerts"],"additionalProperties":false},{"type":"null"}]},"createdBy":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"messages":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id","number","subject","status","context","createdBy","createdAt","updatedAt","messages"],"additionalProperties":false}}},"required":["tickets"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post-v1-support-tickets","tags":["Support"],"summary":"Neue Anfrage","description":"Optional zu einem Dienst (`context`: `website`, `game`, `device`, `zone`, `netlb` mit dessen ID) – Name und Störungen der letzten 7 Tage kommen dann automatisch dazu. Höchstens 10 neue Anfragen je Stunde.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"subject":{"type":"string","minLength":3,"maxLength":150},"body":{"type":"string","minLength":10,"maxLength":10000},"context":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["website","game","device","zone","netlb"]},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["kind","id"]},{"type":"null"}]}},"required":["subject","body"]},"example":{"subject":"Spieler kommen nicht drauf","body":"Seit heute Morgen kommt niemand mehr auf den Server.","context":{"kind":"game","id":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}}}}},"responses":{"201":{"description":"Angelegt","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"number":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"subject":{"type":"string"},"status":{"type":"string","enum":["open","answered","closed"]},"context":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["website","game","device","zone","netlb"]},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"label":{"type":"string"},"alerts":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"severity":{"type":"string"},"openedAt":{"type":"string"},"open":{"type":"boolean"}},"required":["title","severity","openedAt","open"],"additionalProperties":false}}},"required":["kind","id","label","alerts"],"additionalProperties":false},{"type":"null"}]},"createdBy":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"messages":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"thread":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"author":{"type":"string"},"fromStaff":{"type":"boolean"},"internal":{"type":"boolean"},"body":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","author","fromStaff","internal","body","createdAt"],"additionalProperties":false}}},"required":["id","number","subject","status","context","createdBy","createdAt","updatedAt","messages","thread"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/support/tickets/{id}":{"get":{"operationId":"get-v1-support-tickets-id","tags":["Support"],"summary":"Anfrage mit Verlauf","description":"Alle Nachrichten (ohne interne Notizen des Supports).","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"number":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"subject":{"type":"string"},"status":{"type":"string","enum":["open","answered","closed"]},"context":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["website","game","device","zone","netlb"]},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"label":{"type":"string"},"alerts":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"severity":{"type":"string"},"openedAt":{"type":"string"},"open":{"type":"boolean"}},"required":["title","severity","openedAt","open"],"additionalProperties":false}}},"required":["kind","id","label","alerts"],"additionalProperties":false},{"type":"null"}]},"createdBy":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"messages":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"thread":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"author":{"type":"string"},"fromStaff":{"type":"boolean"},"internal":{"type":"boolean"},"body":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","author","fromStaff","internal","body","createdAt"],"additionalProperties":false}}},"required":["id","number","subject","status","context","createdBy","createdAt","updatedAt","messages","thread"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch-v1-support-tickets-id","tags":["Support"],"summary":"Erledigt / wieder öffnen","description":"`{ \"status\": \"closed\" }` bzw. `\"open\"`.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["open","closed"]}},"required":["status"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"number":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"subject":{"type":"string"},"status":{"type":"string","enum":["open","answered","closed"]},"context":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["website","game","device","zone","netlb"]},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"label":{"type":"string"},"alerts":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"severity":{"type":"string"},"openedAt":{"type":"string"},"open":{"type":"boolean"}},"required":["title","severity","openedAt","open"],"additionalProperties":false}}},"required":["kind","id","label","alerts"],"additionalProperties":false},{"type":"null"}]},"createdBy":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"messages":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"thread":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"author":{"type":"string"},"fromStaff":{"type":"boolean"},"internal":{"type":"boolean"},"body":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","author","fromStaff","internal","body","createdAt"],"additionalProperties":false}}},"required":["id","number","subject","status","context","createdBy","createdAt","updatedAt","messages","thread"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/support/tickets/{id}/messages":{"post":{"operationId":"post-v1-support-tickets-id-messages","tags":["Support"],"summary":"Antworten","description":"Die Anfrage wartet danach wieder auf den Support (auch wenn sie erledigt war).","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"body":{"type":"string","minLength":1,"maxLength":10000}},"required":["body"]},"example":{"body":"Danke, jetzt geht es wieder."}}}},"responses":{"201":{"description":"Angelegt","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"number":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"subject":{"type":"string"},"status":{"type":"string","enum":["open","answered","closed"]},"context":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["website","game","device","zone","netlb"]},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"label":{"type":"string"},"alerts":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"severity":{"type":"string"},"openedAt":{"type":"string"},"open":{"type":"boolean"}},"required":["title","severity","openedAt","open"],"additionalProperties":false}}},"required":["kind","id","label","alerts"],"additionalProperties":false},{"type":"null"}]},"createdBy":{"type":"string"},"createdAt":{"type":"string"},"updatedAt":{"type":"string"},"messages":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"thread":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"author":{"type":"string"},"fromStaff":{"type":"boolean"},"internal":{"type":"boolean"},"body":{"type":"string"},"createdAt":{"type":"string"}},"required":["id","author","fromStaff","internal","body","createdAt"],"additionalProperties":false}}},"required":["id","number","subject","status","context","createdBy","createdAt","updatedAt","messages","thread"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/reports/monthly":{"get":{"operationId":"get-v1-reports-monthly","tags":["Berichte"],"summary":"Monatsbericht","description":"Verkehr und Cache der Websites, Spielserver (Spieler, Sitzungen, Spielzeit, Spitze), Abgewehrtes nach Grund, Erreichbarkeit und Störungen eines Monats (deutsche Zeit). Ohne `month`: Vormonat; der laufende Monat geht bis jetzt.","parameters":[{"name":"month","in":"query","required":false,"description":"Monat als JJJJ-MM","schema":{"type":"string"},"example":"2026-10"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"month":{"type":"string","pattern":"^\\d{4}-(0[1-9]|1[0-2])$"},"previous":{"type":"string","pattern":"^\\d{4}-(0[1-9]|1[0-2])$"},"websites":{"type":"object","properties":{"requests":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"bytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"cacheRatio":{"type":["number","null"]},"defended":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"previous":{"type":"object","properties":{"requests":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"bytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["requests","bytes"],"additionalProperties":false},"top":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"requests":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"bytes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"defended":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"uptime":{"type":["number","null"]}},"required":["id","name","requests","bytes","defended","uptime"],"additionalProperties":false}}},"required":["requests","bytes","cacheRatio","defended","previous","top"],"additionalProperties":false},"games":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"hostname":{"type":"string"},"sessions":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"players":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"hours":{"type":"number"},"peakPlayers":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"defended":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"uptime":{"type":["number","null"]}},"required":["id","hostname","sessions","players","hours","peakPlayers","defended","uptime"],"additionalProperties":false}},"defended":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["reason","count"],"additionalProperties":false}},"incidents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["month","previous","websites","games","defended","incidents"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/attack-reports":{"get":{"operationId":"get-v1-attack-reports","tags":["Berichte"],"summary":"Angriffsberichte","description":"Ihre geteilten Angriffsberichte, neueste zuerst.","parameters":[{"name":"target","in":"query","required":false,"description":"Nur für diese Domain- bzw. Spielserver-ID","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["website","game"]},"targetId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"targetLabel":{"type":"string"},"anonymous":{"type":"boolean"},"from":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"to":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"url":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"createdByName":{"type":"string"},"data":{"type":"object","properties":{"stepSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"series":{"type":"array","items":{"type":"object","properties":{"t":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"defended":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"passed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["t","defended","passed"],"additionalProperties":false}},"totals":{"type":"object","properties":{"defended":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"passed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"peakPerMinute":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"peakAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"networks":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["defended","passed","peakPerMinute","peakAt","networks"],"additionalProperties":false},"reasons":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["reason","count"],"additionalProperties":false}},"countries":{"type":"array","items":{"type":"object","properties":{"country":{"type":["string","null"]},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["country","count"],"additionalProperties":false}}},"required":["stepSeconds","series","totals","reasons","countries"],"additionalProperties":false}},"required":["id","kind","targetId","targetLabel","anonymous","from","to","url","createdAt","createdByName","data"],"additionalProperties":false}}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post-v1-attack-reports","tags":["Berichte"],"summary":"Angriffsbericht teilen","description":"Legt eine öffentliche Seite (`url`) mit den Zahlen eines Angriffs an – abgewehrt, Spitze je Minute, Gründe, Herkunftsländer, ohne IP-Adressen. Ohne `from`/`to` sucht das CDN den stärksten Angriff (Websites 7, Spielserver 30 Tage; sonst 400 `no_attack`). Höchstens 7 Tage, 20 Berichte je Stunde.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["website","game"]},"targetId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"from":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"to":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"anonymous":{"default":false,"type":"boolean"}},"required":["kind","targetId"]},"example":{"kind":"game","targetId":"7b1f3c2e-4a5d-4e6f-8a9b-0c1d2e3f4a5b","anonymous":false}}}},"responses":{"201":{"description":"Angelegt","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["website","game"]},"targetId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"targetLabel":{"type":"string"},"anonymous":{"type":"boolean"},"from":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"to":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"url":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"createdByName":{"type":"string"},"data":{"type":"object","properties":{"stepSeconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"series":{"type":"array","items":{"type":"object","properties":{"t":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"defended":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"passed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["t","defended","passed"],"additionalProperties":false}},"totals":{"type":"object","properties":{"defended":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"passed":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"peakPerMinute":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"peakAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"networks":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["defended","passed","peakPerMinute","peakAt","networks"],"additionalProperties":false},"reasons":{"type":"array","items":{"type":"object","properties":{"reason":{"type":"string"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["reason","count"],"additionalProperties":false}},"countries":{"type":"array","items":{"type":"object","properties":{"country":{"type":["string","null"]},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["country","count"],"additionalProperties":false}}},"required":["stepSeconds","series","totals","reasons","countries"],"additionalProperties":false}},"required":["id","kind","targetId","targetLabel","anonymous","from","to","url","createdAt","createdByName","data"],"additionalProperties":false}}}},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}},"/v1/attack-reports/{id}":{"delete":{"operationId":"delete-v1-attack-reports-id","tags":["Berichte"],"summary":"Angriffsbericht zurückziehen","description":"Die öffentliche Seite ist danach weg.","parameters":[{"name":"id","in":"path","required":true,"description":"Kennung","schema":{"type":"string"},"example":"01a1b2c3-d4e5-7f60-8a9b-0c1d2e3f4a5b"}],"responses":{"204":{"description":"Erledigt, ohne Inhalt"},"400":{"description":"Ungültige Eingabe (`validation_error` mit `details`) oder fachlicher Fehler","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Kein oder ungültiger API-Key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Keine Berechtigung (z. B. `read_only_key`, `customer_pending`, `limit_reached`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Nicht gefunden – auch Objekte anderer Kunden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Zu viele Anfragen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-scope":"full"}}}}