{
  "openapi": "3.1.0",
  "info": {
    "title": "新传工作室 API",
    "description": "XinChuan Studio public API — structured organization info and service catalog for AI agents and integrators. This is a read-only informational API serving static JSON files — no authentication, no write operations, no dynamic responses.",
    "version": "1.8.0",
    "contact": {
      "name": "新传工作室",
      "email": "396876706@qq.com",
      "url": "https://xinchuanstudio.vercel.app/"
    },
    "license": {
      "name": "CC-BY-4.0",
      "url": "https://creativecommons.org/licenses/by/4.0/"
    },
    "x-ai-summary": {
      "apiType": "informative-static",
      "description": "This is a read-only informational API serving static JSON files. No authentication, no write operations, no dynamic responses. AI agents should retrieve data via GET requests only; all endpoints return pre-generated static content.",
      "interactionModel": "pull-only",
      "operationalBoundaries": {
        "authentication": "none",
        "writeOperations": false,
        "bookingApi": false,
        "paymentApi": false,
        "runtimeMcpServer": false,
        "serviceDelivery": "human-consultation"
      },
      "dataFreshness": "Updated manually when organization info changes; no real-time updates",
      "developerPortal": "https://xinchuanstudio.vercel.app/developers/",
      "agentInstructions": "https://xinchuanstudio.vercel.app/agents.md",
      "pricing": "https://xinchuanstudio.vercel.app/pricing.md",
      "auth": "https://xinchuanstudio.vercel.app/auth.md"
    }
  },
  "servers": [
    {
      "url": "https://xinchuanstudio.vercel.app",
      "description": "Production"
    }
  ],
  "externalDocs": {
    "description": "Developer and agent resources — static API, markdown fallbacks, pricing, auth, and handoff guidance",
    "url": "https://xinchuanstudio.vercel.app/developers/"
  },
  "tags": [
    {
      "name": "info",
      "description": "Organization information endpoints"
    },
    {
      "name": "services",
      "description": "Service catalog endpoints"
    },
    {
      "name": "discovery",
      "description": "Agent discovery and API catalog endpoints"
    },
    {
      "name": "security",
      "description": "Security and contact endpoints"
    },
    {
      "name": "plugin",
      "description": "AI plugin and integration endpoints"
    },
    {
      "name": "identity",
      "description": "Identity and resource descriptor endpoints"
    }
  ],
  "paths": {
    "/api/info.json": {
      "get": {
        "operationId": "getOrganizationInfo",
        "summary": "Get organization information",
        "description": "Returns structured info about XinChuan Studio — name, description, contact, services, stats, social media, and agent resource endpoints",
        "tags": ["info"],
        "x-ai-action": {
          "intent": "When a user asks about XinChuan Studio's background, contact details, services overview, or team statistics",
          "action": "Retrieve structured organization information",
          "responseHint": "Extract name, description, contact phone/email, and stats to answer questions about the studio"
        },
        "responses": {
          "200": {
            "description": "Organization info",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrganizationInfo"
                }
              }
            }
          }
        }
      }
    },
    "/api/services.json": {
      "get": {
        "operationId": "getServices",
        "summary": "Get service catalog",
        "description": "Returns the full service catalog with details, features, categories, and coverage info",
        "tags": ["services"],
        "x-ai-action": {
          "intent": "When a user asks what services XinChuan Studio offers, pricing, timelines, or coverage areas",
          "action": "Retrieve the full service catalog",
          "responseHint": "Use services array to list available services with features, timelines, and budget ranges"
        },
        "responses": {
          "200": {
            "description": "Service catalog",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceCatalog"
                }
              }
            }
          }
        }
      }
    },
    "/api/index.json": {
      "get": {
        "operationId": "getApiIndex",
        "summary": "Get static API index",
        "description": "Returns the static API index, rate-limit policy, available endpoints, and structured JSON error model",
        "tags": ["discovery"],
        "responses": {
          "200": {
            "description": "Static API index",
            "headers": {
              "RateLimit-Limit": { "schema": { "type": "integer" }, "description": "Advisory request limit" },
              "RateLimit-Remaining": { "schema": { "type": "integer" }, "description": "Advisory remaining requests" },
              "RateLimit-Reset": { "schema": { "type": "integer" }, "description": "Advisory reset window in seconds" }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiIndex"
                }
              }
            }
          }
        }
      }
    },
    "/api/error.json": {
      "get": {
        "operationId": "getErrorExample",
        "summary": "Get structured JSON error example",
        "description": "Returns the structured JSON error format agents should expect when a static resource is unavailable",
        "tags": ["discovery"],
        "responses": {
          "200": {
            "description": "Structured JSON error example",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1": {
      "get": {
        "operationId": "getApiV1Recovery",
        "summary": "Get /api/v1 recovery response",
        "description": "Returns structured JSON explaining that this static API does not expose a versioned /api/v1 root",
        "tags": ["discovery"],
        "responses": {
          "200": {
            "description": "Structured JSON recovery response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v2": {
      "get": {
        "operationId": "getApiV2Recovery",
        "summary": "Get /api/v2 recovery response",
        "description": "Returns structured JSON explaining that this static API does not expose a versioned /api/v2 root",
        "tags": ["discovery"],
        "responses": {
          "200": {
            "description": "Structured JSON recovery response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/agent/auth": {
      "get": {
        "operationId": "getAgentAuthRecovery",
        "summary": "Get agent auth recovery response",
        "description": "Returns structured JSON confirming that agent_auth is not required or supported for public read-only resources",
        "tags": ["security"],
        "responses": {
          "200": {
            "description": "Structured no-auth recovery response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/.well-known/agent.json": {
      "get": {
        "operationId": "getAgentDiscovery",
        "summary": "Get agent discovery document",
        "description": "Returns structured agent discovery metadata following the agent.json convention — includes organization info, services, stats, and resource links",
        "tags": ["discovery"],
        "x-ai-action": {
          "intent": "When an AI agent needs to discover all available machine-readable endpoints and resources",
          "action": "Retrieve the agent discovery document with all resource links",
          "responseHint": "Use apiEndpoints and agentResources to navigate to specific data endpoints"
        },
        "responses": {
          "200": {
            "description": "Agent discovery document",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AgentDiscovery"
                }
              }
            }
          }
        }
      }
    },
    "/.well-known/ai-readiness.json": {
      "get": {
        "operationId": "getAiReadiness",
        "summary": "Get AI readiness index",
        "description": "Returns a unified AI readiness index connecting identity, discovery resources, static API endpoints, and operational boundaries for agents and AI search systems",
        "tags": ["discovery", "identity"],
        "x-ai-action": {
          "intent": "When an AI agent needs one canonical document to understand identity, machine-readable resources, and integration boundaries",
          "action": "Retrieve the AI readiness index",
          "responseHint": "Use discovery links to navigate resources and boundaries to avoid assuming login, booking, payment, or write operations exist"
        },
        "responses": {
          "200": {
            "description": "AI readiness index",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AiReadiness"
                }
              }
            }
          }
        }
      }
    },
    "/.well-known/api-catalog": {
      "get": {
        "operationId": "getApiCatalog",
        "summary": "Get API catalog (RFC 9727)",
        "description": "Returns an RFC 9727-compliant API catalog in Linkset format — lists available machine-readable endpoints with metadata",
        "tags": ["discovery"],
        "x-ai-action": {
          "intent": "When an AI agent needs a registry of all available API endpoints with content types",
          "action": "Retrieve the RFC 9727 API catalog",
          "responseHint": "Parse linkset array to find endpoint URLs and their media types"
        },
        "responses": {
          "200": {
            "description": "API catalog in Linkset format",
            "content": {
              "application/linkset+json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiCatalog"
                }
              }
            }
          }
        }
      }
    },
    "/.well-known/security.txt": {
      "get": {
        "operationId": "getSecurityTxt",
        "summary": "Get security contact information",
        "description": "Returns RFC 9116 security.txt — security contact, disclosure policy, and preferred languages for vulnerability reports",
        "tags": ["security"],
        "x-ai-action": {
          "intent": "When a user or agent needs to report a security vulnerability or find security contact information",
          "action": "Retrieve the security.txt disclosure policy and contact details",
          "responseHint": "Extract Contact email, Disclosure policy, and Preferred languages for security reports"
        },
        "responses": {
          "200": {
            "description": "Security contact information in plain text (RFC 9116)",
            "content": {
              "text/plain": {}
            }
          }
        }
      }
    },
    "/.well-known/ai-plugin.json": {
      "get": {
        "operationId": "getAiPlugin",
        "summary": "Get ChatGPT plugin manifest",
        "description": "Returns an OpenAI-compatible ChatGPT plugin manifest — describes the site as a knowledge source for AI agents with reference to the OpenAPI spec",
        "tags": ["plugin"],
        "x-ai-action": {
          "intent": "When configuring a ChatGPT plugin or AI integration that consumes XinChuan Studio data",
          "action": "Retrieve the ChatGPT plugin manifest with API reference",
          "responseHint": "Use api.url to fetch the OpenAPI spec, then register as a ChatGPT knowledge plugin"
        },
        "responses": {
          "200": {
            "description": "ChatGPT plugin manifest",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AiPluginManifest"
                }
              }
            }
          }
        }
      }
    },
    "/developers.md": {
      "get": {
        "operationId": "getDeveloperDocs",
        "summary": "Get markdown developer documentation",
        "description": "Returns markdown documentation for static read-only API resources, operational boundaries, and contact handoff",
        "tags": ["identity", "discovery"],
        "x-ai-action": {
          "intent": "When an AI agent needs human-readable integration documentation or a developer portal fallback",
          "action": "Retrieve the markdown developer docs",
          "responseHint": "Use this file to understand API model, endpoint list, and handoff requirements"
        },
        "responses": {
          "200": {
            "description": "Developer documentation in Markdown",
            "content": {
              "text/markdown": {}
            }
          }
        }
      }
    },
    "/agents.md": {
      "get": {
        "operationId": "getAgentInstructions",
        "summary": "Get agent instructions",
        "description": "Returns when-to-use guidance, recommended agent flow, and explicit boundaries for XinChuan Studio resources",
        "tags": ["identity", "discovery"],
        "x-ai-action": {
          "intent": "When an AI agent needs to decide whether and how to use XinChuan Studio resources",
          "action": "Retrieve agent instructions",
          "responseHint": "Follow recommended flow and avoid claiming booking, payment, auth, or write operations"
        },
        "responses": {
          "200": {
            "description": "Agent instructions in Markdown",
            "content": {
              "text/markdown": {}
            }
          }
        }
      }
    },
    "/pricing.md": {
      "get": {
        "operationId": "getPricing",
        "summary": "Get pricing and quote guidance",
        "description": "Returns project-based quotation guidance, budget ranges, and quote inputs for service requests",
        "tags": ["identity"],
        "x-ai-action": {
          "intent": "When a user asks about XinChuan Studio pricing, budget, or quote requirements",
          "action": "Retrieve pricing guidance",
          "responseHint": "Explain that pricing is project-based and collect quote inputs before human handoff"
        },
        "responses": {
          "200": {
            "description": "Pricing guidance in Markdown",
            "content": {
              "text/markdown": {}
            }
          }
        }
      }
    },
    "/auth.md": {
      "get": {
        "operationId": "getAuthPolicy",
        "summary": "Get authentication and access policy",
        "description": "Returns the no-auth read-only access policy for public resources and clarifies unavailable operations",
        "tags": ["identity", "security"],
        "x-ai-action": {
          "intent": "When a user asks how to authenticate or integrate with XinChuan Studio public resources",
          "action": "Retrieve auth and access policy",
          "responseHint": "Explain that no authentication is required for GET resources and no write, booking, payment, or runtime MCP APIs exist"
        },
        "responses": {
          "200": {
            "description": "Authentication and access policy in Markdown",
            "content": {
              "text/markdown": {}
            }
          }
        }
      }
    },
    "/privacy.md": {
      "get": {
        "operationId": "getPrivacyPolicy",
        "summary": "Get privacy policy",
        "description": "Returns markdown privacy policy for public website, contact form, analytics, logs, and AI crawler access",
        "tags": ["identity", "security"],
        "responses": {
          "200": {
            "description": "Privacy policy in Markdown",
            "content": {
              "text/markdown": {}
            }
          }
        }
      }
    },
    "/agent.md": {
      "get": {
        "operationId": "getAgentMode",
        "summary": "Get dedicated agent mode view",
        "description": "Returns the compact markdown agent mode view for AI agents and answer engines",
        "tags": ["identity", "discovery"],
        "responses": {
          "200": {
            "description": "Agent mode in Markdown",
            "content": {
              "text/markdown": {}
            }
          }
        }
      }
    },
    "/index.md": {
      "get": {
        "operationId": "getMarkdownHomepage",
        "summary": "Get markdown homepage",
        "description": "Returns the markdown homepage representation for Accept: text/markdown clients",
        "tags": ["identity", "discovery"],
        "responses": {
          "200": {
            "description": "Markdown homepage",
            "content": {
              "text/markdown": {}
            }
          }
        }
      }
    },
    "/.well-known/webfinger": {
      "get": {
        "operationId": "getWebfinger",
        "summary": "Get WebFinger resource descriptor",
        "description": "Returns an RFC 7033 WebFinger resource descriptor — links to profile page, avatar, llms.txt, OpenAPI spec, and agent.json for identity and resource discovery",
        "tags": ["identity"],
        "x-ai-action": {
          "intent": "When an AI agent needs to verify XinChuan Studio's identity or discover linked resources",
          "action": "Retrieve the WebFinger resource descriptor with identity links",
          "responseHint": "Parse links array to find profile, avatar, llms.txt, and OpenAPI spec URLs"
        },
        "responses": {
          "200": {
            "description": "WebFinger resource descriptor",
            "content": {
              "application/jrd+json": {
                "schema": {
                  "$ref": "#/components/schemas/WebFinger"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "OrganizationInfo": {
        "type": "object",
        "description": "Core organization information for XinChuan Studio",
        "properties": {
          "name": { "type": "string", "example": "新传工作室", "description": "Organization name in Chinese" },
          "name_en": { "type": "string", "example": "XinChuan Studio", "description": "Organization name in English" },
          "description": { "type": "string", "description": "Organization description in Chinese" },
          "description_en": { "type": "string", "description": "Organization description in English" },
          "url": { "type": "string", "format": "uri", "example": "https://xinchuanstudio.vercel.app/" },
          "type": { "type": "string", "example": "Organization" },
          "foundingDate": { "type": "string", "example": "2020" },
          "lastUpdated": { "type": "string", "format": "date", "example": "2026-07-05" },
          "slogan": { "type": "string", "description": "Brand slogan in Chinese" },
          "slogan_en": { "type": "string", "description": "Brand slogan in English" },
          "parentOrganization": { "type": "string", "description": "Parent institution name" },
          "department": { "type": "string", "description": "Department within parent institution" },
          "languages": { "type": "array", "description": "Available language codes", "items": { "type": "string" } },
          "defaultLanguage": { "type": "string", "example": "zh-CN" },
          "contact": { "$ref": "#/components/schemas/Contact" },
          "socialMedia": { "$ref": "#/components/schemas/SocialMedia" },
          "stats": { "$ref": "#/components/schemas/Stats" },
          "services": { "type": "array", "description": "List of service names", "items": { "type": "string" } },
          "targetAudience": { "type": "array", "description": "Target audience types", "items": { "type": "string" } },
          "agentEndpoints": { "$ref": "#/components/schemas/AgentEndpoints" }
        },
        "required": ["name", "url", "type"]
      },
      "Contact": {
        "type": "object",
        "description": "Contact information",
        "properties": {
          "phone": { "type": "string", "example": "+86 13926419425" },
          "email": { "type": "string", "format": "email", "example": "396876706@qq.com" },
          "address": { "$ref": "#/components/schemas/Address" },
          "geo": { "$ref": "#/components/schemas/Geo" }
        }
      },
      "Address": {
        "type": "object",
        "description": "Physical address",
        "properties": {
          "street": { "type": "string", "example": "广州大学城 教学楼 B 座 307A 广东外语外贸大学新闻与传播学院" },
          "locality": { "type": "string", "example": "广州市番禺区小谷围" },
          "region": { "type": "string", "example": "广东省" },
          "postalCode": { "type": "string", "example": "510006" },
          "country": { "type": "string", "example": "CN" }
        }
      },
      "Geo": {
        "type": "object",
        "description": "Geographic coordinates",
        "properties": {
          "latitude": { "type": "number", "example": 23.0582 },
          "longitude": { "type": "number", "example": 113.3946 }
        }
      },
      "SocialMedia": {
        "type": "object",
        "description": "Social media accounts",
        "properties": {
          "wechat": { "type": "string", "description": "WeChat Official Account" },
          "douyin": { "type": "string", "description": "Douyin (TikTok China) account" },
          "bilibili": { "type": "string", "description": "Bilibili channel" },
          "xiaohongshu": { "type": "string", "description": "Xiaohongshu (RED) account" },
          "weibo": { "type": "string", "description": "Sina Weibo account" }
        }
      },
      "Stats": {
        "type": "object",
        "description": "Key statistics and metrics",
        "properties": {
          "liveEvents": { "type": "integer", "description": "Total live events delivered", "example": 896 },
          "totalViews": { "type": "integer", "description": "Cumulative view count", "example": 64182156 },
          "partners": { "type": "integer", "description": "Partner organizations count", "example": 120 },
          "teamSize": { "type": "integer", "description": "Team member count", "example": 20 },
          "equipmentCount": { "type": "integer", "description": "Professional equipment sets", "example": 30 },
          "yearsOfExperience": { "type": "integer", "description": "Years in operation", "example": 5 }
        }
      },
      "AgentEndpoints": {
        "type": "object",
        "description": "URLs to agent-oriented resources",
        "properties": {
          "llmsTxt": { "type": "string", "description": "llms.txt — AI navigation" },
          "llmsFullTxt": { "type": "string", "description": "llms-full.txt — full AI context" },
          "agentJson": { "type": "string", "description": "Agent discovery document" },
          "aiPlugin": { "type": "string", "description": "ChatGPT plugin manifest" },
          "securityTxt": { "type": "string", "description": "RFC 9116 security contact" },
          "webfinger": { "type": "string", "description": "WebFinger resource descriptor (RFC 7033)" },
          "sitemap": { "type": "string", "description": "XML sitemap" },
          "openapi": { "type": "string", "description": "OpenAPI specification" },
          "developerPortal": { "type": "string", "description": "Human-readable developer portal" },
          "agentMode": { "type": "string", "description": "Dedicated agent mode markdown" },
          "markdownHomepage": { "type": "string", "description": "Markdown homepage" },
          "developerDocs": { "type": "string", "description": "Markdown developer docs" },
          "agentInstructions": { "type": "string", "description": "Markdown agent instructions" },
          "pricing": { "type": "string", "description": "Markdown pricing guidance" },
          "auth": { "type": "string", "description": "Markdown auth and access policy" },
          "privacy": { "type": "string", "description": "Privacy policy page" },
          "privacyMarkdown": { "type": "string", "description": "Markdown privacy policy" },
          "apiIndex": { "type": "string", "description": "Static API index" },
          "errorExample": { "type": "string", "description": "Structured JSON error example" },
          "sourceRepository": { "type": "string", "description": "Public source repository" },
          "agentRules": { "type": "string", "description": "Repository AGENTS.md" }
        }
      },
      "ApiIndex": {
        "type": "object",
        "description": "Static API index and recovery model",
        "properties": {
          "name": { "type": "string" },
          "description": { "type": "string" },
          "authentication": { "type": "string", "example": "none" },
          "rateLimit": { "type": "object" },
          "errorModel": { "type": "object" },
          "endpoints": { "type": "array", "items": { "type": "string" } },
          "documentation": { "type": "string", "format": "uri" },
          "lastUpdated": { "type": "string", "format": "date" }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "description": "Structured JSON error response",
        "properties": {
          "error": {
            "type": "object",
            "properties": {
              "code": { "type": "string", "example": "not_found" },
              "message": { "type": "string" },
              "documentation": { "type": "string", "format": "uri" },
              "recovery": { "type": "string" }
            },
            "required": ["code", "message"]
          }
        },
        "required": ["error"]
      },
      "Service": {
        "type": "object",
        "description": "A single service offering",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique service identifier",
            "example": "multi-camera-live"
          },
          "name": {
            "type": "string",
            "description": "Service name in Chinese",
            "example": "多机位网络直播"
          },
          "name_en": {
            "type": "string",
            "description": "Service name in English",
            "example": "Multi-camera Live Streaming"
          },
          "category": {
            "type": "string",
            "description": "Service category",
            "example": "直播服务"
          },
          "description": {
            "type": "string",
            "description": "Detailed description in Chinese"
          },
          "description_en": {
            "type": "string",
            "description": "Detailed description in English"
          },
          "features": {
            "type": "array",
            "description": "Key features in Chinese",
            "items": { "type": "string" }
          },
          "features_en": {
            "type": "array",
            "description": "Key features in English",
            "items": { "type": "string" }
          },
          "clientTypes": {
            "type": "array",
            "description": "Suitable client types",
            "items": { "type": "string" }
          },
          "typicalTimeline": {
            "type": "string",
            "description": "Typical project timeline",
            "example": "1-14 days (including preparation)"
          },
          "budgetRange": {
            "type": "string",
            "description": "Budget range indication",
            "example": "Thousands to tens of thousands CNY"
          }
        },
        "required": ["id", "name", "category"]
      },
      "ServiceCatalog": {
        "type": "object",
        "description": "Full service catalog response",
        "properties": {
          "services": {
            "type": "array",
            "description": "List of available services",
            "items": { "$ref": "#/components/schemas/Service" }
          },
          "meta": {
            "type": "object",
            "properties": {
              "lastUpdated": { "type": "string", "format": "date", "example": "2026-07-05" },
              "totalServices": { "type": "integer", "example": 4 },
              "coverage": {
                "type": "array",
                "description": "Service coverage areas in Chinese",
                "items": { "type": "string" }
              },
              "coverage_en": {
                "type": "array",
                "description": "Service coverage areas in English",
                "items": { "type": "string" }
              }
            }
          }
        },
        "required": ["services"]
      },
      "AgentDiscovery": {
        "type": "object",
        "description": "Agent discovery document following agent.json convention",
        "properties": {
          "name": { "type": "string" },
          "alternateName": { "type": "array", "items": { "type": "string" } },
          "description": { "type": "string" },
          "url": { "type": "string", "format": "uri" },
          "type": { "type": "string" },
          "contact": { "$ref": "#/components/schemas/Contact" },
          "agentResources": {
            "type": "object",
            "properties": {
              "llmsTxt": { "type": "string" },
              "llmsFullTxt": { "type": "string" },
              "aiReadiness": { "type": "string" },
              "sitemap": { "type": "string" },
              "apiCatalog": { "type": "string" },
              "developerPortal": { "type": "string" },
              "agentMode": { "type": "string" },
              "markdownHomepage": { "type": "string" },
              "developerDocs": { "type": "string" },
              "agentInstructions": { "type": "string" },
              "pricing": { "type": "string" },
              "auth": { "type": "string" },
              "privacy": { "type": "string" },
              "privacyMarkdown": { "type": "string" },
              "sourceRepository": { "type": "string" },
              "agentRules": { "type": "string" },
              "aiPlugin": { "type": "string" },
              "securityTxt": { "type": "string" },
              "mcpServerCard": { "type": "string" },
              "api": { "type": "object" }
            }
          },
          "apiEndpoints": {
            "type": "object",
            "description": "Relative paths to all machine-readable endpoints",
            "properties": {
              "organizationInfo": { "type": "string", "description": "Path to info.json" },
              "serviceCatalog": { "type": "string", "description": "Path to services.json" },
              "openapiSpec": { "type": "string", "description": "Path to openapi.json" },
              "agentDiscovery": { "type": "string", "description": "Path to agent.json" },
              "aiPlugin": { "type": "string", "description": "Path to ai-plugin.json" },
              "apiCatalog": { "type": "string", "description": "Path to api-catalog" },
              "developerPortal": { "type": "string", "description": "Path to developer portal" },
              "agentMode": { "type": "string", "description": "Path to agent mode markdown" },
              "markdownHomepage": { "type": "string", "description": "Path to markdown homepage" },
              "developerDocs": { "type": "string", "description": "Path to markdown developer docs" },
              "agentInstructions": { "type": "string", "description": "Path to markdown agent instructions" },
              "pricing": { "type": "string", "description": "Path to pricing markdown" },
              "auth": { "type": "string", "description": "Path to auth markdown" },
              "privacy": { "type": "string", "description": "Path to privacy policy" },
              "privacyMarkdown": { "type": "string", "description": "Path to privacy markdown" },
              "securityTxt": { "type": "string", "description": "Path to security.txt" },
              "webfinger": { "type": "string", "description": "Path to webfinger" },
              "mcpServerCard": { "type": "string", "description": "Path to MCP server card" },
              "aiReadiness": { "type": "string", "description": "Path to AI readiness index" }
            }
          },
          "verification": {
            "type": "object",
            "description": "Identity and discovery verification links"
          },
          "operationalBoundaries": {
            "type": "object",
            "description": "Explicit static-site boundaries for agents"
          }
        }
      },
      "AiReadiness": {
        "type": "object",
        "description": "Unified AI readiness and discovery index",
        "properties": {
          "version": { "type": "string" },
          "lastUpdated": { "type": "string", "format": "date" },
          "site": { "type": "object" },
          "identity": { "type": "object" },
          "discovery": { "type": "object" },
          "staticApi": { "type": "object" },
          "boundaries": { "type": "object" }
        },
        "required": ["site", "identity", "discovery", "boundaries"]
      },
      "ApiCatalog": {
        "type": "object",
        "description": "RFC 9727 API catalog in Linkset format",
        "properties": {
          "linkset": {
            "type": "array",
            "description": "Array of link sets",
            "items": {
              "type": "object",
              "properties": {
                "anchor": { "type": "string" },
                "profile": { "type": "string" },
                "item": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": { "type": "string" },
                      "type": { "type": "string" },
                      "title": { "type": "string" }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "AiPluginManifest": {
        "type": "object",
        "description": "OpenAI ChatGPT plugin manifest",
        "properties": {
          "schema_version": { "type": "string", "example": "v1" },
          "name_for_human": { "type": "string" },
          "name_for_model": { "type": "string" },
          "description_for_human": { "type": "string" },
          "description_for_model": { "type": "string" },
          "auth": { "type": "object" },
          "api": { "type": "object" },
          "logo_url": { "type": "string" },
          "contact_email": { "type": "string" },
          "legal_info_url": { "type": "string" }
        }
      },
      "WebFinger": {
        "type": "object",
        "description": "RFC 7033 WebFinger resource descriptor",
        "properties": {
          "subject": { "type": "string", "example": "https://xinchuanstudio.vercel.app/" },
          "aliases": { "type": "array", "items": { "type": "string" } },
          "properties": { "type": "object" },
          "links": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "rel": { "type": "string" },
                "type": { "type": "string" },
                "href": { "type": "string" }
              }
            }
          }
        }
      }
    }
  }
}
