{
  "openapi": "3.0.3",
  "info": {
    "title": "kuhteilen.ch public catalogue",
    "version": "1.0.0",
    "description": "Public, unauthenticated read endpoints of the Swiss crowdbutchering shop kuhteilen.ch. Product pages carry schema.org Product/Offer JSON-LD; the HTML pages are the primary interface, the feeds mirror them for machine consumption."
  },
  "servers": [{ "url": "https://kuhteilen.ch" }],
  "paths": {
    "/products.json": {
      "get": {
        "summary": "Product catalogue feed",
        "description": "All products with name, description, price in CHF, availability, sku, image and canonical URL.",
        "responses": { "200": { "description": "JSON array of products", "content": { "application/json": {} } } }
      }
    },
    "/products.xml": {
      "get": {
        "summary": "Product catalogue (XML)",
        "responses": { "200": { "description": "XML product list", "content": { "application/xml": {} } } }
      }
    },
    "/products.csv": {
      "get": {
        "summary": "Product catalogue (CSV)",
        "responses": { "200": { "description": "CSV product list", "content": { "text/csv": {} } } }
      }
    },
    "/pages.rss": {
      "get": {
        "summary": "Content feed (RSS 2.0)",
        "description": "News, recipes and site updates.",
        "responses": { "200": { "description": "RSS feed", "content": { "application/rss+xml": {} } } }
      }
    },
    "/feed.xml": {
      "get": {
        "summary": "Content feed alias",
        "responses": { "301": { "description": "Redirects to /pages.rss" } }
      }
    },
    "/sitemap.xml": {
      "get": {
        "summary": "XML sitemap",
        "responses": { "200": { "description": "Sitemap of all indexable URLs", "content": { "application/xml": {} } } }
      }
    },
    "/products/{id}": {
      "get": {
        "summary": "Product page",
        "description": "HTML page with embedded schema.org Product and Offer JSON-LD (price, priceCurrency, availability, sku).",
        "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string" }, "description": "Product slug" }],
        "responses": { "200": { "description": "HTML product page", "content": { "text/html": {} } } }
      }
    },
    "/news/{id}": {
      "get": {
        "summary": "News/recipe article",
        "description": "HTML article with Article JSON-LD including datePublished and dateModified.",
        "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }],
        "responses": { "200": { "description": "HTML article", "content": { "text/html": {} } } }
      }
    },
    "/cart": {
      "get": {
        "summary": "Shopping cart",
        "description": "Human checkout entry point. Ordering requires a registered customer account; there is no programmatic order API.",
        "responses": { "200": { "description": "HTML cart page", "content": { "text/html": {} } } }
      }
    },
    "/newsletter/abmelden": {
      "get": {
        "summary": "Newsletter unsubscribe",
        "parameters": [{ "name": "email", "in": "query", "schema": { "type": "string" } }],
        "responses": { "200": { "description": "Unsubscribe confirmation page" } }
      }
    },
    "/": {
      "get": {
        "summary": "Homepage / catalogue overview",
        "description": "Responds with text/markdown when requested via the Accept header.",
        "responses": { "200": { "description": "HTML or Markdown homepage" } }
      }
    }
  }
}
