{
  "openapi": "3.1.0",
  "info": {
    "title": "Subcore AI API",
    "version": "2026-09-01",
    "summary": "Public, unauthenticated access to Subcore AI's website content plus a demo-request endpoint.",
    "description": "The Subcore AI API gives agents and integrations structured access to everything on subcore.ai:\nthe page catalogue, product and platform descriptions, full-text search over page content, the\ncompany profile, and a demo-request endpoint.\n\nNo authentication is required. Every endpoint is rate limited per client IP and advertises\n`RateLimit-*` response headers. Errors share one JSON envelope: `{ \"error\": { type, code, message, request_id } }`.\n\nThe same capabilities are available over MCP (Streamable HTTP) at `/api/mcp`.\n\n**Versioning.** The version is in the path; `/api/v1` is current and not deprecated.\nBreaking changes ship as `/api/v2`. A retired version keeps serving for at least six\nmonths and carries `Deprecation` (RFC 9745), `Sunset` (RFC 8594) and\n`Link: <...>; rel=\"successor-version\"` on every response. Their absence means the\nversion is current.",
    "contact": {
      "name": "Subcore AI",
      "email": "support@subcore.ai",
      "url": "https://subcore.ai/contact"
    },
    "license": {
      "name": "Proprietary",
      "url": "https://subcore.ai/terms"
    },
    "termsOfService": "https://subcore.ai/terms"
  },
  "servers": [
    {
      "url": "https://subcore.ai/api/v1",
      "description": "Current stable version"
    }
  ],
  "externalDocs": {
    "description": "llms.txt index",
    "url": "https://subcore.ai/llms.txt"
  },
  "tags": [
    {
      "name": "Content",
      "description": "Pages and full-text search."
    },
    {
      "name": "Catalog",
      "description": "Products, platform components, and company profile."
    },
    {
      "name": "Contact",
      "description": "Reaching the Subcore AI team."
    }
  ],
  "security": [],
  "paths": {
    "/": {
      "get": {
        "operationId": "getApiRoot",
        "tags": [
          "Catalog"
        ],
        "summary": "API root",
        "description": "Machine-readable index of the API: available endpoints, the versioning policy, and links to the OpenAPI document and MCP server.",
        "responses": {
          "200": {
            "description": "API root document.",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this response.",
                "schema": {
                  "type": "string"
                }
              },
              "X-API-Version": {
                "description": "Dated version of the API contract that served this response.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy, as `<limit>;w=<window seconds>`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Limit": {
                "description": "Requests permitted in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Deprecation": {
                "description": "Present only on a deprecated version; the date it was deprecated (RFC 9745).",
                "required": false,
                "schema": {
                  "type": "string"
                }
              },
              "Sunset": {
                "description": "Present only on a deprecated version; the date it stops serving (RFC 8594).",
                "required": false,
                "schema": {
                  "type": "string"
                }
              },
              "Link": {
                "description": "Present only on a deprecated version; the successor, as `<url>; rel=\"successor-version\"` (RFC 8288).",
                "required": false,
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this response.",
                "schema": {
                  "type": "string"
                }
              },
              "X-API-Version": {
                "description": "Dated version of the API contract that served this response.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy, as `<limit>;w=<window seconds>`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Limit": {
                "description": "Requests permitted in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current window resets.",
                "schema": {
                  "type": "integer"
                }
              },
              "Retry-After": {
                "description": "Seconds to wait before retrying.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected error. Uses the standard error envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/pages": {
      "get": {
        "operationId": "listPages",
        "tags": [
          "Content"
        ],
        "summary": "List pages",
        "description": "List every public page on subcore.ai, newest content first.",
        "parameters": [
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Filter by page category.",
            "schema": {
              "type": "string",
              "enum": [
                "overview",
                "solution",
                "platform",
                "company",
                "legal"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Offset"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of results.",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this response.",
                "schema": {
                  "type": "string"
                }
              },
              "X-API-Version": {
                "description": "Dated version of the API contract that served this response.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PageList"
                }
              }
            }
          },
          "400": {
            "description": "Invalid query parameter.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected error. Uses the standard error envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/pages/{slug}": {
      "get": {
        "operationId": "getPage",
        "tags": [
          "Content"
        ],
        "summary": "Get a page",
        "description": "Fetch one page including its markdown body. Nested slugs use a slash, e.g. `core0/agents`.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Page slug. Use `home` for the homepage.",
            "schema": {
              "type": "string"
            },
            "examples": {
              "product": {
                "value": "chat"
              },
              "nested": {
                "value": "core0/agents"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The requested page.",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this response.",
                "schema": {
                  "type": "string"
                }
              },
              "X-API-Version": {
                "description": "Dated version of the API contract that served this response.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PageDetail"
                }
              }
            }
          },
          "404": {
            "description": "No page with that slug.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected error. Uses the standard error envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/products": {
      "get": {
        "operationId": "listProducts",
        "tags": [
          "Catalog"
        ],
        "summary": "List products",
        "description": "List Subcore AI's products and platform components with summaries, channels, and documentation links.",
        "parameters": [
          {
            "name": "channel",
            "in": "query",
            "required": false,
            "description": "Only return products covering this channel, e.g. `voice`.",
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Offset"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of products.",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this response.",
                "schema": {
                  "type": "string"
                }
              },
              "X-API-Version": {
                "description": "Dated version of the API contract that served this response.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductList"
                }
              }
            }
          },
          "400": {
            "description": "Invalid query parameter.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected error. Uses the standard error envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/search": {
      "get": {
        "operationId": "searchContent",
        "tags": [
          "Content"
        ],
        "summary": "Search site content",
        "description": "Full-text search across every page. Results are ranked and include a matching snippet.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "description": "Search terms. At least 2 characters, at most 200, and no more than 16 terms once split on non-alphanumeric characters.",
            "schema": {
              "type": "string",
              "minLength": 2,
              "maxLength": 200
            },
            "examples": {
              "guardrails": {
                "value": "guardrails"
              }
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum results to return.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 25,
              "default": 5
            }
          },
          {
            "$ref": "#/components/parameters/Offset"
          }
        ],
        "responses": {
          "200": {
            "description": "Ranked search results.",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this response.",
                "schema": {
                  "type": "string"
                }
              },
              "X-API-Version": {
                "description": "Dated version of the API contract that served this response.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy, as `<limit>;w=<window seconds>`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Limit": {
                "description": "Requests permitted in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current window resets.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchResultList"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid query.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected error. Uses the standard error envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/company": {
      "get": {
        "operationId": "getCompany",
        "tags": [
          "Catalog"
        ],
        "summary": "Get company profile",
        "description": "Company description, supported channels, contact routes, legal pages, and the agent-facing interfaces this site publishes.",
        "responses": {
          "200": {
            "description": "Company profile.",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this response.",
                "schema": {
                  "type": "string"
                }
              },
              "X-API-Version": {
                "description": "Dated version of the API contract that served this response.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Company"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected error. Uses the standard error envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/contact": {
      "post": {
        "operationId": "createContactRequest",
        "tags": [
          "Contact"
        ],
        "summary": "Send a demo request",
        "description": "Deliver a demo request or sales enquiry to the Subcore AI team. This sends a real message to a\nreal inbox - confirm the details with the person before calling it.\n\nPass an `Idempotency-Key` header to make retries safe: a repeat of the same key returns the\noriginal result with `idempotent_replay: true` instead of sending a second message.\n\nLimited to 5 requests per hour per client.",
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Client-generated key (a UUID works well) that makes retrying this request safe.",
            "schema": {
              "type": "string",
              "maxLength": 255
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ContactRequest"
              },
              "examples": {
                "demo": {
                  "summary": "Demo request",
                  "value": {
                    "name": "Alex Kim",
                    "email": "alex@example.com",
                    "company": "Northwind Support",
                    "message": "We handle about 4,000 support calls a month and want to evaluate voice deflection."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "An earlier request with the same Idempotency-Key was already delivered.",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this response.",
                "schema": {
                  "type": "string"
                }
              },
              "X-API-Version": {
                "description": "Dated version of the API contract that served this response.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy, as `<limit>;w=<window seconds>`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Limit": {
                "description": "Requests permitted in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current window resets.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContactResponse"
                }
              }
            }
          },
          "201": {
            "description": "The request was delivered.",
            "headers": {
              "X-Request-Id": {
                "description": "Correlation id for this response.",
                "schema": {
                  "type": "string"
                }
              },
              "X-API-Version": {
                "description": "Dated version of the API contract that served this response.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Policy": {
                "description": "Quota policy, as `<limit>;w=<window seconds>`.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Limit": {
                "description": "Requests permitted in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                  "type": "integer"
                }
              },
              "RateLimit-Reset": {
                "description": "Seconds until the current window resets.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContactResponse"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type was not application/json.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "One or more fields failed validation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidationError"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "The message could not be delivered upstream.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "default": {
            "description": "Unexpected error. Uses the standard error envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "parameters": {
      "Limit": {
        "name": "limit",
        "in": "query",
        "required": false,
        "description": "Items per page.",
        "schema": {
          "type": "integer",
          "minimum": 1,
          "maximum": 100,
          "default": 20
        }
      },
      "Offset": {
        "name": "offset",
        "in": "query",
        "required": false,
        "description": "Zero-based index of the first item to return.",
        "schema": {
          "type": "integer",
          "minimum": 0,
          "default": 0
        }
      }
    },
    "schemas": {
      "Pagination": {
        "type": "object",
        "description": "Offset pagination envelope shared by every list endpoint.",
        "properties": {
          "limit": {
            "type": "integer",
            "description": "Items requested per page."
          },
          "offset": {
            "type": "integer",
            "description": "Index of the first item returned."
          },
          "total": {
            "type": "integer",
            "description": "Total items matching the query."
          },
          "has_more": {
            "type": "boolean",
            "description": "True when more items remain."
          },
          "next_url": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri",
            "description": "Absolute URL of the next page, or null on the last page."
          }
        },
        "required": [
          "limit",
          "offset",
          "total",
          "has_more",
          "next_url"
        ]
      },
      "Page": {
        "type": "object",
        "description": "Summary of one public page.",
        "properties": {
          "object": {
            "const": "page"
          },
          "slug": {
            "type": "string",
            "description": "Stable page identifier."
          },
          "title": {
            "type": "string",
            "description": "Page title."
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "One-line summary."
          },
          "category": {
            "type": "string",
            "enum": [
              "overview",
              "solution",
              "platform",
              "company",
              "legal"
            ],
            "description": "What kind of page this is."
          },
          "channels": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Conversation channels the page covers."
          },
          "keywords": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Topic keywords."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Canonical HTML URL."
          },
          "markdown_url": {
            "type": "string",
            "format": "uri",
            "description": "Markdown representation of the page."
          },
          "updated_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Last content update."
          }
        },
        "required": [
          "object",
          "slug",
          "title",
          "category",
          "url",
          "markdown_url"
        ]
      },
      "PageDetail": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Page"
          },
          {
            "type": "object",
            "properties": {
              "content_markdown": {
                "type": "string",
                "description": "Full page body rendered as markdown."
              },
              "word_count": {
                "type": "integer",
                "description": "Word count of content_markdown."
              },
              "section_headings": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Headings found in the body, in document order."
              }
            },
            "required": [
              "content_markdown",
              "word_count",
              "section_headings"
            ]
          }
        ],
        "description": "A page including its markdown body."
      },
      "PageList": {
        "type": "object",
        "description": "Paginated list of pages.",
        "properties": {
          "object": {
            "const": "list"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Page"
            },
            "description": "Matching pages."
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        },
        "required": [
          "object",
          "data",
          "pagination"
        ]
      },
      "Product": {
        "type": "object",
        "description": "A product or platform component.",
        "properties": {
          "object": {
            "const": "product"
          },
          "id": {
            "type": "string",
            "description": "Product identifier, matching its page slug."
          },
          "name": {
            "type": "string",
            "description": "Product name."
          },
          "summary": {
            "type": [
              "string",
              "null"
            ],
            "description": "One-line summary."
          },
          "category": {
            "type": "string",
            "enum": [
              "overview",
              "solution",
              "platform",
              "company",
              "legal"
            ],
            "description": "solution for customer-facing offerings, platform for infrastructure."
          },
          "channels": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Channels this product covers."
          },
          "keywords": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Topic keywords."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Canonical HTML URL."
          },
          "markdown_url": {
            "type": "string",
            "format": "uri",
            "description": "Markdown URL."
          }
        },
        "required": [
          "object",
          "id",
          "name",
          "url",
          "markdown_url"
        ]
      },
      "ProductList": {
        "type": "object",
        "description": "Paginated list of products.",
        "properties": {
          "object": {
            "const": "list"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Product"
            },
            "description": "Matching products."
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        },
        "required": [
          "object",
          "data",
          "pagination"
        ]
      },
      "SearchResult": {
        "type": "object",
        "description": "One ranked search hit.",
        "properties": {
          "object": {
            "const": "search_result"
          },
          "slug": {
            "type": "string",
            "description": "Slug of the matching page."
          },
          "title": {
            "type": "string",
            "description": "Title of the matching page."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Canonical HTML URL."
          },
          "markdown_url": {
            "type": "string",
            "format": "uri",
            "description": "Markdown URL."
          },
          "score": {
            "type": "number",
            "description": "Relevance score; higher is better."
          },
          "snippet": {
            "type": "string",
            "description": "Excerpt around the first match."
          }
        },
        "required": [
          "object",
          "slug",
          "title",
          "url",
          "score",
          "snippet"
        ]
      },
      "SearchResultList": {
        "type": "object",
        "description": "Ranked search results.",
        "properties": {
          "object": {
            "const": "list"
          },
          "query": {
            "type": "string",
            "description": "The query that was executed."
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SearchResult"
            },
            "description": "Results, best match first."
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        },
        "required": [
          "object",
          "query",
          "data",
          "pagination"
        ]
      },
      "Company": {
        "type": "object",
        "description": "Company profile and the interfaces this site publishes for agents.",
        "properties": {
          "object": {
            "const": "company"
          },
          "name": {
            "type": "string",
            "description": "Company name."
          },
          "legal_name": {
            "type": "string",
            "description": "Registered name."
          },
          "domain": {
            "type": "string",
            "description": "Primary domain."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "Website URL."
          },
          "tagline": {
            "type": "string",
            "description": "Short positioning line."
          },
          "description": {
            "type": "string",
            "description": "What the company does."
          },
          "channels": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Conversation channels supported across products."
          },
          "contact": {
            "type": "object",
            "description": "How to reach the team.",
            "properties": {
              "support_email": {
                "type": "string",
                "format": "email",
                "description": "Support inbox."
              },
              "contact_page": {
                "type": "string",
                "format": "uri",
                "description": "Contact page."
              },
              "demo_request_url": {
                "type": "string",
                "format": "uri",
                "description": "Endpoint that accepts demo requests."
              }
            }
          },
          "legal": {
            "type": "object",
            "description": "Policy documents.",
            "properties": {
              "privacy_policy": {
                "type": "string",
                "format": "uri",
                "description": "Privacy policy."
              },
              "terms_of_service": {
                "type": "string",
                "format": "uri",
                "description": "Terms of service."
              }
            }
          },
          "agent_interfaces": {
            "type": "object",
            "description": "Machine-readable entry points published by this site.",
            "properties": {
              "openapi": {
                "type": "string",
                "format": "uri",
                "description": "OpenAPI document."
              },
              "mcp": {
                "type": "string",
                "format": "uri",
                "description": "MCP Streamable HTTP endpoint."
              },
              "llms_txt": {
                "type": "string",
                "format": "uri",
                "description": "llms.txt index."
              },
              "llms_full_txt": {
                "type": "string",
                "format": "uri",
                "description": "Concatenated markdown export."
              }
            }
          }
        },
        "required": [
          "object",
          "name",
          "domain",
          "url",
          "description"
        ]
      },
      "ContactRequest": {
        "type": "object",
        "description": "A demo request or sales enquiry.",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 2,
            "maxLength": 120,
            "description": "Full name of the person requesting contact."
          },
          "email": {
            "type": "string",
            "format": "email",
            "maxLength": 254,
            "description": "Reply-to email address."
          },
          "message": {
            "type": "string",
            "minLength": 10,
            "maxLength": 4000,
            "description": "The challenge, use case, or question for the team."
          },
          "company": {
            "type": "string",
            "maxLength": 200,
            "description": "Optional company or organisation name."
          },
          "source": {
            "type": "string",
            "maxLength": 100,
            "description": "Optional label for where the request originated."
          }
        },
        "required": [
          "name",
          "email",
          "message"
        ],
        "additionalProperties": false
      },
      "ContactResponse": {
        "type": "object",
        "description": "Confirmation that a contact request was accepted.",
        "properties": {
          "object": {
            "const": "contact_request"
          },
          "id": {
            "type": "string",
            "description": "Reference id for the submission."
          },
          "status": {
            "const": "received"
          },
          "idempotent_replay": {
            "type": "boolean",
            "description": "True when this repeats an earlier Idempotency-Key."
          },
          "message": {
            "type": "string",
            "description": "Human-readable confirmation."
          }
        },
        "required": [
          "object",
          "id",
          "status"
        ]
      },
      "Error": {
        "type": "object",
        "description": "Standard error envelope used by every endpoint.",
        "properties": {
          "error": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "invalid_request_error",
                  "not_found_error",
                  "method_not_allowed_error",
                  "rate_limit_error",
                  "api_error"
                ],
                "description": "Broad error class."
              },
              "code": {
                "type": "string",
                "description": "Stable machine-readable code."
              },
              "message": {
                "type": "string",
                "description": "Human-readable explanation."
              },
              "param": {
                "type": "string",
                "description": "The parameter at fault, when one can be identified."
              },
              "doc_url": {
                "type": "string",
                "format": "uri",
                "description": "Link to this document."
              },
              "request_id": {
                "type": "string",
                "description": "Correlation id, also sent as the X-Request-Id header."
              }
            },
            "required": [
              "type",
              "code",
              "message",
              "request_id"
            ]
          }
        },
        "required": [
          "error"
        ]
      },
      "ValidationError": {
        "type": "object",
        "description": "Error envelope with per-field validation issues.",
        "properties": {
          "error": {
            "type": "object",
            "properties": {
              "type": {
                "const": "invalid_request_error"
              },
              "code": {
                "const": "validation_failed"
              },
              "message": {
                "type": "string",
                "description": "Human-readable explanation."
              },
              "issues": {
                "type": "array",
                "description": "One entry per field that failed validation.",
                "items": {
                  "type": "object",
                  "properties": {
                    "param": {
                      "type": "string",
                      "description": "Field name."
                    },
                    "message": {
                      "type": "string",
                      "description": "Why it failed."
                    }
                  },
                  "required": [
                    "param",
                    "message"
                  ]
                }
              },
              "doc_url": {
                "type": "string",
                "format": "uri",
                "description": "Link to this document."
              },
              "request_id": {
                "type": "string",
                "description": "Correlation id."
              }
            },
            "required": [
              "type",
              "code",
              "message",
              "issues",
              "request_id"
            ]
          }
        },
        "required": [
          "error"
        ]
      }
    }
  }
}
