{"openapi":"3.1.0","info":{"title":"f1ow API","version":"0.1.0","description":"Crypto market data \u0026 research: price, derivatives, on-chain, sentiment, news, catalysts. The same tools as the f1ow MCP server, as REST resources and a JSON-RPC WebSocket API."},"servers":[{"description":"Bearer API key (or OAuth access token) from f1ow.com; metered per call.","url":"/v1"},{"description":"No account: priced calls are paid per call with x402 (USDC).","url":"/x402/v1"},{"description":"API key in the path, for clients that cannot send headers; metered per call.","url":"/key/{apikey}/v1"}],"security":[{"bearerAuth":[]},{}],"tags":[{"name":"status"},{"name":"market"},{"name":"derivatives"},{"name":"flow"},{"name":"sentiment"},{"name":"catalysts"},{"name":"news"},{"name":"on-chain"},{"name":"technicals"},{"name":"research"}],"paths":{"/time":{"get":{"operationId":"utc_time","summary":"Current UTC Time","description":"Returns the current UTC time in ISO 8601 format. Use it to anchor \u0027now\u0027 \u2014 e.g. to judge how stale a generatedAt timestamp or news date is.","tags":["status"],"parameters":[],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"utc_time"}},"/providers/health":{"get":{"operationId":"providers_health","summary":"Data Provider Health","description":"Reports the health of each connected data provider","tags":["status"],"parameters":[],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"providers_health"}},"/market/coins":{"get":{"operationId":"market_coins","summary":"Supported Coins","description":"Lists the coin symbols available from the market-data provider","tags":["market"],"parameters":[],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"market_coins","x-x402-price":{"scheme":"exact","amount":"15000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/market/coins/{coin_id}":{"get":{"operationId":"market_coin_details","summary":"Coin Details","description":"Fetches price, market cap, ATH/ATL and description for a coin by its CoinGecko coin ID (e.g. \u0027bitcoin\u0027, \u0027ethereum\u0027) or by ticker symbol (e.g. \u0027BTC\u0027, \u0027WAVES\u0027). 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.","tags":["market"],"parameters":[{"name":"coin_id","in":"path","required":true,"schema":{"type":"string","description":"CoinGecko coin ID (e.g. \u0027bitcoin\u0027) or ticker symbol (e.g. \u0027BTC\u0027). IDs are case-sensitive; symbols are resolved by search."},"description":"CoinGecko coin ID (e.g. \u0027bitcoin\u0027) or ticker symbol (e.g. \u0027BTC\u0027). IDs are case-sensitive; symbols are resolved by search."}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"market_coin_details","x-x402-price":{"scheme":"exact","amount":"10000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/market/quotes":{"get":{"operationId":"market_quotes","summary":"Market Quotes","description":"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 \u0027symbols\u0027 to filter to specific coins; omit it for every covered coin.","tags":["market"],"parameters":[{"name":"symbols","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Coin symbols to include, e.g. [\u0022BTC\u0022,\u0022ETH\u0022]. Omit for all covered coins."},"description":"Coin symbols to include, e.g. [\u0022BTC\u0022,\u0022ETH\u0022]. Omit for all covered coins.","style":"form","explode":false}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"quotes":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string"},"spotPriceUsd":{"type":"number","description":"Spot/index price, USD; 0 when no spot source covers the coin"},"perpPriceUsd":{"type":"number","description":"Perpetual mark price, USD; 0 when no perp venue covers the coin"},"priceUsd":{"type":"number","description":"Canonical price, USD: spot when available, else perp mark"},"marketCapUsd":{"type":"number","description":"Market cap, USD"},"openInterestUsd":{"type":"number","description":"Open interest, USD"},"fundingRatePct":{"type":"number","description":"Perp funding rate in percent (0.01 = 0.01%)"},"priceChangePct24h":{"type":"number","description":"24h price change in percentage points (5.2 = \u002B5.2%)"},"longShortRatio24h":{"type":"number","description":"Long/short account ratio over 24h"},"liquidation24hUsd":{"type":"number","description":"24h liquidations, USD"}},"required":["symbol"]}}}},"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"market_quotes","x-x402-price":{"scheme":"exact","amount":"10000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/market/overview":{"get":{"operationId":"market_overview","summary":"Market Overview","description":"Global market snapshot: total market cap, BTC/ETH dominance, Fear \u0026 Greed index, and Altcoin Season index","tags":["market"],"parameters":[],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"totalMarketCapUsd":{"type":"number","description":"Total crypto market cap, USD"},"totalVolume24hUsd":{"type":"number","description":"Total 24h volume, USD"},"btcDominancePct":{"type":"number","description":"BTC dominance in percentage points"},"ethDominancePct":{"type":"number","description":"ETH dominance in percentage points"},"fearGreedValue":{"type":"integer","description":"Fear \u0026 Greed index, 0-100"},"fearGreedLabel":{"type":"string"},"altcoinSeasonIndex":{"type":"integer","description":"Altcoin Season index, 0-100"}}},"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"market_overview","x-x402-price":{"scheme":"exact","amount":"10000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/market/trending":{"get":{"operationId":"market_trending","summary":"Trending Coins","description":"Lists the currently trending cryptocurrencies","tags":["market"],"parameters":[],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"market_trending","x-x402-price":{"scheme":"exact","amount":"5000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/market/movers":{"get":{"operationId":"market_top_movers","summary":"Top Movers","description":"Ranked 24h gainers, losers, and trend candidates (\u003E\u002B5% move)","tags":["market"],"parameters":[],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"market_top_movers","x-x402-price":{"scheme":"exact","amount":"10000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/market/candles/{symbol}":{"get":{"operationId":"market_candles","summary":"Price Candles","description":"OHLC(V) candle history for a coin by symbol (e.g. \u0027ETH\u0027, \u0027BTC\u0027). \u0027interval\u0027 picks the candle size (1m|5m|15m|30m|1h|4h|12h|1d|1w, default 1d); \u0027limit\u0027 the number of candles (default 100, max 400); \u0027market\u0027 picks the series \u2014 \u0027spot\u0027 (Binance, Bybit, then CoinGecko/CoinMarketCap), \u0027perp\u0027 (Hyperliquid, Bybit, then Binance futures \u2014 perpetual marks), or \u0027auto\u0027 (default: spot preferred; perp when spot fails, or when spot\u0027s history is shorter than the request and than 210 candles while perp\u0027s is materially longer \u2014 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.","tags":["market"],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","description":"Coin symbol, e.g. \u0027ETH\u0027 or \u0027BTC\u0027"},"description":"Coin symbol, e.g. \u0027ETH\u0027 or \u0027BTC\u0027"},{"name":"interval","in":"query","required":false,"schema":{"type":"string","enum":["1m","5m","15m","30m","1h","4h","12h","1d","1w"],"description":"Candle size. Default 1d."},"description":"Candle size. Default 1d."},{"name":"market","in":"query","required":false,"schema":{"type":"string","enum":["spot","perp","auto"],"description":"Which market\u0027s series: spot exchange trades, perpetual-futures marks, or auto (spot preferred; perp when spot fails or its history is too short). Default auto."},"description":"Which market\u0027s series: spot exchange trades, perpetual-futures marks, or auto (spot preferred; perp when spot fails or its history is too short). Default auto."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of candles, newest last. Default 100, max 400."},"description":"Number of candles, newest last. Default 100, max 400."},{"name":"days","in":"query","required":false,"schema":{"type":"integer","description":"DEPRECATED: trailing window in days; use interval\u002Blimit instead. Ignored when interval is given."},"description":"DEPRECATED: trailing window in days; use interval\u002Blimit instead. Ignored when interval is given."}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"coinId":{"type":"string","description":"Identifier the answering provider queried"},"interval":{"type":"string","description":"Candle size actually delivered, e.g. \u00274h\u0027"},"market":{"type":"string","description":"\u0027spot\u0027 or \u0027perp\u0027 \u2014 which market the series describes"},"source":{"type":"string","description":"Provider that answered"},"lastCandleIsPartial":{"type":"boolean","description":"True when the newest candle is still forming; exclude it from indicator math"},"candles":{"type":"array","items":{"type":"object","properties":{"timestampMs":{"type":"integer","description":"Candle open time, Unix epoch milliseconds"},"asOfAt":{"type":"string","description":"Candle open time, ISO-8601 UTC"},"openUsd":{"type":"number","description":"Open price, USD"},"highUsd":{"type":"number","description":"High price, USD"},"lowUsd":{"type":"number","description":"Low price, USD"},"closeUsd":{"type":"number","description":"Close price, USD"},"volumeUsd":{"type":"number","description":"Traded volume, USD notional; omitted when the source has none"}}}}}},"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"market_candles","x-x402-price":{"scheme":"exact","amount":"10000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/market/history/{symbol}":{"get":{"operationId":"market_history","summary":"Market History","description":"Bulk history for one coin, one metric per call, in pages: \u0027price\u0027 (OHLCV candles, spot or perp), \u0027open_interest\u0027 (market-wide aggregate USD), \u0027funding\u0027 (OI-weighted rate, %/8h and annualized) or \u0027liquidations\u0027 (market-wide long/short USD per bucket). Returns up to \u0027limit\u0027 rows (default 200, max 1000) at or before \u0027end\u0027 (default now), oldest first, as compact columns \u002B rows; pass the returned nextEndMs as \u0027end\u0027 to fetch the page before it, and \u0027start\u0027 to stop there. Reach: price is full venue history (Binance spot from 2017, futures from 2019) at 1m\u20131w; derivatives come from CoinGlass at 4h (about 180 days back), 6h/8h/12h (about 360 days) or 1d/1w (back to 2020) \u2014 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.","tags":["market"],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","description":"Coin symbol, e.g. \u0022BTC\u0022."},"description":"Coin symbol, e.g. \u0022BTC\u0022."},{"name":"metric","in":"query","required":true,"schema":{"type":"string","enum":["price","open_interest","funding","liquidations"]}},{"name":"interval","in":"query","required":false,"schema":{"type":"string","enum":["1m","5m","15m","30m","1h","4h","6h","8h","12h","1d","1w"],"description":"Bucket size. Price: 1m\u20131w except 6h/8h, default 1d. Derivatives: 4h, 6h, 8h, 12h, 1d or 1w; default 4h (funding 8h)."},"description":"Bucket size. Price: 1m\u20131w except 6h/8h, default 1d. Derivatives: 4h, 6h, 8h, 12h, 1d or 1w; default 4h (funding 8h)."},{"name":"market","in":"query","required":false,"schema":{"type":"string","enum":["spot","perp"],"description":"Price only: spot (default) or perpetual candles."},"description":"Price only: spot (default) or perpetual candles."},{"name":"start","in":"query","required":false,"schema":{"type":"string","description":"Earliest time to include: ISO-8601 (UTC if no offset) or Unix ms. Paging stops here."},"description":"Earliest time to include: ISO-8601 (UTC if no offset) or Unix ms. Paging stops here."},{"name":"end","in":"query","required":false,"schema":{"type":"string","description":"Latest time to include: ISO-8601 or Unix ms. Default now. Pass nextEndMs here to page back."},"description":"Latest time to include: ISO-8601 or Unix ms. Default now. Pass nextEndMs here to page back."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Rows per page, 1\u20131000. Default 200."},"description":"Rows per page, 1\u20131000. Default 200."}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"symbol":{"type":"string"},"metric":{"type":"string"},"interval":{"type":"string"},"market":{"type":["string","null"],"description":"Price only: spot or perp"},"source":{"type":"string","description":"Provider that answered this page"},"units":{"type":"string","description":"What each value column means"},"columns":{"type":"array","items":{"type":"string"},"description":"Names of each row\u0027s cells; the first is timeMs (bucket open, Unix ms)"},"rows":{"type":"array","description":"Oldest first; each row is [timeMs, ...values] in column order; null where the source has no value","items":{"type":"array","items":{"type":["number","null"]}}},"count":{"type":"integer"},"endMs":{"type":"integer","description":"The page\u0027s end bound, Unix ms"},"startMs":{"type":["integer","null"]},"nextEndMs":{"type":["integer","null"],"description":"Pass as \u0027end\u0027 for the page before this one; null when this page reached \u0027start\u0027 or the series\u0027 beginning"},"newestForming":{"type":"boolean","description":"Newest row\u0027s bucket is still open; the vendor rewrites it until it closes"},"earliestAvailableMs":{"type":["integer","null"],"description":"Set when \u0027end\u0027 was before the plan\u0027s history edge for this interval"},"note":{"type":["string","null"]}},"required":["symbol","metric","columns","rows","count"]},"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"market_history","x-x402-price":{"scheme":"exact","amount":"20000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/derivatives/funding/{symbol}":{"get":{"operationId":"funding_current","summary":"Current Funding Rates","description":"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 \u002B6% annualized reads as post-flush relief if it fell from \u002B40% and as shorts capitulating if it rose from -20%. The series carries the shape a trailing delta flattens away \u2014 a steady drift and a spike that retraced give the same 24h change off opposite tapes \u2014 plus the window\u0027s 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 \u0027high\u0027 means high for this coin, not just for the week. Set \u0027points\u0027 to trim the series (omit for the full ~10-day window; 0 to suppress it).","tags":["derivatives"],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","description":"Coin symbol, e.g. \u0022BTC\u0022."},"description":"Coin symbol, e.g. \u0022BTC\u0022."},{"name":"points","in":"query","required":false,"schema":{"type":"integer","description":"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."},"description":"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."}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"funding_current","x-x402-price":{"scheme":"exact","amount":"10000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/derivatives/open-interest/{symbol}":{"get":{"operationId":"derivatives_open_interest","summary":"Open Interest","description":"Current market-wide (cross-exchange aggregate) open interest (USD) for one coin\u0027s 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 \u2014 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\u0027s own low/high so the current level can be judged against where it has actually been. A 1y line ranks the level and today\u0027s 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 \u0027points\u0027 to trim the series (omit for the full ~10-day window; 0 to suppress it).","tags":["derivatives"],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","description":"Coin symbol, e.g. \u0022BTC\u0022."},"description":"Coin symbol, e.g. \u0022BTC\u0022."},{"name":"points","in":"query","required":false,"schema":{"type":"integer","description":"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."},"description":"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."}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"derivatives_open_interest","x-x402-price":{"scheme":"exact","amount":"10000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/derivatives/liquidations/{symbol}":{"get":{"operationId":"derivatives_liquidations","summary":"Liquidation History","description":"Liquidation history for one coin\u0027s 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 (OKX, Gate) 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, \u0027largest since\u0027 date, median day, the year\u0027s three largest days per side), so a figure can be called big or routine for this coin.","tags":["derivatives"],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","description":"Coin symbol, e.g. \u0022BTC\u0022."},"description":"Coin symbol, e.g. \u0022BTC\u0022."},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","description":"Trailing window in hours, 1\u201372. Default 24."},"description":"Trailing window in hours, 1\u201372. Default 24."},{"name":"interval","in":"query","required":false,"schema":{"type":"string","enum":["5m","15m","1h"],"description":"Bucket size for the timing sample. Default 15m."},"description":"Bucket size for the timing sample. Default 15m."},{"name":"top_orders","in":"query","required":false,"schema":{"type":"integer","description":"Largest individual liquidations to list, 0\u201320. Default 5."},"description":"Largest individual liquidations to list, 0\u201320. Default 5."}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"symbol":{"type":"string"},"windowHours":{"type":"integer"},"interval":{"type":"string"},"marketWide24h":{"type":"object","description":"CoinGlass trailing-24h totals and per-venue split","properties":{"longUsd":{"type":"number"},"shortUsd":{"type":"number"},"venues":{"type":"array","items":{"type":"object","properties":{"venue":{"type":"string"},"longUsd":{"type":"number"},"shortUsd":{"type":"number"},"sharePct":{"type":"number"}}}}}},"marketBuckets4h":{"type":"array","description":"Market-wide 4h buckets overlapping the window, oldest first","items":{"type":"object","properties":{"timeMs":{"type":"integer"},"longUsd":{"type":"number"},"shortUsd":{"type":"number"},"forming":{"type":"boolean","description":"Bucket still open; its totals will grow"}}}},"sample":{"type":"object","properties":{"venues":{"type":"array","items":{"type":"string"}},"sharePct24h":{"type":"number","description":"Sample venues\u0027 share of the trailing-24h market-wide total"},"coveredFromMs":{"type":"integer","description":"Earliest time every sample venue covers; earlier is unknown, not quiet"},"note":{"type":"string"}}},"baseline1y":{"type":"object","description":"The trailing ~24h (newest six 4h buckets) ranked against a year of CoinGlass daily totals over the same venues","properties":{"available":{"type":"boolean"},"note":{"type":["string","null"],"description":"Why the baseline is missing"},"days":{"type":["integer","null"],"description":"Settled days ranked against"},"trailingFromMs":{"type":["integer","null"],"description":"Start of the trailing window (20-24h back)"},"longs":{"type":["object","null"],"properties":{"usd":{"type":"number","description":"Trailing-window total"},"percentile":{"type":"number","description":"Rank among the year\u0027s settled daily totals, 0-100"},"medianDayUsd":{"type":"number"},"largestSinceMs":{"type":["integer","null"],"description":"Newest day at or above this total, set only from the 75th percentile up; null there means above every day of the year"}}},"shorts":{"type":["object","null"],"properties":{"usd":{"type":"number","description":"Trailing-window total"},"percentile":{"type":"number","description":"Rank among the year\u0027s settled daily totals, 0-100"},"medianDayUsd":{"type":"number"},"largestSinceMs":{"type":["integer","null"],"description":"Newest day at or above this total, set only from the 75th percentile up; null there means above every day of the year"}}},"largestLongDays":{"type":"array","items":{"type":"object","properties":{"timeMs":{"type":"integer"},"usd":{"type":"number"}}}},"largestShortDays":{"type":"array","items":{"type":"object","properties":{"timeMs":{"type":"integer"},"usd":{"type":"number"}}}}}},"cascades":{"type":"array","items":{"type":"object","properties":{"startMs":{"type":"integer"},"endMs":{"type":"integer"},"side":{"type":"string","enum":["long","short"]},"usd":{"type":"number"},"orders":{"type":"integer"},"lowPriceUsd":{"type":"number"},"highPriceUsd":{"type":"number"}}}},"cascadeRule":{"type":"string"},"largestOrders":{"type":"array","items":{"type":"object","properties":{"timeMs":{"type":"integer"},"venue":{"type":"string"},"side":{"type":"string"},"usd":{"type":"number"},"priceUsd":{"type":"number"}}}},"sourcesFailed":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"error":{"type":"string"}}}}},"required":["symbol"]},"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"derivatives_liquidations","x-x402-price":{"scheme":"exact","amount":"20000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/derivatives/flow/{symbol}":{"get":{"operationId":"derivatives_flow","summary":"Perp Flow (OI \u00D7 Taker, Binance or Bybit)","description":"USDT-margined perpetual flow for one coin on a 5m/15m/1h grid, from one venue: Binance, or Bybit for coins Binance doesn\u0027t 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 \u00D7 the aggressive side). Bybit publishes the taker split only for its last ~1000 trades, so older Bybit 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.","tags":["derivatives"],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","description":"Coin symbol, e.g. \u0022ETH\u0022."},"description":"Coin symbol, e.g. \u0022ETH\u0022."},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","description":"Trailing window in hours, 1\u201372. Default 24. At 5m the window is capped at about 41h by the venue\u0027s 500-snapshot limit."},"description":"Trailing window in hours, 1\u201372. Default 24. At 5m the window is capped at about 41h by the venue\u0027s 500-snapshot limit."},{"name":"interval","in":"query","required":false,"schema":{"type":"string","enum":["5m","15m","1h"],"description":"Bucket size. Default 15m."},"description":"Bucket size. Default 15m."}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"symbol":{"type":"string"},"venue":{"type":"string"},"market":{"type":"string"},"interval":{"type":"string"},"windowHours":{"type":"integer"},"buckets":{"type":"integer"},"takerSplitFromMs":{"type":"integer","description":"When the venue covers only part of the window: the first bucket with a taker split"},"window":{"type":"object","properties":{"priceStart":{"type":"number"},"priceEnd":{"type":"number"},"priceChangePct":{"type":"number"},"oiStartUsd":{"type":"number"},"oiEndUsd":{"type":"number"},"oiChangePct":{"type":"number"},"takerBuyUsd":{"type":"number"},"takerSellUsd":{"type":"number"},"takerBuyPct":{"type":"number"},"takerCoveragePct":{"type":"number","description":"Share of volume whose taker split is known"},"readBasis":{"type":"string","enum":["taker","price"]},"read":{"type":"string","enum":["new_longs","new_shorts","short_covering","long_unwind","opened_balanced","closed_balanced","oi_flat"]}}},"episodes":{"type":"array","description":"Open-interest swings of at least 1% between zigzag pivots, oldest first","items":{"type":"object","properties":{"startMs":{"type":"integer"},"endMs":{"type":"integer"},"oiStartUsd":{"type":"number"},"oiEndUsd":{"type":"number"},"oiChangePct":{"type":"number"},"priceStart":{"type":"number"},"priceEnd":{"type":"number"},"priceChangePct":{"type":"number"},"takerBuyUsd":{"type":"number"},"takerSellUsd":{"type":"number"},"takerBuyPct":{"type":"number"},"takerCoveragePct":{"type":"number"},"readBasis":{"type":"string","enum":["taker","price"]},"read":{"type":"string"},"absorbed":{"type":"boolean","description":"Aggressors pushed one way, price went the other (taker basis only)"}}}},"largestOiBuckets":{"type":"array","items":{"type":"object","properties":{"timeMs":{"type":"integer"},"oiChangeUsd":{"type":"number"},"oiChangePct":{"type":"number"},"priceChangePct":{"type":"number"},"takerBuyPct":{"type":"number"},"readBasis":{"type":"string","enum":["taker","price"]},"read":{"type":"string"}}}},"rule":{"type":"string"},"caveats":{"type":"array","items":{"type":"string"}}},"required":["symbol","venue"]},"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"derivatives_flow","x-x402-price":{"scheme":"exact","amount":"10000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/flow/orderbook/{symbol}":{"get":{"operationId":"flow_orderbook","summary":"Order Book Snapshot","description":"Order-book snapshot for one coin\u0027s 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 \u2014 Hyperliquid, falling back to Bybit for coins it doesn\u0027t list; the response names the venue that answered and how far its visible book reaches.","tags":["flow"],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","description":"Coin symbol, e.g. \u0022BTC\u0022."},"description":"Coin symbol, e.g. \u0022BTC\u0022."}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"symbol":{"type":"string"},"asOfAt":{"type":"string","description":"Order-book timestamp, ISO-8601 UTC"},"asOfMs":{"type":"integer","description":"Order-book timestamp, Unix epoch milliseconds"},"bestBidUsd":{"type":"number","description":"Best bid price, USD"},"bestAskUsd":{"type":"number","description":"Best ask price, USD"},"midPriceUsd":{"type":"number","description":"Mid price, USD"},"spreadBps":{"type":"number","description":"Bid/ask spread, basis points of mid"},"bidDepthUsd":{"type":"number","description":"Top-of-book bid depth, USD"},"askDepthUsd":{"type":"number","description":"Top-of-book ask depth, USD"},"imbalancePct":{"type":"number","description":"Signed bid-vs-ask depth skew in percentage points (positive = more bids)"},"fillCosts":{"type":"array","description":"Cost vs mid of a market order of each size against the visible levels","items":{"type":"object","properties":{"sizeUsd":{"type":"number"},"buyBps":{"type":"number","description":"Average buy fill vs mid in bps; absent when the visible asks can\u0027t fill the size"},"sellBps":{"type":"number","description":"Average sell fill vs mid in bps (positive = cost); absent when the visible bids can\u0027t fill the size"}},"required":["sizeUsd"]}},"visibleBidReachPct":{"type":"number","description":"Deepest returned bid vs mid, percent; nothing beyond is visible"},"visibleAskReachPct":{"type":"number","description":"Deepest returned ask vs mid, percent; nothing beyond is visible"},"source":{"type":"string","description":"Venue that served the book"}},"required":["symbol"]},"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"flow_orderbook","x-x402-price":{"scheme":"exact","amount":"10000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/flow/levels/{symbol}":{"get":{"operationId":"flow_levels","summary":"Perp Levels (volume, OI, liquidations, walls)","description":"Perp price levels for one coin, from what printed rather than from a chart: executed volume at price on every venue that lists it (Binance, Bybit, BingX, Hyperliquid), 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 (OKX/Gate 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 \u2014 traded (volume, liquidations) \u003E inferred (OI side) \u003E resting (orders, which can be pulled) \u2014 and lists the other evidence at the same price (confluence). Walls larger than their venue\u0027s own daily volume are flagged. Use it for where price may stall, accelerate or meet forced flow; it is not a forecast.","tags":["flow"],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","description":"Coin symbol, e.g. \u0022WAVES\u0022."},"description":"Coin symbol, e.g. \u0022WAVES\u0022."},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","description":"Window in hours, 24\u2013168. Default 72."},"description":"Window in hours, 24\u2013168. Default 72."}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"symbol":{"type":"string"},"spot":{"type":"number"},"windowHours":{"type":"integer"},"step":{"type":"number","description":"Price bin width"},"sources":{"type":"object","properties":{"volume":{"type":"array","items":{"type":"string"}},"flow":{"type":"string"},"takerCoveragePct":{"type":"number"},"liquidations":{"type":"array","items":{"type":"string"}},"books":{"type":"array","items":{"type":"object","properties":{"venue":{"type":"string"},"reachDownPct":{"type":"number"},"reachUpPct":{"type":"number"},"persisted":{"type":"boolean"}}}}}},"valueArea":{"type":"object","properties":{"poc":{"type":"number"},"low":{"type":"number"},"high":{"type":"number"}}},"spotContext":{"type":"object","properties":{"inValueArea":{"type":"boolean"},"inThinZone":{"type":"boolean"},"nearestBelow":{"type":"object","description":"Nearest level below spot (same shape as levels[])"},"nearestAbove":{"type":"object","description":"Nearest level above spot (same shape as levels[])"}}},"levels":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["poc","value_area_high","value_area_low","high_volume_node","thin_zone","long_entries","short_entries","long_liquidations","short_liquidations","bid_wall","ask_wall"]},"evidence":{"type":"string","enum":["traded","inferred","resting"]},"price":{"type":"number","description":"Quoted price: a value-area edge at its edge, a bin at its middle, a zone at its low end"},"priceLo":{"type":"number"},"priceHi":{"type":"number"},"distancePct":{"type":"number"},"onLadder":{"type":"boolean","description":"Inside the volume band the view draws"},"usd":{"type":"number"},"venue":{"type":"string"},"withKinds":{"type":"array","items":{"type":"string"}},"outsized":{"type":"boolean","description":"A wall larger than its venue\u0027s own 24h volume"},"strength":{"type":"integer","minimum":1,"maximum":3},"readFromPrice":{"type":"boolean","description":"An entry whose side was read from price, not a taker split"}}}},"unconfirmedWalls":{"type":"array","description":"Walls larger than their venue\u0027s own 24h volume: shown, never counted as support or resistance","items":{"type":"object"}},"dailyRangePct":{"type":"number","description":"Average 24h high\u2013low range over the window, percent of price"},"window":{"type":"object","description":"The window at a glance: price from the venue that traded most, OI from the flow venue, volume in the band, liquidations in the sample","properties":{"priceStart":{"type":"number"},"priceEnd":{"type":"number"},"priceChangePct":{"type":"number"},"priceVenue":{"type":"string"},"oiStartUsd":{"type":"number"},"oiEndUsd":{"type":"number"},"oiChangePct":{"type":"number"},"oiVenue":{"type":"string"},"volumeUsd":{"type":"number"},"liquidatedUsd":{"type":"number"}}},"resistances":{"type":"array","description":"Nearest levels on this side, one entry per price, strongest-first among the nearest","items":{"type":"object","properties":{"price":{"type":"number"},"distancePct":{"type":"number"},"strength":{"type":"integer","minimum":1,"maximum":3},"kinds":{"type":"array","items":{"type":"string"}},"evidence":{"type":"array","items":{"type":"string"}},"usd":{"type":"number"},"venue":{"type":"string"},"outsized":{"type":"boolean"}}}},"supports":{"type":"array","description":"Nearest levels on this side, one entry per price, strongest-first among the nearest","items":{"type":"object","properties":{"price":{"type":"number"},"distancePct":{"type":"number"},"strength":{"type":"integer","minimum":1,"maximum":3},"kinds":{"type":"array","items":{"type":"string"}},"evidence":{"type":"array","items":{"type":"string"}},"usd":{"type":"number"},"venue":{"type":"string"},"outsized":{"type":"boolean"}}}},"sourcesFailed":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string"},"error":{"type":"string"}}}},"rule":{"type":"string"},"caveats":{"type":"array","items":{"type":"string"}}},"required":["symbol","spot"]},"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"flow_levels","x-x402-price":{"scheme":"exact","amount":"30000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/flow/whales/{symbol}":{"get":{"operationId":"flow_whale_context","summary":"Whale Flow Context","description":"Aggregate whale context for one coin (cohort-level, no individual wallets): per-exchange reserve changes (1d/7d), top-trader long/short positioning on Binance 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.","tags":["flow"],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","description":"Coin symbol, e.g. \u0022BTC\u0022 or \u0022ETH\u0022."},"description":"Coin symbol, e.g. \u0022BTC\u0022 or \u0022ETH\u0022."},{"name":"min_usd","in":"query","required":false,"schema":{"type":"number","description":"Minimum transfer size in USD to count as a whale transfer. Defaults to 1000000."},"description":"Minimum transfer size in USD to count as a whale transfer. Defaults to 1000000."}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"flow_whale_context","x-x402-price":{"scheme":"exact","amount":"20000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/flow/whale-positions":{"get":{"operationId":"flow_whale_positions","summary":"Whale Positions","description":"Live whale positions on Hyperliquid perps. By default discovers the largest currently-active whale accounts from the venue leaderboard and returns each one\u0027s equity and open positions with side, notional (USD), entry price, liquidation price, leverage and unrealized PnL. Optionally pass \u0027addresses\u0027 (comma-separated 0x wallets, max 10) to follow specific wallets instead. For aggregate cohort signals use flow_whale_context.","tags":["flow"],"parameters":[{"name":"addresses","in":"query","required":false,"schema":{"type":"string","description":"Optional comma-separated 0x wallet addresses to inspect (max 10). Omit to auto-discover the biggest live whales."},"description":"Optional comma-separated 0x wallet addresses to inspect (max 10). Omit to auto-discover the biggest live whales."}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"accounts":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"accountValueUsd":{"type":"number","description":"Wallet equity, USD"},"positions":{"type":"array","items":{"type":"object","properties":{"coin":{"type":"string"},"side":{"type":"string","description":"long or short"},"isLong":{"type":"boolean"},"notionalUsd":{"type":"number","description":"Position notional, USD"},"entryPriceUsd":{"type":"number","description":"Entry price, USD"},"liquidationPriceUsd":{"type":"number","description":"Liquidation price, USD; omitted when not liquidatable at current margin"},"leverage":{"type":"number","description":"Position leverage as a multiple"},"unrealizedPnlUsd":{"type":"number","description":"Unrealized PnL, USD"}}}}}}}}},"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"flow_whale_positions","x-x402-price":{"scheme":"exact","amount":"20000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/sentiment/social/{symbol}":{"get":{"operationId":"sentiment_social","summary":"Social Sentiment","description":"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.","tags":["sentiment"],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","description":"Coin symbol, e.g. \u0022BTC\u0022."},"description":"Coin symbol, e.g. \u0022BTC\u0022."}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"sentiment_social","x-x402-price":{"scheme":"exact","amount":"10000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/sentiment/twitter":{"get":{"operationId":"sentiment_twitter","summary":"Twitter Sentiment","description":"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.","tags":["sentiment"],"parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","description":"X recent-search query (keywords, phrases, hashtags, cashtags, or operators), e.g. \u0022$BTC\u0022, \u0022bitcoin ETF\u0022, or \u0022from:handle BTC\u0022. Self-serve query limit: 512 characters."},"description":"X recent-search query (keywords, phrases, hashtags, cashtags, or operators), e.g. \u0022$BTC\u0022, \u0022bitcoin ETF\u0022, or \u0022from:handle BTC\u0022. Self-serve query limit: 512 characters."},{"name":"latest","in":"query","required":false,"schema":{"type":"boolean","description":"Return the newest Posts instead of top relevance. Defaults to false."},"description":"Return the newest Posts instead of top relevance. Defaults to false."},{"name":"minLikes","in":"query","required":false,"schema":{"type":"integer","description":"Only Posts with at least this many likes. Defaults to 0."},"description":"Only Posts with at least this many likes. Defaults to 0."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Max Posts to return (1-10). Defaults to 5."},"description":"Max Posts to return (1-10). Defaults to 5."}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"tweets":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"createdAt":{"type":"string","description":"ISO 8601"},"likes":{"type":"number"},"retweets":{"type":"number"},"replies":{"type":"number"},"views":{"type":"number"},"url":{"type":"string","description":"X Post permalink"}}}}}},"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"sentiment_twitter","x-x402-price":{"scheme":"exact","amount":"100000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/sentiment/fear-greed":{"get":{"operationId":"sentiment_fear_greed","summary":"Fear \u0026 Greed Index","description":"Current market-wide Fear \u0026 Greed index (0-100 plus label), updated roughly every 15 minutes. A macro sentiment gauge; use market_overview for the full market snapshot.","tags":["sentiment"],"parameters":[],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"sentiment_fear_greed","x-x402-price":{"scheme":"exact","amount":"5000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/catalysts/etf-flows":{"get":{"operationId":"catalysts_etf_flows","summary":"ETF Flows","description":"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 \u2014 its age is reported next to the date, and the price it carries is the price on THAT date, not spot. \u0027symbol\u0027 is accepted as an alias for \u0027asset\u0027.","tags":["catalysts"],"parameters":[{"name":"asset","in":"query","required":false,"schema":{"type":"string","description":"Underlying asset symbol, e.g. \u0022BTC\u0022 or \u0022ETH\u0022. Defaults to BTC."},"description":"Underlying asset symbol, e.g. \u0022BTC\u0022 or \u0022ETH\u0022. Defaults to BTC."},{"name":"symbol","in":"query","required":false,"schema":{"type":"string","description":"Alias for \u0027asset\u0027."},"description":"Alias for \u0027asset\u0027."}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"catalysts_etf_flows","x-x402-price":{"scheme":"exact","amount":"10000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/catalysts/economic-calendar":{"get":{"operationId":"catalysts_economic_calendar","summary":"Economic Calendar","description":"Scheduled macroeconomic data releases (CPI, FOMC, jobs, GDP, etc.) from the last ~2 days through the next 7 days. Optionally set \u0027min_importance\u0027 (1-3, default 2) to filter out low-impact releases.","tags":["catalysts"],"parameters":[{"name":"min_importance","in":"query","required":false,"schema":{"type":"integer","description":"Minimum importance level to include: 1 (all), 2 (medium\u002B), 3 (high only). Defaults to 2."},"description":"Minimum importance level to include: 1 (all), 2 (medium\u002B), 3 (high only). Defaults to 2."}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"catalysts_economic_calendar","x-x402-price":{"scheme":"exact","amount":"10000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/catalysts/calendar":{"get":{"operationId":"catalysts_calendar","summary":"Catalyst Calendar","description":"Lists upcoming crypto catalyst events for the next 7 days. Optionally filter by comma-separated coin symbols (e.g. \u0027sol,eth\u0027).","tags":["catalysts"],"parameters":[{"name":"coins","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated coin symbols, e.g. \u0027sol,eth\u0027. Omit for all coins."},"description":"Comma-separated coin symbols, e.g. \u0027sol,eth\u0027. Omit for all coins."}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"catalysts_calendar","x-x402-price":{"scheme":"exact","amount":"10000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/events/prediction-odds":{"get":{"operationId":"events_prediction_odds","summary":"Prediction Market Odds","description":"Market-implied prediction-market odds for a topic (e.g. \u0027Fed rate cut\u0027, \u0027bitcoin 100k\u0027). Returns the most active matching markets with per-outcome probabilities, volume, and resolution date.","tags":["catalysts"],"parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","description":"Topic to match against market questions, e.g. \u0027Fed\u0027, \u0027bitcoin\u0027, \u0027ETH ETF\u0027."},"description":"Topic to match against market questions, e.g. \u0027Fed\u0027, \u0027bitcoin\u0027, \u0027ETH ETF\u0027."}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"events_prediction_odds","x-x402-price":{"scheme":"exact","amount":"10000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/news":{"get":{"operationId":"news_search","summary":"Crypto News Search","description":"Searches for recent news on a topic \u2014 articles, market-moving posts and exchange announcements, newest first. Each item is tagged with its kind and, where measured, the price move that followed the headline.","tags":["news"],"parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"news_search","x-x402-price":{"scheme":"exact","amount":"50000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/filings":{"get":{"operationId":"filings_search","summary":"Regulatory Filings Search","description":"Searches recent regulatory filings (full-text) for a company, ticker, or theme (e.g. \u0027bitcoin treasury\u0027). Returns the most recent matching filings with form type, filer, and a direct document link.","tags":["news"],"parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","description":"Free-text query, e.g. a company name, ticker, or theme."},"description":"Free-text query, e.g. a company name, ticker, or theme."}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"filings_search","x-x402-price":{"scheme":"exact","amount":"10000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/onchain/{symbol}":{"get":{"operationId":"onchain_metrics","summary":"On-Chain Metrics","description":"On-chain TVL and network fees/revenue (24h/7d/30d) for one chain. Use a chain\u0027s own token symbol (e.g. \u0027ETH\u0027, \u0027SOL\u0027, \u0027BNB\u0027) \u2014 returns a plain \u0027not a tracked chain\u0027 message for tokens that aren\u0027t L1/L2s. Does not cover gas price (gwei).","tags":["on-chain"],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","description":"Chain token symbol, e.g. \u0027ETH\u0027 or \u0027SOL\u0027"},"description":"Chain token symbol, e.g. \u0027ETH\u0027 or \u0027SOL\u0027"}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"onchain_metrics","x-x402-price":{"scheme":"exact","amount":"10000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/technicals/{symbol}":{"get":{"operationId":"ta_technicals","summary":"Technical Analysis","description":"Multi-timeframe technical-analysis snapshot for one coin, computed locally from real candles (not a vendor black box): per interval \u2014 last close, RSI(14), EMA20/50/200 \u002B 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 \u002BDI/-DI, volume vs 20-candle average, and a transparent trend rule (EMA alignment qualified by ADX). \u0027intervals\u0027 picks the timeframes (default 1h,4h,1d; max 4 of 1m|5m|15m|30m|1h|4h|12h|1d|1w); \u0027market\u0027 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\u0027s range. For levels from executed perp flow (volume at price, liquidations, OI), use flow_levels.","tags":["technicals"],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","description":"Coin symbol, e.g. \u0027ETH\u0027 or \u0027BTC\u0027"},"description":"Coin symbol, e.g. \u0027ETH\u0027 or \u0027BTC\u0027"},{"name":"intervals","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Candle intervals to analyze, e.g. [\u00224h\u0022,\u00221d\u0022]. Default [\u00221h\u0022,\u00224h\u0022,\u00221d\u0022]; max 4 of 1m|5m|15m|30m|1h|4h|12h|1d|1w"},"description":"Candle intervals to analyze, e.g. [\u00224h\u0022,\u00221d\u0022]. Default [\u00221h\u0022,\u00224h\u0022,\u00221d\u0022]; max 4 of 1m|5m|15m|30m|1h|4h|12h|1d|1w","style":"form","explode":false},{"name":"market","in":"query","required":false,"schema":{"type":"string","description":"Which candle series: \u0027spot\u0027, \u0027perp\u0027, or \u0027auto\u0027 (default: spot preferred; perp when spot fails or its history is too short)"},"description":"Which candle series: \u0027spot\u0027, \u0027perp\u0027, or \u0027auto\u0027 (default: spot preferred; perp when spot fails or its history is too short)"}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"symbol":{"type":"string"},"lastPriceUsd":{"type":"number","description":"Newest close of the finest analyzed timeframe"},"timeframes":{"type":"array","items":{"type":"object","properties":{"interval":{"type":"string"},"market":{"type":"string","description":"\u0027spot\u0027 or \u0027perp\u0027 \u2014 series actually delivered"},"source":{"type":"string","description":"Candle provider that answered"},"closedCandles":{"type":"integer"},"droppedPartialCandle":{"type":"boolean","description":"True when a still-forming newest candle was excluded"},"asOfMs":{"type":"integer","description":"Open time of the newest closed candle, Unix epoch ms"},"asOfAt":{"type":"string","description":"Same instant, ISO-8601 UTC"},"lastCloseUsd":{"type":"number"},"rsi14":{"type":"number","description":"Wilder RSI, 0-100; omitted without 15 closed candles"},"ema20Usd":{"type":"number"},"ema50Usd":{"type":"number"},"ema200Usd":{"type":"number"},"sma200Usd":{"type":"number"},"macd":{"type":"object","properties":{"macd":{"type":"number"},"signal":{"type":"number"},"histogram":{"type":"number","description":"macd - signal; sign is the cross state"},"aboveSignal":{"type":"boolean"},"candlesSinceCross":{"type":"integer","description":"1 = crossed on the newest closed candle; omitted when no cross in window"}}},"atr14Usd":{"type":"number","description":"Wilder ATR(14), USD"},"atr14Pct":{"type":"number","description":"ATR(14) as % of last close \u2014 stop-sizing form"},"bollinger":{"type":"object","properties":{"middleUsd":{"type":"number"},"upperUsd":{"type":"number"},"lowerUsd":{"type":"number"},"percentB":{"type":"number","description":"Close inside the band: 0 = lower, 1 = upper"},"bandwidthPct":{"type":"number","description":"Band width as % of middle \u2014 squeeze measure"}}},"adx14":{"type":"number","description":"\u003E=25 trending, 20-25 developing, \u003C20 rangebound"},"plusDi14":{"type":"number"},"minusDi14":{"type":"number"},"volumeLastClosedUsd":{"type":"number"},"volumeAvg20Usd":{"type":"number"},"trend":{"type":"string","description":"Transparent rule: EMA alignment qualified by ADX"}}}},"failedIntervals":{"type":"array","items":{"type":"string"},"description":"Intervals that could not be analyzed, with reasons"},"levels":{"type":"object","description":"Daily swing support/resistance; omitted when unavailable (see levelsUnavailable)","properties":{"interval":{"type":"string"},"windowCandles":{"type":"integer"},"toleranceUsd":{"type":"number","description":"Cluster width: half a daily ATR(14), floored at 0.25% of price"},"measuredFromUsd":{"type":"number","description":"Price the levels are split around and distances measured from (the headline lastPriceUsd)"},"resistances":{"type":"array","items":{"type":"object","properties":{"priceUsd":{"type":"number"},"distancePct":{"type":"number","description":"Signed distance from measuredFromUsd, % (negative = below)"},"swings":{"type":"integer","description":"Confirmed swing highs/lows in the cluster"},"lastTouchAt":{"type":"string","description":"Newest swing in the cluster, ISO-8601 UTC"}}},"description":"Nearest first, at or above measuredFromUsd"},"supports":{"type":"array","items":{"type":"object","properties":{"priceUsd":{"type":"number"},"distancePct":{"type":"number","description":"Signed distance from measuredFromUsd, % (negative = below)"},"swings":{"type":"integer","description":"Confirmed swing highs/lows in the cluster"},"lastTouchAt":{"type":"string","description":"Newest swing in the cluster, ISO-8601 UTC"}}},"description":"Nearest first, below measuredFromUsd"},"rangeHighUsd":{"type":"number"},"rangeHighAt":{"type":"string"},"rangeLowUsd":{"type":"number"},"rangeLowAt":{"type":"string"}}},"levelsUnavailable":{"type":"string","description":"Why levels are missing, when they are"}},"required":["symbol","lastPriceUsd","timeframes"]},"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"ta_technicals","x-x402-price":{"scheme":"exact","amount":"20000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/research/regime":{"get":{"operationId":"research_regime","summary":"Market Regime","description":"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 \u0026 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 \u002B1/0/-1 vote; the overall posture is the disclosed sum-of-votes rule, with one exception \u2014 while 30d realized volatility sits at or below its 5th percentile the tape is compressed, trend structure stops being tradeable, and the Trend axis\u0027s 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 \u0027would change the call\u0027 thresholds to watch. Rule-based and deterministic \u2014 same inputs, same read. Useful as a first call: most other signals (funding, sentiment, flows) read differently depending on this regime.","tags":["research"],"parameters":[],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"posture":{"type":"string","description":"Overall risk-posture label"},"postureRule":{"type":"string","description":"The exact rule that produced posture"},"axes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"state":{"type":"string"},"detail":{"type":"string","description":"The numbers behind the state"},"vote":{"type":"integer","description":"\u002B1 risk-on, -1 risk-off, 0 neutral"}}}},"asymmetry":{"type":"object","description":"Which side is more exposed while compressed; a lean with a stated confidence, never a vote. Absent unless the tape is compressed and at least two of its inputs are meaningful","properties":{"name":{"type":"string"},"state":{"type":"string"},"detail":{"type":"string"},"vote":{"type":"integer"}}},"compressed":{"type":"boolean","description":"30d realized vol at or below its 5th percentile \u2014 while true the Trend axis contributes 0 to the posture whatever its state"},"volatilityPercentile":{"type":"number","description":"30d realized-vol percentile vs own history; absent when no candle history was available, which is not the same as not compressed"},"wouldChange":{"type":"array","items":{"type":"string"},"description":"Thresholds that would flip an axis"},"axesComputed":{"type":"integer"},"axesTotal":{"type":"integer"}}},"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"research_regime","x-x402-price":{"scheme":"exact","amount":"50000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/research/positioning/{symbol}":{"get":{"operationId":"research_positioning","summary":"Positioning Analysis","description":"Deterministic positioning read for one coin \u2014 the game-state companion to research_regime, answering \u0027who is crowded, who is paying, who is trapped, and where\u0027. 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 \u2014 whether positions are being added into the move or closed out), liquidity (order-book spread and imbalance \u2014 makers backing off), basis (perp vs oracle premium \u2014 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\u0027s OI, since the liquidation total is cross-exchange), predation (visible Hyperliquid 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 \u2014 attrition fuel), house book (Hyperliquid HLP LP-vault inventory, summed across its child sub-vaults \u2014 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\u0027s 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 \u002B1/0/-1 fragility vote (\u002B1 clean, -1 crowded/fragile); the stance is the disclosed sum-of-votes rule. Also returns a one-line \u0027farmed\u0027 synthesis (which cohort the board is currently farming, or an explicit statement that none is), focal points \u2014 reachable liquidation and breakeven price levels the whole market can see \u2014 and \u0027would change the call\u0027 thresholds a polling agent can watch statelessly. Reports the board, not a direction: crowding says who is paying, not where price goes. Deterministic \u2014 same inputs, same read. Call research_regime first for market context, then this per coin before sizing or timing decisions.","tags":["research"],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","description":"Coin symbol, e.g. \u0022BTC\u0022 or \u0022ETH\u0022."},"description":"Coin symbol, e.g. \u0022BTC\u0022 or \u0022ETH\u0022."}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"symbol":{"type":"string"},"stance":{"type":"string","description":"Overall positioning-fragility label"},"stanceRule":{"type":"string","description":"The exact rule that produced stance"},"farmed":{"type":"string","description":"One-line synthesis of which cohort the board is currently farming. Always populated: when no cohort clears the trap/crowding/predation bars it says so explicitly and names who is paying the carry."},"axes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"state":{"type":"string"},"detail":{"type":"string","description":"The numbers behind the state, as prose"},"metrics":{"type":"object","additionalProperties":{"type":"number"},"description":"The same numbers keyed by metric name, e.g. annualizedFundingPct, trappedShare"},"actors":{"type":"string","description":"The market-actor cohort(s) this axis reads \u2014 the counterparty tag"},"vote":{"type":"integer","description":"\u002B1 clean, -1 crowded/fragile, 0 neutral or informational"}}}},"focalPoints":{"type":"array","items":{"type":"object","properties":{"priceUsd":{"type":"number","description":"A known price level: a visible liquidation or a breakeven exit level"},"side":{"type":"string","description":"e.g. long liquidation, short liquidation, long breakeven"},"reason":{"type":"string","description":"The position behind the level"}}},"description":"Price levels that are common knowledge on the board, nearest to spot first"},"wouldChange":{"type":"array","items":{"type":"string"},"description":"Thresholds that would flip an axis, as prose"},"thresholds":{"type":"array","items":{"type":"object","properties":{"metric":{"type":"string"},"comparator":{"type":"string","description":"\u003E= or \u003C="},"value":{"type":"number","description":"The disclosed flip threshold"},"current":{"type":"number","description":"Where the metric stands now"},"flipsTo":{"type":"string","description":"The state the axis flips to at the threshold"}}},"description":"The wouldChange lines in machine-readable form for stateless alerting"},"skippedAxes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"reason":{"type":"string","description":"The feed that was offline, or what the coin lacks"}}},"description":"Axes attempted but not computed; the stance is over the computed ones only"},"axesComputed":{"type":"integer"},"axesTotal":{"type":"integer"}}},"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"research_positioning","x-x402-price":{"scheme":"exact","amount":"50000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/research/tokens/{symbol}":{"get":{"operationId":"research_token_view","summary":"Token Deep Dive","description":"Aggregated single-coin dossier: market data (spot/perp price, funding, market-wide OI, long/short, liquidations \u2014 the same enriched line as market_quotes), global market context (dominance, Fear \u0026 Greed), multi-timeframe technicals computed in-house from candles (4h \u002B 1d: RSI, EMA/SMA, MACD, ATR, Bollinger, ADX, trend \u2014 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 \u2014 for one symbol (e.g. \u0027ETH\u0027).","tags":["research"],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","description":"Coin symbol, e.g. \u0027ETH\u0027 or \u0027BTC\u0027"},"description":"Coin symbol, e.g. \u0027ETH\u0027 or \u0027BTC\u0027"}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"symbol":{"type":"string"},"market":{"type":"object","description":"Same shape as one market_quotes item; omitted when no provider covers the symbol"},"technicals":{"type":"array","description":"In-house per-timeframe snapshots; same item shape as ta_technicals\u0027s timeframes. Empty when no timeframe could be analyzed.","items":{"type":"object"}},"news":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"url":{"type":"string"},"snippet":{"type":"string"},"date":{"type":"string","description":"Publish date; omitted when unknown"},"source":{"type":"string"},"kind":{"type":"string","description":"Item type: article, tweet or exchange (announcement); empty when the feed doesn\u0027t say"},"coins":{"type":"array","description":"Coin symbols the feed tagged on the item, e.g. [\u0022BTC\u0022,\u0022ETH\u0022]","items":{"type":"string"}},"impact":{"type":"object","description":"Measured price move after the headline broke; omitted when not measured","properties":{"coin":{"type":"string"},"pct":{"type":"number","description":"Net move over the window, percentage points, e.g. 1.9"},"up":{"type":"number","description":"Best move reached in the window, percentage points"},"down":{"type":"number","description":"Worst move reached in the window, percentage points"},"windowMs":{"type":"number","description":"Measurement window in milliseconds, e.g. 3600000"}}}}}},"narrative":{"type":"object","properties":{"answer":{"type":"string"},"citations":{"type":"array","items":{"type":"string"}}}},"catalysts":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string"},"coins":{"type":"array","items":{"type":"string"}},"eventDate":{"type":"string"},"dateAdded":{"type":"string"},"categories":{"type":"array","items":{"type":"string"}},"source":{"type":"string"}}}},"marketContext":{"type":"object","description":"Same shape as market_overview"},"onChain":{"type":"object","properties":{"chainName":{"type":"string"},"tvlUsd":{"type":"number","description":"Total value locked, USD"},"fees24hUsd":{"type":"number"},"fees7dUsd":{"type":"number"},"fees30dUsd":{"type":"number"},"feesChangePct24h":{"type":"number","description":"24h fees change, percentage points"}}},"social":{"type":"object","properties":{"symbol":{"type":"string"},"galaxyScore":{"type":"number","description":"0-100 composite"},"altRank":{"type":"number","description":"1-based rank, lower is stronger"},"sentimentPct":{"type":"number","description":"Bullish share, percentage points"},"socialVolume24h":{"type":"number"},"socialDominancePct":{"type":"number","description":"Share of total crypto social volume, percentage points"},"interactions24h":{"type":"number"}}},"etfFlow":{"type":"object","properties":{"asset":{"type":"string"},"dateMs":{"type":"integer","description":"Flow date, Unix epoch milliseconds"},"asOfAt":{"type":"string","description":"Flow date, ISO-8601 UTC"},"ageHours":{"type":"number","description":"How old the flow date is now, in hours. ETF flows settle behind spot and skip weekends, so this is routinely \u003E24."},"stale":{"type":"boolean","description":"True when the flow date is more than 96h old \u2014 the series has missed a publication"},"totalFlowUsd":{"type":"number","description":"Net flow across all funds, USD (positive = inflow)"},"priceUsd":{"type":"number","description":"The underlying\u0027s price ON THE FLOW DATE, not spot \u2014 compare against ageHours before reading it as current"},"byTicker":{"type":"array","items":{"type":"object","properties":{"ticker":{"type":"string"},"flowUsd":{"type":"number","description":"Per-fund net flow, USD"}}}}}},"predictionMarkets":{"type":"array","items":{"type":"object","properties":{"question":{"type":"string"},"outcomes":{"type":"array","items":{"type":"object","properties":{"outcome":{"type":"string"},"probability":{"type":"number","description":"Market-implied probability, 0-1"}}}},"volumeUsd":{"type":"number"},"liquidityUsd":{"type":"number"},"endDate":{"type":"string"},"url":{"type":"string"},"source":{"type":"string"}}}},"sections":{"type":"array","description":"Per-section outcome, so an empty section can be told apart from a failed feed. Check this before reading an empty array as a real absence.","items":{"type":"object","properties":{"name":{"type":"string","description":"Section key, e.g. news, narrative, catalysts"},"status":{"type":"string","description":"ok, empty (feed answered, nothing for this symbol), not_applicable, or unavailable (feed failed)"},"reason":{"type":"string","description":"Present for not_applicable and unavailable"}}}},"providerCoverage":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"status":{"type":"string","description":"healthy, degraded, or offline"},"reason":{"type":"string","description":"Present only when degraded or offline"}}}}},"required":["symbol"]},"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"research_token_view","x-x402-price":{"scheme":"exact","amount":"75000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/research/opportunities":{"get":{"operationId":"research_opportunities","summary":"Opportunity Scan","description":"Cross-sectional opportunity scan across every major and medium-cap coin at once \u2014 the screener the per-coin tools cannot be looped into safely. Two whole-universe feeds (the merged market snapshot \u002B 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 six signals per candidate: crowding (annualized funding vs the venue-standard anchor AND its percentile across the screened universe right now \u2014 a cross-sectional read, explicitly NOT the own-history percentile research_positioning reports), stress (24h liquidations as a share of open interest \u2014 whether forced sellers already cleared), leverage (open interest as a share of market cap \u2014 the gap-through-your-stop condition), compression (4h Bollinger bandwidth ranked against the coin\u0027s own trailing window \u2014 the per-coin form of the reading research_regime computes for BTC alone; says energy is loading, never direction), trend (ADX with the \u002BDI/-DI separation on 4h, confirmed against 1d \u2014 the vote is withheld unless the slow timeframe agrees), and location (distance from the 4h EMA20 in ATR units \u2014 an extended coin scores DOWN, because a chase is not a setup). Each signal reports its state, the numbers, and a \u002B1/0/-1 setup-quality vote; the setup name and score come from a disclosed rule shipped with every scan. Candidates carry ATR-and-structure geometry \u2014 a resting-limit entry at the EMA20 (never at market), a stop a full 2 ATR beyond it, and a target shaded inside the first structural level \u2014 priced so it feeds research_trade_plan directly. \u0027tier\u0027 filters major/medium/all; \u0027limit\u0027 caps the ranked list; \u0027symbols\u0027 narrows the universe to specific coins, and every symbol named there is accounted for individually in the response \u2014 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 \u2014 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 \u0027NO CANDIDATES\u0027 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.","tags":["research"],"parameters":[{"name":"tier","in":"query","required":false,"schema":{"type":"string","enum":["major","medium","all"],"description":"Size tier to screen: \u0027major\u0027 (market cap \u003E= $10B), \u0027medium\u0027 ($300M-$10B), or \u0027all\u0027 (default)."},"description":"Size tier to screen: \u0027major\u0027 (market cap \u003E= $10B), \u0027medium\u0027 ($300M-$10B), or \u0027all\u0027 (default)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Ranked candidates to return. Default 10, max 25."},"description":"Ranked candidates to return. Default 10, max 25."},{"name":"symbols","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Optional: narrow the universe to these coin symbols, e.g. [\u0022SOL\u0022,\u0022AVAX\u0022]. Omit to screen everything that clears the tier and liquidity floors."},"description":"Optional: narrow the universe to these coin symbols, e.g. [\u0022SOL\u0022,\u0022AVAX\u0022]. Omit to screen everything that clears the tier and liquidity floors.","style":"form","explode":false},{"name":"intervals","in":"query","required":false,"schema":{"type":"array","items":{"type":"string","enum":["1m","5m","15m","30m","1h","4h","12h","1d","1w"]},"description":"The timeframe pair to analyse, FINEST FIRST: [fast] or [fast, slow]. Default [\u00224h\u0022,\u00221d\u0022]. 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 \u2014 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."},"description":"The timeframe pair to analyse, FINEST FIRST: [fast] or [fast, slow]. Default [\u00224h\u0022,\u00221d\u0022]. 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 \u2014 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.","style":"form","explode":false}],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"coverage":{"type":"object","description":"What the scan actually looked at \u2014 read this before treating an empty candidate list as a quiet market","properties":{"quoted":{"type":"integer","description":"Coins the merged market feed returned with a usable price"},"perpCovered":{"type":"integer","description":"Coins with a venue perp context, the source of the 24h volume floor"},"screened":{"type":"integer","description":"Every coin passing the liquidity floors \u2014 the universe every cross-sectional percentile is computed against, whatever tier or symbols were requested"},"selected":{"type":"integer","description":"Coins left after the tier/symbol narrowing \u2014 the set the shortlist is drawn from. Equal to screened when nothing was filtered."},"major":{"type":"integer"},"medium":{"type":"integer"},"analyzed":{"type":"integer","description":"Shortlisted coins whose candles answered"},"technicalsFailed":{"type":"integer","description":"Shortlisted coins whose candles did not answer; their candidates carry Stage A signals only"},"priceDisagreements":{"type":"array","description":"Shortlisted coins whose candle series was DISCARDED because its newest close disagreed with the merged market price beyond the divergence band \u2014 a stale or mismatched series (e.g. a delisted pair a venue still serves). A wrong answer, not a missing one. These candidates carry Stage A signals only and are never priced.","items":{"type":"object","properties":{"symbol":{"type":"string"},"candleCloseUsd":{"type":"number"},"mergePriceUsd":{"type":"number"}}}},"sources":{"type":"array","items":{"type":"string"}},"fastInterval":{"type":"string","description":"The timeframe every level in this report is measured on"},"slowInterval":{"type":"string","description":"The confirmation timeframe; absent when only one interval was requested, in which case the trend vote abstains"}}},"requestedSymbols":{"type":"array","description":"One entry per symbol named in the \u0027symbols\u0027 argument, so a symbol missing from \u0027candidates\u0027 can be explained. Empty when no symbols were named. A status other than \u0027selected\u0027 means no band was applied to that coin, so its absence says nothing about its setup.","items":{"type":"object","properties":{"symbol":{"type":"string"},"status":{"type":"string","description":"selected | tier_excluded | below_liquidity_floors | below_tier_floor | not_quoted"},"detail":{"type":"string","description":"The numbers behind the status, with the floor each was measured against"}}}},"candidates":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string"},"tier":{"type":"string","description":"major or medium"},"tierFromVolume":{"type":"boolean","description":"True when no market-cap source answered and the tier was inferred from 24h volume instead \u2014 a weaker claim than a size tier, and those rows carry no leverage signal"},"setup":{"type":"string","description":"TRENDING PULLBACK | COILED | SQUEEZE FUEL | EXTENDED | NO SETUP. EXTENDED is reported so it is NOT taken as an entry."},"lean":{"type":"string","description":"long, short, or empty. A lean, never a call; COILED deliberately carries none."},"score":{"type":"integer","description":"Plain sum of signal votes"},"priceUsd":{"type":"number"},"marketCapUsd":{"type":"number"},"change24hPct":{"type":"number"},"dayNotionalUsd":{"type":"number","description":"24h perp notional volume, USD"},"timeframes":{"type":"array","items":{"type":"string"},"description":"Intervals whose candles answered; empty means Stage A signals only"},"signals":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"state":{"type":"string"},"detail":{"type":"string","description":"The numbers behind the state, as prose"},"metrics":{"type":"object","additionalProperties":{"type":"number"},"description":"The same numbers keyed by metric name, e.g. fundingUniversePercentile, bandwidthOwnPercentile, distanceFromEma20Atr"},"vote":{"type":"integer","description":"The signal\u0027s own reading: \u002B1 supports a defined entry, -1 argues against one, 0 informational. Not summable with research_regime or research_positioning votes."},"contribution":{"type":"integer","description":"What the signal contributed to the score once the setup\u0027s side was known. Equals vote except where the signal leans against that side, when the sign flips \u2014 a reading favouring the opposite side is evidence the entry would be joining the cohort that pays."},"lean":{"type":"string"}}}},"geometry":{"type":"object","description":"ATR-and-structure prices, ready for research_trade_plan. Absent for a setup with no priceable side (COILED) and for EXTENDED, where refusing to price a chase is the point.","properties":{"entryUsd":{"type":"number","description":"Resting limit at the 4h EMA20 \u2014 never the current price"},"stopUsd":{"type":"number"},"targetUsd":{"type":"number"},"rewardRisk":{"type":"number","description":"Reported as computed, never adjusted to clear the 2:1 bar"},"stopDistancePct":{"type":"number","description":"Stop distance as a percentage of entry"},"stopDistanceAtr":{"type":"number","description":"Stop distance in ATR(14) units"},"targetDistanceAtr":{"type":"number","description":"Target distance in ATR(14) units. Read alongside rewardRisk: a tight stop with a distant target prices well and still asks price to travel a long way. R:R is geometry, never expectancy."},"targetBasis":{"type":"string","description":"The structural level the target was shaded inside, named"},"livePriceUsd":{"type":"number","description":"The live merged market price the entry was checked against"},"entryGapAtr":{"type":"number","description":"How far live price sits from the entry in ATR units, signed in the setup\u0027s favour: positive means the limit has not been reached yet, negative that price has passed it"},"freshness":{"type":"string","description":"PENDING (limit not reached) | AT ENTRY (filling now) | THROUGH (passed the limit, stop still holds). Geometry is absent entirely when INVALIDATED \u2014 price is already at or beyond the stop."},"rule":{"type":"string"}}},"signalsComputed":{"type":"integer"},"signalsTotal":{"type":"integer"}}}},"rule":{"type":"string","description":"The exact rule that produced setup and score"},"caveats":{"type":"array","items":{"type":"string"},"description":"What the scan cannot see, stated rather than implied"}}},"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"research_opportunities","x-x402-price":{"scheme":"exact","amount":"50000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}},"/research/trade-plan":{"post":{"operationId":"research_trade_plan","summary":"Trade Plan Check \u0026 Replay","description":"Check, review or replay a perp trade setup (entry, stop, optional target), before it is placed or after: the tool for \u0027check this setup\u0027, \u0027is this trade good\u0027 and \u0027how did my trade do\u0027. 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\u0027s 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, leverage over 10x, and an entry far from live. 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.","tags":["research"],"parameters":[],"responses":{"200":{"description":"The result.","headers":{"PAYMENT-RESPONSE":{"description":"x402 route: base64 settlement receipt.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Human-readable rendering of the result."},"meta":{"$ref":"#/components/schemas/ResponseMeta"}},"required":["text"]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"402":{"$ref":"#/components/responses/PaymentRequired"},"403":{"$ref":"#/components/responses/Forbidden"},"500":{"$ref":"#/components/responses/InternalError"},"502":{"$ref":"#/components/responses/UpstreamError"}},"x-mcp-tool":"research_trade_plan","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"symbol":{"type":"string","description":"Coin symbol, e.g. \u0022ETH\u0022."},"entry":{"type":"number","description":"Planned entry price"},"stop":{"type":"number","description":"Stop-loss price (below entry = long, above = short)"},"target":{"type":"number","description":"Optional take-profit price"},"account_size":{"type":"number","description":"Optional account equity in USD, with risk_percent: adds the position size, notional and margin. Leave both out when the user didn\u0027t give them."},"risk_percent":{"type":"number","description":"Optional percent of the account lost if the stop is hit, e.g. 1; only with account_size"},"leverage":{"type":"number","description":"Optional leverage the position is opened at, 1\u2013200, for the liquidation price. Default when sized: the smallest whole leverage that carries the notional; unsized: no liquidation price unless given."},"placed_at":{"type":"string","description":"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 (\u0027placed 2026-10-12T12:00Z\u0027, \u0027opened yesterday at 14:00\u0027): 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":{"type":"string","enum":["limit","stop","market"],"description":"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\u0027t 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."}},"required":["symbol","entry","stop"]}}}},"x-x402-price":{"scheme":"exact","amount":"50000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","network":"eip155:8453"}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"API key (or OAuth access token) issued at f1ow.com."}},"schemas":{"Problem":{"type":"object","description":"RFC 9457 problem details","properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"instance":{"type":"string"}},"required":["type","title","status"]},"ValidationProblem":{"allOf":[{"$ref":"#/components/schemas/Problem"},{"type":"object","properties":{"errors":{"type":"object","description":"Messages per invalid argument","additionalProperties":{"type":"array","items":{"type":"string"}}}}}]},"ResponseMeta":{"type":"object","properties":{"generatedAt":{"type":"string","format":"date-time","description":"When the data was produced (source timestamp where the provider has one), ISO 8601 UTC"}}}},"responses":{"BadRequest":{"description":"An argument is missing or invalid.","content":{"application/problem\u002Bjson":{"schema":{"$ref":"#/components/schemas/ValidationProblem"}}}},"Unauthorized":{"description":"No credential was sent.","content":{"application/problem\u002Bjson":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"PaymentRequired":{"description":"x402 route: a priced call without a valid payment (challenge in the base64 PAYMENT-REQUIRED header). Metered routes: the account balance or access period is spent.","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 PaymentRequired object.","schema":{"type":"string"}}},"content":{"application/problem\u002Bjson":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"Forbidden":{"description":"The credential was rejected.","content":{"application/problem\u002Bjson":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"UpstreamError":{"description":"The data source could not answer.","content":{"application/problem\u002Bjson":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"InternalError":{"description":"Unexpected server error.","content":{"application/problem\u002Bjson":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}