The reference is built from
openapi.json. If an endpoint, parameter, or field appears in the spec, it is live. If it does not appear there, it is not part of the public contract.Base URL
All paths are relative to a single host./v1, and every response reports meta.api_version = "v1". Conduit is read-only and GET-only.
Authentication
Send your API key on every request to a/v1 route. Two header forms are accepted.
GET /health, GET /ready, GET /openapi.json, GET /llms.txt, and GET /llms-full.txt.
Keys carry scopes. Most product and data routes require data:read. Operational routes require ops:read. Sensitive admin routes require admin, which also satisfies the lower scopes. A key without the required scope returns 403 forbidden.
Keys are issued on request today. There is no self-serve signup form yet. See Support to request access. Keys are hashed server-side and are never returned, so store yours securely when issued.
The response envelope
Every response shares one shape, so you can write parsing once and reuse it everywhere. List responses wrap an array indata and carry pagination in meta.pagination. Item responses wrap a single object in data. Errors carry a stable machine-readable code. The request_id (also mirrored as top-level requestId) identifies the exact request and is what you quote when you contact support.
Error codes
Errors use a stableerror.code. Branch on the code, not the message.
| Code | HTTP | Meaning |
|---|---|---|
bad_request | 400 | Malformed input, or an unknown query parameter. |
unauthorized | 401 | Missing or invalid API key. |
forbidden | 403 | Key is valid but lacks the required scope. |
not_found | 404 | The resource does not exist. |
rate_limited | 429 | Rate limit exceeded for this client and scope. |
internal_error | 500 | Unexpected server error. |
Pagination
List endpoints page with an opaque cursor. Setlimit (1 to 500, default 100). When meta.pagination.has_more is true, pass meta.pagination.next_cursor back as cursor to fetch the next page. sort and order (asc or desc, default asc) control ordering on endpoints that support them.
Rate limits
Limits are enforced per client, per required scope, in a fixed window. Every/v1 response includes x-ratelimit-policy, x-ratelimit-limit, x-ratelimit-remaining, and x-ratelimit-reset (ISO timestamp). On exceed you get 429 rate_limited with details carrying required_scope, limit, and window_seconds.
| Scope | Default limit | Window |
|---|---|---|
data:read | 1000 requests | 60s |
ops:read | 500 requests | 60s |
admin | 250 requests | 60s |
Explore the spec
OpenAPI spec
The raw machine-readable contract. Import it into Postman, Insomnia, or your own code generator.
Coverage
A live breadth summary: catalog totals, public indicator categories, and covered countries.