Overview
Most alternative data is noise until something connects it to price. The Ezana API turns overlooked public datasets into structured inputs: what informed actors trade, where policy money goes, who funds whom, which companies win federal contracts, what the crowd is betting, and what large funds, activists and insiders do. Every field traces to a primary source (House and Senate disclosures, Senate LDA, FEC, USAspending, Polymarket, SEC EDGAR), so a signal is auditable back to where it came from.
It is built for traders, quant firms and research desks who want inputs, not opinions: features you can drop into a model, backtest and trade around. News engineering, cross-dimensional signals and lead-lag relationships are on the roadmap and marked as such below.
Under-watched data, structured
Disclosures and filings most desks never parse, cleaned, typed and joined to tickers where the mapping is known.
News engineering Roadmap
Market-moving news structured, entity-tagged and linked to tickers, events and odds.
Prediction-market signal
Real-money odds as a consensus probability for event-driven strategies.
Linked identifiers
Members by bioguide id, filers and issuers by SEC CIK, contractors by USAspending recipient id, securities by ticker and CUSIP.
Fresh
Sources are synced hourly to daily; see Data coverage for each dataset.
Disclosure dates kept
Trades carry the trade and the disclosure date, filings their filing date, so a backtest only sees what was public at the time.
Quickstart
Three steps from zero to your first signal.
- 1
Get a key
Create a free Developer key in Settings, API, or request a higher tier below. Export it as
EZANA_API_KEY. Keys belong on your server, never in a browser or an app. - 2
Make your first request
curlcurl -H "Authorization: Bearer $EZANA_API_KEY" \ "https://ezana.world/v1/congress/trades?ticker=NVDA&limit=5"JavaScriptconst res = await fetch( "https://ezana.world/v1/congress/trades?ticker=NVDA&limit=5", { headers: { Authorization: `Bearer ${process.env.EZANA_API_KEY}` } } ); const { data, page, meta } = await res.json(); - 3
Read the response
Every list response returns a
dataarray, apagecursor andmeta(request id, public source, and the delay applied to your key). Followpage.nextto paginate.200 OK{ "data": [ { "id": "<uuid>", "member": { "bioguide_id": "<bioguide id>", "name": "<member name>", "party": "D", "chamber": "house", "state": "CA" }, "ticker": "NVDA", "asset": "<asset description>", "transaction": "purchase", "amount_min": 15001, "amount_max": 50000, "owner": "self", "traded_at": "<YYYY-MM-DD>", "disclosed_at": "<YYYY-MM-DD>", "disclosure_lag_days": 19, "source": "House Clerk" } ], "page": { "limit": 5, "has_more": true, "next": "<cursor>" }, "meta": { "request_id": "<uuid>", "source": "House Clerk and Senate Office of Public Records", "delayed_days": 30 } }
Getting access
Developer keys are free and self-serve in Settings, API (up to two, data delayed 30 days). For the Trader, Quant Firm and Institution tiers, request access below: we review requests within two business days and email you a one-time claim link. Questions: api@ezana.world.
60 requests / min · 30-day delay
- 60 requests / min
- Data delayed 30 days
- Congress, lobbying, FEC, contracts, prediction markets
- Community support
600 requests / min · no delay
- 600 requests / min
- No delay
- Everything in Developer, plus committee activity
- Email support
1,500 requests / min · no delay
- 1,500 requests / min
- No delay
- Every live dataset, including 13F, activist, whale moves and insider trades
- Priority support
Custom rate limit · no delay
- Custom rate limits
- No delay
- Every live dataset
- Dedicated support + SLA
Authentication
The API uses bearer-token authentication. Pass your key in the Authorization header on every request over HTTPS. Keys are scoped to your tier and datasets; never expose a key in client-side code. Keys look like ezk_live_XXXXXXXX_…, are shown once when created or claimed, and are stored only as a keyed hash. To rotate, create a new key, switch over, then revoke the old one. Keys in query strings are refused.
curl -H "Authorization: Bearer $EZANA_API_KEY" \
"https://ezana.world/v1/congress/trades?ticker=NVDA&limit=5"Endpoints
Endpoints are grouped by signal family under a versioned /v1 prefix. Responses are JSON and list endpoints are cursor-paginated. Live endpoints serve data today; Roadmap endpoints answer 501 not_available until they ship. The full contract, with parameters and response fields, is in the OpenAPI spec.
Congressional trading
/v1/congressInsider-flow signal: what informed, access-rich actors are trading, structured for signal extraction, not just raw disclosures.
- GET
/v1/congress/tradesLiveDisclosed House and Senate trades, filterable by member, ticker, party, chamber and trade date, newest trade first. Scope: congress.
- GET
/v1/congress/trades/{id}LiveA single disclosure with its filing date and disclosure lag. Scope: congress.
- GET
/v1/congress/membersLiveMembers of Congress with party, chamber, state and district. Scope: congress.
- GET
/v1/congress/members/{id}/tradesLiveFull trade history for one member (bioguide id), newest first. Scope: congress.
- GET
/v1/congress/committeesLiveCommittees and subcommittees with their seat counts. Scope: committees.
- GET
/v1/congress/committees/{id}/activityLiveTrades in the last 12 months by the committee's members, newest first. The committee itself is in meta.committee. Scope: committees.
- GET
/v1/congress/signals/insider-flowRoadmapPre-computed insider-flow score per ticker, ranking names by informed-actor accumulation.
Lobbying & influence
/v1/lobbyingInfluence-flow signal: map corporate influence spend to sector and price exposure before the thesis is consensus.
- GET
/v1/lobbying/filingsLiveLobbying Disclosure Act filings by registrant and client with reported spend, newest posted first. Scope: lobbying.
- GET
/v1/lobbying/filings/{uuid}LiveOne filing with its issue areas, lobbyist count and reported spend. Scope: lobbying.
- GET
/v1/lobbying/top-spendersLiveClients ranked by reported lobbying spend in a calendar year. Scope: lobbying.
- GET
/v1/lobbying/clients/{id}RoadmapSpend history and issue exposure for a single client.
- GET
/v1/lobbying/issues/mixRoadmapBreakdown of spend by issue area.
- GET
/v1/lobbying/registrants/{id}RoadmapActivity for a lobbying firm across its client book.
- GET
/v1/lobbying/signals/policy-exposureRoadmapPer-ticker policy-exposure score blending spend, issues and contract adjacency.
Campaign finance (FEC)
/v1/fecPolitical-capital signal: who funds whom, tied back to the sectors and issuers with the most at stake.
- GET
/v1/fec/candidates/{id}/fundingLiveFunding totals for a candidate by cycle. The id is a bioguide id or an FEC candidate id. Scope: fec.
- GET
/v1/fec/contributionsRoadmapItemized contributions by contributor, committee, cycle and employer.
- GET
/v1/fec/committees/{id}RoadmapA committee's receipts, disbursements and affiliations over a cycle.
- GET
/v1/fec/signals/sector-givingRoadmapNet political giving by sector as a directional signal.
Government contracts (USAspending)
/v1/contractsRevenue-visibility signal: federal award flow mapped to publicly traded recipients, ahead of guidance.
- GET
/v1/contracts/awardsLiveFederal contract awards by recipient, agency and action date, with the recipient's listed parent and ticker where known. Scope: contracts.
- GET
/v1/contracts/recipients/{id}LiveAward history for one recipient (USAspending recipient id), newest first. Scope: contracts.
- GET
/v1/contracts/agencies/{id}/spendingRoadmapSpending by agency and program.
- GET
/v1/contracts/signals/award-momentumRoadmapPer-ticker award-momentum score.
Prediction markets
/v1/predictionsConsensus and odds signal: real-money probabilities for the events your positions are exposed to.
- GET
/v1/predictions/marketsLivePrediction markets with reported volume, largest first, with current odds. Scope: predictions.
- GET
/v1/predictions/markets/{id}LiveOne market with current odds, volume and liquidity. Scope: predictions.
- GET
/v1/predictions/markets/{id}/historyRoadmapPoint-in-time odds series for a market.
- GET
/v1/predictions/consensusRoadmapAggregated consensus probability across correlated markets for a theme.
- GET
/v1/predictions/moversRoadmapMarkets with the largest odds moves over a window.
Institutional & insider (SEC)
/v1/institutionalSmart-money signal: what large funds hold and add, who takes activist stakes, and what insiders buy and sell.
- GET
/v1/institutional/holdingsLiveForm 13F holdings by filer, most recently loaded first. Tickers are mapped from CUSIP; unmapped securities carry the issuer name. Scope: institutional.
- GET
/v1/institutional/activist-stakesLiveSchedule 13D and 13G stakes, newest filed first. Scope: institutional.
- GET
/v1/institutional/whale-movesLiveFund moves scored by conviction (position size against the filer's own book, newness and concentration), newest first. Scope: institutional.
- GET
/v1/insider/transactionsLiveForm 4 transactions by officers, directors and 10% owners, newest filed first. Scope: insider.
News engineering
/v1/newsNews structured, entity-tagged and linked to tickers, events and odds so headlines become machine-usable features.
- GET
/v1/news/searchRoadmapSemantic search over structured, deduplicated articles.
- GET
/v1/news/{id}/entitiesRoadmapEntities resolved from one article to tickers, people and issues.
- GET
/v1/news/{id}/related-marketsRoadmapPrediction markets and securities an article is linked to.
- GET
/v1/news/signals/odds-movesRoadmapNews items time-aligned to the odds moves they preceded.
- GET
/v1/news/sentiment/by-entityRoadmapRolling entity-level sentiment from structured news flow.
Market data & signals
/v1/marketsThe price layer and composite features. Prices stay on the roadmap until a licence allows redistribution.
- GET
/v1/markets/quotesRoadmapReference and end-of-day market data for a symbol universe.
- GET
/v1/markets/signalsRoadmapComposite Ezana signals blending the datasets above into one score per name.
- GET
/v1/signals/correlationsRoadmapRelationships between datasets and price.
- GET
/v1/signals/backtests/{id}RoadmapPoint-in-time backtest results for a signal spec.
Cross-dimensional signals
/v1/crossJoins across influence, capital and consensus that no single-vendor feed can reconstruct.
- GET
/v1/cross/influence-to-capitalRoadmapLobbying and campaign-finance spend against later institutional accumulation per issuer.
- GET
/v1/cross/contract-to-insiderRoadmapFederal contract momentum joined with insider buying on the awarded issuer.
- GET
/v1/cross/policy-to-priceRoadmapBill progression and agency rulings mapped onto the sector baskets they move.
- GET
/v1/cross/consensus-vs-fundamentalsRoadmapPrediction-market odds against the fundamentals path for the same event.
- GET
/v1/cross/demand-to-guidanceRoadmapConsumer demand signals against forward guidance and revisions.
- GET
/v1/cross/macro-regime-overlayRoadmapEvery signal tagged with the prevailing macro and geopolitical regime.
- GET
/v1/cross/composite/{ticker}RoadmapA per-ticker rollup of the cross-dimensional signals.
Trend relationships & lead-lag
/v1/relationshipsWhich trend leads which, by how long, and when the usual link breaks.
- GET
/v1/relationships/lead-lagRoadmapEstimated lead-lag between two dimension series for a ticker or sector.
- GET
/v1/relationships/divergenceRoadmapWhere two normally correlated dimensions have decoupled.
- GET
/v1/relationships/confirmationRoadmapHow many independent dimensions currently agree on a name.
- GET
/v1/relationships/network/{entity}RoadmapThe influence graph around an entity across dimensions.
- GET
/v1/relationships/regime-shiftRoadmapWhen a cross-dimensional relationship structurally changes.
- GET
/v1/relationships/backtestRoadmapPoint-in-time backtest of a relationship with disclosure lag preserved.
{
"data": [
{
"id": "<uuid>",
"member": {
"bioguide_id": "<bioguide id>",
"name": "<member name>",
"party": "D",
"chamber": "house",
"state": "CA"
},
"ticker": "NVDA",
"asset": "<asset description>",
"transaction": "purchase",
"amount_min": 15001,
"amount_max": 50000,
"owner": "self",
"traded_at": "<YYYY-MM-DD>",
"disclosed_at": "<YYYY-MM-DD>",
"disclosure_lag_days": 19,
"source": "House Clerk"
}
],
"page": { "limit": 5, "has_more": true, "next": "<cursor>" },
"meta": { "request_id": "<uuid>", "source": "House Clerk and Senate Office of Public Records", "delayed_days": 30 }
}Pagination & filtering
List endpoints use opaque cursor pagination. Each response includes a page object; when page.has_more is true, pass page.next back as the cursor query param to fetch the next page. Cursors are stable across inserts, so you never miss or double-count rows.
| Param | Type | Description |
|---|---|---|
ticker | string | Filter to a symbol. Repeat for a universe (up to 20). |
from | date | Inclusive start date (ISO 8601, for example 2026-01-01). |
to | date | Inclusive end date (ISO 8601). |
limit | int | Page size, 1 to 200 (default 50). |
cursor | string | Opaque cursor from the previous page's page.next. |
Errors
Errors return the appropriate HTTP status and a consistent JSON envelope with a stable code, a human message, and a request_id to quote in support.
{
"error": {
"code": "rate_limited",
"status": 429,
"message": "Rate limit exceeded. Retry after the window resets.",
"request_id": "<uuid>",
"docs": "https://ezana.world/ezana-api#rate-limits"
}
}| Status | Name | Meaning |
|---|---|---|
| 400 | invalid_param | An unknown, malformed or out-of-range parameter or cursor. |
| 401 | invalid_key | Missing, unknown, revoked or expired key. |
| 403 | not_in_scope | The key is valid but not scoped for this dataset. |
| 404 | not_found | No endpoint at the path, or no record with that id. |
| 429 | rate_limited | Rate limit exceeded. Wait for Retry-After seconds. |
| 500 | internal_error | Unexpected error on our side. Safe to retry with backoff. |
| 501 | not_available | A Roadmap endpoint that is not built yet. |
WebhooksRoadmap
Rather than poll, subscribe to events and let Ezana push. Register a signed HTTPS endpoint and choose event types: a new congressional filing for a watched ticker, a large prediction-market odds move, or a fresh news match above a confidence threshold. Deliveries are retried with backoff and signed with a per-subscription secret.
{
"type": "congress.trade.created",
"created_at": "2026-06-02T14:05:00Z",
"data": { "ticker": "NVDA", "member": "Rep. Jane Doe", "transaction": "purchase" }
}Roadmap Webhook subscriptions are illustrative and not yet live.
Data coverage & freshness
Every live dataset traces to a primary source and is synced on the cadence below.
| Dataset | Source | Cadence |
|---|---|---|
| Congressional trades | House Clerk, Senate Office of Public Records | Daily |
| Committee assignments | congress-legislators project | Daily |
| Lobbying | Senate LDA | Hourly |
| Campaign finance | FEC | Hourly |
| Government contracts | USAspending | Daily |
| Prediction markets | Polymarket | Every two hours |
| 13F, activist stakes, whale moves | SEC EDGAR | Hourly |
| Insider transactions (Form 4) | SEC EDGAR | Twice an hour |
Rate limits & terms
Rate limits are enforced per key and vary by lease tier (see Getting access). Every response carries X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers; exceeding your limit returns 429 rate_limited with Retry-After. Developer keys see data with a 30-day delay on trades, filings and transactions; meta.delayed_days says when a delay applied.
| Tier | Requests / min | Delay | Datasets |
|---|---|---|---|
| Developer | 60 | 30 days | congress, lobbying, fec, contracts, predictions |
| Trader | 600 | None | congress, lobbying, fec, contracts, predictions, committees |
| Quant Firm | 1,500 | None | congress, committees, lobbying, fec, contracts, predictions, institutional, insider |
| Institution | Custom | None | congress, committees, lobbying, fec, contracts, predictions, institutional, insider |
- Data is licensed for your own analysis and products, with no wholesale redistribution of raw feeds.
- Every response names its public source in
meta.source. - Signals are informational, not investment advice.
Coming soon Full terms of use and a data-license agreement will accompany general availability.
Versioning & changelog
The API is versioned in the path (/v1). Within a version we only make additive changes (new endpoints and fields), never breaking ones. Breaking changes ship under a new version with a migration window and deprecation notices.
- 2026-10-06v1 is live: 18 endpoints over congressional trades, committees, lobbying, campaign finance, contracts, prediction markets and SEC filings, with issued keys, per-key rate limits, usage metering and an OpenAPI spec.
Security
Scoped keys
Keys are bound to a lease tier and dataset scopes, so a key only reaches what it's entitled to.
Hashed at rest
Only a keyed hash (HMAC-SHA256) of each key is stored, never the raw secret, and keys are compared in constant time.
Rotation
Revoke a key at any time in Settings; it stops working on the next request. Create the new key first to roll without downtime.
TLS only
All traffic is HTTPS (TLS 1.2+). Plaintext requests are rejected; never embed a key client-side.
FAQ
How do I authenticate?
A bearer token in the Authorization header on every HTTPS request. Keys are scoped to your tier and datasets; see Authentication.
What are the rate limits?
Per key and per tier, from 60 a minute on Developer to custom on Institution. Every response carries X-RateLimit-* headers; a 429 carries Retry-After.
Can I redistribute the data?
No wholesale redistribution of raw feeds. You may use the data and derived features in your own analysis and products; every response names its public source in meta.source.
Is there an SLA?
Institution leases include an uptime SLA and dedicated support. Lower tiers are best-effort. Ask us for specifics for your volume.
Do you offer backtest-ready history?
Trades carry both the trade date and the disclosure date, and filings carry their filing dates, so you can backtest on what was public at the time. Point-in-time odds history is on the roadmap.
Are the signals investment advice?
No. Everything is informational inputs/features, not advice or a recommendation. You own how you model and trade around it.
How we build & ship it
The outline below is how the Ezana API is built and distributed to users who request it. It is a roadmap; items ship incrementally.
- 1
Request, approval, claim (live)
Submit the access form. On approval we email a one-time claim link; the key is generated when you claim it and shown once. Only a keyed hash of each key is stored. Developer keys are self-serve in Settings.
- 2
Versioned /v1 routes (live)
Stable, versioned REST routes over the same sourced data that powers the product. Endpoints not built yet answer 501 and are marked Roadmap here.
- 3
Per-key rate limits and metering (live)
Every request is authenticated, rate-limited per key and metered per key, day and endpoint.
- 4
Billing tie-in (roadmap)
Metered usage feeding billing for the Trader and Quant Firm tiers. Until then, paid tiers are invoiced directly.
- 5
Docs, OpenAPI and changelog (live)
This page, the OpenAPI spec at /v1/openapi.json and the changelog are generated from the same endpoint registry the API serves.
Ready to trade on signal others miss?
Create a Developer key in Settings, or request a higher tier for live data and more throughput.
or email api@ezana.world