Build on CustomerGPT
A public read API, an MCP server, a CLI, Markdown for every page, and the discovery files agents look for — all on this domain, no account required.
Quickstart
Three requests cover most of what an agent needs: find a page, read it as Markdown, and check the plans. No keys, no sign-up. Responses are JSON (or text/markdown), CORS-open, and cached at the edge for an hour.
# 1. Find pages about a topic
curl -s "https://customergpt.ai/api/v1/search?q=zendesk+pricing"
# 2. Read any page as Markdown (same URL a browser uses)
curl -s -H "Accept: text/markdown" https://customergpt.ai/pricing
# ...or append .md to the path
curl -s https://customergpt.ai/pricing.md
# 3. Plans and prices as JSON
curl -s https://customergpt.ai/api/v1/pricingEvery endpoint is described in the OpenAPI document at /api/openapi.json.
Public content API
Base URL https://customergpt.ai/api/v1. All endpoints are GET, unauthenticated and read-only. Errors are RFC 9457 problem details (application/problem+json); an unknown path under /api/v1 answers a JSON 404 with a link back to the index.
| Endpoint | Returns |
|---|---|
GET /api/v1 | API index: every endpoint, the OpenAPI URL, and how to ask for Markdown. |
GET /api/v1/pages | All 121 pages with title, description, section and Markdown URL. Filter with ?section=blog. |
GET /api/v1/search?q=… | Keyword search over page titles, descriptions and paths. Every term must match; title hits rank first. |
GET /api/v1/markdown/{path} | Any page rendered as text/markdown, e.g. /api/v1/markdown/pricing. |
GET /api/v1/pricing | Subscription plans, monthly and yearly prices, included limits. |
GET /api/v1/glossary | Glossary terms with definitions; /api/v1/glossary/{slug} returns one term in full. |
Markdown for agents
Every page on this site has two representations at one URL. Browsers get HTML. A client that sends Accept: text/markdown — or ranks it above text/html with q-values — gets the page's content as text/markdown; charset=utf-8: headings, links, tables and code, without navigation, footer or scripts. The response carries Vary: Accept, and the HTML response carries a Link: rel="alternate"; type="text/markdown" to the .md sibling for clients that cannot set headers.
curl -sI -H "Accept: text/markdown" https://customergpt.ai/product/how-it-works
# HTTP/1.1 200 OK
# Content-Type: text/markdown; charset=utf-8
# Vary: Accept
# q-values are honoured: this still returns HTML
curl -sI -H "Accept: text/markdown;q=0.2, text/html" https://customergpt.ai/pricing
# an Accept that matches neither is a 406 listing both
curl -sI -H "Accept: application/pdf" https://customergpt.ai/pricingConvention: acceptmarkdown.com. Nonexistent paths answer a real 404 with a Markdown body that points at llms.txt, the search API and the sitemap.
Discovery files
Fixed-path files an agent can fetch before it has read anything else.
/api/openapi.jsonOpenAPI 3.1 — Machine-readable description of every endpoint above and of the free-tool backends./.well-known/api-catalogRFC 9727 API catalog — Linkset pointing at the description, the docs and the status endpoint./.well-known/mcp.jsonMCP server card — Transport, tool list and client config for the MCP server./llms.txtllmstxt.org — Markdown index of every page with a one-line description./llms-full.txtPlain text — The whole site as one document, for agents that want a single fetch./sitemap.xmlsitemaps.org — Every indexable URL with change frequency and priority./robots.txtrobots.txt — Crawl permissions; AI crawlers are explicitly allowed.
MCP server
The same read API is exposed as a Model Context Protocol server at https://customergpt.ai/api/mcp — Streamable HTTP transport, stateless, no authentication. Tools: search_pages, list_pages, get_page_markdown, get_pricing, get_glossary_term; resource: llms.txt. All tools are read-only (readOnlyHint: true). The server card is at /.well-known/mcp.json.
// Claude Desktop, Claude Code, Cursor, VS Code — any Streamable HTTP client
{
"mcpServers": {
"customergpt": { "type": "http", "url": "https://customergpt.ai/api/mcp" }
}
}
# Or talk JSON-RPC directly
curl -s https://customergpt.ai/api/mcp \
-H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'initialize answers without an auth challenge; GET and DELETE return 405 because a stateless server has no session stream.
Command-line tool
customergpt-cli on npm wraps the read API for scripts and shells. Zero dependencies, Node 18+, honours the rate-limit headers and reports Retry-After when throttled.
npm install -g customergpt-cli # or run once with: npx customergpt-cli ...
customergpt search zendesk pricing # find pages by keyword
customergpt page /pricing # any page as Markdown
customergpt pricing # plans and prices
customergpt glossary retrieval-augmented-generation
customergpt mcp # MCP client config for the server above
customergpt pages --section blog --jsonGetting started, without talking to sales
- Free, no account: everything on this page —
/api/v1,/api/mcp, Markdown pages, the CLI — works right now with no key. - Free trial of the product: 14 days, no credit card, self-serve at https://dashboard.customergpt.ai/?mode=register.
- API keys: issued and rotated by you in the dashboard on the Growth plan and above (see pricing); each key is scoped to one chatbot.
- Sandbox: the free tools run the same conversion and generation backends as the product, open to anyone. Their endpoints are in the OpenAPI file under Browser tools; each call needs a Cloudflare Turnstile token from the tool page, so drive them from a browser and use
/api/v1from scripts.
Product API
The chatbot platform itself — creating agents, ingesting sources, reading conversations, webhooks — is operated from the dashboard. That API is not yet described in the public OpenAPI document; when it is, it will be listed in /.well-known/api-catalog and here. Need it sooner, or an endpoint the read API does not cover? Contact us or email [email protected].
Rate limits
120 requests per 60 seconds per client IP, on /api/v1 and /api/mcp. Every response tells you where you stand with the IETF RateLimit header fields, plus the widely-read X-RateLimit-* trio:
RateLimit-Policy: "default";q=120;w=60 # quota and window
RateLimit: "default";r=118;t=41 # remaining, seconds until reset
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 118
X-RateLimit-Reset: 41
# over quota:
HTTP/1.1 429 Too Many Requests
Retry-After: 41
Content-Type: application/problem+jsonWait Retry-After seconds, or pace requests so RateLimit's r never reaches 0. Cached JSON responses (s-maxage=3600) carry the counters from the moment they were rendered.
Versioning and deprecation policy
- Version in the path.
/api/v1is the current major version. A breaking change ships as/api/v2alongsidev1; it never replaces it in place. - Additive within a major. Fields are added, never removed, renamed or retyped; new query parameters are optional; enum values may grow. Treat unknown fields as ignorable.
- Six months' notice. A deprecated endpoint, field or major version keeps working for at least six months after the announcement.
- Machine-readable signals. Affected responses carry
Deprecation(RFC 9745, the date the deprecation took effect),Sunset(RFC 8594, the removal date) andLink: <…>; rel="deprecation"pointing at the notice here. The OpenAPI document marks the operationdeprecated: trueand itsx-versioning-policyobject states the same rules. - Today: nothing is deprecated. The MCP server and the CLI follow the same policy; the CLI's major version tracks the API's.
Caching, CORS and support
- JSON responses are cached publicly for one hour (
s-maxage=3600) and served stale for a day while revalidating. MCP responses are never cached. - CORS:
Access-Control-Allow-Origin: *on every/api/v1and/api/mcpresponse, so both are callable from a browser. - Errors are RFC 9457 problem details; MCP errors are JSON-RPC errors or
isErrortool results. - Questions or a broken endpoint: [email protected].