Real questions. Full answers.
Fourteen data examples, plus an agent workflow. Open a section to see the prompt, routes, SDK calls and dated output.
Real-day examples — see for yourself what you get.
Single-name research
one company · filing, regulator, exchange, central bank
The filing, the regulator, the exchange and the central bank
Show the SDK calls
d = QuantJourneyAPI.from_env().domains inc = d.equity.fundamentals.get_income_statement(symbol="AAPL", period="quarter", limit=4) si = d.equity.shorting.get_short_interest(symbol="AAPL") exp = d.derivatives.options.get_options_expirations(symbol="AAPL") fx = d.fx.rates.get_ecb_reference_rates() usd_per_eur = next(r.rate for r in fx.data if r.currency == "USD") eur_revenue = inc.data[0].revenue / usd_per_eur
Margin expanded 290bp in four quarters while shorts grew 20% in a single month — and if you want to act on that, 24 listed expiries run out to January 2029. A data vendor, a US regulator, an options exchange and a central bank, in one call shape. No one of them sells the other three.
Two of the four numbers came from institutions that do not sell data at all — FINRA and the ECB publish, they do not license. That is the part no vendor contract replaces.
| Fiscal quarter | Revenue fmp | In EUR ecb | Gross margin | Net margin | Diluted EPS | Filed |
|---|---|---|---|---|---|---|
| Q3 FY2026 | $109.42bn | €95.48bn | 50.1% | 27.2% | $2.03 | 31 Jul 2026 |
| Q2 FY2026 | $111.18bn | €97.02bn | 49.3% | 26.6% | $2.01 | 01 May 2026 |
| Q1 FY2026 | $143.76bn | €125.44bn | 48.2% | 29.3% | $2.84 | 30 Jan 2026 |
| Q4 FY2025 | $102.47bn | €89.41bn | 47.2% | 26.8% | $1.85 | 31 Oct 2025 |
Statements from fmp with fiscalYear, period and filingDate attached, so “Q3” is never silently a calendar quarter. EUR column at the ECB reference rate for 18 Sep 2026 (EUR/USD 1.1460) — the rate a European IC pack is obliged to use, taken from the central bank that sets it.
A capex story only rates can finish
Show the SDK calls
km = d.equity.fundamentals.get_key_metrics_ttm(symbol="MSFT") si = d.equity.shorting.get_short_interest(symbol="MSFT") ust = d.benchmarks.treasury.get_treasury_rates(start_date="2026-09-01", end_date="2026-09-18") cpi = d.macro.series.get_cpi(start_date="2026-01-01", end_date="2026-08-31") ten_year = ust.data.rates[0].year10 spread = km.data.freeCashFlowYieldTTM * 100 - ten_year
The AI-capex story sits in two numbers — 18.2× EBITDA but 56.3× free cash flow, because capex absorbs 63% of operating cash flow at 2.7× depreciation. The question that finishes it lives in another domain entirely: a 1.83% free cash flow yield against a 5.01% ten-year is minus 318 basis points. You are paid in growth or not at all. An equity-only API cannot ask that question.
Capex at 2.7× depreciation cannot hold indefinitely: either depreciation catches up and the multiple compresses, or revenue absorbs it. Either way the spread to the risk-free rate is the number to track — not the EBITDA multiple.
A valuation argument, both sides
Show the SDK calls
km = d.equity.fundamentals.get_key_metrics_ttm(symbol="NVDA") g = d.equity.ratios.get_quarterly_revenue_growth_yoy(symbol="NVDA") pt = d.equity.estimates.get_price_target_summary(symbol="NVDA") si = d.equity.shorting.get_short_interest(symbol="NVDA") exp = d.derivatives.options.get_options_expirations(symbol="NVDA") upside = pt.data.lastMonthAvgPriceTarget / quote.data.price - 1
Bull: 28× earnings, +105.9% revenue, 59.5% ROIC, 2.4% capex intensity. Bear: income quality of 0.70 and 150 days of inventory say cash is arriving slower than earnings. The tell: at 2.14 days to cover almost nobody is positioned for the bear case, even though 24 listed expiries make it trivial to express. Four institutions built that argument; the agent didn't get to choose which one flattered the thesis.
For a desk the actionable line is the last one: with 24 expiries and 2.14 days to cover, hedging the bear case costs option premium, not liquidity.
Screens, calendars & ownership
cross-sectional · events · 13F flows
Valuation from the vendor, positioning from the regulator
Show the SDK calls
rows = d.equity.reference.get_stock_screener(
industry="Semiconductors", marketCapMoreThan=100_000_000_000, limit=12)
for r in rows.data:
pe = d.equity.ratios.get_pe_ratio_ttm(symbol=r.symbol)
g = d.equity.ratios.get_quarterly_revenue_growth_yoy(symbol=r.symbol)
si = d.equity.shorting.get_short_interest(symbol=r.symbol)
print(r.symbol, pe.data, g.data, si.data[0].days_to_cover)The valuation ranking and the positioning ranking disagree, which is the whole point of joining them: Micron is the cheapest name on the fastest growth and the least shorted at 1.16 days to cover, while shorts grew 12.2% in a month on Intel — the only name in the group with no trailing earnings. One vendor ranked them; a regulator said who was actually leaning.
Positioning is the column that changes the trade. Cheap-and-unshorted (Micron) and expensive-and-shorted (AMD) are different setups, even when the valuation screen ranks them side by side.
| Name | Market cap | P/E ttm | Revenue y/y | Short interest finra | Days to cover finra |
|---|---|---|---|---|---|
| Micron · MU | $1.15tn | 22.7× | +345.7% | 29.7M · −1.0% | 1.16 |
| NVIDIA · NVDA | $5.38tn | 28.0× | +105.9% | 298.3M · +4.3% | 2.14 |
| Broadcom · AVGO | $1.70tn | 44.4× | +85.5% | not in FINRA file | — |
| TSMC · TSM | $2.25tn | 28.5× | +36.0% | ADR — not covered | — |
| AMD | $0.91tn | 142.1× | +50.1% | 41.7M · +4.1% | 2.49 |
| Intel · INTC | $0.55tn | n/m | +25.4% | 152.2M · +12.2% | 1.69 |
The screen itself is one vendor's job and we don't pretend otherwise — fmp returns the universe, the multiple and the market cap in three calls. The column FMP cannot produce is the last two: FINRA's consolidated short-interest file, published by the regulator on a settlement cycle. Blank cells are blank on purpose — ADRs and some issues are not in that file, and we would rather show the gap than invent a number.
The next two weeks, from four institutions
Show the SDK calls
win = dict(from_date="2026-09-21", to_date="2026-10-05") earn = d.equity.calendar.get_earnings_calendar(**win) events = d.macro.calendar.get_economic_events(**win) claims = d.macro.series.get_jobless_claims(start_date="2026-07-01", end_date="2026-09-18") odds = d.predictions.markets.search_markets(query="Fed rate", limit=5) us = [e for e in events.data if e.country == "US"]
Four institutions, one calendar: a data vendor for earnings, a macro provider for prints, a Federal Reserve bank for the realised claims series, and a prediction market for what is already in the price. The street expects durable goods to swing from +1.1% to −0.5% and payrolls to fall by a quarter — while real money pays 54.5% for a hike. One of those two views is wrong, and you can see both in a single response.
The Micron print on 30 September lands the same morning as core PCE. If both surprise in the same direction, the curve moves before the equity does.
| Date | Event | Type | Previous | Estimate |
|---|---|---|---|---|
| 23 Sep | S&P Global Composite PMI | macro eod | 56.0 | 55.2 |
| 24 Sep | Costco · COST | earnings fmp | — | $6.53 EPS |
| 24 Sep | Initial Jobless Claims | macro eod | 196k | 202k |
| 25 Sep | Durable Goods Orders | macro eod | +1.1% | −0.5% |
| 29 Sep | CB Consumer Confidence | macro eod | 89.4 | — |
| 30 Sep | Micron · MU | earnings fmp | — | $31.27 EPS |
| 30 Sep | Core PCE Price Index y/y | macro eod | 3.3% | — |
| 30 Sep | Chicago PMI | macro eod | 47.1 | 48.9 |
| 01 Oct | ISM Manufacturing PMI | macro eod | 54.6 | 54.0 |
| 01 Oct | Nike · NKE / Accenture · ACN | earnings fmp | — | $0.44 / $3.19 |
| 02 Oct | Nonfarm Payrolls, private | macro eod | 127k | 95k |
1,352 scheduled earnings and 1,000 macro events across 111 countries in the window; 150 of the macro prints are US. Shown: what actually moves a book.
A 170KB filing payload, reduced to seven numbers
Show the SDK calls
h = d.regulatory.ownership.get_institutional_holders(symbol="NVDA") pt = d.equity.estimates.get_price_target_summary(symbol="NVDA") q = d.equity.market.get_quote(symbol="NVDA") si = d.equity.shorting.get_short_interest(symbol="NVDA") top10 = sum(x.sharesNumber for x in sorted(h.data, key=lambda x: -x.sharesNumber)[:10]) breadth = sum(1 for x in h.data if x.changeInSharesNumber > 0) / len(h.data)
Institutions hold 14.47bn shares and shorts hold 298M — a 48-to-1 long-to-short ratio with breadth on a knife edge at 51%. The vendor gave you the crowd; the regulator gave you the absence of a counterweight. You never touched an EDGAR parser.
Read with rung 03: a 48:1 long-to-short ratio on 51% breadth is the profile of a name that gaps on flow, not on fundamentals.
Q2 2026 filings, quarter-end price $200.09. One call returned 100 filers across 4,816 lines of JSON.
Macro, rates & the Fed
bls · fred · treasury · cftc · polymarket
The same series from two agencies
Show the SDK calls
cpi_a = d.macro.us.get_cpi(start_year=2023, end_year=2026) un = d.macro.us.get_unemployment_rate(start_year=2024, end_year=2026) cpi_b = d.macro.series.get_cpi(start_date="2026-01-01", end_date="2026-08-31") claims = d.macro.series.get_jobless_claims(start_date="2026-07-01", end_date="2026-09-18") cpi_a.data[-1].cpi_all == cpi_b.data[-1].CPIAUCSL cpi_b.data[-1].realtime_start
CPI bottomed at 2.33% (Apr 2025), peaked at 4.17% (May 2026) and sits at 3.35%, while unemployment fell from 4.5% to 4.1% and claims dropped to 196k. Two independent agencies agree on the index to the third decimal — and FRED carries realtime_start on every row, so a backtest can ask what was known on the day rather than what is believed today.
For a backtest this matters more than the level: the FRED vintage field reconstructs what an analyst could have known on any given day, with no look-ahead.
Line break at October 2025: BLS published no observation. The gap is left open rather than interpolated — a silent fill is how a hole enters a backtest.
Rates and volatility, one question
Show the SDK calls
ust = d.benchmarks.treasury.get_treasury_rates(start_date="2026-09-01", end_date="2026-09-18") vix = d.derivatives.vol.get_vix_data(start_date="2026-08-18", end_date="2026-09-18") curve = ust.data.rates[0] twos_tens = curve.year10 - curve.year2
The front end sold off nearly twice as hard as the long end, and equity vol gave the whole move back inside a week.
Bear flattening with vol collapsing is the market saying the hike is priced and not feared. Whether that is right is a separate question — see rung 12.
What real money thinks the Fed will do
Show the SDK calls
mk = d.predictions.markets.search_markets(query="Fed rate", limit=5)
ust = d.benchmarks.treasury.get_treasury_rates(start_date="2026-09-11", end_date="2026-09-18")
hike = next(m for m in mk.data
if "increase" in m.question and "25 bps" in m.question)
hike.yes_price, hike.one_week_change, hike.volumeIn seven days the market flipped from 62/38 in favour of holding to 55/44 in favour of hiking, on $7.1m of combined volume and $2.3m of resting liquidity — while the 2-year sold off 37bp in the same window. A prediction market and the Treasury curve, two institutions, telling the same story independently. That corroboration is the trade; assembling it by hand is an afternoon.
The move is large relative to liquidity: $2.3m of resting orders absorbed a 17-point swing. Worth knowing before treating the probability as a consensus.
Four outcomes on the October 2026 meeting, priced at 05:06 UTC. Week-ago levels derived from each market's own reported one-week change. The four probabilities sum to 99.5% — near arbitrage-free.
Credit & crypto
fdic · defillama · coingecko · binance
Counterparty diligence: the regulator and the market
Show the SDK calls
banks = d.regulatory.banking.get_institutions(limit=5, filters="ACTIVE:1")
for b, ticker in zip(banks.data, ["JPM", "BAC", "C", "WFC", "GS"]):
pb = d.equity.ratios.get_pb_ratio_ttm(symbol=ticker)
print(b.NAMEHCR, b.ROA, b.ROE, pb.data)JPMorgan earns 159bp on assets against Citi's 106bp — and the market pays 2.60× book versus 1.06× for that gap. The regulator and the market agree on the ranking. FDIC data needs no vendor contract, no licence and no key; it is simply in the catalog.
The pairing is the point: the regulator's ROA says how the bank earns; the market's P/B says what investors make of it. When the two disagree, that is the diligence question.
| Institution | Assets fdic | Deposits fdic | ROA fdic | ROE fdic | P/B fmp |
|---|---|---|---|---|---|
| JPMorgan Chase | $4,091bn | $2,820bn | 1.59% | 18.55% | 2.60× |
| Bank of America | $2,655bn | $2,122bn | 1.13% | 12.31% | — |
| Citigroup | $1,976bn | $1,548bn | 1.06% | 11.69% | 1.06× |
| Wells Fargo | $1,908bn | $1,564bn | 1.38% | 14.88% | — |
| Goldman Sachs | $759bn | $499bn | 1.21% | 13.72% | — |
FDIC reports the insured depository institution; the ratio route reports the listed holding company. Same brand, different legal entity — which is exactly why the envelope labels each number with the source that produced it, so the two never get averaged by accident.
Stablecoin float is a bill bid
Show the SDK calls
sc = d.crypto.stablecoins.get_stablecoins() glb = d.crypto.market.get_global_data() ust = d.benchmarks.treasury.get_treasury_rates(start_date="2026-09-18", end_date="2026-09-18") fr = d.crypto.funding.get_funding_rate(symbol="BTC/USDT:USDT", exchange="binance") float_usd = sum(s.circulating.peggedUSD for s in sc.data) carry = float_usd * ust.data.rates[0].month3 / 100 perp_apr = fr.data.fundingRate * 3 * 365
A $311.9bn float sitting mostly in short-dated Treasuries earns roughly $12.9bn a year at a 4.14% three-month bill — which is why the front end and stablecoin supply are now the same trade seen from two sides. And with perp funding at 8.04%, the leveraged long pays almost double what the collateral earns. Four vendors: an on-chain analytics firm, a market aggregator, a rates source and an exchange connector. No equity data vendor sells any of this.
It also means the front end is now partly a crypto-demand market — a $30bn change in stablecoin float is a $30bn change in bill demand, visible through these same routes.
Volatility regime & cross-asset
cboe · one question across six domains
Identifying the volatility regime
Show the SDK calls
cpi = d.macro.us.get_cpi(start_date="2026-01-01", end_date="2026-08-31") win = dict(start_date="2026-08-18", end_date="2026-09-18") vix = d.derivatives.vol.get_vix_data(**win) vvix = d.derivatives.vol.get_vvix_data(**win) skew = d.derivatives.vol.get_skew_index_data(**win) ust = d.benchmarks.treasury.get_treasury_rates(start_date="2026-09-01", end_date="2026-09-18") odds = d.predictions.markets.search_markets(query="Fed rate", limit=5) ratio = float(vvix.data[-1].close) / float(vix.data[-1].close)
The regime is cheap spot vol with expensive tails. VIX and VVIX both sit below where August started, but SKEW is 3% above it and set its high on 11 September — after the VIX spike had passed. A VVIX/VIX ratio of 5.90 is the month's highest: convexity is bid even though the level is not. Put that beside a front end repricing 37bp and prediction markets flipping to a hike, and the classification writes itself — this is not calm, it is unhedged.
Practically: protection here is cheap on level and expensive on skew, so the efficient hedge is a spread rather than an outright put.
All three rebased to 100 at 18 August 2026, so they share one axis — three different scales never belong on two y-axes. Cboe publishes all three; the gateway returns them in the same shape.
One question across six domains
Show the SDK calls
packet = {}
for route, kw in [
("macro.us.get_cpi", dict(start_year=2023, end_year=2026)),
("macro.us.get_unemployment_rate", dict(start_year=2024, end_year=2026)),
("benchmarks.treasury.get_treasury_rates", dict(start_date="2026-09-01", end_date="2026-09-18")),
("macro.positioning.get_net_positioning", dict(symbol="T_NOTES_10Y")),
("derivatives.vol.get_vix_data", dict(start_date="2026-08-18", end_date="2026-09-18")),
("sentiment.fear_greed.get_summary", {}),
("crypto.funding.get_funding_rate", dict(symbol="BTC/USDT:USDT", exchange="binance")),
("predictions.markets.search_markets", dict(query="Fed rate", limit=5)),
]:
r = api.call(route, kw)
packet[route] = (r.data, r.meta.provider, r.meta.request_id)Read together: prices re-accelerating into a tightening labour market, a front end repricing hawkishly, speculators structurally short duration, real money paying 54.5% for an October hike — and equity vol asleep at 14.8 while sentiment sits in fear. That is a regime where the surprise is not the hike; it is that nothing is hedged for it. Assembling it from seven institutions is a sprint. Here it is one prompt, ~11 seconds, one key — and every figure still names the source that produced it.
Every figure above carries its request_id, so the packet can be re-run next week and diffed line by line.
CFTC legacy report, 52 weeks to 15 Sep 2026. Negative means speculators are net short.
One prompt. A repeatable research note.
The skill supplies the research method. MCP supplies the routes and source context.
1. Follow the skill
Start with the research question and the skill's method: profile, prices, fundamentals, estimates, events and ownership context.
2. Discover and call routes
Use the MCP route catalog to describe the required inputs, call the routes and retain provider context and request IDs.
3. Write the note
Separate facts, interpretation and open questions. State coverage, caveats and the tools used.