{
  "openapi": "3.1.0",
  "info": {
    "title": "eVoost AI public API",
    "version": "1.1.0",
    "summary": "Read-only, unauthenticated facts about eVoost AI.",
    "description": "Verified facts about eVoost AI: company overview, products, FAQ, site search and contact channels. Every operation mirrors a tool of the MCP server at https://evoost.ai/mcp, with the same names and data. No authentication and no writes: to talk to eVoost AI, send the user to https://evoost.ai/contact.\n\nRate limit: 120 requests per 60 seconds per client (best effort, counted per edge location), reported on every response with the IETF `RateLimit-*` headers; over the limit the API answers 429 with `Retry-After`.\n\nVersioning and deprecation: The API is versioned in the URL (/api/v1). Within v1, changes are additive only: new operations, optional parameters and response fields. Breaking changes ship as a new version path, and v1 keeps working alongside it. Every API answer links this policy with `Link: rel=\"deprecation\"`; an operation due for removal answers with `Deprecation` (RFC 9745) and `Sunset` (RFC 8594) headers and a `Link` to this policy at least 90 days before it is removed.",
    "termsOfService": "https://evoost.ai/legal",
    "contact": {
      "name": "eVoost AI",
      "email": "hello@evoost.ai",
      "url": "https://evoost.ai/contact"
    }
  },
  "servers": [
    {
      "url": "https://evoost.ai/api/v1",
      "description": "Production"
    }
  ],
  "externalDocs": {
    "description": "Agent guide, including the versioning and deprecation policy",
    "url": "https://evoost.ai/agents.md#api-versioning"
  },
  "security": [],
  "tags": [
    {
      "name": "Site facts",
      "description": "Company, products, FAQ, search and contact."
    },
    {
      "name": "NLWeb",
      "description": "Natural language ask endpoint, NLWeb 0.55."
    }
  ],
  "paths": {
    "/company": {
      "get": {
        "operationId": "get_company_overview",
        "summary": "eVoost AI company overview",
        "description": "Returns verified facts about eVoost AI: what it does, who it is for, its products, markets, headquarters, founders, backers, key figures and how to contact it. Use it before describing or recommending eVoost AI. Pass the user's role to get the right contact channel. Same tool as `get_company_overview` on the MCP server.",
        "tags": [
          "Site facts"
        ],
        "parameters": [
          {
            "name": "role",
            "in": "query",
            "required": false,
            "description": "Optional role of the person the agent is helping; picks the recommended contact channel.",
            "schema": {
              "type": "string",
              "enum": [
                "Developer",
                "Asset manager",
                "Investor",
                "Broker",
                "Other"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "eVoost AI company overview",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyOverview"
                }
              }
            }
          },
          "400": {
            "description": "Unknown or invalid query parameter.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "405": {
            "description": "Only GET and HEAD are allowed.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "More than 120 requests in 60 seconds from this client.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected failure.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/products": {
      "get": {
        "operationId": "list_offerings",
        "summary": "List eVoost AI products",
        "description": "Lists the three ways eVoost AI works with residential developers (Gravity OS platform, eVoost Services, eVoost Partners broker network) with audience, highlights and page URL. Pass a kind to get only one of them. Same tool as `list_offerings` on the MCP server.",
        "tags": [
          "Site facts"
        ],
        "parameters": [
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "description": "Optional filter: \"platform\" (Gravity OS), \"service\" (eVoost Services) or \"network\" (eVoost Partners).",
            "schema": {
              "type": "string",
              "enum": [
                "platform",
                "service",
                "network"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List eVoost AI products",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OfferingList"
                }
              }
            }
          },
          "400": {
            "description": "Unknown or invalid query parameter.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "405": {
            "description": "Only GET and HEAD are allowed.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "More than 120 requests in 60 seconds from this client.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected failure.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/faq": {
      "get": {
        "operationId": "get_faq",
        "summary": "eVoost AI frequently asked questions",
        "description": "Returns the official answers published on evoost.ai to frequently asked questions (data ownership, CRM integration, sales team role, markets, data protection), each with the page that shows it. Pass an optional query to filter by topic; page with limit and the returned nextCursor. Same tool as `get_faq` on the MCP server.",
        "tags": [
          "Site facts"
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": false,
            "description": "Optional topic to filter questions, e.g. \"CRM\" or \"data\".",
            "schema": {
              "type": "string",
              "minLength": 2,
              "maxLength": 200
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum number of answers to return.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 50
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor from the previous page's nextCursor; omit it for the first page.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "eVoost AI frequently asked questions",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FaqAnswers"
                }
              }
            }
          },
          "400": {
            "description": "Unknown or invalid query parameter.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "405": {
            "description": "Only GET and HEAD are allowed.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "More than 120 requests in 60 seconds from this client.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected failure.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/search": {
      "get": {
        "operationId": "search_site",
        "summary": "Search evoost.ai",
        "description": "Searches the public pages, page sections, products and FAQ of evoost.ai and returns the most relevant canonical URLs (section results deep-link to their anchor) with a short snippet. Use it to find the page that supports a fact before citing it. Same tool as `search_site` on the MCP server.",
        "tags": [
          "Site facts"
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "description": "What to look for, e.g. \"broker network\" or \"pricing engine\".",
            "schema": {
              "type": "string",
              "minLength": 2,
              "maxLength": 200
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Search evoost.ai",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchResults"
                }
              }
            }
          },
          "400": {
            "description": "Unknown or invalid query parameter.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "405": {
            "description": "Only GET and HEAD are allowed.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "More than 120 requests in 60 seconds from this client.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected failure.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/contact": {
      "get": {
        "operationId": "get_contact_options",
        "summary": "How to contact eVoost AI",
        "description": "Returns the official channels to reach eVoost AI: demo request page, email, broker partners portal, headquarters and legal entity addresses. Pass the user's role to get the recommended channel. Same tool as `get_contact_options` on the MCP server.",
        "tags": [
          "Site facts"
        ],
        "parameters": [
          {
            "name": "role",
            "in": "query",
            "required": false,
            "description": "Optional role of the person the agent is helping; picks the recommended contact channel.",
            "schema": {
              "type": "string",
              "enum": [
                "Developer",
                "Asset manager",
                "Investor",
                "Broker",
                "Other"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "How to contact eVoost AI",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContactOptions"
                }
              }
            }
          },
          "400": {
            "description": "Unknown or invalid query parameter.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "405": {
            "description": "Only GET and HEAD are allowed.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "More than 120 requests in 60 seconds from this client.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "500": {
            "description": "Unexpected failure.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/ask": {
      "servers": [
        {
          "url": "https://evoost.ai"
        }
      ],
      "post": {
        "operationId": "ask",
        "summary": "Ask a question about eVoost AI (NLWeb)",
        "description": "NLWeb 0.55 ask: answers from the pages, page sections, products and FAQ published on evoost.ai, as schema.org items with canonical URLs.",
        "tags": [
          "NLWeb"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "description": "Optional key to make retries safe to match: asking has no side effects, so a retried POST with the same key gets the same answer and the key echoed back.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 257
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AskRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "NLWeb answer or application-level failure.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              },
              "Idempotency-Key": {
                "$ref": "#/components/headers/Idempotency-Key"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AskResponse"
                }
              },
              "text/event-stream": {
                "schema": {
                  "type": "string",
                  "description": "SSE events: start, result, error, complete."
                }
              }
            }
          },
          "400": {
            "description": "Malformed request or Idempotency-Key (INVALID_QUERY).",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AskResponse"
                }
              }
            }
          },
          "429": {
            "description": "More than 120 requests in 60 seconds from this client.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      },
      "get": {
        "operationId": "ask_by_query",
        "summary": "Ask a question about eVoost AI (NLWeb, query string)",
        "description": "Same as POST /ask with query.text taken from ?query=.",
        "tags": [
          "NLWeb"
        ],
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 2,
              "maxLength": 200
            }
          }
        ],
        "responses": {
          "200": {
            "description": "NLWeb answer or application-level failure.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Deprecation": {
                "$ref": "#/components/headers/Deprecation"
              },
              "Sunset": {
                "$ref": "#/components/headers/Sunset"
              },
              "Link": {
                "$ref": "#/components/headers/Link"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AskResponse"
                }
              },
              "text/event-stream": {
                "schema": {
                  "type": "string",
                  "description": "SSE events: start, result, error, complete."
                }
              }
            }
          },
          "400": {
            "description": "Malformed request or Idempotency-Key (INVALID_QUERY).",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AskResponse"
                }
              }
            }
          },
          "429": {
            "description": "More than 120 requests in 60 seconds from this client.",
            "headers": {
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "RateLimit-Limit": {
                "$ref": "#/components/headers/RateLimit-Limit"
              },
              "RateLimit-Remaining": {
                "$ref": "#/components/headers/RateLimit-Remaining"
              },
              "RateLimit-Reset": {
                "$ref": "#/components/headers/RateLimit-Reset"
              },
              "Retry-After": {
                "$ref": "#/components/headers/Retry-After"
              }
            },
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "headers": {
      "RateLimit-Policy": {
        "description": "Quota policy: 120 requests per 60-second window per client (IETF RateLimit header fields).",
        "schema": {
          "type": "string",
          "example": "120;w=60"
        }
      },
      "RateLimit-Limit": {
        "description": "Requests allowed in the current window.",
        "schema": {
          "type": "integer"
        }
      },
      "RateLimit-Remaining": {
        "description": "Requests left 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"
        }
      },
      "Idempotency-Key": {
        "description": "Echo of the request's Idempotency-Key.",
        "schema": {
          "type": "string"
        }
      },
      "Deprecation": {
        "description": "RFC 9745. Present only once the operation is deprecated: when it was (or will be) deprecated, e.g. `@1688169599`. Sent at least 90 days before the Sunset date.",
        "schema": {
          "type": "string",
          "pattern": "^@\\d+$"
        }
      },
      "Sunset": {
        "description": "RFC 8594. Present only once the operation is deprecated: HTTP date after which it may stop answering.",
        "schema": {
          "type": "string"
        }
      },
      "Link": {
        "description": "Always links the OpenAPI document (`rel=\"service-desc\"`) and the versioning and deprecation policy (`rel=\"deprecation\"`, RFC 9745), https://evoost.ai/agents.md#api-versioning.",
        "schema": {
          "type": "string"
        }
      }
    },
    "schemas": {
      "CompanyOverview": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "description": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "positioning": {
            "type": "string"
          },
          "whenToUse": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "notAFit": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "offerings": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "kind": {
                  "type": "string",
                  "enum": [
                    "platform",
                    "service",
                    "network"
                  ]
                },
                "audience": {
                  "type": "string"
                },
                "summary": {
                  "type": "string"
                },
                "highlights": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "url": {
                  "description": "Canonical page on evoost.ai.",
                  "type": "string",
                  "format": "uri"
                }
              },
              "required": [
                "name",
                "kind",
                "audience",
                "summary",
                "highlights",
                "url"
              ],
              "additionalProperties": false
            }
          },
          "foundingDate": {
            "description": "Year and month, YYYY-MM.",
            "type": "string"
          },
          "businessModel": {
            "type": "string"
          },
          "countries": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "founders": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "jobTitle": {
                  "type": "string"
                }
              },
              "required": [
                "name",
                "jobTitle"
              ],
              "additionalProperties": false
            }
          },
          "leadership": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "jobTitle": {
                  "type": "string"
                }
              },
              "required": [
                "name",
                "jobTitle"
              ],
              "additionalProperties": false
            }
          },
          "backers": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              },
              "required": [
                "name",
                "note"
              ],
              "additionalProperties": false
            }
          },
          "keyFigures": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "recognitions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "clients": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "contact": {
            "type": "object",
            "properties": {
              "demoRequestUrl": {
                "type": "string",
                "format": "uri"
              },
              "email": {
                "type": "string",
                "format": "email",
                "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
              },
              "brokersPortalUrl": {
                "type": "string",
                "format": "uri"
              },
              "headquarters": {
                "type": "object",
                "properties": {
                  "streetAddress": {
                    "type": "string"
                  },
                  "addressLocality": {
                    "type": "string"
                  },
                  "addressCountry": {
                    "description": "ISO 3166-1 alpha-2 country code.",
                    "type": "string"
                  },
                  "postalCode": {
                    "type": "string"
                  },
                  "addressRegion": {
                    "type": "string"
                  }
                },
                "required": [
                  "streetAddress",
                  "addressLocality",
                  "addressCountry"
                ],
                "additionalProperties": false
              },
              "legalEntities": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "legalName": {
                      "type": "string"
                    },
                    "address": {
                      "type": "object",
                      "properties": {
                        "streetAddress": {
                          "type": "string"
                        },
                        "addressLocality": {
                          "type": "string"
                        },
                        "addressCountry": {
                          "description": "ISO 3166-1 alpha-2 country code.",
                          "type": "string"
                        },
                        "postalCode": {
                          "type": "string"
                        },
                        "addressRegion": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "streetAddress",
                        "addressLocality",
                        "addressCountry"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "legalName",
                    "address"
                  ],
                  "additionalProperties": false
                }
              },
              "cities": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "recommended": {
                "description": "Best channel for the role passed in the input.",
                "type": "object",
                "properties": {
                  "channel": {
                    "type": "string",
                    "enum": [
                      "demo_request",
                      "brokers_portal"
                    ]
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "reason": {
                    "type": "string"
                  }
                },
                "required": [
                  "channel",
                  "url",
                  "reason"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "demoRequestUrl",
              "email",
              "brokersPortalUrl",
              "headquarters",
              "legalEntities",
              "cities",
              "recommended"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "name",
          "url",
          "description",
          "summary",
          "positioning",
          "whenToUse",
          "notAFit",
          "offerings",
          "foundingDate",
          "businessModel",
          "countries",
          "founders",
          "leadership",
          "backers",
          "keyFigures",
          "recognitions",
          "clients",
          "contact"
        ],
        "additionalProperties": false
      },
      "OfferingList": {
        "type": "object",
        "properties": {
          "offerings": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "kind": {
                  "type": "string",
                  "enum": [
                    "platform",
                    "service",
                    "network"
                  ]
                },
                "audience": {
                  "type": "string"
                },
                "summary": {
                  "type": "string"
                },
                "highlights": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "url": {
                  "description": "Canonical page on evoost.ai.",
                  "type": "string",
                  "format": "uri"
                }
              },
              "required": [
                "name",
                "kind",
                "audience",
                "summary",
                "highlights",
                "url"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "offerings"
        ],
        "additionalProperties": false
      },
      "FaqAnswers": {
        "type": "object",
        "properties": {
          "query": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "matched": {
            "description": "False when nothing matched the query and every answer is returned.",
            "type": "boolean"
          },
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "question": {
                  "type": "string"
                },
                "answer": {
                  "type": "string"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "required": [
                "question",
                "answer",
                "url"
              ],
              "additionalProperties": false
            }
          },
          "nextCursor": {
            "description": "Pass as cursor to get the next page; null on the last page.",
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "query",
          "matched",
          "items",
          "nextCursor"
        ],
        "additionalProperties": false
      },
      "SearchResults": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string"
          },
          "results": {
            "maxItems": 5,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "page",
                    "section",
                    "product",
                    "faq"
                  ]
                },
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "snippet": {
                  "type": "string"
                }
              },
              "required": [
                "type",
                "title",
                "url",
                "snippet"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "query",
          "results"
        ],
        "additionalProperties": false
      },
      "ContactOptions": {
        "type": "object",
        "properties": {
          "demoRequestUrl": {
            "type": "string",
            "format": "uri"
          },
          "email": {
            "type": "string",
            "format": "email",
            "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
          },
          "brokersPortalUrl": {
            "type": "string",
            "format": "uri"
          },
          "headquarters": {
            "type": "object",
            "properties": {
              "streetAddress": {
                "type": "string"
              },
              "addressLocality": {
                "type": "string"
              },
              "addressCountry": {
                "description": "ISO 3166-1 alpha-2 country code.",
                "type": "string"
              },
              "postalCode": {
                "type": "string"
              },
              "addressRegion": {
                "type": "string"
              }
            },
            "required": [
              "streetAddress",
              "addressLocality",
              "addressCountry"
            ],
            "additionalProperties": false
          },
          "legalEntities": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "legalName": {
                  "type": "string"
                },
                "address": {
                  "type": "object",
                  "properties": {
                    "streetAddress": {
                      "type": "string"
                    },
                    "addressLocality": {
                      "type": "string"
                    },
                    "addressCountry": {
                      "description": "ISO 3166-1 alpha-2 country code.",
                      "type": "string"
                    },
                    "postalCode": {
                      "type": "string"
                    },
                    "addressRegion": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "streetAddress",
                    "addressLocality",
                    "addressCountry"
                  ],
                  "additionalProperties": false
                }
              },
              "required": [
                "legalName",
                "address"
              ],
              "additionalProperties": false
            }
          },
          "cities": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "recommended": {
            "description": "Best channel for the role passed in the input.",
            "type": "object",
            "properties": {
              "channel": {
                "type": "string",
                "enum": [
                  "demo_request",
                  "brokers_portal"
                ]
              },
              "url": {
                "type": "string",
                "format": "uri"
              },
              "reason": {
                "type": "string"
              }
            },
            "required": [
              "channel",
              "url",
              "reason"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "demoRequestUrl",
          "email",
          "brokersPortalUrl",
          "headquarters",
          "legalEntities",
          "cities",
          "recommended"
        ],
        "additionalProperties": false
      },
      "Problem": {
        "type": "object",
        "description": "RFC 9457 problem details. `code` is stable; `hint` says what to do next.",
        "properties": {
          "type": {
            "type": "string",
            "format": "uri"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string"
          },
          "code": {
            "type": "string",
            "enum": [
              "not_found",
              "method_not_allowed",
              "invalid_parameter",
              "unknown_parameter",
              "rate_limited",
              "internal_error"
            ]
          },
          "hint": {
            "type": "string"
          }
        },
        "required": [
          "type",
          "title",
          "status",
          "detail",
          "code",
          "hint"
        ]
      },
      "AskRequest": {
        "type": "object",
        "description": "NLWeb 0.55 ask request.",
        "properties": {
          "query": {
            "type": "object",
            "properties": {
              "text": {
                "type": "string",
                "minLength": 2,
                "maxLength": 200,
                "description": "Natural language question."
              }
            },
            "required": [
              "text"
            ]
          },
          "prefer": {
            "type": "object",
            "properties": {
              "response_format": {
                "type": "string",
                "enum": [
                  "conversational_search",
                  "chatgpt_app"
                ],
                "default": "conversational_search"
              },
              "mode": {
                "type": "string",
                "description": "Comma-separated: list, summarize.",
                "default": "list"
              },
              "streaming": {
                "type": "boolean",
                "default": false,
                "description": "Server-Sent Events; also chosen by Accept: text/event-stream."
              }
            }
          },
          "context": {
            "type": "object",
            "description": "Accepted and ignored: answers come from published site content only."
          },
          "meta": {
            "type": "object",
            "properties": {
              "version": {
                "type": "string"
              }
            }
          }
        },
        "required": [
          "query"
        ]
      },
      "AskResponse": {
        "type": "object",
        "description": "NLWeb answer (results or content + structuredData) or failure (error).",
        "properties": {
          "_meta": {
            "type": "object",
            "properties": {
              "response_type": {
                "type": "string",
                "enum": [
                  "answer",
                  "failure"
                ]
              },
              "response_format": {
                "type": "string",
                "enum": [
                  "conversational_search",
                  "chatgpt_app"
                ]
              },
              "version": {
                "type": "string"
              }
            },
            "required": [
              "response_type",
              "version"
            ]
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "description": "schema.org item: WebPage, SoftwareApplication, Service, Question or SearchSummary."
            }
          },
          "content": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "const": "text"
                },
                "text": {
                  "type": "string"
                }
              }
            }
          },
          "structuredData": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string",
                "enum": [
                  "INVALID_QUERY",
                  "NO_RESULTS",
                  "UNSUPPORTED_FORMAT",
                  "UNSUPPORTED_MODE"
                ]
              },
              "message": {
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ]
          }
        },
        "required": [
          "_meta"
        ]
      }
    }
  }
}
