{
  "openapi": "3.1.0",
  "info": {
    "title": "Code Particles Content API",
    "version": "0.1.0",
    "description": "Read-only REST API over Code Particles' public site content: product portfolio, open roles, Fount editorial insights, pricing model, and company info. No authentication required. Same tools are also available over MCP — see /.well-known/mcp-server-card.json.",
    "contact": { "email": "hello@codeparticles.ke" }
  },
  "servers": [{ "url": "https://mcp.codeparticles.ke" }],
  "paths": {
    "/api/products": {
      "get": {
        "operationId": "searchProducts",
        "summary": "Search the product portfolio by name or tagline.",
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": false,
            "schema": { "type": "string" }
          }
        ],
        "responses": { "200": { "description": "Matching products." } }
      }
    },
    "/api/products/{slug}": {
      "get": {
        "operationId": "getProduct",
        "summary": "Get one product by its /products/<slug> path segment.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": { "type": "string" }
          }
        ],
        "responses": {
          "200": { "description": "Product detail." },
          "404": { "description": "Unknown slug." }
        }
      }
    },
    "/api/jobs": {
      "get": {
        "operationId": "listJobs",
        "summary": "List open roles, optionally filtered by department.",
        "parameters": [
          {
            "name": "department",
            "in": "query",
            "required": false,
            "schema": { "type": "string" }
          },
          {
            "name": "includeClosed",
            "in": "query",
            "required": false,
            "schema": { "type": "boolean", "default": false }
          }
        ],
        "responses": { "200": { "description": "Matching jobs." } }
      }
    },
    "/api/jobs/{id}": {
      "get": {
        "operationId": "getJob",
        "summary": "Get full detail for one job by id.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": { "type": "string" }
          }
        ],
        "responses": {
          "200": { "description": "Job detail." },
          "404": { "description": "Unknown id." }
        }
      }
    },
    "/api/insights": {
      "get": {
        "operationId": "searchInsights",
        "summary": "Search The Fount editorial content by keyword.",
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": false,
            "schema": { "type": "string" }
          }
        ],
        "responses": { "200": { "description": "Matching episodes." } }
      }
    },
    "/api/pricing": {
      "get": {
        "operationId": "getPricingOverview",
        "summary": "Get the pricing model and engagement tracks.",
        "responses": { "200": { "description": "Pricing overview." } }
      }
    },
    "/api/company": {
      "get": {
        "operationId": "getCompanyInfo",
        "summary": "Get company profile and contact channels.",
        "responses": { "200": { "description": "Company info." } }
      }
    }
  }
}
