EveryIntel

Developers

EveryIntel API

A versioned REST API over the same records that power this site. Summary endpoints are open; history and raw observations require an API key.

Endpoints (v1)

MethodPathDescription
GET/api/v1/statusService and data freshness status. Public.
GET/api/v1/markets/cotLatest positioning summary for all tracked futures markets. Public.
GET/api/v1/markets/cot/{slug}Latest 12 weeks for one market (public). Full history with a key holding scope cot:history.
GET/api/v1/macroLatest value for each tracked BLS series. Public.
GET/api/v1/macro/{slug}Series history including revision records. Requires scope macro:history.
GET/api/v1/researchPublished findings. Public.
GET/api/v1/sourcesSource catalog with licences and rights classification. Public.
GET/api/v1/observations?series={key}Raw observations with full provenance and all revisions. Requires scope observations:read.

Authentication

Send your key in the Authorization header: Authorization: Bearer ei_live_…. Keys are issued per organisation, scoped, and can be rotated or revoked at any time. EveryIntel stores only a hash of each key; a lost key cannot be recovered, only replaced.

Rate limits

Anonymous requests: 60 per minute per IP address. Keyed requests: the limit set on the key (default 60 per minute). Responses include X-RateLimit-Limit and X-RateLimit-Remaining; exceeding the limit returns 429 with Retry-After.

Response and error format

Successful responses return { "data": …, "meta": { … } }. Errors return:

{ "error": { "code": "rate_limited", "message": "Too many requests", "request_id": "…" } }

Provenance fields

Observation responses include source_ref, observed_at, collector_version, verification_status, confidence, data_class, revision_number and supersedes_id — see the provenance standard. Pass as_of=YYYY-MM-DDTHH:MM:SSZ to reconstruct what EveryIntel knew at that time.

Example

curl https://everyintel.com/api/v1/markets/cot

Access

API keys are currently issued by arrangement. Contact us with your use case.