# ETF Flows (`catalysts_etf_flows`)

> Daily spot-ETF net flows for BTC, ETH, SOL and XRP — the latest day, the per-fund breakdown, and the trailing trend it has to be read against.

- Category: Events & catalysts
- MCP tool: `catalysts_etf_flows`
- REST: `GET /catalysts/etf-flows`
- MCP App: hosts that support MCP Apps render the result as an interactive view
- x402 price: $0.01 per call (USDC on Base)
- HTML: https://www.f1ow.com/docs/tools/catalysts_etf_flows

## What it does

Recent daily spot-ETF net flows (USD) for an underlying asset (BTC, ETH, SOL, XRP; defaults to BTC): latest day total, per-fund breakdown, and the trailing daily trend. Positive means net inflows. Flows settle behind spot and skip weekends, so the latest row is routinely a day or more old — its age is reported next to the date, and the price it carries is the price on THAT date, not spot. 'symbol' is accepted as an alias for 'asset'.

## Parameters

| Name | Type | In | Required | Description |
| --- | --- | --- | --- | --- |
| `asset` | string | query | no | Underlying asset symbol, e.g. "BTC" or "ETH". Defaults to BTC. |
| `symbol` | string | query | no | Alias for 'asset'. |

## Call it

### cURL

```bash
curl "https://mcp.f1ow.com/v1/catalysts/etf-flows?asset=BTC" \
  -H "Authorization: Bearer $F1OW_API_KEY"
```

### MCP

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "catalysts_etf_flows",
    "arguments": {
      "asset": "BTC"
    }
  }
}
```

### TypeScript

```ts
const res = await fetch("https://mcp.f1ow.com/v1/catalysts/etf-flows?asset=BTC", {
  headers: { Authorization: `Bearer ${process.env.F1OW_API_KEY}` },
});
const data = await res.json(); // the tool's result as JSON, typed in the OpenAPI spec
console.log(data);
```

### Python

```python
import os, requests

res = requests.get(
    "https://mcp.f1ow.com/v1/catalysts/etf-flows?asset=BTC",
    headers={"Authorization": f"Bearer {os.environ['F1OW_API_KEY']}"},
)
data = res.json()  # the tool's result as JSON, typed in the OpenAPI spec
print(data)
```

### WebSocket

```jsonc
// wss://mcp.f1ow.com/v1/ws — subprotocol "jsonrpc-2.0", Authorization: Bearer <key>
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "catalysts_etf_flows",
    "arguments": {
      "asset": "BTC"
    }
  }
}

// Or push a fresh result whenever it changes (minimum interval 15 s)
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "subscriptions/subscribe",
  "params": {
    "name": "catalysts_etf_flows",
    "arguments": {
      "asset": "BTC"
    },
    "intervalSeconds": 60
  }
}
```

### x402

```bash
# No account: the first call answers 402 with a PAYMENT-REQUIRED challenge;
# an x402 client pays it in USDC on Base and retries.
curl "https://mcp.f1ow.com/x402/v1/catalysts/etf-flows?asset=BTC"
```

## Sample response

Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed):

```json
{
  "asset": "BTC",
  "days": [
    {
      "byTicker": [
        {
          "flowUsd": 0,
          "ticker": "IBIT"
        },
        {
          "flowUsd": 0,
          "ticker": "FBTC"
        },
        {
          "flowUsd": -26400000,
          "ticker": "BITB"
        },
        {
          "flowUsd": -18500000,
          "ticker": "ARKB"
        },
        {
          "flowUsd": 0,
          "ticker": "BTCO"
        },
        {
          "flowUsd": 0,
          "ticker": "EZBC"
        },
        "… 6 more"
      ],
      "date": "2026-11-12",
      "dateMs": 1794441600000,
      "netFlowUsd": -47700000,
      "priceUsd": 73979.9
    },
    {
      "byTicker": [
        {
          "flowUsd": -269700000,
          "ticker": "IBIT"
        },
        {
          "flowUsd": 0,
          "ticker": "FBTC"
        },
        {
          "flowUsd": 0,
          "ticker": "BITB"
        },
        {
          "flowUsd": 0,
          "ticker": "ARKB"
        },
        {
          "flowUsd": 0,
          "ticker": "BTCO"
        },
        {
          "flowUsd": 0,
          "ticker": "EZBC"
        },
        "… 6 more"
      ],
      "date": "2026-11-11",
      "dateMs": 1794355200000,
      "netFlowUsd": -299800000,
      "priceUsd": 73762.9
    },
    {
      "byTicker": [
        {
          "flowUsd": -78200000,
          "ticker": "IBIT"
        },
        {
          "flowUsd": -36800000,
          "ticker": "FBTC"
        },
        {
          "flowUsd": 0,
          "ticker": "BITB"
        },
        {
          "flowUsd": 0,
          "ticker": "ARKB"
        },
        {
          "flowUsd": 0,
          "ticker": "BTCO"
        },
        {
          "flowUsd": 0,
          "ticker": "EZBC"
        },
        "… 6 more"
      ],
      "date": "2026-11-10",
      "dateMs": 1794268800000,
      "netFlowUsd": -95000000,
      "priceUsd": 75327.1
    },
    {
      "byTicker": [
        {
          "flowUsd": -213200000,
          "ticker": "IBIT"
        },
        {
          "flowUsd": 0,
          "ticker": "FBTC"
        },
        {
          "flowUsd": 0,
          "ticker": "BITB"
        },
        {
          "flowUsd": -9900000,
          "ticker": "ARKB"
        },
        {
          "flowUsd": 0,
          "ticker": "BTCO"
        },
        {
          "flowUsd": 0,
          "ticker": "EZBC"
        },
        "… 6 more"
      ],
      "date": "2026-11-09",
      "dateMs": 1794182400000,
      "netFlowUsd": -201000000,
      "priceUsd": 74823.4
    },
    {
      "byTicker": [
        {
          "flowUsd": -403000000,
          "ticker": "IBIT"
        },
        {
          "flowUsd": 42800000,
          "ticker": "FBTC"
        },
        {
          "flowUsd": -20500000,
          "ticker": "BITB"
        },
        {
          "flowUsd": -20100000,
          "ticker": "ARKB"
        },
        {
          "flowUsd": 0,
          "ticker": "BTCO"
        },
        {
          "flowUsd": 0,
          "ticker": "EZBC"
        },
        "… 6 more"
      ],
      "date": "2026-11-06",
      "dateMs": 1793923200000,
      "netFlowUsd": -411900000,
      "priceUsd": 76050
    },
    {
      "byTicker": [
        {
          "flowUsd": -105000000,
          "ticker": "IBIT"
        },
        {
          "flowUsd": -199900000,
          "ticker": "FBTC"
        },
        {
          "flowUsd": 0,
          "ticker": "BITB"
        },
        {
          "flowUsd": -18900000,
          "ticker": "ARKB"
        },
        {
          "flowUsd": 0,
          "ticker": "BTCO"
        },
        {
          "flowUsd": -32900000,
          "ticker": "EZBC"
        },
        "… 6 more"
      ],
      "date": "2026-11-05",
      "dateMs": 1793836800000,
      "netFlowUsd": -430200000,
      "priceUsd": 80466.4
    },
    "… 24 more"
  ],
  "generatedAt": "2026-11-12T00:00:00.0000000+00:00"
}
```

Over MCP the text report a model reads comes with it:

```text
BTC ETF flows — latest 2026-11-12 (32.1h old)
  net -47.7M | price $73980
  recent daily (newest first): -47.7M, -299.8M, -95.0M, -201.0M, -411.9M, -430.2M, +74.6M
  top funds: BITB -26.4M, ARKB -18.5M, HODL -6.1M, MSBT +3.3M, IBIT +0.0M
```

## Related tools

- [Prediction Odds](https://www.f1ow.com/docs/tools/events_prediction_odds) — What real money says about a question: per-outcome probabilities, the volume standing behind them, and when the market resolves.
- [Crypto Calendar](https://www.f1ow.com/docs/tools/catalysts_calendar) — Crypto events landing inside the next seven days, filterable to a single coin when only its own catalysts matter.
- [Macro Calendar](https://www.f1ow.com/docs/tools/catalysts_economic_calendar) — CPI, FOMC, jobs and GDP — the macro releases that move crypto anyway — from two days back to a week ahead, filtered by importance.
- [Exchange Listings](https://www.f1ow.com/docs/tools/catalysts_exchange_listings) — Official venue notices for new listings, delistings and other trading changes, with scheduled times, recent history, and coin or venue filters.
