Contract and coverage#
The operation pages below are generated from OpenAPI, 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 |
| GET | /api/changes | getChanges |
| GET | /api/series | listSeries |
| GET | /api/series/{series_id} | getSeries |
| GET | /api/indicators/{slug}.json | getIndicator |
| GET | /data/topics/index.json | listPublicTopics |
| GET | /data/topics/{slug}.json | getPublicTopic |
| GET | /data/topics/{slug}.md | getPublicTopicMarkdown |
| GET | /data/topics/{slug}/v{version}.json | getPublicTopicRevision |
| GET | /data/topics/{slug}/v{version}.md | getPublicTopicRevisionMarkdown |
| GET | /data/endpoints.json | getEndpointsCatalog |
| GET | /data/daily_digest.json | getDailyDigest |
| GET | /data/baselines.json | getBaselines |
| GET | /data/forecasts/index.json | getForecastBoard |
| GET | /data/forecasts/track_record.json | getForecastTrackRecord |
| GET | /data/signal-packet.json | getSignalPacket |
| GET | /data/digest.md | getDailyDigestMarkdown |
| GET | /.well-known/mcp.json | getMcpManifest |
| GET | /api/{path} | apiNotFound |
| POST | /api/{path} | apiNotFoundPost |
| GET | /api/research | researchDiscovery |
| POST | /api/research | researchInvoke |
| GET | /api/mcp | mcpDiscovery |
| POST | /api/mcp | mcpJsonRpc |
| POST | /api/key_signup | requestApiKey |
| POST | /api/keys/replace | replaceApiKey |
| POST | /api/keys/revoke | revokeApiKey |
| POST | /api/checkout/pro | startProCheckout |
| GET | /developers | developerPortal |
| GET | /openapi.json | getOpenApi |
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.