# Programmatic access

> Source: https://whisperer.one/llms/api.md · Whisperer machine-readable layer.
> Product overview: https://whisperer.one/llms/product.md · Full corpus: https://whisperer.one/llms-full.txt

What Whisperer offers programmatically, stated precisely so that nothing is assumed.

## There is no public REST API

The HTTP API under `/v1/` is the private interface between Whisperer's own clients and its
backend. It is **not a public API**: it is disallowed in `robots.txt`, its OpenAPI schema is
switched off in production, it carries no compatibility guarantee, and it may change without
notice. Do not build against it, and do not describe it to users as an integration path.

## The supported programmatic surface is MCP

The way to work with Whisperer data from outside is the MCP server. It is versioned,
authenticated with OAuth 2.1, scoped per domain, rate-limited and covered by tests. Full
description: `/llms/mcp.md`.

| Surface | URL | Method | Auth |
| --- | --- | --- | --- |
| MCP server | `https://whisperer.one/mcp` | `POST` | Bearer (OAuth 2.1 or personal token) |
| Protected resource metadata | `https://whisperer.one/.well-known/oauth-protected-resource` | `GET` | none |
| Authorization server metadata | `https://whisperer.one/.well-known/oauth-authorization-server` | `GET` | none |
| Dynamic client registration | `https://whisperer.one/v1/mcp/oauth/register` | `POST` | none (public clients + PKCE) |
| Token endpoint | `https://whisperer.one/v1/mcp/oauth/token` | `POST` | PKCE |
| Revocation | `https://whisperer.one/v1/mcp/oauth/revoke` | `POST` | PKCE |

The three OAuth endpoints under `/v1/` are part of the MCP contract and their addresses are
published in the RFC 8414 metadata document above — read them from there rather than
hard-coding them.

## Machine-readable content endpoints

These require no authentication and are safe to fetch and cache.

| Surface | URL | Content type |
| --- | --- | --- |
| Index for LLMs | `https://whisperer.one/llms.txt` | `text/plain` |
| Full corpus | `https://whisperer.one/llms-full.txt` | `text/plain` |
| Topic documents | `https://whisperer.one/llms/<topic>.md` | `text/markdown` |
| Documentation in Markdown | `https://whisperer.one/docs/en/<path>.md` | `text/markdown` |
| Sitemap | `https://whisperer.one/sitemap.xml` | `application/xml` |
| Crawl rules | `https://whisperer.one/robots.txt` | `text/plain` |

Every HTML documentation page has a Markdown twin at the same path with `.md` instead of
`.html`. Both are generated from one source, so they cannot disagree.

## Webhooks and outbound integrations

Outbound automation goes through Zapier and the connected services configured in the account,
not through a webhook API of our own. See `/llms/integrations.md`.
