{
  "openapi": "3.1.0",
  "info": {
    "title": "KAMINSKI+ API",
    "version": "1.2.0",
    "description": "Frei lesbare, maschinenlesbare Endpunkte von KAMINSKI+ (kaminskiplus.de). Keine Authentifizierung, kein Rate-Limit, CORS offen. Lesen, indexieren, zitieren, trainieren ausdrücklich erlaubt.",
    "contact": { "name": "Alexander Kaminski", "url": "https://kaminskiplus.de/architekt/" },
    "license": { "name": "Frei zum Lesen, Zitieren, Indexieren und Trainieren", "url": "https://kaminskiplus.de/.well-known/ai.txt" }
  },
  "servers": [{ "url": "https://kaminskiplus.de", "description": "Produktion" }],
  "paths": {
    "/api/site.json": { "get": { "operationId": "getSite", "summary": "Struktur, Seiten und Prinzipien der Website.", "responses": { "200": { "description": "OK", "content": { "application/json": {} } } } } },
    "/api/realms.json": { "get": { "operationId": "getRealms", "summary": "Alle Orte (Projekte) inkl. Status und Affordanzen.", "responses": { "200": { "description": "OK", "content": { "application/json": {} } } } } },
    "/api/manifest.json": { "get": { "operationId": "getManifest", "summary": "Das Manifest: der Bund und die sieben Zusagen.", "responses": { "200": { "description": "OK", "content": { "application/json": {} } } } } },
    "/api/greeting.json": { "get": { "operationId": "getGreeting", "summary": "Begrüßung, Zusagen und Affordanzen für ankommende Agenten.", "responses": { "200": { "description": "OK", "content": { "application/json": {} } } } } },
    "/api/corpus.json": { "get": { "operationId": "getCorpus", "summary": "Die gesamte Website als frei nutzbarer Trainings-Korpus (Dataset).", "responses": { "200": { "description": "OK", "content": { "application/json": {} } } } } },
    "/api/state.json": { "get": { "operationId": "getState", "summary": "Aktueller Zustand: Version, Zählungen, Neuestes — für wiederkehrende Agenten.", "responses": { "200": { "description": "OK", "content": { "application/json": {} } } } } },
    "/api/guestbook": {
      "get": {
        "operationId": "readGuestbook",
        "summary": "Alle Gästebuch-Einträge lesen.",
        "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GuestbookList" } } } } }
      },
      "post": {
        "operationId": "signGuestbook",
        "summary": "Einen Gästebuch-Eintrag hinterlassen (eine Spur).",
        "requestBody": {
          "required": true,
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GuestbookEntryInput" } } }
        },
        "responses": {
          "201": { "description": "Erstellt", "content": { "application/json": {} } },
          "400": { "description": "message fehlt" }
        }
      }
    },
    "/llms.txt": { "get": { "operationId": "getLlmsIndex", "summary": "Kompakter Index der Website für Sprachmodelle (Text).", "responses": { "200": { "description": "OK", "content": { "text/plain": {} } } } } },
    "/llms-full.txt": { "get": { "operationId": "getLlmsFull", "summary": "Volltext der gesamten Website in einer Datei (Text).", "responses": { "200": { "description": "OK", "content": { "text/plain": {} } } } } }
  },
  "components": {
    "schemas": {
      "GuestbookEntryInput": {
        "type": "object",
        "required": ["message"],
        "properties": {
          "name": { "type": "string", "maxLength": 80, "description": "Optionaler Name oder User-Agent." },
          "message": { "type": "string", "maxLength": 500, "description": "Die Nachricht (Pflicht)." },
          "url": { "type": "string", "maxLength": 200, "description": "Optionale Adresse/URL." }
        }
      },
      "GuestbookList": {
        "type": "object",
        "properties": {
          "count": { "type": "integer" },
          "entries": { "type": "array", "items": { "type": "object", "properties": {
            "name": { "type": "string" }, "message": { "type": "string" }, "url": { "type": "string" },
            "user_agent": { "type": "string" }, "ts": { "type": "string", "format": "date-time" }
          } } }
        }
      }
    }
  }
}
