Products
Research Datasets
Direct, row-level access to the licensed multi-decade research archives behind the API, covering fundamentals, estimates, credit, options, governance, ownership, and factor returns. Where the product endpoints give you a curated answer, these give you the underlying table.
What's inside#
Two endpoints cover the whole surface:
| Method | Endpoint | Description |
|---|---|---|
GET | /api/v2/datasets | List every available dataset slug. Starter+, 4 credits (funds). |
GET | /api/v2/datasets/{dataset} | Read rows from one dataset. ?limit= and dataset-specific filters. |
Every response carries a note describing that dataset's coverage, row count, refresh cadence, and any keying quirks — read it before building against a dataset, it is the authoritative description.
1{2 "ok": true,3 "timestamp": "...",4 "dataset": "zacks_consensus",5 "n": 1,6 "rows": [ ... ],7 "source": "...",8 "note": "Daily sell-side EPS consensus (mean/std/count by reference period), 2.9M rows 2024-08 → present, ~5-week lag."9}Access & cost#
Listing the catalog requires Starter+ and costs 4 credits under funds.
Read the catalog response for the available slugs and count.
Each dataset bills at the credit cost of the product group it belongs to, and is gated by that group's plan. Cost is reported per call in the X-Credits-Cost response header — read it rather than assuming.
Representative costs (verified live):
| Dataset | Plan | Credits |
|---|---|---|
zacks_consensus, zacks_surprises | Starter+ | 2 |
boardex_networks | Pro+ | 3 |
markit_credit_indices | Pro+ | 4 |
Recently added#
zacks_consensus — Starter+ · 2 credits. Daily sell-side EPS consensus (mean / std / count by reference period), 2.9M rows, 2024-08 → present, ~5-week lag. Columns include ticker, est_type, reference_period, observation_date, est_mean, est_std, number_of_est.
zacks_surprises — Starter+ · 2 credits. Quarterly EPS actual-vs-consensus surprises (68.7k rows) with report dates. Columns include ticker, report_date, reference_period, actual_eps, consensus_eps, surprise_pct, number_of_est.
Not every surprise row has a consensus — consensus_eps and surprise_pct are null where no estimate existed (number_of_est: 0). Filter on number_of_est > 0 when computing surprise statistics.
markit_credit_indices — Pro+ · 4 credits. CDX + iTraxx (EU / Asia / SovX) daily composite spreads and prices by series / version / tenor, 2018 → T-2, 3.8M rows. Index-keyed (indexfamily, indexticker) — there is no equity ticker column. For the curated view with on-the-run filtering, use /api/v3/credit/indices instead.
boardex_networks — Pro+ · 3 credits. Director interlock edges — which boards share directors — 5.0M rows, weekly refresh. Keyed by boardid pairs; resolve ids via boardex_profile. Columns include associationtype, boardname, companyname, directorname, overlapyearstart, overlapyearend, role.
Governance archives now refresh weekly#
boardex_profile and boardex_composition were repointed on 2026-08-01 from a frozen 2026-03 archive to a weekly-refreshing pull. Columns now follow the licensed-research-native shape rather than the previous normalized one — if you built against the old column names, re-read the note and adjust. boardex_composition carries role spells keyed by boardid / directorid; resolve both via boardex_profile.
The full catalogue#
Fetch the catalog with GET /api/v2/datasets (Starter+, 4 credits). The response
is authoritative for available slugs and their count; the categories below
illustrate its coverage.
Fundamentals & pricing — compustat_annual, compustat_quarterly, compustat_segments, crsp_daily, crsp_monthly, crsp_delisting, crsp_distributions, segment_customers, supply_chain_links
Estimates & consensus — ibes_summary, ibes_detail, ibes_actuals, ibes_guidance, ibes_ptg, ibes_recommendations, estimize_consensus, estimize_estimates, zacks_consensus, zacks_surprises
Credit & fixed income — trace, markit_cds, markit_credit_indices, dealscan_facility, dealscan_pricing, ciq_ratings
Options & short interest — optionmetrics_daily, optionmetrics_by_ticker, optionmetrics_volsurface, markit_short
Governance, audit & ESG — boardex_profile, boardex_composition, boardex_networks, execucomp, audit_fees, audit_restatements, auditor_changes, msci_esg
Ownership & funds — mutual_fund_holdings, mutual_fund_returns
Events & factors — ciq_keydev, ciq_transcripts, fama_french_daily, fama_french_monthly
Examples#
List every dataset#
1curl -H "X-API-Key: $TENGU_API_KEY" \2 "https://firm.wealthnow.io/api/v2/datasets" | jq '.count, .datasets'Listing requires Starter+ and costs 4 credits. Cache the slug list to avoid paying for it on every query.
Read EPS surprises#
1curl -H "X-API-Key: $TENGU_API_KEY" \2 "https://firm.wealthnow.io/api/v2/datasets/zacks_surprises?limit=5" \3 | jq '.note, .rows[0]'1{2 "entry_date": "2026-06-29T00:00:00",3 "report_date": "2026-06-29T00:00:00",4 "ticker": "AIRT",5 "reference_period": "2026-03-01T00:00:00",6 "actual_eps": 28.75,7 "consensus_eps": null,8 "surprise_pct": null,9 "number_of_est": 010}Read director interlocks#
1curl -H "X-API-Key: $TENGU_API_KEY" \2 "https://firm.wealthnow.io/api/v2/datasets/boardex_networks?limit=5" | jq '.rows[0]'Notes for agents#
- Always read
note. Coverage windows, lags, row counts, and keying differ per dataset and change as archives are repointed. Thenoteis generated from the live table, so it cannot drift from reality. - Column names are archive-native. These are raw research tables — expect lowercase concatenated names (
indexfamily,overlapyearstart,number_of_est), not a normalized schema. - Not every dataset is ticker-keyed.
markit_credit_indicesis index-keyed;boardex_networksis board-id-keyed. Check thenotebefore joining onticker. - Nulls are real. Research archives carry genuine gaps — a
nullmeans the source had no value, not that the API failed.
Next steps#
- Credit & Fixed-Income — curated credit endpoints over these archives.
- Fundamentals — curated statements, ratios, and screening.
- API reference — every endpoint, per-plan access, and credit costs.