{
  "openapi": "3.1.0",
  "info": {
    "title": "LVM Galrao: Öffentlicher Seitenkatalog",
    "version": "1.0.0",
    "description": "Geprüfter lesender Teilumfang der produktiven REST API. MCP JSON-RPC und WebMCP sind gesondert unter /schnittstellen/ dokumentiert. Keine Kontaktübermittlung, Buchung oder Vertragsaktion."
  },
  "servers": [
    {
      "url": "https://www.lvmbremen.de"
    }
  ],
  "paths": {
    "/api/v2/products": {
      "get": {
        "operationId": "listApprovedInsurancePages",
        "summary": "Freigegebene veröffentlichte Seiten und FAQ auflisten",
        "description": "Seitengröße und revision aus Seite 1 für sämtliche Folgeseiten beibehalten. Bei HTTP 409 neu beginnen.",
        "security": [],
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            }
          },
          {
            "name": "per_page",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 50
            }
          },
          {
            "name": "revision",
            "in": "query",
            "description": "64-stellige Revision aus Seite 1; für page > 1 erforderlich.",
            "schema": {
              "type": "string",
              "pattern": "^[a-f0-9]{64}$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Freigegebener Katalogstand",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Catalog"
                }
              }
            }
          },
          "400": {
            "description": "Ungültige Parameter oder fehlende Revision für Folgeseiten"
          },
          "409": {
            "description": "Katalog geändert; ab Seite 1 neu beginnen"
          },
          "429": {
            "description": "Begrenzung erreicht; später erneut versuchen"
          },
          "503": {
            "description": "Freigegebene Daten vorübergehend nicht verfügbar"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Catalog": {
        "type": "object",
        "required": [
          "schema_version",
          "revision",
          "page",
          "per_page",
          "total",
          "total_pages",
          "has_more",
          "items",
          "source"
        ],
        "properties": {
          "schema_version": {
            "const": "2.0"
          },
          "revision": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "page": {
            "type": "integer",
            "minimum": 1
          },
          "per_page": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50
          },
          "total": {
            "type": "integer",
            "minimum": 0
          },
          "total_pages": {
            "type": "integer",
            "minimum": 0
          },
          "has_more": {
            "type": "boolean"
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "title",
                "url",
                "category_keys",
                "kind",
                "content_modified_at"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "category_keys": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "kind": {
                  "type": "string",
                  "enum": [
                    "product_or_information",
                    "service",
                    "faq",
                    "page"
                  ]
                },
                "content_modified_at": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              }
            }
          },
          "source": {
            "type": "object",
            "properties": {
              "url": {
                "type": "string",
                "format": "uri"
              },
              "verified_at": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "content_modified_at": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          }
        }
      }
    }
  },
  "externalDocs": {
    "url": "https://www.lvmbremen.de/schnittstellen/"
  }
}
