---
title: "usedocs developer portal — Answer API, OpenAPI, MCP"
description: "usedocs developer portal: Answer API, API keys, OpenAPI spec, MCP server, rate limits, authentication, webhooks, and a sandbox for cited docs answers."
image: "https://usedocs.app/og.png"
url: "https://usedocs.app/developers"
---

Developers

# usedocs developer portal

API keys, the Answer API, OpenAPI, the usedocs MCP server, rate limits, webhooks, and a sandbox — so agents and integrators can call cited docs answers without scraping HTML.

Need help?

Email [hello@usedocs.app](mailto:hello@usedocs.app) for product questions, setup help, sales, partnerships, or security reports.

## Quickstart

- Sign in at [the dashboard](/dashboard) (Google, GitHub, or magic link). Free plan: 100 messages/month, no credit card.

- Create a bot, crawl a docs URL or upload files, and open **Settings → Embed**.

- Copy `botId` and the public `botKey`. Those are your API keys for the widget, Answer API, and MCP tools.

- Call `POST /chat` or connect an agent to [https://usedocs.app/mcp](/mcp).

## API keys

usedocs does not issue a separate bearer token for the public Answer API. The embed credentials **are** the API keys:

- **botId** — UUID of the bot (path and JSON body).

- **botKey** — public key from Settings → Embed. Send it in the JSON body as `botKey`.

- Browser calls also need an `Origin` header on an allowed origin. Server-to-server MCP and Answer API calls authenticate with botKey; send Origin when the bot has allowed origins configured.

- Dashboard management routes (`/api/bots/…`) use the signed-in session cookie, not botKey.

## usedocs OpenAPI specification

The machine-readable spec is published at [https://usedocs.app/openapi.json](/openapi.json). Every public operation has a unique `operationId`, typed parameters, and JSON error schemas so LLM function-calling can import the file directly. There is no GraphQL surface; use this OpenAPI document instead of introspection.

## Answer API

Same retrieval pipeline as the widget. Guide: [Answer API](/learn/answer-api).

```
curl -sS -X POST 'https://usedocs.app/chat' \
  -H 'content-type: application/json' \
  -d '{
    "botId": "YOUR_BOT_ID",
    "botKey": "YOUR_PUBLIC_BOT_KEY",
    "question": "How do I get started?",
    "visitor": "ticket-system"
  }'
```

Errors are JSON objects with `error`, `code`, `message`, and `hint` — never HTML error pages on API paths.

## usedocs MCP server

The usedocs MCP server speaks Streamable HTTP JSON-RPC at [https://usedocs.app/mcp](/mcp). Discovery: [/.well-known/mcp.json](/.well-known/mcp.json).

Tools: `ask_docs`, `search_docs`, `get_bot_config`. Pass `botId` and `botKey` in each tool's arguments. Example Cursor / Claude config:

```
{
  "mcpServers": {
    "usedocs": {
      "url": "https://usedocs.app/mcp"
    }
  }
}
```

## Rate limits

Public chat: 30 requests per 60 seconds per visitor (policy `widget-chat`). Free SEO tools have separate hourly limits. Responses include RFC 9237 `RateLimit` and `RateLimit-Policy` headers. HTTP 429 also sends `Retry-After`. Honor those headers instead of guessing backoff.

## Webhooks

Escalations and leads can POST to your HTTPS endpoint. Setup: [webhook integration](/integrations/webhooks). GitHub product webhooks use `/api/integrations/github/webhook` with signature verification.

## Sandbox

Try the cited widget without an account: [live demo](/embed-preview.html?botId=demo). For API calls, create a Free bot and point it at a public docs URL. Markdown negotiation: `curl -H 'Accept: text/markdown' https://usedocs.app/developers` returns this page as Markdown with `Vary: Accept`.

## Related

					 Answer API guide
					 OpenAPI spec
					 MCP server
					 llms.txt
					 Product docs
					 Webhooks

Need help?

Email [hello@usedocs.app](mailto:hello@usedocs.app) for product questions, setup help, sales, partnerships, or security reports.

```json
[
  {
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "itemListElement": [
      {
        "@type": "ListItem",
        "position": 1,
        "name": "Home",
        "item": "https://usedocs.app/"
      },
      {
        "@type": "ListItem",
        "position": 2,
        "name": "Developer portal",
        "item": "https://usedocs.app/developers"
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "WebPage",
    "name": "usedocs developer portal",
    "description": "usedocs developer portal: Answer API, API keys, OpenAPI spec, MCP server, rate limits, authentication, webhooks, and a sandbox for cited docs answers.",
    "url": "https://usedocs.app/developers",
    "dateModified": "2026-08-24",
    "isPartOf": {
      "@type": "WebSite",
      "name": "usedocs.app",
      "url": "https://usedocs.app/"
    },
    "about": {
      "@type": "SoftwareApplication",
      "name": "usedocs",
      "url": "https://usedocs.app/"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "TechArticle",
    "headline": "usedocs developer portal",
    "description": "usedocs developer portal: Answer API, API keys, OpenAPI spec, MCP server, rate limits, authentication, webhooks, and a sandbox for cited docs answers.",
    "url": "https://usedocs.app/developers",
    "dateModified": "2026-08-24",
    "author": {
      "@type": "Organization",
      "name": "usedocs",
      "url": "https://usedocs.app/"
    }
  }
]
```
