# API reference

Generated from the repository OpenAPI contract. Every documented operation is included.

## Contract and coverage
The operation pages below are generated from [OpenAPI](/openapi.json), including parameters, request bodies, response schemas, documented examples and errors. The spec is the generation boundary, not a claim that every internal application route is public API. GET /api/usage is described in the plans guide but is not yet in this spec.

## Operations
| Method | Path | Operation |
| --- | --- | --- |
| GET | /api/datasets | [browsePublicDatasets](/docs/api/browse-public-datasets) |
| GET | /api/changes | [getChanges](/docs/api/get-changes) |
| GET | /api/series | [listSeries](/docs/api/list-series) |
| GET | /api/series/{series_id} | [getSeries](/docs/api/get-series) |
| GET | /api/indicators/{slug}.json | [getIndicator](/docs/api/get-indicator) |
| GET | /data/topics/index.json | [listPublicTopics](/docs/api/list-public-topics) |
| GET | /data/topics/{slug}.json | [getPublicTopic](/docs/api/get-public-topic) |
| GET | /data/topics/{slug}.md | [getPublicTopicMarkdown](/docs/api/get-public-topic-markdown) |
| GET | /data/topics/{slug}/v{version}.json | [getPublicTopicRevision](/docs/api/get-public-topic-revision) |
| GET | /data/topics/{slug}/v{version}.md | [getPublicTopicRevisionMarkdown](/docs/api/get-public-topic-revision-markdown) |
| GET | /data/endpoints.json | [getEndpointsCatalog](/docs/api/get-endpoints-catalog) |
| GET | /data/daily_digest.json | [getDailyDigest](/docs/api/get-daily-digest) |
| GET | /data/baselines.json | [getBaselines](/docs/api/get-baselines) |
| GET | /data/forecasts/index.json | [getForecastBoard](/docs/api/get-forecast-board) |
| GET | /data/forecasts/track_record.json | [getForecastTrackRecord](/docs/api/get-forecast-track-record) |
| GET | /data/signal-packet.json | [getSignalPacket](/docs/api/get-signal-packet) |
| GET | /data/digest.md | [getDailyDigestMarkdown](/docs/api/get-daily-digest-markdown) |
| GET | /.well-known/mcp.json | [getMcpManifest](/docs/api/get-mcp-manifest) |
| GET | /api/{path} | [apiNotFound](/docs/api/api-not-found) |
| POST | /api/{path} | [apiNotFoundPost](/docs/api/api-not-found-post) |
| GET | /api/research | [researchDiscovery](/docs/api/research-discovery) |
| POST | /api/research | [researchInvoke](/docs/api/research-invoke) |
| GET | /api/mcp | [mcpDiscovery](/docs/api/mcp-discovery) |
| POST | /api/mcp | [mcpJsonRpc](/docs/api/mcp-json-rpc) |
| POST | /api/key_signup | [requestApiKey](/docs/api/request-api-key) |
| POST | /api/keys/replace | [replaceApiKey](/docs/api/replace-api-key) |
| POST | /api/keys/revoke | [revokeApiKey](/docs/api/revoke-api-key) |
| POST | /api/checkout/pro | [startProCheckout](/docs/api/start-pro-checkout) |
| GET | /developers | [developerPortal](/docs/api/developer-portal) |
| GET | /openapi.json | [getOpenApi](/docs/api/get-open-api) |

## Errors and retries
Read the operation-specific status and body. Public datasets may use a string error; signup uses a structured error.code; MCP uses JSON-RPC errors. Do not assume one envelope. For read-only requests, honor Retry-After on 429, and use bounded backoff with jitter for transient 503 or transport failures. Fix invalid parameters and expired cursors before retrying 400. Resolve credentials or entitlement for 401/403. A missing record is not a retry loop. Do not automatically repeat signup or checkout after an ambiguous response.

## Examples versus schemas
JSON marked as a schema or operation contract is not an executable request. Response examples are copied only when supplied by OpenAPI; where it provides none, the page says so rather than inventing a production response.
