# f1ow documentation > One MCP endpoint that gives Claude, ChatGPT, Cursor or your own agent the whole crypto market — price, derivatives, options, order flow, on-chain, sentiment, news and catalysts — drawn from a multitude of sources and reconciled into one read. # Overview > Crypto market data for AI agents — one MCP server, REST API and WebSocket API with live prices, derivatives, options, order flow, on-chain, sentiment, news and catalysts. Source: https://www.f1ow.com/docs f1ow gives Claude, ChatGPT, Cursor, VS Code or your own agent the whole crypto market through **one endpoint**. Prices, perpetual derivatives, options, order flow, whale positioning, on-chain activity, sentiment, news and catalysts are drawn from many sources and reconciled into one read. That read is available as 39 tools. > New here? Start a free trial: https://www.f1ow.com/dashboard ## Three ways in - [MCP server](https://www.f1ow.com/docs/connect/claude): Point Claude, ChatGPT, Cursor or VS Code at one URL. The model discovers every tool and calls them on its own. - [REST API](https://www.f1ow.com/docs/api/rest): Every tool is a plain HTTP resource with JSON responses and an OpenAPI 3.1 spec. Bring your own code. - [WebSocket API](https://www.f1ow.com/docs/api/websocket): JSON-RPC 2.0 over a socket, with subscriptions that push only when a result changes. All three share the same tools, the same API key and the same balance. Agents without an account can [pay per call with x402](https://www.f1ow.com/docs/auth#x402). ## What you can ask - **Research & risk** (5): `research_regime`, `research_positioning`, `research_opportunities`, `research_trade_plan`, `research_token_view` - **Market data** (8): `market_quotes`, `market_candles`, `market_history`, `market_overview`, `market_top_movers`, `market_trending`, `market_coin_details`, `market_coins` - **Derivatives** (4): `derivatives_flow`, `derivatives_liquidations`, `funding_current`, `derivatives_open_interest` - **Options** (5): `options_chain`, `options_volatility`, `options_positioning`, `options_gamma`, `options_probability` - **Order flow & whales** (4): `flow_whale_positions`, `flow_orderbook`, `flow_levels`, `flow_whale_context` - **Technicals** (1): `ta_technicals` - **Sentiment** (3): `sentiment_fear_greed`, `sentiment_social`, `sentiment_twitter` - **News & filings** (2): `news_search`, `filings_search` - **Events & catalysts** (5): `catalysts_etf_flows`, `events_prediction_odds`, `catalysts_calendar`, `catalysts_economic_calendar`, `catalysts_exchange_listings` - **On-chain** (1): `onchain_metrics` - **Utilities** (1): `utc_time` The composite **research** tools assemble many reads at once: - [Market Regime](https://www.f1ow.com/docs/tools/research_regime) tells you what kind of market you are trading in. - [Positioning](https://www.f1ow.com/docs/tools/research_positioning) shows who is crowded, fragile or trapped on one coin. - [Opportunity Scan](https://www.f1ow.com/docs/tools/research_opportunities) scans liquid coins for rule-based setups. - [Trade Plan Review](https://www.f1ow.com/docs/tools/research_trade_plan) checks an entry, stop and target, sizes the position and replays a placed trade. The rest are focused building blocks: quotes, candles, funding, open interest, liquidations, order books, options chains and more. See the [tool reference](https://www.f1ow.com/docs/tools). ## Who it is for - [AI traders](https://www.f1ow.com/docs/use-cases/ai-traders): Ask Claude or ChatGPT about the market in plain English and get answers grounded in live data. - [Trading bot developers](https://www.f1ow.com/docs/use-cases/trading-bots): Feed your strategy funding, open interest, liquidations and levels from one REST or WebSocket API. - [Agent builders](https://www.f1ow.com/docs/use-cases/agent-builders): Give an autonomous agent a market-data toolset with typed schemas, pay-per-call and machine-readable discovery. ## What it is not f1ow is read-only. It observes the market and returns snapshots. It never places orders, holds funds or watches positions for you. Setup scans and trade plans are rule-based planning geometry, not personalized advice or a promise of returns. ## Machine-readable - [OpenAPI 3.1](https://mcp.f1ow.com/openapi.json) and [AsyncAPI 3.0](https://mcp.f1ow.com/asyncapi.json) specs - [MCP discovery card](https://mcp.f1ow.com/.well-known/mcp.json) and [API catalog (RFC 9727)](https://mcp.f1ow.com/.well-known/api-catalog) - Every docs page as Markdown (append `.md`), [`/llms.txt`](https://www.f1ow.com/llms.txt) and [`/llms-full.txt`](https://www.f1ow.com/llms-full.txt) --- # Get started > Sign in, get a free trial, connect your AI client or code to the f1ow crypto MCP server and make your first tool call in under a minute. Source: https://www.f1ow.com/docs/get-started ## 1. Create an account Open the [dashboard](https://www.f1ow.com/dashboard) and sign in with Google, X, GitHub, Telegram, a passkey or MetaMask. A new account starts a free trial straight away: **7 days and 500 tool calls**, whichever runs out first. No card is required. ## 2. Pick how you connect | You use | Connect with | Guide | | --- | --- | --- | | Claude (web, desktop) | OAuth, one click | [Claude](https://www.f1ow.com/docs/connect/claude) | | ChatGPT | API key header | [ChatGPT](https://www.f1ow.com/docs/connect/chatgpt) | | Cursor | API key in `mcp.json` | [Cursor](https://www.f1ow.com/docs/connect/cursor) | | VS Code / GitHub Copilot | API key in `mcp.json` | [VS Code](https://www.f1ow.com/docs/connect/vscode) | | Your own code or agent | MCP, REST or WebSocket | [Custom agents](https://www.f1ow.com/docs/connect/custom-agent) | | An agent with a wallet, no account | x402 pay-per-call | [Authentication](https://www.f1ow.com/docs/auth#x402) | For Claude, select [Add to Claude](https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=f1ow&connectorUrl=https%3A%2F%2Fmcp.f1ow.com%2Fmcp) to open a prefilled connector form; see the [Claude guide](https://www.f1ow.com/docs/connect/claude) for the manual fallback. Claude runs the OAuth sign-in for you. Everything else takes an **API key**: create one in the dashboard under *API keys*. The key is shown once, so copy it somewhere safe. ## 3. Make your first call In Claude or ChatGPT, just ask: > What is the market regime right now, and who is crowded on BTC? The model picks [Market Regime](https://www.f1ow.com/docs/tools/research_regime) and [Positioning](https://www.f1ow.com/docs/tools/research_positioning) on its own. From code, call the REST API with your key: ```bash curl "https://mcp.f1ow.com/v1/research/regime" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` Every response carries `text`, the report written for a model to read. Most tools also return `data` with the same result as JSON, and `meta.generatedAt` tells you how fresh it is. ## 4. Keep going When the trial ends, $49 buys 30 days and 12,500 calls. You can pay by USDC or USDT on Base, Arbitrum, Polygon or Ethereum. See [pricing & limits](https://www.f1ow.com/docs/pricing-limits). - [Browse the tools](https://www.f1ow.com/docs/tools): All 39 tools with parameters, examples and real sample responses. - [Use cases](https://www.f1ow.com/docs/use-cases/ai-traders): Prompts and workflows for traders, bot developers and agent builders. --- # Connect Claude > Add f1ow to Claude as a custom MCP connector with OAuth — no API key, no JSON — and ask about the crypto market in plain English. Source: https://www.f1ow.com/docs/connect/claude Claude connects to f1ow over **OAuth**: add the connector, sign in, and approve. Claude registers itself and handles tokens. There is no key to copy. ## Add the connector 1. Select [Add to Claude](https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=f1ow&connectorUrl=https%3A%2F%2Fmcp.f1ow.com%2Fmcp) to open Claude with the connector name and URL prefilled. Sign in to Claude if prompted. 2. Confirm the connector in Claude, then sign in to f1ow and click **Allow**. 3. In a chat, enable the f1ow connector from the tools menu. If the link does not open the prefilled form, add it manually in Claude under **Settings → Connectors → Add → Add custom connector** using these fields: | Field | Value | | --- | --- | | Name | `f1ow` | | URL | `https://mcp.f1ow.com/mcp` | Leave the OAuth client ID and secret empty; Claude registers itself. Then sign in to f1ow, approve the connection, and enable the connector in a chat. The connector works with Claude on the web and on desktop. A connector added once follows your account. ## Claude Code Install f1ow as a plugin so the connector arrives pre-configured: ```bash claude plugin marketplace add https://www.f1ow.com/marketplace.json claude plugin install f1ow@f1ow-connectors ``` Then run `/mcp`, choose f1ow and authenticate. It runs the same sign-in and consent as above. ## Try it > Scan the majors for setups and check the best one with a trade plan: risk 1% of a $10,000 account. > Who is crowded on ETH right now, and where are the liquidation clusters? > What changed in BTC options positioning since yesterday? Where is max pain for Friday's expiry? Claude chains [Opportunity Scan](https://www.f1ow.com/docs/tools/research_opportunities), [Positioning](https://www.f1ow.com/docs/tools/research_positioning), [Perp Price Levels](https://www.f1ow.com/docs/tools/flow_levels) and [Trade Plan Review](https://www.f1ow.com/docs/tools/research_trade_plan) on its own. Hosts that support MCP Apps also render interactive views, such as the trade ticket and levels charts. ## Disconnect Remove the connector in Claude, or revoke it from the f1ow dashboard under *Connected apps*. Revoking ends Claude's access immediately. --- # Connect ChatGPT > Add the f1ow crypto market MCP server to ChatGPT with your API key and give it live prices, derivatives, options and on-chain data. Source: https://www.f1ow.com/docs/connect/chatgpt ChatGPT connects to f1ow as an MCP server with your API key in a request header. ## Add the MCP server 1. Create an API key in the [dashboard](https://www.f1ow.com/dashboard) (*API keys → Create*). Copy it; it is shown once. 2. In ChatGPT, open **Settings → Plugins → MCPs → Add → Add MCP server**. 3. Fill in the fields below, putting your key in place of ``. | Field | Value | | --- | --- | | Name | `f1ow` | | URL | `https://mcp.f1ow.com` | | Header key | `Authorization` | | Header value | `Bearer ` | 4. Save, then enable f1ow in a new chat. ChatGPT also supports OAuth connectors. Point one at https://mcp.f1ow.com/mcp to sign in instead of pasting a key. ## Try it > Give me a full dossier on SOL: market data, technicals, on-chain, catalysts and social. > Is funding on BTC stretched versus its own year? Show the percentile. > What are the odds BTC settles above $80,000 at the next options expiry? ## Keep your key safe Anyone holding the key can spend its calls. If it leaks, delete it in the dashboard and create a new one. Each key has its own usage history, so use one key per client. > Get your API key: https://www.f1ow.com/dashboard --- # Connect Cursor > Add the f1ow MCP server to Cursor with one mcp.json entry and query live crypto market data from the editor's agent. Source: https://www.f1ow.com/docs/connect/cursor Cursor reads MCP servers from `mcp.json`. Add f1ow with your API key. ## Configure 1. Create an API key in the [dashboard](https://www.f1ow.com/dashboard). 2. Open **.cursor/mcp.json — or your user-level mcp.json**. 3. Add the f1ow entry below, replacing ``. `~/.cursor/mcp.json`: ```json { "mcpServers": { "f1ow": { "url": "https://mcp.f1ow.com/", "type": "http", "headers": { "Authorization": "Bearer " } } } } ``` Already have an `mcpServers` object? Copy just the inner `f1ow` entry into it. 4. Open Cursor's MCP settings and check that f1ow is enabled and lists its tools. ## Try it Ask the agent while you build: > Pull 4h perp candles for BTC for the last week and the funding history, then write a backtest that goes long when funding is negative. > What does the order book for ETH look like, and how much would a $100k market buy cost? The agent can call the tools, then use the structured `data` to write and check code against real numbers. > Get your API key: https://www.f1ow.com/dashboard --- # Connect VS Code > Use f1ow's crypto market data tools from GitHub Copilot agent mode in VS Code with a workspace mcp.json. Source: https://www.f1ow.com/docs/connect/vscode VS Code's GitHub Copilot agent mode reads MCP servers from `.vscode/mcp.json`. It uses a top-level `servers` object, not `mcpServers`. ## Configure 1. Create an API key in the [dashboard](https://www.f1ow.com/dashboard). 2. Create or open **mcp.json in your workspace**. 3. Add the entry below, replacing ``. `.vscode/mcp.json`: ```json { "servers": { "f1ow": { "url": "https://mcp.f1ow.com/", "type": "http", "headers": { "Authorization": "Bearer " } } } } ``` Already have a `servers` object? Copy just the inner `f1ow` entry into it. 4. In the Copilot chat, switch to **Agent** mode and open the tools picker. The f1ow tools appear under the server name. > **Don't commit your key** A workspace `mcp.json` is often committed. Keep the key out of git, either with a user-level MCP configuration or with VS Code's input variables. ## Try it > Using f1ow, chart the last 30 days of BTC open interest against price and explain the divergence. > Check my trade plan: long ETH at 2,200, stop 2,120, target 2,450, 1% risk on a $25k account. > Get your API key: https://www.f1ow.com/dashboard --- # Custom agents & MCP clients > Connect any MCP client or your own agent to f1ow over Streamable HTTP, by OAuth, API key, key-in-path or x402 pay-per-call. Source: https://www.f1ow.com/docs/connect/custom-agent f1ow is a remote MCP server over **Streamable HTTP**. Any client that speaks MCP can connect. Pick the endpoint for your authentication method: | Endpoint | URL | | --- | --- | | MCP · OAuth | `https://mcp.f1ow.com/mcp` | | MCP · Bearer | `https://mcp.f1ow.com` | | MCP · x402 | `https://mcp.f1ow.com/x402` | | MCP · Key in path | `https://mcp.f1ow.com/key/` | - **OAuth**: for clients that run the MCP authorization flow (discovery, dynamic client registration, PKCE). See [authentication](https://www.f1ow.com/docs/auth#oauth). - **Bearer**: send `Authorization: Bearer `. - **Key in path**: for clients that cannot set headers. Treat the URL as a secret. - **x402**: no account. The agent pays per call in USDC on Base. See [x402](https://www.f1ow.com/docs/auth#x402). ## The protocol in three requests ```bash # 1. initialize curl -s https://mcp.f1ow.com/ \ -H "Authorization: Bearer $F1OW_API_KEY" \ -H "Content-Type: application/json" \ -H "Accept: application/json, text/event-stream" \ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"my-agent","version":"1.0"}}}' # 2. list the tools (names, descriptions, JSON input schemas) # -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' # 3. call one # -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"funding_current","arguments":{"symbol":"BTC"}}}' ``` Send `notifications/initialized` after `initialize`, and echo the `Mcp-Session-Id` response header on later requests if the server sends one. The server may answer with JSON or a short `text/event-stream`, so accept both. MCP SDKs handle all of this for you. ## With an SDK ```ts import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"; const client = new Client({ name: "my-agent", version: "1.0.0" }); await client.connect( new StreamableHTTPClientTransport(new URL("https://mcp.f1ow.com/"), { requestInit: { headers: { Authorization: `Bearer ${process.env.F1OW_API_KEY}` } }, }), ); const { tools } = await client.listTools(); const result = await client.callTool({ name: "research_regime", arguments: {} }); console.log(result.structuredContent ?? result.content); ``` ## Reading results A `tools/call` result has: - `content`: a text report written for a model to read. Pass it to your LLM as is. - `structuredContent`: the same result as JSON, typed by the tool's output schema. REST and WebSocket return just this object. - `_meta`: for example, the view an MCP Apps host can render. Results are snapshots. Check `generatedAt` and the coverage notes before acting on them, and call again, or [subscribe over WebSocket](https://www.f1ow.com/docs/api/websocket), for fresh data. ## Discovery Agents can find everything without reading this page: - MCP discovery card: [`/.well-known/mcp.json`](https://mcp.f1ow.com/.well-known/mcp.json) - API catalog (RFC 9727): [`/.well-known/api-catalog`](https://mcp.f1ow.com/.well-known/api-catalog) - OAuth protected-resource metadata (RFC 9728): [`/.well-known/oauth-protected-resource`](https://mcp.f1ow.com/.well-known/oauth-protected-resource) - Official MCP Registry entry: `com.f1ow/f1ow` > Get an API key for your agent: https://www.f1ow.com/dashboard --- # Authentication > How to authenticate to the f1ow MCP server and API — OAuth 2.1 for Claude and ChatGPT, API keys for code and editors, and x402 pay-per-call for autonomous agents. Source: https://www.f1ow.com/docs/auth Every tool is reachable four ways. Pick the one that fits your client: | Method | Best for | Account | | --- | --- | --- | | [OAuth 2.1](#oauth) | Claude, ChatGPT, MCP clients with a sign-in flow | yes | | [API key](#api-keys) | Cursor, VS Code, your own code, bots | yes | | [Key in path](#key-in-path) | Clients that cannot send headers | yes | | [x402](#x402) | Autonomous agents with a wallet | no | OAuth and API keys draw on the same account, subscription and call balance. ## OAuth f1ow is an OAuth 2.1 authorization server for the MCP endpoint https://mcp.f1ow.com/mcp. A client that supports MCP authorization needs only that URL. It will: 1. receive a `401` with protected-resource metadata (RFC 9728) pointing at `https://www.f1ow.com`, 2. read the authorization-server metadata (RFC 8414) and register itself (dynamic client registration, RFC 7591), 3. send you through sign-in and consent (authorization code with PKCE S256), 4. receive a short-lived access token and a rotating refresh token. You sign in with any method the site supports. Every token maps to the same account. Revoke a client at any time under *Connected apps* in the dashboard. | Metadata | URL | | --- | --- | | Protected resource | `https://mcp.f1ow.com/.well-known/oauth-protected-resource` | | Authorization server | `https://www.f1ow.com/.well-known/oauth-authorization-server` | | JWKS | `https://www.f1ow.com/.well-known/jwks.json` | ## API keys Create keys in the [dashboard](https://www.f1ow.com/dashboard). A key is shown **once**; only a hash is stored. Send it as a bearer token: ```http Authorization: Bearer ``` The same header works on the MCP endpoint https://mcp.f1ow.com/, the [REST API](https://www.f1ow.com/docs/api/rest) and the [WebSocket](https://www.f1ow.com/docs/api/websocket) handshake. An OAuth access token works in its place on all three. Use one key per client or bot, so each has its own usage history and you can revoke one without touching the others. ## Key in path Some clients can only take a URL. Put the key in the path instead: ```text https://mcp.f1ow.com/key/ MCP https://mcp.f1ow.com/key//v1 REST wss://mcp.f1ow.com/key//v1/ws WebSocket ``` The URL is now a credential. Don't paste it anywhere you wouldn't paste the key. ## x402 [x402](https://www.x402.org) lets an agent pay per call over HTTP, with no account, key or subscription. f1ow accepts **USDC on Base**. The payment exchange depends on the transport: - **REST:** call a priced resource under `https://mcp.f1ow.com/x402/v1`. The server answers HTTP `402 Payment Required` with a base64 `PAYMENT-REQUIRED` header describing the price, asset and pay-to address. Sign the payment and retry with a `PAYMENT-SIGNATURE` header. A successful paid response includes a base64 `PAYMENT-RESPONSE` receipt header. - **MCP:** call a priced tool at https://mcp.f1ow.com/x402. The server answers HTTP `200` with a JSON-RPC tool result whose `isError` is `true`; the payment challenge is in `structuredContent` and JSON text in `content`. Sign the payment and retry the tool call with the payment object in `params._meta["x402/payment"]`. A successful paid result carries its receipt in `result._meta["x402/payment-response"]`. The MCP endpoint also supports the same payment headers as REST. The server runs the tool before settling and does not settle a failed tool call. Use an x402 client that supports your chosen transport to automate the exchange. Prices per call: | Tool | Price per call | | --- | --- | | [UTC Anchor](https://www.f1ow.com/docs/tools/utc_time) `utc_time` | free | | [Fear & Greed](https://www.f1ow.com/docs/tools/sentiment_fear_greed) `sentiment_fear_greed` | $0.005 | | [Trending](https://www.f1ow.com/docs/tools/market_trending) `market_trending` | $0.005 | | [Candles](https://www.f1ow.com/docs/tools/market_candles) `market_candles` | $0.01 | | [Coin Details](https://www.f1ow.com/docs/tools/market_coin_details) `market_coin_details` | $0.01 | | [Crypto Calendar](https://www.f1ow.com/docs/tools/catalysts_calendar) `catalysts_calendar` | $0.01 | | [ETF Flows](https://www.f1ow.com/docs/tools/catalysts_etf_flows) `catalysts_etf_flows` | $0.01 | | [Exchange Listings](https://www.f1ow.com/docs/tools/catalysts_exchange_listings) `catalysts_exchange_listings` | $0.01 | | [Funding](https://www.f1ow.com/docs/tools/funding_current) `funding_current` | $0.01 | | [Implied Volatility](https://www.f1ow.com/docs/tools/options_volatility) `options_volatility` | $0.01 | | [Macro Calendar](https://www.f1ow.com/docs/tools/catalysts_economic_calendar) `catalysts_economic_calendar` | $0.01 | | [Market Overview](https://www.f1ow.com/docs/tools/market_overview) `market_overview` | $0.01 | | [On-Chain Metrics](https://www.f1ow.com/docs/tools/onchain_metrics) `onchain_metrics` | $0.01 | | [Open Interest](https://www.f1ow.com/docs/tools/derivatives_open_interest) `derivatives_open_interest` | $0.01 | | [Options Chain](https://www.f1ow.com/docs/tools/options_chain) `options_chain` | $0.01 | | [Options-Implied Odds](https://www.f1ow.com/docs/tools/options_probability) `options_probability` | $0.01 | | [Order Book](https://www.f1ow.com/docs/tools/flow_orderbook) `flow_orderbook` | $0.01 | | [Perp Flow](https://www.f1ow.com/docs/tools/derivatives_flow) `derivatives_flow` | $0.01 | | [Prediction Odds](https://www.f1ow.com/docs/tools/events_prediction_odds) `events_prediction_odds` | $0.01 | | [Regulatory Filings](https://www.f1ow.com/docs/tools/filings_search) `filings_search` | $0.01 | | [Social Sentiment](https://www.f1ow.com/docs/tools/sentiment_social) `sentiment_social` | $0.01 | | [Spot & Perp Quotes](https://www.f1ow.com/docs/tools/market_quotes) `market_quotes` | $0.01 | | [Top Movers](https://www.f1ow.com/docs/tools/market_top_movers) `market_top_movers` | $0.01 | | [Coin Universe](https://www.f1ow.com/docs/tools/market_coins) `market_coins` | $0.01 | | [Bulk History](https://www.f1ow.com/docs/tools/market_history) `market_history` | $0.02 | | [Liquidation History](https://www.f1ow.com/docs/tools/derivatives_liquidations) `derivatives_liquidations` | $0.02 | | [Options Positioning](https://www.f1ow.com/docs/tools/options_positioning) `options_positioning` | $0.02 | | [Technicals](https://www.f1ow.com/docs/tools/ta_technicals) `ta_technicals` | $0.02 | | [Whale Context](https://www.f1ow.com/docs/tools/flow_whale_context) `flow_whale_context` | $0.02 | | [Whale Positions](https://www.f1ow.com/docs/tools/flow_whale_positions) `flow_whale_positions` | $0.02 | | [Gamma & Hedge Scenarios](https://www.f1ow.com/docs/tools/options_gamma) `options_gamma` | $0.03 | | [Perp Price Levels](https://www.f1ow.com/docs/tools/flow_levels) `flow_levels` | $0.03 | | [Market Regime](https://www.f1ow.com/docs/tools/research_regime) `research_regime` | $0.05 | | [News](https://www.f1ow.com/docs/tools/news_search) `news_search` | $0.05 | | [Opportunity Scan](https://www.f1ow.com/docs/tools/research_opportunities) `research_opportunities` | $0.05 | | [Positioning](https://www.f1ow.com/docs/tools/research_positioning) `research_positioning` | $0.05 | | [Trade Plan Review](https://www.f1ow.com/docs/tools/research_trade_plan) `research_trade_plan` | $0.05 | | [Token Dossier](https://www.f1ow.com/docs/tools/research_token_view) `research_token_view` | $0.07 | | [Tweet Search](https://www.f1ow.com/docs/tools/sentiment_twitter) `sentiment_twitter` | $0.10 | WebSocket is not available over x402. For sustained use, a subscription is far cheaper per call. See [pricing & limits](https://www.f1ow.com/docs/pricing-limits). ## Errors | Status | Meaning | | --- | --- | | `401` | No credential, or an unknown one. MCP clients start OAuth from here. | | `402` | REST: x402 payment required, or the metered account's period or call balance is used up. A metered denial links to the dashboard. | | `403` | The credential was rejected. | REST errors are [RFC 9457 problem details](https://www.f1ow.com/docs/api/rest#errors). MCP payment challenges and metered-usage denials are HTTP `200` tool results with `isError: true`, not HTTP `402` responses. --- # Pricing & limits > f1ow pricing for the crypto MCP server and API — free trial, monthly subscription, per-call units, x402 pay-per-call, and which calls are not charged. Source: https://www.f1ow.com/docs/pricing-limits ## Free trial Every new account starts with **7 days and 500 tool calls**, whichever ends first. No card is required. Trials are limited to one per person. ## Subscription **$49 buys 30 days and 12,500 tool calls.** Pay by USDC or USDT on Base, Arbitrum, Polygon or Ethereum. - **Stacking, no minimum term.** Pay again whenever you like. The new period and calls stack onto what is left. - **Paying ends a trial.** Your first payment replaces the trial with a fresh paid period and allowance. - **One balance everywhere.** MCP, REST and WebSocket calls, by API key or OAuth, all draw on the same account. See the [refund policy](https://www.f1ow.com/refunds) for details. ## What a call costs **Every tool call uses one unit**, whichever tool it is and however much it assembles. These calls are not charged: - calls refused before running: an unknown key, an ended period, no balance, or a burst limit, - calls that fail on our side (a `5xx`): the unit is refunded. On WebSocket, a `tools/call` costs one unit, and a subscription costs one unit **each time it pushes a changed result**. Unchanged checks are free. ## When you run out Calls are refused with a message and a link to the dashboard. Over MCP this appears as a tool error your client shows; over REST it is a `402` problem. Entitlement is re-checked on every call, so after you pay the next call succeeds on the same connection. There is nothing to reconnect. Track usage per key and per tool in the dashboard. ## Pay per call Agents without an account can use [x402](https://www.f1ow.com/docs/auth#x402), paying per call in USDC on Base. Prices vary by tool, from fractions of a cent for simple lookups to more for the research composites. --- # REST API > The f1ow crypto market data REST API — every MCP tool as an HTTP resource with JSON responses, bearer or x402 auth, an OpenAPI 3.1 spec and RFC 9457 errors. Source: https://www.f1ow.com/docs/api/rest Every f1ow tool is also a REST resource. The tools, credentials and balance are the same as over MCP, so there is no MCP client to run. | Endpoint | URL | | --- | --- | | REST · Bearer | `https://mcp.f1ow.com/v1` | | REST · x402 | `https://mcp.f1ow.com/x402/v1` | | REST · Key in path | `https://mcp.f1ow.com/key//v1` | | WebSocket · Bearer | `wss://mcp.f1ow.com/v1/ws` | | WebSocket · Key in path | `wss://mcp.f1ow.com/key//v1/ws` | | OpenAPI spec | `https://mcp.f1ow.com/openapi.json` | | AsyncAPI spec | `https://mcp.f1ow.com/asyncapi.json` | ## A request ```bash curl "https://mcp.f1ow.com/v1/derivatives/funding/BTC" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` Path segments and query parameters map one-to-one to the tool's arguments. Arrays are comma-separated (`?symbols=BTC,ETH`). The trade-plan check takes a JSON body: ```bash curl -X POST "https://mcp.f1ow.com/v1/research/trade-plan" \ -H "Authorization: Bearer $F1OW_API_KEY" \ -H "Content-Type: application/json" \ -d '{"symbol":"BTC","entry":70000,"stop":68000,"target":75000,"account_size":10000,"risk_percent":1}' ``` Each [tool page](https://www.f1ow.com/docs/tools) lists its path, parameters and ready-to-run cURL, TypeScript and Python examples. ## Responses The body is the tool's JSON result, typed per tool in the OpenAPI spec: ```json { "symbol": "BTC", "...": "the tool's fields", "generatedAt": "2026-11-07T15:36:14Z" } ``` - Every tool returns a JSON object. The fields are documented on its [tool page](https://www.f1ow.com/docs/tools). - `generatedAt` is when the data was produced, from the source's timestamp where it has one. - There is no text report here. The model-readable report is MCP-only: connect over [MCP](https://www.f1ow.com/docs/connect/custom-agent) to get it next to the same JSON. ## Errors Errors are [RFC 9457](https://www.rfc-editor.org/rfc/rfc9457) problem details (`application/problem+json`): ```json { "type": "urn:problem-type:f1ow:validation", "title": "One or more arguments are invalid", "status": 400, "detail": "See 'errors' for each invalid argument.", "instance": "/v1/market/candles/BTC", "errors": { "interval": ["must be one of: 1m, 5m, 15m, 30m, 1h, 4h, 12h, 1d, 1w"] } } ``` | Status | Meaning | | --- | --- | | `400` | An argument is missing or invalid; `errors` names each one. | | `401` / `403` | Missing or rejected credential. | | `402` | x402 payment required, or the account's period or balance is used up. | | `502` | A data source could not answer. Not charged; retry later. | | `500` | Unexpected server error. Not charged. | ## Specs - [OpenAPI 3.1](https://mcp.f1ow.com/openapi.json): import it into Postman, Insomnia or a code generator. It includes an example request for every operation. - [API catalog (RFC 9727)](https://mcp.f1ow.com/.well-known/api-catalog) > Get an API key: https://www.f1ow.com/dashboard --- # WebSocket API > Stream crypto market data from f1ow over WebSocket — JSON-RPC 2.0 tool calls and subscriptions that push only when a result changes. Source: https://www.f1ow.com/docs/api/websocket The WebSocket API speaks **JSON-RPC 2.0** with the same methods as MCP, plus **subscriptions**: the server re-runs a tool on an interval and pushes only when the result changes. | | | | --- | --- | | URL | `wss://mcp.f1ow.com/v1/ws` | | Key in path | `wss://mcp.f1ow.com/key//v1/ws` | | Subprotocol | `jsonrpc-2.0` | | Auth | `Authorization: Bearer ` at the handshake, or the key in the path | | Spec | [AsyncAPI 3.0](https://mcp.f1ow.com/asyncapi.json) | ## Methods `initialize`, `tools/list`, `tools/call`, `ping`, `subscriptions/subscribe`, `subscriptions/unsubscribe`. ## Call a tool ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "flow_orderbook", "arguments": { "symbol": "BTC" } } } ``` The `result` is the tool's JSON object, the same one the REST API returns as its body. There is no text report; that is MCP-only. A tool whose data source fails answers with JSON-RPC error `-32004`. ## Subscribe ```json { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "funding_current", "arguments": { "symbol": "BTC" }, "intervalSeconds": 60 } } ``` The reply returns `{ "subscriptionId", "intervalSeconds" }`. Each time the result changes, the server sends a `notifications/subscriptions/update` notification carrying `{ "subscriptionId", "result" }` (`result` is the same JSON object, or `error` when the data source failed). `intervalSeconds` defaults to and must be at least 15. Stop with: ```json { "jsonrpc": "2.0", "id": 3, "method": "subscriptions/unsubscribe", "params": { "subscriptionId": "" } } ``` ## Example: Node.js ```ts import WebSocket from "ws"; const ws = new WebSocket("wss://mcp.f1ow.com/v1/ws", "jsonrpc-2.0", { headers: { Authorization: `Bearer ${process.env.F1OW_API_KEY}` }, }); ws.on("open", () => { ws.send(JSON.stringify({ jsonrpc: "2.0", id: 1, method: "subscriptions/subscribe", params: { name: "derivatives_open_interest", arguments: { symbol: "ETH" }, intervalSeconds: 60 }, })); }); ws.on("message", (raw) => console.log(JSON.parse(raw.toString()))); ``` ## Metering A `tools/call` costs one unit. A subscription costs one unit **per pushed change**; checks that find nothing new are free. See [pricing & limits](https://www.f1ow.com/docs/pricing-limits). > Get an API key: https://www.f1ow.com/dashboard --- # Tool reference > Every f1ow tool, callable over MCP, REST and WebSocket with the same credentials. ## Research & risk Composite reads that assemble many sources into one answer: market regime, positioning, setup scans, token dossiers and trade-plan checks. | Tool | REST | What it answers | | --- | --- | --- | | [Market Regime](https://www.f1ow.com/docs/tools/research_regime) `research_regime` | `GET /research/regime` | What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call. | | [Positioning](https://www.f1ow.com/docs/tools/research_positioning) `research_positioning` | `GET /research/positioning/{symbol}` | Who is on the other side of your trade. Up to eight reads on one coin — who is crowded, who is fragile, who is trapped — plus the price levels the whole board is watching. | | [Opportunity Scan](https://www.f1ow.com/docs/tools/research_opportunities) `research_opportunities` | `GET /research/opportunities` | A liquidity-qualified major and mid-cap universe screened on crowding, stress, leverage, compression, trend, location and entry quality. Ranked candidates with disclosed setup rules and entry, stop and target geometry — not a forecast or a proven edge. | | [Trade Plan Review](https://www.f1ow.com/docs/tools/research_trade_plan) `research_trade_plan` | `POST /research/trade-plan` | Check your entry, stop and target against ATR, perp levels, liquidation distance, fees, slippage and funding. Add account size and risk for sizing, or a placement time to replay a trade from public candles. An interactive ticket in MCP Apps hosts; no orders placed or plans stored. | | [Token Dossier](https://www.f1ow.com/docs/tools/research_token_view) `research_token_view` | `GET /research/tokens/{symbol}` | One coin, fully assembled. Market data, technicals, on-chain, cited narrative synthesis, catalysts, social, ETF flows and prediction odds — the entire dossier from a single call. | ## Market data Quotes, candles, paged history, market breadth, movers and coin metadata. | Tool | REST | What it answers | | --- | --- | --- | | [Spot & Perp Quotes](https://www.f1ow.com/docs/tools/market_quotes) `market_quotes` | `GET /market/quotes` | Spot and perp mark side by side, with funding, open interest, long/short ratio and the day's liquidations. Five providers merged into one snapshot, cached for thirty seconds. | | [Candles](https://www.f1ow.com/docs/tools/market_candles) `market_candles` | `GET /market/candles/{symbol}` | Spot or perpetual OHLCV candles with venue routing and fallback, for the timeframes your analysis needs. For months of paged candles or derivatives series, use Bulk History. | | [Bulk History](https://www.f1ow.com/docs/tools/market_history) `market_history` | `GET /market/history/{symbol}` | Paged spot/perp candles, aggregate open interest, funding or long/short liquidations. Up to 1,000 rows per call with a backward-page cursor, explicit time bounds and a forming-row flag — for historical research and backtests. | | [Market Overview](https://www.f1ow.com/docs/tools/market_overview) `market_overview` | `GET /market/overview` | The global frame in one read: total market cap, BTC and ETH dominance, Fear & Greed, Altcoin Season. | | [Top Movers](https://www.f1ow.com/docs/tools/market_top_movers) `market_top_movers` | `GET /market/movers` | The day's ranked gainers and losers, plus the quieter names already trending more than five percent. | | [Trending](https://www.f1ow.com/docs/tools/market_trending) `market_trending` | `GET /market/trending` | What the market is looking up right now, ranked. | | [Coin Details](https://www.f1ow.com/docs/tools/market_coin_details) `market_coin_details` | `GET /market/coins/{coin_id}` | Price, market cap, all-time high and low, and the project's own description of itself. | | [Coin Universe](https://www.f1ow.com/docs/tools/market_coins) `market_coins` | `GET /market/coins` | Every symbol the market-data providers can answer for, so your agent knows what it can ask about before it asks. | ## Derivatives Perpetual funding, open interest, liquidations and taker flow across venues. | Tool | REST | What it answers | | --- | --- | --- | | [Perp Flow](https://www.f1ow.com/docs/tools/derivatives_flow) `derivatives_flow` | `GET /derivatives/flow/{symbol}` | Bucket-by-bucket open interest joined to taker buy/sell volume. Distinguish new positions from short covering and long unwind, with absorbed flow flagged. Coverage is stated; where taker data is unavailable, the read uses price direction and says so. | | [Liquidation History](https://www.f1ow.com/docs/tools/derivatives_liquidations) `derivatives_liquidations` | `GET /derivatives/liquidations/{symbol}` | Market-wide long/short liquidations and venue splits, ranked against a year of daily totals. A separate order sample reveals timing, cascades and the largest forced exits; its coverage is stated, never scaled up to the whole market. | | [Funding](https://www.f1ow.com/docs/tools/funding_current) `funding_current` | `GET /derivatives/funding/{symbol}` | Current perpetual funding, normalized to an eight-hour rate and annualized, with history and a one-year percentile baseline. Positive means longs pay shorts; it is a cost of holding, not a direction forecast. | | [Open Interest](https://www.f1ow.com/docs/tools/derivatives_open_interest) `derivatives_open_interest` | `GET /derivatives/open-interest/{symbol}` | Cross-exchange perpetual open interest with historical changes and a one-year baseline — how much leverage is committed, not merely how much changed hands. Venue-specific flow is a separate read. | ## Options Chains, implied volatility, positioning, modeled gamma and risk-neutral expiry odds. | Tool | REST | What it answers | | --- | --- | --- | | [Options Chain](https://www.f1ow.com/docs/tools/options_chain) `options_chain` | `GET /options/chain/{currency}` | Calls and puts by strike and expiry: quotes, mark implied volatility, open interest and volume. Reported data is separated from calculated metrics, with coverage and thin-market caveats. | | [Implied Volatility](https://www.f1ow.com/docs/tools/options_volatility) `options_volatility` | `GET /options/volatility/{currency}` | ATM volatility, term structure, implied move size, 25-delta skew and IV versus realized volatility. BTC/ETH volatility-index history adds context. What options price for the size of a move — not its direction. | | [Options Positioning](https://www.f1ow.com/docs/tools/options_positioning) `options_positioning` | `GET /options/positioning/{currency}` | Put/call open interest, strike and expiry concentrations, expiring notional, theoretical max pain and recent option trades. One venue; aggregate open interest does not reveal who is long or short, and max pain is not a forecast. | | [Gamma & Hedge Scenarios](https://www.f1ow.com/docs/tools/options_gamma) `options_gamma` | `GET /options/gamma/{currency}` | Modeled gamma exposure, walls, flip levels and an options regime, with price, time and volatility what-ifs. Dealer hedge ladders depend on an explicit positioning scenario — theoretical sensitivity, not observed dealer orders. | | [Options-Implied Odds](https://www.f1ow.com/docs/tools/options_probability) `options_probability` | `GET /options/probability/{currency}` | Risk-neutral expiry probabilities above or below a price or inside a range, plus implied 68% and 90% ranges. Derived from options forwards and volatility, with smile adjustment where quoted — not calibrated real-world forecasts. | ## Order flow & whales Order books, evidence-graded price levels, whale positions and cohort flow. | Tool | REST | What it answers | | --- | --- | --- | | [Whale Positions](https://www.f1ow.com/docs/tools/flow_whale_positions) `flow_whale_positions` | `GET /flow/whale-positions` | Live whale accounts: equity, side, notional, entry, leverage, unrealized PnL — and the reported liquidation price of each position. | | [Order Book](https://www.f1ow.com/docs/tools/flow_orderbook) `flow_orderbook` | `GET /flow/orderbook/{symbol}` | Best bid and ask, spread, depth and imbalance, with venue-labelled books and resting walls. Orders can be pulled: visible liquidity is evidence, not a promise of execution. | | [Perp Price Levels](https://www.f1ow.com/docs/tools/flow_levels) `flow_levels` | `GET /flow/levels/{symbol}` | Executed volume profiles, value areas, thin zones, inferred long/short entries, realized liquidation prices and persistent resting walls across venues. Levels graded by traded, inferred or resting evidence, with confluence disclosed — not a price forecast. | | [Whale Context](https://www.f1ow.com/docs/tools/flow_whale_context) `flow_whale_context` | `GET /flow/whales/{symbol}` | The cohort view: exchange reserve changes, top-trader long/short lean, and the large exchange-linked transfers that tend to arrive before a move does. | ## Technicals Multi-timeframe indicators computed from candles. | Tool | REST | What it answers | | --- | --- | --- | | [Technicals](https://www.f1ow.com/docs/tools/ta_technicals) `ta_technicals` | `GET /technicals/{symbol}` | Multi-timeframe trend, RSI, MACD, ADX, ATR, volatility and structure, calculated from candles. Choose spot, perp or automatic routing, with source coverage and partial-candle handling disclosed. | ## Sentiment Fear & Greed, social attention and live posts. | Tool | REST | What it answers | | --- | --- | --- | | [Fear & Greed](https://www.f1ow.com/docs/tools/sentiment_fear_greed) `sentiment_fear_greed` | `GET /sentiment/fear-greed` | The market-wide Fear & Greed index, 0 to 100 with the label that goes with it. One number for how the crowd is feeling. | | [Social Sentiment](https://www.f1ow.com/docs/tools/sentiment_social) `sentiment_social` | `GET /sentiment/social/{symbol}` | Per-coin social composite: galaxy score, alt rank, bullish share, social volume, dominance and interactions. How much attention a coin is getting, and from whom. | | [Tweet Search](https://www.f1ow.com/docs/tools/sentiment_twitter) `sentiment_twitter` | `GET /sentiment/twitter` | Raw crowd voice: public X posts from the last seven days on a coin, a topic or a single account, with likes, reposts, replies and views attached, so volume can be weighed against actual reach. | ## News & filings Cited news search and regulatory filings. | Tool | REST | What it answers | | --- | --- | --- | | [News](https://www.f1ow.com/docs/tools/news_search) `news_search` | `GET /news` | Recent coverage on any topic, drawn from a crypto news aggregator and a live search model at the same time. | | [Regulatory Filings](https://www.f1ow.com/docs/tools/filings_search) `filings_search` | `GET /filings` | Full-text search across recent regulatory filings, with form type, filer, and a link to the document itself. | ## Events & catalysts ETF flows, economic and crypto calendars, and prediction-market odds. | Tool | REST | What it answers | | --- | --- | --- | | [ETF Flows](https://www.f1ow.com/docs/tools/catalysts_etf_flows) `catalysts_etf_flows` | `GET /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. | | [Prediction Odds](https://www.f1ow.com/docs/tools/events_prediction_odds) `events_prediction_odds` | `GET /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) `catalysts_calendar` | `GET /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) `catalysts_economic_calendar` | `GET /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) `catalysts_exchange_listings` | `GET /catalysts/exchange-listings` | Official venue notices for new listings, delistings and other trading changes, with scheduled times, recent history, and coin or venue filters. | ## On-chain Chain-level activity, TVL and fees. | Tool | REST | What it answers | | --- | --- | --- | | [On-Chain Metrics](https://www.f1ow.com/docs/tools/onchain_metrics) `onchain_metrics` | `GET /onchain/{symbol}` | Total value locked and the fees a chain actually earns, over 24 hours, a week and a month. What the protocol makes, not what it promises. | ## Utilities A UTC clock, so an agent can judge how fresh a read is. | Tool | REST | What it answers | | --- | --- | --- | | [UTC Anchor](https://www.f1ow.com/docs/tools/utc_time) `utc_time` | `GET /time` | The current UTC instant, so your agent can fix what “now” means and judge for itself how stale a read is. | --- # Market Regime (`research_regime`) > What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call. - Category: Research & risk - MCP tool: `research_regime` - REST: `GET /research/regime` - x402 price: $0.05 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/research_regime ## What it does Deterministic market-regime classification across seven axes: trend (Mayer Multiple bands vs the 200-day SMA), volatility (30d realized, percentile vs own history), cycle (a ~30-indicator top checklist incl. MVRV Z-Score, NUPL, Pi Cycle, AHR999), sentiment (Fear & Greed level, trajectory and percentile), leverage stress (derivatives-risk-index percentile), liquidity (7d spot-ETF net flows vs prior 7d), and rotation (Altcoin Season index, BTC dominance, ETH/BTC 30d). Each axis reports its state, the numbers behind it, and a +1/0/-1 vote; the overall posture is the disclosed sum-of-votes rule, with one exception — while 30d realized volatility sits at or below its 5th percentile the tape is compressed, trend structure stops being tradeable, and the Trend axis's vote is withheld (its reading is still reported). Compression is flagged structurally, and adds an informational, never-voting asymmetry lean naming which side is more exposed. Includes explicit 'would change the call' thresholds to watch. Rule-based and deterministic — same inputs, same read. Useful as a first call: most other signals (funding, sentiment, flows) read differently depending on this regime. ## Parameters None. ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/research/regime" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "research_regime", "arguments": {} } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/research/regime", { 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/research/regime", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "research_regime", "arguments": {} } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "research_regime", "arguments": {}, "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/research/regime" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "axes": [ { "detail": "Mayer 0.94 | 46th pct | 2d in band | 200d SMA $73069", "name": "Trend", "state": "BEAR/NEUTRAL", "vote": -1 }, { "detail": "30d realized 38% ann. | 42th pct vs own history", "name": "Volatility", "state": "NORMAL", "vote": 0 }, { "detail": "0/30 top indicators hit | MVRV-Z 0.67 | NUPL 24.5% | AHR999 0.39 (DCA band <0.45)", "name": "Cycle", "state": "NO TOP SIGNALS", "vote": 1 }, { "detail": "F&G 21, falling vs 30d mean 44 | 14th pct vs full history", "name": "Sentiment", "state": "EXTREME FEAR", "vote": 1 }, { "detail": "ETF net flows 7d $-1411M (prior 7d $-717M)", "name": "Liquidity", "state": "OUTFLOWS", "vote": -1 }, { "detail": "Altseason 47/100 | BTC dominance 59.6% | ETH/BTC -4.9% 30d", "name": "Rotation", "state": "MIXED", "vote": 0 } ], "axesComputed": 6, "axesTotal": 7, "compressed": false, "posture": "NEUTRAL (vote score +0 across 6 axes)", "postureRule": "posture = sum of axis votes (+1 supportive / 0 neutral / -1 against): >= +3 RISK-ON, +1..+2 CAUTIOUS RISK-ON, 0 NEUTRAL, -1..-2 DEFENSIVE, <= -3 RISK-OFF. Exception: while 30d realized volatility sits at or below its 5th percentile the tape is compressed and the Trend axis contributes 0 whatever its state — its reading is still reported, only its claim on the posture is withdrawn. The Asymmetry li…", "volatilityPercentile": 42.2972972972973, "wouldChange": [ "BTC daily close above ~$73069 (its 200d SMA, Mayer > 1.0) flips Trend bullish", "5+/30 checklist indicators hit -> euphoria (now 0)", "F&G >= 75 -> extreme greed / crowding flag (now 21)", "7d ETF net flows turning positive -> improving (now $-1411M)" ], "options": { "btc": { "atmIv": { "d30": 37.9250638590136, "d7": 38.9431753506621, "d90": 39.2867546169742, "source": "calculated" }, "changes": [], "dvol": { "at": "2026-11-13T00:00:00Z", "changeVsPriorDay": -0.840000000000003, "days": 367, "percentile": 38.0108991825613, "source": "reported", "value": 39.23 }, "expiries": [ { "atmIv": 37.3112471223181, "butterfly25": 0.731392513546965, "days": 1.99615429398148, "expiry": "2026-11-15T08:00:00Z", "forwardUsd": 68622.4, "riskReversal25": -6.85588547243289 }, { "atmIv": 36.0167155269591, "butterfly25": 0.905839276842123, "days": 2.99615429398148, "expiry": "2026-11-16T08:00:00Z", "forwardUsd": 68627.07, "riskReversal25": -5.47453702828677 }, { "atmIv": 38.5788987608621, "butterfly25": 0.458165640004495, "days": 3.99615429398148, "expiry": "2026-11-17T08:00:00Z", "forwardUsd": 68634.6425, "riskReversal25": -4.86940292993656 }, { "atmIv": 38.9446513215503, "butterfly25": 0.656100437715786, "days": 6.99615429398148, "expiry": "2026-11-20T08:00:00Z", "forwardUsd": 68670.3, "riskReversal25": -5.30908746486656 }, { "atmIv": 37.5770034274295, "butterfly25": 0.437361134222506, "days": 13.9961542939815, "expiry": "2026-11-27T08:00:00Z", "forwardUsd": 68764.16, "riskReversal25": -5.19406395577422 }, { "atmIv": 37.2297708474289, "butterfly25": 0.664317130408243, "days": 20.9961542939815, "expiry": "2026-12-04T08:00:00Z", "forwardUsd": 68826.94, "riskReversal25": -4.20658631115766 }, "… 5 more" ], "impliedMovePct": [ { "days": 1, "extrapolated": true, "pct": 1.95295993254966 }, { "days": 7, "extrapolated": false, "pct": 5.39304380590935 }, { "days": 30, "extrapolated": false, "pct": 10.8727778786336 } ], "indexPriceUsd": 68625.86, "meta": { "ageSeconds": 33, "observedAt": "2026-11-13T08:05:16Z", "provider": "Deribit", "underlying": "BTC" }, "notes": [], "realized30d": 35.9570037879743, "riskReversal25At30d": -4.13282585233276, "skewState": "PUTS OVER CALLS", "spotVolCorrelation90d": 0.176970695802054, "termSlope7dMinus30d": 1.01811149164851, "termState": "FLAT", "volPremium": 1.96806007103923 }, "eth": { "atmIv": { "d30": 52.7173001866854, "d7": 52.2866564802324, "d90": 53.435695505224, "source": "calculated" }, "changes": [], "dvol": { "at": "2026-11-13T00:00:00Z", "changeVsPriorDay": -0.469999999999999, "days": 367, "percentile": 45.5040871934605, "source": "reported", "value": 55.59 }, "expiries": [ { "atmIv": 50.9143658402151, "butterfly25": 2.70358457921742, "days": 1.99615429398148, "expiry": "2026-11-15T08:00:00Z", "forwardUsd": 1933.93, "riskReversal25": -10.5235379490087 }, { "atmIv": 49.1492740034777, "butterfly25": 2.78368691655798, "days": 2.99615429398148, "expiry": "2026-11-16T08:00:00Z", "forwardUsd": 1934.24, "riskReversal25": -8.54151812033916 }, { "atmIv": 51.9307036114637, "butterfly25": 2.12864838929615, "days": 3.99615429398148, "expiry": "2026-11-17T08:00:00Z", "forwardUsd": 1934.4, "riskReversal25": -6.95085974135543 }, { "atmIv": 52.2871995806904, "butterfly25": 2.242518885231, "days": 6.99615429398148, "expiry": "2026-11-20T08:00:00Z", "forwardUsd": 1935.39, "riskReversal25": -7.04852830527137 }, { "atmIv": 51.7904274928138, "butterfly25": 1.64938829602769, "days": 13.9961542939815, "expiry": "2026-11-27T08:00:00Z", "forwardUsd": 1936.91, "riskReversal25": -6.11687103522829 }, { "atmIv": 52.0120351604716, "butterfly25": 1.61857190991675, "days": 20.9961542939815, "expiry": "2026-12-04T08:00:00Z", "forwardUsd": 1938.44, "riskReversal25": -5.2072832417525 }, "… 5 more" ], "impliedMovePct": [ { "days": 1, "extrapolated": true, "pct": 2.66497970842786 }, { "days": 7, "extrapolated": false, "pct": 7.24091516224122 }, { "days": 30, "extrapolated": false, "pct": 15.1135802281543 } ], "indexPriceUsd": 1934.47, "meta": { "ageSeconds": 33, "observedAt": "2026-11-13T08:05:16Z", "provider": "Deribit", "underlying": "ETH" }, "notes": [], "realized30d": 49.1906745017028, "riskReversal25At30d": -4.87054899735999, "skewState": "PUTS OVER CALLS", "spotVolCorrelation90d": 0.131794804261301, "termSlope7dMinus30d": -0.430643706452983, "termState": "FLAT", "volPremium": 3.52662568498258 }, "impliedBidWhileCompressed": false, "informational": true, "gamma": { "btc": { "flips": [ 76832.5074174907 ], "gammaState": "NEGATIVE MODELED GAMMA", "grossUsdPer1Pct": 329834819.687822, "largestGammaStrikes": [ 70000, 72000, 80000 ], "observed": false, "regime": [ "NEGATIVE MODELED GAMMA" ], "scenario": "calls_long_puts_short", "signedUsdPer1Pct": -176374379.632186, "spotUsd": 68625.86 }, "eth": { "flips": [ 2117.59300503454 ], "gammaState": "NEGATIVE MODELED GAMMA", "grossUsdPer1Pct": 34559682.1322987, "largestGammaStrikes": [ 1900, 1800, 2200 ], "observed": false, "regime": [ "NEGATIVE MODELED GAMMA" ], "scenario": "calls_long_puts_short", "signedUsdPer1Pct": -13365053.0517942, "spotUsd": 1934.47 } } }, "generatedAt": "2026-11-13T08:05:50.0786749+00:00" } ``` Over MCP the text report a model reads comes with it: ```text === Market Regime — 2026-11-13 08:05 UTC === Posture: NEUTRAL (vote score +0 across 6 axes) Rule: posture = sum of axis votes (+1 supportive / 0 neutral / -1 against): >= +3 RISK-ON, +1..+2 CAUTIOUS RISK-ON, 0 NEUTRAL, -1..-2 DEFENSIVE, <= -3 RISK-OFF. Exception: while 30d realized volatility sits at or below its 5th percentile the tape is compressed and the Trend axis contributes 0 whatever its state — its reading is still reported, only its claim on the posture is withdrawn. The Asymmetry line, when present, never votes. Trend BEAR/NEUTRAL Mayer 0.94 | 46th pct | 2d in band | 200d SMA $73069 Volatility NORMAL 30d realized 38% ann. | 42th pct vs own history Cycle NO TOP SIGNALS 0/30 top indicators hit | MVRV-Z 0.67 | NUPL 24.5% | AHR999 0.39 (DCA band <0.45) Sentiment EXTREME FEAR F&G 21, falling vs 30d mean 44 | 14th pct vs full history Liquidity OUTFLOWS ETF net flows 7d $-1411M (prior 7d $-717M) Rotation MIXED Altseason 47/100 | BTC dominance 59.6% | ETH/BTC -4.9% 30d Would change the call: - BTC daily close above ~$73069 (its 200d SMA, Mayer > 1.0) flips Trend bullish - 5+/30 checklist indicators hit -> euphoria (now 0) - F&G >= 75 -> extreme greed / crowding flag (now 21) - 7d ETF net flows turning positive -> improving (now $-1411M) Inputs: 6/7 axes computed Implied vol (Deribit options; informational, no vote): BTC DVOL 39.2 (38th pct 1y, -0.8 vs prior day) | ATM IV 7d 38.9 / 30d 37.9 (term FLAT) | 30d realized 36.0 → premium +2.0 pts | 25Δ RR 30d -4.1 (PUTS OVER CALLS) ETH DVOL 55.6 (46th pct 1y, -0.5 vs prior day) | ATM IV 7d 52.3 / 30d 52.7 (term FLAT) | 30d realized 49.2 → premium +3.5 pts | 25Δ RR 30d -4.9 (PUTS OVER CALLS) Options regime (modeled, dealers long calls / short puts; informational, no vote): BTC options regime: NEGATIVE MODELED GAMMA | flip $76832.51 (+12.0%) ETH options regime: NEGATIVE MODELED GAMMA | flip $2117.59 (+9.5%) ``` ## Related tools - [Positioning](https://www.f1ow.com/docs/tools/research_positioning) — Who is on the other side of your trade. Up to eight reads on one coin — who is crowded, who is fragile, who is trapped — plus the price levels the whole board is watching. - [Opportunity Scan](https://www.f1ow.com/docs/tools/research_opportunities) — A liquidity-qualified major and mid-cap universe screened on crowding, stress, leverage, compression, trend, location and entry quality. Ranked candidates with disclosed setup rules and entry, stop and target geometry — not a forecast or a proven edge. - [Trade Plan Review](https://www.f1ow.com/docs/tools/research_trade_plan) — Check your entry, stop and target against ATR, perp levels, liquidation distance, fees, slippage and funding. Add account size and risk for sizing, or a placement time to replay a trade from public candles. An interactive ticket in MCP Apps hosts; no orders placed or plans stored. - [Token Dossier](https://www.f1ow.com/docs/tools/research_token_view) — One coin, fully assembled. Market data, technicals, on-chain, cited narrative synthesis, catalysts, social, ETF flows and prediction odds — the entire dossier from a single call. --- # Positioning (`research_positioning`) > Who is on the other side of your trade. Up to eight reads on one coin — who is crowded, who is fragile, who is trapped — plus the price levels the whole board is watching. - Category: Research & risk - MCP tool: `research_positioning` - REST: `GET /research/positioning/{symbol}` - MCP App: hosts that support MCP Apps render the result as an interactive view - x402 price: $0.05 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/research_positioning ## What it does Deterministic positioning read for one coin — the game-state companion to research_regime, answering 'who is crowded, who is paying, who is trapped, and where'. Up to nine axes, each tagged with the market-actor cohort it reads: crowding (annualized funding vs the venue-standard 0.01%/8h anchor, long/short skew, dollars/day the majority pays to hold, crowd-vs-top-trader divergence, and cross-venue funding dispersion), buildup (24h price vs open-interest direction and the funding trend — whether positions are being added into the move or closed out), liquidity (order-book spread and imbalance — makers backing off), basis (perp vs oracle premium — spot-perp froth or hedging pressure, informational), fragility (24h liquidations as a share of market-wide open interest; the axis degrades rather than substituting a single venue's OI, since the liquidation total is cross-exchange), predation (visible on-chain whale positions within 2 daily sigmas of their liquidation price, with defending book depth), trap (share of tracked whale notional underwater on the funding-paying side — attrition fuel), house book (the on-chain exchange's LP-vault inventory, summed across its child sub-vaults — the literal venue counterparty, so the inventory it carries mirrors how traders are crowded; measured as net over its own gross book, since a market maker's net is a rounding error against venue open interest; informational), and disagreement (the most liquid matching prediction market, volume-gated, informational). Each axis reports its state, the numbers, and a +1/0/-1 fragility vote (+1 clean, -1 crowded/fragile); the stance is the disclosed sum-of-votes rule. Also returns a one-line 'farmed' synthesis (which cohort the board is currently farming, or an explicit statement that none is), focal points — reachable liquidation and breakeven price levels the whole market can see — and 'would change the call' thresholds a polling agent can watch statelessly. Reports the board, not a direction: crowding says who is paying, not where price goes. Deterministic — same inputs, same read. Call research_regime first for market context, then this per coin before sizing or timing decisions. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `symbol` | string | path | yes | Coin symbol, e.g. "BTC" or "ETH". | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/research/positioning/BTC" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "research_positioning", "arguments": { "symbol": "BTC" } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/research/positioning/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/research/positioning/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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "research_positioning", "arguments": { "symbol": "BTC" } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "research_positioning", "arguments": { "symbol": "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/research/positioning/BTC" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "axes": [ { "actors": "funding arbs, retail crowd", "detail": "funding +0.0002%/h (ann +1.8% vs anchor +10.9%) | crowd L/S 3.32 vs top traders 2.14 — crowd 1.55x more long-skewed | longs paying ~$2.4M/day market-wide | venue funding +3.3pp vs merged | series at +1.8% ann sits 5th pct of its own 30-point window (+0.1% to +12.2%) | CoinGlass 2026-11-13 08:00 UTC bucket", "metrics": { "fundingRatePctPerHour": 0.0002105, "annualizedFundingPct": 1.84398, "fundingRateIsOiWeighted": 1, "anchorAnnualPct": 10.95, "fundingDragUsdPerDay": 2411081.02544037, "longShortRatio": 3.32, "crowdVsTopDivergence": 1.18, "crowdLongShortRatio": 3.32, "topTraderLongShortRatio": 2.14, "crowdVsTopSkewRatio": 1.55140186915888, "fundingVenueDispersionPct": 3.316098, "fundingWindowPercentile": 5, "fundingWindowLowPct": 0.09855, "fundingWindowHighPct": 12.20706, "fundingWindowSpreadPct": 12.10851, "fundingWindowRankedPct": 1.84398 }, "name": "Crowding", "state": "STRETCHED SHORT (bottom of its own window)", "vote": -1 }, { "actors": "new entrants, closing leverage", "detail": "price -6.8% / OI -6.3% over 24h ($50.93B -> $47.73B) | funding +8.5% -> +1.8% ann (falling) | 3th pct of 53 rolling 24h moves (-6.5% to +3.6%) — a move for this tape, under the absolute band — positions closing | CoinGlass 2026-11-13 08:00 UTC bucket", "metrics": { "priceChangePct24h": -6.79676, "oiChangePct24h": -6.28777326501869, "oiPriorUsd": 50927482234, "oiNowUsd": 47725277621.5434, "annualizedFundingPriorPct": 8.482965, "annualizedFundingPct": 1.84398, "oiChangeWindowPercentile": 2.83018867924528, "oiChangeWindowLowPct": -6.48941665693922, "oiChangeWindowHighPct": 3.59523545652303, "oiBuildThresholdPct": 5 }, "name": "Buildup", "state": "LONG LIQUIDATION", "vote": 0 }, { "actors": "market makers / HFT", "detail": "spread 0.1 bps | depth $3.9M bid / $12.0M ask | ask-heavy book (-51% imbalance)", "metrics": { "spreadBps": 0.145644147654037, "imbalancePct": -50.9388172371789, "bidDepthUsd": 3892521.77123, "askDepthUsd": 11975508.92851 }, "name": "Liquidity", "state": "TIGHT", "vote": 1 }, { "actors": "cross-venue / spot-perp arbs", "detail": "perp -4.1 bps vs oracle (mark $68654 / oracle $68686) | venue funding +0.0006%/h", "metrics": { "premiumBps": -4.076522, "markPriceUsd": 68654, "oraclePriceUsd": 68686 }, "name": "Basis", "state": "FLAT", "vote": 0 }, { "actors": "liquidation hunters", "detail": "24h liq $918.6M = 1.92% of $47.73B market-wide OI", "metrics": { "liqIntensityPct": 1.92481223638172, "liquidation24hUsd": 918621983.506613, "marketWideOpenInterestUsd": 47725277621.5434 }, "name": "Fragility", "state": "DELEVERAGING", "vote": -1 }, { "actors": "directional whales, hunters", "detail": "5 visible positions >=$1.0M ($265.7M = 10.4% of venue OI) | exposed within 2 sigma: 0 ($0) | 30d daily sigma 2.0%", "metrics": { "visiblePositions": 5, "visibleNotionalUsd": 265705194.2608, "visibleShareOfVenueOi": 0.103786653312487, "venueOpenInterestUsd": 2560109472.4656, "exposedCount": 0, "exposedNotionalUsd": 0, "dailySigmaPct": 1.97356463971501, "nearestLiqDistanceSigmas": 23.2465772650821, "bidDepthUsd": 3892521.77123, "askDepthUsd": 11975508.92851 }, "name": "Predation", "state": "NO EXPOSED MAJORS", "vote": 1 }, "… 3 more" ], "axesComputed": 9, "axesTotal": 9, "farmed": "no cohort clearly farmed — funding near the anchor, no systemic trap, no exposed majors (longs pay the carry, bleeding ~$2.4M/day carry)", "focalPoints": [ { "priceUsd": 68831.3, "reason": "visible $4.0M long underwater (-$10k uPnL) entered here — breakeven exit level", "side": "long breakeven" } ], "skippedAxes": [], "stance": "LEAN CLEAN (vote score +1 across 9 axes)", "stanceRule": "stance = sum of axis votes (+1 clean / 0 neutral / -1 crowded-fragile): >= +3 CLEAN BOARD, +1..+2 LEAN CLEAN, 0 MIXED, -1..-2 CROWDED, <= -3 FRAGILE", "symbol": "BTC", "thresholds": [ { "comparator": ">=", "current": 1.84398, "flipsTo": "CROWDED LONG", "metric": "annualizedFundingPct", "value": 30.95 }, { "comparator": "<=", "current": 1.84398, "flipsTo": "CROWDED SHORT", "metric": "annualizedFundingPct", "value": -9.05 }, { "comparator": ">=", "current": 5, "flipsTo": "STRETCHED LONG", "metric": "fundingWindowPercentile", "value": 85 }, { "comparator": "<=", "current": 5, "flipsTo": "STRETCHED SHORT", "metric": "fundingWindowPercentile", "value": 15 }, { "comparator": ">=", "current": 1.55140186915888, "flipsTo": "COHORTS SPLIT", "metric": "crowdVsTopSkewRatio", "value": 1.5 }, { "comparator": ">=", "current": -6.28777326501869, "flipsTo": "BUILDING", "metric": "oiChangePct24h", "value": 5 }, "… 7 more" ], "wouldChange": [ "annualized funding >= +30.9% -> crowded long; <= -9.1% -> crowded short (now +1.8%)", "funding at/above the 85th pct of its own window -> stretched long; at/below the 15th -> stretched short (now 5th)", "crowd and top traders are 1.55x apart — the clean vote is withheld until they converge inside 1.5x", "24h OI change >= +5.0% -> positions building; <= -5.0% -> unwinding (now -6.3%)", "or a 24h move at/above the 85th pct of this window's own moves (now 3th)", "spread >= 5.0 bps -> makers backing off (now 0.1 bps)", "… 4 more" ], "options": { "informational": true, "nextExpiry": "2026-11-14T08:00:00Z", "nextExpiryMaxPainTheoretical": 73500, "observedAt": "2026-11-13T08:05:16Z", "oiNotionalUsd": 22726606453.448, "provider": "Deribit", "putCallOi": 0.786936722608645, "riskReversal25At30d": -4.13282585233276, "skewState": "PUTS OVER CALLS", "state": "BALANCED", "gamma": { "flips": [ 76832.5074174907 ], "gammaState": "NEGATIVE MODELED GAMMA", "grossUsdPer1Pct": 329834819.687822, "largestGammaStrikes": [ 70000, 72000, 80000 ], "observed": false, "regime": [ "NEGATIVE MODELED GAMMA" ], "scenario": "calls_long_puts_short", "signedUsdPer1Pct": -176374379.632186, "spotUsd": 68625.86 } }, "generatedAt": "2026-11-13T08:05:50.6034395+00:00" } ``` Over MCP the text report a model reads comes with it: ```text === BTC Positioning — 2026-11-13 08:05 UTC === Stance: LEAN CLEAN (vote score +1 across 9 axes) Rule: stance = sum of axis votes (+1 clean / 0 neutral / -1 crowded-fragile): >= +3 CLEAN BOARD, +1..+2 LEAN CLEAN, 0 MIXED, -1..-2 CROWDED, <= -3 FRAGILE Farmed: no cohort clearly farmed — funding near the anchor, no systemic trap, no exposed majors (longs pay the carry, bleeding ~$2.4M/day carry) Crowding STRETCHED SHORT (bottom of its own window) funding +0.0002%/h (ann +1.8% vs anchor +10.9%) | crowd L/S 3.32 vs top traders 2.14 — crowd 1.55x more long-skewed | longs paying ~$2.4M/day market-wide | venue funding +3.3pp vs merged | series at +1.8% ann sits 5th pct of its own 30-point window (+0.1% to +12.2%) | CoinGlass 2026-11-13 08:00 UTC bucket [funding arbs, retail crowd] Buildup LONG LIQUIDATION price -6.8% / OI -6.3% over 24h ($50.93B -> $47.73B) | funding +8.5% -> +1.8% ann (falling) | 3th pct of 53 rolling 24h moves (-6.5% to +3.6%) — a move for this tape, under the absolute band — positions closing | CoinGlass 2026-11-13 08:00 UTC bucket [new entrants, closing leverage] Liquidity TIGHT spread 0.1 bps | depth $3.9M bid / $12.0M ask | ask-heavy book (-51% imbalance) [market makers / HFT] Basis FLAT perp -4.1 bps vs oracle (mark $68654 / oracle $68686) | venue funding +0.0006%/h [cross-venue / spot-perp arbs] Fragility DELEVERAGING 24h liq $918.6M = 1.92% of $47.73B market-wide OI [liquidation hunters] Predation NO EXPOSED MAJORS 5 visible positions >=$1.0M ($265.7M = 10.4% of venue OI) | exposed within 2 sigma: 0 ($0) | 30d daily sigma 2.0% [directional whales, hunters] Trap CLEAN $4.0M of $265.7M tracked (2%) underwater on the paying side (longs pay) = 0.2% of $2.56B venue OI | single-name (largest $4.0M = 100% of trapped) [trapped whales] House book BOOK TOO SMALL TO READ HLP holds only $6k gross in BTC against $49.3M vault equity (readable at $246k) — the vault is flat here, not positioned, so its 11% net-to-gross is residue rather than a direction (informational) [DEX LP vault (HLP)] Disagreement ODDS Will Bitcoin dip to $45,000 by December 31, 2026? -> 'No' 95% ($9511k volume, resolves 2027-01-01T05:00:00Z) — check against funding's implied lean [informed flow (proxy)] Focal points (known price levels, nearest first): - $68831.3 (long breakeven): visible $4.0M long underwater (-$10k uPnL) entered here — breakeven exit level Would change the call: - annualized funding >= +30.9% -> crowded long; <= -9.1% -> crowded short (now +1.8%) - funding at/above the 85th pct of its own window -> stretched long; at/below the 15th -> stretched short (now 5th) - crowd and top traders are 1.55x apart — the clean vote is withheld until they converge inside 1.5x - 24h OI change >= +5.0% -> positions building; <= -5.0% -> unwinding (now -6.3%) - or a 24h move at/above the 85th pct of this window's own moves (now 3th) - spread >= 5.0 bps -> makers backing off (now 0.1 bps) - 24h liquidations >= 1.0% of market-wide OI -> deleveraging (now 1.92%) - a visible >=$1.0M position moving within 2 daily sigmas of its liquidation flips Predation - >=50% of tracked AND >=5% of venue OI underwater on the paying side -> trapped majority (now 2% of tracked, 0.2% of venue OI) - HLP's book in BTC reaching $246k gross (0.5% of its $49.3M equity) makes the axis readable (now $6k) Inputs: 9/9 axes computed Options (Deribit; option-holder cohort, informational, no vote): OI $22.73B, put/call OI 0.79 → BALANCED | 25Δ RR 30d -4.1 (PUTS OVER CALLS) | next expiry 14 Nov 2026 $160.9M (1% of OI), max pain $73500.00 (theoretical) modeled gamma (dealers long calls / short puts, not observed): NEGATIVE MODELED GAMMA, signed -$176.4M of gross $329.8M per 1% | nearest flip $76832.51 (+12.0%) | nearest large gamma strike $70000.00 (+2.0%) ``` ## Related tools - [Market Regime](https://www.f1ow.com/docs/tools/research_regime) — What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call. - [Opportunity Scan](https://www.f1ow.com/docs/tools/research_opportunities) — A liquidity-qualified major and mid-cap universe screened on crowding, stress, leverage, compression, trend, location and entry quality. Ranked candidates with disclosed setup rules and entry, stop and target geometry — not a forecast or a proven edge. - [Trade Plan Review](https://www.f1ow.com/docs/tools/research_trade_plan) — Check your entry, stop and target against ATR, perp levels, liquidation distance, fees, slippage and funding. Add account size and risk for sizing, or a placement time to replay a trade from public candles. An interactive ticket in MCP Apps hosts; no orders placed or plans stored. - [Token Dossier](https://www.f1ow.com/docs/tools/research_token_view) — One coin, fully assembled. Market data, technicals, on-chain, cited narrative synthesis, catalysts, social, ETF flows and prediction odds — the entire dossier from a single call. --- # Opportunity Scan (`research_opportunities`) > A liquidity-qualified major and mid-cap universe screened on crowding, stress, leverage, compression, trend, location and entry quality. Ranked candidates with disclosed setup rules and entry, stop and target geometry — not a forecast or a proven edge. - Category: Research & risk - MCP tool: `research_opportunities` - REST: `GET /research/opportunities` - MCP App: hosts that support MCP Apps render the result as an interactive view - x402 price: $0.05 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/research_opportunities ## What it does Cross-sectional opportunity scan across every major and medium-cap coin at once — the screener the per-coin tools cannot be looped into safely. Two whole-universe feeds (the merged market snapshot + venue perp contexts) build a liquidity-filtered universe and rank it, then candles are fetched for a bounded shortlist only; ZERO per-symbol calls are made to the rate-limited derivatives provider, which is what lets this cover a universe without silently degrading. Up to eight signals per candidate: crowding (annualized funding vs the venue-standard anchor AND its percentile across the screened universe right now — a cross-sectional read, explicitly NOT the own-history percentile research_positioning reports; reported without a vote, because funding extremes have tended to continue rather than reverse), stress (24h long and short liquidations each as a share of open interest, both read on one exchange so the ratio is one book — longs flushed leans long, shorts flushed (a spent squeeze) leans short), leverage (open interest as a share of market cap — the gap-through-your-stop condition), compression (4h Bollinger bandwidth ranked against the coin's own trailing window — the per-coin form of the reading research_regime computes for BTC alone; says energy is loading, never direction), trend (ADX with the +DI/-DI separation on 4h, confirmed against 1d — votes +1 only for a strong 3:1 trend the slow timeframe agrees with), location (distance from the 4h EMA20 in ATR units — an extended coin scores DOWN, because a chase is not a setup), entry (whether the limit is still live) and reward (net-of-fees reward:risk and stop distance). Each signal reports its state, the numbers, and a +1/0/-1 setup-quality vote; the setup name and score come from a disclosed rule shipped with every scan, under which the reading that named the setup counts 0. Each candidate also says why it is worth a look now: its 24h price, OI (venue contracts) and volume against its own last 60 days, the plain-word labels those earn (longs building, short covering, crowded short, coiling, ...), and for each label what followed it in a 2-year backtest, verdict included (often 'no edge'). Priced setups carry their setup type's backtest track record (trades, win rate, average R after fees, against random entries). Each candidate says whether it is ACTIONABLE (a priced live entry, net reward:risk >= 1.5, score >= +1) and, when not, which gates it missed; actionable candidates rank first. Candidates carry ATR-and-structure trade plans priced so they feed research_trade_plan directly. A TRENDING PULLBACK is entered at market with its levels from the EMA20 pullback, taking half at +1R and moving the rest to breakeven (60% of 19,139 backtested trades won, about 0R on average, the same as random entries with those exits); an ABSORPTION SHORT (yesterday's taker-buy share in the bottom 10% of the coin's own 60 days while the day closed flat or up) is a short at market, stop 2.5 ATR, target 2R, the one setup type that beat random entries in the backtest; a BREAKDOWN (24h drop in the bottom 5% of the coin's own 60 days) is a short at market; a COIL BREAKOUT (volatility squeezed, no trend) is a stop bracket around the 10-candle range. Stops sit behind the recent swing (a bracket's at the range midpoint), and targets at the structural level or 2R, whichever is nearer. Every priced plan carries its type's 2-year backtest record and a plain caveat; none of the three types passed a pre-registered edge test. No geometry is priced after a 24h move beyond ±30% or with a stop over 15% from entry, nor, for 7 days after BTC moves ±6% in 24h, for a TRENDING PULLBACK against that move (such plans lost in the backtest, in and out of sample; marketShock reports the active shock); the candidate says why. News is on the board but never scored: 'news.market' lists the last 24h's headlines after which BTC or ETH moved 1%+ (or a major coin 3%+) within the hour, and each candidate carries up to 3 headlines tagged with its coin (a real-time news feed, kept up to 48h by the server). Tokenized gold (XAUT, PAXG) is not screened, and one coin listed under two venue tickers (e.g. PUMP and PUMPFUN) is screened once. 'tier' filters major/medium/all; 'limit' caps the ranked list; 'symbols' narrows the universe to specific coins, and every symbol named there is accounted for individually in the response — selected, excluded by your own tier filter, below the liquidity floors (never screened, so no band was ever applied to it), below the tier floor, or not quoted at all — because mere absence from the ranked list conflates four different answers. Reports a board, not a forecast: the bands are disclosed constants chosen for plausibility with no backtest behind them, and 'NO CANDIDATES' is a real and frequent answer. Use it to pick what to look at, then research_positioning and ta_technicals on the two or three that stand out. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `tier` | string | query | no | Size tier to screen: 'major' (market cap >= $10B), 'medium' ($300M-$10B), or 'all' (default). One of: `major`, `medium`, `all`. | | `limit` | integer | query | no | Ranked candidates to return. Default 10, max 25. | | `symbols` | string[] | query | no | Optional: narrow the universe to these coin symbols, e.g. ["SOL","AVAX"]. Omit to screen everything that clears the tier and liquidity floors. | | `intervals` | string[] | query | no | The timeframe pair to analyse, FINEST FIRST: [fast] or [fast, slow]. Default ["4h","1d"]. This is the most consequential argument: entry, stop, target, ATR and every AT STRUCTURE verdict are measured on the fast timeframe, so changing it produces a DIFFERENT trade rather than a refinement of the same one — on one live BTC read the 1h pair put the entry 0.2% above spot while the 1d pair put it 10.7% below, with stops of 0.77% and 3.31%. Lookbacks are counted in candles, so the swing windows scale too (30 candles is 5 days at 4h, 7 hours at 15m). The second interval only CONFIRMS the first and must be slower; pass one interval to skip confirmation, which halves the candle cost and makes the trend vote abstain. One of: `1m`, `5m`, `15m`, `30m`, `1h`, `4h`, `12h`, `1d`, `1w`. | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/research/opportunities?tier=major&limit=5" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "research_opportunities", "arguments": { "tier": "major", "limit": 5 } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/research/opportunities?tier=major&limit=5", { 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/research/opportunities?tier=major&limit=5", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "research_opportunities", "arguments": { "tier": "major", "limit": 5 } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "research_opportunities", "arguments": { "tier": "major", "limit": 5 }, "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/research/opportunities?tier=major&limit=5" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "absorptionToday": { "count": 0, "fired": [], "read": 16 }, "backdrop": { "axes": [ { "detail": "Mayer 0.94 | 46th pct | 2d in band | 200d SMA $73069", "name": "Trend", "state": "BEAR/NEUTRAL", "vote": -1 }, { "detail": "30d realized 38% ann. | 42th pct vs own history", "name": "Volatility", "state": "NORMAL", "vote": 0 }, "… 4 more" ], "bearishNews": 6, "bullishNews": 2, "direction": "", "posture": "NEUTRAL (vote score +0 across 6 axes)" }, "candidates": [ { "actionable": false, "backdrop": "", "blockers": [ "net R:R 0.97 under 1.5", "score -1 under +1" ], "change24hPct": -6.79676, "dayNotionalUsd": 20184555563.53, "evidence": "failed", "geometry": { "breakEvenWinRatePct": 50.572573224173, "entryGapAtr": 0, "entryUsd": 68591, "freshness": "AT ENTRY", "livePriceUsd": 68591, "netRewardRisk": 0.965377554471311, "orderType": "market", "rewardRisk": 0.999999999999999, "rule": "short at market (the live price), stop 0.50 ATR beyond the 10-candle swing (clamped from 6.11 to 3.00 ATR), target no swing far enough beyond entry — 3.0 ATR default", "stopDistanceAtr": 3, "stopDistancePct": 4.84970690539602, "stopUsd": 71917.4624634802, "targetBasis": "no swing far enough beyond entry — 3.0 ATR default", "targetDistanceAtr": 3, "targetUsd": 65264.5375365198 }, "headlines": [ { "atMs": 1794555029192, "coins": [ "IBIT", "BTC" ], "kind": "tweet", "title": "The Block (@TheBlockCo): THE BLOCK: JPMorgan held $540 million of BlackRock's IBIT bitcoin ETF as of Sept. 30, a 9.6% increase in its position from the prior quarter. The bank also raised its Strateg…", "url": "https://x.com/TheBlockCo/status/2121143645688762762#" }, { "atMs": 1794555007852, "coins": [ "ZBT", "BTC" ], "kind": "tweet", "title": "ZEROBASE (@zerobasezk): Bitcoin retreated on Thursday as renewed unease over technology stocks weighed on risk appetite, with persistent U.S. spot ETF withdrawals adding pressure. The cryptocurrency …", "url": "https://x.com/zerobasezk/status/2121143556370805171#" }, "… 1 more" ], "labels": [ { "events": 988, "finding": "kept falling 0.28 ATR vs the market over 5 days on average; not consistent enough to rely on", "label": "big move down", "verdict": "inconclusive" }, { "events": 1288, "finding": "rose 0.19 ATR vs the market over 5 days on average, nearly all of it in the first year", "label": "volume spike", "verdict": "inconclusive" } ], "lean": "short", "marketCapUsd": 1379122275188, "notPriced": [], "priceUsd": 68591, "readings": [ { "name": "price 24h", "ownPercentile": 0, "unit": "%", "value": -6.87830307134303 }, { "name": "OI 24h", "ownPercentile": 75.2777777777778, "unit": "%", "value": 2.09115879916051 }, "… 1 more" ], "score": -1, "setup": "BREAKDOWN", "signals": [ { "contribution": 0, "detail": "funding +1.43% ann (-9.52 vs 10.95% anchor) | universe pct 26 (of 126 screened coins) RIGHT NOW — a cross-section, NOT this coin's own history", "lean": "", "metrics": { "fundingAnnualPct": 1.431165, "fundingDeviationPct": -9.518835, "fundingUniversePercentile": 25.7936507936508, "universeFundingSpreadPct": 17.02944 }, "name": "Crowding", "state": "BALANCED", "vote": 0 }, { "contribution": 0, "detail": "Bybit 24h liquidations: longs $127.3M (2.6% of OI), shorts $5.2M (0.1%) vs $4829.5M Bybit OI — neither side reached the 5% band", "lean": "", "metrics": { "longLiquidationsToOiPct": 2.63499395891609, "shortLiquidationsToOiPct": 0.107055105006475, "liquidationsToOiPct": 2.74204906392257, "longLiquidation24hUsd": 127257823.0347, "shortLiquidation24hUsd": 5170258.384, "openInterestUsd": 4829529973.08 }, "name": "Stress", "state": "QUIET", "vote": 0 }, "… 6 more" ], "signalsComputed": 8, "signalsTotal": 8, "symbol": "BTC", "tier": "major", "tierFromVolume": false, "timeframes": [ "4h", "1d" ], "trackRecord": { "ciHighR": 0.05, "ciLowR": 0.021, "meanR": 0.036, "meanRWithFunding": 0.034, "note": "nearly all of the gain came on about 10 market-wide crash days; on a typical day it lost (about −0.04R per trade), and random shorts on the same coins did better", "randomEntryMeanR": 0.082, "setup": "BREAKDOWN", "trades": 8037, "winRatePct": 58.2 } }, { "actionable": false, "backdrop": "", "blockers": [ "net R:R 0.97 under 1.5", "score -1 under +1" ], "change24hPct": -5.70444, "dayNotionalUsd": 11624807614.3, "evidence": "failed", "geometry": { "breakEvenWinRatePct": 50.4530558650859, "entryGapAtr": 0, "entryUsd": 1933.15, "freshness": "AT ENTRY", "livePriceUsd": 1933.15, "netRewardRisk": 0.972538410690787, "orderType": "market", "rewardRisk": 1, "rule": "short at market (the live price), stop 0.50 ATR beyond the 10-candle swing (clamped from 4.80 to 3.00 ATR), target no swing far enough beyond entry — 3.0 ATR default", "stopDistanceAtr": 3, "stopDistancePct": 6.15462266607362, "stopUsd": 2052.1280880692, "targetBasis": "no swing far enough beyond entry — 3.0 ATR default", "targetDistanceAtr": 3, "targetUsd": 1814.1719119308 }, "headlines": [ { "atMs": 1794555670988, "coins": [ "ETH" ], "kind": "tweet", "title": "Lookonchain (@lookonchain): Whale 0x4cee, who made $3.66M buying low and selling high on 10,500 $ETH ($23.64M) 2 months ago, bought another 10,380 $ETH ($19.91M) just 1 hour ago. The whale has now ac…", "url": "https://x.com/lookonchain/status/2121146337446220217#" }, { "atMs": 1794553716829, "coins": [ "BTC", "ETH", "… 1 more" ], "kind": "tweet", "title": "Wu Blockchain (@WuBlockchain): Binance Publishes New Reserve Snapshot After Replenishing $6.34 Billion in Stolen Assets Binance released a new proof-of-reserves snapshot dated November 12, showing us…", "url": "https://x.com/WuBlockchain/status/2121138141478453485#" }, "… 1 more" ], "labels": [ { "events": 1332, "finding": "fell 0.09 ATR vs the market over 5 days on average, not consistently", "label": "shorts building", "verdict": "no edge" }, { "events": 988, "finding": "kept falling 0.28 ATR vs the market over 5 days on average; not consistent enough to rely on", "label": "big move down", "verdict": "inconclusive" } ], "lean": "short", "marketCapUsd": 236200313080, "notPriced": [], "priceUsd": 1933.15, "readings": [ { "name": "price 24h", "ownPercentile": 3.05555555555556, "unit": "%", "value": -5.7035480836254 }, { "name": "OI 24h", "ownPercentile": 85.8333333333333, "unit": "%", "value": 3.85987636941061 }, "… 1 more" ], "score": -1, "setup": "BREAKDOWN", "signals": [ { "contribution": 0, "detail": "funding +1.01% ann (-9.94 vs 10.95% anchor) | universe pct 25 (of 126 screened coins) RIGHT NOW — a cross-section, NOT this coin's own history", "lean": "", "metrics": { "fundingAnnualPct": 1.01397, "fundingDeviationPct": -9.93603, "fundingUniversePercentile": 25, "universeFundingSpreadPct": 17.02944 }, "name": "Crowding", "state": "BALANCED", "vote": 0 }, { "contribution": 0, "detail": "Bybit 24h liquidations: longs $29.6M (2.0% of OI), shorts $1.3M (0.1%) vs $1492.1M Bybit OI — neither side reached the 5% band", "lean": "", "metrics": { "longLiquidationsToOiPct": 1.9805670280513, "shortLiquidationsToOiPct": 0.0864650533101452, "liquidationsToOiPct": 2.06703208136145, "longLiquidation24hUsd": 29551524.5597, "shortLiquidation24hUsd": 1290122.5307, "openInterestUsd": 1492073943.53 }, "name": "Stress", "state": "QUIET", "vote": 0 }, "… 6 more" ], "signalsComputed": 8, "signalsTotal": 8, "symbol": "ETH", "tier": "major", "tierFromVolume": false, "timeframes": [ "4h", "1d" ], "trackRecord": { "ciHighR": 0.05, "ciLowR": 0.021, "meanR": 0.036, "meanRWithFunding": 0.034, "note": "nearly all of the gain came on about 10 market-wide crash days; on a typical day it lost (about −0.04R per trade), and random shorts on the same coins did better", "randomEntryMeanR": 0.082, "setup": "BREAKDOWN", "trades": 8037, "winRatePct": 58.2 } }, "… 3 more" ], "caveats": [ "Ranking weights are unvalidated: the bands are disclosed constants chosen for plausibility, not fitted to outcomes. A high score means a coin cleared named thresholds, not that it carries edge.", "Crowding ranks funding ACROSS the screened universe at this instant. research_positioning ranks funding against a coin's OWN trailing window. The two answer different questions and will disagree.", "… 11 more" ], "coverage": { "analyzed": 16, "fastInterval": "4h", "major": 16, "medium": 0, "perpCovered": 536, "priceDisagreements": [], "quoted": 641, "screened": 126, "selected": 16, "slowInterval": "1d", "sources": [ "market merge", "Hyperliquid perp contexts", "… 4 more" ], "technicalsFailed": 0 }, "marketShock": { "atMs": 1794542400000, "changePct": -6.56626587683508, "direction": "down", "notPricedSide": "long", "untilMs": 1795147200000 }, "news": { "market": [ { "atMs": 1794551026516, "coins": [ "BTC" ], "impact": { "coin": "BTC", "down": -0.08, "pct": 1.06, "up": 1.06, "windowMs": 3600000 }, "kind": "article", "title": "THE BLOCK: Bitcoin tumbles below $69,000 as Nvidia turmoil adds to Fed-driven market jitters", "url": "https://www.theblock.co/news/markets/2026-11-13-bitcoin-tumbles-below-69000-439643" }, { "atMs": 1794549621346, "coins": [ "BTC" ], "impact": { "coin": "BTC", "down": -0.35, "pct": 1.45, "up": 1.45, "windowMs": 3600000 }, "kind": "article", "title": "COINTELEGRAPH: Bitcoin slides below $70K amid thin liquidity, ETF outflows", "url": "https://cointelegraph.com/news/bitcoin-falls-below-70k-crypto-extreme-fear" }, "… 6 more" ], "sinceMs": 1794527960567 }, "requestedSymbols": [], "rule": "Setup is named from the signals in fixed priority: ABSORPTION SHORT (on the 4h fast interval, when the last closed UTC day's Binance taker-buy share sits at or below the 10th percentile of the coin's own previous 60 days and that day closed flat or up — a short at market, stop 2.5 ATR above the fill, target 2R); TRENDING PULLBACK (trend is TRENDING and location is AT STRUCTURE — entered at market,…", "exchangeNotices": [ { "notices": [ { "category": "futures instruments", "coins": [ "TRX" ], "effectiveDayOnly": false, "effectiveMs": 1794818100000, "exchange": "Binance", "kind": "listing", "market": "perp", "publishedMs": null, "source": "listing data", "title": "Binance Futures TRXUSDC perpetual opens at 2026-11-16 08:35 UTC", "url": "https://www.binance.com/en/futures/TRXUSDC" } ], "symbol": "TRX" }, { "notices": [ { "category": "futures instruments", "coins": [ "HYPE" ], "effectiveDayOnly": false, "effectiveMs": 1794817800000, "exchange": "Binance", "kind": "listing", "market": "perp", "publishedMs": null, "source": "listing data", "title": "Binance Futures HYPEUSDC perpetual opens at 2026-11-16 08:30 UTC", "url": "https://www.binance.com/en/futures/HYPEUSDC" }, { "category": "거래", "coins": [ "HYPE" ], "effectiveDayOnly": false, "effectiveMs": null, "exchange": "Upbit", "kind": "listing", "market": "spot", "publishedMs": 1794286200000, "source": "announcement", "title": "하이퍼리퀴드(HYPE) 신규 거래지원 안내 (KRW, BTC, USDT 마켓)", "url": "https://upbit.com/service_center/notice?id=6758" } ], "symbol": "HYPE" } ], "generatedAt": "2026-11-13T08:05:53.8154254+00:00" } ``` Over MCP the text report a model reads comes with it: ```text === Opportunity scan — 2026-11-13 08:05 UTC === Universe: 641 quoted -> 126 liquid -> 16 selected (16 major, 0 medium); percentiles still ranked over all 126 | 536 perp-covered Timeframes: 4h setup, 1d confirmation (entry, stop, target and ATR are all measured on 4h) Technicals: 16 analyzed, 0 failed | sources: market merge, Hyperliquid perp contexts, Bybit liquidations and open interest, Binance taker flow, Binance 24h volume, candles Absorption today: 0 of 16 coins read fired — descriptive only: in the backtest the count did not separate results (days it fired widely +0.18R per trade, other days +0.16R) Backdrop: NEUTRAL (vote score +0 across 6 axes) (Trend BEAR/NEUTRAL, Sentiment EXTREME FEAR, Liquidity OUTFLOWS) | market headlines 24h: 2 followed by a rise, 6 by a fall (shown, never scored) MARKET NEWS — headlines of the last 24h after which, within the hour, BTC or ETH moved 1%+ or a major coin 3%+ (shown, never scored): 13 Nov 06:23 UTC THE BLOCK: Bitcoin tumbles below $69,000 as Nvidia turmoil adds to Fed-driven market jitters [BTC +1.1% in the hour after] 13 Nov 06:00 UTC COINTELEGRAPH: Bitcoin slides below $70K amid thin liquidity, ETF outflows [BTC +1.4% in the hour after] 13 Nov 05:36 UTC Lookonchain (@lookonchain): Even hackers are panic-selling $ETH as the market crashes! A wallet received 1,500 $ETH from #TornadoCash, then sold 1,499.5 $ETH ($3M) at $1,998. https://arkm.com/explore… [ETH -1.2% in the hour after] 13 Nov 04:33 UTC THE BLOCK: Bitcoin falls to 12-week low, Strategy and Metaplanet to lose MSCI index membership, and more [BTC -1.2% in the hour after] 13 Nov 03:22 UTC BLOOMBERG: Bitcoin Slips Below $70,000 as Higher Yields Weigh on Crypto [BTC -1.2% in the hour after] 13 Nov 03:22 UTC Lookonchain (@lookonchain): It's liquidation day! Four whales got liquidated for over $10M each, with a total of $143.89M in positions wiped out! 0x6046: 12,742 $ETH ($25.2M) and 536.89 $BTC ($38.77M… [ETH -2.3% in the hour after] 13 Nov 02:59 UTC Lookonchain (@lookonchain): The whale who held over $140M in $BTC and $ETH longs got fully liquidated over the past 2 days, losing a total of $17.69M. https://x.com/lookonchain/status/211216870040942… [ETH -3.9% in the hour after] 13 Nov 02:54 UTC TASS-RU: Bitcoin price dropped below $70 thousand for the first time since August 20 [BTC -2.4% in the hour after] RANKED CANDIDATES 1. BTC BREAKDOWN short lean score -1 not actionable backtest: failed (8/8 signals, 4h+1d) $68591.00 | major mcap $1.38T | 24h -6.80% | 24h vol $20.18B why now: big move down · volume spike | price 24h -6.9% (pct 0 of own 60d) · OI 24h +2.1% (pct 75 of own 60d) · volume vs 20d 1.8x (pct 97 of own 60d) history · big move down: kept falling 0.28 ATR vs the market over 5 days on average; not consistent enough to rely on [inconclusive] history · volume spike: rose 0.19 ATR vs the market over 5 days on average, nearly all of it in the first year [inconclusive] Crowding BALANCED funding +1.43% ann (-9.52 vs 10.95% anchor) | universe pct 26 (of 126 screened coins) RIGHT NOW — a cross-section, NOT this coin's own history Stress QUIET Bybit 24h liquidations: longs $127.3M (2.6% of OI), shorts $5.2M (0.1%) vs $4829.5M Bybit OI — neither side reached the 5% band Leverage NORMAL open interest 0.2% of market cap Compression NORMAL 4h Bollinger bandwidth 9.32% | own-window pct 92 over 380 candles Trend TRENDING DOWN 4h ADX 51.2 | +DI 5.2 / -DI 45.2 (8.64:1) | 1d agrees [short] Location EXTENDED close 68594 is 3.69 ATR below the 4h EMA20 72682.6 — chase, not a setup: wait for the pullback Entry AT ENTRY at market: entered at the live 68591 now Reward POOR net R:R 0.97 (gross 1.00, binance base tier) | stop 4.8% from entry — under the 1.5:1 net floor not actionable: net R:R 0.97 under 1.5; score -1 under +1 entry $68591.00 (at market, now) | stop $71917.46 (4.85%, 3.0 ATR) | target $65264.54 (3.0 ATR) | R:R 1.00 — below the 2:1 bar short at market (the live price), stop 0.50 ATR beyond the 10-candle swing (clamped from 6.11 to 3.00 ATR), target no swing far enough beyond entry — 3.0 ATR default track record: BREAKDOWN replayed over 2 years under these rules: 8037 trades, 58% won, +0.036R average after fees (95% +0.021..+0.050; +0.034R with funding); random entries with the same exits +0.082R. Caveat: nearly all of the gain came on about 10 market-wide crash days; on a typical day it lost (about −0.04R per trade), and random shorts on the same coins did better news (last 24h, tagged BTC): 13 Nov 07:30 UTC The Block (@TheBlockCo): THE BLOCK: JPMorgan held $540 million of BlackRock's IBIT bitcoin ETF as of Sept. 30, a 9.6% increase in its position from the prior quarter. The bank also raised its Strateg… 13 Nov 07:30 UTC ZEROBASE (@zerobasezk): Bitcoin retreated on Thursday as renewed unease over technology stocks weighed on risk appetite, with persistent U.S. spot ETF withdrawals adding pressure. The cryptocurrency … 13 Nov 07:08 UTC Wu Blockchain (@WuBlockchain): Binance Publishes New Reserve Snapshot After Replenishing $6.34 Billion in Stolen Assets Binance released a new proof-of-reserves snapshot dated November 12, showing us… 2. ETH BREAKDOWN short lean score -1 not actionable backtest: failed (8/8 signals, 4h+1d) $1933.15 | major mcap $236.20B | 24h -5.70% | 24h vol $11.62B why now: shorts building · big move down | price 24h -5.7% (pct 3 of own 60d) · OI 24h +3.9% (pct 86 of own 60d) · volume vs 20d 1.5x (pct 92 of own 60d) history · shorts building: fell 0.09 ATR vs the market over 5 days on average, not consistently [no edge] history · big move down: kept falling 0.28 ATR vs the market over 5 days on average; not consistent enough to rely on [inconclusive] Crowding BALANCED funding +1.01% ann (-9.94 vs 10.95% anchor) | universe pct 25 (of 126 screened coins) RIGHT NOW — a cross-section, NOT this coin's own history Stress QUIET Bybit 24h liquidations: longs $29.6M (2.0% of OI), shorts $1.3M (0.1%) vs $1492.1M Bybit OI — neither side reached the 5% band Leverage NORMAL open interest 0.6% of market cap Compression NORMAL 4h Bollinger bandwidth 9.16% | own-window pct 79 over 380 candles Trend TRENDING DOWN 4h ADX 56.4 | +DI 6.4 / -DI 45.0 (7.01:1) | 1d agrees [short] Location EXTENDED close 1934.52 is 2.79 ATR below the 4h EMA20 2045.05 — chase, not a setup: wait for the pullback Entry AT ENTRY at market: entered at the live 1933.15 now Reward POOR net R:R 0.97 (gross 1.00, binance base tier) | stop 6.2% from entry — under the 1.5:1 net floor … ``` ## Related tools - [Market Regime](https://www.f1ow.com/docs/tools/research_regime) — What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call. - [Positioning](https://www.f1ow.com/docs/tools/research_positioning) — Who is on the other side of your trade. Up to eight reads on one coin — who is crowded, who is fragile, who is trapped — plus the price levels the whole board is watching. - [Trade Plan Review](https://www.f1ow.com/docs/tools/research_trade_plan) — Check your entry, stop and target against ATR, perp levels, liquidation distance, fees, slippage and funding. Add account size and risk for sizing, or a placement time to replay a trade from public candles. An interactive ticket in MCP Apps hosts; no orders placed or plans stored. - [Token Dossier](https://www.f1ow.com/docs/tools/research_token_view) — One coin, fully assembled. Market data, technicals, on-chain, cited narrative synthesis, catalysts, social, ETF flows and prediction odds — the entire dossier from a single call. --- # Trade Plan Review (`research_trade_plan`) > Check your entry, stop and target against ATR, perp levels, liquidation distance, fees, slippage and funding. Add account size and risk for sizing, or a placement time to replay a trade from public candles. An interactive ticket in MCP Apps hosts; no orders placed or plans stored. - Category: Research & risk - MCP tool: `research_trade_plan` - REST: `POST /research/trade-plan` - MCP App: hosts that support MCP Apps render the result as an interactive view - x402 price: $0.05 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/research_trade_plan ## What it does Check, review or replay a perp trade setup (entry, stop, optional target), before it is placed or after: the tool for 'check this setup', 'is this trade good' and 'how did my trade do'. Renders an interactive trade ticket. Give the coin, entry and stop; optionally target, leverage, order type, placed_at, and account size with risk percent. Returns reward:risk, the stop's distance in % and 4h ATR, the isolated liquidation price at the leverage (first-tier 0.5% maintenance margin, so the optimistic case), funding per day at the current rate (in % of notional, and in USD when sized), the perp levels around the setup (from flow_levels: volume nodes, value area, liquidation clusters, entries, walls), and named checks: liquidation before the stop, price already through the stop, a stop inside one ATR of noise, a stop just in front of a level a wick would reach for, a level between entry and target, reward:risk under 2:1, costs that pull a 2:1 plan under it, leverage over 10x, and an entry far from live. Costs: fees per fill (a venue's base tier, the default venue unless overridden; override with venue, fee_bps, maker_fee_bps), funding carry over hold_hours at the current rate with the rate's 1y percentile, and, when sized, the slippage of a market exit of the whole size at the stop against today's visible book; they give a net reward:risk, the break-even win rate, and the stop, target and liquidation outcomes in R (and USD and % of account when sized). Everything reads in R and % without an account; give account_size and risk_percent (both or neither) to add the fixed-fractional size, notional and margin. Pass placed_at (when the order was placed) to replay the setup since then from public candles, filling the entry by order_type: a limit fills when price comes to it (or at once if it was already marketable, e.g. a buy limit above the market), a stop entry when price comes through it, a market order at placement; R is measured from the actual fill. Statuses: PENDING, MISSED (target traded before the entry), OPEN with the result and best/worst so far in R, STOPPED, TARGET, or AMBIGUOUS when one candle reached both; plus funding paid while open. Nothing about the plan is stored: the numbers come in, the replay goes out, and planLine is the one-line copy to bring the plan back later. Use it after research_opportunities or flow_levels has suggested a setup; it is a check of the setup, not a signal. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `symbol` | string | body | yes | Coin symbol, e.g. "ETH". | | `entry` | number | body | yes | Planned entry price | | `stop` | number | body | yes | Stop-loss price (below entry = long, above = short) | | `target` | number | body | no | Optional take-profit price | | `account_size` | number | body | no | Optional account equity in USD, with risk_percent: adds the position size, notional and margin. Leave both out when the user didn't give them. | | `risk_percent` | number | body | no | Optional percent of the account lost if the stop is hit, e.g. 1; only with account_size | | `leverage` | number | body | no | Optional leverage the position is opened at, 1–200, for the liquidation price. Default when sized: the smallest whole leverage that carries the notional; unsized: no liquidation price unless given. | | `placed_at` | string | body | no | When the order was placed, as ISO 8601 (e.g. 2026-10-14T12:00:00Z) or unix time, up to 90 days back. Pass it whenever the user says when the trade was placed or opened ('placed 2026-10-12T12:00Z', 'opened yesterday at 14:00'): with it the tool replays the trade and reports filled / stopped / target / open; without it the plan is checked as if not yet placed. | | `order_type` | string | body | no | How the entry was placed, for the replay. limit (default): fills when price comes to the entry, or at once if the entry was already on the far side of the market. stop: a breakout trigger that fills when price comes through the entry. market: filled at placement. Omit it when the user hasn't said: if the entry was through the market at placement, one call returns both readings (lifecycle as a limit, alternativeLifecycle as a stop); ask the user which applies rather than calling again. Also sets the entry fee: a resting limit pays maker, anything else taker. One of: `limit`, `stop`, `market`. | | `venue` | string | body | no | Optional venue whose base-tier fees to apply. Default venue (5 bps taker, 2 bps maker). One of 6 supported exchange ids; see the OpenAPI spec. | | `fee_bps` | number | body | no | Optional taker fee per fill in bps of notional (e.g. 4.5), when the user states their own fee tier. Overrides the venue's. | | `maker_fee_bps` | number | body | no | Optional maker fee per fill in bps (negative for a rebate). Overrides the venue's. | | `hold_hours` | number | body | no | Optional expected holding time in hours, e.g. 72 for three days: prices the funding carry over the hold into the net reward:risk. | ## Call it ### cURL ```bash curl -X POST "https://mcp.f1ow.com/v1/research/trade-plan" \ -H "Authorization: Bearer $F1OW_API_KEY" \ -H "Content-Type: application/json" \ -d '{"symbol":"BTC","entry":70000,"stop":68000,"target":75000,"account_size":10000,"risk_percent":1}' ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "research_trade_plan", "arguments": { "symbol": "BTC", "entry": 70000, "stop": 68000, "target": 75000, "account_size": 10000, "risk_percent": 1 } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/research/trade-plan", { method: "POST", headers: { Authorization: `Bearer ${process.env.F1OW_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({"symbol":"BTC","entry":70000,"stop":68000,"target":75000,"account_size":10000,"risk_percent":1}), }); 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.post( "https://mcp.f1ow.com/v1/research/trade-plan", headers={"Authorization": f"Bearer {os.environ['F1OW_API_KEY']}"}, json={"symbol":"BTC","entry":70000,"stop":68000,"target":75000,"account_size":10000,"risk_percent":1}, ) 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "research_trade_plan", "arguments": { "symbol": "BTC", "entry": 70000, "stop": 68000, "target": 75000, "account_size": 10000, "risk_percent": 1 } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "research_trade_plan", "arguments": { "symbol": "BTC", "entry": 70000, "stop": 68000, "target": 75000, "account_size": 10000, "risk_percent": 1 }, "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 -X POST "https://mcp.f1ow.com/x402/v1/research/trade-plan" \ -H "Content-Type: application/json" \ -d '{"symbol":"BTC","entry":70000,"stop":68000,"target":75000,"account_size":10000,"risk_percent":1}' ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "accountUsd": 10000, "atrInterval": "4h", "atrUsd": 1108.82082107478, "checks": [ { "code": "level_before_target", "severity": "info", "text": "Level between entry and target: high volume node (strength 2.0) at 71500.00. Price has to clear it first." }, { "code": "funding_carry", "severity": "info", "text": "At the current rate this position pays about $0.18 a day in funding." }, { "code": "options_target_beyond_implied", "severity": "info", "source": "options", "text": "The target is 3.7σ of the options-implied move over 24h, a tail outcome under that distribution (about 5% touch odds at 2σ); a longer hold or a nearer target fits what options price." }, { "code": "options_gamma_level_before_target", "severity": "info", "source": "options", "text": "A large gamma strike sits between entry and target at $72000.00: modeled dealer hedging concentrates there (model-dependent, not a barrier)." } ], "costs": { "breakEvenWinRatePct": 29.4821095431008, "entryFill": "taker", "feeBasis": "binance base tier", "grossBreakEvenWinRatePct": 28.5714285714286, "makerFeeBps": 2, "netRewardRisk": 2.39188753958759, "scenarios": [ { "accountPct": -1.03474764554639, "ifStopFails": false, "name": "stop", "pnlUsd": -103.474764554639, "priceUsd": 68000, "r": -1.03474764554639 }, { "accountPct": 2.475, "ifStopFails": false, "name": "target", "pnlUsd": 247.5, "priceUsd": 75000, "r": 2.475 } ], "stopSlippageBps": 0.0728369254077155, "stopSlippageComplete": true, "takerFeeBps": 5 }, "direction": "long", "entryUsd": 70000, "fundingBaseline1y": { "days": 364, "highPctPerHour": 0.001427125, "lowPctPerHour": -0.0014655, "medianPctPerHour": 0.000529875, "percentile": 28.5714285714286 }, "fundingPctPerDay": 0.005052, "fundingRateBasis": "OI-weighted across venues", "fundingRatePctPerHour": 0.0002105, "fundingUsdPerDay": 0.17682, "guidance": [], "levels": [ { "evidence": "resting", "kind": "bid_wall", "outsized": false, "priceHi": 68625, "priceLo": 68375, "strength": 1 }, { "evidence": "resting", "kind": "ask_wall", "outsized": false, "priceHi": 68875, "priceLo": 68625, "strength": 2 }, { "evidence": "traded", "kind": "high_volume_node", "outsized": false, "priceHi": 68875, "priceLo": 68625, "strength": 2 }, { "evidence": "traded", "kind": "thin_zone", "outsized": false, "priceHi": 70125, "priceLo": 69625, "strength": 1 }, { "evidence": "traded", "kind": "high_volume_node", "outsized": false, "priceHi": 71625, "priceLo": 71375, "strength": 2 }, { "evidence": "traded", "kind": "value_area_low", "outsized": false, "priceHi": 71625, "priceLo": 71375, "strength": 2 }, "… 6 more" ], "leverage": 1, "leverageAssumed": true, "liquidationPriceUsd": 350, "livePriceUsd": 68591, "maintenanceMarginRate": 0.005, "marginUsd": 3500, "planLine": "f1ow plan · BTC long · entry 70000 · stop 68000 · target 75000 · account 10000 · risk 1%", "rewardRisk": 2.5, "riskPercent": 1, "rules": "liquidation = entry × (1 ∓ 1/leverage ± 0.5% maintenance), isolated, before fees; stop inside noise < 1.0 ATR; a level within 0.5 ATR past the stop is one a wick reaches for; reward:risk floor 2:1; high leverage > 10x; far entry > 3 ATR from live; ATR is 14 × 4h", "sizing": { "impliedLeverage": 0.35, "positionNotionalUsd": 3500, "positionSizeUnits": 0.05, "riskAmountUsd": 100 }, "sourcesFailed": [], "stopDistancePct": 2.85714285714286, "stopUsd": 68000, "symbol": "BTC", "targetUsd": 75000, "options": { "atmIv": 37.3112471223181, "holdHours": 24, "impliedMovePct": 1.95295993254966, "impliedMoveUsd": 1367.07195278476, "ivExtrapolatedFromFrontExpiry": true, "observedAt": "2026-11-13T08:05:16Z", "provider": "Deribit", "stopSigma": 1.46298078599736, "targetSigma": 3.65745196499341, "gamma": { "gammaLevelsBetweenEntryAndTarget": [ { "kind": "large gamma strike", "price": 72000 } ], "riskNeutralOdds": { "expiry": "2026-11-15T08:00:00Z", "finishBeyondStop": 0.328, "finishBeyondTarget": 0.003, "touchApprox": "≈ 2 × finish probability (driftless reflection), capped at 100%" } } }, "generatedAt": "2026-11-13T08:06:21.8273610+00:00" } ``` Over MCP the text report a model reads comes with it: ```text BTC long setup: entry $70000.00, stop $68000.00, target $75000.00 live $68591.00 1R = 2.86% of entry size 0.05 units, notional $4k, risk $100 1x (smallest that carries it): liquidation ~$350.0000, margin $4k reward:risk 2.50:1 gross, 2.39:1 net of costs; break-even win rate 29% (29% gross) fees 5 bps taker / 2 maker (binance base tier); entry fills as taker; stop-exit slippage 0.1 bps (Hyperliquid book) at stop $68000.00: -1.03R, -$103 (-1.03% of account) at target $75000.00: +2.48R, +$248 (+2.48% of account) funding rate at the 29th percentile of 364 daily closes (1y) 4h ATR $1108.82; stop 1.80 ATR from entry checks: [info] Level between entry and target: high volume node (strength 2.0) at 71500.00. Price has to clear it first. [info] At the current rate this position pays about $0.18 a day in funding. [info] The target is 3.7σ of the options-implied move over 24h, a tail outcome under that distribution (about 5% touch odds at 2σ); a longer hold or a nearer target fits what options price. [info] A large gamma strike sits between entry and target at $72000.00: modeled dealer hedging concentrates there (model-dependent, not a barrier). plan line: f1ow plan · BTC long · entry 70000 · stop 68000 · target 75000 · account 10000 · risk 1% Options-implied move over 24h (Deribit ATM IV 37.3%, front expiry): ±1σ $1367.07 (±1.95%); stop 1.46σ, target 3.66σ risk-neutral odds at the 15 Nov 2026 expiry (2.0d, first covering the 24h hold): finish beyond stop 33% (touch roughly up to 66%), beyond target 0% (touch roughly up to 1%) ``` ## Related tools - [Market Regime](https://www.f1ow.com/docs/tools/research_regime) — What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call. - [Positioning](https://www.f1ow.com/docs/tools/research_positioning) — Who is on the other side of your trade. Up to eight reads on one coin — who is crowded, who is fragile, who is trapped — plus the price levels the whole board is watching. - [Opportunity Scan](https://www.f1ow.com/docs/tools/research_opportunities) — A liquidity-qualified major and mid-cap universe screened on crowding, stress, leverage, compression, trend, location and entry quality. Ranked candidates with disclosed setup rules and entry, stop and target geometry — not a forecast or a proven edge. - [Token Dossier](https://www.f1ow.com/docs/tools/research_token_view) — One coin, fully assembled. Market data, technicals, on-chain, cited narrative synthesis, catalysts, social, ETF flows and prediction odds — the entire dossier from a single call. --- # Token Dossier (`research_token_view`) > One coin, fully assembled. Market data, technicals, on-chain, cited narrative synthesis, catalysts, social, ETF flows and prediction odds — the entire dossier from a single call. - Category: Research & risk - MCP tool: `research_token_view` - REST: `GET /research/tokens/{symbol}` - x402 price: $0.07 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/research_token_view ## What it does Aggregated single-coin dossier: market data (spot/perp price, funding, market-wide OI, long/short, liquidations — the same enriched line as market_quotes), global market context (dominance, Fear & Greed), multi-timeframe technicals computed in-house from candles (4h + 1d: RSI, EMA/SMA, MACD, ATR, Bollinger, ADX, trend — the same numbers as ta_technicals), on-chain TVL/fees (when the symbol is a tracked chain), news, a grounded narrative synthesis with citations, upcoming catalyst events, social sentiment, ETF flows, prediction-market odds, live provider coverage, and a per-section status list that distinguishes an empty section from a failed feed — for one symbol (e.g. 'ETH'). ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `symbol` | string | path | yes | Coin symbol, e.g. 'ETH' or 'BTC' | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/research/tokens/SOL" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "research_token_view", "arguments": { "symbol": "SOL" } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/research/tokens/SOL", { 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/research/tokens/SOL", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "research_token_view", "arguments": { "symbol": "SOL" } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "research_token_view", "arguments": { "symbol": "SOL" }, "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/research/tokens/SOL" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "catalysts": [ { "categories": [], "coins": [ "SOL" ], "dateAdded": "2026-09-21T23:00:30Z", "eventDate": "2026-11-14T00:00:00Z", "source": "", "title": "Scale or Die London" }, { "categories": [], "coins": [ "AKT", "BP", "CARDS", "2Z", "JTO", "JUP", "… 8 more" ], "dateAdded": "2026-07-29T13:04:31Z", "eventDate": "2026-11-15T00:00:00Z", "source": "", "title": "Breakpoint 2026" } ], "market": { "fundingRatePct": -0.000615, "liquidation24hUsd": 57752900.9362416, "longShortRatio24h": 3.44, "marketCapUsd": 47187721491, "openInterestUsd": 4747136219.8862, "perpPriceUsd": 79.953, "priceChangePct24h": -3.74663, "priceUsd": 79.82, "spotPriceUsd": 79.82, "symbol": "SOL" }, "marketContext": { "altcoinSeasonIndex": 47, "btcDominancePct": 59.637379558453, "ethDominancePct": 10.214333791008, "fearGreedLabel": "Extreme Fear", "fearGreedValue": 20, "totalMarketCapUsd": 2313671494496.61, "totalVolume24hUsd": 95103917342.86 }, "news": [ { "coins": [ "WIN" ], "date": "2026-11-13T07:47:00.9580000+00:00", "kind": "tweet", "snippet": "", "source": "TreeOfAlpha", "title": "WINkLink (@WinkLink_Oracle): How does WINkLink’s WIN Buyback & Burn program work?\n\n1. Revenue Calculation\nService revenue from the previous cycle is calculated to determine the funds available for buybacks.\n\n2. WIN Buyback\n100% of WINkLink’s revenue is used to continuously buy back WIN, with the amount determined dynamically based on market performance in the period.\n\n3. Token Consolidation\nRepurc…", "url": "https://x.com/WinkLink_Oracle/status/2121147804827680962#" }, { "coins": [ "ZBT", "BTC" ], "date": "2026-11-13T07:30:07.8520000+00:00", "kind": "tweet", "snippet": "", "source": "TreeOfAlpha", "title": "ZEROBASE (@zerobasezk): Bitcoin retreated on Thursday as renewed unease over technology stocks weighed on risk appetite, with persistent U.S. spot ETF withdrawals adding pressure. The cryptocurrency fell as much as 1.4 percent and traded near $73,500, while other digital assets weakened alongside U.S. stock futures. \n\nThose futures came under strain as leadership turmoil at Nvidia dragged on the A…", "url": "https://x.com/zerobasezk/status/2121143556370805171#" }, { "coins": [ "AKT", "SOL" ], "date": "2026-11-13T07:30:00.6700000+00:00", "kind": "tweet", "snippet": "", "source": "TreeOfAlpha", "title": "Akash Network (@akashnet): Greg Osuri is in London this week.\n\n→ Nov 13: Solana Intelligence Summit, Somerset House.\n→ Nov 17: Breakpoint, Olympia London.\n\n\"Compute capital markets are coming to Solana.\"\n\nClips from both talks will land here. Turn on notifications.", "url": "https://x.com/akashnet/status/2121143526230511695#" }, { "coins": [ "ETH" ], "date": "2026-11-13T05:36:26.8230000+00:00", "impact": { "coin": "ETH", "down": -1.18, "pct": -1.18, "up": 1.18, "windowMs": 3600000 }, "kind": "tweet", "snippet": "", "source": "TreeOfAlpha", "title": "Lookonchain (@lookonchain): Even hackers are panic-selling $ETH as the market crashes!\n\nA wallet received 1,500 $ETH from #TornadoCash, then sold 1,499.5 $ETH ($3M) at $1,998.\n\nhttps://arkm.com/explorer/address/0x90e5090BF6bEE049e8Ef0b971644e33FAf9C7298", "url": "https://x.com/lookonchain/status/2121114946700517692#" }, { "coins": [ "PIEVERSE", "BNB" ], "date": "2026-11-13T04:58:13.5230000+00:00", "impact": { "coin": "PIEVERSE", "down": -0.61, "pct": 1.7, "up": 1.7, "windowMs": 3600000 }, "kind": "tweet", "snippet": "", "source": "TreeOfAlpha", "title": "pieverse (@pieverse_io): Purr-Fect Claw enables AI agents to interact with @BNBCHAIN. Now, we're extending security beyond the wallet.\n\nIntroducing Confidential Agents, a new Purr-Fect Claw option designed to protect an agent's memory, files, stored messages, and sensitive credentials.\n\nBuilt on Intel TDX and Google Confidential Space, Confidential Agents run on verified hardware in isolated sandb…", "url": "https://x.com/pieverse_io/status/2121105327580230117#" }, { "coins": [ "PIEVERSE", "BNB" ], "date": "2026-11-13T04:49:05.6390000+00:00", "impact": { "coin": "PIEVERSE", "down": -0.37, "pct": 1.81, "up": 1.81, "windowMs": 3600000 }, "kind": "tweet", "snippet": "", "source": "TreeOfAlpha", "title": "pieverse (@pieverse_io): Introducing Confidential Agents: Security Beyond the Wallet\n\nAI agents are becoming more capable, handling everything from everyday tasks to onchain interactions. But as agents take on more responsibility, they also accumulate sensitive information: conversations, files, credentials, and long-term memory.\nProtecting an agent's wallet is important. Protecting everything els…", "url": "https://x.com/pieverse_io/status/2121103029713989922#" }, "… 7 more" ], "onChain": { "chainName": "Solana", "fees24hUsd": 8490485.2, "fees30dUsd": 325524384.779999, "fees7dUsd": 59356865.89, "feesChangePct24h": -16.53, "tvlUsd": 4941322396.20233 }, "predictionMarkets": [ { "endDate": "2027-01-01T05:00:00Z", "liquidityUsd": 31735.35301, "outcomes": [ { "outcome": "Yes", "probability": 0.2365 }, { "outcome": "No", "probability": 0.7635 } ], "question": "Will Solana dip to $60 by December 31, 2026?", "source": "Polymarket", "url": "https://polymarket.com/event/will-solana-dip-to-60-by-december-31-2026-249-524", "volumeUsd": 263522.998015 }, { "endDate": "2027-01-01T05:00:00Z", "liquidityUsd": 58166.00603, "outcomes": [ { "outcome": "Yes", "probability": 0.044 }, { "outcome": "No", "probability": 0.956 } ], "question": "Will Solana dip to $40 by December 31, 2026?", "source": "Polymarket", "url": "https://polymarket.com/event/will-solana-dip-to-40-by-december-31-2026-343-482", "volumeUsd": 255655.548232 }, { "endDate": "2027-01-01T05:00:00Z", "liquidityUsd": 65736.66524, "outcomes": [ { "outcome": "Yes", "probability": 0.01 }, { "outcome": "No", "probability": 0.99 } ], "question": "Will Solana dip to $20 by December 31, 2026?", "source": "Polymarket", "url": "https://polymarket.com/event/will-solana-dip-to-20-by-december-31-2026-143-365", "volumeUsd": 242781.459661 }, { "endDate": "2027-01-01T05:00:00Z", "liquidityUsd": 55917.59533, "outcomes": [ { "outcome": "Yes", "probability": 0.0265 }, { "outcome": "No", "probability": 0.9735 } ], "question": "Will Solana reach $160 by December 31, 2026?", "source": "Polymarket", "url": "https://polymarket.com/event/will-solana-reach-160-by-december-31-2026", "volumeUsd": 184488.645475 }, { "endDate": "2027-01-01T05:00:00Z", "liquidityUsd": 65502.12812, "outcomes": [ { "outcome": "Yes", "probability": 0.0015 }, { "outcome": "No", "probability": 0.9985 } ], "question": "Will Solana reach $600 by December 31, 2026?", "source": "Polymarket", "url": "https://polymarket.com/event/will-solana-reach-600-by-december-31-2026", "volumeUsd": 183587.144019 }, { "endDate": "2027-01-01T05:00:00Z", "liquidityUsd": 73116.10585, "outcomes": [ { "outcome": "Yes", "probability": 0.0155 }, { "outcome": "No", "probability": 0.9845 } ], "question": "Will Solana reach $180 by December 31, 2026?", "source": "Polymarket", "url": "https://polymarket.com/event/will-solana-reach-180-by-december-31-2026", "volumeUsd": 171830.128274 }, "… 4 more" ], "providerCoverage": [ { "name": "CoinGlass", "status": "healthy" }, { "name": "CoinGecko", "status": "healthy" }, { "name": "Perplexity", "status": "healthy" }, { "name": "CoinMarketCap", "status": "healthy" }, { "name": "CoinMarketCal", "status": "healthy" }, { "name": "DeFiLlama", "status": "healthy" }, "… 13 more" ], "sections": [ { "name": "market", "status": "ok" }, { "name": "technicals", "status": "ok" }, { "name": "marketContext", "status": "ok" }, { "name": "onChain", "status": "ok" }, { "name": "news", "status": "ok" }, { "name": "narrative", "reason": "AuthenticationFailed", "status": "unavailable" }, "… 4 more" ], "social": { "altRank": 165, "galaxyScore": 61.5, "interactions24h": 29077632, "sentimentPct": 81.5, "symbol": "SOL" }, "symbol": "SOL", "technicals": [ { "adx14": 48.0585090703924, "asOfAt": "2026-11-13T04:00:00.0000000+00:00", "asOfMs": 1794542400000, "atr14Pct": 2.23427411835788, "atr14Usd": 1.7811633271549, "bollinger": { "bandwidthPct": 8.74225267377351, "lowerUsd": 79.4202577215839, "middleUsd": 83.0505, "percentB": 0.0412840597717463, "upperUsd": 86.6807422784162 }, "closedCandles": 399, "droppedPartialCandle": true, "ema200Usd": 96.3329973102069, "ema20Usd": 83.0705815918967, "ema50Usd": 86.5249992225059, "interval": "4h", "lastCloseUsd": 79.72, "macd": { "aboveSignal": false, "candlesSinceCross": 4, "histogram": -0.21348333350295, "macd": -1.94293200650345, "signal": -1.7294486730005 }, "market": "spot", "minusDi14": 36.3849991199014, "plusDi14": 7.6040091755951, "rsi14": 30.3111647217498, "sma200Usd": 98.2792, "source": "Binance", "trend": "downtrend (close < EMA50 < EMA200), ADX 48.1 (trending)", "volumeAvg20Usd": 30172917.1698385, "volumeLastClosedUsd": 59947691.2787 }, { "adx14": 38.8807093673819, "asOfAt": "2026-11-12T00:00:00.0000000+00:00", "asOfMs": 1794441600000, "atr14Pct": 5.34698005276134, "atr14Usd": 4.36955209911657, "bollinger": { "bandwidthPct": 27.8966777886034, "lowerUsd": 80.1110846812664, "middleUsd": 93.0965, "percentB": 0.0619508609945059, "upperUsd": 106.081915318734 }, "closedCandles": 399, "droppedPartialCandle": true, "ema200Usd": 97.9267591824214, "ema20Usd": 92.0594189547841, "ema50Usd": 98.3377882387135, "interval": "1d", "lastCloseUsd": 81.72, "macd": { "aboveSignal": false, "candlesSinceCross": 43, "histogram": -0.829045523059452, "macd": -5.7766980177726, "signal": -4.94765249471315 }, "market": "spot", "minusDi14": 30.449042344303, "plusDi14": 8.72878482067931, "rsi14": 22.3637310539355, "sma200Usd": 89.0024, "source": "Binance", "trend": "mixed (close below EMA50, below EMA200), ADX 38.9 (trending)", "volumeAvg20Usd": 171016067.988368, "volumeLastClosedUsd": 147685408.78053 } ], "generatedAt": "2026-11-13T08:05:52.3779513+00:00" } ``` Over MCP the text report a model reads comes with it: ```text # SOL — Aggregated Token View Generated: 2026-11-13 08:05 UTC === Synthesis === Rangebound, momentum oversold; sentiment extreme fear Signals: - Trend: 4h downtrend, 1d mixed - RSI(14) 22 — oversold - Price $79.82, 24h -3.75% - Funding -0.0006% — shorts pay - Fear & Greed 20 — Extreme Fear - On-chain: TVL $4.94B, fees 24h -16.53% - Social: galaxy 62/100, 82% bullish - Prediction: 'Will Solana dip to $60 by December 31, 2026?' — Yes 24% Key levels: Nearest resistance $80.11 (1d lower Bollinger). Watch: - Catalyst 2026-11-14: Scale or Die London - Sentiment at extreme fear — watch for capitulation or a contrarian bounce Confidence: High — unavailable sections: narrative, etfFlow. === Market === SOL: spot $79.8200 | perp $79.9530 | 24h -3.75% | mcap $47.19B | funding -0.0006% | OI $4.75B | L/S 3.44 | liq 24h $57.75M === Market Context === Total mcap $2.31T | BTC dominance 59.64% | ETH dominance 10.21% | Fear & Greed 20/100 — Extreme Fear === Technicals === --- 4h (spot, Binance, 399 closed candles) (partial newest candle dropped) --- Close $79.7200 | trend: downtrend (close < EMA50 < EMA200), ADX 48.1 (trending) RSI(14) 30.3 | ATR(14) $1.7812 (2.23% of price) EMA20 $83.0706 | EMA50 $86.5250 | EMA200 $96.3330 | SMA200 $98.2792 MACD(12,26,9) -1.943 | signal -1.729 | histogram -0.2135 (below signal, crossed 4 candles ago) Bollinger(20,2) $79.4203 - $86.6807 | %B 0.04 | bandwidth 8.7% ADX(14) 48.1 | +DI 7.6 | -DI 36.4 Volume (last closed) $59.95M vs 20-candle avg $30.17M (2.0x) 2xATR stops from close: long $76.1577 / short $83.2823 (feed research_trade_plan) --- 1d (spot, Binance, 399 closed candles) (partial newest candle dropped) --- Close $81.7200 | trend: mixed (close below EMA50, below EMA200), ADX 38.9 (trending) RSI(14) 22.4 | ATR(14) $4.3696 (5.35% of price) EMA20 $92.0594 | EMA50 $98.3378 | EMA200 $97.9268 | SMA200 $89.0024 MACD(12,26,9) -5.777 | signal -4.948 | histogram -0.829 (below signal, crossed 43 candles ago) Bollinger(20,2) $80.1111 - $106.0819 | %B 0.06 | bandwidth 27.9% ADX(14) 38.9 | +DI 8.7 | -DI 30.4 Volume (last closed) $147.69M vs 20-candle avg $171.02M (0.9x) 2xATR stops from close: long $72.9809 / short $90.4591 (feed research_trade_plan) === On-chain === Chain: Solana | TVL $4.94B Fees 24h $8.49M (-16.53%) | 7d $59.36M | 30d $325.52M === Social Sentiment === galaxy score 62/100 | alt rank #165 | sentiment 82% bullish | social vol n/a | dominance n/a === News === [tweet] WINkLink (@WinkLink_Oracle): How does WINkLink’s WIN Buyback & Burn program work? 1. Revenue Calculation Service revenue from the previous cycle is calculated to determine the funds available for buybacks. 2. WIN Buyback 100% of WINkLink’s revenue is used to continuously buy back WIN, with the amount determined dynamically based on market performance in the period. 3. Token Consolidation Repurchased WIN tokens are consolidated in preparation for the burn. 4. On-chain Burn The consolidated WIN is permanently burned through the token contract’s burn function. 5. Public Disclosure Each round’s burn details, including the amount, value, and on-chain transaction record, are made public. Round 1 is complete. The program is designed for long-term execution, with updates disclosed for each round. (2026-11-13T07:47:00.9580000+00:00) https://x.com/WinkLink_Oracle/status/2121147804827680962# [tweet] ZEROBASE (@zerobasezk): Bitcoin retreated on Thursday as renewed unease over technology stocks weighed on risk appetite, with persistent U.S. spot ETF withdrawals adding pressure. The cryptocurrency fell as much as 1.4 percent and traded near $73,500, while other digital assets weakened alongside U.S. stock futures. Those futures came under strain as leadership turmoil at Nvidia dragged on the AI trade that has supported risk appetite this year. Nvidia shares slumped as much as 10 percent after reports that the company is seeking potential replacements for CEO Jensen Huang amid accounts of multiple extramarital affairs, including one involving a woman suspected of spying for China. The decline extends a faltering recovery from Bitcoin’s 2026 low below $58,000 in July. Earlier in the week it hit a three-month low after hotter-than-expected U.S. inflation data raised odds of further Federal Reserve rate increases. Spot Bitcoin ETFs have now seen five consecutive sessions of net outflows totaling roughly $1.44 billion, with nearly $300 million exiting on the latest day. BlackRock’s iShares Bitcoin Trust accounted for most of the redemptions as institutions trimmed exposure. Although cumulative inflows since launch remain large, the streak has pushed year-to-date flows negative for the first time in 2026 and highlighted weak fresh demand. Macro conditions reinforce the caution. October CPI rose 0.4 percent month-over-month, exceeding forecasts and leaving core measures elevated. Markets price a high probability of another quarter-point Fed hike in December, with some even contemplating a larger move if pressures persist. Treasury yields have risen, at times approaching 5 percent, tightening conditions and raising the opportunity cost of holding non-yielding assets. Stronger jobs data and a firmer dollar have added to the restraint. In this setting Bitcoin has behaved more like a high-beta risk asset than a pure store of value, moving closely with technology stocks and reacting sharply to any AI-narrative setback. … ``` ## Related tools - [Market Regime](https://www.f1ow.com/docs/tools/research_regime) — What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call. - [Positioning](https://www.f1ow.com/docs/tools/research_positioning) — Who is on the other side of your trade. Up to eight reads on one coin — who is crowded, who is fragile, who is trapped — plus the price levels the whole board is watching. - [Opportunity Scan](https://www.f1ow.com/docs/tools/research_opportunities) — A liquidity-qualified major and mid-cap universe screened on crowding, stress, leverage, compression, trend, location and entry quality. Ranked candidates with disclosed setup rules and entry, stop and target geometry — not a forecast or a proven edge. - [Trade Plan Review](https://www.f1ow.com/docs/tools/research_trade_plan) — Check your entry, stop and target against ATR, perp levels, liquidation distance, fees, slippage and funding. Add account size and risk for sizing, or a placement time to replay a trade from public candles. An interactive ticket in MCP Apps hosts; no orders placed or plans stored. --- # Spot & Perp Quotes (`market_quotes`) > Spot and perp mark side by side, with funding, open interest, long/short ratio and the day's liquidations. Five providers merged into one snapshot, cached for thirty seconds. - Category: Market data - MCP tool: `market_quotes` - REST: `GET /market/quotes` - 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/market_quotes ## What it does Per-coin market snapshot (spot price, perpetual mark price, 24h change, funding rate, open interest, long/short ratio, 24h liquidations), merged across providers. Spot and perp prices are separate fields (spot from spot-market providers, perp mark from the perp venue); they differ by the basis. Pass 'symbols' to filter to specific coins; omit it for every covered coin. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `symbols` | string[] | query | no | Coin symbols to include, e.g. ["BTC","ETH"]. Omit for all covered coins. | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/market/quotes?symbols=BTC,ETH,SOL" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "market_quotes", "arguments": { "symbols": [ "BTC", "ETH", "SOL" ] } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/market/quotes?symbols=BTC,ETH,SOL", { 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/market/quotes?symbols=BTC,ETH,SOL", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "market_quotes", "arguments": { "symbols": [ "BTC", "ETH", "SOL" ] } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "market_quotes", "arguments": { "symbols": [ "BTC", "ETH", "SOL" ] }, "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/market/quotes?symbols=BTC,ETH,SOL" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "quotes": [ { "fundingRatePct": 0.0002105, "liquidation24hUsd": 918621983.506613, "longShortRatio24h": 3.32, "marketCapUsd": 1379122275188, "openInterestUsd": 47725277621.5434, "perpPriceUsd": 68654, "priceChangePct24h": -6.79676, "priceUsd": 68591, "spotPriceUsd": 68591, "symbol": "BTC" }, { "fundingRatePct": -0.000259375, "liquidation24hUsd": 287675173.946331, "longShortRatio24h": 3.73, "marketCapUsd": 236200313080, "openInterestUsd": 23840041160.8518, "perpPriceUsd": 1935.3, "priceChangePct24h": -5.70444, "priceUsd": 1933.15, "spotPriceUsd": 1933.15, "symbol": "ETH" }, { "fundingRatePct": -0.000615, "liquidation24hUsd": 57752900.9362416, "longShortRatio24h": 3.44, "marketCapUsd": 47187721491, "openInterestUsd": 4747136219.8862, "perpPriceUsd": 79.953, "priceChangePct24h": -3.74663, "priceUsd": 79.82, "spotPriceUsd": 79.82, "symbol": "SOL" } ], "generatedAt": "2026-11-13T08:05:39.3218993+00:00" } ``` Over MCP the text report a model reads comes with it: ```text BTC: spot $68591.00 | perp $68654.00 | 24h -6.80% | mcap $1.38T | funding +0.0002% | OI $47.73B | L/S 3.32 | liq 24h $918.62M ETH: spot $1933.15 | perp $1935.30 | 24h -5.70% | mcap $236.20B | funding -0.0003% | OI $23.84B | L/S 3.73 | liq 24h $287.68M SOL: spot $79.8200 | perp $79.9530 | 24h -3.75% | mcap $47.19B | funding -0.0006% | OI $4.75B | L/S 3.44 | liq 24h $57.75M ``` ## Related tools - [Candles](https://www.f1ow.com/docs/tools/market_candles) — Spot or perpetual OHLCV candles with venue routing and fallback, for the timeframes your analysis needs. For months of paged candles or derivatives series, use Bulk History. - [Bulk History](https://www.f1ow.com/docs/tools/market_history) — Paged spot/perp candles, aggregate open interest, funding or long/short liquidations. Up to 1,000 rows per call with a backward-page cursor, explicit time bounds and a forming-row flag — for historical research and backtests. - [Market Overview](https://www.f1ow.com/docs/tools/market_overview) — The global frame in one read: total market cap, BTC and ETH dominance, Fear & Greed, Altcoin Season. - [Top Movers](https://www.f1ow.com/docs/tools/market_top_movers) — The day's ranked gainers and losers, plus the quieter names already trending more than five percent. --- # Candles (`market_candles`) > Spot or perpetual OHLCV candles with venue routing and fallback, for the timeframes your analysis needs. For months of paged candles or derivatives series, use Bulk History. - Category: Market data - MCP tool: `market_candles` - REST: `GET /market/candles/{symbol}` - 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/market_candles ## What it does OHLC(V) candle history for a coin by symbol (e.g. 'ETH', 'BTC'). 'interval' picks the candle size (1m|5m|15m|30m|1h|4h|12h|1d|1w, default 1d); 'limit' the number of candles (default 100, max 400); 'market' picks the series — 'spot' (major exchange spot books, then market aggregators), 'perp' (major perpetual venues — perpetual marks), or 'auto' (default: spot preferred; perp when spot fails, or when spot's history is shorter than the request and than 210 candles while perp's is materially longer — e.g. a coin whose spot pair listed recently). spot/perp are hard constraints and error rather than substitute. The response labels the market, interval and source actually delivered, includes USD volume when the source carries it, and flags a still-forming last candle. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `symbol` | string | path | yes | Coin symbol, e.g. 'ETH' or 'BTC' | | `interval` | string | query | no | Candle size. Default 1d. One of: `1m`, `5m`, `15m`, `30m`, `1h`, `4h`, `12h`, `1d`, `1w`. | | `market` | string | query | no | Which market's series: spot exchange trades, perpetual-futures marks, or auto (spot preferred; perp when spot fails or its history is too short). Default auto. One of: `spot`, `perp`, `auto`. | | `limit` | integer | query | no | Number of candles, newest last. Default 100, max 400. | | `days` | integer | query | no | DEPRECATED: trailing window in days; use interval+limit instead. Ignored when interval is given. | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/market/candles/BTC?interval=4h&market=perp&limit=50" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "market_candles", "arguments": { "symbol": "BTC", "interval": "4h", "market": "perp", "limit": 50 } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/market/candles/BTC?interval=4h&market=perp&limit=50", { 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/market/candles/BTC?interval=4h&market=perp&limit=50", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "market_candles", "arguments": { "symbol": "BTC", "interval": "4h", "market": "perp", "limit": 50 } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "market_candles", "arguments": { "symbol": "BTC", "interval": "4h", "market": "perp", "limit": 50 }, "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/market/candles/BTC?interval=4h&market=perp&limit=50" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "candles": [ { "asOfAt": "2026-11-05T04:00:00.0000000+00:00", "closeUsd": 80355, "highUsd": 80775, "lowUsd": 80285, "openUsd": 80509, "timestampMs": 1793851200000, "volumeUsd": 156364778.46495 }, { "asOfAt": "2026-11-05T08:00:00.0000000+00:00", "closeUsd": 80399, "highUsd": 80636, "lowUsd": 80233, "openUsd": 80359, "timestampMs": 1793865600000, "volumeUsd": 156830443.61633 }, { "asOfAt": "2026-11-05T12:00:00.0000000+00:00", "closeUsd": 76044, "highUsd": 80400, "lowUsd": 75538, "openUsd": 80400, "timestampMs": 1793880000000, "volumeUsd": 2069600083.75488 }, { "asOfAt": "2026-11-05T16:00:00.0000000+00:00", "closeUsd": 76370, "highUsd": 77036, "lowUsd": 75672, "openUsd": 76047, "timestampMs": 1793894400000, "volumeUsd": 1276101643.488 }, { "asOfAt": "2026-11-05T20:00:00.0000000+00:00", "closeUsd": 76078, "highUsd": 76423, "lowUsd": 75189, "openUsd": 76370, "timestampMs": 1793908800000, "volumeUsd": 834850793.80466 }, { "asOfAt": "2026-11-06T00:00:00.0000000+00:00", "closeUsd": 75890, "highUsd": 76400, "lowUsd": 75760, "openUsd": 76078, "timestampMs": 1793923200000, "volumeUsd": 277894880.8062 }, "… 44 more" ], "coinId": "BTC", "interval": "4h", "lastCandleIsPartial": true, "market": "perp", "source": "Hyperliquid", "symbol": "BTC", "generatedAt": "2026-11-13T08:00:00.0000000+00:00" } ``` Over MCP the text report a model reads comes with it: ```text === BTC — 4h × 50 candles (perp, Hyperliquid) === Window 2026-11-05 04:00 → 2026-11-13 08:00 UTC | change -14.73% | close $80509.00 → $68648.00 Range $67474.00 – $80775.00 | last close 9% of range Volume (last closed candle) $1.20B vs 20-candle avg $567.49M (2.1x) Last candle (2026-11-13 08:00) is still forming — partial, not a closed 4h Last 14 candles: 2026-11-11 04:00 O $73747.00 H $74096.00 L $73456.00 C $74076.00 V $369.44M 2026-11-11 08:00 O $74076.00 H $74170.00 L $73527.00 C $73963.00 V $414.91M 2026-11-11 12:00 O $73962.00 H $74478.00 L $73360.00 C $73951.00 V $764.81M 2026-11-11 16:00 O $73951.00 H $74750.00 L $73890.00 C $74376.00 V $461.70M 2026-11-11 20:00 O $74377.00 H $74778.00 L $73432.00 C $73979.00 V $503.39M 2026-11-12 00:00 O $73980.00 H $74180.00 L $73549.00 C $73771.00 V $233.73M 2026-11-12 04:00 O $73772.00 H $73829.00 L $73379.00 C $73622.00 V $113.18M 2026-11-12 08:00 O $73623.00 H $73661.00 L $72750.00 C $72930.00 V $319.29M 2026-11-12 12:00 O $72929.00 H $73127.00 L $71227.00 C $71708.00 V $1.50B 2026-11-12 16:00 O $71701.00 H $72214.00 L $71401.00 C $71666.00 V $784.05M 2026-11-12 20:00 O $71667.00 H $71675.00 L $71090.00 C $71448.00 V $425.87M 2026-11-13 00:00 O $71448.00 H $71507.00 L $68521.00 C $68927.00 V $1.49B 2026-11-13 04:00 O $68928.00 H $69351.00 L $67474.00 C $68560.00 V $1.20B 2026-11-13 08:00 O $68560.00 H $68675.00 L $68540.00 C $68648.00 V $8.32M ``` ## Related tools - [Spot & Perp Quotes](https://www.f1ow.com/docs/tools/market_quotes) — Spot and perp mark side by side, with funding, open interest, long/short ratio and the day's liquidations. Five providers merged into one snapshot, cached for thirty seconds. - [Bulk History](https://www.f1ow.com/docs/tools/market_history) — Paged spot/perp candles, aggregate open interest, funding or long/short liquidations. Up to 1,000 rows per call with a backward-page cursor, explicit time bounds and a forming-row flag — for historical research and backtests. - [Market Overview](https://www.f1ow.com/docs/tools/market_overview) — The global frame in one read: total market cap, BTC and ETH dominance, Fear & Greed, Altcoin Season. - [Top Movers](https://www.f1ow.com/docs/tools/market_top_movers) — The day's ranked gainers and losers, plus the quieter names already trending more than five percent. --- # Bulk History (`market_history`) > Paged spot/perp candles, aggregate open interest, funding or long/short liquidations. Up to 1,000 rows per call with a backward-page cursor, explicit time bounds and a forming-row flag — for historical research and backtests. - Category: Market data - MCP tool: `market_history` - REST: `GET /market/history/{symbol}` - x402 price: $0.02 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/market_history ## What it does Bulk history for one coin, one metric per call, in pages: 'price' (OHLCV candles, spot or perp), 'open_interest' (market-wide aggregate USD), 'funding' (OI-weighted rate, %/8h and annualized) or 'liquidations' (market-wide long/short USD per bucket). Returns up to 'limit' rows (default 200, max 1000) at or before 'end' (default now), oldest first, as compact columns + rows; pass the returned nextEndMs as 'end' to fetch the page before it, and 'start' to stop there. Reach: price is full venue history (spot from 2017, futures from 2019) at 1m–1w; derivatives come from an aggregated feed at 4h (about 180 days back), 6h/8h/12h (about 360 days) or 1d/1w (back to 2020) — use 1d for anything older than six months. The newest row may still be forming (newestForming). Use this to pull history; for a read of what is happening now, use the derivatives_* and research_* tools. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `symbol` | string | path | yes | Coin symbol, e.g. "BTC". | | `metric` | string | query | yes | One of: `price`, `open_interest`, `funding`, `liquidations`. | | `interval` | string | query | no | Bucket size. Price: 1m–1w except 6h/8h, default 1d. Derivatives: 4h, 6h, 8h, 12h, 1d or 1w; default 4h (funding 8h). One of: `1m`, `5m`, `15m`, `30m`, `1h`, `4h`, `6h`, `8h`, `12h`, `1d`, `1w`. | | `market` | string | query | no | Price only: spot (default) or perpetual candles. One of: `spot`, `perp`. | | `start` | string | query | no | Earliest time to include: ISO-8601 (UTC if no offset) or Unix ms. Paging stops here. | | `end` | string | query | no | Latest time to include: ISO-8601 or Unix ms. Default now. Pass nextEndMs here to page back. | | `limit` | integer | query | no | Rows per page, 1–1000. Default 200. | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/market/history/BTC?metric=open_interest&interval=1d&limit=30" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "market_history", "arguments": { "symbol": "BTC", "metric": "open_interest", "interval": "1d", "limit": 30 } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/market/history/BTC?metric=open_interest&interval=1d&limit=30", { 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/market/history/BTC?metric=open_interest&interval=1d&limit=30", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "market_history", "arguments": { "symbol": "BTC", "metric": "open_interest", "interval": "1d", "limit": 30 } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "market_history", "arguments": { "symbol": "BTC", "metric": "open_interest", "interval": "1d", "limit": 30 }, "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/market/history/BTC?metric=open_interest&interval=1d&limit=30" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "columns": [ "timeMs", "oiUsd" ], "count": 28, "endMs": 1794557139754, "interval": "1d", "metric": "open_interest", "newestForming": true, "note": "The newest row is still forming; the vendor rewrites it until the bucket closes.", "rows": [ [ 1792022400000, 52691693756 ], [ 1792108800000, 52521968289 ], [ 1792195200000, 52090533349 ], [ 1792281600000, 52274235374 ], [ 1792368000000, 52748196130 ], [ 1792454400000, 53562564956 ], "… 22 more" ], "source": "CoinGlass", "symbol": "BTC", "units": "market-wide (cross-venue) open interest at the bucket close, USD", "generatedAt": "2026-11-13T08:05:40.0107135+00:00" } ``` Over MCP the text report a model reads comes with it: ```text BTC open interest, 1d, 28 rows 2026-10-15 00:00 → 2026-11-13 00:00 UTC (CoinGlass) — market-wide (cross-venue) open interest at the bucket close, USD The newest row is still forming; the vendor rewrites it until the bucket closes. time_utc,oiUsd 2026-10-15 00:00,52691693756 2026-10-16 00:00,52521968289 2026-10-17 00:00,52090533349 2026-10-18 00:00,52274235374 2026-10-19 00:00,52748196130 2026-10-20 00:00,53562564956 2026-10-21 00:00,55947787989 2026-10-22 00:00,54173016674 2026-10-23 00:00,53575847638 2026-10-24 00:00,54112514872 2026-10-25 00:00,53193603546 2026-10-26 00:00,54218670794 2026-10-27 00:00,54635529075 2026-10-28 00:00,54132009384 2026-10-29 00:00,53452685391 2026-10-30 00:00,53693030562 2026-10-31 00:00,52906757502 2026-11-01 00:00,53103411055 2026-11-02 00:00,53878920611 2026-11-03 00:00,52430828965 2026-11-04 00:00,53187479335 2026-11-05 00:00,52014076734 2026-11-06 00:00,51761207334 2026-11-09 00:00,52162852946 2026-11-10 00:00,51920511741 2026-11-11 00:00,50499091321 2026-11-12 00:00,50949001404 2026-11-13 00:00,47722081269 ``` ## Related tools - [Spot & Perp Quotes](https://www.f1ow.com/docs/tools/market_quotes) — Spot and perp mark side by side, with funding, open interest, long/short ratio and the day's liquidations. Five providers merged into one snapshot, cached for thirty seconds. - [Candles](https://www.f1ow.com/docs/tools/market_candles) — Spot or perpetual OHLCV candles with venue routing and fallback, for the timeframes your analysis needs. For months of paged candles or derivatives series, use Bulk History. - [Market Overview](https://www.f1ow.com/docs/tools/market_overview) — The global frame in one read: total market cap, BTC and ETH dominance, Fear & Greed, Altcoin Season. - [Top Movers](https://www.f1ow.com/docs/tools/market_top_movers) — The day's ranked gainers and losers, plus the quieter names already trending more than five percent. --- # Market Overview (`market_overview`) > The global frame in one read: total market cap, BTC and ETH dominance, Fear & Greed, Altcoin Season. - Category: Market data - MCP tool: `market_overview` - REST: `GET /market/overview` - x402 price: $0.01 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/market_overview ## What it does Global market snapshot: total market cap, BTC/ETH dominance, Fear & Greed index, and Altcoin Season index ## Parameters None. ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/market/overview" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "market_overview", "arguments": {} } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/market/overview", { 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/market/overview", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "market_overview", "arguments": {} } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "market_overview", "arguments": {}, "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/market/overview" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "altcoinSeasonIndex": 47, "btcDominancePct": 59.637379558453, "ethDominancePct": 10.214333791008, "fearGreedLabel": "Extreme Fear", "fearGreedValue": 20, "totalMarketCapUsd": 2313671494496.61, "totalVolume24hUsd": 95103917342.86, "generatedAt": "2026-11-13T08:05:38.6753119+00:00" } ``` Over MCP the text report a model reads comes with it: ```text === Global Market Overview === Total Market Cap: $2.31T 24h Volume: $95.10B BTC Dominance: 59.64% ETH Dominance: 10.21% Fear & Greed: 20/100 — Extreme Fear Altcoin Season Index: 47/100 — Neutral ``` ## Related tools - [Spot & Perp Quotes](https://www.f1ow.com/docs/tools/market_quotes) — Spot and perp mark side by side, with funding, open interest, long/short ratio and the day's liquidations. Five providers merged into one snapshot, cached for thirty seconds. - [Candles](https://www.f1ow.com/docs/tools/market_candles) — Spot or perpetual OHLCV candles with venue routing and fallback, for the timeframes your analysis needs. For months of paged candles or derivatives series, use Bulk History. - [Bulk History](https://www.f1ow.com/docs/tools/market_history) — Paged spot/perp candles, aggregate open interest, funding or long/short liquidations. Up to 1,000 rows per call with a backward-page cursor, explicit time bounds and a forming-row flag — for historical research and backtests. - [Top Movers](https://www.f1ow.com/docs/tools/market_top_movers) — The day's ranked gainers and losers, plus the quieter names already trending more than five percent. --- # Top Movers (`market_top_movers`) > The day's ranked gainers and losers, plus the quieter names already trending more than five percent. - Category: Market data - MCP tool: `market_top_movers` - REST: `GET /market/movers` - x402 price: $0.01 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/market_top_movers ## What it does Ranked 24h gainers, losers, and trend candidates (>+5% move) ## Parameters None. ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/market/movers" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "market_top_movers", "arguments": {} } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/market/movers", { 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/market/movers", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "market_top_movers", "arguments": {} } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "market_top_movers", "arguments": {}, "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/market/movers" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "gainers": [ { "change24hPct": 219998.182919569, "marketCapRank": 269, "marketCapUsd": 84916162.9650324, "name": "MowCat", "priceUsd": 0.0849161629650324, "symbol": "MOW" }, { "change24hPct": 92.050102991872, "marketCapRank": 255, "marketCapUsd": 107874780.023218, "name": "AKEDO", "priceUsd": 0.0047321283115959, "symbol": "AKE" }, { "change24hPct": 66.211269830056, "marketCapRank": 327, "marketCapUsd": 54280141.6882419, "name": "Lombard", "priceUsd": 0.13687663782693, "symbol": "BARD" }, { "change24hPct": 18.829105136573, "marketCapRank": 259, "marketCapUsd": 100291395.746346, "name": "Magma Finance", "priceUsd": 0.326815138888298, "symbol": "MAGMA" }, { "change24hPct": 12.931017185835, "marketCapRank": 516, "marketCapUsd": 26004543.3306826, "name": "Osmosis", "priceUsd": 0.0375451632551988, "symbol": "OSMO" }, { "change24hPct": 15.743904349677, "marketCapRank": 522, "marketCapUsd": 26699953.2275724, "name": "DODO", "priceUsd": 0.0266999532275724, "symbol": "DODO" }, "… 4 more" ], "losers": [ { "change24hPct": -41.198829794126, "marketCapRank": 577, "marketCapUsd": 22744456.1486829, "name": "Janction", "priceUsd": 0.00219965726794725, "symbol": "JCT" }, { "change24hPct": -26.851297151804, "marketCapRank": 232, "marketCapUsd": 175818306.38763, "name": "Alaya Governance Token", "priceUsd": 0.0539334465980739, "symbol": "AGT" }, { "change24hPct": -23.833145695725, "marketCapRank": 361, "marketCapUsd": 45993649.8351254, "name": "Bulla", "priceUsd": 0.0459936498351254, "symbol": "BULLA" }, { "change24hPct": -23.13320650814, "marketCapRank": 678, "marketCapUsd": 17566257.7300614, "name": "Catecoin (cate.meme)", "priceUsd": 0.0182191320841393, "symbol": "CATE" }, { "change24hPct": -18.429294851786, "marketCapRank": 553, "marketCapUsd": 25002951.445915, "name": "Orbio.so", "priceUsd": 0.0263188989257997, "symbol": "ORBIO" }, { "change24hPct": -17.856995475676, "marketCapRank": 638, "marketCapUsd": 19379607.3333289, "name": "Unitas", "priceUsd": 0.13273703652965, "symbol": "UP" }, "… 4 more" ], "trendCandidates": [ "MOW", "AKE", "BARD", "MAGMA", "OSMO", "DODO", "… 4 more" ], "generatedAt": "2026-11-13T08:05:39.4856886+00:00" } ``` Over MCP the text report a model reads comes with it: ```text === Top Gainers (24h) === #1 MOW MowCat $0.08492 +219998.18% mcap $84.92M #2 AKE AKEDO $0.004732 +92.05% mcap $107.87M #3 BARD Lombard $0.1369 +66.21% mcap $54.28M #4 MAGMA Magma Finance $0.3268 +18.83% mcap $100.29M #5 OSMO Osmosis $0.03755 +12.93% mcap $26.00M #6 DODO DODO $0.02670 +15.74% mcap $26.70M #7 ARIA AriaAI $0.2172 +11.14% mcap $95.56M #8 DNA NeoSoul $0.1780 +13.64% mcap $16.02M #9 HUMA Huma Finance $0.008419 +12.72% mcap $29.84M #10 XPR XPR Network $0.001877 +11.74% mcap $57.10M === Top Losers (24h) === #1 JCT Janction $0.002200 -41.20% mcap $22.74M #2 AGT Alaya Governance Token $0.05393 -26.85% mcap $175.82M #3 BULLA Bulla $0.04599 -23.83% mcap $45.99M #4 CATE Catecoin (cate.meme) $0.01822 -23.13% mcap $17.57M #5 ORBIO Orbio.so $0.02632 -18.43% mcap $25.00M #6 UP Unitas $0.1327 -17.86% mcap $19.38M #7 NBISB Nebius Tokenized bStocks $125.8894 -16.84% mcap $12.76M #8 HOOKR Hookr.fun $0.01967 -15.98% mcap $19.67M #9 BANANAS31 Banana For Scale $0.004569 -15.21% mcap $45.69M #10 HAEDAL Haedal Protocol $0.02258 -14.19% mcap $12.61M === Trend Candidates (>+5% 24h) === MOW +219998.18%, AKE +92.05%, BARD +66.21%, MAGMA +18.83%, OSMO +12.93%, DODO +15.74%, ARIA +11.14%, DNA +13.64%, HUMA +12.72%, XPR +11.74% ``` ## Related tools - [Spot & Perp Quotes](https://www.f1ow.com/docs/tools/market_quotes) — Spot and perp mark side by side, with funding, open interest, long/short ratio and the day's liquidations. Five providers merged into one snapshot, cached for thirty seconds. - [Candles](https://www.f1ow.com/docs/tools/market_candles) — Spot or perpetual OHLCV candles with venue routing and fallback, for the timeframes your analysis needs. For months of paged candles or derivatives series, use Bulk History. - [Bulk History](https://www.f1ow.com/docs/tools/market_history) — Paged spot/perp candles, aggregate open interest, funding or long/short liquidations. Up to 1,000 rows per call with a backward-page cursor, explicit time bounds and a forming-row flag — for historical research and backtests. - [Market Overview](https://www.f1ow.com/docs/tools/market_overview) — The global frame in one read: total market cap, BTC and ETH dominance, Fear & Greed, Altcoin Season. --- # Trending (`market_trending`) > What the market is looking up right now, ranked. - Category: Market data - MCP tool: `market_trending` - REST: `GET /market/trending` - x402 price: $0.005 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/market_trending ## What it does Lists the currently trending cryptocurrencies ## Parameters None. ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/market/trending" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "market_trending", "arguments": {} } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/market/trending", { 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/market/trending", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "market_trending", "arguments": {} } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "market_trending", "arguments": {}, "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/market/trending" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "coins": [ { "marketCapRank": 967, "name": "ni hao cat", "symbol": "MIHAO" }, { "marketCapRank": 984, "name": "AudaCity", "symbol": "DACITYCOIN" }, { "marketCapRank": 1, "name": "Bitcoin", "symbol": "BTC" }, { "marketCapRank": 2, "name": "Ethereum", "symbol": "ETH" }, { "marketCapRank": 11, "name": "Zcash", "symbol": "ZEC" }, { "marketCapRank": 10, "name": "Hyperliquid", "symbol": "HYPE" }, "… 9 more" ], "generatedAt": "2026-11-13T08:05:39.0819607+00:00" } ``` Over MCP the text report a model reads comes with it: ```text MIHAO - ni hao cat (rank #967) DACITYCOIN - AudaCity (rank #984) BTC - Bitcoin (rank #1) ETH - Ethereum (rank #2) ZEC - Zcash (rank #11) HYPE - Hyperliquid (rank #10) SOL - Solana (rank #7) SUI - Sui (rank #28) LIT - Lighter (rank #79) TAO - Bittensor (rank #38) AKE - Akedo (rank #251) AERO - Aero (rank #118) MON - Monad (rank #162) SANC - Sanctum (rank #442) PENGU - Pudgy Penguins (rank #116) ``` ## Related tools - [Spot & Perp Quotes](https://www.f1ow.com/docs/tools/market_quotes) — Spot and perp mark side by side, with funding, open interest, long/short ratio and the day's liquidations. Five providers merged into one snapshot, cached for thirty seconds. - [Candles](https://www.f1ow.com/docs/tools/market_candles) — Spot or perpetual OHLCV candles with venue routing and fallback, for the timeframes your analysis needs. For months of paged candles or derivatives series, use Bulk History. - [Bulk History](https://www.f1ow.com/docs/tools/market_history) — Paged spot/perp candles, aggregate open interest, funding or long/short liquidations. Up to 1,000 rows per call with a backward-page cursor, explicit time bounds and a forming-row flag — for historical research and backtests. - [Market Overview](https://www.f1ow.com/docs/tools/market_overview) — The global frame in one read: total market cap, BTC and ETH dominance, Fear & Greed, Altcoin Season. --- # Coin Details (`market_coin_details`) > Price, market cap, all-time high and low, and the project's own description of itself. - Category: Market data - MCP tool: `market_coin_details` - REST: `GET /market/coins/{coin_id}` - x402 price: $0.01 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/market_coin_details ## What it does Fetches price, market cap, ATH/ATL and description for a coin by its coin ID (e.g. 'bitcoin', 'ethereum') or by ticker symbol (e.g. 'BTC', 'WAVES'). IDs are case-sensitive; a symbol, or an ID in the wrong case, is resolved by search and the response names the ID actually fetched, so a resolution is never silent. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `coin_id` | string | path | yes | Coin ID (e.g. 'bitcoin') or ticker symbol (e.g. 'BTC'). IDs are case-sensitive; symbols are resolved by search. | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/market/coins/bitcoin" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "market_coin_details", "arguments": { "coin_id": "bitcoin" } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/market/coins/bitcoin", { 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/market/coins/bitcoin", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "market_coin_details", "arguments": { "coin_id": "bitcoin" } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "market_coin_details", "arguments": { "coin_id": "bitcoin" }, "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/market/coins/bitcoin" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "athUsd": 126080, "atlUsd": 67.81, "change24hPct": -6.7651, "description": "Bitcoin is the world's first decentralized cryptocurrency, created in 2009 by the pseudonymous Satoshi Nakamoto. It enables peer-to-peer electronic cash transactions without intermediaries like banks or governments, operating on a blockchain secured by Proof of Work mining and the SHA-256 cryptographic algorithm. \n\nWith a fixed supply cap of 21 million coins and programmatic halvings every four ye…", "homepage": "http://www.bitcoin.org", "id": "bitcoin", "marketCapUsd": 1379930220362, "name": "Bitcoin", "priceUsd": 68623, "symbol": "BTC", "generatedAt": "2026-11-13T08:05:38.7785282+00:00" } ``` Over MCP the text report a model reads comes with it: ```text Bitcoin (BTC) Bitcoin is the world's first decentralized cryptocurrency, created in 2009 by the pseudonymous Satoshi Nakamoto. It enables peer-to-peer electronic cash transactions without intermediaries like banks or governments, operating on a blockchain secured by Proof of Work mining and the SHA-256 cryptographic algorithm. With a fixed supply cap of 21 million coins and programmatic halvings every four ye... Price: $68623.00 | 24h: -6.77% | MCap: $1.38T ATH: $126080.00 | ATL: $67.8100 Homepage: http://www.bitcoin.org ``` ## Related tools - [Spot & Perp Quotes](https://www.f1ow.com/docs/tools/market_quotes) — Spot and perp mark side by side, with funding, open interest, long/short ratio and the day's liquidations. Five providers merged into one snapshot, cached for thirty seconds. - [Candles](https://www.f1ow.com/docs/tools/market_candles) — Spot or perpetual OHLCV candles with venue routing and fallback, for the timeframes your analysis needs. For months of paged candles or derivatives series, use Bulk History. - [Bulk History](https://www.f1ow.com/docs/tools/market_history) — Paged spot/perp candles, aggregate open interest, funding or long/short liquidations. Up to 1,000 rows per call with a backward-page cursor, explicit time bounds and a forming-row flag — for historical research and backtests. - [Market Overview](https://www.f1ow.com/docs/tools/market_overview) — The global frame in one read: total market cap, BTC and ETH dominance, Fear & Greed, Altcoin Season. --- # Coin Universe (`market_coins`) > Every symbol the market-data providers can answer for, so your agent knows what it can ask about before it asks. - Category: Market data - MCP tool: `market_coins` - REST: `GET /market/coins` - x402 price: $0.01 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/market_coins ## What it does Lists the coin symbols available from the market-data provider ## Parameters None. ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/market/coins" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "market_coins", "arguments": {} } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/market/coins", { 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/market/coins", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "market_coins", "arguments": {} } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "market_coins", "arguments": {}, "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/market/coins" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "coins": [ "BTC", "ETH", "SOL", "HYPE", "XRP", "ZEC", "… 18802 more" ], "generatedAt": "2026-11-13T08:05:40.5166051+00:00" } ``` Over MCP the text report a model reads comes with it: ```text BTC, ETH, SOL, HYPE, XRP, ZEC, XAU, NVDA, BNB, SPCX, DOGE, XAUT, SNDK, NEAR, SOXL, XAG, GOOGL, CL, SKHYNIX, MU, SUI, SP500, LINK, UNI, ENA, ADA, ASTER, LIT, AVAX, SKHY, SILVER, LTC, XMR, BRENTOIL, PAXG, INTC, CRCL, GOLD, TRX, PEPE, WLD, QQQ, WLFI, SKHX, AAVE, XYZ100, TAO, BZ, BCH, MSTR, AAPL, ANTHROPIC, ONDO, XLM, TSLA, ARB, PUMP, AMD, 1000PEPE, ZRO, NBIS, DOT, HBAR, DRAM, KORU, INJ, TRUMP, XPL, GRAM, FIL, SPY, VVV, META, ANT, FARTCOIN, MSFT, AERO, ETHFI, FF, ICP, PENGU, SOXS, CRV, AKE, BTW, NATGAS, UKOIL, UNITREE, STRK, APT, ETC, PONS, PIEVERSE, TIA, USELESS, GRASS, POL, FET, ATOM, MON, AMZN, QNT, LDO, EWY, COIN, CBRS, ARIA, OPENAI, VIRTUAL, OP, SNXX, TQQQ, LITE, WIF, CAP, JUP, MRVL, CXMT, SPX500, PENDLE, USOIL, JPY, AVGO, STRC, kPEPE, DASH, NVIDIA, RENDER, SEI, CRWV, SAMSUNG, KITE, SMSN, JCT, PUMPFUN, CC, ORCL, MORPHO, IDOL, MNT, TSM, ZHIPU, KAS, ALGO, HOOD, AGT, BABA, INIT, 币安人生, EUR, RBLX, COPPER, PYTH, MRNA, SOON, BARD, EVAA, BEAT, SKY, 1000BONK, MEGA, XPT, SHIB, BAT, IBM, USDC, SPX, AAOI, WDC, SAND, VET, MUBARAK, ONE, CASHCAT, CHIP, STX, CAKE, WBT, JTO, NIGHT, LLY, PLTR, NAS100, CAD, BLESS, GBP, ARX, RKLB, OKB, EIGEN, MAGMA, SQQQ, 1000SHIB, BR, ORDI, PROM, INTW, EDGE, Q, 牛来, ZAMA, IREN, LAB, TRB, BMNR, NFLX, XPD, BE, TA, UAI, W, BEAMX, AKT, PLUME, KAITO, S, MUU, AR, COMP, AIN, DELL, JST, LYN, 龙虾, COHR, BRKB, APR, COST, H, PURRDAT, OPG, BTCDOM, IMX, GALA, ERA, ICNT, BGB, HUMA, CRO, QCOM, SYRUP, AIOT, JELLYJELLY, NIL, ZHONGJI, MAGIC, MINIMAX, ARM, KAVA, SUN, APE, CFX, TWT, RIVER, 0G, CHF, LUNC, HOME, GRVT, LSK, ZEN, SIREN, TAG, AXS, TRUTH, ACE, ALLO, DYDX, ZK, IRYS, MVLL, ESPORTS, HANA, CHZ, KGEN, LIGHT, BOME, SOPH, ENS, MANA, JASMY, AMAT, B2, EWZ, ZEST, BAN, FOLKS, O, TRADOOR, MET, CT, RUNE, MARSCOIN, GIGGLE, SKYAI, PURR, HNT, BSB, XPIN, SIGN, KIOXIA, POPCAT, MYX, KSTR, RAVE, B, RAY, SENT, BULLA, AXTI, POWER, BLUR, SKR, PIPPIN, FLOKI, BIO, M, MINA, OPEN, APP, PREDICT, ASML, BEAM, RSR, DOOD, BANK, ZEREBRO, MA, SMCI, CYBER, STABLE, BERA, GRT, ZBT, TUT, FORM, GLW, BLUAI, GPS, DUSK, SUSHI, DOS, ARC, MERL, US100, BNC, TTWO, BTR, DEXE, SYN, XTZ, AVNT, HMSTR, ARKM, IOTA, ELSA, COAI, HK0700, ON, ALCH, TRIA, BASED, ALT, OURA, EGLD, ATH, PEOPLE, LINEA, BIRB, PNUT, MANTA, ZORA, TRY, AT, ROSE, MMT, LUMIA, US, UVXY, BMT, BBX, PARTI, NOK, SMH, OGN, COINBASE, COTI, TLT, USUAL, TAKE, BANANAS31, ONG, NAORIS, NXPC, BX, NEO, CKB, A, REZ, US30, THETA, KOMA, ZETA, VELVET, ACU, AIA, QTUM, CVX, TENCENT, SAGA, SAPIEN, ZKSYNC, COLLECT, USAR, TRUMPSOL, AIO, GMX, AMDSTOCK, ACT, NG, NOW, NMR, IOST, TESLA, UB, MOODENG, RIF, ZIL, KMNO, PHAROS, SNX, IO, ORCA, TURBO, RE, HYUNDAI, XAN, PHA, SKHYNIXUSD, WTI, ASTS, NOT, FLUID, BSV, MOONSHOT, WAL, PROVE, ESP, GPRO, SNOW, TRUMPOFFICIAL, GENIUS, DNA, SUPER, GMT, LONGXIA, ORDER, XAI, HD, RVN, GWEI, LPT, LA, BILL, AMC, FIGHT, 4, BRETT, CLANKER, SAHARA, FILECOIN, EURUSD, STBL, ACN, MOVR, KAIA, UNH, DEEP, 1INCH, GTC, CYS, BABY, CTR, STAR, HAEDAL, PRL, SKUU, kBONK, BICO, RESOLV, DODOX, SPK, EDU, GRIFFAIN, 2Z, CELO, C, SOMI, T, DE, GME, PDD, HOT, ARK, CLO, TSEM, SWARMS, ENJ, BAC, ISRG, NVDL, SLX, NET, OL, AWE, GIGADEV, ENSO, SXT, SHIB1000, ROBO, MELANIA, API3, MASK, LISTA, XNY, TNSR, CFG, SAFE, YGG, PLAY, RED, OPN, DGAI, LASERTEC, IONQ, HK1810, YFI, EDEN, KAT, 1000RATS, FHE, GUA, FLOW, ONT, ADBE, FOGO, NOM, AIXBT, SSV, AVA, GOAT, TMF, RAYSOL, AUCTION, MSTU, RLC, EWT, ID, KO, INX, AEVO, SOLV, NEM, KSM, XDP, TQQQX, AXIS, XTI, WMT, CHILLGUY, APEX, FLOCK, SPACE, SONIC, HEMI, AZTEC, EWJ, 1000FLOKI, CDNS, RAYDIUM, XLE, MEME, NKE, CATI, MEW, VLO, SQD, NGAS, DRIFT, IN, SHAZ, FLUX, ZRX, AGLD, NVO, ALAB, STO, ANIME, SAMSUNGUSD, ME, MOVE, ZKP, KERNEL, DYM, RDDT, JP225, HIMS, ALICE, XOM, SHELL, WET, EUL, VST, METIS, MCD, TREE, NEIRO, AVAAI, NVDAX, YAGEO, BB, COW, JPM, BOT, TAC, HEI, WOO, AXL, SOXX, STONK, POWR, ONDS, GUN, 哈基米, PORTAL, FLNC, CROSS, SONY, CORE, TOWNS, QNTX, RECALL, VTHO, TRUST, UBER, G, BAND, PIXEL, XIAOMI, LRCX, 1000LUNC, CRDO, COOKIE, TAIKO, MAVIA, ETHBTC, 我踏马来了, BREV, AEON, HOLO, F, WCT, GAS, CSOPSKHYNIX2L, kSHIB, URNM, UMA, GLM, SKDD, POPMART, BROCCOLI, ZM, HYPER, PUNDIX, SFP, XCU, TLM, KII, PROS, DATAIP, BONK, XDC, VANA, LAYER, BLEND, GS, ANKR, CTSI, MANTRA, BKNG, SKL, MIRA, ACH, DATA, XVG, OKTA, PLATINUM, BSP, OSCR, BIGTIME, ALPINE, FTNT, RARE, MTSI, BROCCOLIF3B, MAV, CIEN, IWM, C98, CGPT, ASTR, 1000CAT, ARPA, STXX, DOGS, NDX100, LUNA, CRWD, YB, WAVES, BANANA, ETHW, US500, V, STEEM, RIVN, THE, SLB, KOSPI, KUAISHOU, KNC, NES, GEV, AGPU, CVC, POLYX, TER, CP, ZKC, MOCA, OG, TST, BA, CAPETH, SHOP, IOTX, FLR, UP, NCCOGOLD2USD, ILV, VRT, GDX, FWDI, USDBRL, ASR, GGLL, SOFI, SECZ, FRAX, 1MBABYDOGE, HPQ, NCCO1OILWTI2USD, AUD, NCSINASDAQ1002USD, USDJPY, XTEN, NCCOXAG2USD, CARV, SOFTBANK, LNG, SPORTFUN, NEWT, MTL, CRM, AIGENSYN, BRL, AEHR, CETUS, GOOGLX, 1000000MOG, 1000XEC, MSTRX, RAM, TWST, CHR, SCR, DRV, IBIT, BAS, LQTY, HIVE, BYD, CSCO, DIA, PANW, AZN, KLAC, VELO, SPCXX, CAT, XCN, TZA, HPE, TURTLE, CSTOCK, DJT, SPYX, TSLL, FIDA, LYTE, SLP, CATSTOCK, DOLO, EBAY, XVS, LUNA2, RPL, 1000SATS, KR200, DIS, MEITUAN, STXSTOCK, OFC, SHEIN, USTC, MARA, ALLINDEX, OKLO, RECRUIT, BNT, SPELL, CELR, DHR, WAXP, INTU, DKNG, MEDIATEK, APD, WEN, NVD, TEM, MONAD, BEL, RTXSTOCK, IBKR, JOE, JIO, RONIN, BROCCOLI714, FUTUON, 1000000BABYDOGE, 1000CHEEMS, 10000SATS, TOSHI, XIAOMIHKD, DISCO, GE, FLY, PEAQ, RDW, XBI, PALLADIUM, GIGADEVICE, 4STOCK, SBUX, RON, PENG, GANG, RLS, FUTU, FLEX, SAMSUNGEM, MP, QQQX, POLYMARKET, GBPUSD, RGTI, XBR, RATS, NAVER, PYPL, BP, ANSEM, ZKJ, TXN, CTK, MELI, BWET, SI, USDKRW, CYPH, ADVANTEST, LIN, TENCENTHKD, SANTOS, JD, KCS, MRK, GT, LGELECTRONICS, 10000NEX, APLD, DDOG, MUSTOCK, HANWHAAERO, OXY, QUANT, TWLO, REDSTONE, CATE, HLT, FLOAT, GLDX, AAPLX, NCSKAPP2USD, NCSKBNY2USD, NCSKHL2USD, NCSKTWLO2USD, NCSKMETA2USD, NCSKOSS2USD, NCSKTBTUSDT, NCSKLYTE2USD, NCSKHAL2USD, NCSKSWKS2USD, NCSKTSLL2USD, NCSKTT2USD, NCSKSMCI2USD, NCSKSBUX2USD, NCSKCVE2USD, NCSKSPOT2USD, NCSKTM2USD, NCSKAPH2USD, NCSKSOXS12USD, NCSKBWET2USD, CSOPSAMSUNG2L, NCSKXBI2USD, NCSKBLK2USD, NCSKNXPI2USD, NCSKJD2USD, NCSKVRT2USD, NCSKMSFT2USD, NCSKMXL2USD, JAGENT, NCSKPWR2USD, NCSKFISV2USD, NCSKCLF2USD, NCSKLITE2USD, NCSKDXYZ2USD, NCSKNBIS2USD, NCSKOKTA2USD, NCSKAZN2USD, NCSKEIDO2USD, NCSKCOST2USD, NCSKARKK2USD, NCSKPCVX2USD, NCSKMETU2USD, NCSKMVLL2USD, NCSKAMC2USD, NCSKLUNR2USD, NCSKBULL2USD, KNOTS, NCSKFSLY2USD, NCFXGBP2CHF, NCSIRUSSELL20002USD, NCSKRGTI2USD, NCSKITA2USD, NCSKTTMI2USD, NCSKMRNX2USD, NCSKNEM2USD, NCSKMA2USD, NCSKUPS2USD, NCSKVICR2USD, NCSKASML2USD, NCSKFDX2USD, NCSKSYK2USD, NCSKNOC2USD, NCSKTZA2USD, NCSKCIFR2USD, NCSKDIA2USD, NCSKMP2USD, NCSKDHI2USD, NCSKGDDY2USD, NCSKCRDO2USD, NCSKSNOW2USD, NCSKTE2USD, NCSKURI2USD, NCSKUSDE2USD, NCSKMMM2USD, NCSKJNJ2USD, NCSKTER2USD, NCSKSTM2USD, NCSKULTA2USD, NCSKFPS2USD, NCSKUGL2USD, NCSKAEP2USD, NCSKACN2USD, NCSKEL2USD, NCSKCONL2USD, NCSKBBD2USD, NCSKTSLA2USD, NCSKCAI2USD, NCSKTQQQ2USD, NCSKFRMI2USD, NCSIKOSPI2USD, NCSKMAGS2USD, NCSKPOLYMARKET2USD, NCSKNETFLIX2USD, NCSKXME2USD, NCSKORCX2USD, USDEX, NCSKADI2USD, NCCOXAUZAR2USD, NCSKBOT2US … ``` ## Related tools - [Spot & Perp Quotes](https://www.f1ow.com/docs/tools/market_quotes) — Spot and perp mark side by side, with funding, open interest, long/short ratio and the day's liquidations. Five providers merged into one snapshot, cached for thirty seconds. - [Candles](https://www.f1ow.com/docs/tools/market_candles) — Spot or perpetual OHLCV candles with venue routing and fallback, for the timeframes your analysis needs. For months of paged candles or derivatives series, use Bulk History. - [Bulk History](https://www.f1ow.com/docs/tools/market_history) — Paged spot/perp candles, aggregate open interest, funding or long/short liquidations. Up to 1,000 rows per call with a backward-page cursor, explicit time bounds and a forming-row flag — for historical research and backtests. - [Market Overview](https://www.f1ow.com/docs/tools/market_overview) — The global frame in one read: total market cap, BTC and ETH dominance, Fear & Greed, Altcoin Season. --- # Perp Flow (`derivatives_flow`) > Bucket-by-bucket open interest joined to taker buy/sell volume. Distinguish new positions from short covering and long unwind, with absorbed flow flagged. Coverage is stated; where taker data is unavailable, the read uses price direction and says so. - Category: Derivatives - MCP tool: `derivatives_flow` - REST: `GET /derivatives/flow/{symbol}` - 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/derivatives_flow ## What it does USDT-margined perpetual flow for one coin on a 5m/15m/1h grid, from one venue: the deepest major exchange, or a second venue for coins it doesn't list (e.g. WAVES). Open interest (USD) at every bucket edge joined to taker buy and sell volume (USD), with each stretch read as new longs, new shorts, short covering or long unwind (OI direction × the aggressive side). The second venue publishes the taker split only for its last ~1000 trades, so its older buckets are read from OI against price direction instead, and every read states its basis (taker or price). Reports the window, the open-interest swings of 1% or more with the price and taker flow inside them (flagging aggressors absorbed by passive orders, taker basis only), and the buckets where OI moved most. One venue, not the market-wide aggregate. Use it to say whether a move was positions opening or closing, and which side pushed. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `symbol` | string | path | yes | Coin symbol, e.g. "ETH". | | `hours` | integer | query | no | Trailing window in hours, 1–72. Default 24. At 5m the window is capped at about 41h by the venue's 500-snapshot limit. | | `interval` | string | query | no | Bucket size. Default 15m. One of: `5m`, `15m`, `1h`. | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/derivatives/flow/BTC?hours=24&interval=1h" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "derivatives_flow", "arguments": { "symbol": "BTC", "hours": 24, "interval": "1h" } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/derivatives/flow/BTC?hours=24&interval=1h", { 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/derivatives/flow/BTC?hours=24&interval=1h", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "derivatives_flow", "arguments": { "symbol": "BTC", "hours": 24, "interval": "1h" } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "derivatives_flow", "arguments": { "symbol": "BTC", "hours": 24, "interval": "1h" }, "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/derivatives/flow/BTC?hours=24&interval=1h" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "buckets": 24, "caveats": [ "Binance only: the largest perp venue on the majors, but not the market-wide aggregate. Do not add it to derivatives_open_interest figures.", "Open interest is net of both sides and a taker buy can close a short as well as open a long, so a read names the dominant aggressor against the net change, not who holds the positions.", "The newest bucket is still forming; its open-interest change is unknown until the next snapshot." ], "episodes": [ { "absorbed": false, "endMs": 1794488400000, "oiChangePct": 1.44911735786522, "oiEndUsd": 7345230677.3472, "oiStartUsd": 7240310087.1116, "priceChangePct": -0.917466113295998, "priceEnd": 72886.4, "priceStart": 73561.3, "read": "opened_balanced", "readBasis": "taker", "startMs": 1794474000000, "takerBuyPct": 48.8422013390758, "takerBuyUsd": 849794403.686, "takerCoveragePct": 100, "takerSellUsd": 890082957.2595 }, { "absorbed": false, "endMs": 1794549600000, "oiChangePct": -6.83548399658549, "oiEndUsd": 6823169003.0088, "oiStartUsd": 7323785165.9732, "priceChangePct": -4.97269711233944, "priceEnd": 68113.1, "priceStart": 71677.4, "read": "long_unwind", "readBasis": "taker", "startMs": 1794499200000, "takerBuyPct": 45.6620656826249, "takerBuyUsd": 5160293609.2275, "takerCoveragePct": 100, "takerSellUsd": 6140758001.3024 }, { "absorbed": false, "endMs": 1794553200000, "oiChangePct": 2.63971098978072, "oiEndUsd": 7003280945.03253, "oiStartUsd": 6823169003.0088, "priceChangePct": 1.36185056641004, "priceEnd": 69040.8, "priceStart": 68113.2, "read": "new_longs", "readBasis": "taker", "startMs": 1794549600000, "takerBuyPct": 55.333986471809, "takerBuyUsd": 825996249.5799, "takerCoveragePct": 100, "takerSellUsd": 666750436.9447 }, { "absorbed": false, "endMs": 1794556800000, "oiChangePct": -1.21188036785782, "oiEndUsd": 6918409558.15376, "oiStartUsd": 7003280945.03253, "priceChangePct": -0.703641904497055, "priceEnd": 68555, "priceStart": 69040.8, "read": "long_unwind", "readBasis": "taker", "startMs": 1794553200000, "takerBuyPct": 47.0563928663865, "takerBuyUsd": 392649088.4406, "takerCoveragePct": 100, "takerSellUsd": 441773323.7394 } ], "interval": "1h", "largestOiBuckets": [ { "oiChangePct": -1.50974514722565, "oiChangeUsd": -108174693.306765, "priceChangePct": -0.994429951350204, "read": "long_unwind", "readBasis": "taker", "takerBuyPct": 43.0777868318867, "timeMs": 1794535200000 }, { "oiChangePct": -1.27968715554036, "oiChangeUsd": -90306519.0582523, "priceChangePct": -1.82225273394883, "read": "long_unwind", "readBasis": "taker", "takerBuyPct": 43.4867870999536, "timeMs": 1794538800000 }, { "oiChangePct": -2.32494062570955, "oiChangeUsd": -162410577.611103, "priceChangePct": -0.641403414594294, "read": "long_unwind", "readBasis": "taker", "takerBuyPct": 43.0215045752291, "timeMs": 1794546000000 }, { "oiChangePct": 2.63971098978072, "oiChangeUsd": 180111942.023735, "priceChangePct": 1.36185056641004, "read": "new_longs", "readBasis": "taker", "takerBuyPct": 55.333986471809, "timeMs": 1794549600000 }, { "oiChangePct": -1.21188036785782, "oiChangeUsd": -84871386.8787766, "priceChangePct": -0.703641904497055, "read": "long_unwind", "readBasis": "taker", "takerBuyPct": 47.0563928663865, "timeMs": 1794553200000 } ], "market": "USDT-margined perpetual", "rule": "class = OI direction × taker aggressor (buyers aggressive when buy − sell ≥ 5% of taker volume, sellers when ≤ −5%); where the venue publishes no taker split, price direction stands in (up/down by ≥ 0.10% per bucket, 0.25% per episode or window) and the read says basis = price; OI is flat under 0.10% per bucket and 0.25% per window; an episode is an OI swing of ≥ 1.0% between zigzag pivots (revers…", "symbol": "BTC", "venue": "Binance", "window": { "oiChangePct": -4.44594948399867, "oiEndUsd": 6918409558.15376, "oiStartUsd": 7240310087.1116, "priceChangePct": -6.68394930486547, "priceEnd": 68644.5, "priceStart": 73561.3, "read": "long_unwind", "readBasis": "taker", "takerBuyPct": 47.014862737179, "takerBuyUsd": 9440673865.6402, "takerCoveragePct": 100, "takerSellUsd": 10639516346.5809 }, "windowHours": 24, "generatedAt": "2026-11-13T08:05:42.4284480+00:00" } ``` Over MCP the text report a model reads comes with it: ```text BTC Binance USDT-M perp flow, last 24h, 1h buckets (UTC). One venue, not the market-wide aggregate. window: price $73561.30 → $68644.50 (-6.68%) · OI $7.24B → $6.92B (-4.45%, -$321.9M) · taker buy 47% ($9.44B buy / $10.64B sell) read: long unwind (OI down, sellers aggressive) OI swings ≥ 1.0%: 11-12 09:00–13:00 OI +1.45% (+$104.9M) price -0.92% taker buy 49% positions opened, taker flow balanced 11-12 16:00–11-13 06:00 OI -6.84% (-$500.6M) price -4.97% taker buy 46% long unwind (OI down, sellers aggressive) 11-13 06:00–07:00 OI +2.64% (+$180.1M) price +1.36% taker buy 55% new longs (OI up, buyers aggressive) 11-13 07:00–08:00 OI -1.21% (-$84.9M) price -0.70% taker buy 47% long unwind (OI down, sellers aggressive) largest OI buckets: 11-13 02:00 OI -1.51% (-$108.2M) price -0.99% taker buy 43% long unwind (OI down, sellers aggressive) 11-13 03:00 OI -1.28% (-$90.3M) price -1.82% taker buy 43% long unwind (OI down, sellers aggressive) 11-13 05:00 OI -2.32% (-$162.4M) price -0.64% taker buy 43% long unwind (OI down, sellers aggressive) 11-13 06:00 OI +2.64% (+$180.1M) price +1.36% taker buy 55% new longs (OI up, buyers aggressive) 11-13 07:00 OI -1.21% (-$84.9M) price -0.70% taker buy 47% long unwind (OI down, sellers aggressive) forming 08:00: price $68644.50, taker buy 60% so far, OI change not yet known ``` ## Related tools - [Liquidation History](https://www.f1ow.com/docs/tools/derivatives_liquidations) — Market-wide long/short liquidations and venue splits, ranked against a year of daily totals. A separate order sample reveals timing, cascades and the largest forced exits; its coverage is stated, never scaled up to the whole market. - [Funding](https://www.f1ow.com/docs/tools/funding_current) — Current perpetual funding, normalized to an eight-hour rate and annualized, with history and a one-year percentile baseline. Positive means longs pay shorts; it is a cost of holding, not a direction forecast. - [Open Interest](https://www.f1ow.com/docs/tools/derivatives_open_interest) — Cross-exchange perpetual open interest with historical changes and a one-year baseline — how much leverage is committed, not merely how much changed hands. Venue-specific flow is a separate read. - [Market Regime](https://www.f1ow.com/docs/tools/research_regime) — What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call. --- # Liquidation History (`derivatives_liquidations`) > Market-wide long/short liquidations and venue splits, ranked against a year of daily totals. A separate order sample reveals timing, cascades and the largest forced exits; its coverage is stated, never scaled up to the whole market. - Category: Derivatives - MCP tool: `derivatives_liquidations` - REST: `GET /derivatives/liquidations/{symbol}` - MCP App: hosts that support MCP Apps render the result as an interactive view - x402 price: $0.02 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/derivatives_liquidations ## What it does Liquidation history for one coin's perpetuals: market-wide long/short liquidations (USD) in 4h buckets and the 24h split by venue, plus a minute-level timing sample of individual liquidation orders from venues that publish them with detected cascades (time, side, size, order count, price range) and the largest orders. The sample is a share of the market, stated per bucket, never scaled up. Use it to say WHEN and WHICH SIDE was forced out, instead of inferring liquidations from price and open interest: flat OI can hide heavy liquidations that new positions replaced. A 1y baseline ranks the trailing ~24h of longs and shorts against a year of daily totals (percentile, 'largest since' date, median day, the year's three largest days per side), so a figure can be called big or routine for this coin. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `symbol` | string | path | yes | Coin symbol, e.g. "BTC". | | `hours` | integer | query | no | Trailing window in hours, 1–72. Default 24. | | `interval` | string | query | no | Bucket size for the timing sample. Default 15m. One of: `5m`, `15m`, `1h`. | | `top_orders` | integer | query | no | Largest individual liquidations to list, 0–20. Default 5. | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/derivatives/liquidations/BTC?hours=24" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "derivatives_liquidations", "arguments": { "symbol": "BTC", "hours": 24 } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/derivatives/liquidations/BTC?hours=24", { 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/derivatives/liquidations/BTC?hours=24", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "derivatives_liquidations", "arguments": { "symbol": "BTC", "hours": 24 } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "derivatives_liquidations", "arguments": { "symbol": "BTC", "hours": 24 }, "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/derivatives/liquidations/BTC?hours=24" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "baseline1y": { "available": true, "days": 364, "largestLongDays": [ { "timeMs": 1770249600000, "usd": 977556697.513305 }, { "timeMs": 1780358400000, "usd": 799548479.571316 }, { "timeMs": 1763683200000, "usd": 764248113.28377 } ], "largestShortDays": [ { "timeMs": 1787097600000, "usd": 1361041105.36 }, { "timeMs": 1787270400000, "usd": 731337071.57 }, { "timeMs": 1789948800000, "usd": 558415324.29 } ], "longs": { "largestSinceMs": 1770249600000, "medianDayUsd": 38453835.1137, "percentile": 99.7252747252747, "usd": 858428120.32 }, "shorts": { "medianDayUsd": 30201776.4148211, "percentile": 62.0879120879121, "usd": 42056273.4 }, "trailingFromMs": 1794484800000 }, "cascadeRule": "a timing-sample bucket is part of a cascade when one side is >= max($100k, 4x that side's mean bucket, 1.5x the mean bucket of both sides) over the window and >= 60% of the bucket; adjacent qualifying buckets on the same side merge", "cascades": [ { "endMs": 1794493800000, "highPriceUsd": 72229, "lowPriceUsd": 71720.6, "orders": 700, "side": "long", "startMs": 1794492900000, "usd": 21191294.583974 }, { "endMs": 1794495600000, "highPriceUsd": 71715.8, "lowPriceUsd": 71245.9, "orders": 429, "side": "long", "startMs": 1794494700000, "usd": 6183549.798427 }, { "endMs": 1794530700000, "highPriceUsd": 71109.5, "lowPriceUsd": 70659.8922120961, "orders": 491, "side": "long", "startMs": 1794529800000, "usd": 10250743.079611 }, { "endMs": 1794540600000, "highPriceUsd": 69752.37, "lowPriceUsd": 68909, "orders": 1198, "side": "long", "startMs": 1794539700000, "usd": 20080680.410222 }, { "endMs": 1794542400000, "highPriceUsd": 69010.916872428, "lowPriceUsd": 68486, "orders": 647, "side": "long", "startMs": 1794541500000, "usd": 11734454.297147 }, { "endMs": 1794549600000, "highPriceUsd": 68625, "lowPriceUsd": 67513.8, "orders": 808, "side": "long", "startMs": 1794548700000, "usd": 30203884.520251 } ], "interval": "15m", "largestOrders": [ { "priceUsd": 67937.1923428, "side": "long", "timeMs": 1794549402000, "usd": 10190578.85142, "venue": "Gate" }, { "priceUsd": 72085.2, "side": "long", "timeMs": 1794493229106, "usd": 9371140.87668, "venue": "OKX" }, { "priceUsd": 70746.5, "side": "long", "timeMs": 1794530193231, "usd": 3537325, "venue": "OKX" }, { "priceUsd": 70370.9, "side": "long", "timeMs": 1794536331213, "usd": 3518545, "venue": "OKX" }, { "priceUsd": 69327.5, "side": "long", "timeMs": 1794540078190, "usd": 3466375, "venue": "OKX" } ], "marketBuckets4h": [ { "forming": false, "longUsd": 17808650.61, "shortUsd": 330570.78, "timeMs": 1794470400000 }, { "forming": false, "longUsd": 227717223.97, "shortUsd": 5621167.07, "timeMs": 1794484800000 }, { "forming": false, "longUsd": 4711732.7, "shortUsd": 3012744.18, "timeMs": 1794499200000 }, { "forming": false, "longUsd": 7119806.57, "shortUsd": 396494.68, "timeMs": 1794513600000 }, { "forming": false, "longUsd": 452537567.26, "shortUsd": 17091522.68, "timeMs": 1794528000000 }, { "forming": false, "longUsd": 166208043.29, "shortUsd": 15934310.51, "timeMs": 1794542400000 }, "… 1 more" ], "marketWide24h": { "longUsd": 876235433.883851, "shortUsd": 42386549.6227622, "venues": [ { "longUsd": 301152189.320499, "sharePct": 33.952881835436, "shortUsd": 10746447.25384, "venue": "Binance" }, { "longUsd": 306265415.189667, "sharePct": 33.4356784258187, "shortUsd": 882077.164481, "venue": "Hyperliquid" }, { "longUsd": 127257823.0347, "sharePct": 14.4159495196477, "shortUsd": 5170258.384, "venue": "Bybit" }, { "longUsd": 60046180.306798, "sharePct": 7.01609609064206, "shortUsd": 4405220.765788, "venue": "Gate" }, { "longUsd": 31252256.4577, "sharePct": 3.59383486073544, "shortUsd": 1761500.62394, "venue": "OKX" }, { "longUsd": 28745064.0751413, "sharePct": 3.30494148968001, "shortUsd": 1614854.99109019, "venue": "Bitget" }, "… 4 more" ] }, "sample": { "coveredFromMs": 1794471065240, "note": "Timing sample from venues that publish individual liquidations; a share of the market, never scaled up.", "sharePct24h": 10.6099309513775, "venues": [ "OKX", "Gate" ] }, "sourcesFailed": [], "symbol": "BTC", "windowHours": 24, "generatedAt": "2026-11-13T08:06:07.5130301+00:00" } ``` Over MCP the text report a model reads comes with it: ```text BTC liquidations, last 24h (UTC) market-wide 24h (CoinGlass, 10 venues): longs $876.2M / shorts $42.4M by venue: Binance 34% · Hyperliquid 33% · Bybit 14% · Gate 7% · OKX 4% · Bitget 3% 4h buckets, market-wide (CoinGlass): 11-12 08:00 longs $17.8M shorts $331k 11-12 12:00 longs $227.7M shorts $5.6M 11-12 16:00 longs $4.7M shorts $3.0M 11-12 20:00 longs $7.1M shorts $396k 11-13 00:00 longs $452.5M shorts $17.1M 11-13 04:00 longs $166.2M shorts $15.9M 11-13 08:00 longs $134k shorts $34 (forming) 1y baseline (CoinGlass daily totals, 364 days): trailing 20h since 11-12 12:00 UTC ranked against whole days longs $858.4M 100th percentile of days, largest since 2026-02-05 · median day $38.5M shorts $42.1M 62nd percentile of days · median day $30.2M largest days: longs $977.6M (2026-02-05), $799.5M (2026-06-02), $764.2M (2025-11-21) | shorts $1.36B (2026-08-19), $731.3M (2026-08-21), $558.4M (2026-09-21) timing sample: OKX + Gate, 15m buckets (10.6% of the trailing 24h market-wide, by CoinGlass's split) cascades (6): 11-12 14:15–14:30 longs $21.2M 700 orders $71720.60–$72229.00 11-12 14:45–15:00 longs $6.2M 429 orders $71245.90–$71715.80 11-13 00:30–00:45 longs $10.3M 491 orders $70659.89–$71109.50 11-13 03:15–03:30 longs $20.1M 1198 orders $68909.00–$69752.37 11-13 03:45–04:00 longs $11.7M 647 orders $68486.00–$69010.92 11-13 05:45–06:00 longs $30.2M 808 orders $67513.80–$68625.00 largest orders: $10.2M long Gate 11-13 05:56 at $67937.19 $9.4M long OKX 11-12 14:20 at $72085.20 $3.5M long OKX 11-13 00:36 at $70746.50 $3.5M long OKX 11-13 02:18 at $70370.90 $3.5M long OKX 11-13 03:21 at $69327.50 ``` ## Related tools - [Perp Flow](https://www.f1ow.com/docs/tools/derivatives_flow) — Bucket-by-bucket open interest joined to taker buy/sell volume. Distinguish new positions from short covering and long unwind, with absorbed flow flagged. Coverage is stated; where taker data is unavailable, the read uses price direction and says so. - [Funding](https://www.f1ow.com/docs/tools/funding_current) — Current perpetual funding, normalized to an eight-hour rate and annualized, with history and a one-year percentile baseline. Positive means longs pay shorts; it is a cost of holding, not a direction forecast. - [Open Interest](https://www.f1ow.com/docs/tools/derivatives_open_interest) — Cross-exchange perpetual open interest with historical changes and a one-year baseline — how much leverage is committed, not merely how much changed hands. Venue-specific flow is a separate read. - [Market Regime](https://www.f1ow.com/docs/tools/research_regime) — What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call. --- # Funding (`funding_current`) > Current perpetual funding, normalized to an eight-hour rate and annualized, with history and a one-year percentile baseline. Positive means longs pay shorts; it is a cost of holding, not a direction forecast. - Category: Derivatives - MCP tool: `funding_current` - REST: `GET /derivatives/funding/{symbol}` - 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/funding_current ## What it does Current perpetual funding rate for one coin (hourly rate plus an annualized estimate), merged across providers, with its 24h and 7d trajectory AND the underlying 8h-bucket series. Positive means longs pay shorts. The trajectory is the point: the same +6% annualized reads as post-flush relief if it fell from +40% and as shorts capitulating if it rose from -20%. The series carries the shape a trailing delta flattens away — a steady drift and a spike that retraced give the same 24h change off opposite tapes — plus the window's own low/high, so the current rate can be judged against where it has actually been rather than an absolute threshold. A 1y line ranks the current rate against a year of daily closes (percentile, low/median/high with dates), so 'high' means high for this coin, not just for the week. Set 'points' to trim the series (omit for the full ~10-day window; 0 to suppress it). ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `symbol` | string | path | yes | Coin symbol, e.g. "BTC". | | `points` | integer | query | no | How many of the newest 8h buckets to emit. Omit for the full window (30 points ~ 10 days); 0 suppresses the series and returns the summary only. | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/derivatives/funding/BTC" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "funding_current", "arguments": { "symbol": "BTC" } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/derivatives/funding/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/derivatives/funding/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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "funding_current", "arguments": { "symbol": "BTC" } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "funding_current", "arguments": { "symbol": "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/derivatives/funding/BTC" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "annualizedPct": 1.84398, "baseline1y": { "atOrAboveMs": 1794441600000, "available": true, "days": 364, "high": 12.501615, "highMs": 1787356800000, "low": -12.83778, "lowMs": 1776124800000, "median": 4.641705, "percentile": 28.5714285714286 }, "basis": "OI-weighted across venues", "found": true, "ratePctPerHour": 0.0002105, "series": { "intervalHours": 8, "points": [ { "annualizedPct": 11.546775, "forming": false, "timeMs": 1793721600000 }, { "annualizedPct": 9.744405, "forming": false, "timeMs": 1793750400000 }, { "annualizedPct": 10.331325, "forming": false, "timeMs": 1793779200000 }, { "annualizedPct": 5.390685, "forming": false, "timeMs": 1793808000000 }, { "annualizedPct": 10.80327, "forming": false, "timeMs": 1793836800000 }, { "annualizedPct": 12.20706, "forming": false, "timeMs": 1793865600000 }, "… 24 more" ], "source": "CoinGlass" }, "symbol": "BTC", "trajectory": [ { "changePp": -6.638985, "nowAnnualizedPct": 1.84398, "priorAnnualizedPct": 8.482965, "window": "24h" }, { "changePp": -6.28968, "nowAnnualizedPct": 1.84398, "priorAnnualizedPct": 8.13366, "window": "7d" } ], "generatedAt": "2026-11-13T08:05:40.5000918+00:00" } ``` Over MCP the text report a model reads comes with it: ```text BTC funding: +0.00021%/h (annualized ~+1.84%, OI-weighted across venues) 24h +8.5% -> +1.8% ann (falling) 7d +8.1% -> +1.8% ann (falling) 1y rate at the 29th percentile of 364 daily closes (CoinGlass OI-weighted) | low -12.8% (2026-04-14) · median +4.6% · high +12.5% (2026-08-22) Series (8h buckets, 30 points spanning 232h, oldest first, source CoinGlass): window low +0.10% / high +12.21% | now at 14% of window range 2026-11-03 16:00 +11.55% ann — 2026-11-04 00:00 +9.74% ann -1.80pp 2026-11-04 08:00 +10.33% ann +0.59pp 2026-11-04 16:00 +5.39% ann -4.94pp 2026-11-05 00:00 +10.80% ann +5.41pp 2026-11-05 08:00 +12.21% ann +1.40pp 2026-11-05 16:00 +10.77% ann -1.43pp 2026-11-06 00:00 +6.67% ann -4.10pp 2026-11-06 08:00 +8.13% ann +1.47pp 2026-11-06 16:00 +11.10% ann +2.97pp 2026-11-07 00:00 +5.35% ann -5.75pp 2026-11-07 08:00 +6.21% ann +0.86pp 2026-11-07 16:00 +9.45% ann +3.24pp 2026-11-08 00:00 +10.21% ann +0.77pp 2026-11-08 08:00 +7.07% ann -3.15pp 2026-11-08 16:00 +6.42% ann -0.65pp 2026-11-09 00:00 +11.54% ann +5.12pp 2026-11-09 08:00 +10.13% ann -1.41pp 2026-11-09 16:00 +11.03% ann +0.90pp 2026-11-10 00:00 +10.66% ann -0.36pp 2026-11-10 08:00 +7.56% ann -3.11pp 2026-11-10 16:00 +10.93% ann +3.37pp 2026-11-11 00:00 +10.93% ann -0.00pp 2026-11-11 08:00 +7.08% ann -3.85pp 2026-11-11 16:00 +5.15% ann -1.93pp 2026-11-12 00:00 +9.95% ann +4.80pp 2026-11-12 08:00 +8.48% ann -1.47pp 2026-11-12 16:00 +11.67% ann +3.18pp 2026-11-13 00:00 +0.10% ann -11.57pp 2026-11-13 08:00 +1.84% ann +1.75pp ``` ## Related tools - [Perp Flow](https://www.f1ow.com/docs/tools/derivatives_flow) — Bucket-by-bucket open interest joined to taker buy/sell volume. Distinguish new positions from short covering and long unwind, with absorbed flow flagged. Coverage is stated; where taker data is unavailable, the read uses price direction and says so. - [Liquidation History](https://www.f1ow.com/docs/tools/derivatives_liquidations) — Market-wide long/short liquidations and venue splits, ranked against a year of daily totals. A separate order sample reveals timing, cascades and the largest forced exits; its coverage is stated, never scaled up to the whole market. - [Open Interest](https://www.f1ow.com/docs/tools/derivatives_open_interest) — Cross-exchange perpetual open interest with historical changes and a one-year baseline — how much leverage is committed, not merely how much changed hands. Venue-specific flow is a separate read. - [Market Regime](https://www.f1ow.com/docs/tools/research_regime) — What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call. --- # Open Interest (`derivatives_open_interest`) > Cross-exchange perpetual open interest with historical changes and a one-year baseline — how much leverage is committed, not merely how much changed hands. Venue-specific flow is a separate read. - Category: Derivatives - MCP tool: `derivatives_open_interest` - REST: `GET /derivatives/open-interest/{symbol}` - 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/derivatives_open_interest ## What it does Current market-wide (cross-exchange aggregate) open interest (USD) for one coin's perpetuals, with its 24h and 7d change, the 24h price change, AND the underlying 4h-bucket series. Read OI against price: price up on rising OI is new money opening positions, price up on falling OI is short covering — opposite trades off the same price move. The series makes that read available bucket by bucket instead of once per day (pair it with market_candles at 4h for the price leg), and carries the window's own low/high so the current level can be judged against where it has actually been. A 1y line ranks the level and today's 24h change against a year of daily closes (percentile, range with dates); the change rank is the better read, since the USD level mostly tracks price. Falls back to a single-venue figure if the aggregate source is offline. Set 'points' to trim the series (omit for the full ~10-day window; 0 to suppress it). ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `symbol` | string | path | yes | Coin symbol, e.g. "BTC". | | `points` | integer | query | no | How many of the newest 4h buckets to emit. Omit for the full window (60 points ~ 10 days); 0 suppresses the series and returns the summary only. | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/derivatives/open-interest/ETH" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "derivatives_open_interest", "arguments": { "symbol": "ETH" } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/derivatives/open-interest/ETH", { 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/derivatives/open-interest/ETH", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "derivatives_open_interest", "arguments": { "symbol": "ETH" } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "derivatives_open_interest", "arguments": { "symbol": "ETH" }, "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/derivatives/open-interest/ETH" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "aggregate": true, "baseline1y": { "change24h": { "atOrAboveMs": 1794441600000, "available": true, "days": 361, "high": 15.3604723929357, "highMs": 1773619200000, "low": -17.4932263789346, "lowMs": 1769817600000, "median": -0.186727545949317, "percentile": 13.2963988919668 }, "level": { "atOrAboveMs": 1794441600000, "available": true, "days": 362, "high": 41893459760, "highMs": 1767312000000, "low": 21762879650, "lowMs": 1782518400000, "median": 30874658601, "percentile": 7.4585635359116 } }, "changes": [ { "changePct": -3.42460223309237, "nowUsd": 23824434723.3985, "priorUsd": 24669258708, "window": "24h" }, { "changePct": -16.5485784539869, "nowUsd": 23824434723.3985, "priorUsd": 28548866253, "window": "7d" } ], "found": true, "openInterestUsd": 23840041160.8518, "priceChangePct24h": -5.70444, "series": { "intervalHours": 4, "points": [ { "forming": false, "openInterestUsd": 28557977543, "timeMs": 1793707200000 }, { "forming": false, "openInterestUsd": 28378827858, "timeMs": 1793721600000 }, { "forming": false, "openInterestUsd": 28383963943, "timeMs": 1793736000000 }, { "forming": false, "openInterestUsd": 27810492518, "timeMs": 1793750400000 }, { "forming": false, "openInterestUsd": 28737494718, "timeMs": 1793764800000 }, { "forming": false, "openInterestUsd": 29255314249, "timeMs": 1793779200000 }, "… 47 more" ], "source": "CoinGlass" }, "symbol": "ETH", "generatedAt": "2026-11-13T08:05:40.9716241+00:00" } ``` Over MCP the text report a model reads comes with it: ```text ETH open interest: $23840041161 | 24h price -5.70% 24h -3.4% ($24.67B -> $23.82B) 7d -16.5% ($28.55B -> $23.82B) 1y level at the 7th percentile of 362 daily closes (CoinGlass aggregate) | low $21.76B (2026-06-27) · median $30.87B · high $41.89B (2026-01-02) 24h change -3.4% at the 13th percentile of the year's day-on-day changes (median -0.2%, range -17.5% to +15.4%) Series (4h buckets, 53 points spanning 236h, oldest first, source CoinGlass): window low $23.56B / high $30.39B | now at 4% of window range 2026-11-03 12:00 $28.56B — 2026-11-03 16:00 $28.38B -0.63% 2026-11-03 20:00 $28.38B +0.02% 2026-11-04 00:00 $27.81B -2.02% 2026-11-04 04:00 $28.74B +3.33% 2026-11-04 08:00 $29.26B +1.80% 2026-11-04 12:00 $30.17B +3.14% 2026-11-04 16:00 $29.95B -0.74% 2026-11-04 20:00 $29.99B +0.14% 2026-11-05 00:00 $29.98B -0.05% 2026-11-05 04:00 $30.28B +1.01% 2026-11-05 08:00 $30.39B +0.38% 2026-11-05 12:00 $27.59B -9.23% 2026-11-05 16:00 $28.45B +3.11% 2026-11-05 20:00 $28.02B -1.50% 2026-11-06 00:00 $28.18B +0.58% 2026-11-06 04:00 $28.57B +1.38% 2026-11-06 08:00 $28.55B -0.08% 2026-11-06 12:00 $28.53B -0.07% 2026-11-06 16:00 $28.29B -0.83% 2026-11-06 20:00 $28.21B -0.30% 2026-11-08 04:00 $27.82B -1.37% 2026-11-08 08:00 $27.86B +0.13% 2026-11-08 12:00 $27.89B +0.13% 2026-11-08 16:00 $27.84B -0.18% 2026-11-08 20:00 $26.05B -6.43% 2026-11-09 00:00 $26.31B +0.98% 2026-11-09 04:00 $25.93B -1.43% 2026-11-09 08:00 $26.16B +0.89% 2026-11-09 12:00 $26.57B +1.56% 2026-11-09 16:00 $26.32B -0.95% 2026-11-09 20:00 $26.17B -0.56% 2026-11-10 00:00 $26.06B -0.42% 2026-11-10 04:00 $26.24B +0.69% 2026-11-10 08:00 $26.26B +0.08% 2026-11-10 12:00 $24.71B -5.90% 2026-11-10 16:00 $25.01B +1.24% 2026-11-10 20:00 $24.99B -0.11% 2026-11-11 00:00 $25.12B +0.54% 2026-11-11 04:00 $25.24B +0.47% 2026-11-11 08:00 $25.22B -0.08% 2026-11-11 12:00 $25.14B -0.30% 2026-11-11 16:00 $25.05B -0.35% 2026-11-11 20:00 $24.78B -1.10% 2026-11-12 00:00 $24.84B +0.26% 2026-11-12 04:00 $25.03B +0.74% 2026-11-12 08:00 $24.67B -1.42% 2026-11-12 12:00 $25.02B +1.41% 2026-11-12 16:00 $24.85B -0.66% 2026-11-12 20:00 $24.83B -0.10% 2026-11-13 00:00 $23.56B -5.10% 2026-11-13 04:00 $23.79B +1.00% 2026-11-13 08:00 $23.82B +0.13% ``` ## Related tools - [Perp Flow](https://www.f1ow.com/docs/tools/derivatives_flow) — Bucket-by-bucket open interest joined to taker buy/sell volume. Distinguish new positions from short covering and long unwind, with absorbed flow flagged. Coverage is stated; where taker data is unavailable, the read uses price direction and says so. - [Liquidation History](https://www.f1ow.com/docs/tools/derivatives_liquidations) — Market-wide long/short liquidations and venue splits, ranked against a year of daily totals. A separate order sample reveals timing, cascades and the largest forced exits; its coverage is stated, never scaled up to the whole market. - [Funding](https://www.f1ow.com/docs/tools/funding_current) — Current perpetual funding, normalized to an eight-hour rate and annualized, with history and a one-year percentile baseline. Positive means longs pay shorts; it is a cost of holding, not a direction forecast. - [Market Regime](https://www.f1ow.com/docs/tools/research_regime) — What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call. --- # Options Chain (`options_chain`) > Calls and puts by strike and expiry: quotes, mark implied volatility, open interest and volume. Reported data is separated from calculated metrics, with coverage and thin-market caveats. - Category: Options - MCP tool: `options_chain` - REST: `GET /options/chain/{currency}` - 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/options_chain ## What it does Crypto options chain for one underlying and expiry: calls/puts by strike with bid/ask/mark (native and USD), mark IV, calculated Black-76 delta, open interest (coins and USD notional) and 24h volume. Lists every available expiry. Underlyings: BTC and ETH (deep; inverse and USDC-linear books), SOL, XRP, HYPE, AVAX, TRX (USDC-linear, thin). Defaults: next expiry, strikes within ±10% of spot, both types. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `currency` | string | path | yes | Underlying symbol, e.g. "BTC", "ETH", "SOL". | | `expiry` | string | query | no | "next" (default), a date like "2026-12-25", or an exchange code like "25DEC26". | | `option_type` | string | query | no | Default both. One of: `call`, `put`, `both`. | | `strike_min` | number | query | no | Lowest strike (USD). | | `strike_max` | number | query | no | Highest strike (USD). | | `moneyness_pct` | number | query | no | When no strike bounds are given: keep strikes within ± this % of spot. Default 10. | | `limit` | integer | query | no | Max contracts returned, default 40, max 200. | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/options/chain/BTC?expiry=next&moneyness_pct=5&limit=20" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "options_chain", "arguments": { "currency": "BTC", "expiry": "next", "moneyness_pct": 5, "limit": 20 } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/options/chain/BTC?expiry=next&moneyness_pct=5&limit=20", { 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/options/chain/BTC?expiry=next&moneyness_pct=5&limit=20", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "options_chain", "arguments": { "currency": "BTC", "expiry": "next", "moneyness_pct": 5, "limit": 20 } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "options_chain", "arguments": { "currency": "BTC", "expiry": "next", "moneyness_pct": 5, "limit": 20 }, "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/options/chain/BTC?expiry=next&moneyness_pct=5&limit=20" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "contracts": [ { "ask": 0.0215, "askUsd": 1475.23626, "bid": 0.02, "bidUsd": 1372.3128, "contractSize": 1, "deltaCalculated": 0.727709462545573, "instrument": "BTC-14NOV26-67500-C", "mark": 0.02069699, "markIv": 52.41, "markUsd": 1420.1372149236, "openInterest": 0, "openInterestUsd": 0, "settlement": "inverse", "strike": 67500, "type": "call", "volume24h": 0, "volumeUsd24h": 0 }, { "ask": 0.0049, "askUsd": 336.216636, "bid": 0.0043, "bidUsd": 295.047252, "contractSize": 1, "deltaCalculated": -0.272290537454427, "instrument": "BTC-14NOV26-67500-P", "mark": 0.00464665, "markIv": 52.41, "markUsd": 318.832863606, "openInterest": 0, "openInterestUsd": 0, "settlement": "inverse", "strike": 67500, "type": "put", "volume24h": 0, "volumeUsd24h": 0 }, { "ask": 0.016, "askUsd": 1097.85024, "bid": 0.0145, "bidUsd": 994.92678, "contractSize": 1, "deltaCalculated": 0.638737147789735, "instrument": "BTC-14NOV26-68000-C", "mark": 0.01529956, "markIv": 49.81, "markUsd": 1049.7891011184, "openInterest": 0, "openInterestUsd": 0, "settlement": "inverse", "strike": 68000, "type": "call", "volume24h": 15.9, "volumeUsd24h": 14362.18 }, { "ask": 1100, "askUsd": 1100, "bid": 1040, "bidUsd": 1040, "contractSize": 1, "deltaCalculated": 0.638737147789735, "instrument": "BTC_USDC-14NOV26-68000-C", "mark": 1049.5660237, "markIv": 49.81, "markUsd": 1049.5660237, "openInterest": 0, "openInterestUsd": 0, "settlement": "linear", "strike": 68000, "type": "call", "volume24h": 0.38, "volumeUsd24h": 488.5 }, { "ask": 0.007, "askUsd": 480.30948, "bid": 0.006, "bidUsd": 411.69384, "contractSize": 1, "deltaCalculated": -0.362230596844979, "instrument": "BTC-14NOV26-68000-P", "mark": 0.00653774, "markIv": 49.81, "markUsd": 448.5912142536, "openInterest": 97.1, "openInterestUsd": 6662578.644, "settlement": "inverse", "strike": 68000, "type": "put", "volume24h": 267.2, "volumeUsd24h": 120402.06 }, { "ask": 460, "askUsd": 460, "bid": 425, "bidUsd": 425, "contractSize": 1, "deltaCalculated": -0.361262852210265, "instrument": "BTC_USDC-14NOV26-68000-P", "mark": 448.4960237, "markIv": 49.81, "markUsd": 448.4960237, "openInterest": 1.13, "openInterestUsd": 77535.6732, "settlement": "linear", "strike": 68000, "type": "put", "volume24h": 5.44, "volumeUsd24h": 3056.49 }, "… 14 more" ], "daysToExpiry": 0.996047164351852, "expiries": [ "2026-11-14T08:00:00Z", "2026-11-15T08:00:00Z", "2026-11-16T08:00:00Z", "2026-11-17T08:00:00Z", "2026-11-20T08:00:00Z", "2026-11-27T08:00:00Z", "… 6 more" ], "expiry": "2026-11-14T08:00:00Z", "forwardUsd": 68607.96, "indexPriceUsd": 68615.64, "meta": { "ageSeconds": 1, "observedAt": "2026-11-13T08:05:40Z", "provider": "Deribit", "underlying": "BTC" }, "metricSources": { "calculated": [ "bidUsd", "askUsd", "markUsd", "openInterestUsd", "deltaCalculated" ], "reported": [ "bid", "ask", "mark", "markIv", "openInterest", "volume24h", "… 4 more" ] }, "units": { "markIv": "percent annualized", "nativePrice": "coin on inverse books, USDC on linear books", "openInterest": "underlying coins", "volume24h": "underlying coins" }, "generatedAt": "2026-11-13T08:05:40Z" } ``` Over MCP the text report a model reads comes with it: ```text === BTC options chain — Deribit === Observed 2026-11-13T08:05:40Z (1s ago) | spot index $68615.64 Expiry 14 Nov 2026 08:00 UTC (1.0d) | forward $68607.96 | expiry OI: calls 1.29K / puts 1.06K BTC ($160.9M), P/C 0.82 Listed expiries (12): 14 Nov 2026, 15 Nov 2026, 16 Nov 2026, 17 Nov 2026, 20 Nov 2026, 27 Nov 2026, 4 Dec 2026, 25 Dec 2026, 29 Jan 2027, 26 Mar 2027, 25 Jun 2027, 24 Sep 2027 Showing 20 of 44 contracts (±5% of spot; type both). Prices in USD (converted from coin on inverse books); Δ calculated (Black-76 on the forward, r=0). Units: OI and volume in underlying coins (reported); USD notional = coins × spot index (calculated); IV in % annualized; premiums quoted in the coin on inverse books (BTC/ETH), in USDC on linear books. BTC-14NOV26-67500-C inverse bid $1372.31 ask $1475.24 mark $1420.14 | IV 52.4 | Δ +0.73 | OI 0.00 BTC ($0) | vol24h 0.00 BTC-14NOV26-67500-P inverse bid $295.0473 ask $336.2166 mark $318.8329 | IV 52.4 | Δ -0.27 | OI 0.00 BTC ($0) | vol24h 0.00 BTC-14NOV26-68000-C inverse bid $994.9268 ask $1097.85 mark $1049.79 | IV 49.8 | Δ +0.64 | OI 0.00 BTC ($0) | vol24h 15.90 BTC_USDC-14NOV26-68000-C linear bid $1040.00 ask $1100.00 mark $1049.57 | IV 49.8 | Δ +0.64 | OI 0.00 BTC ($0) | vol24h 0.38 BTC-14NOV26-68000-P inverse bid $411.6938 ask $480.3095 mark $448.5912 | IV 49.8 | Δ -0.36 | OI 97.10 BTC ($6.7M) | vol24h 267.20 BTC_USDC-14NOV26-68000-P linear bid $425.0000 ask $460.0000 mark $448.4960 | IV 49.8 | Δ -0.36 | OI 1.13 BTC ($78k) | vol24h 5.44 BTC-14NOV26-68500-C inverse bid $686.1564 ask $789.0799 mark $736.4640 | IV 47.9 | Δ +0.53 | OI 0.00 BTC ($0) | vol24h 21.50 BTC-14NOV26-68500-P inverse bid $583.2329 ask $651.8486 mark $635.3726 | IV 47.9 | Δ -0.47 | OI 0.00 BTC ($0) | vol24h 2.10 BTC-14NOV26-69000-C inverse bid $446.0017 ask $514.6173 mark $481.6303 | IV 46.2 | Δ +0.41 | OI 0.00 BTC ($0) | vol24h 167.20 BTC_USDC-14NOV26-69000-C linear bid $470.0000 ask $510.0000 mark $481.5282 | IV 46.2 | Δ +0.41 | OI 0.00 BTC ($0) | vol24h 0.10 BTC-14NOV26-69000-P inverse bid $823.3877 ask $926.3111 mark $880.6454 | IV 46.2 | Δ -0.59 | OI 114.90 BTC ($7.9M) | vol24h 290.00 BTC_USDC-14NOV26-69000-P linear bid $840.0000 ask $900.0000 mark $880.4582 | IV 46.2 | Δ -0.59 | OI 11.11 BTC ($762k) | vol24h 23.11 BTC-14NOV26-69500-C inverse bid $274.4626 ask $308.7704 mark $290.2867 | IV 44.6 | Δ +0.29 | OI 0.00 BTC ($0) | vol24h 8.50 BTC_USDC-14NOV26-69500-C linear bid $285.0000 ask $310.0000 mark $290.2250 | IV 44.6 | Δ +0.29 | OI 0.00 BTC ($0) | vol24h 0.00 BTC-14NOV26-69500-P inverse bid $1132.16 ask $1200.77 mark $1189.41 | IV 44.6 | Δ -0.71 | OI 0.00 BTC ($0) | vol24h 0.20 BTC_USDC-14NOV26-69500-P linear bid $1080.00 ask $1240.00 mark $1189.15 | IV 44.6 | Δ -0.71 | OI 0.00 BTC ($0) | vol24h 0.00 BTC-14NOV26-70000-C inverse bid $150.9544 ask $185.2622 mark $165.3205 | IV 43.9 | Δ +0.19 | OI 3.00 BTC ($206k) | vol24h 33.00 BTC_USDC-14NOV26-70000-C linear bid $155.0000 ask $180.0000 mark $165.2851 | IV 43.9 | Δ +0.19 | OI 0.00 BTC ($0) | vol24h 0.06 BTC-14NOV26-70000-P inverse bid $1509.54 ask $1612.47 mark $1564.55 | IV 43.9 | Δ -0.81 | OI 110.40 BTC ($7.6M) | vol24h 327.90 BTC_USDC-14NOV26-70000-P linear bid $1480.00 ask $1620.00 mark $1564.22 | IV 43.9 | Δ -0.81 | OI 1.64 BTC ($113k) | vol24h 2.44 ``` ## Related tools - [Implied Volatility](https://www.f1ow.com/docs/tools/options_volatility) — ATM volatility, term structure, implied move size, 25-delta skew and IV versus realized volatility. BTC/ETH volatility-index history adds context. What options price for the size of a move — not its direction. - [Options Positioning](https://www.f1ow.com/docs/tools/options_positioning) — Put/call open interest, strike and expiry concentrations, expiring notional, theoretical max pain and recent option trades. One venue; aggregate open interest does not reveal who is long or short, and max pain is not a forecast. - [Gamma & Hedge Scenarios](https://www.f1ow.com/docs/tools/options_gamma) — Modeled gamma exposure, walls, flip levels and an options regime, with price, time and volatility what-ifs. Dealer hedge ladders depend on an explicit positioning scenario — theoretical sensitivity, not observed dealer orders. - [Options-Implied Odds](https://www.f1ow.com/docs/tools/options_probability) — Risk-neutral expiry probabilities above or below a price or inside a range, plus implied 68% and 90% ranges. Derived from options forwards and volatility, with smile adjustment where quoted — not calibrated real-world forecasts. --- # Implied Volatility (`options_volatility`) > ATM volatility, term structure, implied move size, 25-delta skew and IV versus realized volatility. BTC/ETH volatility-index history adds context. What options price for the size of a move — not its direction. - Category: Options - MCP tool: `options_volatility` - REST: `GET /options/volatility/{currency}` - 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/options_volatility ## What it does Crypto options implied volatility: DVOL index with 1y percentile, ATM IV term structure (7/30/90d) and inversion, 25-delta risk reversal and butterfly per expiry, 30d IV vs realized volatility, spot–vol correlation, 24h/7d skew and term changes, and the implied 1σ move for 1/7/30 days — how fast a move options price, not its direction. Pass several underlyings ("BTC,ETH") to compare. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `currency` | string | path | yes | Underlying symbol or comma-separated list (max 4), e.g. "BTC" or "BTC,ETH". | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/options/volatility/BTC" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "options_volatility", "arguments": { "currency": "BTC" } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/options/volatility/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/options/volatility/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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "options_volatility", "arguments": { "currency": "BTC" } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "options_volatility", "arguments": { "currency": "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/options/volatility/BTC" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "caveat": "Positioning and pricing, not direction: put/call ratios, skew and max pain do not predict price, and aggregate OI cannot show dealer gamma, who is long or short, or pinning. Max pain is a theoretical calculation.", "reads": [ { "atmIv": { "d30": 37.9250638590136, "d7": 38.9431753506621, "d90": 39.2867546169742, "source": "calculated" }, "changes": [], "dvol": { "at": "2026-11-13T00:00:00Z", "changeVsPriorDay": -0.840000000000003, "days": 367, "percentile": 38.0108991825613, "source": "reported", "value": 39.23 }, "expiries": [ { "atmIv": 37.3112471223181, "butterfly25": 0.731392513546965, "days": 1.99615429398148, "expiry": "2026-11-15T08:00:00Z", "forwardUsd": 68622.4, "riskReversal25": -6.85588547243289 }, { "atmIv": 36.0167155269591, "butterfly25": 0.905839276842123, "days": 2.99615429398148, "expiry": "2026-11-16T08:00:00Z", "forwardUsd": 68627.07, "riskReversal25": -5.47453702828677 }, { "atmIv": 38.5788987608621, "butterfly25": 0.458165640004495, "days": 3.99615429398148, "expiry": "2026-11-17T08:00:00Z", "forwardUsd": 68634.6425, "riskReversal25": -4.86940292993656 }, { "atmIv": 38.9446513215503, "butterfly25": 0.656100437715786, "days": 6.99615429398148, "expiry": "2026-11-20T08:00:00Z", "forwardUsd": 68670.3, "riskReversal25": -5.30908746486656 }, { "atmIv": 37.5770034274295, "butterfly25": 0.437361134222506, "days": 13.9961542939815, "expiry": "2026-11-27T08:00:00Z", "forwardUsd": 68764.16, "riskReversal25": -5.19406395577422 }, { "atmIv": 37.2297708474289, "butterfly25": 0.664317130408243, "days": 20.9961542939815, "expiry": "2026-12-04T08:00:00Z", "forwardUsd": 68826.94, "riskReversal25": -4.20658631115766 }, "… 5 more" ], "impliedMovePct": [ { "days": 1, "extrapolated": true, "pct": 1.95295993254966 }, { "days": 7, "extrapolated": false, "pct": 5.39304380590935 }, { "days": 30, "extrapolated": false, "pct": 10.8727778786336 } ], "indexPriceUsd": 68625.86, "meta": { "ageSeconds": 25, "observedAt": "2026-11-13T08:05:16Z", "provider": "Deribit", "underlying": "BTC" }, "notes": [], "realized30d": 35.9570037879743, "riskReversal25At30d": -4.13282585233276, "skewState": "PUTS OVER CALLS", "spotVolCorrelation90d": 0.176970695802054, "termSlope7dMinus30d": 1.01811149164851, "termState": "FLAT", "volPremium": 1.96806007103923 } ], "unavailable": [], "generatedAt": "2026-11-13T08:05:16Z" } ``` Over MCP the text report a model reads comes with it: ```text === BTC options volatility — Deribit === Observed 2026-11-13T08:05:16Z (25s ago) | spot index $68625.86 DVOL (reported 30d implied index): 39.2 | vs prior day -0.8 | 38th percentile of 367 daily closes ATM IV, constant maturity (calculated): 7d 38.9 | 30d 37.9 | 90d 39.3 → term FLAT (7d−30d +1.0 pts) 25Δ risk reversal 30d (calculated, call IV − put IV): -4.1 pts → PUTS OVER CALLS 30d realized (calculated, daily closes): 36.0 → IV premium (30d IV − realized) +2.0 pts Implied 1σ move (speed the market prices, not direction): 1d ±$1340.24 (±2.0%, front IV) | 7d ±$3701.02 (±5.4%) | 30d ±$7461.54 (±10.9%) Spot–vol correlation 90d (calculated, daily DVOL change vs log return): +0.18 Changes (stored hourly snapshots): n/a yet Per expiry (ATM IV | 25Δ RR | 25Δ fly): 15 Nov 2026 2.0d fwd $68622.40 ATM 37.3 | RR -6.9 | fly +0.7 16 Nov 2026 3.0d fwd $68627.07 ATM 36.0 | RR -5.5 | fly +0.9 17 Nov 2026 4.0d fwd $68634.64 ATM 38.6 | RR -4.9 | fly +0.5 20 Nov 2026 7.0d fwd $68670.30 ATM 38.9 | RR -5.3 | fly +0.7 27 Nov 2026 14.0d fwd $68764.16 ATM 37.6 | RR -5.2 | fly +0.4 4 Dec 2026 21.0d fwd $68826.94 ATM 37.2 | RR -4.2 | fly +0.7 25 Dec 2026 42.0d fwd $69032.72 ATM 38.4 | RR -4.0 | fly +0.8 29 Jan 2027 77.0d fwd $69404.18 ATM 39.0 | RR -3.9 | fly +0.8 26 Mar 2027 133.0d fwd $70015.13 ATM 39.8 | RR -3.5 | fly +0.9 25 Jun 2027 224.0d fwd $71007.39 ATM 40.2 | RR -2.5 | fly +0.8 Positioning and pricing, not direction: put/call ratios, skew and max pain do not predict price, and aggregate OI cannot show dealer gamma, who is long or short, or pinning. Max pain is a theoretical calculation. ``` ## Related tools - [Options Chain](https://www.f1ow.com/docs/tools/options_chain) — Calls and puts by strike and expiry: quotes, mark implied volatility, open interest and volume. Reported data is separated from calculated metrics, with coverage and thin-market caveats. - [Options Positioning](https://www.f1ow.com/docs/tools/options_positioning) — Put/call open interest, strike and expiry concentrations, expiring notional, theoretical max pain and recent option trades. One venue; aggregate open interest does not reveal who is long or short, and max pain is not a forecast. - [Gamma & Hedge Scenarios](https://www.f1ow.com/docs/tools/options_gamma) — Modeled gamma exposure, walls, flip levels and an options regime, with price, time and volatility what-ifs. Dealer hedge ladders depend on an explicit positioning scenario — theoretical sensitivity, not observed dealer orders. - [Options-Implied Odds](https://www.f1ow.com/docs/tools/options_probability) — Risk-neutral expiry probabilities above or below a price or inside a range, plus implied 68% and 90% ranges. Derived from options forwards and volatility, with smile adjustment where quoted — not calibrated real-world forecasts. --- # Options Positioning (`options_positioning`) > Put/call open interest, strike and expiry concentrations, expiring notional, theoretical max pain and recent option trades. One venue; aggregate open interest does not reveal who is long or short, and max pain is not a forecast. - Category: Options - MCP tool: `options_positioning` - REST: `GET /options/positioning/{currency}` - x402 price: $0.02 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/options_positioning ## What it does Crypto options positioning for one underlying: total call/put open interest in coins and USD notional, put/call OI and volume ratios, largest strike concentrations, upcoming expirations with expiring notional and theoretical max pain, OI change over 24h/7d (from hourly snapshots), and recent trade flow (aggressor premium by calls/puts, block share, largest trades). Descriptive positioning — not a direction signal. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `currency` | string | path | yes | Underlying symbol, e.g. "BTC". | | `expiries` | integer | query | no | Upcoming expirations to list, default 6, max 20. | | `trades_hours` | number | query | no | Trade-flow window in hours, default 4, max 24; 0 skips trades. | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/options/positioning/BTC?expiries=4" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "options_positioning", "arguments": { "currency": "BTC", "expiries": 4 } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/options/positioning/BTC?expiries=4", { 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/options/positioning/BTC?expiries=4", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "options_positioning", "arguments": { "currency": "BTC", "expiries": 4 } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "options_positioning", "arguments": { "currency": "BTC", "expiries": 4 }, "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/options/positioning/BTC?expiries=4" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "caveat": "Positioning and pricing, not direction: put/call ratios, skew and max pain do not predict price, and aggregate OI cannot show dealer gamma, who is long or short, or pinning. Max pain is a theoretical calculation.", "expiries": [ { "days": 0.996154560185185, "expiry": "2026-11-14T08:00:00Z", "maxPainTheoretical": { "holderPayoutUsd": 166035, "strike": 73500 }, "shareOfOiPct": 0.707999714947271, "topStrikes": [ { "callOi": 252.95, "notionalUsd": 17358911.287, "putOi": 0, "strike": 75500 }, { "callOi": 230.6, "notionalUsd": 16639026.0156, "putOi": 11.86, "strike": 75000 }, { "callOi": 5.8, "notionalUsd": 12612746.8094, "putOi": 177.99, "strike": 73000 } ], "totals": { "callNotionalUsd": 88434028.2304, "callOi": 1288.64, "callVolume24h": 927.689999999999, "instruments": 124, "putCallOi": 0.819484107275888, "putCallVolume": 1.50208582608415, "putNotionalUsd": 72470280.6772, "putOi": 1056.02, "putVolume24h": 1393.47 } }, { "days": 1.99615456018519, "expiry": "2026-11-15T08:00:00Z", "maxPainTheoretical": { "holderPayoutUsd": 112250, "strike": 73500 }, "shareOfOiPct": 0.337497599397041, "topStrikes": [ { "callOi": 118.54, "notionalUsd": 11847568.4704, "putOi": 54.1, "strike": 74000 }, { "callOi": 99.61, "notionalUsd": 6835821.9146, "putOi": 0, "strike": 82000 }, { "callOi": 80, "notionalUsd": 5490068.8, "putOi": 0, "strike": 78000 } ], "totals": { "callNotionalUsd": 42048436.9392, "callOi": 612.72, "callVolume24h": 832.54, "instruments": 120, "putCallOi": 0.82412847630239, "putCallVolume": 0.832224277512192, "putNotionalUsd": 34653314.2656, "putOi": 504.96, "putVolume24h": 692.86 } }, { "days": 2.99615456018519, "expiry": "2026-11-16T08:00:00Z", "maxPainTheoretical": { "holderPayoutUsd": 150350, "strike": 72500 }, "shareOfOiPct": 0.215761362552043, "topStrikes": [ { "callOi": 11, "notionalUsd": 13258516.152, "putOi": 182.2, "strike": 70000 }, { "callOi": 15.7, "notionalUsd": 8708621.634, "putOi": 111.2, "strike": 71500 }, { "callOi": 27.2, "notionalUsd": 3472468.516, "putOi": 23.4, "strike": 73000 } ], "totals": { "callNotionalUsd": 15454543.672, "callOi": 225.2, "callVolume24h": 558.01, "instruments": 124, "putCallOi": 2.17286856127886, "putCallVolume": 1.42397089657891, "putNotionalUsd": 33580692.0738, "putOi": 489.33, "putVolume24h": 794.59 } }, { "days": 3.99615456018519, "expiry": "2026-11-17T08:00:00Z", "shareOfOiPct": 0, "topStrikes": [], "totals": { "callNotionalUsd": 0, "callOi": 0, "callVolume24h": 0, "instruments": 84, "putNotionalUsd": 0, "putOi": 0, "putVolume24h": 0 } } ], "indexPriceUsd": 68625.86, "meta": { "ageSeconds": 26, "observedAt": "2026-11-13T08:05:16Z", "provider": "Deribit", "underlying": "BTC" }, "metricSources": { "calculated": [ "notionalUsd", "putCallOi", "putCallVolume", "maxPain", "oiChange", "tradeFlow" ], "reported": [ "callOi", "putOi", "callVolume24h", "putVolume24h", "indexPriceUsd" ] }, "notes": [], "state": "BALANCED", "topStrikes": [ { "callOi": 12721.47, "notionalUsd": 1289592455.8104, "putOi": 6070.17, "strike": 80000 }, { "callOi": 2424, "notionalUsd": 1053819392.4186, "putOi": 12932.01, "strike": 60000 }, { "callOi": 2908.68, "notionalUsd": 972606863.436, "putOi": 11263.92, "strike": 70000 }, { "callOi": 12518.13, "notionalUsd": 915453874.7108, "putOi": 821.65, "strike": 90000 }, { "callOi": 11158.3, "notionalUsd": 790976172.2912, "putOi": 367.62, "strike": 100000 } ], "totals": { "callNotionalUsd": 12718193188.3244, "callOi": 185326.54, "callVolume24h": 24316.45, "instruments": 1572, "putCallOi": 0.786936722608645, "putCallVolume": 1.1152594231477, "putNotionalUsd": 10008413265.1236, "putOi": 145840.26, "putVolume24h": 27119.15 }, "tradeFlow": { "blockNotionalUsd": 1011944790.343, "callBuyPremiumUsd": 2381868.5947789, "callSellPremiumUsd": 3382181.4044084, "from": "2026-11-13T04:05:42Z", "largest": [ { "amount": 1900, "at": "2026-11-13T04:50:10Z", "block": true, "direction": "buy", "instrument": "BTC-25DEC26-100000-C", "iv": 48.88, "notionalUsd": 130407222, "premiumUsd": 117366.4998 }, { "amount": 1100, "at": "2026-11-13T04:50:10Z", "block": true, "direction": "sell", "instrument": "BTC-27NOV26-73000-C", "iv": 37.07, "notionalUsd": 75498918, "premiumUsd": 664390.4784 }, { "amount": 1100, "at": "2026-11-13T06:16:31Z", "block": true, "direction": "sell", "instrument": "BTC-4DEC26-75000-C", "iv": 35.98, "notionalUsd": 75181777, "premiumUsd": 526272.439 }, { "amount": 750, "at": "2026-11-13T04:50:10Z", "block": true, "direction": "buy", "instrument": "BTC-26MAR27-100000-C", "iv": 40.88, "notionalUsd": 51476535, "premiumUsd": 504470.043 }, { "amount": 500, "at": "2026-11-13T07:08:32Z", "block": true, "direction": "buy", "instrument": "BTC-4DEC26-62000-P", "iv": 43.67, "notionalUsd": 34565935, "premiumUsd": 248874.732 }, { "amount": 500, "at": "2026-11-13T07:08:32Z", "block": true, "direction": "sell", "instrument": "BTC-29JAN27-65000-P", "iv": 40.47, "notionalUsd": 34565935, "premiumUsd": 1441399.4895 }, "… 2 more" ], "notionalUsd": 1603954151.0467, "putBuyPremiumUsd": 10151002.0880033, "putSellPremiumUsd": 12298378.1196556, "to": "2026-11-13T08:05:42Z", "trades": 3965, "truncated": false }, "generatedAt": "2026-11-13T08:05:16Z" } ``` Over MCP the text report a model reads comes with it: ```text === BTC options positioning — Deribit === Observed 2026-11-13T08:05:16Z (26s ago) | spot index $68625.86 OI: calls 185.33K BTC ($12.72B) / puts 145.84K BTC ($10.01B) → total $22.73B across 1572 instruments Put/call OI 0.79 → BALANCED (descriptive bands: < 0.7 call-heavy, > 1.0 put-heavy) | put/call 24h volume 1.12 OI change 24h: n/a (no snapshot near that time yet) OI change 7d: n/a (no snapshot near that time yet) Largest strikes (all expiries): $80000.00: calls 12.72K / puts 6.07K BTC ($1.29B) $60000.00: calls 2.42K / puts 12.93K BTC ($1.05B) $70000.00: calls 2.91K / puts 11.26K BTC ($972.6M) $90000.00: calls 12.52K / puts 821.65 BTC ($915.5M) $100000.00: calls 11.16K / puts 367.62 BTC ($791.0M) Upcoming expirations (08:00 UTC; max pain = theoretical minimum holder payout, not a forecast): 14 Nov 2026 1.0d $160.9M (0.7% of OI) P/C 0.82 | max pain $73500.00 | top $75500.00 C 252.95/P 0.00; $75000.00 C 230.60/P 11.86; $73000.00 C 5.80/P 177.99 15 Nov 2026 2.0d $76.7M (0.3% of OI) P/C 0.82 | max pain $73500.00 | top $74000.00 C 118.54/P 54.10; $82000.00 C 99.61/P 0.00; $78000.00 C 80.00/P 0.00 16 Nov 2026 3.0d $49.0M (0.2% of OI) P/C 2.17 | max pain $72500.00 | top $70000.00 C 11.00/P 182.20; $71500.00 C 15.70/P 111.20; $73000.00 C 27.20/P 23.40 17 Nov 2026 4.0d $0 (0.0% of OI) P/C n/a | max pain n/a | top Trade flow 2026-11-13T04:05:42Z → 2026-11-13T08:05:42Z (3965 trades): aggressor premium — calls bought $2.4M / sold $3.4M | puts bought $10.2M / sold $12.3M notional traded $1.60B, block trades $1.01B (63%) largest: 2026-11-13T04:50:10Z BTC-25DEC26-100000-C buy 1.90K BTC ($130.4M notional, $117k premium, IV 48.9) block 2026-11-13T04:50:10Z BTC-27NOV26-73000-C sell 1.10K BTC ($75.5M notional, $664k premium, IV 37.1) block 2026-11-13T06:16:31Z BTC-4DEC26-75000-C sell 1.10K BTC ($75.2M notional, $526k premium, IV 36.0) block 2026-11-13T04:50:10Z BTC-26MAR27-100000-C buy 750.00 BTC ($51.5M notional, $504k premium, IV 40.9) block 2026-11-13T07:08:32Z BTC-4DEC26-62000-P buy 500.00 BTC ($34.6M notional, $249k premium, IV 43.7) block 2026-11-13T07:08:32Z BTC-29JAN27-65000-P sell 500.00 BTC ($34.6M notional, $1.4M premium, IV 40.5) block 2026-11-13T07:08:32Z BTC-29JAN27-62000-P buy 500.00 BTC ($34.6M notional, $1.0M premium, IV 42.2) block 2026-11-13T07:08:32Z BTC-20NOV26-65000-P sell 500.00 BTC ($34.6M notional, $169k premium, IV 44.6) block Units: OI and volume in underlying coins (reported); USD notional = coins × spot index (calculated); IV in % annualized; premiums quoted in the coin on inverse books (BTC/ETH), in USDC on linear books. Positioning and pricing, not direction: put/call ratios, skew and max pain do not predict price, and aggregate OI cannot show dealer gamma, who is long or short, or pinning. Max pain is a theoretical calculation. ``` ## Related tools - [Options Chain](https://www.f1ow.com/docs/tools/options_chain) — Calls and puts by strike and expiry: quotes, mark implied volatility, open interest and volume. Reported data is separated from calculated metrics, with coverage and thin-market caveats. - [Implied Volatility](https://www.f1ow.com/docs/tools/options_volatility) — ATM volatility, term structure, implied move size, 25-delta skew and IV versus realized volatility. BTC/ETH volatility-index history adds context. What options price for the size of a move — not its direction. - [Gamma & Hedge Scenarios](https://www.f1ow.com/docs/tools/options_gamma) — Modeled gamma exposure, walls, flip levels and an options regime, with price, time and volatility what-ifs. Dealer hedge ladders depend on an explicit positioning scenario — theoretical sensitivity, not observed dealer orders. - [Options-Implied Odds](https://www.f1ow.com/docs/tools/options_probability) — Risk-neutral expiry probabilities above or below a price or inside a range, plus implied 68% and 90% ranges. Derived from options forwards and volatility, with smile adjustment where quoted — not calibrated real-world forecasts. --- # Gamma & Hedge Scenarios (`options_gamma`) > Modeled gamma exposure, walls, flip levels and an options regime, with price, time and volatility what-ifs. Dealer hedge ladders depend on an explicit positioning scenario — theoretical sensitivity, not observed dealer orders. - Category: Options - MCP tool: `options_gamma` - REST: `GET /options/gamma/{currency}` - MCP App: hosts that support MCP Apps render the result as an interactive view - x402 price: $0.03 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/options_gamma ## What it does Crypto options gamma exposure (modeled): gross and dealer-signed GEX in USD per 1% move, by strike and expiry, gamma walls, modeled gamma flip levels, options-derived price levels (call/put OI walls, gamma concentrations, max pain, high-sensitivity zones) and a rule-based options regime (positive/negative modeled gamma, near flip, expiry concentration, elevated/compressed vol), with perp funding/OI/liquidations/order book as a separate evidence block. What-ifs: hedging=true adds theoretical dealer hedge ladders (spot ±0.5–5%, charm 1–24h and through the next expiry, vanna ±1/2/5 vol points); target_price / horizon_hours / iv_change reprice the same frozen contracts (GEX, dealer delta, hedge, flips and walls before vs after). Signed numbers depend on an explicit dealer-positioning scenario; modeled, not observed orders. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `currency` | string | path | yes | Underlying symbol, e.g. "BTC". | | `scenario` | string | query | no | Assumed dealer positioning (public OI can't show it). Default calls_long_puts_short: dealers long calls, short puts. One of: `calls_long_puts_short`, `short_all`, `long_all`. | | `hedging` | boolean | query | no | Add theoretical dealer hedge ladders (price, charm, vanna). Implied by any what-if parameter. | | `price_change_pct` | number | query | no | Extra custom spot move for the hedge ladder, percent (e.g. -3). | | `target_price` | number | query | no | What-if: underlying price to reprice at. | | `horizon_hours` | number | query | no | What-if: hours to advance (0–2160). Contracts expiring in between drop out. | | `iv_change` | number | query | no | What-if: absolute IV shift in vol points (e.g. -2). | | `expiry` | string | query | no | What-if/hedging scope: only this expiry ("next", "2026-11-27" or "27NOV26"). Default all. | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/options/gamma/BTC" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "options_gamma", "arguments": { "currency": "BTC" } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/options/gamma/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/options/gamma/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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "options_gamma", "arguments": { "currency": "BTC" } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "options_gamma", "arguments": { "currency": "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/options/gamma/BTC" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "byExpiry": [ { "expiry": "2026-11-14T08:00:00Z", "grossUsd": 5745211.11448767, "signedUsd": -4921743.49801488 }, { "expiry": "2026-11-15T08:00:00Z", "grossUsd": 2641721.45862925, "signedUsd": -1978051.30666821 }, { "expiry": "2026-11-16T08:00:00Z", "grossUsd": 3250669.77639335, "signedUsd": -2266597.2393263 }, { "expiry": "2026-11-20T08:00:00Z", "grossUsd": 34678959.3481711, "signedUsd": -23665523.9283983 }, { "expiry": "2026-11-27T08:00:00Z", "grossUsd": 117082596.614853, "signedUsd": -93814532.9790289 }, { "expiry": "2026-12-04T08:00:00Z", "grossUsd": 560839.363061613, "signedUsd": -244175.714783567 }, "… 5 more" ], "byStrike": [ { "callUsd": -45835.6923099011, "grossUsd": 2739790.48112173, "putUsd": 2693310.85563195, "signedUsd": -2739146.54794185, "strike": 50000 }, { "callUsd": -1266.47873781372, "grossUsd": 472872.235777945, "putUsd": 470769.691588953, "signedUsd": -472036.170326767, "strike": 52000 }, { "callUsd": 716.779449313166, "grossUsd": 1242875.68903756, "putUsd": 1242158.90958825, "signedUsd": -1241442.13013893, "strike": 54000 }, { "callUsd": 26377.2406761568, "grossUsd": 3495009.39586134, "putUsd": 3468632.15518518, "signedUsd": -3442254.91450903, "strike": 55000 }, { "callUsd": 10978.4100110965, "grossUsd": 692376.289621929, "putUsd": 681397.879610832, "signedUsd": -670419.469599736, "strike": 56000 }, { "callUsd": 19075.7688217783, "grossUsd": 5124120.80711162, "putUsd": 5105045.03828984, "signedUsd": -5085969.26946806, "strike": 58000 }, "… 38 more" ], "caveat": "Modeled dealer hedging is not observed dealer trading: public open interest does not show who holds what, so every signed number rests on the stated positioning assumption. Options positioning alone does not establish the future direction of the underlying.", "crossMarket": { "bookImbalancePct": -30.2052668337543, "fundingRatePctPerInterval": 0.000163375, "liquidations24hUsd": 918621983.506613, "perpOpenInterestUsd": 2560109472.4656, "priceChange24hPct": -6.79676, "source": "perp market merge + order book; separate evidence" }, "dataQuality": { "instruments": 1572, "linearOnly": false, "nearExpiryExcluded": 0, "priced": 1045, "pricedOiSharePct": 100, "unpricedWithOi": 0, "warnings": [] }, "flip": { "crossings": [ 76832.5074174907 ], "gridHigh": 89213.618, "gridLow": 48038.102 }, "gex": { "callUsdPer1Pct": 76420730.1355919, "expiring7dSharePct": 5.74947126342374, "gammaState": "NEGATIVE MODELED GAMMA", "grossUsdPer1Pct": 329834819.687822, "putUsdPer1Pct": 252795109.767778, "signedAtSpotDown1Pct": -177082689.764935, "signedAtSpotUp1Pct": -173438033.900716, "signedUsdPer1PctModeled": -176374379.632186, "top5StrikeSharePct": 41.6392747844804 }, "levels": [ { "basis": "dealers long calls, short puts (customers sell calls, buy puts)", "distancePct": 0.545188067588515, "kind": "negative modeled gamma", "price": 69000, "unit": "USD per 1% move (modeled)", "value": -20133790.8573949 }, { "basis": "reported OI", "distancePct": 2.00236470624922, "kind": "put OI wall", "price": 70000, "unit": "USD OI notional (all expiries)", "value": 772996196.9712 }, { "basis": "dealers long calls, short puts (customers sell calls, buy puts)", "distancePct": 2.00236470624922, "kind": "negative modeled gamma", "price": 70000, "unit": "USD per 1% move (modeled)", "value": -35292762.0273651 }, { "basis": "dealers long calls, short puts (customers sell calls, buy puts)", "distancePct": 4.91671798357062, "kind": "negative modeled gamma", "price": 72000, "unit": "USD per 1% move (modeled)", "value": -23391347.8962148 }, { "basis": "minimum aggregate holder payout; not a pinning forecast", "distancePct": 5.64530630290098, "expiry": "2026-11-16T08:00:00Z", "kind": "max pain (theoretical)", "price": 72500, "unit": "USD OI notional of that expiry", "value": 49035235.7458 }, { "basis": "minimum aggregate holder payout; not a pinning forecast", "distancePct": 7.10248294156168, "expiry": "2026-11-14T08:00:00Z", "kind": "max pain (theoretical)", "price": 73500, "unit": "USD OI notional of that expiry", "value": 160904308.9076 }, "… 11 more" ], "meta": { "ageSeconds": 26, "observedAt": "2026-11-13T08:05:16Z", "provider": "Deribit", "underlying": "BTC" }, "model": "Model: Black-76 on each expiry's Deribit forward, r = 0, calendar time; inverse (coin-settled) options hedge the premium-adjusted delta Δ − V/F, linear (USDC) the plain delta; spot moves keep each forward's basis; IV shifts are absolute vol points, sticky strike; open interest frozen as listed.", "regime": { "evidence": [ "modeled signed GEX -$176.4M vs gross $329.8M per 1% move (-53% net)", "modeled gamma flip(s) at 76833 (+12.0%)", "6% of OI notional expires within 7 days", "DVOL at the 38th percentile of its year", "30d realized vol at the 35th percentile of its history" ], "labels": [ "NEGATIVE MODELED GAMMA" ], "thresholds": [ "|signed| < 10% of gross → NEAR-NEUTRAL; otherwise the sign of signed GEX", "a modeled flip within 1% of spot → NEAR GAMMA FLIP", ">= 25% of OI notional expiring within 7 days → HIGH EXPIRY CONCENTRATION", "DVOL >= 75th pct → ELEVATED VOL; DVOL and realized <= 25th pct → VOL COMPRESSION" ] }, "scenario": { "code": "calls_long_puts_short", "description": "dealers long calls, short puts (customers sell calls, buy puts)", "observed": false }, "scenarios": [ { "flip": { "crossings": [ 76832.5074174907 ], "gridHigh": 89213.618, "gridLow": 48038.102 }, "scenario": "calls_long_puts_short", "signedUsdPer1Pct": -176374379.632186 }, { "flip": { "crossings": [], "gridHigh": 89213.618, "gridLow": 48038.102 }, "scenario": "short_all", "signedUsdPer1Pct": -329215839.90337 }, { "flip": { "crossings": [], "gridHigh": 89213.618, "gridLow": 48038.102 }, "scenario": "long_all", "signedUsdPer1Pct": 329215839.90337 } ], "spotUsd": 68625.86, "units": { "gex": "USD of underlying hedge per 1% move (Γ·OI·S²·1%)" }, "walls": { "absolute": [ { "distancePct": 2.00236470624922, "grossUsdPer1Pct": 44100531.2800692, "relativeStrength": 5.88730330039195, "signedUsdPer1Pct": -35292762.0273651, "strike": 70000 }, { "distancePct": 4.91671798357062, "grossUsdPer1Pct": 29998973.673253, "relativeStrength": 5.75744680486799, "signedUsdPer1Pct": -23391347.8962148, "strike": 72000 }, { "distancePct": 16.5741310928562, "grossUsdPer1Pct": 21713476.4900203, "relativeStrength": 3.95728820300141, "signedUsdPer1Pct": 1374766.55961709, "strike": 80000 } ], "negative": [ { "distancePct": 2.00236470624922, "grossUsdPer1Pct": 44100531.2800692, "relativeStrength": 5.88730330039195, "signedUsdPer1Pct": -35292762.0273651, "strike": 70000 }, { "distancePct": 4.91671798357062, "grossUsdPer1Pct": 29998973.673253, "relativeStrength": 5.75744680486799, "signedUsdPer1Pct": -23391347.8962148, "strike": 72000 }, { "distancePct": 0.545188067588515, "grossUsdPer1Pct": 20356797.9951389, "relativeStrength": 1.28259549709592, "signedUsdPer1Pct": -20133790.8573949, "strike": 69000 } ], "positive": [ { "distancePct": 28.2315442021419, "grossUsdPer1Pct": 3613217.33563622, "relativeStrength": 1.63803296670264, "signedUsdPer1Pct": 2744083.52955642, "strike": 88000 }, { "distancePct": 31.1458974794633, "grossUsdPer1Pct": 4540620.51693711, "relativeStrength": 3.54479995285406, "signedUsdPer1Pct": 2449205.93722321, "strike": 90000 }, { "distancePct": 25.3171909248205, "grossUsdPer1Pct": 3611861.15721698, "relativeStrength": 1.0197940319368, "signedUsdPer1Pct": 2128985.76635552, "strike": 86000 } ] }, "generatedAt": "2026-11-13T08:05:16Z" } ``` Over MCP the text report a model reads comes with it: ```text === BTC options gamma (modeled) — Deribit === Observed 2026-11-13T08:05:16Z (26s ago) | spot index $68625.86 Model: Black-76 on each expiry's Deribit forward, r = 0, calendar time; inverse (coin-settled) options hedge the premium-adjusted delta Δ − V/F, linear (USDC) the plain delta; spot moves keep each forward's basis; IV shifts are absolute vol points, sticky strike; open interest frozen as listed. Dealer positioning assumed: dealers long calls, short puts (customers sell calls, buy puts) (calls_long_puts_short). Not observed. GEX, USD of hedge per 1% move: gross $329.8M | calls $76.4M | puts $252.8M (long-option magnitudes, no positioning assumption) Modeled signed GEX -$176.4M/1% → NEGATIVE MODELED GAMMA | repriced at spot −1%: -$177.1M/1%, +1%: -$173.4M/1% Concentration: top 5 strikes hold 42% of gross; 6% of OI notional expires within 7 days Gamma flip (modeled, spot repriced over ±30%): $76832.51 (+12.0%) Other scenarios: short_all signed -$329.2M/1%, flip none between $48038.10 and $89213.62 | long_all signed +$329.2M/1%, flip none between $48038.10 and $89213.62 Gamma walls (modeled; exposure values, not support/resistance): + $88000.00 (+28.2%) signed +$2.7M/1%, gross $3.6M, 1.6x neighbours + $90000.00 (+31.1%) signed +$2.4M/1%, gross $4.5M, 3.5x neighbours + $86000.00 (+25.3%) signed +$2.1M/1%, gross $3.6M, 1.0x neighbours − $70000.00 (+2.0%) signed -$35.3M/1%, gross $44.1M, 5.9x neighbours − $72000.00 (+4.9%) signed -$23.4M/1%, gross $30.0M, 5.8x neighbours − $69000.00 (+0.5%) signed -$20.1M/1%, gross $20.4M, 1.3x neighbours largest absolute: $70000.00 $44.1M, $72000.00 $30.0M, $80000.00 $21.7M By expiry (gross / modeled signed, per 1%): 20 Nov 2026 $34.7M / -$23.7M/1% 27 Nov 2026 $117.1M / -$93.8M/1% 25 Dec 2026 $113.1M / -$33.8M/1% 29 Jan 2027 $8.2M / -$3.0M/1% 26 Mar 2027 $31.3M / -$8.8M/1% 25 Jun 2027 $9.2M / -$2.2M/1% Options levels (nearest first; reference points, not guaranteed support or resistance): $69000.00 (+0.5%) negative modeled gamma: -$20.1M USD per 1% move (modeled) $70000.00 (+2.0%) put OI wall: $773.0M USD OI notional (all expiries) $70000.00 (+2.0%) negative modeled gamma: -$35.3M USD per 1% move (modeled) $72000.00 (+4.9%) negative modeled gamma: -$23.4M USD per 1% move (modeled) $72500.00 (+5.6%) max pain (theoretical): $49.0M USD OI notional of that expiry, expiry 16 Nov 2026 $73500.00 (+7.1%) max pain (theoretical): $160.9M USD OI notional of that expiry, expiry 14 Nov 2026 $73500.00 (+7.1%) max pain (theoretical): $76.7M USD OI notional of that expiry, expiry 15 Nov 2026 $74287.49 (+8.3%) high gamma sensitivity (modeled): $20.1M per 1% move: change in signed GEX per 1% move of spot $76832.51 (+12.0%) gamma flip (modeled) $60000.00 (-12.6%) put OI wall: $887.5M USD OI notional (all expiries) $80000.00 (+16.6%) call OI wall: $873.0M USD OI notional (all expiries) $86000.00 (+25.3%) positive modeled gamma: +$2.1M USD per 1% move (modeled) $88000.00 (+28.2%) positive modeled gamma: +$2.7M USD per 1% move (modeled) $90000.00 (+31.1%) call OI wall: $859.1M USD OI notional (all expiries) $90000.00 (+31.1%) positive modeled gamma: +$2.4M USD per 1% move (modeled) Options regime: NEGATIVE MODELED GAMMA evidence: modeled signed GEX -$176.4M vs gross $329.8M per 1% move (-53% net) evidence: modeled gamma flip(s) at 76833 (+12.0%) evidence: 6% of OI notional expires within 7 days evidence: DVOL at the 38th percentile of its year evidence: 30d realized vol at the 35th percentile of its history rule: |signed| < 10% of gross → NEAR-NEUTRAL; otherwise the sign of signed GEX rule: a modeled flip within 1% of spot → NEAR GAMMA FLIP rule: >= 25% of OI notional expiring within 7 days → HIGH EXPIRY CONCENTRATION rule: DVOL >= 75th pct → ELEVATED VOL; DVOL and realized <= 25th pct → VOL COMPRESSION Positive modeled gamma does not guarantee range-bound trading, nor negative gamma a trend. Stored snapshot 24h ago: none yet (hourly, in memory since server start; never reconstructed). Cross-market (perp data; separate evidence, not used in the options labels): perp funding +0.0002% per funding interval (market merge; funding_current gives the per-hour rate) | perp OI $2.56B | 24h price -6.80% | 24h liquidations $918.6M order book (Hyperliquid): imbalance -30.2%, spread 0.1 bps Data quality: 1572 listed instruments; 1045 priced (100% of live OI has mark IV and forward), 0 with OI unpriced; 0 within 1h of expiry left out of gamma; observed 2026-11-13T08:05:16Z Modeled dealer hedging is not observed dealer trading: public open interest does not show who holds what, so every signed number rests on the stated positioning assumption. Options positioning alone does not establish the future direction of the underlying. ``` ## Related tools - [Options Chain](https://www.f1ow.com/docs/tools/options_chain) — Calls and puts by strike and expiry: quotes, mark implied volatility, open interest and volume. Reported data is separated from calculated metrics, with coverage and thin-market caveats. - [Implied Volatility](https://www.f1ow.com/docs/tools/options_volatility) — ATM volatility, term structure, implied move size, 25-delta skew and IV versus realized volatility. BTC/ETH volatility-index history adds context. What options price for the size of a move — not its direction. - [Options Positioning](https://www.f1ow.com/docs/tools/options_positioning) — Put/call open interest, strike and expiry concentrations, expiring notional, theoretical max pain and recent option trades. One venue; aggregate open interest does not reveal who is long or short, and max pain is not a forecast. - [Options-Implied Odds](https://www.f1ow.com/docs/tools/options_probability) — Risk-neutral expiry probabilities above or below a price or inside a range, plus implied 68% and 90% ranges. Derived from options forwards and volatility, with smile adjustment where quoted — not calibrated real-world forecasts. --- # Options-Implied Odds (`options_probability`) > Risk-neutral expiry probabilities above or below a price or inside a range, plus implied 68% and 90% ranges. Derived from options forwards and volatility, with smile adjustment where quoted — not calibrated real-world forecasts. - Category: Options - MCP tool: `options_probability` - REST: `GET /options/probability/{currency}` - x402 price: $0.01 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/options_probability ## What it does Risk-neutral probabilities implied by crypto options at one expiry: chance of settling above/below a price or inside a range, expected 68%/90% ranges, lognormal at that expiry's ATM IV and forward plus a smile-adjusted value within quoted strikes. Market-implied odds, not calibrated forecasts. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `currency` | string | path | yes | Underlying symbol, e.g. "BTC". | | `expiry` | string | query | no | "next" (first expiry ≥ 1 day, default), "2026-12-25" or "25DEC26". | | `price` | number | query | no | Price to get P(above)/P(below) for. | | `range_low` | number | query | no | Range lower bound. | | `range_high` | number | query | no | Range upper bound. | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/options/probability/BTC?expiry=next&range_low=65000&range_high=80000" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "options_probability", "arguments": { "currency": "BTC", "expiry": "next", "range_low": 65000, "range_high": 80000 } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/options/probability/BTC?expiry=next&range_low=65000&range_high=80000", { 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/options/probability/BTC?expiry=next&range_low=65000&range_high=80000", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "options_probability", "arguments": { "currency": "BTC", "expiry": "next", "range_low": 65000, "range_high": 80000 } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "options_probability", "arguments": { "currency": "BTC", "expiry": "next", "range_low": 65000, "range_high": 80000 }, "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/options/probability/BTC?expiry=next&range_low=65000&range_high=80000" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "atmIvPct": 47.57, "between": { "high": 80000, "lognormal": 0.985, "low": 65000, "smileAdjusted": 0.962 }, "days": 1, "expiry": "2026-11-14T08:00:00Z", "forwardUsd": 68603.35, "meta": { "ageSeconds": 2, "observedAt": "2026-11-13T08:05:40Z", "provider": "Deribit", "underlying": "BTC" }, "model": "risk-neutral lognormal at expiry ATM IV and forward; smile-adjusted digital within quoted strikes", "prices": [], "quantiles": [ { "cumulative": 0.05, "price": 65835.67 }, { "cumulative": 0.16, "price": 66908.28 }, { "cumulative": 0.5, "price": 68582.18 }, { "cumulative": 0.84, "price": 70297.95 }, { "cumulative": 0.95, "price": 71443.25 } ], "quotedStrikeRange": { "high": 83000, "low": 63000 }, "generatedAt": "2026-11-13T08:05:40Z" } ``` Over MCP the text report a model reads comes with it: ```text === BTC options expiry probabilities — Deribit === Observed 2026-11-13T08:05:40Z (2s ago) | spot index $68615.64 Expiry 14 Nov 2026 08:00 UTC (1.0d) | forward $68603.35 (Deribit, reported) | ATM IV 47.6% of that expiry (calculated; not DVOL) Model: lognormal P(S_T > K) = N(d2) at the forward and ATM IV; smile-adjusted = N(d2(σ(K))) − vega·dσ/dK (Breeden–Litzenberger digital) within quoted strikes $63000.00–$83000.00. Expected range at expiry (lognormal): 68% $66908.28 – $70297.95 | 90% $65835.67 – $71443.25 | median $68582.18 between $65000.00 and $80000.00: 98% (lognormal) | 96% smile-adjusted Risk-neutral odds priced into options (they include risk premia), not real-world or calibrated forecasts; P(touch before expiry) is higher than P(finish beyond). ``` ## Related tools - [Options Chain](https://www.f1ow.com/docs/tools/options_chain) — Calls and puts by strike and expiry: quotes, mark implied volatility, open interest and volume. Reported data is separated from calculated metrics, with coverage and thin-market caveats. - [Implied Volatility](https://www.f1ow.com/docs/tools/options_volatility) — ATM volatility, term structure, implied move size, 25-delta skew and IV versus realized volatility. BTC/ETH volatility-index history adds context. What options price for the size of a move — not its direction. - [Options Positioning](https://www.f1ow.com/docs/tools/options_positioning) — Put/call open interest, strike and expiry concentrations, expiring notional, theoretical max pain and recent option trades. One venue; aggregate open interest does not reveal who is long or short, and max pain is not a forecast. - [Gamma & Hedge Scenarios](https://www.f1ow.com/docs/tools/options_gamma) — Modeled gamma exposure, walls, flip levels and an options regime, with price, time and volatility what-ifs. Dealer hedge ladders depend on an explicit positioning scenario — theoretical sensitivity, not observed dealer orders. --- # Whale Positions (`flow_whale_positions`) > Live whale accounts: equity, side, notional, entry, leverage, unrealized PnL — and the reported liquidation price of each position. - Category: Order flow & whales - MCP tool: `flow_whale_positions` - REST: `GET /flow/whale-positions` - x402 price: $0.02 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/flow_whale_positions ## What it does Live whale positions on on-chain perpetual exchanges. By default discovers the largest currently-active whale accounts from the venue leaderboard and returns each one's equity and open positions with side, notional (USD), entry price, liquidation price, leverage and unrealized PnL. Optionally pass 'addresses' (comma-separated 0x wallets, max 10) to follow specific wallets instead. For aggregate cohort signals use flow_whale_context. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `addresses` | string | query | no | Optional comma-separated 0x wallet addresses to inspect (max 10). Omit to auto-discover the biggest live whales. | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/flow/whale-positions" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "flow_whale_positions", "arguments": {} } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/flow/whale-positions", { 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/flow/whale-positions", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "flow_whale_positions", "arguments": {} } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "flow_whale_positions", "arguments": {}, "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/flow/whale-positions" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "accounts": [ { "accountValueUsd": 71370898.058053, "address": "0x5b5d51203a0f9079f8aeb098a6523a13f298c060", "positions": [ { "coin": "BTC", "entryPriceUsd": 76361.6, "isLong": false, "leverage": 5, "liquidationPriceUsd": 103853.558635233, "notionalUsd": 140674378.85424, "side": "short", "unrealizedPnlUsd": 15788693.203913 }, { "coin": "ETH", "entryPriceUsd": 2322.72, "isLong": false, "leverage": 5, "liquidationPriceUsd": 4368.8861981688, "notionalUsd": 57254591.97264, "side": "short", "unrealizedPnlUsd": 11450924.703282 }, { "coin": "HYPE", "entryPriceUsd": 75.4377, "isLong": false, "leverage": 5, "liquidationPriceUsd": 185.4509511594, "notionalUsd": 42152234.798576, "side": "short", "unrealizedPnlUsd": 2287649.922532 }, { "coin": "ZEC", "entryPriceUsd": 1478.3647, "isLong": false, "leverage": 3, "liquidationPriceUsd": 2781.6698261302, "notionalUsd": 34366185.0924, "side": "short", "unrealizedPnlUsd": 19557436.357339 }, { "coin": "SOL", "entryPriceUsd": 94.3346, "isLong": false, "leverage": 7, "liquidationPriceUsd": 248.8499967264, "notionalUsd": 33698517.68997, "side": "short", "unrealizedPnlUsd": 6049643.822353 }, { "coin": "XMR", "entryPriceUsd": 607.395, "isLong": false, "leverage": 3, "liquidationPriceUsd": 9141.4904185547, "notionalUsd": 4125556.202768, "side": "short", "unrealizedPnlUsd": 606659.028942 }, "… 17 more" ] }, { "accountValueUsd": 63951550.274719, "address": "0xb83de012dba672c76a7dbbbf3e459cb59d7d6e36", "positions": [ { "coin": "BTC", "entryPriceUsd": 77924.2, "isLong": false, "leverage": 5, "liquidationPriceUsd": 110423.711403038, "notionalUsd": 108146511.02528, "side": "short", "unrealizedPnlUsd": 14599339.905798 }, { "coin": "HYPE", "entryPriceUsd": 75.2795, "isLong": false, "leverage": 5, "liquidationPriceUsd": 137.5255171756, "notionalUsd": 65979047.158208, "side": "short", "unrealizedPnlUsd": 3434897.273196 }, { "coin": "ZEC", "entryPriceUsd": 1336.3891, "isLong": false, "leverage": 3, "liquidationPriceUsd": 2170.0992579181, "notionalUsd": 46675352.2332, "side": "short", "unrealizedPnlUsd": 19529016.427216 }, { "coin": "SOL", "entryPriceUsd": 91.3463, "isLong": false, "leverage": 5, "liquidationPriceUsd": 807.5759335542, "notionalUsd": 7169303.83239, "side": "short", "unrealizedPnlUsd": 1019175.127467 }, { "coin": "DOGE", "entryPriceUsd": 0.094571, "isLong": false, "leverage": 3, "liquidationPriceUsd": 0.8570812631, "notionalUsd": 5001172.624472, "side": "short", "unrealizedPnlUsd": 2338014.458641 }, { "coin": "ENA", "entryPriceUsd": 0.243779, "isLong": false, "leverage": 2, "liquidationPriceUsd": 1.8582718456, "notionalUsd": 4928230.45946, "side": "short", "unrealizedPnlUsd": 3788330.92812 }, "… 24 more" ] }, { "accountValueUsd": 32920860.096124, "address": "0xecb63caa47c7c4e77f60f1ce858cf28dc2b82b00", "positions": [ { "coin": "ETH", "entryPriceUsd": 1967.39, "isLong": false, "leverage": 15, "liquidationPriceUsd": 4849.315017623, "notionalUsd": 18921158.7498, "side": "short", "unrealizedPnlUsd": 310782.818022 }, { "coin": "SOL", "entryPriceUsd": 85.5308, "isLong": false, "leverage": 20, "liquidationPriceUsd": 264.0029910558, "notionalUsd": 12318035.14644, "side": "short", "unrealizedPnlUsd": 855404.608763 }, { "coin": "BTC", "entryPriceUsd": 68934.7, "isLong": false, "leverage": 20, "liquidationPriceUsd": 300620.473110976, "notionalUsd": 8492613.3208, "side": "short", "unrealizedPnlUsd": 34479.532262 }, { "coin": "HYPE", "entryPriceUsd": 73.2154, "isLong": false, "leverage": 3, "liquidationPriceUsd": 318.2999341375, "notionalUsd": 7819585.043392, "side": "short", "unrealizedPnlUsd": 181526.48169 }, { "coin": "LINK", "entryPriceUsd": 10.68094, "isLong": false, "leverage": 10, "liquidationPriceUsd": 108.1269687531, "notionalUsd": 2740099.21641, "side": "short", "unrealizedPnlUsd": 217000.164398 }, { "coin": "XRP", "entryPriceUsd": 1.031289, "isLong": false, "leverage": 10, "liquidationPriceUsd": 12.9894399756, "notionalUsd": 2436703.8969, "side": "short", "unrealizedPnlUsd": 7084.831668 }, "… 80 more" ] }, { "accountValueUsd": 15980850.244409, "address": "0xfc667adba8d4837586078f4fdcdc29804337ca06", "positions": [ { "coin": "BTC", "entryPriceUsd": 71343, "isLong": false, "leverage": 20, "liquidationPriceUsd": 306967.210522249, "notionalUsd": 4394434.38336, "side": "short", "unrealizedPnlUsd": 171985.862449 }, { "coin": "SOL", "entryPriceUsd": 85.9684, "isLong": true, "leverage": 20, "notionalUsd": 4034279.01123, "side": "long", "unrealizedPnlUsd": -302225.826785 }, { "coin": "HYPE", "entryPriceUsd": 73.3347, "isLong": false, "leverage": 5, "liquidationPriceUsd": 359.1363171546, "notionalUsd": 3659733.506648, "side": "short", "unrealizedPnlUsd": 91056.966892 }, { "coin": "XRP", "entryPriceUsd": 1.125748, "isLong": true, "leverage": 20, "notionalUsd": 3286568.1394, "side": "long", "unrealizedPnlUsd": -311457.488645 }, { "coin": "ETH", "entryPriceUsd": 1974.36, "isLong": true, "leverage": 20, "notionalUsd": 1306963.38084, "side": "long", "unrealizedPnlUsd": -26177.570668 }, { "coin": "NEAR", "entryPriceUsd": 3.62058, "isLong": false, "leverage": 10, "liquidationPriceUsd": 69.3856855306, "notionalUsd": 785005.87675, "side": "short", "unrealizedPnlUsd": 23465.349135 }, "… 2 more" ] }, { "accountValueUsd": 1878591.25797, "address": "0xf5d81a135f756ca16544e53c20fc20643ec3ad53", "positions": [ { "coin": "BTC", "entryPriceUsd": 68831.3, "isLong": true, "leverage": 3, "liquidationPriceUsd": 37122.3937771081, "notionalUsd": 3997256.67712, "side": "long", "unrealizedPnlUsd": -10208.825107 }, { "coin": "ETH", "entryPriceUsd": 1936.15, "isLong": true, "leverage": 3, "notionalUsd": 316132.64424, "side": "long", "unrealizedPnlUsd": -91.356084 }, { "coin": "SOL", "entryPriceUsd": 79.7816, "isLong": true, "leverage": 3, "notionalUsd": 67075.91013, "side": "long", "unrealizedPnlUsd": 163.81962 }, { "coin": "HYPE", "entryPriceUsd": 71.3803, "isLong": true, "leverage": 3, "notionalUsd": 65346.340256, "side": "long", "unrealizedPnlUsd": 158.965107 }, { "coin": "ZEC", "entryPriceUsd": 940.2202, "isLong": false, "leverage": 3, "liquidationPriceUsd": 83715.558272885, "notionalUsd": 19653.8748, "side": "short", "unrealizedPnlUsd": -40.879463 }, { "coin": "INIT", "entryPriceUsd": 0.119296, "isLong": true, "leverage": 3, "notionalUsd": 9002.22097, "side": "long", "unrealizedPnlUsd": -9.553578 }, "… 24 more" ] } ], "generatedAt": "2026-11-13T08:05:43.5387675+00:00" } ``` Over MCP the text report a model reads comes with it: ```text Whale positions (Hyperliquid) — 5 largest verified-live accounts from the venue leaderboard 0x5b5d…c060 — equity $71.4M, open notional $328.1M across 23 positions: BTC SHORT $140.7M @ 76361.6 | liq 103854 | 5x | uPnL +$15.8M ETH SHORT $57.3M @ 2322.72 | liq 4368.89 | 5x | uPnL +$11.5M HYPE SHORT $42.2M @ 75.4377 | liq 185.451 | 5x | uPnL +$2.3M ZEC SHORT $34.4M @ 1478.36 | liq 2781.67 | 3x | uPnL +$19.6M SOL SHORT $33.7M @ 94.3346 | liq 248.85 | 7x | uPnL +$6.0M XMR SHORT $4.1M @ 607.395 | liq 9141.49 | 3x | uPnL +$607k (+17 smaller positions) 0xb83d…6e36 — equity $64.0M, open notional $261.8M across 30 positions: BTC SHORT $108.1M @ 77924.2 | liq 110424 | 5x | uPnL +$14.6M HYPE SHORT $66.0M @ 75.2795 | liq 137.526 | 5x | uPnL +$3.4M ZEC SHORT $46.7M @ 1336.39 | liq 2170.1 | 3x | uPnL +$19.5M SOL SHORT $7.2M @ 91.3463 | liq 807.576 | 5x | uPnL +$1.0M DOGE SHORT $5.0M @ 0.094571 | liq 0.857081 | 3x | uPnL +$2.3M ENA SHORT $4.9M @ 0.243779 | liq 1.85827 | 2x | uPnL +$3.8M (+24 smaller positions) 0xecb6…2b00 — equity $32.9M, open notional $79.0M across 86 positions: ETH SHORT $18.9M @ 1967.39 | liq 4849.32 | 15x | uPnL +$311k SOL SHORT $12.3M @ 85.5308 | liq 264.003 | 20x | uPnL +$855k BTC SHORT $8.5M @ 68934.7 | liq 300620 | 20x | uPnL +$34k HYPE SHORT $7.8M @ 73.2154 | liq 318.3 | 3x | uPnL +$182k LINK SHORT $2.7M @ 10.6809 | liq 108.127 | 10x | uPnL +$217k XRP SHORT $2.4M @ 1.03129 | liq 12.9894 | 10x | uPnL +$7k (+80 smaller positions) 0xfc66…ca06 — equity $16.0M, open notional $18.5M across 8 positions: BTC SHORT $4.4M @ 71343 | liq 306967 | 20x | uPnL +$172k SOL LONG $4.0M @ 85.9684 | liq - | 20x | uPnL -$302k HYPE SHORT $3.7M @ 73.3347 | liq 359.136 | 5x | uPnL +$91k XRP LONG $3.3M @ 1.12575 | liq - | 20x | uPnL -$311k ETH LONG $1.3M @ 1974.36 | liq - | 20x | uPnL -$26k NEAR SHORT $785k @ 3.62058 | liq 69.3857 | 10x | uPnL +$23k (+2 smaller positions) 0xf5d8…ad53 — equity $1.9M, open notional $4.5M across 30 positions: BTC LONG $4.0M @ 68831.3 | liq 37122.4 | 3x | uPnL -$10k ETH LONG $316k @ 1936.15 | liq - | 3x | uPnL -$91 SOL LONG $67k @ 79.7816 | liq - | 3x | uPnL +$164 HYPE LONG $65k @ 71.3803 | liq - | 3x | uPnL +$159 ZEC SHORT $20k @ 940.22 | liq 83715.6 | 3x | uPnL -$41 INIT LONG $9k @ 0.119296 | liq - | 3x | uPnL -$10 (+24 smaller positions) ``` ## Related tools - [Order Book](https://www.f1ow.com/docs/tools/flow_orderbook) — Best bid and ask, spread, depth and imbalance, with venue-labelled books and resting walls. Orders can be pulled: visible liquidity is evidence, not a promise of execution. - [Perp Price Levels](https://www.f1ow.com/docs/tools/flow_levels) — Executed volume profiles, value areas, thin zones, inferred long/short entries, realized liquidation prices and persistent resting walls across venues. Levels graded by traded, inferred or resting evidence, with confluence disclosed — not a price forecast. - [Whale Context](https://www.f1ow.com/docs/tools/flow_whale_context) — The cohort view: exchange reserve changes, top-trader long/short lean, and the large exchange-linked transfers that tend to arrive before a move does. - [Market Regime](https://www.f1ow.com/docs/tools/research_regime) — What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call. --- # Order Book (`flow_orderbook`) > Best bid and ask, spread, depth and imbalance, with venue-labelled books and resting walls. Orders can be pulled: visible liquidity is evidence, not a promise of execution. - Category: Order flow & whales - MCP tool: `flow_orderbook` - REST: `GET /flow/orderbook/{symbol}` - 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/flow_orderbook ## What it does Order-book snapshot for one coin's perpetuals: best bid/ask, spread in bps, top-of-book depth (USD) per side, bid/ask depth imbalance, and the cost vs mid of $10k and $100k market orders against the visible levels. Positive imbalance means more bid depth. Single-venue by nature — an on-chain perp exchange, falling back to a major exchange for coins it doesn't list; the response names the venue that answered and how far its visible book reaches. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `symbol` | string | path | yes | Coin symbol, e.g. "BTC". | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/flow/orderbook/BTC" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "flow_orderbook", "arguments": { "symbol": "BTC" } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/flow/orderbook/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/flow/orderbook/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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "flow_orderbook", "arguments": { "symbol": "BTC" } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "flow_orderbook", "arguments": { "symbol": "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/flow/orderbook/BTC" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "asOfAt": "2026-11-13T08:05:41.8650000+00:00", "asOfMs": 1794557141865, "askDepthUsd": 8216498.9836, "bestAskUsd": 68648, "bestBidUsd": 68647, "bidDepthUsd": 4404340.68503, "fillCosts": [ { "buyBps": 0.0728358643797833, "sellBps": 0.0728358643797833, "sizeUsd": 10000 }, { "buyBps": 0.0728358643797833, "sellBps": 0.0728358643797833, "sizeUsd": 100000 } ], "imbalancePct": -30.2052668337543, "midPriceUsd": 68647.5, "source": "Hyperliquid", "spreadBps": 0.145671728759241, "symbol": "BTC", "visibleAskReachPct": 0.0284059871080489, "visibleBidReachPct": -0.0284059871080489, "generatedAt": "2026-11-13T08:05:41.8650000+00:00" } ``` Over MCP the text report a model reads comes with it: ```text BTC order book (Hyperliquid) bid $68647.00 / ask $68648.00 | spread 0.15 bps | mid $68647.50 depth: bid $4404341 / ask $8216499 | imbalance -30.2% $10k market order, cost vs mid: buy 0.1 bps | sell 0.1 bps $100k market order, cost vs mid: buy 0.1 bps | sell 0.1 bps visible book: 20 bid / 20 ask levels, reaching -0.03% / +0.03% from mid; depth beyond is not visible ``` ## Related tools - [Whale Positions](https://www.f1ow.com/docs/tools/flow_whale_positions) — Live whale accounts: equity, side, notional, entry, leverage, unrealized PnL — and the reported liquidation price of each position. - [Perp Price Levels](https://www.f1ow.com/docs/tools/flow_levels) — Executed volume profiles, value areas, thin zones, inferred long/short entries, realized liquidation prices and persistent resting walls across venues. Levels graded by traded, inferred or resting evidence, with confluence disclosed — not a price forecast. - [Whale Context](https://www.f1ow.com/docs/tools/flow_whale_context) — The cohort view: exchange reserve changes, top-trader long/short lean, and the large exchange-linked transfers that tend to arrive before a move does. - [Market Regime](https://www.f1ow.com/docs/tools/research_regime) — What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call. --- # Perp Price Levels (`flow_levels`) > Executed volume profiles, value areas, thin zones, inferred long/short entries, realized liquidation prices and persistent resting walls across venues. Levels graded by traded, inferred or resting evidence, with confluence disclosed — not a price forecast. - Category: Order flow & whales - MCP tool: `flow_levels` - REST: `GET /flow/levels/{symbol}` - MCP App: hosts that support MCP Apps render the result as an interactive view - x402 price: $0.03 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/flow_levels ## What it does Perp price levels for one coin, from what printed rather than from a chart: executed volume at price on every venue that lists it (the major perpetual exchanges), with the value area (70% of volume around the POC), high-volume nodes and thin zones (prices crossed without trading, where moves tend to run); open-interest changes at price split into long and short entries; realized liquidations at price (exchange liquidation sample); and resting walls from deep books on several venues, counted only when a second snapshot 2 s later still shows them. Every level is graded by evidence — traded (volume, liquidations) > inferred (OI side) > resting (orders, which can be pulled) — and lists the other evidence at the same price (confluence). Walls larger than their venue's own daily volume are flagged. Use it for where price may stall, accelerate or meet forced flow; it is not a forecast. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `symbol` | string | path | yes | Coin symbol, e.g. "WAVES". | | `hours` | integer | query | no | Window in hours, 24–168. Default 72. | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/flow/levels/BTC?hours=24" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "flow_levels", "arguments": { "symbol": "BTC", "hours": 24 } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/flow/levels/BTC?hours=24", { 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/flow/levels/BTC?hours=24", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "flow_levels", "arguments": { "symbol": "BTC", "hours": 24 } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "flow_levels", "arguments": { "symbol": "BTC", "hours": 24 }, "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/flow/levels/BTC?hours=24" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "caveats": [ "Evidence grades: traded (volume, realized liquidations) printed and is hard to fake; inferred (long/short entries) reads the side from OI × taker flow, or from price where the venue publishes no taker split; resting (walls) is intent and can be pulled at any time.", "Entries are OI changes placed where they happened, opened minus closed per side over the window: not positions still open.", "Volume spreads each candle (5-minute up to 72h, else 15-minute) across its high–low range, weighted toward its typical price. Wash trading on smaller venues inflates volume.", "Books show only what each venue's depth endpoint returns (see sources.books reach); on the majors that is a fraction of a percent, so walls there are near-touch only.", "Liquidations come from the OKX/Gate timing sample, a share of the market, never scaled up." ], "dailyRangePct": 8.77, "levels": [ { "distancePct": -0.63, "evidence": "inferred", "kind": "long_entries", "onLadder": true, "outsized": false, "price": 68200, "priceHi": 68300, "priceLo": 68100, "readFromPrice": false, "strength": 1, "usd": 81119199, "withKinds": [] }, { "distancePct": -0.34, "evidence": "resting", "kind": "bid_wall", "onLadder": true, "outsized": false, "price": 68400, "priceHi": 68500, "priceLo": 68300, "readFromPrice": false, "strength": 1, "usd": 33934866, "venue": "BingX", "withKinds": [] }, { "distancePct": -0.05, "evidence": "resting", "kind": "bid_wall", "onLadder": true, "outsized": false, "price": 68600, "priceHi": 68700, "priceLo": 68500, "readFromPrice": false, "strength": 1, "usd": 50079990, "withKinds": [] }, { "distancePct": 0.24, "evidence": "resting", "kind": "ask_wall", "onLadder": true, "outsized": false, "price": 68800, "priceHi": 68900, "priceLo": 68700, "readFromPrice": false, "strength": 2, "usd": 48751475, "venue": "BingX", "withKinds": [ "high_volume_node" ] }, { "distancePct": 0.24, "evidence": "traded", "kind": "high_volume_node", "onLadder": true, "outsized": false, "price": 68800, "priceHi": 68900, "priceLo": 68700, "readFromPrice": false, "strength": 3, "usd": 2837990389, "withKinds": [ "ask_wall" ] }, { "distancePct": 0.53, "evidence": "traded", "kind": "short_liquidations", "onLadder": true, "outsized": false, "price": 69000, "priceHi": 69100, "priceLo": 68900, "readFromPrice": false, "strength": 2, "usd": 1681087, "withKinds": [] }, "… 6 more" ], "resistances": [ { "distancePct": 0.24, "evidence": [ "traded", "resting" ], "kinds": [ "high_volume_node", "ask_wall" ], "outsized": false, "price": 68800, "strength": 3, "usd": 2886741864, "venue": "BingX" }, { "distancePct": 0.53, "evidence": [ "traded" ], "kinds": [ "short_liquidations" ], "outsized": false, "price": 69000, "strength": 2, "usd": 1681087 }, { "distancePct": 0.68, "evidence": [ "traded" ], "kinds": [ "value_area_low" ], "outsized": false, "price": 69100, "strength": 2, "usd": 0 } ], "rule": "strength 1–3 = evidence weight (POC 3; nodes, value-area edges, liquidations 2; entries 1.5; walls 1, halved when larger than their venue's day) + 0.5 for the largest of its kind + 1 per other evidence grade and 0.5 per other same-grade kind at that price (3 dots ≥ 3.5, 2 ≥ 2); value area = 70% of volume around the POC; high-volume node = local peak ≥ 1.5× the median bin and ≥ 1.35× the two bins e…", "sources": { "books": [ { "persisted": true, "reachDownPct": -0.2, "reachUpPct": 0.21, "venue": "Binance" }, { "persisted": true, "reachDownPct": -0.16, "reachUpPct": 0.14, "venue": "Bybit" }, { "persisted": true, "reachDownPct": -1.31, "reachUpPct": 1.61, "venue": "BingX" }, { "persisted": true, "reachDownPct": -0.01, "reachUpPct": 0.05, "venue": "Hyperliquid" } ], "flow": "Binance", "liquidations": [ "OKX", "Gate" ], "takerCoveragePct": 100, "volume": [ "Binance", "Bybit", "BingX", "Hyperliquid" ] }, "sourcesFailed": [], "spot": 68633.25, "spotContext": { "inThinZone": false, "inValueArea": false, "nearestAbove": { "distancePct": 0.24, "evidence": "resting", "kind": "ask_wall", "onLadder": true, "outsized": false, "price": 68800, "priceHi": 68900, "priceLo": 68700, "readFromPrice": false, "strength": 2, "usd": 48751475, "venue": "BingX", "withKinds": [ "high_volume_node" ] }, "nearestBelow": { "distancePct": -0.34, "evidence": "resting", "kind": "bid_wall", "onLadder": true, "outsized": false, "price": 68400, "priceHi": 68500, "priceLo": 68300, "readFromPrice": false, "strength": 1, "usd": 33934866, "venue": "BingX", "withKinds": [] } }, "step": 200, "supports": [ { "distancePct": -0.05, "evidence": [ "resting" ], "kinds": [ "bid_wall" ], "outsized": false, "price": 68600, "strength": 1, "usd": 50079990 }, { "distancePct": -0.34, "evidence": [ "resting" ], "kinds": [ "bid_wall" ], "outsized": false, "price": 68400, "strength": 1, "usd": 33934866, "venue": "BingX" }, { "distancePct": -0.63, "evidence": [ "inferred" ], "kinds": [ "long_entries" ], "outsized": false, "price": 68200, "strength": 1, "usd": 81119199 } ], "symbol": "BTC", "unconfirmedWalls": [], "valueArea": { "high": 73500, "low": 69100, "poc": 71400 }, "window": { "liquidatedUsd": 153332244, "oiChangePct": -4.38, "oiEndUsd": 6918409558, "oiStartUsd": 7235479303, "oiVenue": "Binance", "priceChangePct": -6.78, "priceEnd": 68644.4, "priceStart": 73634.6, "priceVenue": "Binance", "volumeUsd": 35787223162 }, "windowHours": 24, "generatedAt": "2026-11-13T08:06:12.4637708+00:00" } ``` Over MCP the text report a model reads comes with it: ```text BTC perp levels, last 24h, $200 bins. Volume: Binance, Bybit, BingX, Hyperliquid. Flow (OI, taker): Binance (taker side known on 100% of its volume). Liquidation sample: OKX, Gate. Books: Binance -0.2%/+0.2%, Bybit -0.2%/+0.1%, BingX -1.3%/+1.6%, Hyperliquid -0.0%/+0.0%. spot $68633.25 · outside the value area · POC $71400.00 · value area $69100.00–$73500.00 resistance: $68800.00 (+0.2%, High-volume node + Ask wall ●●●); $69000.00 (+0.5%, Shorts liquidated ●●○); $69100.00 (+0.7%, Value area low ●●○) support: $68600.00 (-0.0%, Bid wall ●○○); $68400.00 (-0.3%, Bid wall ●○○); $68200.00 (-0.6%, Long entries ●○○) average 24h range 8.8% of price: levels within about ±4.4% are in a day's reach above (nearest first): +0.2% $68800.00 High-volume node $2.84B [traded] · Ask wall $48.8M on BingX [resting] +0.5% $69000.00 Shorts liquidated $1.7M [traded] +0.8% $69200.00 Shorts liquidated $1.6M [traded] +0.7% $69100.00 Value area low [traded] +4.0% $71400.00 Volume POC $2.93B [traded] +4.3% $71600.00 Long entries $88.6M [inferred] below (nearest first): -0.3% $68400.00 Bid wall $33.9M on BingX [resting] -0.6% $68200.00 Long entries $81.1M [inferred] Evidence: traded > inferred > resting. Resting orders can be pulled; not a forecast. ``` ## Related tools - [Whale Positions](https://www.f1ow.com/docs/tools/flow_whale_positions) — Live whale accounts: equity, side, notional, entry, leverage, unrealized PnL — and the reported liquidation price of each position. - [Order Book](https://www.f1ow.com/docs/tools/flow_orderbook) — Best bid and ask, spread, depth and imbalance, with venue-labelled books and resting walls. Orders can be pulled: visible liquidity is evidence, not a promise of execution. - [Whale Context](https://www.f1ow.com/docs/tools/flow_whale_context) — The cohort view: exchange reserve changes, top-trader long/short lean, and the large exchange-linked transfers that tend to arrive before a move does. - [Market Regime](https://www.f1ow.com/docs/tools/research_regime) — What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call. --- # Whale Context (`flow_whale_context`) > The cohort view: exchange reserve changes, top-trader long/short lean, and the large exchange-linked transfers that tend to arrive before a move does. - Category: Order flow & whales - MCP tool: `flow_whale_context` - REST: `GET /flow/whales/{symbol}` - x402 price: $0.02 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/flow_whale_context ## What it does Aggregate whale context for one coin (cohort-level, no individual wallets): per-exchange reserve changes (1d/7d), top-trader long/short positioning on major-exchange perps, and large on-chain transfers to/from exchange wallets above a USD threshold. The transfer feed covers ERC-20 tokens; for native assets (BTC, ETH) it substitutes market-wide USDT exchange flows as a dry-powder signal. Exchange withdrawals suggest accumulation; deposits suggest potential sell pressure. For specific whale wallets and their live positions use flow_whale_positions. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `symbol` | string | path | yes | Coin symbol, e.g. "BTC" or "ETH". | | `min_usd` | number | query | no | Minimum transfer size in USD to count as a whale transfer. Defaults to 1000000. | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/flow/whales/ETH" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "flow_whale_context", "arguments": { "symbol": "ETH" } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/flow/whales/ETH", { 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/flow/whales/ETH", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "flow_whale_context", "arguments": { "symbol": "ETH" } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "flow_whale_context", "arguments": { "symbol": "ETH" }, "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/flow/whales/ETH" ``` ## Sample response Captured 2026-11-10. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "reserves": { "net1dCoins": -4766.312464, "net7dCoins": 129277.52091, "venues": [ { "balanceCoins": 3097618.071101, "change1dCoins": 1695.81836, "change1dPct": 0.05, "change7dCoins": 8063.872717, "change7dPct": 0.26, "exchange": "Coinbase" }, { "balanceCoins": 3054100.711408, "change1dCoins": -53.163254, "change1dPct": 0, "change7dCoins": 5985.042272, "change7dPct": 0.2, "exchange": "Binance" }, { "balanceCoins": 2637493.576821, "change1dCoins": 162.508217, "change1dPct": 0.01, "change7dCoins": 10238.553516, "change7dPct": 0.39, "exchange": "Bitfinex" }, { "balanceCoins": 1128627.733144, "change1dCoins": -14006.617922, "change1dPct": -1.23, "change7dCoins": -24952.799027, "change7dPct": -2.16, "exchange": "OKX" }, { "balanceCoins": 420590.432647, "change1dCoins": 10739.343454, "change1dPct": 2.62, "change7dCoins": 55533.562997, "change7dPct": 15.21, "exchange": "Bybit" }, { "balanceCoins": 408249.635548, "change1dCoins": 4741.245639, "change1dPct": 1.18, "change7dCoins": 53706.515653, "change7dPct": 15.15, "exchange": "Gate" }, "… 9 more" ] }, "source": "CoinGlass", "symbol": "ETH", "topTraders": [ { "longPct": 65.88, "longShortRatio": 1.93, "shortPct": 34.12, "timeMs": 1794168000000 }, { "longPct": 66.04, "longShortRatio": 1.95, "shortPct": 33.96, "timeMs": 1794182400000 }, { "longPct": 65.96, "longShortRatio": 1.94, "shortPct": 34.04, "timeMs": 1794196800000 }, { "longPct": 65.63, "longShortRatio": 1.91, "shortPct": 34.37, "timeMs": 1794211200000 }, { "longPct": 65.51, "longShortRatio": 1.9, "shortPct": 34.49, "timeMs": 1794225600000 }, { "longPct": 64.81, "longShortRatio": 1.84, "shortPct": 35.19, "timeMs": 1794240000000 }, "… 6 more" ], "transfers": { "depositCount": 43, "depositUsd": 529309178.41807, "largest": [ { "amountUsd": 306869098, "asset": "USDT", "direction": "deposit", "exchange": "Binance", "timeMs": 1794290447000 }, { "amountUsd": 55000000, "asset": "USDT", "direction": "deposit", "exchange": "Coinbase", "timeMs": 1794294887000 }, { "amountUsd": 50000000, "asset": "USDT", "direction": "withdrawal", "exchange": "Binance", "timeMs": 1794302351000 }, { "amountUsd": 30000000, "asset": "USDT", "direction": "withdrawal", "exchange": "Binance", "timeMs": 1794292967000 }, { "amountUsd": 20525561.390882, "asset": "USDT", "direction": "withdrawal", "exchange": "Coinbase", "timeMs": 1794295223000 }, { "amountUsd": 20000000, "asset": "USDT", "direction": "withdrawal", "exchange": "Binance", "timeMs": 1794282911000 }, "… 44 more" ], "minUsd": 1000000, "proxyAsset": "USDT", "withdrawalCount": 57, "withdrawalUsd": 378523222.128867 }, "generatedAt": "2026-11-10T16:32:11.0000000+00:00" } ``` Over MCP the text report a model reads comes with it: ```text ETH whale activity (CoinGlass) exchange reserves (ETH): net change 1d -4766, 7d +129278 top venues: Coinbase 3097618 (1d +0.05%, 7d +0.26%) | Binance 3054101 (1d +0.00%, 7d +0.20%) | Bitfinex 2637494 (1d +0.01%, 7d +0.39%) top traders (Binance perps, 4h): 64.8% long / 35.2% short (ratio 1.84) | 48h ago 65.9% long USDT flows >= $1.0M (market-wide dry-powder proxy; no native ETH feed): 43 deposits ($529.3M) vs 57 withdrawals ($378.5M) largest: $306.9M USDT deposit to Binance ``` ## Related tools - [Whale Positions](https://www.f1ow.com/docs/tools/flow_whale_positions) — Live whale accounts: equity, side, notional, entry, leverage, unrealized PnL — and the reported liquidation price of each position. - [Order Book](https://www.f1ow.com/docs/tools/flow_orderbook) — Best bid and ask, spread, depth and imbalance, with venue-labelled books and resting walls. Orders can be pulled: visible liquidity is evidence, not a promise of execution. - [Perp Price Levels](https://www.f1ow.com/docs/tools/flow_levels) — Executed volume profiles, value areas, thin zones, inferred long/short entries, realized liquidation prices and persistent resting walls across venues. Levels graded by traded, inferred or resting evidence, with confluence disclosed — not a price forecast. - [Market Regime](https://www.f1ow.com/docs/tools/research_regime) — What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call. --- # Technicals (`ta_technicals`) > Multi-timeframe trend, RSI, MACD, ADX, ATR, volatility and structure, calculated from candles. Choose spot, perp or automatic routing, with source coverage and partial-candle handling disclosed. - Category: Technicals - MCP tool: `ta_technicals` - REST: `GET /technicals/{symbol}` - MCP App: hosts that support MCP Apps render the result as an interactive view - x402 price: $0.02 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/ta_technicals ## What it does Multi-timeframe technical-analysis snapshot for one coin, computed locally from real candles (not a vendor black box): per interval — last close, RSI(14), EMA20/50/200 + SMA200, MACD(12,26,9) with signal/histogram/cross freshness, ATR(14) with 2xATR stop suggestions (feed research_trade_plan), Bollinger(20,2) with %B and bandwidth, ADX(14) with +DI/-DI, volume vs 20-candle average, and a transparent trend rule (EMA alignment qualified by ADX). 'intervals' picks the timeframes (default 1h,4h,1d; max 4 of 1m|5m|15m|30m|1h|4h|12h|1d|1w); 'market' routes candles (spot|perp|auto, default auto: spot preferred; perp when spot fails or a recent spot listing has too little history for the indicators). Support/resistance comes from the same candles: daily swing highs/lows over the last year, clustered within half a daily ATR, nearest 3 on each side with distance, swing count and last touch, plus the year's range. For levels from executed perp flow (volume at price, liquidations, OI), use flow_levels. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `symbol` | string | path | yes | Coin symbol, e.g. 'ETH' or 'BTC' | | `intervals` | string[] | query | no | Candle intervals to analyze, e.g. ["4h","1d"]. Default ["1h","4h","1d"]; max 4 of 1m\|5m\|15m\|30m\|1h\|4h\|12h\|1d\|1w | | `market` | string | query | no | Which candle series: 'spot', 'perp', or 'auto' (default: spot preferred; perp when spot fails or its history is too short) | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/technicals/ETH?intervals=4h,1d" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "ta_technicals", "arguments": { "symbol": "ETH", "intervals": [ "4h", "1d" ] } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/technicals/ETH?intervals=4h,1d", { 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/technicals/ETH?intervals=4h,1d", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "ta_technicals", "arguments": { "symbol": "ETH", "intervals": [ "4h", "1d" ] } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "ta_technicals", "arguments": { "symbol": "ETH", "intervals": [ "4h", "1d" ] }, "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/technicals/ETH?intervals=4h,1d" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "discardedIntervals": [], "failedIntervals": [], "lastPriceUsd": 1934.52, "levels": { "interval": "1d", "measuredFromUsd": 1934.52, "rangeHighAt": "2025-11-13T00:00:00.0000000+00:00", "rangeHighUsd": 3565.84, "rangeLowAt": "2026-06-06T00:00:00.0000000+00:00", "rangeLowUsd": 1505.68, "resistances": [ { "distancePct": 0.245538945061307, "lastTouchAt": "2026-08-07T00:00:00.0000000+00:00", "priceUsd": 1939.27, "swings": 9 }, { "distancePct": 4.22068523458016, "lastTouchAt": "2026-05-23T00:00:00.0000000+00:00", "priceUsd": 2016.17, "swings": 2 }, { "distancePct": 8.16378223021731, "lastTouchAt": "2026-05-18T00:00:00.0000000+00:00", "priceUsd": 2092.45, "swings": 2 } ], "supports": [ { "distancePct": -5.9785717731875, "lastTouchAt": "2026-08-11T00:00:00.0000000+00:00", "priceUsd": 1818.86333333333, "swings": 9 }, { "distancePct": -12.5046523168538, "lastTouchAt": "2026-07-08T00:00:00.0000000+00:00", "priceUsd": 1692.615, "swings": 2 }, { "distancePct": -22.004424870252, "lastTouchAt": "2026-06-26T00:00:00.0000000+00:00", "priceUsd": 1508.84, "swings": 2 } ], "toleranceUsd": 48.3663407077018, "windowCandles": 365 }, "referencePriceUsd": 1933.15, "symbol": "ETH", "timeframes": [ { "adx14": 56.4188597718765, "asOfAt": "2026-11-13T04:00:00.0000000+00:00", "asOfMs": 1794542400000, "atr14Pct": 2.05008801613496, "atr14Usd": 39.6593626897341, "bollinger": { "bandwidthPct": 9.15542956253747, "lowerUsd": 1951.00165802505, "middleUsd": 2044.5975, "percentB": -0.0880469563458775, "upperUsd": 2138.19334197495 }, "closedCandles": 399, "droppedPartialCandle": true, "ema200Usd": 2302.0072046583, "ema20Usd": 2045.05493345723, "ema50Usd": 2127.46528586039, "interval": "4h", "lastCloseUsd": 1934.52, "macd": { "aboveSignal": false, "candlesSinceCross": 2, "histogram": -6.21884173933634, "macd": -51.5070671924973, "signal": -45.2882254531609 }, "market": "spot", "minusDi14": 45.0363412977679, "plusDi14": 6.42689149995672, "rsi14": 22.1937075251791, "sma200Usd": 2324.15735, "source": "Binance", "trend": "downtrend (close < EMA50 < EMA200), ADX 56.4 (trending)", "volumeAvg20Usd": 90439090.5660812, "volumeLastClosedUsd": 187245235.721526 }, { "adx14": 26.5033205700375, "asOfAt": "2026-11-12T00:00:00.0000000+00:00", "asOfMs": 1794441600000, "atr14Pct": 4.78936305739767, "atr14Usd": 96.7326814154838, "bollinger": { "bandwidthPct": 19.299763744674, "lowerUsd": 2024.49858791726, "middleUsd": 2240.726, "percentB": -0.011003664779183, "upperUsd": 2456.95341208274 }, "closedCandles": 399, "droppedPartialCandle": true, "ema200Usd": 2323.09777459267, "ema20Usd": 2226.946599274, "ema50Usd": 2334.23192033727, "interval": "1d", "lastCloseUsd": 2019.74, "macd": { "aboveSignal": false, "candlesSinceCross": 5, "histogram": -19.7315278665382, "macd": -97.053708531485, "signal": -77.3221806649468 }, "market": "spot", "minusDi14": 29.8773199729975, "plusDi14": 12.209942488498, "rsi14": 28.1181392951025, "sma200Usd": 2150.6548, "source": "Binance", "trend": "mixed (close below EMA50, below EMA200), ADX 26.5 (trending)", "volumeAvg20Usd": 512966545.430985, "volumeLastClosedUsd": 479884504.609204 } ], "generatedAt": "2026-11-13T04:00:00.0000000+00:00" } ``` Over MCP the text report a model reads comes with it: ```text === ETH technicals — computed from candles across 2 timeframes === Last price $1934.52 (4h spot close, Binance) --- 4h (spot, Binance, 399 closed candles) (partial newest candle dropped) --- Close $1934.52 | trend: downtrend (close < EMA50 < EMA200), ADX 56.4 (trending) RSI(14) 22.2 | ATR(14) $39.6594 (2.05% of price) EMA20 $2045.05 | EMA50 $2127.47 | EMA200 $2302.01 | SMA200 $2324.16 MACD(12,26,9) -51.51 | signal -45.29 | histogram -6.219 (below signal, crossed 2 candles ago) Bollinger(20,2) $1951.00 - $2138.19 | %B -0.09 | bandwidth 9.2% ADX(14) 56.4 | +DI 6.4 | -DI 45.0 Volume (last closed) $187.25M vs 20-candle avg $90.44M (2.1x) 2xATR stops from close: long $1855.20 / short $2013.84 (feed research_trade_plan) --- 1d (spot, Binance, 399 closed candles) (partial newest candle dropped) --- Close $2019.74 | trend: mixed (close below EMA50, below EMA200), ADX 26.5 (trending) RSI(14) 28.1 | ATR(14) $96.7327 (4.79% of price) EMA20 $2226.95 | EMA50 $2334.23 | EMA200 $2323.10 | SMA200 $2150.65 MACD(12,26,9) -97.05 | signal -77.32 | histogram -19.73 (below signal, crossed 5 candles ago) Bollinger(20,2) $2024.50 - $2456.95 | %B -0.01 | bandwidth 19.3% ADX(14) 26.5 | +DI 12.2 | -DI 29.9 Volume (last closed) $479.88M vs 20-candle avg $512.97M (0.9x) 2xATR stops from close: long $1826.27 / short $2213.21 (feed research_trade_plan) --- Support / resistance (1d swings, last 365 closed candles, clustered within $48.3663; distances from $1934.52) --- Resistance: $1939.27 (+0.2%, 9 swings, last 2026-08-07) | $2016.17 (+4.2%, 2 swings, last 2026-05-23) | $2092.45 (+8.2%, 2 swings, last 2026-05-18) Support: $1818.86 (-6.0%, 9 swings, last 2026-08-11) | $1692.62 (-12.5%, 2 swings, last 2026-07-08) | $1508.84 (-22.0%, 2 swings, last 2026-06-26) Window range: low $1505.68 (2026-06-06) – high $3565.84 (2025-11-13) ``` ## Related tools - [Market Regime](https://www.f1ow.com/docs/tools/research_regime) — What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call. - [Positioning](https://www.f1ow.com/docs/tools/research_positioning) — Who is on the other side of your trade. Up to eight reads on one coin — who is crowded, who is fragile, who is trapped — plus the price levels the whole board is watching. - [Opportunity Scan](https://www.f1ow.com/docs/tools/research_opportunities) — A liquidity-qualified major and mid-cap universe screened on crowding, stress, leverage, compression, trend, location and entry quality. Ranked candidates with disclosed setup rules and entry, stop and target geometry — not a forecast or a proven edge. - [Trade Plan Review](https://www.f1ow.com/docs/tools/research_trade_plan) — Check your entry, stop and target against ATR, perp levels, liquidation distance, fees, slippage and funding. Add account size and risk for sizing, or a placement time to replay a trade from public candles. An interactive ticket in MCP Apps hosts; no orders placed or plans stored. --- # Fear & Greed (`sentiment_fear_greed`) > The market-wide Fear & Greed index, 0 to 100 with the label that goes with it. One number for how the crowd is feeling. - Category: Sentiment - MCP tool: `sentiment_fear_greed` - REST: `GET /sentiment/fear-greed` - MCP App: hosts that support MCP Apps render the result as an interactive view - x402 price: $0.005 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/sentiment_fear_greed ## What it does Market-wide Fear & Greed index (0-100 plus label) as the median of independent sources (a data provider, Alternative.me, a data provider), with every source's own value, label and observation time in `sources`. `agreement` (aligned/mixed/divergent) says how far the sources differ; a source older than 36h is listed but excluded from the median. Sources publish at different cadences (a data provider about every 15 minutes, the others daily), so read `observedAt`/`ageSeconds` per source. A macro sentiment gauge; use market_overview for the full market snapshot. ## Parameters None. ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/sentiment/fear-greed" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "sentiment_fear_greed", "arguments": {} } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/sentiment/fear-greed", { 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/sentiment/fear-greed", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "sentiment_fear_greed", "arguments": {} } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "sentiment_fear_greed", "arguments": {}, "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/sentiment/fear-greed" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "agreement": "aligned", "asOf": "2026-11-13T07:53:10Z", "label": "Extreme Fear", "max": 20, "method": "median", "min": 19, "sourceCount": 2, "sources": [ { "ageSeconds": 754, "expectedNextUpdateAt": "2026-11-13T08:08:10Z", "included": true, "label": "Extreme Fear", "name": "CoinMarketCap", "observedAt": "2026-11-13T07:53:10Z", "value": 19 }, { "ageSeconds": 29144, "expectedNextUpdateAt": "2026-11-14T00:00:00Z", "included": true, "label": "Extreme Fear", "name": "Alternative.me", "observedAt": "2026-11-13T00:00:00Z", "value": 20 }, { "ageSeconds": 27943, "expectedNextUpdateAt": "2026-11-14T00:00:00Z", "included": false, "label": "Extreme Fear", "name": "CoinGlass", "note": "listed only: does not count toward the aggregate", "observedAt": "2026-11-13T00:20:01Z", "value": 21 } ], "spread": 1, "value": 20, "generatedAt": "2026-11-13T08:05:44.7142757+00:00" } ``` Over MCP the text report a model reads comes with it: ```text Fear & Greed: 20/100 — Extreme Fear (median of 2 sources; range 19–20, aligned) CoinMarketCap: 19 — Extreme Fear (observed 2026-11-13T07:53:10Z, 12m ago) Alternative.me: 20 — Extreme Fear (observed 2026-11-13T00:00:00Z, 8h ago) CoinGlass: 21 — Extreme Fear (observed 2026-11-13T00:20:01Z, 7h ago) [listed only: does not count toward the aggregate] ``` ## Related tools - [Social Sentiment](https://www.f1ow.com/docs/tools/sentiment_social) — Per-coin social composite: galaxy score, alt rank, bullish share, social volume, dominance and interactions. How much attention a coin is getting, and from whom. - [Tweet Search](https://www.f1ow.com/docs/tools/sentiment_twitter) — Raw crowd voice: public X posts from the last seven days on a coin, a topic or a single account, with likes, reposts, replies and views attached, so volume can be weighed against actual reach. - [Market Regime](https://www.f1ow.com/docs/tools/research_regime) — What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call. - [Positioning](https://www.f1ow.com/docs/tools/research_positioning) — Who is on the other side of your trade. Up to eight reads on one coin — who is crowded, who is fragile, who is trapped — plus the price levels the whole board is watching. --- # Social Sentiment (`sentiment_social`) > Per-coin social composite: galaxy score, alt rank, bullish share, social volume, dominance and interactions. How much attention a coin is getting, and from whom. - Category: Sentiment - MCP tool: `sentiment_social` - REST: `GET /sentiment/social/{symbol}` - x402 price: $0.01 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/sentiment_social ## What it does Social-sentiment snapshot for one coin: galaxy score (0-100 composite), alt rank (lower is stronger), bullish sentiment %, 24h social volume, social dominance %, and 24h interactions. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `symbol` | string | path | yes | Coin symbol, e.g. "BTC". | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/sentiment/social/SOL" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "sentiment_social", "arguments": { "symbol": "SOL" } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/sentiment/social/SOL", { 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/sentiment/social/SOL", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "sentiment_social", "arguments": { "symbol": "SOL" } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "sentiment_social", "arguments": { "symbol": "SOL" }, "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/sentiment/social/SOL" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "altRank": 165, "bullishSentimentPct": 81.5, "galaxyScore": 61.5, "interactions24h": 29077632, "source": "LunarCrush", "symbol": "SOL", "generatedAt": "2026-11-13T08:05:48.1075976+00:00" } ``` Over MCP the text report a model reads comes with it: ```text SOL social sentiment galaxy score 62/100 | alt rank #165 | sentiment 82% bullish social volume n/a | dominance n/a | interactions 29077632 (24h) ``` ## Related tools - [Fear & Greed](https://www.f1ow.com/docs/tools/sentiment_fear_greed) — The market-wide Fear & Greed index, 0 to 100 with the label that goes with it. One number for how the crowd is feeling. - [Tweet Search](https://www.f1ow.com/docs/tools/sentiment_twitter) — Raw crowd voice: public X posts from the last seven days on a coin, a topic or a single account, with likes, reposts, replies and views attached, so volume can be weighed against actual reach. - [Market Regime](https://www.f1ow.com/docs/tools/research_regime) — What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call. - [Positioning](https://www.f1ow.com/docs/tools/research_positioning) — Who is on the other side of your trade. Up to eight reads on one coin — who is crowded, who is fragile, who is trapped — plus the price levels the whole board is watching. --- # Tweet Search (`sentiment_twitter`) > Raw crowd voice: public X posts from the last seven days on a coin, a topic or a single account, with likes, reposts, replies and views attached, so volume can be weighed against actual reach. - Category: Sentiment - MCP tool: `sentiment_twitter` - REST: `GET /sentiment/twitter` - x402 price: $0.10 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/sentiment_twitter ## What it does Searches public X Posts from the last 7 days using X search syntax (keywords, phrases, hashtags, cashtags, or operators such as from:handle). Returns engagement, views and direct links; sorted by relevance unless latest=true. Results are capped at 10 Posts. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `query` | string | query | yes | X recent-search query (keywords, phrases, hashtags, cashtags, or operators), e.g. "$BTC", "bitcoin ETF", or "from:handle BTC". Self-serve query limit: 512 characters. | | `latest` | boolean | query | no | Return the newest Posts instead of top relevance. Defaults to false. | | `minLikes` | integer | query | no | Only Posts with at least this many likes. Defaults to 0. | | `limit` | integer | query | no | Max Posts to return (1-10). Defaults to 5. | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/sentiment/twitter?query=%24BTC&limit=5" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "sentiment_twitter", "arguments": { "query": "$BTC", "limit": 5 } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/sentiment/twitter?query=%24BTC&limit=5", { 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/sentiment/twitter?query=%24BTC&limit=5", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "sentiment_twitter", "arguments": { "query": "$BTC", "limit": 5 } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "sentiment_twitter", "arguments": { "query": "$BTC", "limit": 5 }, "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/sentiment/twitter?query=%24BTC&limit=5" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "tweets": [ { "createdAt": "2026-11-13T08:05:30.000Z", "likes": 0, "replies": 0, "retweets": 0, "text": "@benjamincowen The Bitcoin bottom still isn't in\" Crowd yelling \"l told you so\" right now is hilarious.\nIf your target is below\n$57K, you still haven't been right yet.\nPut the trophy down before you hurt yourself. $BTC", "url": "https://x.com/i/web/status/2121152461197251052", "views": 0 }, { "createdAt": "2026-11-13T08:05:20.000Z", "likes": 0, "replies": 0, "retweets": 0, "text": "Fear & Greed hit 20, the lowest since July. Since 2016, $BTC reclaimed the short-term holder cost basis (now ~$75.7K) within 2 weeks in 11 of 14 dips. My line in the sand: a daily close below $60K.", "url": "https://x.com/i/web/status/2121152417370665329", "views": 0 }, { "createdAt": "2026-11-13T08:05:19.000Z", "likes": 0, "replies": 1, "retweets": 0, "text": "🚨 $BTC just flushed $1.3B in longs and hit $67.9K.\n\nThe 2026 floor sits near $60K. I don't think it breaks.\n\nThis is a higher low. https://t.co/UB8xC4enPw", "url": "https://x.com/i/web/status/2121152415210651877", "views": 14 }, { "createdAt": "2026-11-13T08:05:15.000Z", "likes": 1, "replies": 0, "retweets": 0, "text": "GM, wtf happened to $BTC? 🥹 https://t.co/ebgiIlNrBO", "url": "https://x.com/i/web/status/2121152399716876490", "views": 386 }, { "createdAt": "2026-11-13T08:05:09.000Z", "likes": 0, "replies": 0, "retweets": 0, "text": "Bitcoin $BTC just dumped. Latest technical analysis.\nThe 9th point of my 9/21 analysis, the drop, is happening today!\nBut if it breaks below 62500, this scenario no longer works.\n⠀\nStill valid as of today.\n⠀\nIf you're interested, check my earlier detailed analysis below. https://t.co/KVAYxIivcu", "url": "https://x.com/i/web/status/2121152371732475906", "views": 2 } ], "generatedAt": "2026-11-13T08:05:30.0000000+00:00" } ``` Over MCP the text report a model reads comes with it: ```text 0 likes, 0 reposts, 0 replies, 0 views | 2026-11-13T08:05:30.000Z @benjamincowen The Bitcoin bottom still isn't in" Crowd yelling "l told you so" right now is hilarious. If your target is below $57K, you still haven't been right yet. Put the trophy down before you hurt yourself. $BTC https://x.com/i/web/status/2121152461197251052 0 likes, 0 reposts, 0 replies, 0 views | 2026-11-13T08:05:20.000Z Fear & Greed hit 20, the lowest since July. Since 2016, $BTC reclaimed the short-term holder cost basis (now ~$75.7K) within 2 weeks in 11 of 14 dips. My line in the sand: a daily close below $60K. https://x.com/i/web/status/2121152417370665329 0 likes, 0 reposts, 1 replies, 14 views | 2026-11-13T08:05:19.000Z 🚨 $BTC just flushed $1.3B in longs and hit $67.9K. The 2026 floor sits near $60K. I don't think it breaks. This is a higher low. https://t.co/UB8xC4enPw https://x.com/i/web/status/2121152415210651877 1 likes, 0 reposts, 0 replies, 386 views | 2026-11-13T08:05:15.000Z GM, wtf happened to $BTC? 🥹 https://t.co/ebgiIlNrBO https://x.com/i/web/status/2121152399716876490 0 likes, 0 reposts, 0 replies, 2 views | 2026-11-13T08:05:09.000Z Bitcoin $BTC just dumped. Latest technical analysis. The 9th point of my 9/21 analysis, the drop, is happening today! But if it breaks below 62500, this scenario no longer works. ⠀ Still valid as of today. ⠀ If you're interested, check my earlier detailed analysis below. https://t.co/KVAYxIivcu https://x.com/i/web/status/2121152371732475906 ``` ## Related tools - [Fear & Greed](https://www.f1ow.com/docs/tools/sentiment_fear_greed) — The market-wide Fear & Greed index, 0 to 100 with the label that goes with it. One number for how the crowd is feeling. - [Social Sentiment](https://www.f1ow.com/docs/tools/sentiment_social) — Per-coin social composite: galaxy score, alt rank, bullish share, social volume, dominance and interactions. How much attention a coin is getting, and from whom. - [Market Regime](https://www.f1ow.com/docs/tools/research_regime) — What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call. - [Positioning](https://www.f1ow.com/docs/tools/research_positioning) — Who is on the other side of your trade. Up to eight reads on one coin — who is crowded, who is fragile, who is trapped — plus the price levels the whole board is watching. --- # News (`news_search`) > Recent coverage on any topic, drawn from a crypto news aggregator and a live search model at the same time. - Category: News & filings - MCP tool: `news_search` - REST: `GET /news` - x402 price: $0.05 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/news_search ## What it does Searches for recent news on a topic — articles, market-moving posts and exchange notices, newest first. Exchange notices (kind 'exchange', title prefixed [Exchange kind]) come from Binance, Bybit, OKX and Upbit's own listing and delisting feeds; for the full schedule with exact times use catalysts_exchange_listings. Each item is tagged with its kind and, where measured, the price move that followed the headline. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `query` | string | query | yes | | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/news?query=bitcoin+ETF" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "news_search", "arguments": { "query": "bitcoin ETF" } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/news?query=bitcoin+ETF", { 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/news?query=bitcoin+ETF", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "news_search", "arguments": { "query": "bitcoin ETF" } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "news_search", "arguments": { "query": "bitcoin ETF" }, "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/news?query=bitcoin+ETF" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "items": [ { "coins": [ "IBIT", "BTC" ], "date": "2026-11-13T07:30:29.1920000+00:00", "kind": "tweet", "snippet": "", "source": "TreeOfAlpha", "timeMs": 1794555029192, "title": "The Block (@TheBlockCo): THE BLOCK: JPMorgan held $540 million of BlackRock's IBIT bitcoin ETF as of Sept. 30, a 9.6% increase in its position from the prior quarter.\n\nThe bank also raised its Strategy stake 36% to 848,932 shares, according to its latest 13F filing.", "url": "https://x.com/TheBlockCo/status/2121143645688762762#" }, { "coins": [ "ZBT", "BTC" ], "date": "2026-11-13T07:30:07.8520000+00:00", "kind": "tweet", "snippet": "", "source": "TreeOfAlpha", "timeMs": 1794555007852, "title": "ZEROBASE (@zerobasezk): Bitcoin retreated on Thursday as renewed unease over technology stocks weighed on risk appetite, with persistent U.S. spot ETF withdrawals adding pressure. The cryptocurrency fell as much as 1.4 percent and traded near $73,500, while other digital assets weakened alongside U.S. stock futures. \n\nThose futures came under strain as leadership turmoil at Nvidia dragged on the A…", "url": "https://x.com/zerobasezk/status/2121143556370805171#" }, { "coins": [], "date": "2026-11-13", "kind": "article", "snippet": "Spot bitcoin BTC $70,075.44 ETFs, widely considered a proxy for institutional demand, have fallen out of investor favor.\nThese U.S.-listed funds are now in the red for the year, with $1.56 billion in net outflows, according to SoSoValue data analyzed by CoinDesk.\nIt happened fast.\nThe funds were up about $1.01 billion for the year on Oct. 29. Then came $643.3 million in net outflows on Oct. 30 alo…", "source": "Perplexity", "timeMs": 1794528000000, "title": "Bitcoin ETFs are now down over $1.5 billion in net outflows for the year", "url": "https://www.coindesk.com/markets/2026/11/13/bitcoin-etfs-are-now-down-over-usd1-5-billion-in-net-outflows-for-the-year" }, { "coins": [], "date": "2026-11-11", "kind": "article", "snippet": "# Barclays boosts BlackRock Bitcoin ETF stake 48% as banks expand holdings\nLatest NewsPublishedNov 11, 2026\nBarclays reported a $187 million stake as of Sept. 30, while Citigroup disclosed a new $119 million position in Fidelity’s Bitcoin ETF.\nBarclays reported holding 3.94 million shares in BlackRock’s spot Bitcoin exchange-traded fund (ETF) at the end of the third quarter, up 48% from the previo…", "source": "Perplexity", "timeMs": 1794355200000, "title": "Barclays Boosts IBIT Stake 48% Ahead of 13F Filing Deadline", "url": "https://cointelegraph.com/news/barclays-blackrock-ibit-boost-key-q3-filings" }, { "coins": [], "date": "2026-11-11", "kind": "article", "snippet": "# Stock ETF buyers pounce on dip as Bitcoin funds bleed $1.6 billion\nUS spot Bitcoin ETFs have lost $1.6 billion in November, while stock funds attracted billions of dollars from investors buying the dip.\nUS spot Bitcoin exchange-traded funds (ETFs) recorded $95 million in net outflows on Tuesday as investors poured billions of dollars into stock funds during a market pullback.\nTuesday’s withdrawa…", "source": "Perplexity", "timeMs": 1794355200000, "title": "Bitcoin ETF Outflows Persist as Equity Funds Draw Billions", "url": "https://cointelegraph.com/markets/bitcoin-etf-outflows-persist-while-equity-investors-buy-the-dip" }, { "coins": [], "date": "2026-11-10", "kind": "article", "snippet": "# BlackRock Bitcoin ETF outflows hit $1.66B over seven trading sessions\nMarketsPublishedNov 10, 2026\nUS spot Bitcoin ETFs shed $201 million Monday, with seven straight sessions of net withdrawals from BlackRock’s IBIT totaling $1.66 billion.\nUS-listed spot Bitcoin exchange-traded funds (ETFs) extended their losses Monday, with BlackRock’s flagship fund recording its seventh consecutive day of with…", "source": "Perplexity", "timeMs": 1794268800000, "title": "Bitcoin ETF Outflows Slow to $201M as IBIT Losses Hit $1.7B", "url": "https://cointelegraph.com/markets/blackrock-ibit-bitcoin-etf-outflows" }, "… 1 more" ], "generatedAt": "2026-11-13T07:30:29.1920000+00:00" } ``` Over MCP the text report a model reads comes with it: ```text [tweet] The Block (@TheBlockCo): THE BLOCK: JPMorgan held $540 million of BlackRock's IBIT bitcoin ETF as of Sept. 30, a 9.6% increase in its position from the prior quarter. The bank also raised its Strategy stake 36% to 848,932 shares, according to its latest 13F filing. (2026-11-13T07:30:29.1920000+00:00) https://x.com/TheBlockCo/status/2121143645688762762# [tweet] ZEROBASE (@zerobasezk): Bitcoin retreated on Thursday as renewed unease over technology stocks weighed on risk appetite, with persistent U.S. spot ETF withdrawals adding pressure. The cryptocurrency fell as much as 1.4 percent and traded near $73,500, while other digital assets weakened alongside U.S. stock futures. Those futures came under strain as leadership turmoil at Nvidia dragged on the AI trade that has supported risk appetite this year. Nvidia shares slumped as much as 10 percent after reports that the company is seeking potential replacements for CEO Jensen Huang amid accounts of multiple extramarital affairs, including one involving a woman suspected of spying for China. The decline extends a faltering recovery from Bitcoin’s 2026 low below $58,000 in July. Earlier in the week it hit a three-month low after hotter-than-expected U.S. inflation data raised odds of further Federal Reserve rate increases. Spot Bitcoin ETFs have now seen five consecutive sessions of net outflows totaling roughly $1.44 billion, with nearly $300 million exiting on the latest day. BlackRock’s iShares Bitcoin Trust accounted for most of the redemptions as institutions trimmed exposure. Although cumulative inflows since launch remain large, the streak has pushed year-to-date flows negative for the first time in 2026 and highlighted weak fresh demand. Macro conditions reinforce the caution. October CPI rose 0.4 percent month-over-month, exceeding forecasts and leaving core measures elevated. Markets price a high probability of another quarter-point Fed hike in December, with some even contemplating a larger move if pressures persist. Treasury yields have risen, at times approaching 5 percent, tightening conditions and raising the opportunity cost of holding non-yielding assets. Stronger jobs data and a firmer dollar have added to the restraint. In this setting Bitcoin has behaved more like a high-beta risk asset than a pure store of value, moving closely with technology stocks and reacting sharply to any AI-narrative setback. MSCI’s removal of Strategy, the largest corporate Bitcoin holder, from its global equity benchmarks has added further pressure by raising the prospect of forced stock selling and questions about leveraged accumulation strategies. Selling has been more concentrated in derivatives, even as spot activity has shown relative resilience. Looking ahead, Bitcoin’s path will depend on inflation persistence, Federal Reserve policy, and the stability of the technology-led risk trade. Continued sticky prices and further hikes would keep higher real yields and tighter liquidity in place, potentially testing lower supports if ETF outflows continue and leverage is reduced. Resolution of the Nvidia issues combined with cooling inflation that allows the Fed to pause would improve the backdrop and could reopen inflows into ETFs and corporate treasury demand. Near-term producer-price data and Fed commentary will be watched for December signals. Until inflation shows durable progress toward target and institutional demand returns, Bitcoin is likely to stay sensitive to equity risk sentiment and monetary-policy expectations, with its recovery remaining fragile. (2026-11-13T07:30:07.8520000+00:00) https://x.com/zerobasezk/status/2121143556370805171# [article] Bitcoin ETFs are now down over $1.5 billion in net outflows for the year (2026-11-13) https://www.coindesk.com/markets/2026/11/13/bitcoin-etfs-are-now-down-over-usd1-5-billion-in-net-outflows-for-the-year [article] Barclays Boosts IBIT Stake 48% Ahead of 13F Filing Deadline (2026-11-11) https://cointelegraph.com/news/barclays-blackrock-ibit-boost-key-q3-filings [article] Bitcoin ETF Outflows Persist as Equity Funds Draw Billions (2026-11-11) https://cointelegraph.com/markets/bitcoin-etf-outflows-persist-while-equity-investors-buy-the-dip [article] Bitcoin ETF Outflows Slow to $201M as IBIT Losses Hit $1.7B (2026-11-10) https://cointelegraph.com/markets/blackrock-ibit-bitcoin-etf-outflows [article] Weekly Bitcoin ETF Outflows Hit $1.3B, Most Since June (2026-11-09) https://cointelegraph.com/markets/bitcoin-etfs-13b-biggest-weekly-outflow-late-june ``` ## Related tools - [Regulatory Filings](https://www.f1ow.com/docs/tools/filings_search) — Full-text search across recent regulatory filings, with form type, filer, and a link to the document itself. - [Market Regime](https://www.f1ow.com/docs/tools/research_regime) — What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call. - [Positioning](https://www.f1ow.com/docs/tools/research_positioning) — Who is on the other side of your trade. Up to eight reads on one coin — who is crowded, who is fragile, who is trapped — plus the price levels the whole board is watching. - [Opportunity Scan](https://www.f1ow.com/docs/tools/research_opportunities) — A liquidity-qualified major and mid-cap universe screened on crowding, stress, leverage, compression, trend, location and entry quality. Ranked candidates with disclosed setup rules and entry, stop and target geometry — not a forecast or a proven edge. --- # Regulatory Filings (`filings_search`) > Full-text search across recent regulatory filings, with form type, filer, and a link to the document itself. - Category: News & filings - MCP tool: `filings_search` - REST: `GET /filings` - x402 price: $0.01 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/filings_search ## What it does Searches recent regulatory filings (full-text) for a company, ticker, or theme (e.g. 'bitcoin treasury'). Returns the most recent matching filings with form type, filer, and a direct document link. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `query` | string | query | yes | Free-text query, e.g. a company name, ticker, or theme. | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/filings?query=bitcoin+ETF" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "filings_search", "arguments": { "query": "bitcoin ETF" } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/filings?query=bitcoin+ETF", { 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/filings?query=bitcoin+ETF", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "filings_search", "arguments": { "query": "bitcoin ETF" } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "filings_search", "arguments": { "query": "bitcoin ETF" }, "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/filings?query=bitcoin+ETF" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "filings": [ { "company": "PROSHARES TRUST (CIK 0001174610)", "description": "PART-FS", "filedDate": "2026-10-28", "form": "NPORT-P", "url": "https://www.sec.gov/Archives/edgar/data/1174610/000207169126025328/cls-primary-document.htm" }, { "company": "PROSHARES TRUST (CIK 0001174610)", "description": "PART-FS", "filedDate": "2026-10-28", "form": "NPORT-P", "url": "https://www.sec.gov/Archives/edgar/data/1174610/000207169126025257/cls-primary-document.htm" }, { "company": "PROSHARES TRUST (CIK 0001174610)", "description": "PART-FS", "filedDate": "2026-10-28", "form": "NPORT-P", "url": "https://www.sec.gov/Archives/edgar/data/1174610/000207169126025307/cls-primary-document.htm" }, { "company": "PROSHARES TRUST (CIK 0001174610)", "description": "PART-FS", "filedDate": "2026-10-28", "form": "NPORT-P", "url": "https://www.sec.gov/Archives/edgar/data/1174610/000207169126025262/cls-primary-document.htm" }, { "company": "PROSHARES TRUST (CIK 0001174610)", "description": "PART-FS", "filedDate": "2026-10-28", "form": "NPORT-P", "url": "https://www.sec.gov/Archives/edgar/data/1174610/000207169126025219/cls-primary-document.htm" }, { "company": "PROSHARES TRUST (CIK 0001174610)", "description": "PART-FS", "filedDate": "2026-10-28", "form": "NPORT-P", "url": "https://www.sec.gov/Archives/edgar/data/1174610/000207169126025313/cls-primary-document.htm" }, "… 9 more" ], "generatedAt": "2026-11-13T08:05:48.9251555+00:00" } ``` Over MCP the text report a model reads comes with it: ```text 2026-10-28 | NPORT-P | PROSHARES TRUST (CIK 0001174610) PART-FS https://www.sec.gov/Archives/edgar/data/1174610/000207169126025328/cls-primary-document.htm 2026-10-28 | NPORT-P | PROSHARES TRUST (CIK 0001174610) PART-FS https://www.sec.gov/Archives/edgar/data/1174610/000207169126025257/cls-primary-document.htm 2026-10-28 | NPORT-P | PROSHARES TRUST (CIK 0001174610) PART-FS https://www.sec.gov/Archives/edgar/data/1174610/000207169126025307/cls-primary-document.htm 2026-10-28 | NPORT-P | PROSHARES TRUST (CIK 0001174610) PART-FS https://www.sec.gov/Archives/edgar/data/1174610/000207169126025262/cls-primary-document.htm 2026-10-28 | NPORT-P | PROSHARES TRUST (CIK 0001174610) PART-FS https://www.sec.gov/Archives/edgar/data/1174610/000207169126025219/cls-primary-document.htm 2026-10-28 | NPORT-P | PROSHARES TRUST (CIK 0001174610) PART-FS https://www.sec.gov/Archives/edgar/data/1174610/000207169126025313/cls-primary-document.htm 2026-10-28 | NPORT-P | PROSHARES TRUST (CIK 0001174610) PART-FS https://www.sec.gov/Archives/edgar/data/1174610/000207169126025299/cls-primary-document.htm 2026-10-28 | NPORT-P | PROSHARES TRUST (CIK 0001174610) PART-FS https://www.sec.gov/Archives/edgar/data/1174610/000207169126025230/cls-primary-document.htm 2026-10-28 | NPORT-P | PROSHARES TRUST (CIK 0001174610) PART-FS https://www.sec.gov/Archives/edgar/data/1174610/000207169126025343/cls-primary-document.htm 2026-10-28 | NPORT-P | PROSHARES TRUST (CIK 0001174610) PART-FS https://www.sec.gov/Archives/edgar/data/1174610/000207169126025296/cls-primary-document.htm 2026-10-28 | NPORT-P | PROSHARES TRUST (CIK 0001174610) PART-FS https://www.sec.gov/Archives/edgar/data/1174610/000207169126025336/cls-primary-document.htm 2026-09-28 | 497K | PROSHARES TRUST (CIK 0001174610) PROSHARES ULTRASHORT BITCOIN ETF https://www.sec.gov/Archives/edgar/data/1174610/000117461026000965/f46119d1.htm 2026-08-28 | NPORT-P | SKYBRIDGE OPPORTUNITY FUND (CIK 0001181848) NPORT-P https://www.sec.gov/Archives/edgar/data/1181848/000119312526373821/primary_doc.xml 2026-05-29 | NPORT-P | SKYBRIDGE OPPORTUNITY FUND (CIK 0001181848) NPORT-P https://www.sec.gov/Archives/edgar/data/1181848/000119312526247337/primary_doc.xml 2026-05-08 | N-CSR | Volatility Shares Trust (CIK 0001884021) VOLATILITY SHARES - N-CSR https://www.sec.gov/Archives/edgar/data/1884021/000113322826008134/vs-efp23432_ncsr.htm ``` ## Related tools - [News](https://www.f1ow.com/docs/tools/news_search) — Recent coverage on any topic, drawn from a crypto news aggregator and a live search model at the same time. - [Market Regime](https://www.f1ow.com/docs/tools/research_regime) — What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call. - [Positioning](https://www.f1ow.com/docs/tools/research_positioning) — Who is on the other side of your trade. Up to eight reads on one coin — who is crowded, who is fragile, who is trapped — plus the price levels the whole board is watching. - [Opportunity Scan](https://www.f1ow.com/docs/tools/research_opportunities) — A liquidity-qualified major and mid-cap universe screened on crowding, stress, leverage, compression, trend, location and entry quality. Ranked candidates with disclosed setup rules and entry, stop and target geometry — not a forecast or a proven edge. --- # 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 { "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. --- # Prediction Odds (`events_prediction_odds`) > What real money says about a question: per-outcome probabilities, the volume standing behind them, and when the market resolves. - Category: Events & catalysts - MCP tool: `events_prediction_odds` - REST: `GET /events/prediction-odds` - x402 price: $0.01 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/events_prediction_odds ## What it does Market-implied prediction-market odds for a topic (e.g. 'Fed rate cut', 'bitcoin 100k'). Returns the most active matching markets with per-outcome probabilities, volume, and resolution date. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `query` | string | query | yes | Topic to match against market questions, e.g. 'Fed', 'bitcoin', 'ETH ETF'. | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/events/prediction-odds?query=bitcoin+price" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "events_prediction_odds", "arguments": { "query": "bitcoin price" } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/events/prediction-odds?query=bitcoin+price", { 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/events/prediction-odds?query=bitcoin+price", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "events_prediction_odds", "arguments": { "query": "bitcoin price" } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "events_prediction_odds", "arguments": { "query": "bitcoin price" }, "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/events/prediction-odds?query=bitcoin+price" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "markets": [ { "endDate": "2026-11-13T17:00:00Z", "liquidityUsd": 55148.77913, "outcomes": [ { "label": "Yes", "probability": 0.9405 }, { "label": "No", "probability": 0.0595 } ], "question": "Will the price of Bitcoin be above $66,000 on November 13?", "source": "Polymarket", "url": "https://polymarket.com/event/bitcoin-above-66k-on-november-13-2026", "volumeUsd": 145288.494814 }, { "endDate": "2026-11-13T17:00:00Z", "liquidityUsd": 38360.29897, "outcomes": [ { "label": "Yes", "probability": 0.1385 }, { "label": "No", "probability": 0.8615 } ], "question": "Will the price of Bitcoin be above $70,000 on November 13?", "source": "Polymarket", "url": "https://polymarket.com/event/bitcoin-above-70k-on-november-13-2026", "volumeUsd": 145888.209217 }, { "endDate": "2026-11-13T17:00:00Z", "liquidityUsd": 56263.79806, "outcomes": [ { "label": "Yes", "probability": 0.0085 }, { "label": "No", "probability": 0.9915 } ], "question": "Will the price of Bitcoin be above $74,000 on November 13?", "source": "Polymarket", "url": "https://polymarket.com/event/bitcoin-above-74k-on-november-13-2026", "volumeUsd": 104544.397726 }, { "endDate": "2026-11-13T17:00:00Z", "liquidityUsd": 43582.82714, "outcomes": [ { "label": "Yes", "probability": 0.677 }, { "label": "No", "probability": 0.323 } ], "question": "Will the price of Bitcoin be above $68,000 on November 13?", "source": "Polymarket", "url": "https://polymarket.com/event/bitcoin-above-68k-on-november-13-2026", "volumeUsd": 127183.111092 }, { "endDate": "2026-11-13T17:00:00Z", "liquidityUsd": 50917.68951, "outcomes": [ { "label": "Yes", "probability": 0.0015 }, { "label": "No", "probability": 0.9985 } ], "question": "Will the price of Bitcoin be above $76,000 on November 13?", "source": "Polymarket", "url": "https://polymarket.com/event/bitcoin-above-76k-on-november-13-2026", "volumeUsd": 94813.286624 }, { "endDate": "2026-11-13T17:00:00Z", "liquidityUsd": 42549.76347, "outcomes": [ { "label": "Yes", "probability": 0.02 }, { "label": "No", "probability": 0.98 } ], "question": "Will the price of Bitcoin be above $72,000 on November 13?", "source": "Polymarket", "url": "https://polymarket.com/event/bitcoin-above-72k-on-november-13-2026", "volumeUsd": 102936.753233 } ], "generatedAt": "2026-11-13T08:05:47.3014062+00:00" } ``` Over MCP the text report a model reads comes with it: ```text Will the price of Bitcoin be above $66,000 on November 13? Yes 94% / No 6% | vol $145288 | ends 2026-11-13T17:00:00Z https://polymarket.com/event/bitcoin-above-66k-on-november-13-2026 Will the price of Bitcoin be above $70,000 on November 13? Yes 14% / No 86% | vol $145888 | ends 2026-11-13T17:00:00Z https://polymarket.com/event/bitcoin-above-70k-on-november-13-2026 Will the price of Bitcoin be above $74,000 on November 13? Yes 1% / No 99% | vol $104544 | ends 2026-11-13T17:00:00Z https://polymarket.com/event/bitcoin-above-74k-on-november-13-2026 Will the price of Bitcoin be above $68,000 on November 13? Yes 68% / No 32% | vol $127183 | ends 2026-11-13T17:00:00Z https://polymarket.com/event/bitcoin-above-68k-on-november-13-2026 Will the price of Bitcoin be above $76,000 on November 13? Yes 0% / No 100% | vol $94813 | ends 2026-11-13T17:00:00Z https://polymarket.com/event/bitcoin-above-76k-on-november-13-2026 Will the price of Bitcoin be above $72,000 on November 13? Yes 2% / No 98% | vol $102937 | ends 2026-11-13T17:00:00Z https://polymarket.com/event/bitcoin-above-72k-on-november-13-2026 ``` ## Related tools - [ETF Flows](https://www.f1ow.com/docs/tools/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. - [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. --- # Crypto Calendar (`catalysts_calendar`) > Crypto events landing inside the next seven days, filterable to a single coin when only its own catalysts matter. - Category: Events & catalysts - MCP tool: `catalysts_calendar` - REST: `GET /catalysts/calendar` - x402 price: $0.01 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/catalysts_calendar ## What it does Lists upcoming crypto catalyst events for the next 7 days. Optionally filter by comma-separated coin symbols (e.g. 'sol,eth'). ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `coins` | string | query | no | Comma-separated coin symbols, e.g. 'sol,eth'. Omit for all coins. | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/catalysts/calendar?coins=eth,sol" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "catalysts_calendar", "arguments": { "coins": "eth,sol" } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/catalysts/calendar?coins=eth,sol", { 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/calendar?coins=eth,sol", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "catalysts_calendar", "arguments": { "coins": "eth,sol" } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "catalysts_calendar", "arguments": { "coins": "eth,sol" }, "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/calendar?coins=eth,sol" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "events": [ { "categories": [], "coins": [ "SOL" ], "date": "2026-11-14T00:00:00Z", "title": "Scale or Die London" }, { "categories": [], "coins": [ "AKT", "BP", "CARDS", "2Z", "JTO", "JUP", "… 8 more" ], "date": "2026-11-15T00:00:00Z", "title": "Breakpoint 2026" } ], "generatedAt": "2026-09-21T23:00:30.0000000+00:00" } ``` Over MCP the text report a model reads comes with it: ```text 2026-11-14 | SOL Scale or Die London 2026-11-15 | AKT, BP, CARDS, 2Z, JTO, JUP, KMNO, META, NEAR, ORCA, PLUME, PYTH, SECZ, SOL Breakpoint 2026 ``` ## Related tools - [ETF Flows](https://www.f1ow.com/docs/tools/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. - [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. - [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. --- # Macro Calendar (`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. - Category: Events & catalysts - MCP tool: `catalysts_economic_calendar` - REST: `GET /catalysts/economic-calendar` - x402 price: $0.01 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/catalysts_economic_calendar ## What it does Scheduled macroeconomic data releases (CPI, FOMC, jobs, GDP, etc.) from the last ~2 days through the next 7 days. Optionally set 'min_importance' (1-3, default 2) to filter out low-impact releases. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `min_importance` | integer | query | no | Minimum importance level to include: 1 (all), 2 (medium+), 3 (high only). Defaults to 2. | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/catalysts/economic-calendar?min_importance=3" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "catalysts_economic_calendar", "arguments": { "min_importance": 3 } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/catalysts/economic-calendar?min_importance=3", { 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/economic-calendar?min_importance=3", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "catalysts_economic_calendar", "arguments": { "min_importance": 3 } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "catalysts_economic_calendar", "arguments": { "min_importance": 3 }, "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/economic-calendar?min_importance=3" ``` ## Related tools - [ETF Flows](https://www.f1ow.com/docs/tools/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. - [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. - [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. --- # Exchange Listings (`catalysts_exchange_listings`) > Official venue notices for new listings, delistings and other trading changes, with scheduled times, recent history, and coin or venue filters. - Category: Events & catalysts - MCP tool: `catalysts_exchange_listings` - REST: `GET /catalysts/exchange-listings` - 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_exchange_listings ## What it does Exchange listings and delistings from the venues' own notices: what is SCHEDULED (with the exact time when the venue states it) and what happened in the last 'days' (default 7, max 30). Binance (futures instrument list: exact open/settle times; announcements when configured), Bybit and OKX (official announcement feeds) and Upbit. Delistings are announced 2–7 days ahead; new listings, Upbit and Binance especially, are among the most price-moving events. Coins and times are parsed from each notice's title and text: a notice that does not name them says so. Filter by coin ('symbol', comma-separated), 'kind' (listing, delisting, or all to include other trading notices such as pair removals, margin/collateral changes, migrations and postponements) and 'exchange'. ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `symbol` | string | query | no | Coin symbol(s), comma-separated, e.g. 'EPIC' or 'sol,eth'. Omit for all coins. | | `kind` | string | query | no | listing, delisting, both (default) or all (adds other trading notices) One of: `listing`, `delisting`, `both`, `all`. | | `exchange` | string | query | no | Binance, Bybit, OKX or Upbit. Omit for all. | | `days` | integer | query | no | How many days back 'recent' reaches, 1–30. Default 7. | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/catalysts/exchange-listings?kind=delisting&days=14" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "catalysts_exchange_listings", "arguments": { "kind": "delisting", "days": 14 } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/catalysts/exchange-listings?kind=delisting&days=14", { 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/exchange-listings?kind=delisting&days=14", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "catalysts_exchange_listings", "arguments": { "kind": "delisting", "days": 14 } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "catalysts_exchange_listings", "arguments": { "kind": "delisting", "days": 14 }, "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/exchange-listings?kind=delisting&days=14" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "asOfMs": 1794557146786, "days": 14, "kind": "delisting", "recent": [ { "category": "delistings", "coins": [ "EPIC" ], "effectiveDayOnly": false, "effectiveMs": 1793350800000, "exchange": "Bybit", "kind": "delisting", "market": "perp", "publishedMs": 1793178522000, "source": "announcement", "title": "Delisting of EPICUSDT Perpetual Contract", "url": "https://announcements.bybit.com/en-US/article/delisting-of-epicusdt-perpetual-contract--artfddc9a184576/" }, { "category": "delistings", "coins": [ "MITO" ], "effectiveDayOnly": false, "effectiveMs": 1793350800000, "exchange": "Bybit", "kind": "delisting", "market": "perp", "publishedMs": 1793178525000, "source": "announcement", "title": "Delisting of MITOUSDT Perpetual Contract", "url": "https://announcements.bybit.com/en-US/article/delisting-of-mitousdt-perpetual-contract--art87127dd56942/" }, { "category": "delistings", "coins": [ "PTB" ], "effectiveDayOnly": false, "effectiveMs": 1793350800000, "exchange": "Bybit", "kind": "delisting", "market": "perp", "publishedMs": 1793178529000, "source": "announcement", "title": "Delisting of PTBUSDT Perpetual Contract", "url": "https://announcements.bybit.com/en-US/article/delisting-of-ptbusdt-perpetual-contract--art471fb03ab350/" }, { "category": "delistings", "coins": [ "TMX" ], "effectiveDayOnly": false, "effectiveMs": 1793350800000, "exchange": "Bybit", "kind": "delisting", "market": "perp", "publishedMs": 1793178533000, "source": "announcement", "title": "Delisting of TMXUSDT Perpetual Contract", "url": "https://announcements.bybit.com/en-US/article/delisting-of-tmxusdt-perpetual-contract--art1017f3d4607b/" } ], "scheduled": [ { "category": "delistings", "coins": [ "AGI" ], "effectiveDayOnly": false, "effectiveMs": 1794560400000, "exchange": "Bybit", "kind": "delisting", "market": "perp", "publishedMs": 1794387656000, "source": "announcement", "title": "Delisting of AGIUSDT Perpetual Contract", "url": "https://announcements.bybit.com/en-US/article/delisting-of-agiusdt-perpetual-contract--art7816e6629a54/" }, { "category": "delistings", "coins": [ "HAJIMI" ], "effectiveDayOnly": false, "effectiveMs": 1794560400000, "exchange": "Bybit", "kind": "delisting", "market": "perp", "publishedMs": 1794387660000, "source": "announcement", "title": "Delisting of HAJIMIUSDT Perpetual Contract", "url": "https://announcements.bybit.com/en-US/article/delisting-of-hajimiusdt-perpetual-contract--art7266681607d5/" }, { "category": "delistings", "coins": [ "4STOCK" ], "effectiveDayOnly": false, "effectiveMs": 1794560400000, "exchange": "Bybit", "kind": "delisting", "market": "perp", "publishedMs": 1794387664000, "source": "announcement", "title": "Delisting of 4STOCKUSDT Perpetual Contract", "url": "https://announcements.bybit.com/en-US/article/delisting-of-4stockusdt-perpetual-contract--art52c4cf790adc/" }, { "category": "delistings", "coins": [], "effectiveDayOnly": true, "effectiveMs": 1794787200000, "exchange": "Bybit", "kind": "delisting", "publishedMs": 1794225609000, "source": "announcement", "title": "Bybit to Delist 12 Trading Pair(s) on Nov 16, 2026", "url": "https://announcements.bybit.com/en-US/article/bybit-to-delist-12-trading-pair-s-on-nov-16-2026--artcfc6f4821c48/" }, { "category": "거래", "coins": [ "ZIL" ], "effectiveDayOnly": false, "effectiveMs": 1794808800000, "exchange": "Upbit", "kind": "delisting", "market": "spot", "publishedMs": 1792135804000, "source": "announcement", "title": "질리카(ZIL) 거래지원 종료 안내 (11/16 15:00)", "url": "https://upbit.com/service_center/notice?id=6669" }, { "category": "거래", "coins": [ "BLUR" ], "effectiveDayOnly": false, "effectiveMs": 1796018400000, "exchange": "Upbit", "kind": "delisting", "market": "spot", "publishedMs": 1793343600000, "source": "announcement", "title": "블러(BLUR) 거래지원 종료 안내 (11/30 15:00)", "url": "https://upbit.com/service_center/notice?id=6721" }, "… 3 more" ], "sources": [ { "name": "Binance futures listing data", "note": "exact perpetual open/delist times", "ok": true }, { "name": "Binance announcements", "note": "off: set BINANCE_API_KEY and BINANCE_API_SECRET (a read-only key) to hear Binance's announcements", "ok": true }, { "name": "Bybit", "ok": true }, { "name": "OKX", "note": "effective times are on the linked pages, not in the feed", "ok": true }, { "name": "Upbit", "ok": true } ], "generatedAt": "2026-11-13T08:05:46.8499577+00:00" } ``` Over MCP the text report a model reads comes with it: ```text Exchange delistings — scheduled, and the last 14 days Sources: Binance futures listing data ✓ (exact perpetual open/delist times) · Binance announcements ✓ (off: set BINANCE_API_KEY and BINANCE_API_SECRET (a read-only key) to hear Binance's announcements) · Bybit ✓ · OKX ✓ (effective times are on the linked pages, not in the feed) · Upbit ✓ SCHEDULED 2026-11-13 09:00 UTC (in 54m) | DELISTING | Bybit perp | AGI | Delisting of AGIUSDT Perpetual Contract | https://announcements.bybit.com/en-US/article/delisting-of-agiusdt-perpetual-contract--art7816e6629a54/ 2026-11-13 09:00 UTC (in 54m) | DELISTING | Bybit perp | HAJIMI | Delisting of HAJIMIUSDT Perpetual Contract | https://announcements.bybit.com/en-US/article/delisting-of-hajimiusdt-perpetual-contract--art7266681607d5/ 2026-11-13 09:00 UTC (in 54m) | DELISTING | Bybit perp | 4STOCK | Delisting of 4STOCKUSDT Perpetual Contract | https://announcements.bybit.com/en-US/article/delisting-of-4stockusdt-perpetual-contract--art52c4cf790adc/ 2026-11-16 (day only) | DELISTING | Bybit | coins not named in the title | Bybit to Delist 12 Trading Pair(s) on Nov 16, 2026 | https://announcements.bybit.com/en-US/article/bybit-to-delist-12-trading-pair-s-on-nov-16-2026--artcfc6f4821c48/ 2026-11-16 06:00 UTC (in 2d 21h) | DELISTING | Upbit spot | ZIL | 질리카(ZIL) 거래지원 종료 안내 (11/16 15:00) | https://upbit.com/service_center/notice?id=6669 2026-11-30 06:00 UTC (in 16d 21h) | DELISTING | Upbit spot | BLUR | 블러(BLUR) 거래지원 종료 안내 (11/30 15:00) | https://upbit.com/service_center/notice?id=6721 2026-12-07 06:00 UTC (in 23d 21h) | DELISTING | Upbit spot | HBD | 하이브달러(HBD) 거래지원 종료 안내 (12/7 15:00) | https://upbit.com/service_center/notice?id=6744 2026-12-07 06:00 UTC (in 23d 21h) | DELISTING | Upbit spot | DNT | 디스트릭트0x(DNT) 거래지원 종료 안내 (12/7 15:00) | https://upbit.com/service_center/notice?id=6743 2026-12-14 06:00 UTC (in 30d 21h) | DELISTING | Upbit spot | MANTRA | 만트라(MANTRA) 거래지원 종료 안내 (12/14 15:00) | https://upbit.com/service_center/notice?id=6773 RECENT 2026-10-30 09:00 UTC (13d 23h ago) | DELISTING | Bybit perp | EPIC | Delisting of EPICUSDT Perpetual Contract | https://announcements.bybit.com/en-US/article/delisting-of-epicusdt-perpetual-contract--artfddc9a184576/ 2026-10-30 09:00 UTC (13d 23h ago) | DELISTING | Bybit perp | MITO | Delisting of MITOUSDT Perpetual Contract | https://announcements.bybit.com/en-US/article/delisting-of-mitousdt-perpetual-contract--art87127dd56942/ 2026-10-30 09:00 UTC (13d 23h ago) | DELISTING | Bybit perp | PTB | Delisting of PTBUSDT Perpetual Contract | https://announcements.bybit.com/en-US/article/delisting-of-ptbusdt-perpetual-contract--art471fb03ab350/ 2026-10-30 09:00 UTC (13d 23h ago) | DELISTING | Bybit perp | TMX | Delisting of TMXUSDT Perpetual Contract | https://announcements.bybit.com/en-US/article/delisting-of-tmxusdt-perpetual-contract--art1017f3d4607b/ ``` ## Related tools - [ETF Flows](https://www.f1ow.com/docs/tools/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. - [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. --- # On-Chain Metrics (`onchain_metrics`) > Total value locked and the fees a chain actually earns, over 24 hours, a week and a month. What the protocol makes, not what it promises. - Category: On-chain - MCP tool: `onchain_metrics` - REST: `GET /onchain/{symbol}` - x402 price: $0.01 per call (USDC on Base) - HTML: https://www.f1ow.com/docs/tools/onchain_metrics ## What it does On-chain TVL and network fees/revenue (24h/7d/30d) for one chain. Use a chain's own token symbol (e.g. 'ETH', 'SOL', 'BNB') — returns a plain 'not a tracked chain' message for tokens that aren't L1/L2s. Does not cover gas price (gwei). ## Parameters | Name | Type | In | Required | Description | | --- | --- | --- | --- | --- | | `symbol` | string | path | yes | Chain token symbol, e.g. 'ETH' or 'SOL' | ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/onchain/ETH" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_metrics", "arguments": { "symbol": "ETH" } } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/onchain/ETH", { 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/onchain/ETH", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "onchain_metrics", "arguments": { "symbol": "ETH" } } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "onchain_metrics", "arguments": { "symbol": "ETH" }, "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/onchain/ETH" ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "chain": "Ethereum", "fees24hChangePct": 59.42, "fees24hUsd": 15243048.05, "fees30dUsd": 409341447.629998, "fees7dUsd": 72313312.88, "tracked": true, "tvlUsd": 39408009562.0325, "generatedAt": "2026-11-13T08:05:51.0597959+00:00" } ``` Over MCP the text report a model reads comes with it: ```text Ethereum — TVL $39.41B | Fees 24h $15.24M (+59.42%) | Fees 7d $72.31M | Fees 30d $409.34M ``` ## Related tools - [Market Regime](https://www.f1ow.com/docs/tools/research_regime) — What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call. - [Positioning](https://www.f1ow.com/docs/tools/research_positioning) — Who is on the other side of your trade. Up to eight reads on one coin — who is crowded, who is fragile, who is trapped — plus the price levels the whole board is watching. - [Opportunity Scan](https://www.f1ow.com/docs/tools/research_opportunities) — A liquidity-qualified major and mid-cap universe screened on crowding, stress, leverage, compression, trend, location and entry quality. Ranked candidates with disclosed setup rules and entry, stop and target geometry — not a forecast or a proven edge. - [Trade Plan Review](https://www.f1ow.com/docs/tools/research_trade_plan) — Check your entry, stop and target against ATR, perp levels, liquidation distance, fees, slippage and funding. Add account size and risk for sizing, or a placement time to replay a trade from public candles. An interactive ticket in MCP Apps hosts; no orders placed or plans stored. --- # UTC Anchor (`utc_time`) > The current UTC instant, so your agent can fix what “now” means and judge for itself how stale a read is. - Category: Utilities - MCP tool: `utc_time` - REST: `GET /time` - HTML: https://www.f1ow.com/docs/tools/utc_time ## What it does Returns the current UTC time in ISO 8601 format. Use it to anchor 'now' — e.g. to judge how stale a generatedAt timestamp or news date is. ## Parameters None. ## Call it ### cURL ```bash curl "https://mcp.f1ow.com/v1/time" \ -H "Authorization: Bearer $F1OW_API_KEY" ``` ### MCP ```json { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "utc_time", "arguments": {} } } ``` ### TypeScript ```ts const res = await fetch("https://mcp.f1ow.com/v1/time", { 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/time", 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 { "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "utc_time", "arguments": {} } } // Or push a fresh result whenever it changes (minimum interval 15 s) { "jsonrpc": "2.0", "id": 2, "method": "subscriptions/subscribe", "params": { "name": "utc_time", "arguments": {}, "intervalSeconds": 60 } } ``` ## Sample response Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed): ```json { "utc": "2026-11-13T08:05:38.2485036+00:00", "generatedAt": "2026-11-13T08:05:38.2496525+00:00" } ``` Over MCP the text report a model reads comes with it: ```text 2026-11-13T08:05:38.2485036+00:00 ``` ## Related tools - [Market Regime](https://www.f1ow.com/docs/tools/research_regime) — What kind of market you are trading in. Seven forces — trend, volatility, cycle, sentiment, leverage stress, ETF liquidity, rotation — each voting with its own reasoning and its own threshold for changing the call. - [Positioning](https://www.f1ow.com/docs/tools/research_positioning) — Who is on the other side of your trade. Up to eight reads on one coin — who is crowded, who is fragile, who is trapped — plus the price levels the whole board is watching. - [Opportunity Scan](https://www.f1ow.com/docs/tools/research_opportunities) — A liquidity-qualified major and mid-cap universe screened on crowding, stress, leverage, compression, trend, location and entry quality. Ranked candidates with disclosed setup rules and entry, stop and target geometry — not a forecast or a proven edge. - [Trade Plan Review](https://www.f1ow.com/docs/tools/research_trade_plan) — Check your entry, stop and target against ATR, perp levels, liquidation distance, fees, slippage and funding. Add account size and risk for sizing, or a placement time to replay a trade from public candles. An interactive ticket in MCP Apps hosts; no orders placed or plans stored. --- # AI crypto trading assistant > Turn Claude or ChatGPT into a crypto trading research assistant with live market regime, positioning, liquidations, options and trade-plan checks — no code. Source: https://www.f1ow.com/docs/use-cases/ai-traders You already ask an AI about the market. Without live data it guesses. With f1ow connected, Claude or ChatGPT answers from **current** prices, funding, open interest, liquidations, order books, options and sentiment, and shows its sources and timestamps. No code. [Connect Claude](https://www.f1ow.com/docs/connect/claude) or [ChatGPT](https://www.f1ow.com/docs/connect/chatgpt) once, then ask in plain English. ## A daily routine **1. Read the market.** > What kind of market are we in today? Is it a good day to take risk? [Market Regime](https://www.f1ow.com/docs/tools/research_regime) votes seven forces: trend, volatility, cycle, sentiment, leverage stress, ETF liquidity and rotation. Each comes with its reasoning. **2. Find candidates.** > Scan the majors for setups and rank them. [Opportunity Scan](https://www.f1ow.com/docs/tools/research_opportunities) screens liquid coins on crowding, stress, leverage, compression, trend and location. Each candidate comes with entry, stop and target geometry and the rule that fired. **3. Understand one coin.** > Who is on the other side if I long SOL here? Where are the liquidation levels? [Positioning](https://www.f1ow.com/docs/tools/research_positioning), [Perp Price Levels](https://www.f1ow.com/docs/tools/flow_levels) and [Liquidation History](https://www.f1ow.com/docs/tools/derivatives_liquidations) show who is crowded, fragile or trapped, and the prices the market is watching. **4. Check the plan before you click.** > Long SOL at 180, stop 172, target 198, risking 1% of $20,000. Is the stop inside the noise? What size, and what does funding cost me for two days? [Trade Plan Review](https://www.f1ow.com/docs/tools/research_trade_plan) checks the stop against ATR and levels, then gives the size, liquidation price, fees, slippage and funding carry. Nothing is stored. **5. Review a trade you placed.** > I opened that SOL long yesterday at 14:00 with a limit order. What happened? Add when you placed it, and the same tool replays public candles. It reports pending, filled, stopped, target or open, with the result in R. ## Questions that work well - *Is BTC funding stretched versus its own year?* → [Funding](https://www.f1ow.com/docs/tools/funding_current) - *Are new longs opening, or are shorts covering?* → [Perp Flow](https://www.f1ow.com/docs/tools/derivatives_flow) - *What are the odds ETH finishes the month above 2,500?* → [Options-Implied Odds](https://www.f1ow.com/docs/tools/options_probability) - *Where is options positioning concentrated for Friday?* → [Options Positioning](https://www.f1ow.com/docs/tools/options_positioning) - *What are whales doing on BTC right now?* → [Whale Positions](https://www.f1ow.com/docs/tools/flow_whale_positions) - *Anything on the calendar this week that could move crypto?* → [Macro Calendar](https://www.f1ow.com/docs/tools/catalysts_economic_calendar), [Crypto Calendar](https://www.f1ow.com/docs/tools/catalysts_calendar) - *Give me everything on this token.* → [Token Dossier](https://www.f1ow.com/docs/tools/research_token_view) ## What it won't do f1ow is research, not a broker. It never places orders, connects to your exchange account or watches positions for you. Setups are rule matches, not forecasts. Every decision is yours. > Try it free for 7 days: https://www.f1ow.com/dashboard --- # Crypto trading bot data API > Feed a crypto trading bot funding rates, open interest, liquidations, order books, options and candles from one REST and WebSocket API with one key. Source: https://www.f1ow.com/docs/use-cases/trading-bots A bot needs clean inputs from many places: candles from one venue, funding from another, liquidations from a third, options from somewhere else. Each has its own keys, limits and formats. f1ow gives you all of them behind **one REST API and one WebSocket**, with one key and consistent JSON. ## Building blocks for strategies | Signal | Tool | REST | | --- | --- | --- | | OHLCV, spot or perp | [Candles](https://www.f1ow.com/docs/tools/market_candles) | `GET /v1/market/candles/{symbol}` | | Months of paged history (price, OI, funding, liquidations) | [Bulk History](https://www.f1ow.com/docs/tools/market_history) | `GET /v1/market/history/{symbol}` | | Funding, with a 1-year percentile | [Funding](https://www.f1ow.com/docs/tools/funding_current) | `GET /v1/derivatives/funding/{symbol}` | | Open interest and its baseline | [Open Interest](https://www.f1ow.com/docs/tools/derivatives_open_interest) | `GET /v1/derivatives/open-interest/{symbol}` | | OI × taker flow: new longs vs short covering | [Perp Flow](https://www.f1ow.com/docs/tools/derivatives_flow) | `GET /v1/derivatives/flow/{symbol}` | | Liquidation history and cascades | [Liquidation History](https://www.f1ow.com/docs/tools/derivatives_liquidations) | `GET /v1/derivatives/liquidations/{symbol}` | | Order-book depth, imbalance and fill cost | [Order Book](https://www.f1ow.com/docs/tools/flow_orderbook) | `GET /v1/flow/orderbook/{symbol}` | | Evidence-graded price levels | [Perp Price Levels](https://www.f1ow.com/docs/tools/flow_levels) | `GET /v1/flow/levels/{symbol}` | | Indicators across timeframes | [Technicals](https://www.f1ow.com/docs/tools/ta_technicals) | `GET /v1/technicals/{symbol}` | | Options IV, skew and odds | [Implied Volatility](https://www.f1ow.com/docs/tools/options_volatility), [Options-Implied Odds](https://www.f1ow.com/docs/tools/options_probability) | `GET /v1/options/...` | Every tool page has the full parameter list, the request in cURL, TypeScript and Python, and a real response. ## Backtest, then go live Pull history with `market_history`, which takes up to 1,000 rows per call. Pass `nextEndMs` back as `end` to page backwards. Funding and OI history go back years at daily resolution: ```python import os, requests H = {"Authorization": f"Bearer {os.environ['F1OW_API_KEY']}"} rows, end = [], None while len(rows) < 3000: params = {"metric": "funding", "interval": "1d", "limit": 1000, **({"end": end} if end else {})} page = requests.get("https://mcp.f1ow.com/v1/market/history/BTC", headers=H, params=params).json() rows = page["rows"] + rows # each page is oldest-first; earlier pages come next end = page.get("nextEndMs") if not end: break ``` The field names in the response are documented on the tool page and typed in the [OpenAPI spec](https://mcp.f1ow.com/openapi.json). ## Push instead of poll Polling every symbol every minute wastes calls. [Subscribe over WebSocket](https://www.f1ow.com/docs/api/websocket) instead. The server re-runs the tool and pushes only when the result changes, and only pushes are metered. ```json { "jsonrpc": "2.0", "id": 1, "method": "subscriptions/subscribe", "params": { "name": "derivatives_open_interest", "arguments": { "symbol": "BTC" }, "intervalSeconds": 60 } } ``` ## Read-only by design f1ow never trades. Your bot keeps its own exchange keys and order logic; f1ow is the market-data and research layer. Snapshots carry `generatedAt` and coverage notes, so check freshness before acting. > Get a key for your bot: https://www.f1ow.com/dashboard --- # Market data for AI agents > Give an autonomous AI agent a crypto market-data toolset — MCP tools with JSON schemas, reports written for LLMs, x402 pay-per-call and machine-readable discovery. Source: https://www.f1ow.com/docs/use-cases/agent-builders f1ow is built to be called by models, not just people. Every tool is designed so an agent can pick it, call it correctly and reason over the answer. ## Why it works well for agents - **One endpoint, many sources.** One MCP server stands in for a dozen market-data APIs. Your agent doesn't juggle keys, rate limits or formats. - **Reports written for a model.** Over MCP, each result's `content` is a compact report with units, timeframes, coverage and caveats stated, not raw JSON for the model to decode. The same result as JSON (`structuredContent`) is there when your code needs it, and it is what REST and WebSocket return. - **Precise schemas.** Every tool publishes a JSON input schema with enums, bounds and defaults, and an output schema. Agents call them correctly the first time. - **Composites.** [Token Dossier](https://www.f1ow.com/docs/tools/research_token_view), [Positioning](https://www.f1ow.com/docs/tools/research_positioning) and [Market Regime](https://www.f1ow.com/docs/tools/research_regime) answer in one call what would otherwise take ten, which saves tokens and turns. - **Honest outputs.** Responses state what is missing, how fresh each input is and what is modeled rather than observed, so the agent can qualify its answer. - **Read-only.** Every tool is annotated `readOnlyHint`. Nothing can move funds or place orders, so it is safe to auto-approve. ## Pay per call with x402 An autonomous agent with a wallet needs no account. It calls a priced tool at https://mcp.f1ow.com/x402, receives an MCP `isError` tool result with the payment challenge, and retries with a signed USDC payment on Base in `_meta["x402/payment"]`. REST uses HTTP `402` and payment headers instead. See [x402](https://www.f1ow.com/docs/auth#x402). ## Discovery Agents and registries can find and describe f1ow on their own: - [`/.well-known/mcp.json`](https://mcp.f1ow.com/.well-known/mcp.json): endpoints, auth and pricing models - [`/.well-known/api-catalog`](https://mcp.f1ow.com/.well-known/api-catalog): RFC 9727 linkset to the OpenAPI and AsyncAPI specs - [`/llms.txt`](https://www.f1ow.com/llms.txt) and [`/llms-full.txt`](https://www.f1ow.com/llms-full.txt): the docs for LLMs - Each docs page as Markdown: append `.md` to its URL ## Frameworks Any framework with an MCP client connects in a few lines: the OpenAI Agents SDK, LangChain / LangGraph MCP adapters, the Vercel AI SDK, Microsoft's Agent Framework, or the official MCP SDKs. See [custom agents](https://www.f1ow.com/docs/connect/custom-agent) for the protocol and a TypeScript example. Prefer plain HTTP? Wrap the [REST API](https://www.f1ow.com/docs/api/rest) as function tools using the OpenAPI spec. ## A starter system prompt ```text You are a crypto market analyst. Use the f1ow tools for any market fact. Start broad (research_regime), then narrow to a coin (research_positioning, ta_technicals, flow_levels). Check generatedAt and coverage before stating a number, and say when an input is modeled or missing. Never present a setup as a recommendation; describe the evidence and the risk. ``` > Get a key for your agent: https://www.f1ow.com/dashboard