openapi: 3.1.0
info:
  title: NETZ Public Resources
  version: 1.0.0
  description: Öffentliche, read-only Ressourcen des NETZ Padel-Club-Verzeichnisses.
  license:
    name: CC BY 4.0
    url: https://creativecommons.org/licenses/by/4.0/
servers:
  - url: https://netz.app
paths:
  /clubs/:
    get:
      operationId: searchClubs
      summary: Padel-Clubs suchen, filtern und nach Entfernung sortieren
      parameters:
        - { name: q, in: query, schema: { type: string }, description: "Club, Stadt oder Region" }
        - { name: stadt, in: query, schema: { type: string }, description: "Stadt als Suchbegriff" }
        - { name: radius, in: query, schema: { type: integer, enum: [25, 50, 100, 200] }, description: "Clientseitiger Radius nach expliziter Standortfreigabe" }
        - { name: env, in: query, schema: { type: string, enum: [indoor, outdoor] } }
        - { name: rating, in: query, schema: { type: number, minimum: 0, maximum: 5 } }
        - { name: buchbar, in: query, schema: { type: boolean } }
        - { name: preisBis, in: query, schema: { type: number, minimum: 0 } }
      responses:
        "200":
          description: Durchsuchbares Clubverzeichnis
          content: { text/html: {} }
  /data/clubs.json:
    get:
      operationId: getClubDataset
      summary: Vollständigen Club-Datensatz abrufen
      responses:
        "200":
          description: Alle Padel-Clubs
          content: { application/json: {} }
  /structured-data.json:
    get:
      operationId: getStructuredDataManifest
      summary: Schema.org-Manifest des Verzeichnisses abrufen
      responses:
        "200":
          description: Schema.org JSON-LD
          content: { application/ld+json: {} }
  /llms.txt:
    get:
      operationId: getLlmOverview
      summary: Kompakten LLM-Kontext abrufen
      responses:
        "200":
          description: Plattformübersicht
          content: { text/plain: {} }
  /llms-full.txt:
    get:
      operationId: getFullLlmContext
      summary: Vollständigen kompakten Club-Kontext abrufen
      responses:
        "200":
          description: Alle Clubs als Text
          content: { text/plain: {} }
  /padel-court/{slug}/index.md:
    get:
      operationId: getClubMarkdown
      summary: Clubprofil als Markdown abrufen
      parameters:
        - { name: slug, in: path, required: true, schema: { type: string } }
      responses:
        "200":
          description: Clubprofil als Markdown
          content: { text/markdown: {} }
  /padel-court/{slug}/structured-data.json:
    get:
      operationId: getClubStructuredData
      summary: Clubprofil als Schema.org JSON-LD abrufen
      parameters:
        - { name: slug, in: path, required: true, schema: { type: string } }
      responses:
        "200":
          description: Clubprofil als JSON-LD
          content: { application/ld+json: {} }
