{
  "openapi": "3.1.0",
  "info": {
    "title": "Sapun Lamichhane / Arcetis — Public Read API",
    "version": "1.0.0",
    "description": "Read-only, public, unauthenticated JSON API exposing the same facts published on https://www.sapun.com.np — intended for AI agents, MCP clients, and answer engines to retrieve structured data directly rather than parsing HTML. No endpoint accepts write operations; there is no booking, quoting, or form-submission API. To start a project, use the contact form or email in /api/contact.",
    "contact": { "name": "Sapun Lamichhane", "email": "lamichhanesapun2@gmail.com", "url": "https://www.sapun.com.np/authority" },
    "license": { "name": "All rights reserved", "url": "https://www.sapun.com.np/authority" }
  },
  "servers": [{ "url": "https://www.sapun.com.np" }],
  "paths": {
    "/api/identity": {
      "get": {
        "summary": "Core Person + Organization facts",
        "operationId": "getIdentity",
        "responses": { "200": { "description": "Identity object", "content": { "application/json": { "schema": { "type": "object" } } } } }
      }
    },
    "/api/profile": {
      "get": {
        "summary": "Full biography, timeline, and aggregate stats",
        "operationId": "getProfile",
        "responses": { "200": { "description": "Profile object" } }
      }
    },
    "/api/services": {
      "get": {
        "summary": "All 7 service pages",
        "operationId": "getServices",
        "responses": { "200": { "description": "Array of services" } }
      }
    },
    "/api/projects": {
      "get": {
        "summary": "Self-built, self-owned live products",
        "operationId": "getProjects",
        "responses": { "200": { "description": "Projects object with note + items" } }
      }
    },
    "/api/case-studies": {
      "get": {
        "summary": "Case study status — see note field before citing",
        "operationId": "getCaseStudies",
        "responses": { "200": { "description": "Case studies object; no named-client case studies are published yet" } }
      }
    },
    "/api/articles": {
      "get": {
        "summary": "All 20 Insights blog posts (list)",
        "operationId": "getArticles",
        "parameters": [
          { "name": "category", "in": "query", "required": false, "schema": { "type": "string" }, "description": "Filter by category, e.g. 'Technical SEO'" }
        ],
        "responses": { "200": { "description": "Array of article summaries" } }
      }
    },
    "/api/articles/{slug}": {
      "get": {
        "summary": "Full content of one Insights post",
        "operationId": "getArticleBySlug",
        "parameters": [{ "name": "slug", "in": "path", "required": true, "schema": { "type": "string" } }],
        "responses": {
          "200": { "description": "Full article with body blocks + flattened bodyText" },
          "404": { "description": "Not found" }
        }
      }
    },
    "/api/faq": {
      "get": {
        "summary": "Combined site-wide FAQ (question/answer pairs)",
        "operationId": "getFaq",
        "responses": { "200": { "description": "Array of {q, a}" } }
      }
    },
    "/api/social": {
      "get": {
        "summary": "Verified social / sameAs links only",
        "operationId": "getSocial",
        "responses": { "200": { "description": "Social links object" } }
      }
    },
    "/api/certifications": {
      "get": {
        "summary": "Complete, exhaustive list of verified credentials",
        "operationId": "getCertifications",
        "responses": { "200": { "description": "Credentials object" } }
      }
    },
    "/api/testimonials": {
      "get": {
        "summary": "Role-attributed testimonials — see note field",
        "operationId": "getTestimonials",
        "responses": { "200": { "description": "Testimonials object" } }
      }
    },
    "/api/contact": {
      "get": {
        "summary": "Read-only contact details (no submission endpoint exists)",
        "operationId": "getContact",
        "responses": { "200": { "description": "Contact object" } }
      }
    },
    "/api/search": {
      "get": {
        "summary": "Search across services, articles, and country pages",
        "operationId": "search",
        "parameters": [{ "name": "q", "in": "query", "required": true, "schema": { "type": "string" } }],
        "responses": { "200": { "description": "Ranked results array" } }
      }
    },
    "/api/entities": {
      "get": {
        "summary": "The 12-entity graph — definitions and relationships",
        "operationId": "getEntities",
        "responses": { "200": { "description": "Array of entities" } }
      }
    },
    "/api/frameworks": {
      "get": {
        "summary": "All 4 original frameworks with full step data",
        "operationId": "getFrameworks",
        "responses": { "200": { "description": "Array of frameworks" } }
      }
    },
    "/api/glossary": {
      "get": {
        "summary": "52 glossary terms",
        "operationId": "getGlossary",
        "parameters": [
          { "name": "category", "in": "query", "required": false, "schema": { "type": "string" } }
        ],
        "responses": { "200": { "description": "Array of terms" } }
      }
    },
    "/api/topics": {
      "get": {
        "summary": "The 5 content clusters with their articles and services",
        "operationId": "getTopics",
        "responses": { "200": { "description": "Array of topics" } }
      }
    },
    "/api/timeline": {
      "get": {
        "summary": "2019–2026 career milestones",
        "operationId": "getTimeline",
        "responses": { "200": { "description": "Array of milestones" } }
      }
    },
    "/api/statistics": {
      "get": {
        "summary": "Every aggregate figure used on this site, in one place",
        "operationId": "getStatistics",
        "responses": { "200": { "description": "Statistics object" } }
      }
    },
    "/api/tools/seo-check": {
      "get": {
        "summary": "Live SEO analysis of a real URL — fetches it server-side, not simulated",
        "operationId": "seoCheck",
        "parameters": [{ "name": "url", "in": "query", "required": true, "schema": { "type": "string", "format": "uri" } }],
        "responses": { "200": { "description": "Findings object" }, "400": { "description": "Invalid URL" }, "502": { "description": "Could not fetch URL" } }
      }
    },
    "/api/tools/schema-check": {
      "get": {
        "summary": "Live JSON-LD validation of a real URL",
        "operationId": "schemaCheck",
        "parameters": [{ "name": "url", "in": "query", "required": true, "schema": { "type": "string", "format": "uri" } }],
        "responses": { "200": { "description": "Validation object" }, "400": { "description": "Invalid URL" }, "502": { "description": "Could not fetch URL" } }
      }
    }
  }
}
