{
  "openapi": "3.1.0",
  "info": {
    "title": "Martina Peukert – Coaching Discovery API",
    "version": "1.0.0",
    "description": "Read-only, static discovery endpoints for AI agents. Diese Website ist ein Dienstleistungsangebot, kein SaaS – die Endpunkte liefern strukturierte Geschäftsinformationen (Profil, Leistungen, Preise, Buchungslink). Schreiboperationen erfolgen ausschließlich über den Buchungslink (Calendly) oder Kontakt-E-Mail.",
    "contact": {
      "name": "Martina Peukert",
      "email": "info@systemischer-coach-frankfurt.de",
      "url": "https://www.systemischer-coach-frankfurt.de"
    },
    "license": { "name": "Proprietary" }
  },
  "servers": [
    { "url": "https://www.systemischer-coach-frankfurt.de", "description": "Production" }
  ],
  "paths": {
    "/llms.txt": {
      "get": {
        "summary": "Agent-readable site overview",
        "operationId": "getLlmsTxt",
        "responses": {
          "200": { "description": "Plain-text overview", "content": { "text/plain": {} } },
          "429": { "$ref": "#/components/responses/RateLimited" },
          "default": { "$ref": "#/components/responses/Error" }
        }
      }
    },
    "/llms-full.txt": {
      "get": {
        "summary": "Full agent context",
        "operationId": "getLlmsFull",
        "responses": { "200": { "description": "Full context", "content": { "text/plain": {} } } }
      }
    },
    "/pricing.md": {
      "get": {
        "summary": "Structured pricing in Markdown",
        "operationId": "getPricing",
        "responses": { "200": { "description": "Pricing", "content": { "text/markdown": {} } } }
      }
    },
    "/index.md": {
      "get": {
        "summary": "Sitemap as Markdown",
        "operationId": "getSiteIndex",
        "responses": { "200": { "description": "Site index" } }
      }
    },
    "/sitemap.xml": {
      "get": {
        "summary": "XML sitemap",
        "operationId": "getSitemap",
        "responses": { "200": { "description": "Sitemap", "content": { "application/xml": {} } } }
      }
    },
    "/booking": {
      "get": {
        "summary": "Booking redirect (Calendly)",
        "operationId": "getBookingUrl",
        "description": "Returns the canonical booking URL. Agents should send users to this URL to book a free first consultation.",
        "responses": {
          "302": {
            "description": "Redirect to Calendly",
            "headers": {
              "Location": { "schema": { "type": "string", "example": "https://calendly.com/mp-beratung/martina-peukert" } }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Error": {
        "type": "object",
        "required": ["error"],
        "properties": {
          "error": {
            "type": "object",
            "required": ["code", "message"],
            "properties": {
              "code": { "type": "string", "example": "not_found" },
              "message": { "type": "string", "example": "Resource not found" },
              "hint": { "type": "string", "example": "Check the URL or see /llms.txt for available resources." },
              "documentation_url": { "type": "string", "example": "https://www.systemischer-coach-frankfurt.de/llms.txt" }
            }
          }
        }
      }
    },
    "responses": {
      "Error": {
        "description": "Structured JSON error",
        "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }
      },
      "RateLimited": {
        "description": "Too many requests",
        "headers": {
          "X-RateLimit-Limit": { "schema": { "type": "integer", "example": 60 } },
          "X-RateLimit-Remaining": { "schema": { "type": "integer", "example": 0 } },
          "Retry-After": { "schema": { "type": "integer", "example": 30 } }
        },
        "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } }
      }
    }
  },
  "x-rate-limit": {
    "policy": "Public static endpoints, ~60 requests/min/IP at the CDN edge. Agents should respect Retry-After when present.",
    "headers": ["X-RateLimit-Limit", "X-RateLimit-Remaining", "Retry-After"]
  }
}
