{
  "openapi": "3.1.0",
  "info": {
    "title": "VISFO public content API",
    "version": "1.0.0",
    "description": "Read-only access to everything published on www.visfo.health: pages, resources (case studies, insights, guides, news), glossary terms, capabilities/use cases and team profiles. No authentication required. Bodies are returned as plain Markdown."
  },
  "servers": [
    {
      "url": "https://www.visfo.health"
    }
  ],
  "paths": {
    "/api/public/content": {
      "get": {
        "operationId": "listContent",
        "summary": "List all public content items",
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "page",
                "resource",
                "glossary",
                "use-case",
                "team"
              ]
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 100,
              "maximum": 200
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A list of content summaries"
          }
        }
      }
    },
    "/api/public/content/{type}/{slug}": {
      "get": {
        "operationId": "getContentItem",
        "summary": "Get one content item, including its Markdown body",
        "parameters": [
          {
            "name": "type",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "enum": [
                "page",
                "resource",
                "glossary",
                "use-case",
                "team"
              ]
            }
          },
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A content item"
          },
          "404": {
            "description": "Not found"
          }
        }
      }
    },
    "/api/public/glossary": {
      "get": {
        "operationId": "listGlossary",
        "summary": "Full glossary of life sciences, market access and AI terms with definitions",
        "responses": {
          "200": {
            "description": "Glossary terms"
          }
        }
      }
    },
    "/api/public/search": {
      "get": {
        "operationId": "searchContent",
        "summary": "Keyword search across titles, descriptions and body text",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 2
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 20,
              "maximum": 50
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Matching content summaries"
          }
        }
      }
    },
    "/md/{path}": {
      "get": {
        "operationId": "getMarkdown",
        "summary": "Markdown version of any public page, e.g. /md/glossary/global-value-dossier-gvd",
        "parameters": [
          {
            "name": "path",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "text/markdown document"
          },
          "404": {
            "description": "Not found"
          }
        }
      }
    }
  }
}