GET. Every response shares one envelope. Every error carries a stable, machine-readable code. That consistency is what makes an agent reliable against the API: it never has to guess the shape of a response or parse free-form error prose.
Why Conduit is agent-native
One predictable envelope
Every response is
{ data, meta, requestId }. Lists carry meta.pagination. An agent learns the shape once and reuses it across every endpoint.Stable error codes
Errors return a machine-readable
code (bad_request, unauthorized, forbidden, not_found, rate_limited, internal_error) plus a requestId. Unknown query params fail closed with bad_request rather than being silently ignored, so a typo surfaces instead of returning wrong data.Discoverable by design
GET /llms.txt and GET /llms-full.txt describe the entire API as plain text an agent can read with no key. GET /openapi.json is the OpenAPI 3.1 source of truth.Auditable provenance
Observations carry source attribution, source URL, freshness, a raw payload reference, and rights metadata.
GET /v1/provenance/observations/{observationId} returns the full chain from official release to API response, so an agent can cite where a number came from.The three ways an agent consumes Conduit
Native MCP server
The Conduit Model Context Protocol server exposes the API as read-only tools (
screen_macro, get_latest_observations, cross_country, rates_analytics, observation_provenance, and more). Add it to Claude Code, Claude Desktop, or Cursor and your agent can query macro data conversationally with no glue code. This is the lowest-friction path for a chat-driven agent.Self-describing text indexes
Point an agent at
/llms.txt for a compact, sectioned index of every endpoint, or /llms-full.txt for the full reference with parameters. Both need no API key and stay in lock-step with the OpenAPI spec. An agent can fetch one, learn the surface, then call endpoints directly with HTTP.Typed SDK
The
@conduit/client TypeScript SDK wraps the same envelope and errors. It constructs with your apiKey, throws a typed ConduitError on non-2xx, auto-paginates cursor pages via an async iterator, and ships a buildScreenerFilter helper for the screener DSL. Use it when your agent runs inside a TypeScript or JavaScript runtime.Base URL and auth
All paths are relative tohttps://data.quantoraresearch.com. Send your key as x-api-key: <key> or Authorization: Bearer <key>.
The following endpoints need no key: GET /health, GET /ready, GET /openapi.json, GET /llms.txt, GET /llms-full.txt. Everything under /v1 requires a key.
API keys are issued on request today. There is no self-serve signup form yet. Contact Conduit to request a key. Keys are SHA-256 hashed server-side and never returned.
Conventions an agent should know
- Envelope. Lists return
{ "data": [...], "meta": { "request_id", "requestId", "api_version", "pagination" }, "requestId" }. Items return{ "data": { ... }, "meta": { ... }, "requestId" }. - Pagination. Cursor-based:
limit(1 to 500, default 100) and an opaquecursor. Followmeta.pagination.next_cursorwhilehas_moreistrue. - Time model.
period/period_start/period_endfilter the period a value describes (for example May 2026 CPI).start_date/end_datefilter knowledge-time (observed_at, when the value became known).as_ofreturns the latest vintage known on or before a timestamp; revisions are retained, never overwritten. - Rights-aware.
/v1/public/*returns only redistribution-safe official and public-domain data. Licensed vendor data is internal-only and never appears on the public surface. - Read-only. Every endpoint is
GET.
as_of currently approximates the ingestion timestamp, not a full provider-vintage reconstruction. Full vintage reconstruction is future work. Treat as_of as “known to Conduit on or before this time” rather than “published by the provider on or before this time”.Latest readings in one call
GET /v1/public/coverage rather than relying on a number hard-coded in docs.
Next steps
MCP server
Add Conduit’s read-only tools to Claude Code, Claude Desktop, or Cursor.
llms.txt
The keyless, self-describing indexes an agent reads to discover the API.