/api/v1/etf/{asset}Hobbyist tier+ · 30 req/minUnified ETF summary — accepts bitcoin|ethereum|btc|eth in one route.
Mirrors the shape of `/api/v1/etf/bitcoin` and `/api/v1/etf/ethereum` but takes the asset as a path segment, so a single client implementation can serve both. Case-insensitive — `bitcoin`, `BTC`, `btc`, and `Bitcoin` all resolve the same. The legacy static routes remain for backwards compatibility; prefer this dynamic route for new integrations.
Path parameters
Segments of the URL path, validated server-side.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| asset | enum | required | — | Which ETF cohort to return. Canonicalised to BTC or ETH server-side. bitcoinethereumbtceth |
Query parameters
All query parameters are optional unless marked required.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| days | number | optional | 30 | Trailing window of daily flow rows. Max 365. |
Response shape
Always wrapped in the standard envelope. Nullable fields are explicitly marked — treat missing numeric data as a real data-source gap, not as an error.
// Wrapped in the standard envelope:
// {
// data: /* shape below */,
// meta?: { total?: number; limit?: number; offset?: number; ... }
// }
{
asset: "BTC" | "ETH";
flows: Array<{ date: string; tickerFlows: Record<string, number>; total: number }>;
cumulative: number;
rolling7d: number;
biggestInflow: { date: string; totalUsdM: number } | null;
biggestOutflow: { date: string; totalUsdM: number } | null;
topIssuers: Array<{ ticker: string; cumulativeUsdM: number; share: number }>;
}Example
Copy the curl, replace YOUR_KEY with a real key from your dashboard, and run.
curl -sS "http://localhost:3000/api/v1/etf/btc?days=30" \
-H "Authorization: Bearer cg_live_YOUR_KEY"{
"data": {
"asset": "BTC",
"flows": [
{
"date": "2026-04-17",
"tickerFlows": { "IBIT": 112.4, "FBTC": 64.2 },
"total": 176.6
}
],
"cumulative": 43210.55,
"rolling7d": 920.12,
"biggestInflow": { "date": "2026-03-05", "totalUsdM": 1045.3 },
"biggestOutflow": { "date": "2026-02-19", "totalUsdM": -385.7 },
"topIssuers": [
{ "ticker": "IBIT", "cumulativeUsdM": 24100.0, "share": 0.56 }
]
},
"meta": { "total": 1, "days": 30, "asset": "BTC" }
}Notes
- Invalid `asset` returns 404 `UNKNOWN_ASSET`. Use `bitcoin|ethereum|btc|eth`.
- Back-compat: the static `/api/v1/etf/bitcoin` and `/api/v1/etf/ethereum` routes still work.
Next
Check the error code reference, or get an API key to try the request against your own account.