# PlainError API
PlainError explains Windows, PC game, and coding errors in plain English. There are no accounts or API keys. Agents and automated clients can read public pages and the documents below without registering.
## Discovery
- OpenAPI: [/openapi.json](/openapi.json)
- API catalog: [/.well-known/api-catalog](/.well-known/api-catalog)
- auth.md (no credentials required): [/auth.md](/auth.md)
- llms.txt: [/llms.txt](/llms.txt)
- MCP server (Streamable HTTP, no auth): [/mcp](/mcp) — [setup](/mcp-server) · [server card](/.well-known/mcp/server-card.json)
## Markdown for agents
Send `Accept: text/markdown` on a GET for the homepage, category pages, search, the Windows Update error-codes hub, and any error page. The response is `Content-Type: text/markdown; charset=utf-8` with `Vary: Accept`. Browsers and requests without that type still get HTML.
## Public endpoints
- `GET /` — homepage
- `GET /search?q=` — search published fixes
- `GET /windows`, `GET /games`, `GET /code` — category listings
- `GET /{category}/{slug}` — one published (or unverified) answer
- `GET /windows-update-error-codes` — hub table of Windows Update codes we cover
- `GET /llms.txt`, `GET /llms-full.txt`, `GET /sitemap.xml`, `GET /robots.txt`
- `POST /explain` — paste an error message (`error`, optional `category`, optional `context`). JSON or form body. New answers are limited to 10 per IP per day; a daily spend cap may also apply. Cached answers still work when those limits are hit. Pastes over 20,000 characters are rejected.
- `POST /subscribe` — newsletter signup (human, double opt-in). 5 attempts per IP per hour per Worker isolate.
- `POST /mcp` — public MCP server (Streamable HTTP, JSON-RPC). Tools: `search_fixes`, `get_fix`, `explain_error`. No auth. `explain_error` uses the same limits as `POST /explain`.
The paid Guided Fix checkout (`POST /checkout`) is for humans via Stripe, not for agents.
Contact: [hello@plainerror.com](mailto:hello@plainerror.com)