{
  "openapi": "3.1.0",
  "info": {
    "title": "LMS Marketing",
    "version": "0.2.1",
    "description": "Public reads need no key. submit_* requires header x-functions-key stored in the Custom GPT action secret, never in site HTML. MCP webhook: https://func-lms-marketing-mcp.azurewebsites.net/runtime/webhooks/mcp. The MCP host cannot set auth per tool; the worker allows anonymous read tools and requires the header for submit_ names."
  },
  "servers": [
    {
      "url": "https://func-lms-marketing-mcp.azurewebsites.net/api",
      "description": "Expected host after Platform Engineering creates the Function App. A preview slot would use https://func-lms-marketing-mcp-preview.azurewebsites.net/api."
    }
  ],
  "paths": {
    "/public/get_product_overview": {
      "post": {
        "operationId": "get_product_overview",
        "summary": "Product overview from the shipped knowledge pack.",
        "security": [],
        "requestBody": { "$ref": "#/components/requestBodies/session" },
        "responses": { "200": { "description": "Overview, or KnowledgePackMissing." } }
      }
    },
    "/public/list_capabilities": {
      "post": {
        "operationId": "list_capabilities",
        "summary": "Server tools plus pack capability bullets.",
        "security": [],
        "requestBody": { "$ref": "#/components/requestBodies/session" },
        "responses": { "200": { "description": "Tool list." } }
      }
    },
    "/public/search_faq": {
      "post": {
        "operationId": "search_faq",
        "summary": "FAQ slice schemaVersion 1.",
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": ["query"],
                "properties": {
                  "query": { "type": "string" },
                  "limit": { "type": "string" },
                  "sessionId": { "type": "string" },
                  "clientIdentity": { "type": "string" }
                }
              }
            }
          }
        },
        "responses": {
          "200": { "description": "Match, NoMatch, Refuse, or KnowledgePackMissing." },
          "429": { "description": "RateLimited." }
        }
      }
    },
    "/public/get_quote_path": {
      "post": {
        "operationId": "get_quote_path",
        "summary": "Contact or demo handoff. No prices.",
        "security": [],
        "requestBody": { "$ref": "#/components/requestBodies/session" },
        "responses": { "200": { "description": "HandoffOnly." } }
      }
    },
    "/public/openapi.json": {
      "get": {
        "operationId": "openapi",
        "summary": "This document.",
        "security": [],
        "responses": { "200": { "description": "OpenAPI JSON." } }
      }
    },
    "/submit/submit_contact": {
      "post": {
        "operationId": "submit_contact",
        "summary": "Contact handoff. Requires x-functions-key.",
        "security": [{ "functionKey": [] }],
        "requestBody": { "$ref": "#/components/requestBodies/contact" },
        "responses": {
          "200": { "description": "AcceptedStub. No email is sent." },
          "401": { "description": "Missing or rejected x-functions-key." },
          "429": { "description": "RateLimited." }
        }
      }
    },
    "/submit/submit_demo_request": {
      "post": {
        "operationId": "submit_demo_request",
        "summary": "Demo handoff. Requires x-functions-key.",
        "security": [{ "functionKey": [] }],
        "requestBody": { "$ref": "#/components/requestBodies/demo" },
        "responses": {
          "200": { "description": "AcceptedStub. No email is sent." },
          "401": { "description": "Missing or rejected x-functions-key." },
          "429": { "description": "RateLimited." }
        }
      }
    },
    "/submit/submit_support_ticket": {
      "post": {
        "operationId": "submit_support_ticket",
        "summary": "Website support handoff. Requires x-functions-key. Not plant Support MCP.",
        "security": [{ "functionKey": [] }],
        "requestBody": { "$ref": "#/components/requestBodies/ticket" },
        "responses": {
          "200": { "description": "AcceptedStub. No email is sent." },
          "401": { "description": "Missing or rejected x-functions-key." },
          "429": { "description": "RateLimited." }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "functionKey": {
        "type": "apiKey",
        "in": "header",
        "name": "x-functions-key",
        "description": "Custom GPT action secret. Not the public read credential and not a value for site HTML."
      }
    },
    "requestBodies": {
      "session": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "sessionId": { "type": "string" },
                "clientIdentity": { "type": "string" }
              }
            }
          }
        }
      },
      "contact": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": ["name", "email", "message"],
              "properties": {
                "name": { "type": "string" },
                "email": { "type": "string" },
                "company": { "type": "string" },
                "message": { "type": "string" },
                "sessionId": { "type": "string" },
                "clientIdentity": { "type": "string" }
              }
            }
          }
        }
      },
      "demo": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": ["name", "email"],
              "properties": {
                "name": { "type": "string" },
                "email": { "type": "string" },
                "company": { "type": "string" },
                "preferredWindow": { "type": "string" },
                "message": { "type": "string" },
                "sessionId": { "type": "string" },
                "clientIdentity": { "type": "string" }
              }
            }
          }
        }
      },
      "ticket": {
        "required": true,
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": ["name", "email", "subject", "message"],
              "properties": {
                "name": { "type": "string" },
                "email": { "type": "string" },
                "subject": { "type": "string" },
                "message": { "type": "string" },
                "sessionId": { "type": "string" },
                "clientIdentity": { "type": "string" }
              }
            }
          }
        }
      }
    }
  }
}
