Overview
Most alternative data is noise until something connects it to price. The Ezana API is that connection: it turns obscure, overlooked datasets into tradeable signal and maps the non-obvious relationships between what informed actors do, what policy money chases, what the crowd is betting, and where markets move next. Every field traces to a primary source — House & Senate disclosures, SEC EDGAR, FEC records, prediction markets, and structured news — so a signal is auditable back to where it came from.
It's built for traders, quant firms, and systematic and research desks who want inputs, not opinions — features you can drop into a model, backtest, and trade around. What sets it apart is news engineering: real-time structuring, entity-tagging, and semantic linking of market-moving news to securities, events, and prediction-market odds.
Obscure data → market trends
Non-obvious relationships between under-watched datasets and price, surfaced as signal before they're consensus.
News engineering
Market-moving news structured and enriched into machine-usable signal — the core competency behind the feeds.
Prediction-market signal
Real-money odds as a consensus probability for event-driven strategies.
Entity-linked & queryable
Everything resolved to tickers, people, and issues, and semantically searchable by meaning.
Low-latency
Signal delivered close to the event, so you act while the edge is still live.
Backtest-ready history
Point-in-time series with disclosure lag preserved, so backtests aren't contaminated by hindsight.
Quickstart
Three steps from zero to your first signal.
- 1
Get a key
Request a scoped key at api@ezana.world and export it as
EZANA_API_KEY. - 2
Make your first request
curlcurl https://api.ezana.world/v1/congress/trades?ticker=NVDA&limit=20 \ -H "Authorization: Bearer $EZANA_API_KEY" \ -H "Accept: application/json"JavaScriptconst res = await fetch( "https://api.ezana.world/v1/congress/trades?ticker=NVDA&limit=20", { headers: { Authorization: `Bearer ${process.env.EZANA_API_KEY}` } } ); const { data, page } = await res.json(); - 3
Read the response
Every list response returns a
dataarray and apagecursor. Followpage.nextto paginate.200 OK{ "data": [ { "id": "trd_9f2c1a", "member": "Rep. Jane Doe", "party": "D", "ticker": "NVDA", "transaction": "purchase", "amount_range": "$15,001 - $50,000", "traded_at": "2026-05-14", "disclosed_at": "2026-06-02", "disclosure_lag_days": 19 } ], "page": { "next": "cursor_abc", "has_more": true } }
Getting access
Access is lease-based — you're leasing signal and structured alternative data, not a static dump. Tell us the signal families you need and your expected volume, and we issue a scoped API key for the matching tier. Reach us at api@ezana.world or from your plan — Enterprise plans include API access.
- Sandbox signal data
- 60 requests / min
- Congress flow (delayed)
- Community support
- Live congress & lobbying signal
- 600 requests / min
- Prediction-market odds
- Email support
- Full signal + news-engineering feeds
- High-throughput limits
- Backtest-ready history
- Priority support
- Full warehouse access
- Custom rate limits
- Bulk & backfill exports
- Dedicated support + SLA
Coming soon Self-serve key issuance and a request form. For now, access is granted manually on request.
Authentication
The API uses bearer-token authentication. Pass your key in the Authorization header on every request over HTTPS. Keys are scoped to your lease tier and datasets; never expose a key in client-side code.
curl https://api.ezana.world/v1/congress/trades?ticker=NVDA&limit=20 \
-H "Authorization: Bearer $EZANA_API_KEY" \
-H "Accept: application/json"Placeholder The token format and key-rotation flow are illustrative and will be finalized at launch.
Endpoints
Endpoints are grouped by signal family under a versioned /v1 prefix — each group framed by what a quant would actually do with it. Responses are JSON and cursor-paginated. The shapes below are illustrative placeholders.
Congressional trading
/v1/congressInsider-flow signal — what informed, access-rich actors are trading, structured for signal extraction, not just raw disclosures.
- GET
/v1/congress/tradesDisclosed House & Senate trades, filterable by member, ticker, party, and filing date — the raw substrate for an informed-flow factor.
- GET
/v1/congress/trades/{id}A single disclosure with STOCK Act filing metadata and disclosure lag, to model the delay between the trade and when the market saw it.
- GET
/v1/congress/membersRoster of all 535 members with disclosure history and committee assignments, so you can weight signal by seat and sector oversight.
- GET
/v1/congress/members/{id}/tradesFull trade history for one member — build per-actor track records and conviction weights.
- GET
/v1/congress/committees/{id}/activityTrading activity rolled up by committee, aligning flow with the sectors a committee actually oversees.
- GET
/v1/congress/signals/insider-flowPre-computed insider-flow score per ticker — a drop-in feature 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/filingsLDA lobbying filings by registrant, client, issue area, and quarter — where policy money is moving and which issuers are exposed.
- GET
/v1/lobbying/filings/{uuid}One filing in full, with issues lobbied, lobbyists, and reported spend.
- GET
/v1/lobbying/clients/{id}Spend history and issue exposure for a single client, ready to join against your position book for a policy-risk overlay.
- GET
/v1/lobbying/top-spendersLeaderboard of influence spend by client and sector over a window — spot ramps early.
- GET
/v1/lobbying/issues/mixBreakdown of spend by issue area, so you can tilt toward the policy themes gaining budget.
- GET
/v1/lobbying/registrants/{id}Activity for a lobbying firm across its client book — a cross-issuer influence network view.
- GET
/v1/lobbying/signals/policy-exposurePer-ticker policy-exposure score blending spend, issues, and contract adjacency into one feature.
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/contributionsItemized contributions filterable by contributor, committee, cycle, and employer — map corporate and executive giving.
- GET
/v1/fec/committees/{id}A committee’s receipts, disbursements, and affiliations over a cycle.
- GET
/v1/fec/candidates/{id}/fundingFunding profile for a candidate — sector concentration and top backers.
- GET
/v1/fec/signals/sector-givingNet political giving by sector as a directional signal on regulatory posture.
Government contracts (USASpending)
/v1/contractsRevenue-visibility signal — federal award flow mapped to publicly traded recipients, ahead of guidance.
- GET
/v1/contracts/awardsAwarded federal contracts filterable by recipient, agency, NAICS, and date — mapped to public parents.
- GET
/v1/contracts/recipients/{id}Award history for one recipient — backlog and momentum for an issuer.
- GET
/v1/contracts/agencies/{id}/spendingSpending by agency and program, to anticipate which vendors benefit.
- GET
/v1/contracts/signals/award-momentumPer-ticker award-momentum score — acceleration in federal revenue exposure.
Prediction markets
/v1/predictionsConsensus & odds signal — real-money probabilities for the events your positions are exposed to.
- GET
/v1/predictions/marketsLive and historical prediction markets by topic and status — a real-money probability for each event.
- GET
/v1/predictions/markets/{id}One market with current odds, liquidity, and resolution criteria.
- GET
/v1/predictions/markets/{id}/historyPoint-in-time odds series for a market — the input to event-driven backtests.
- GET
/v1/predictions/consensusAggregated consensus probability across correlated markets for a theme.
- GET
/v1/predictions/moversMarkets with the largest odds moves over a window — where conviction is shifting fastest.
News engineering
/v1/newsThe signal layer — news structured, entity-tagged, and semantically linked to tickers, events, and odds so headlines become machine-usable features.
- GET
/v1/news/searchSemantic news search over structured, deduplicated articles — retrieve by meaning, not keywords.
- GET
/v1/news/{id}/entitiesEntities resolved from one article to tickers, people, and issues — build per-name news-flow features.
- GET
/v1/news/{id}/related-marketsPrediction markets and securities an article is semantically linked to, with confidence scores.
- GET
/v1/news/signals/odds-movesNews items time-aligned to the odds moves they preceded — a news→consensus lead signal.
- GET
/v1/news/sentiment/by-entityRolling entity-level sentiment derived from structured news flow.
Market data & signals
/v1/marketsThe price layer — the series you regress every other signal against, plus composite and correlation features.
- GET
/v1/markets/quotesReference and end-of-day market data for a symbol universe — the price series behind every feature.
- GET
/v1/markets/signalsComposite Ezana signals blending the datasets above into a single score per name.
- GET
/v1/signals/correlationsDiscovered relationships between obscure datasets and price — the non-obvious links you can trade around.
- GET
/v1/signals/backtests/{id}Point-in-time backtest results for a signal spec, with disclosure lag preserved so history isn’t contaminated by hindsight.
Cross-dimensional signals
/v1/crossThe signals that only exist because we hold all seven dimensions at once — joins across influence, capital, and consensus that no single-vendor feed can reconstruct.
- GET
/v1/cross/influence-to-capitalAligns lobbying and campaign-finance spend (Capitol Watch) against subsequent institutional accumulation (Titans Shadow) per issuer, surfacing names where influence money leads the smart money.
- GET
/v1/cross/contract-to-insiderJoins federal contract-award momentum (Capitol Watch) with corporate insider buying (Titans Shadow) on the awarded issuer, flagging where the people closest to the win are also buying.
- GET
/v1/cross/policy-to-priceMaps bill progression and agency rulings (Regulatory Winds) onto the sector baskets they move (Titans Shadow prices), scoring each ticker by unrealized regulatory catalyst.
- GET
/v1/cross/consensus-vs-fundamentalsContrasts prediction-market odds (The Hive) with the fundamentals and analyst path (Titans Shadow) for the same event, isolating where crowd conviction diverges from the sell-side.
- GET
/v1/cross/demand-to-guidanceRegresses consumer demand signals — search, web traffic, card spend (Consumer Whispers) — against forward guidance and revisions (Titans Shadow) to catch demand inflections ahead of the print.
- GET
/v1/cross/macro-regime-overlayTags every other signal with the prevailing macro and geopolitical regime (Global Empire Lighthouse) so a factor can be conditioned on the environment it actually works in.
- GET
/v1/cross/composite/{ticker}One call returns a per-ticker rollup of every cross-dimensional signal above, weighted and decayed by disclosure lag — a drop-in composite feature.
Trend relationships & lead-lag
/v1/relationshipsTime-structured relationships between dimensions — which trend leads which, by how long, and when the usual link breaks.
- GET
/v1/relationships/lead-lagEstimated lead-lag between any two dimension series for a ticker or sector (e.g. patent momentum → price), returning the lag in days and the strength of the relationship.
- GET
/v1/relationships/divergenceFlags where two normally-correlated dimensions have decoupled — insider selling into rising retail sentiment, say — ranked by how far the pair has drifted from its historical link.
- GET
/v1/relationships/confirmationCounts how many independent dimensions currently agree on a name, turning multi-source corroboration into a single conviction score.
- GET
/v1/relationships/network/{entity}Returns the influence graph around an entity — the politicians, lobbyists, contractors, and institutions linked to it across dimensions — for second-order exposure mapping.
- GET
/v1/relationships/regime-shiftDetects the moment a cross-dimensional relationship structurally changes, so you can retire or re-weight a factor before it quietly stops working.
- GET
/v1/relationships/backtestPoint-in-time backtest of any relationship above with disclosure lag preserved, so a lead-lag edge is measured on the data you would actually have had.
{
"data": [
{
"id": "trd_9f2c1a",
"member": "Rep. Jane Doe",
"party": "D",
"ticker": "NVDA",
"transaction": "purchase",
"amount_range": "$15,001 - $50,000",
"traded_at": "2026-05-14",
"disclosed_at": "2026-06-02",
"disclosure_lag_days": 19
}
],
"page": { "next": "cursor_abc", "has_more": true }
}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 (repeatable for a universe). |
from | date | Inclusive start date (ISO 8601, e.g. 2026-01-01). |
to | date | Inclusive end date (ISO 8601). |
limit | int | Page size, 1–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": "req_7c1f0a"
}
}| Status | Name | Meaning |
|---|---|---|
| 400 | Bad Request | Malformed query — an invalid param, date, or cursor. |
| 401 | Unauthorized | Missing or invalid bearer token. |
| 403 | Forbidden | Key is valid but not scoped to this dataset or tier. |
| 404 | Not Found | No resource matches the id/path. |
| 429 | Too Many Requests | Rate limit exceeded — back off and retry after Reset. |
| 500 | Server Error | Unexpected error on our side — safe to retry with backoff. |
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→market 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 dataset traces to a primary source, with point-in-time history and a defined update cadence. Depth and cadence below are indicative.
| Dataset | Source | History | Cadence |
|---|---|---|---|
| Congressional trades | House Clerk · Senate eFD | 2012 → present | Ingested continuously |
| Lobbying | Senate LDA | 2013 → present | Quarterly + backfill |
| Campaign finance | FEC | 2003 → present | Daily |
| Gov. contracts | USASpending | 2008 → present | Daily |
| Prediction markets | Polymarket | 2021 → present | Near real-time |
| News | Multi-source, structured | Rolling 5-yr | Streaming |
| Market data | Reference + EOD | 2000 → present | End of day |
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 Too Many Requests.
- Data is licensed for your own analysis and products — no wholesale redistribution of raw feeds.
- Attribution of underlying primary sources is preserved in every payload.
- 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-07-01Added News-engineering signal endpoints (odds-moves, sentiment-by-entity).
- 2026-05-18Correlations endpoint (/v1/signals/correlations) enters private beta.
- 2026-03-09Cursor pagination standardized across all list endpoints.
- 2026-01-15v1 congressional-trading + lobbying endpoints published.
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 salted hash of each key is stored — never the raw secret. If our store leaked, keys stay safe.
Rotation
Rotate or revoke a key at any time; overlapping keys let you 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 lease tier and datasets — see Authentication.
What are the rate limits?
Per-key and tier-dependent (60/min on Developer up to custom on Institution). Every response carries X-RateLimit-* headers; a 429 means back off until Reset.
Can I redistribute the data?
No wholesale redistribution of raw feeds. You may use signal and derived features in your own analysis and products; primary-source attribution is preserved in every payload.
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?
Yes — series are point-in-time with disclosure lag preserved, so backtests aren’t contaminated by hindsight. Depth varies by dataset (see Data coverage).
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 → scoped API key
A requester submits the access form. On approval we issue a scoped key backed by a Supabase key table — only a salted hash is stored, never the raw key — bound to a lease tier and dataset scopes.
- 2
Versioned /v1/* routes over the warehouse
Stable, versioned REST routes read directly from the same warehouse that powers the product, so API consumers get the identical sourced-and-attributed data behind the app.
- 3
Per-key rate limiting + usage metering
Each request is authenticated, rate-limited per key, and metered. Usage rolls up per key and per dataset for quotas, dashboards, and billing.
- 4
Billing & lease-tier tie-in
Metered usage and tier feed billing (Stripe), so Developer/Trader/Quant Firm/Institution leases map cleanly to signal entitlements and overage.
- 5
Docs + changelog
This page is the front door; a versioned changelog tracks new endpoints, fields, and deprecations so integrators can upgrade safely.
Ready to trade on signal others miss?
Request an evaluation key and we'll get you a scoped token wired to the signal families your models need.
or email api@ezana.world