> CustomerGPT developer docs: public read API (pages, search, pricing, glossary), MCP server, customergpt-cli, Markdown for AI agents, OpenAPI 3.1, rate limits, versioning policy and discovery files.

Source: https://customergpt.ai/developers

Developers

# 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/pricing
```

Every 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](https://www.rfc-editor.org/rfc/rfc9457) (`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/pricing
```

Convention: 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.json`](https://customergpt.ai/api/openapi.json) OpenAPI 3.1 — Machine-readable description of every endpoint above and of the free-tool backends.
- [`/.well-known/api-catalog`](https://customergpt.ai/.well-known/api-catalog) RFC 9727 API catalog — Linkset pointing at the description, the docs and the status endpoint.
- [`/.well-known/mcp.json`](https://customergpt.ai/.well-known/mcp.json) MCP server card — Transport, tool list and client config for the MCP server.
- [`/llms.txt`](https://customergpt.ai/llms.txt) llmstxt.org — Markdown index of every page with a one-line description.
- [`/llms-full.txt`](https://customergpt.ai/llms-full.txt) Plain text — The whole site as one document, for agents that want a single fetch.
- [`/sitemap.xml`](https://customergpt.ai/sitemap.xml) sitemaps.org — Every indexable URL with change frequency and priority.
- [`/robots.txt`](https://customergpt.ai/robots.txt) robots.txt — Crawl permissions; AI crawlers are explicitly allowed.

## MCP server

The same read API is exposed as a [Model Context Protocol](https://modelcontextprotocol.io) 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 --json
```

## Getting 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](https://dashboard.customergpt.ai/?mode=register).
- **API keys:** issued and rotated by you in the dashboard on the Growth plan and above (see [pricing](https://customergpt.ai/pricing)); each key is scoped to one chatbot.
- **Sandbox:** the [free tools](https://customergpt.ai/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/v1` from 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](https://customergpt.ai/contact) or email [support@customergpt.ai](mailto:support@customergpt.ai).

## 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](https://datatracker.ietf.org/doc/draft-ietf-httpapi-ratelimit-headers/), 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+json
```

Wait 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/v1` is the current major version. A breaking change ships as `/api/v2` alongside `v1`; 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](https://www.rfc-editor.org/rfc/rfc9745), the date the deprecation took effect), `Sunset` ([RFC 8594](https://www.rfc-editor.org/rfc/rfc8594), the removal date) and `Link: <…>; rel="deprecation"` pointing at the notice here. The OpenAPI document marks the operation `deprecated: true` and its `x-versioning-policy` object 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/v1` and `/api/mcp` response, so both are callable from a browser.
- Errors are [RFC 9457 problem details](https://www.rfc-editor.org/rfc/rfc9457); MCP errors are JSON-RPC errors or `isError` tool results.
- Questions or a broken endpoint: [support@customergpt.ai](mailto:support@customergpt.ai).

---

Markdown version of https://customergpt.ai/developers (also at https://customergpt.ai/developers.md). Site index: https://customergpt.ai/llms.txt
