Help center

Docs API

Everything on your public documentation site is also available as plain data, for an AI agent, your own app, or a custom docs front end. No API key is needed for a public knowledge base.

Every URL below starts from your docs root:

text
https://askvoro.com/~/YOUR_WORKSPACE_HANDLE/YOUR_KNOWLEDGE_BASE_SLUG
URLReturns
/nav.jsonSections and articles, in order
/search.json?q=…Ranked search results
/<article>.mdOne article as raw Markdown
/llms.txtAn index of every article, for AI assistants
/sitemap.xmlA sitemap, for search engines

Responses from a public knowledge base can be fetched from any origin and are cached for five minutes.

GET /nav.json returns your sections in order, each with its articles in order.

json
{
  "workspace": { "slug": "acme", "name": "Acme" },
  "knowledgeBase": {
    "slug": "docs",
    "name": "Docs",
    "visibility": "public",
    "url": "https://askvoro.com/~/acme/docs"
  },
  "sections": [
    {
      "id": "sec_…",
      "title": "Getting started",
      "articles": [
        {
          "slug": "install",
          "title": "Install",
          "description": "Add one script tag to your site…",
          "url": "https://askvoro.com/~/acme/docs/install",
          "markdownUrl": "https://askvoro.com/~/acme/docs/install.md",
          "updatedAt": "2026-10-22T12:00:00.000Z"
        }
      ]
    }
  ]
}

GET /search.json?q=reset+password&limit=5 searches published articles and FAQs with the same search your support AI uses. limit defaults to 6 and is capped at 10.

json
{
  "query": "reset password",
  "results": [
    {
      "type": "article",
      "id": "art_…",
      "slug": "reset-your-password",
      "title": "Reset your password",
      "excerpt": "Open **Settings → Security** and …",
      "url": "https://askvoro.com/~/acme/docs/reset-your-password",
      "markdownUrl": "https://askvoro.com/~/acme/docs/reset-your-password.md"
    },
    {
      "type": "faq",
      "id": "faq_…",
      "question": "I never got the reset email",
      "answer": "Check your spam folder …"
    }
  ]
}

Without q, search.json returns the full index the docs site's search box loads, which is larger and meant for searching in the browser.

Markdown#

Add .md to any article URL to get its source:

bash
curl https://askvoro.com/~/acme/docs/install.md

Or ask for Markdown with the Accept header at the normal URL, which is what AI coding agents do:

bash
curl -H "Accept: text/markdown" https://askvoro.com/~/acme/docs/install

The docs root with Accept: text/markdown returns llms.txt. Browsers never ask for Markdown, so they keep getting the normal page.

Internal knowledge bases#

An internal knowledge base answers nav.json, search.json and .md only to signed-in workspace members with article access, or to a request carrying a workspace API key with that access. Those responses are never cached or shared across origins. llms.txt and sitemap.xml exist only for public knowledge bases. A hidden knowledge base answers none of them.