{"openapi":"3.1.0","info":{"title":"LGS API","version":"0.1.0","description":"Landingpage Generator System. LGS fuehrt aus, alle Aufrufer (MCP, n8n, Dimension OS, Oberflaeche) nutzen diese eine API. Jede Seite ist eine Schema-Instanz, jede Aenderung eine neue Version, jeder Livegang laeuft durch das zentrale Deploy Gate."},"servers":[{"url":"https://lgs.dimension-core.de","description":"Operativserver"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"LGS-API-Key als Bearer-Token."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"type":"boolean","example":false},"error":{"type":"string"}}}}},"paths":{"/api/customers":{"get":{"summary":"Kunden auflisten","responses":{"200":{"description":"Liste der Kunden"}}},"post":{"summary":"Kunde anlegen","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","slug"],"properties":{"name":{"type":"string"},"slug":{"type":"string","pattern":"^[a-z0-9-]+$"}}}}}},"responses":{"201":{"description":"Kunde angelegt"}}}},"/api/pages":{"get":{"summary":"Seiten auflisten","responses":{"200":{"description":"Liste der Seiten"}}},"post":{"summary":"Seite erzeugen (Version 1)","description":"Legt eine Seite plus Version 1 an. content_json ist das Seiten-JSON nach dem Baukasten-Schema. page_id und Tracking-Endpunkte werden serverseitig eingesetzt.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["customer_id","content_json"],"properties":{"customer_id":{"type":"string","format":"uuid"},"product":{"type":"string"},"creative":{"type":"string"},"ansprache":{"type":"string"},"page_type":{"type":"string","default":"leadgen"},"gtm_container_id":{"type":"string"},"content_json":{"type":"object"}}}}}},"responses":{"201":{"description":"Seite plus Version 1 angelegt"}}}},"/api/pages/{id}/versions":{"post":{"summary":"Neue Version einer Seite anlegen","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["content_json"],"properties":{"content_json":{"type":"object"}}}}}},"responses":{"201":{"description":"Version angelegt"}}}},"/api/domains":{"get":{"summary":"Domains auflisten","responses":{"200":{"description":"Liste der Domains"}}},"post":{"summary":"Domain anbinden, DNS-Ziel nennen","description":"Bindet eine Domain an einen Kunden an und liefert das DNS-Ziel (CNAME auf den Pull-Zone-Hostname). Subdomains von dimension-core.de gelten sofort als validiert.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["customer_id","hostname"],"properties":{"customer_id":{"type":"string","format":"uuid"},"hostname":{"type":"string"}}}}}},"responses":{"201":{"description":"Domain angebunden, DNS-Ziel im Feld dns_target"}}}},"/api/domains/validate":{"post":{"summary":"Domain validieren (DNS + SSL + Health-Monitor)","description":"Prueft per DNS, ob die Domain auf das Ziel zeigt, richtet SSL ein und legt genau einen UptimeRobot-Monitor auf /_health an.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["domain_id"],"properties":{"domain_id":{"type":"string","format":"uuid"}}}}}},"responses":{"200":{"description":"Validiert, SSL aktiv"},"202":{"description":"Noch nicht validiert (DNS oder SSL ausstehend)"}}}},"/api/domains/reachability":{"post":{"summary":"Erreichbarkeit einer Domain an/aus schalten","description":"Schaltet die Auslieferung einer Domain sichtbar an oder aus. Zustand in der Registry, Wirkung ueber Bunny. Laeuft durch das Deploy Gate.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["domain_id","reachable"],"properties":{"domain_id":{"type":"string","format":"uuid"},"reachable":{"type":"boolean"},"path":{"type":"string","default":"/"}}}}}},"responses":{"200":{"description":"Erreichbarkeit geschaltet"}}}},"/api/deploy":{"post":{"summary":"Seite live schalten (durch das Deploy Gate)","description":"Baut die Version, laedt das Artefakt hoch, setzt den Pointer auf diese Version. Live schalten = Pointer setzen.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["page_id","version_id","domain_id"],"properties":{"page_id":{"type":"string","format":"uuid"},"version_id":{"type":"string","format":"uuid"},"domain_id":{"type":"string","format":"uuid"},"path":{"type":"string","default":"/"}}}}}},"responses":{"200":{"description":"Live geschaltet"},"500":{"description":"Fehlgeschlagen","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/rollback":{"post":{"summary":"Auf vorige Version zuruecksetzen (durch das Deploy Gate)","description":"Legt den Pointer auf die previous_version_id. Zuruecknehmen = Pointer auf die vorige Version.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["domain_id"],"properties":{"domain_id":{"type":"string","format":"uuid"},"path":{"type":"string","default":"/"}}}}}},"responses":{"200":{"description":"Zurueckgesetzt"}}}},"/api/track":{"post":{"summary":"Tracking-Ereignis (oeffentlich, von der ausgelieferten Seite)","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["page_id","type"],"properties":{"page_id":{"type":"string","format":"uuid"},"type":{"type":"string","enum":["page_view","form_submit"]},"utm":{"type":"object"},"referrer":{"type":"string","nullable":true}}}}}},"responses":{"200":{"description":"Ereignis gespeichert"}}}},"/api/leads":{"post":{"summary":"Lead (oeffentlich, Formulare der ausgelieferten Seiten)","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["page_id","form_data"],"properties":{"page_id":{"type":"string","format":"uuid"},"form_data":{"type":"object"},"utm":{"type":"object"}}}}}},"responses":{"200":{"description":"Lead gespeichert"}}}},"/api/health":{"get":{"summary":"Health-Check der Plattform","security":[],"responses":{"200":{"description":"Plattform laeuft"}}}}}}