Market data

Spot ETF Data API for AI Agents

Bitcoin and Ethereum spot ETF data through one API: the official fundamentals of the 19 US spot ETFs, issuer by issuer: shares outstanding, NAV, crypto held and net assets. No regulatory filings to collect and parse fund by fund: one key, one format, every fund.

The official fundamentals of the 19 US spot ETFs, 10 on Bitcoin and 9 on Ethereum, issuer by issuer. Whole market: these routes do not take a symbol.

#Spot ETF data for AI agents and LLMs

“How much Bitcoin do US spot ETFs hold?”, “Which issuer runs the largest Ethereum ETF?”, “How did IBIT’s net assets change?”: an AI agent answers from the official fundamentals of the 19 funds through the get_options_data MCP tool, which serves the asset-level families.

MCP tools/call
The fundamentals of the Bitcoin spot ETFs, issuer by issuer, in one MCP call.
{
  "name": "get_options_data",
  "arguments": {
    "asset": "BTC",
    "fields": ["etf_fundamentals"]
  }
}
  • For the LLM: these figures are quarterly, from regulatory filings; there is no daily net flow here, and an answer should say which quarter it describes.
  • For developers: /v1/etf/fundamentals is one call per asset, a simple tool for your own AI agent (tool calling); its history route serves the past quarters.
  • Where it runs: Claude, ChatGPT, Cursor and any MCP client, including agent frameworks with MCP support such as LangChain or n8n.

Connect your AI agent with the MCP server guide, or teach it BytNode with the open-source Agent Skills.

#ETF fundamentals

GET/v1/etf/fundamentalsdata_type · etf_fundamentalsFull reference
All 11 fields of this route (from the contract)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)The balance-sheet date of the filing — the day the holdings, NAV and net assets are measured (end of the quarter for a 10-Q), at midnight UTC. `filed_date` says when the filing reached the SEC.
tickerETF ticker.
issuerETF issuer.
shares_outstandingsharesETF shares outstanding.
nav_per_share_usdUSDNet asset value per share.
net_assets_usdUSDNet assets (AUM).
formSEC form type of the filing (`10-Q`, `10-K`...).
filed_datecalendar date (YYYY-MM-DD)Filing date at the SEC.
filing_urlLink to the filing on SEC EDGAR.
holdingsunits of the asset (BTC for asset=BTC, ETH for asset=ETH)Crypto held by the fund, in units of the asset.
is_holdings_estimated`true` if the holdings are derived from net assets / price rather than read in the filing.
GET/v1/etf/fundamentals/historydata_type · etf_fundamentals_historyFull reference
All 12 fields of this route (from the contract)
timeISO 8601 UTC, milliseconds (2026-09-28T14:00:00.000Z)The balance-sheet date of the filing — the day the holdings, NAV and net assets are measured (end of the quarter for a 10-Q), at midnight UTC. `filed_date` says when the filing reached the SEC.
tickerETF ticker.
issuerETF issuer.
shares_outstandingsharesETF shares outstanding.
nav_per_share_usdUSDNet asset value per share.
net_assets_usdUSDNet assets (AUM).
formSEC form type of the filing (`10-Q`, `10-K`...).
filed_datecalendar date (YYYY-MM-DD)Filing date at the SEC.
filing_urlLink to the filing on SEC EDGAR.
holdingsunits of the asset (BTC for asset=BTC, ETH for asset=ETH)Crypto held by the fund, in units of the asset.
is_holdings_estimated`true` if the holdings are derived from net assets / price rather than read in the filing.
is_closed`true` = the row is final; `false` = provisional: the latest bucket while it still settles (a few seconds after its end, e.g. a candle whose volumes are not final yet), or the period in progress with `?live=1` on the routes that take it. Exception, rare: when a venue delivers trades LATE (seconds to minutes, e.g. during a burst), a closed row built from trades (trade candles, candle volumes, CVD, buy/sell ratio, trades per second) is corrected afterwards to include them, usually within minutes and at most one hour later; the correction only adds the late trades.

The official anchor filed by the issuers: number of shares, net asset value, crypto held and net assets, per issuer. Ten Bitcoin issuers and nine Ethereum issuers are tracked.

The family has two parts, chosen with ?asset=, which is required: BTC serves the ten Bitcoin ETFs; ETH serves the nine Ethereum ETFs. The holdings are in holdings on both, in units of the asset of the part.

ParameterTypeDefaultDescription
assetstringrequiredBTC or ETH. Required: without it, or with any other value, 422 with the accepted values.
tickerstring—On the history: a single issuer, by its ticker (IBIT, for example).
since_ms / until_msinteger—On the history: bounds on the balance-sheet date (time), in milliseconds.
limitinteger100On the history, from 1 to 1000.
curl
# The nine Ethereum ETFs (?asset= is required: BTC or ETH)
curl -H "X-API-KEY: $BYTNODE_API_KEY" \
  "https://api.bytnode.com/v1/etf/fundamentals?asset=ETH"

# The filing history of a single issuer
curl -H "X-API-KEY: $BYTNODE_API_KEY" \
  "https://api.bytnode.com/v1/etf/fundamentals/history?asset=BTC&ticker=IBIT&limit=8"
FieldTypeDescription
tickerstringThe ticker of the ETF.
issuerstringThe issuer.
timestringThe balance-sheet date of the filing (the date the holdings are stated at), at midnight UTC — the end of the reporting period when the filing gives no balance-sheet date. Bounds, pages and sort order all use this instant.
shares_outstandingfloatNumber of shares outstanding.
nav_per_share_usdfloatNet asset value per share, in dollars.
net_assets_usdfloatNet assets, in dollars.
holdingsfloat | nullQuantity of the asset held, in BTC on the Bitcoin part, in ETH on the Ethereum part.
is_holdings_estimatedbooleantrue when the holdings are an estimate rather than the filed figure.
form, filed_date, filing_urlstringThe form filed, its filing date and the link to the original document.