Crypto ETF Flows API
Daily net inflows and outflows of US spot Bitcoin, Ethereum, Solana, XRP and twelve more crypto ETF complexes, as JSON, for each asset and for every fund behind it. Plus CEFI, the crypto ETF sentiment index, coin prices and weekly totals. One free key, no card.
Base URL https://api.cryptoetf.today/api/v1curl https://api.cryptoetf.today/api/v1/flows/summary \
-H "Authorization: Bearer $CRYPTOETF_KEY"{
"assets": [
{ "symbol": "BTC", "asset": "bitcoin",
"date": "2026-10-16", "netFlowUsdM": -82.4 },
{ "symbol": "ETH", "asset": "ethereum",
"date": "2026-10-16", "netFlowUsdM": -69.7 },
{ "symbol": "SOL", "asset": "solana",
"date": "2026-10-16", "netFlowUsdM": -12.7 },
… 13 more
],
"updatedAt": "2026-10-19T20:24:50Z"
}Your first request in three steps
Get a free API key
Sign in and open your profile. The key (cetf_live_…) is created there. No card, no plan.
Send it in a header
Either header works:
Authorization: Bearer <key> X-API-Key: <key>
Read the JSON
Flows are net, in US$ millions, rounded to 0.1. Positive is an inflow. Every row carries its UTC date; series run oldest → newest.
Endpoints
8 read-only GET endpoints. Open one to see a real response.
GET/v1/flows/summaryLatest net flow for every one of the 16 assets in one call.Response ▾
{
"assets": [
{ "symbol": "BTC", "asset": "bitcoin",
"date": "2026-10-16", "netFlowUsdM": -82.4 },
{ "symbol": "ETH", "asset": "ethereum",
"date": "2026-10-16", "netFlowUsdM": -69.7 },
{ "symbol": "SOL", "asset": "solana",
"date": "2026-10-16", "netFlowUsdM": -12.7 },
… 13 more
],
"updatedAt": "2026-10-19T20:24:50Z"
}GET/v1/flows/{asset}Daily net flows for one asset, last 30 days, oldest → newest.Response ▾
{
"symbol": "BTC",
"asset": "bitcoin",
"windowDays": 30,
"days": [
…,
{"date": "2026-10-15", "netFlowUsdM": 5},
{"date": "2026-10-16", "netFlowUsdM": -82.4}
],
"updatedAt": "2026-10-19T20:24:50Z"
}GET/v1/flows/{asset}/fundsThe same 30 days for one asset, fund by fund: IBIT, FBTC, ETHA and the rest.Response ▾
{
"symbol": "BTC",
"asset": "bitcoin",
"windowDays": 30,
"days": [
…,
{ "date": "2026-10-16", "totalUsdM": -82.4,
"funds": [
{"ticker": "IBIT", "issuer": "BlackRock", "netFlowUsdM": -71.8},
{"ticker": "FBTC", "issuer": "Fidelity", "netFlowUsdM": -10.6},
…
] }
],
"updatedAt": "2026-10-19T20:24:50Z"
}GET/v1/fundsEvery fund with its issuer, fee and listing date, plus current net assets (AUM) and coins held.Response ▾
{
"assets": [
{"symbol": "BTC", "asset": "bitcoin", "totalNetAssetsUsdM": 104443.3, "date": "2026-10-16"}
],
"funds": [
{ "ticker": "IBIT", "name": "iShares Bitcoin Trust ETF",
"issuer": "BlackRock", "sponsorFeePct": 0.25,
"netAssetsUsdM": 65340.6, "coinsHeld": 802987.6066, "netAssetsDate": "2026-10-16", … },
…
],
"updatedAt": "2026-10-19T20:24:50Z"
}GET/v1/index/cefiCEFI, the 0–100 Crypto ETF Flow Index, with flow, trend and breadth.Response ▾
{
"index": "CEFI-Composite",
"current": 34,
"date": "2026-10-16",
"components": {"flow": 32, "trend": 64, "breadth": 7},
"windowDays": 30,
"history": [ { "date": "…", "value": … }, … ]
}GET/v1/pricesSpot price and 24-hour change for all 16 coins.Response ▾
{
"prices": [
{ "symbol": "BTC", "priceUsd": …, "change24hPct": … },
…
],
"updatedAt": "…"
}GET/v1/analytics/weeklySeven-day totals per asset: net flow, average day, up and down days.Response ▾
{
"from": "2026-10-13", "to": "2026-10-19",
"assets": [
{"symbol": "BTC", "asset": "bitcoin", "netFlowUsdM": -163.2, "avgDailyUsdM": -40.8, "positiveDays": 2, "negativeDays": 2},
…
]
}GET/v1/tickersDirectory of the 16 tracked assets: symbol, id and name.Response ▾
[
{ "symbol": "BTC", "asset": "bitcoin", "name": "Bitcoin" },
{ "symbol": "ETH", "asset": "ethereum", "name": "Ethereum" },
…
]One endpoint per asset
Every US spot crypto ETF complex has its own series at /v1/flows/{asset}. Full names work too: bitcoin, dogecoin, avalanche.
Bitcoin ETF flows API
GET /v1/flows/btcFri 16 Oct−$82.4M
Ethereum ETF flows API
GET /v1/flows/ethFri 16 Oct−$69.7M
Solana ETF flows API
GET /v1/flows/solFri 16 Oct−$12.7M
XRP ETF flows API
GET /v1/flows/xrpFri 16 Oct−$2.5M
Hyperliquid ETF flows API
GET /v1/flows/hypFri 16 Octno flow
Chainlink ETF flows API
GET /v1/flows/linkFri 16 Oct−$0.4M
Hedera ETF flows API
GET /v1/flows/hbarFri 16 Oct−$0.6M
Avalanche ETF flows API
GET /v1/flows/avaxFri 16 Octno flow
Dogecoin ETF flows API
GET /v1/flows/dogeFri 16 Octno flow
Litecoin ETF flows API
GET /v1/flows/ltcFri 16 Octno flow
Sui ETF flows API
GET /v1/flows/suiFri 16 Octno flow
Polkadot ETF flows API
GET /v1/flows/dotFri 16 Octno flow
BNB ETF flows API
GET /v1/flows/bnbFri 16 Octno flow
NEAR ETF flows API
GET /v1/flows/nearFri 16 Oct+$2.6M
Tron ETF flows API
GET /v1/flows/trxFri 16 Octno flow
Zcash ETF flows API
GET /v1/flows/zecFri 16 Oct−$1.2MLatest day from /v1/flows/summary, US$ millions. Each card opens the asset’s flow page with fund-by-fund tables.
Crypto ETF sentiment index API
CEFI, the Crypto ETF Flow Index, turns the whole market’s ETF flows into one number from 0 to 100. Every trading day it adds up the net flows of all spot ETFs on the 16 assets, in dollars, and scores three parts against the past year.
Zero flow scores 50. A typical inflow day scores about 69, a typical outflow day about 31. One composite index, no per-asset variants. The response carries 30 days of history.
"current": 34A chart in eight lines
Bitcoin ETF flows for the last 20 trading days, drawn from one call to /v1/flows/btc.
import os, requests
import matplotlib.pyplot as plt
r = requests.get("https://api.cryptoetf.today/api/v1/flows/btc",
headers={"X-API-Key": os.environ["CRYPTOETF_KEY"]})
days = [d for d in r.json()["days"] if d["netFlowUsdM"] != 0]
plt.bar([d["date"] for d in days], [d["netFlowUsdM"] for d in days])
plt.show()Bitcoin, Ether, Solana, XRP and Hyperliquid list every calendar day with weekends as 0; the other assets list trading days only.
What developers build with it
Dashboards and charts
Daily flows next to price, a 30-day bar chart per asset, a market-wide total.
Morning bots
A Telegram, Discord or Slack post when yesterday’s numbers land, before the US open.
Newsletters and notes
A weekly ranking of assets with totals, average day and up/down days.
AI agents
Claude, Cursor or your own agent reads the same data through the MCP server, no key.
Three ways in, all free
Same numbers everywhere, the same 30-day window.
REST API
free key- Auth
- Bearer · X-API-Key
- Limit
- 120 / min / key
- Over limit
429+ Retry-After- For
- apps, bots, scripts
MCP server
no key- Transport
- Streamable HTTP
- Limit
- 60 / min / IP
- Tools
- 7, read-only
- For
- Claude, Cursor, agents
Embed widget
no key- Format
- HTML iframe, 360 or 600 px
- Updates
- every morning
- Themes
- light, dark, auto
- For
- blogs and sites
Embed a widget
The latest day’s flow on your site or blog. Updates itself every morning; no key needed.
About the data
What the numbers are, before you build on them.
Developer resources
docs.cryptoetf.todayEvery endpoint, parameter and error, with try-it.OpenAPI 3 spec ↗api.cryptoetf.today/v1/openapi.jsonGenerate a client in any language.Status ↗status.cryptoetf.todayREST, MCP and the daily publish, live.MCP servermcp.cryptoetf.today/api/mcpSeven read-only tools for AI assistants.npm package ↗@zerosix-studio/cryptoetf-mcpBridge for stdio-only MCP clients.GitHub ↗zerosix-studio/cryptoetf-mcpSource of the bridge, MIT.Crypto ETF API — FAQ
Questions about keys, limits and data freshness. Anything else — Support
Is there a free Bitcoin ETF flows API?
Yes. The API is free with a key from your profile: no card, no paid plan. It covers Bitcoin and 15 more spot crypto ETF complexes.
Which assets are covered?
Bitcoin, Ethereum, Solana, XRP, Hyperliquid, Dogecoin, Chainlink, Avalanche, Hedera, Litecoin, BNB, Polkadot, Sui, NEAR, Tron and Zcash — every US-listed spot crypto ETF complex.
Does the API return per-fund flows, like IBIT or FBTC?
Yes. /v1/flows/{asset}/funds returns the daily net flow of every fund on an asset, such as IBIT, FBTC or ETHA, for the same last 30 days. Longer fund-by-fund history is on the asset pages of the site, for example Bitcoin ETF flows.
Can I get the AUM of each crypto ETF?
Yes. /v1/funds lists every spot crypto ETF with its issuer, sponsor fee and listing date, its current net assets (AUM) and the coins it holds, plus the total for each asset. It is a current snapshot, not a history. Fidelity, Grayscale, Franklin Templeton, Canary and WisdomTree do not publish holdings in coins, so for their funds coinsHeld is null.
How often is the data updated?
Once per trading day. A day’s flows appear the next morning (UTC), before the US market opens. The newest day can be revised once later that day.
Is there an API for crypto ETF sentiment?
Yes: /v1/index/cefi returns CEFI, a 0–100 index built from the net flows of all spot crypto ETFs, with its flow, trend and breadth components and 30 days of history.
How much history can I get?
The last 30 days on every endpoint. Longer series are on the site’s charts.
What are the rate limits?
120 requests per minute per key. Over the limit the API returns 429 with a Retry-After header. The MCP server allows 60 requests per minute per IP, no key.
Is there an OpenAPI spec?
Yes, OpenAPI 3 at api.cryptoetf.today/v1/openapi.json. The interactive reference lives at docs.cryptoetf.today.
Can I use it from Claude or Cursor?
Yes, through the MCP server at mcp.cryptoetf.today/api/mcp. It needs no key and returns the same numbers.
Yesterday’s ETF flows, before the US open.
GET https://api.cryptoetf.today/api/v1/flows/summary