{"openapi":"3.1.0","info":{"title":"AgentFeed","version":"1.0.0","description":"Live crypto market, liquidation, tokenized-equity and Solana on-chain data for AI agents. Paid per call in USDC over x402 on Solana, Base, Polygon or Arbitrum. No API keys, no accounts.","x-generated-from":"payments.PRICES + bazaar-examples.json, at boot","contact":{"name":"ochinimus","email":"ochinimus@gmail.com","url":"https://ochinimus.app"},"x-guidance":"Every route is a GET that returns JSON. There are no API keys and no accounts. Paid routes answer 402 with the challenge twice: x402 v2, base64 JSON in the PAYMENT-REQUIRED response header, for every rail; and x402 v1, the JSON body {x402Version: 1, accepts}, for Base and Solana. Pay with a PAYMENT-SIGNATURE header (x402 v2) or an X-PAYMENT header (x402 v1, Base or Solana; an X-PAYMENT carrying a v2 payload is read as PAYMENT-SIGNATURE). USDC on Solana mainnet, Base, Polygon or Arbitrum. Copy payTo only from a fresh 402 response, never from transaction history: a lookalike of the treasury address has sent address-poisoning transfers to our buyers. Response shape is always { \"tool\": \"<name>\", \"data\": { ... }, \"paid\": true }. Before paying, GET /api/sample/<route> for that route's real captured response, free. GET /api/sample lists them. Start cheap: /api/perp, /api/liq-pulse, /api/funding-pulse and /api/price are $0.005 each and cover most questions. The premium routes are the liquidation tape, cascade detection and the tokenized-equity peg tape. A route that cannot answer returns 200 with a decline field naming the reason; it never returns fabricated or zero-filled data. Limits: GET only on /api/* (HEAD on a paid route answers the 402 challenge headers with no body, on a free route 405); per caller per minute 240 GET or POST /mcp and 2400 of any other method; a 429 carries Retry-After."},"externalDocs":{"description":"AgentFeed agent skill: when to use each route, what it answers and what it costs","url":"https://x402.ochinimus.app/SKILL.md"},"servers":[{"url":"https://x402.ochinimus.app"}],"paths":{"/api/sol-price":{"get":{"description":"SOL price / Solana spot price in USD, live. Multi-source with a fixed fallback order — Coinbase, then Kraken, then Pyth Hermes — first finite quote wins. Returns the price, the venue that served it, and a Pyth confidence interval when Pyth did.","operationId":"get_sol_price","responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"symbol":{"type":"string"},"price":{"type":"number"},"confidence":{},"publish_time":{},"source":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_sol_price","data":{"symbol":"SOL","price":121.35,"confidence":null,"publish_time":null,"source":"coinbase"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, and in WWW-Authenticate (MPP solana/charge), for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch SOL price: sol price / solana spot price in usd, live","tags":["agentfeed"],"x-price-usd":0.005,"x-payment-info":{"protocols":[{"x402":{}},{"mpp":{"method":"solana","intent":"charge","currency":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}}}},"/api/btc-price":{"get":{"description":"BTC price / Bitcoin spot price in USD, live. Multi-source with a fixed fallback order — Coinbase, then Kraken, then Pyth Hermes — first finite quote wins. Returns the price, the venue that served it, and a Pyth confidence interval when Pyth did.","operationId":"get_btc_price","responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"symbol":{"type":"string"},"price":{"type":"number"},"confidence":{},"publish_time":{},"source":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_btc_price","data":{"symbol":"BTC","price":83868.13,"confidence":null,"publish_time":null,"source":"coinbase"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, and in WWW-Authenticate (MPP solana/charge), for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch BTC price: btc price / bitcoin spot price in usd, live","tags":["agentfeed"],"x-price-usd":0.005,"x-payment-info":{"protocols":[{"x402":{}},{"mpp":{"method":"solana","intent":"charge","currency":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}}}},"/api/funding-rate":{"get":{"description":"Funding rate for any USDT perp on Bybit, OKX and Hyperliquid: per venue the raw rate, its interval in hours, the 8h equivalent, the annualised rate, next funding time and mark price. Without a symbol: funding rates for the SOL and BTC perps on Hyperliquid, with open interest. Cross-venue spread and crowding: /api/funding-cross.","operationId":"get_funding_rate","parameters":[{"in":"query","name":"symbol","required":false,"schema":{"type":"string","description":"USDT perp symbol e.g. ETHUSDT, ONDOUSDT (omit for SOL and BTC from Hyperliquid)"}}],"x-example-query":{"symbol":"ETHUSDT"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"symbol":{"type":"string"},"venues":{"type":"object"},"note":{"type":"string"},"source":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_funding_rate","data":{"symbol":"ETHUSDT","venues":{"bybit":{"funding_rate_raw":-0.0000658,"funding_interval_hours":8,"funding_rate_8h":-0.0000658,"annualized_pct":-7.21,"next_funding_time":1790611200000,"mark_price":2649.08},"okx":{"funding_rate_raw":-0.0000219362088511,"funding_interval_hours":8,"funding_rate_8h":-0.0000219362088511,"annualized_pct":-2.4,"next_funding_time":1790611200000,"mark_price":2648.8},"hyperliquid":{"funding_rate_raw":0.0000125,"funding_interval_hours":1,"funding_rate_8h":0.0001,"annualized_pct":10.95,"next_funding_time":1790593200000,"mark_price":2650.7}},"note":"Each rate is quoted for its own interval: funding_rate_8h = raw x 8 / funding_interval_hours, annualized_pct = raw x 24 / funding_interval_hours x 365 x 100. /api/funding-cross adds the cross-venue spread and a crowding read.","source":"bybit+okx+hyperliquid public funding"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: optional query param symbol = not-a-symbol.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_funding_rate","error":"invalid symbol: not-a-symbol"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch funding rate: funding rate for any usdt perp on bybit","tags":["agentfeed"],"x-price-usd":0.005,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}}}},"/api/market-snapshot":{"get":{"description":"Crypto market snapshot in one call: SOL and BTC spot prices, both perp funding rates with mark price and open interest, and the Fear & Greed index with its classification. Five reads, one payment.","operationId":"get_market_snapshot","responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"sol":{"type":"object"},"btc":{"type":"object"},"funding":{"type":"object"},"fear_greed":{"type":"object"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_market_snapshot","data":{"sol":{"symbol":"SOL","price":121.35,"confidence":null,"publish_time":null,"source":"coinbase"},"btc":{"symbol":"BTC","price":83868.13,"confidence":null,"publish_time":null,"source":"coinbase"},"funding":{"sol":{"symbol":"SOL","funding_rate_hourly":0.0000125,"funding_rate_8h_equiv":0.0001,"funding_rate_pct_hourly":0.00125,"mark_price":121.42,"open_interest":6103405.560000007,"source":"hyperliquid"},"btc":{"symbol":"BTC","funding_rate_hourly":0.0000125,"funding_rate_8h_equiv":0.0001,"funding_rate_pct_hourly":0.00125,"mark_price":83875,"open_interest":39511.1646,"source":"hyperliquid"}},"fear_greed":{"value":71,"classification":"Greed","timestamp":1790294400,"source":"alternative.me"}},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch market snapshot: crypto market snapshot in one call","tags":["agentfeed"],"x-price-usd":0.005,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}}}},"/api/wallet-holdings/{wallet}":{"get":{"description":"Solana wallet holdings / portfolio for any address: native SOL with its USD value, every SPL token with amount, unit price and USD value, and an NFT count. Helius DAS getAssetsByOwner, up to 100 assets.","operationId":"get_wallet_holdings","parameters":[{"description":"Solana wallet address (base58)","in":"path","name":"wallet","required":true,"schema":{"type":"string","description":"Solana wallet address (base58)"}}],"x-example-path":{"wallet":"Gack9UtqfeZxFA1LqeqjLgC3JGuD7rS6CsSHKoXsD4Tu"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"wallet":{"type":"string"},"native_sol":{"type":"number"},"native_sol_usd":{"type":"number"},"fungible_tokens":{"type":"array"},"nft_count":{"type":"number"},"total_items":{"type":"number"},"source":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_wallet_holdings","data":{"wallet":"Gack9UtqfeZxFA1LqeqjLgC3JGuD7rS6CsSHKoXsD4Tu","native_sol":0,"native_sol_usd":0,"fungible_tokens":[{"mint":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","symbol":"USDC","amount":0.055,"price_usd":0.9998925,"value_usd":0.05499408602714539}],"nft_count":0,"total_items":1,"source":"helius-das"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: path param wallet = not-a-valid-address.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_wallet_holdings","error":"invalid wallet address"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch wallet holdings: solana wallet holdings / portfolio for","tags":["agentfeed"],"x-price-usd":0.008,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.008"}}}},"/api/token-metadata/{mint}":{"get":{"description":"SPL token metadata for any Solana mint: name, symbol, decimals, total supply, current USD price, interface type, and whether the metadata is still mutable. Helius DAS.","operationId":"get_token_metadata","parameters":[{"description":"SPL token mint address (base58)","in":"path","name":"mint","required":true,"schema":{"type":"string","description":"SPL token mint address (base58)"}}],"x-example-path":{"mint":"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"mint":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"interface":{"type":"string"},"decimals":{"type":"number"},"supply":{"type":"number"},"price_usd":{"type":"number"},"mutable":{"type":"boolean"},"source":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_token_metadata","data":{"mint":"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263","name":"Bonk","symbol":"Bonk","interface":"FungibleToken","decimals":5,"supply":8799438384760911000,"price_usd":0.0000036881577,"mutable":true,"source":"helius-das"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: path param mint = not-a-valid-address.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_token_metadata","error":"invalid mint address"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch token metadata: spl token metadata for any solana mint","tags":["agentfeed"],"x-price-usd":0.005,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}}}},"/api/liquidations":{"get":{"description":"Crypto liquidations, live tape: recent perp liquidation prints across Bybit, OKX and Binance with timestamp, side liquidated, size, price and USD value. Any USDT perp we record, not just majors. The Bybit tape is complete and unthrottled.","operationId":"get_recent_liquidations","parameters":[{"in":"query","name":"symbol","required":false,"schema":{"type":"string","description":"SOL, BTC, ETH, XRP, DOGE, or any USDT perp e.g. SXTUSDT (omit for majors)"}},{"in":"query","name":"scope","required":false,"schema":{"type":"string","enum":["core","all"],"description":"core = the 5 majors (default), all = every recorded USDT perp"}},{"in":"query","name":"limit","required":false,"schema":{"type":"number","description":"max rows, 1-100, default 25"}},{"in":"query","name":"min_usd","required":false,"schema":{"type":"number","description":"only prints >= this USD size"}}],"x-example-query":{"symbol":"SOLUSDT"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"source":{"type":"string"},"exchanges":{"type":"array"},"count":{"type":"number"},"liquidations":{"type":"array"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_recent_liquidations","data":{"source":"multi_exchange_collector","exchanges":["bybit","okx","binance"],"count":25,"liquidations":[{"ts":1790355163131,"symbol":"SOLUSDT","exchange":"binance","event":"short_liquidated","size":4.44,"price":121.37,"usd":538.88},{"ts":1790354963088,"symbol":"SOLUSDT","exchange":"okx","event":"long_liquidated","size":23.46,"price":120.62,"usd":2829.75},{"ts":1790354961156,"symbol":"SOLUSDT","exchange":"binance","event":"long_liquidated","size":2.6,"price":120.65,"usd":313.69}]},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: optional query param symbol = not-a-symbol.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_recent_liquidations","error":"symbol must be an alias (SOL, BTC, ETH, XRP, DOGE) or a USDT perp symbol (e.g. SXTUSDT)"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch recent liquidations: crypto liquidations, live tape","tags":["agentfeed"],"x-price-usd":0.005,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}}}},"/api/cascade":{"get":{"description":"Liquidation cascade detector, live: clustered same-side liquidations happening NOW on SOL, BTC, ETH, XRP and DOGE across Bybit, OKX and Binance, with side, USD total, prints, duration and severity. For every perp we record use /api/cascade-scan.","operationId":"get_cascade_alert","parameters":[{"in":"query","name":"window","required":false,"schema":{"type":"number","description":"lookback window seconds, 30-300, default 90"}},{"in":"query","name":"min_events","required":false,"schema":{"type":"number","description":"min prints to qualify, default 4"}},{"in":"query","name":"min_usd","required":false,"schema":{"type":"number","description":"min summed USD, default 50000"}}],"x-example-query":{"window":300},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"active":{"type":"boolean"},"count":{"type":"number"},"cascades":{"type":"array"},"scope":{"type":"string"},"params":{"type":"object"},"checked_at":{"type":"number"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_cascade_alert","data":{"active":true,"count":2,"cascades":[{"symbol":"ETHUSDT","side_liquidated":"longs","events":10,"total_usd":111215.57,"max_single_usd":85774.4,"duration_sec":150,"price_range":[2680.45,2684.72],"severity":"minor"},{"symbol":"XRPUSDT","side_liquidated":"longs","events":11,"total_usd":62367.59,"max_single_usd":33188.9,"duration_sec":75,"price_range":[1.5537,1.5642],"severity":"minor"}],"scope":"core","params":{"window_sec":300,"min_events":4,"min_usd":50000},"checked_at":1790355176441},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch cascade alert: liquidation cascade detector, live","tags":["agentfeed"],"x-price-usd":0.01,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}}}},"/api/cascade-scan":{"get":{"description":"Liquidation cascade scan across EVERY USDT perp we record on Bybit, OKX and Binance at once, not just the majors: symbol, side liquidated, USD total, prints, duration, severity. Bybit is the only complete unthrottled liquidation tape in crypto.","operationId":"get_cascade_scan","parameters":[{"in":"query","name":"window","required":false,"schema":{"type":"number","description":"lookback window seconds, 30-300, default 90"}},{"in":"query","name":"min_events","required":false,"schema":{"type":"number","description":"min prints to qualify, default 4"}},{"in":"query","name":"min_usd","required":false,"schema":{"type":"number","description":"min summed USD, default 50000"}}],"x-example-query":{"window":300},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"active":{"type":"boolean"},"count":{"type":"number"},"cascades":{"type":"array"},"scope":{"type":"string"},"params":{"type":"object"},"checked_at":{"type":"number"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_cascade_scan","data":{"active":true,"count":2,"cascades":[{"symbol":"ETHUSDT","side_liquidated":"longs","events":10,"total_usd":111215.57,"max_single_usd":85774.4,"duration_sec":150,"price_range":[2680.45,2684.72],"severity":"minor"},{"symbol":"XRPUSDT","side_liquidated":"longs","events":11,"total_usd":62367.59,"max_single_usd":33188.9,"duration_sec":75,"price_range":[1.5537,1.5642],"severity":"minor"}],"scope":"all","params":{"window_sec":300,"min_events":4,"min_usd":50000},"checked_at":1790355176637},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch cascade scan: liquidation cascade scan across every usdt","tags":["agentfeed"],"x-price-usd":0.05,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.05"}}}},"/api/liquidation-leaders":{"get":{"description":"Liquidation leaderboard: top symbols by liquidation USD right now across every USDT perp we record on Bybit, OKX and Binance, with long/short split, biggest single print and venue count. What is blowing up, ranked.","operationId":"get_liquidation_leaders","parameters":[{"in":"query","name":"window_min","required":false,"schema":{"type":"number","description":"lookback minutes, 5-1440, default 60"}},{"in":"query","name":"limit","required":false,"schema":{"type":"number","description":"top N symbols, 1-50, default 10"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"source":{"type":"string"},"universe":{"type":"string"},"exchanges":{"type":"array"},"window_min":{"type":"number"},"count":{"type":"number"},"leaders":{"type":"array"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_liquidation_leaders","data":{"source":"multi_exchange_collector","universe":"all_usdt_perps","exchanges":["bybit","okx","binance"],"window_min":60,"count":10,"leaders":[{"symbol":"ETHUSDT","events":80,"total_usd":903316.03,"longs_usd":114481.98,"shorts_usd":788834.05,"biggest_usd":220791.65,"venues":3,"dominant_side":"shorts"},{"symbol":"BTCUSDT","events":72,"total_usd":852392.57,"longs_usd":31983.89,"shorts_usd":820408.68,"biggest_usd":224614.76,"venues":3,"dominant_side":"shorts"},{"symbol":"SOLUSDT","events":111,"total_usd":551818.07,"longs_usd":19962.17,"shorts_usd":531855.9,"biggest_usd":100573.77,"venues":3,"dominant_side":"shorts"}]},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch liquidation leaders: liquidation leaderboard","tags":["agentfeed"],"x-price-usd":0.02,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.02"}}}},"/api/liquidation-stats":{"get":{"description":"Liquidation stats, 1h and 24h totals for SOL, BTC, ETH, XRP and DOGE: long vs short USD split, biggest single print, and a per-exchange breakdown across Bybit, OKX and Binance.","operationId":"get_liquidation_stats","responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"source":{"type":"string"},"exchanges":{"type":"array"},"collecting_since":{"type":"number"},"sol":{"type":"object"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_liquidation_stat…","data":{"source":"multi_exchange_colle…","exchanges":["bybit","okx","binance"],"collecting_since":1783528952067,"sol":{"1h":{"events":474,"total_usd":6674773.67,"longs_liquidated_usd":6443900.69,"shorts_liquidated_usd":230872.98,"biggest_print_usd":565140.68,"by_exchange":{"bybit":{"events":246,"total_usd":924074.2,"longs_liquidated_usd":857833.57,"shorts_liquidated_usd":66240.63,"biggest_print_usd":67330.17},"okx":{"events":85,"total_usd":611411.23,"longs_liquidated_usd":583604.52,"shorts_liquidated_usd":27806.71,"biggest_print_usd":132626.52},"binance":{"events":143,"total_usd":5139288.24,"longs_liquidated_usd":5002462.6,"shorts_liquidated_usd":136825.64,"biggest_print_usd":565140.68}}},"24h":{"events":3160,"total_usd":35593650,"longs_liquidated_usd":34649734.64,"shorts_liquidated_usd":943915.35,"biggest_print_usd":1858611.82,"by_exchange":{"okx":{"events":566,"total_usd":3740852.51,"longs_liquidated_usd":3458924.73,"shorts_liquidated_usd":281927.78,"biggest_print_usd":382358.02},"binance":{"events":911,"total_usd":24296622.41,"longs_liquidated_usd":23797984.96,"shorts_liquidated_usd":498637.46,"biggest_print_usd":1858611.82},"bybit":{"events":1683,"total_usd":7556175.07,"longs_liquidated_usd":7392824.96,"shorts_liquidated_usd":163350.11,"biggest_print_usd":99431.77}}}}},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch liquidation stats: liquidation stats, 1h and 24h totals","tags":["agentfeed"],"x-price-usd":0.01,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}}}},"/api/positioning":{"get":{"description":"Open interest and long/short ratio for SOL and BTC perps: the retail long/short account ratio plus Bybit open interest with 1h and 24h change. For any other USDT perp use /api/open-interest and /api/long-short.","operationId":"get_positioning","responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"source":{"type":"string"},"period":{"type":"string"},"sol":{"type":"object"},"btc":{"type":"object"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_positioning","data":{"source":"bybit_v5_public","period":"1h","sol":{"long_short_ratio":{"long_pct":68.86,"short_pct":31.14,"long_pct_prev_hour":68.74,"ts":1790352000000},"open_interest":{"base":6478924.1,"usd":809589831,"change_1h_pct":-1.3,"change_24h_pct":9.93}},"btc":{"long_short_ratio":{"long_pct":57.02,"short_pct":42.98,"long_pct_prev_hour":57,"ts":1790352000000},"open_interest":{"base":58663.035,"usd":4907625052,"change_1h_pct":0.19,"change_24h_pct":-1.31}}},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch positioning: open interest and long/short ratio for sol","tags":["agentfeed"],"x-price-usd":0.005,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}}}},"/api/trade-context":{"get":{"description":"Crypto trading context in one call: SOL and BTC prices, perp funding rates, Fear & Greed, long/short positioning, open interest and 1h/24h liquidation stats. The whole pre-trade picture, one payment.","operationId":"get_trade_context","responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"ts":{"type":"number"},"prices":{"type":"object"},"funding":{"type":"object"},"fear_greed":{"type":"object"},"positioning":{"type":"object"},"liquidations":{"type":"object"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_trade_context","data":{"ts":1791476635017,"prices":{"sol":{"symbol":"SOL","price":108.745,"confidence":null,"publish_time":null,"source":"coinbase"},"btc":{"symbol":"BTC","price":81255.52,"confidence":null,"publish_time":null,"source":"coinbase"}},"funding":{"sol":{"symbol":"SOL","funding_rate_hourly":0.0000061104,"funding_rate_8h_equiv":0.00004888,"funding_rate_pct_hourly":0.000611,"mark_price":108.68,"open_interest":5571356.6,"source":"hyperliquid"},"btc":{"symbol":"BTC","funding_rate_hourly":0.0000057443,"funding_rate_8h_equiv":0.00004595,"funding_rate_pct_hourly":0.000574,"mark_price":81231,"open_interest":40268.2770399999,"source":"hyperliquid"}},"fear_greed":{"value":64,"classification":"Greed","timestamp":1791417600,"source":"alternative.me"},"positioning":{"source":"bybit_v5_public","period":"1h","sol":{"long_short_ratio":{"long_pct":73.49,"short_pct":26.51,"long_pct_prev_hour":73.19,"ts":1791475200000},"open_interest":{"base":6326412.6,"usd":692973021,"change_1h_pct":-4.32,"change_24h_pct":5.55}},"btc":{"long_short_ratio":{"long_pct":63.17,"short_pct":36.83,"long_pct_prev_hour":63.2,"ts":1791475200000},"open_interest":{"base":58495.439,"usd":4810687095,"change_1h_pct":-0.38,"change_24h_pct":0.4}}},"liquidations":{"source":"multi_exchange_colle…","exchanges":["bybit","okx","binance"],"collecting_since":1783528952067,"sol":{"1h":{"events":474,"total_usd":6674773.67,"longs_liquidated_usd":6443900.69,"shorts_liquidated_usd":230872.98,"biggest_print_usd":565140.68,"by_exchange":{"bybit":{"events":246,"total_usd":924074.2,"longs_liquidated_usd":857833.57,"shorts_liquidated_usd":66240.63,"biggest_print_usd":67330.17},"okx":{"events":85,"total_usd":611411.23,"longs_liquidated_usd":583604.52,"shorts_liquidated_usd":27806.71,"biggest_print_usd":132626.52},"binance":{"events":143,"total_usd":5139288.24,"longs_liquidated_usd":5002462.6,"shorts_liquidated_usd":136825.64,"biggest_print_usd":565140.68}}},"24h":{"events":3160,"total_usd":35593650,"longs_liquidated_usd":34649734.64,"shorts_liquidated_usd":943915.35,"biggest_print_usd":1858611.82,"by_exchange":{"okx":{"events":566,"total_usd":3740852.51,"longs_liquidated_usd":3458924.73,"shorts_liquidated_usd":281927.78,"biggest_print_usd":382358.02},"binance":{"events":911,"total_usd":24296622.41,"longs_liquidated_usd":23797984.96,"shorts_liquidated_usd":498637.46,"biggest_print_usd":1858611.82},"bybit":{"events":1683,"total_usd":7556175.07,"longs_liquidated_usd":7392824.96,"shorts_liquidated_usd":163350.11,"biggest_print_usd":99431.77}}}}}},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch trade context: crypto trading context in one call","tags":["agentfeed"],"x-price-usd":0.01,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}}}},"/api/token-risk/{mint}":{"get":{"description":"Solana token rug check / risk signals for any SPL mint: mint and freeze authority status (revoked is safer), top-1 and top-10 holder concentration, supply, price, and a list of risk flags. Not a honeypot or LP-lock checker.","operationId":"get_token_risk","parameters":[{"description":"SPL token mint address (base58)","in":"path","name":"mint","required":true,"schema":{"type":"string","description":"SPL token mint address (base58)"}}],"x-example-path":{"mint":"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"mint":{"type":"string"},"name":{"type":"string"},"symbol":{"type":"string"},"supply":{"type":"number"},"price_usd":{"type":"number"},"authorities":{"type":"object"},"concentration":{"type":"object"},"risk_flags":{"type":"array"},"risk_flag_count":{"type":"number"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_token_risk","data":{"mint":"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263","name":"Bonk","symbol":"Bonk","supply":87994383847609.11,"price_usd":0.0000036881577,"authorities":{"mint_authority":null,"freeze_authority":null},"concentration":{"top1_pct":8.83,"top10_pct":38.33,"note":"token accounts, not unique owners — pools/exchanges may be included","top_accounts":[{"address":"5hpfC9VBxVcoW9opCnM2PqR6YWRLBzrBpabJTZnwwNiw","amount":7770515063166.431},{"address":"2vPvEovB1gw8bAUqasThEv6YMAdJ77AU3RxiUNqknEiw","amount":5772593511837.953},{"address":"6LozHQrLbEPeJGWKpN6wnnk76GhD4bGAVSoTBE5xXpsf","amount":3111312968005.8394}]},"risk_flags":[],"risk_flag_count":0},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: path param mint = not-a-valid-address.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_token_risk","error":"invalid mint address"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch token risk: solana token rug check / risk signals for","tags":["agentfeed"],"x-price-usd":0.01,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}}}},"/api/cascade-forecast":{"get":{"description":"Liquidation forecast, FORWARD-LOOKING and not a description of what already happened. Returns the probability that a symbol will liquidate more in the NEXT 15 minutes than its own 90th-percentile 15-minute window. Calibrated on a 28-day tape of 1.4M Bybit liquidations across 799 symbols, which cannot be reconstructed by anyone starting today because no exchange publishes liquidation history. Every answer carries the exact question, the threshold in USD, the window it read, the number of historical occurrences behind the number, and instructions for settling it yourself from the public feed. When a state has too little history the tool DECLINES rather than guessing, and says why. The settled record is free at /api/forecast-record.","operationId":"get_cascade_forecast","parameters":[{"in":"query","name":"symbol","required":false,"schema":{"type":"string","description":"SOL, BTC, ETH or any USDT perp e.g. SXTUSDT (default SOL)"}},{"in":"query","name":"symbols","required":false,"schema":{"type":"string","description":"comma separated for a batch, max 20, e.g. SOL,BTC,ETH"}}],"x-example-query":{"symbol":"SOL"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"model":{"type":"object"},"answers":{"type":"array"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_cascade_forecast","data":{"model":{"fittedAt":"2026-09-25T12:00:25.086Z","scheme":"fine","trainedOnPairs":2829617,"symbolsCovered":412},"answers":[{"question":{"id":"liquidation-window-exceedance-v1","ask":"Will this symbol's liquidation volume in the NEXT window exc…","windowSeconds":900,"thresholdRule":"the 90th percentile of the symbol's own 15-minute liquidatio…","answer":"a probability between 0 and 1, or a decline","settlement":"sum liquidation USD for the symbol over the next window from…","settleable_by":"anyone subscribed to the same public liquidation stream","declines":"a decline is returned when the current state has too little…"},"symbol":"SOLUSDT","asOf":"2026-09-25T16:52:59.680Z","thresholdUsd":162338.272406,"thresholdSource":"the threshold this model was trained against","windowStart":"2026-09-25T16:30:00.000Z","windowEnd":"2026-09-25T16:45:00.000Z","observed":{"usd":122324.44509999998,"events":34,"buyUsd":9681.6,"sellUsd":112642.84509999998},"state":"3|1|3|1","support":1059,"symbolSupport":26,"evidence":"measured","p":0.355076956950054,"reason":null,"basis":"26 occurrences of this state for this symbol, shrunk toward…"}]},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch cascade forecast: liquidation forecast, forward-looking","tags":["agentfeed"],"x-price-usd":0.02,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.02"}}}},"/api/liq-history":{"get":{"description":"Liquidation history, time-bucketed: total, long and short USD, prints and biggest print per bucket, for any USDT perp or the whole recorded universe, up to 7 days back. Bybit is the only complete liq tape in crypto and no exchange publishes history of it.","operationId":"get_liq_history","parameters":[{"in":"query","name":"symbol","required":false,"schema":{"type":"string","description":"USDT perp symbol e.g. SOLUSDT, BTCUSDT (default SOLUSDT)"}},{"in":"query","name":"scope","required":false,"schema":{"type":"string","enum":["symbol","all"],"description":"all = whole universe"}},{"in":"query","name":"hours","required":false,"schema":{"type":"number","description":"lookback 1-168, default 24"}},{"in":"query","name":"bucket_min","required":false,"schema":{"type":"number","description":"bucket minutes 5-1440, default 60"}}],"x-example-query":{"symbol":"SOLUSDT"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"scope":{"type":"string"},"hours":{"type":"number"},"bucket_min":{"type":"number"},"total_usd":{"type":"number"},"longs_usd":{"type":"number"},"shorts_usd":{"type":"number"},"buckets":{"type":"array"},"source":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_liq_history","data":{"scope":"SOLUSDT","hours":24,"bucket_min":60,"total_usd":16129695,"longs_usd":3920646,"shorts_usd":12209051,"buckets":[{"bucket":1790265600000,"prints":2,"usd_total":2317,"longs_usd":2317,"shorts_usd":0,"biggest_print":2231},{"bucket":1790269200000,"prints":18,"usd_total":50932,"longs_usd":50932,"shorts_usd":0,"biggest_print":33022},{"bucket":1790272800000,"prints":41,"usd_total":127842,"longs_usd":90426,"shorts_usd":37416,"biggest_print":48865}],"source":"agentfeed_liq_tape (bybit complete + okx + binance)"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: optional query param symbol = not-a-symbol.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_liq_history","error":"invalid symbol: not-a-symbol"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch liq history: liquidation history, time-bucketed","tags":["agentfeed"],"x-price-usd":0.05,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.05"}}}},"/api/liq-heatmap":{"get":{"description":"Liquidation heatmap by PRICE LEVEL: where leverage actually got flushed in the last N hours — USD, prints and long/short split per price zone, with the hottest zone flagged. Built from real liquidation prints, not entry-price estimates. BTC, ETH, SOL, HYPE or any other USDT perp on our Bybit, OKX and Binance tape.","operationId":"get_liq_heatmap","parameters":[{"in":"query","name":"symbol","required":false,"schema":{"type":"string","description":"BTC, ETH, SOL, HYPE or any USDT perp e.g. BTCUSDT (default SOLUSDT)"}},{"in":"query","name":"hours","required":false,"schema":{"type":"number","description":"lookback 1-168, default 24"}},{"in":"query","name":"buckets","required":false,"schema":{"type":"number","description":"price buckets 5-50, default 20"}}],"x-example-query":{"symbol":"SOLUSDT"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"symbol":{"type":"string"},"hours":{"type":"number"},"price_range":{"type":"array"},"levels":{"type":"array"},"hottest_zone":{"type":"object"},"note":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_liq_heatmap","data":{"symbol":"SOLUSDT","hours":24,"price_range":[115.24,122.79],"levels":[{"price_low":115.24,"price_high":115.6175,"usd_total":25212,"prints":14,"longs_usd":25212,"shorts_usd":0},{"price_low":115.6175,"price_high":115.995,"usd_total":214279,"prints":32,"longs_usd":214279,"shorts_usd":0},{"price_low":115.995,"price_high":116.3725,"usd_total":346785,"prints":68,"longs_usd":342110,"shorts_usd":4675}],"hottest_zone":{"price_low":118.6375,"price_high":119.015,"usd_total":2268785,"prints":143,"longs_usd":1239307,"shorts_usd":1029478},"note":"historical flush zones from our tape — where leverage DIED, not an entry-price liq-level estimate"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: optional query param symbol = not-a-symbol.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_liq_heatmap","error":"invalid symbol: not-a-symbol"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch liq heatmap: liquidation heatmap by price level","tags":["agentfeed"],"x-price-usd":0.02,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.02"}}}},"/api/cascade-history":{"get":{"description":"Liquidation cascade history: past clustered same-side flush events reconstructed from our own tape, with start and end, prints, USD total and peak print, up to 72h back. /api/cascade tells you what is happening NOW; this tells you what already happened.","operationId":"get_cascade_history","parameters":[{"in":"query","name":"symbol","required":false,"schema":{"type":"string","description":"USDT perp symbol e.g. SOLUSDT, BTCUSDT (default SOLUSDT)"}},{"in":"query","name":"scope","required":false,"schema":{"type":"string","enum":["symbol","all"],"description":"symbol = just this symbol (default), all = every recorded USDT perp"}},{"in":"query","name":"hours","required":false,"schema":{"type":"number","description":"1-72, default 24"}},{"in":"query","name":"min_usd","required":false,"schema":{"type":"number","description":"min event USD, default 100k (250k for scope=all)"}},{"in":"query","name":"gap_s","required":false,"schema":{"type":"number","description":"max gap seconds within an event, default 60"}}],"x-example-query":{"symbol":"SOLUSDT"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"scope":{"type":"string"},"hours":{"type":"number"},"min_usd":{"type":"number"},"gap_s":{"type":"number"},"cascade_count":{"type":"number"},"cascades":{"type":"array"},"source":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_cascade_history","data":{"scope":"SOLUSDT","hours":24,"min_usd":100000,"gap_s":60,"cascade_count":25,"cascades":[{"symbol":"SOLUSDT","side":"shorts_liquidated","start_ts":1790334274245,"end_ts":1790334518184,"prints":371,"usd_total":6276081,"peak_print":915882,"duration_s":244},{"symbol":"SOLUSDT","side":"longs_liquidated","start_ts":1790343996230,"end_ts":1790344043184,"prints":41,"usd_total":907462,"peak_print":368536,"duration_s":47},{"symbol":"SOLUSDT","side":"shorts_liquidated","start_ts":1790328390221,"end_ts":1790328727166,"prints":106,"usd_total":744117,"peak_print":88856,"duration_s":337}],"source":"agentfeed_liq_tape"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: optional query param symbol = not-a-symbol.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_cascade_history","error":"invalid symbol: not-a-symbol"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch cascade history: liquidation cascade history","tags":["agentfeed"],"x-price-usd":0.03,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.03"}}}},"/api/squeeze-score":{"get":{"description":"Short squeeze score and long flush score, 0-100, for any USDT perp. Composite of the funding rate, long/short crowding, 24h open-interest build, and liquidation skew from our own tape. One number for whether a trade is crowded and about to hurt someone.","operationId":"get_squeeze_score","parameters":[{"in":"query","name":"symbol","required":false,"schema":{"type":"string","description":"USDT perp symbol e.g. SOLUSDT, BTCUSDT (default SOLUSDT)"}}],"x-example-query":{"symbol":"SOLUSDT"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"symbol":{"type":"string"},"short_squeeze_score":{"type":"number"},"long_flush_score":{"type":"number"},"inputs":{"type":"object"},"read":{"type":"string"},"note":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_squeeze_score","data":{"symbol":"SOLUSDT","short_squeeze_score":0,"long_flush_score":7,"inputs":{"funding_rate_8h":0.00008784,"funding_rate_raw":0.00008784,"funding_interval_hours":8,"oi_change_24h_pct":-4.74,"long_account_pct":68.82,"liq_24h":{"longs_usd":10578855,"shorts_usd":1792016}},"read":"no extreme setup","note":"heuristic composite 0-100 (funding 35 / crowding 25 / OI 20 / liq-skew 20). Context, not financial advice."},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: optional query param symbol = not-a-symbol.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_squeeze_score","error":"invalid symbol: not-a-symbol"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch squeeze score: short squeeze score and long flush score","tags":["agentfeed"],"x-price-usd":0.1,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.1"}}}},"/api/venue-liq-share":{"get":{"description":"Liquidations by exchange: per-venue liquidation share across Bybit, OKX and Binance with long/short split and biggest print, for any symbol or the whole recorded universe. Which venue is flushing whom.","operationId":"get_venue_liq_share","parameters":[{"in":"query","name":"symbol","required":false,"schema":{"type":"string","description":"USDT perp symbol e.g. SOLUSDT, BTCUSDT (default all)"}},{"in":"query","name":"hours","required":false,"schema":{"type":"number","description":"1-168, default 24"}}],"x-example-query":{"symbol":"SOLUSDT"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"scope":{"type":"string"},"hours":{"type":"number"},"total_usd":{"type":"number"},"venues":{"type":"array"},"note":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_venue_liq_share","data":{"scope":"SOLUSDT","hours":24,"total_usd":16129697,"venues":[{"exchange":"binance","prints":705,"usd_total":9445112,"longs_usd":2343783,"shorts_usd":7101329,"biggest_print":915882,"share_pct":58.6},{"exchange":"okx","prints":466,"usd_total":3731301,"longs_usd":940987,"shorts_usd":2790314,"biggest_print":585023,"share_pct":23.1},{"exchange":"bybit","prints":637,"usd_total":2953284,"longs_usd":635876,"shorts_usd":2317409,"biggest_print":100574,"share_pct":18.3}],"note":"bybit tape is complete; okx/binance streams are throttled by the venues — shares reflect visible tape"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: optional query param symbol = not-a-symbol.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_venue_liq_share","error":"invalid symbol: not-a-symbol"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch venue liq share: liquidations by exchange","tags":["agentfeed"],"x-price-usd":0.02,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.02"}}}},"/api/funding-cross":{"get":{"description":"Funding rate for ANY USDT perp across Bybit, OKX and Hyperliquid in one call, with the cross-venue spread and a crowding read.","operationId":"get_funding_cross","parameters":[{"in":"query","name":"symbol","required":false,"schema":{"type":"string","description":"USDT perp symbol e.g. SOLUSDT, BTCUSDT (default SOLUSDT)"}}],"x-example-query":{"symbol":"SOLUSDT"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"symbol":{"type":"string"},"venues":{"type":"object"},"spread_8h":{"type":"number"},"crowding":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_funding_cross","data":{"symbol":"SOLUSDT","venues":{"bybit":{"funding_rate_8h":0.00008784,"funding_rate_raw":0.00008784,"funding_interval_hours":8,"next_funding_time":1790611200000,"mark_price":118.209},"okx":{"funding_rate_8h":0.0000384889726373,"funding_rate_raw":0.0000384889726373,"funding_interval_hours":8,"next_funding_time":1790611200000,"mark_price":118.19},"hyperliquid":{"funding_rate_1h":0.0000125,"funding_rate_8h_equiv":0.0001,"funding_rate_raw":0.0000125,"funding_interval_hours":1,"mark_price":118.31}},"spread_8h":0.00006151,"crowding":"longs_pay_everywhere"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: optional query param symbol = not-a-symbol.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_funding_cross","error":"invalid symbol: not-a-symbol"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch funding cross: funding rate for any usdt perp across","tags":["agentfeed"],"x-price-usd":0.01,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}}}},"/api/funding-extremes":{"get":{"description":"Funding rate extremes across every Bybit USDT perp: the most positive and most negative funding with annualized %, 24h price move and open interest. The most crowded trades in the market — crowded shorts are squeeze candidates.","operationId":"get_funding_extremes","parameters":[{"in":"query","name":"limit","required":false,"schema":{"type":"number","description":"top N each side, 1-25, default 10"}},{"in":"query","name":"min_turnover_usd","required":false,"schema":{"type":"number","description":"liquidity floor, default 1M"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"source":{"type":"string"},"universe_size":{"type":"number"},"min_turnover_usd":{"type":"number"},"most_positive":{"type":"array"},"most_negative":{"type":"array"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_funding_extremes","data":{"source":"bybit_linear_universe","universe_size":299,"min_turnover_usd":1000000,"most_positive":[{"symbol":"ARKUSDT","funding_rate_8h":0.00158998,"funding_rate_raw":0.00079499,"funding_interval_hours":4,"annualized_pct":174.1,"price_24h_pct":-10.18,"oi_usd":2773871},{"symbol":"LONGXIAUSDT","funding_rate_8h":0.00149958,"funding_rate_raw":0.00074979,"funding_interval_hours":4,"annualized_pct":164.2,"price_24h_pct":-32.3,"oi_usd":1449504}],"most_negative":[{"symbol":"SAGAUSDT","funding_rate_8h":-0.0053745,"funding_rate_raw":-0.00268725,"funding_interval_hours":4,"annualized_pct":-588.51,"price_24h_pct":-4.43,"oi_usd":3283608},{"symbol":"BLASTUSDT","funding_rate_8h":-0.00224282,"funding_rate_raw":-0.00224282,"funding_interval_hours":8,"annualized_pct":-245.59,"price_24h_pct":-12.27,"oi_usd":1149802}]},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch funding extremes: funding rate extremes across every","tags":["agentfeed"],"x-price-usd":0.02,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.02"}}}},"/api/funding-radar":{"get":{"description":"Funding rates radar across Bybit, OKX and Hyperliquid. It tracks every USDT perp listed on at least two of them from $5M combined open interest and, by default, shows the ones with $10M and up; min_oi_usd changes that. Per symbol: the current funding per venue at its 8h equivalent, each venue's 30-day z-score against its own settled history, the cross-venue spread, and a flag on any |z| of 2 or more, most extreme first. Precomputed every 5 minutes, with as_of and stale.","operationId":"get_funding_radar","parameters":[{"in":"query","name":"top","required":false,"schema":{"type":"number","description":"symbols returned, most extreme first, 1-100, default 20"}},{"in":"query","name":"min_oi_usd","required":false,"schema":{"type":"number","description":"minimum combined open interest in USD across the venues: default 10000000 ($10M); the radar tracks pairs from 5000000 ($5M), and lower values return that floor"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"as_of":{"type":"string"},"age_s":{"type":"number"},"stale":{"type":"boolean"},"venues":{"type":"array"},"window_target_days":{"type":"number"},"z_flag_abs":{"type":"number"},"min_oi_usd":{"type":"number"},"universe_size":{"type":"number"},"matched":{"type":"number"},"returned":{"type":"number"},"coverage":{"type":"object"},"symbols":{"type":"array"},"method":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_funding_radar","data":{"as_of":"2026-10-08T16:20:02.…","age_s":233,"stale":false,"venues":["bybit","okx","hyperliquid"],"window_target_days":30,"z_flag_abs":2,"min_oi_usd":10000000,"universe_size":179,"matched":119,"returned":20,"coverage":{"series_total":459,"series_with_history":459,"series_full_window":458},"symbols":[{"symbol":"VVVUSDT","oi_usd":{"bybit":29725355,"okx":3966527,"hyperliquid":72525719,"total":106217601},"venues":{"bybit":{"funding_rate_8h":0.00318944,"funding_rate_raw":0.00159472,"funding_interval_hours":4,"next_funding_time":1791489600000,"z_30d":8.66,"mean_8h_30d":0.0001165,"std_8h_30d":0.00035473,"samples":180,"window_days":29.8},"okx":{"funding_rate_8h":0.00156427,"funding_rate_raw":0.0007821356052997,"funding_interval_hours":4,"next_funding_time":1791489600000,"z_30d":12.15,"mean_8h_30d":0.00011762,"std_8h_30d":0.00011909,"samples":180,"window_days":29.8},"hyperliquid":{"funding_rate_8h":0.00049902,"funding_rate_raw":0.0000623772,"funding_interval_hours":1,"z_30d":1.19,"mean_8h_30d":0.00020534,"std_8h_30d":0.00024768,"samples":720,"window_days":30}},"spread_8h":0.00269042,"spread_high_venue":"bybit","spread_low_venue":"hyperliquid","max_abs_z":12.15,"extreme_venue":"okx","flag":true,"flagged_venues":["bybit","okx"]}],"method":"funding_rate_8h is e…"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch funding radar: funding rates radar across bybit, okx and","tags":["agentfeed"],"x-price-usd":0.02,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.02"}}}},"/api/options-summary":{"get":{"description":"Implied volatility and options skew for BTC, ETH, SOL, XRP and HYPE from Deribit: DVOL (or our 30-day ATM implied vol where Deribit publishes none) with its 24h change, the ATM IV term structure, 25-delta risk reversal and butterfly per expiry, put/call ratio by open interest and 24h volume, options open interest in USD, max pain for the next three expiries and the top strikes. Precomputed every 5 minutes; a snapshot older than 15 minutes answers 503 and is never charged.","operationId":"get_options_summary","parameters":[{"in":"query","name":"currency","required":false,"schema":{"type":"string","description":"BTC (default), ETH, SOL, XRP or HYPE"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"underlying":{"type":"string"},"venue":{"type":"string"},"settlement":{"type":"string"},"spot":{"type":"number"},"spot_note":{"type":"string"},"as_of":{"type":"string"},"age_s":{"type":"number"},"volatility_index":{"type":"object"},"term_structure":{"type":"array"},"iv30_atm":{"type":"number"},"put_call_ratio":{"type":"object"},"open_interest":{"type":"object"},"max_pain":{"type":"array"},"top_strikes_by_oi":{"type":"array"},"instruments":{"type":"number"},"gex_headline":{"type":"object"},"method":{"type":"string"},"source":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_options_summary","data":{"underlying":"BTC","venue":"deribit","settlement":"inverse BTC-settled…","spot":80911.55,"spot_note":"Deribit index btc_us…","as_of":"2026-10-08T18:17:04.…","age_s":44,"volatility_index":{"kind":"deribit_dvol","value":38.34,"as_of":"2026-10-08T18:17:04.…","change_24h":1.89,"compared_with":"2026-10-07T18:00:00.…","source":"Deribit DVOL: live i…"},"term_structure":[{"expiry":"2026-10-09T08:00:00.…","days":0.57,"forward":80935.68,"atm_iv":39.68,"rr25":-4.48,"bf25":1.21,"iv25_call":38.65,"iv25_put":43.13}],"iv30_atm":36.02,"put_call_ratio":{"by_open_interest":0.603,"by_volume_24h":1.432},"open_interest":{"calls":241306.05,"puts":145467.79,"total":386773.84,"total_usd":31294470894,"unit":"BTC"},"max_pain":[{"expiry":"2026-10-09T08:00:00.…","max_pain":84000,"intrinsic_paid_at_max_pain_usd":6490635}],"top_strikes_by_oi":[{"strike":95000,"call_oi":30425.48,"put_oi":396.6,"total_oi":30822.08,"total_oi_usd":2493862267}],"instruments":1612,"gex_headline":{"net_gex_usd_per_1pct":23889895,"flip_level":80172.378581,"detail":"/api/options-gex"},"method":"IV values are in vol…","source":"Deribit public API (…"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch options summary: implied volatility and options skew for","tags":["agentfeed"],"x-price-usd":0.02,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.02"}}}},"/api/options-gex":{"get":{"description":"Gamma exposure (GEX) for BTC, ETH, SOL, XRP and HYPE options on Deribit: gamma by strike in USD per 1% move, net GEX under a dealer-sign convention stated in every response, the gamma flip level and the call and put walls. Black-Scholes gamma on Deribit mark implied volatility across every live expiry. Precomputed every 5 minutes; a snapshot older than 15 minutes answers 503 and is never charged.","operationId":"get_options_gex","parameters":[{"in":"query","name":"currency","required":false,"schema":{"type":"string","description":"BTC (default), ETH, SOL, XRP or HYPE"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"underlying":{"type":"string"},"venue":{"type":"string"},"spot":{"type":"number"},"as_of":{"type":"string"},"age_s":{"type":"number"},"convention":{"type":"string"},"units":{"type":"string"},"net_gex_usd_per_1pct":{"type":"number"},"regime":{"type":"string"},"flip_level":{"type":"number"},"flip_note":{"type":"string"},"call_wall":{"type":"object"},"put_wall":{"type":"object"},"by_strike":{"type":"array"},"by_strike_band":{"type":"string"},"source":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_options_gex","data":{"underlying":"BTC","venue":"deribit","spot":80911.55,"as_of":"2026-10-08T18:17:04.330Z","age_s":44,"convention":"dealer-sign convention: dealers are assumed long the calls and short the puts that customers hold the other side of, so call gamma counts po…","units":"USD change in dealer delta for a 1% move in the underlying (gamma x open interest x spot^2 x 0.01), summed over every live expiry","net_gex_usd_per_1pct":23889895,"regime":"positive gamma (dealers dampen moves under the convention)","flip_level":80172.378581,"flip_note":"net GEX recomputed across spot ±20% with each forward shifted in proportion and IV held; null means no sign change in that range","call_wall":{"strike":90000,"call_gex_usd":45178418},"put_wall":{"strike":80000,"put_gex_usd":-54968707},"by_strike":[{"strike":57000,"call_gex_usd":15,"put_gex_usd":-31500,"net_gex_usd":-31485},{"strike":58000,"call_gex_usd":23574,"put_gex_usd":-960937,"net_gex_usd":-937363}],"by_strike_band":"strikes within ±30% of spot","source":"Deribit public API (get_book_summary_by_currency, get_instruments, get_volatility_index_data)"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch options gex: gamma exposure","tags":["agentfeed"],"x-price-usd":0.03,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.03"}}}},"/api/market-state":{"get":{"description":"Market state for BTC, ETH, SOL or HYPE in one call: spot and perp basis, realized vol 7d and 30d, implied vol (DVOL or 30-day ATM) and the IV minus RV spread, funding per venue with 30-day z-scores, open interest and its 24h change, long/short, liquidations 1h and 24h by side, Fear and Greed, the next FOMC or CPI release, and flags with stated thresholds. Every part carries its source and as-of time; a part we do not hold is null with a reason.","operationId":"get_market_state","parameters":[{"in":"query","name":"symbol","required":false,"schema":{"type":"string","description":"BTC (default), ETH, SOL or HYPE"}}],"x-example-query":{"symbol":"SOL"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"symbol":{"type":"string"},"as_of":{"type":"string"},"spot":{"type":"object"},"perp":{"type":"object"},"realized_vol":{"type":"object"},"implied_vol":{"type":"object"},"iv_minus_rv_30d_vol_pts":{},"funding":{"type":"object"},"open_interest":{"type":"object"},"long_short":{"type":"object"},"liquidations":{"type":"object"},"fear_greed":{"type":"object"},"next_macro_event":{"type":"object"},"flags":{"type":"array"},"flag_rules":{"type":"object"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_market_state","data":{"symbol":"SOL","as_of":"2026-10-08T18:34:41.…","spot":{"value":107.935,"source":"coinbase","as_of":"2026-10-08T18:34:41.…"},"perp":{"mark_price":107.919,"basis_pct":-0.0565,"basis_state":"backwardation (perp…","source":"Bybit perp mark vs s…","as_of":"2026-10-08T18:34:41.…"},"realized_vol":{"rv_7d_ann_pct":56.31,"rv_30d_ann_pct":65.7,"today_range_pct":10.3,"source":"bybit_daily_klines","as_of":"2026-10-08T18:34:41.…"},"implied_vol":{"value":null,"reason":"options snapshot is…"},"iv_minus_rv_30d_vol_pts":null,"funding":{"venues":{"bybit":{"funding_rate_8h":-0.00007604,"z_30d":-1.45,"samples":90},"okx":{"funding_rate_8h":-0.00002192,"z_30d":-0.95,"samples":90},"hyperliquid":{"funding_rate_8h":0.00007162,"z_30d":0.06,"samples":720}},"spread_8h":0.00014766,"max_abs_z":1.45,"source":"AgentFeed funding ra…","as_of":"2026-10-08T18:29:49.…","stale":false},"open_interest":{"bybit_usd":679161160,"bybit_change_24h_pct":6.62,"okx_usd":337449463,"mark_price":107.919,"source":"Bybit + OKX open int…","as_of":"2026-10-08T18:34:41.…"},"long_short":{"long_pct":73.8,"short_pct":26.2,"long_pct_24h_ago":71.66,"period":"1h","source":"bybit_v5_public","as_of":"2026-10-08T18:00:00.…"},"liquidations":{"last_1h":{"longs_usd":262005,"shorts_usd":452188,"total_usd":714193},"last_24h":{"longs_usd":44282766,"shorts_usd":1429982,"total_usd":45712746,"window_note":"clock-hour buckets t…"},"hourly_median_usd":34191,"median_window_h":167,"side_note":"longs_usd = longs li…","source":"agentfeed_liq_tape (…","as_of":"2026-10-08T18:30:00.…"},"fear_greed":{"value":64,"classification":"Greed","source":"alternative.me","as_of":"2026-10-08T00:00:00.…"},"next_macro_event":{"type":"CPI","title":"Consumer Price Index","reference_period":"September 2026","date_new_york":"2026-10-14","time_new_york":"08:30","utc":"2026-10-14T12:30:00.…","source_url":"https://www.bls.gov/…","verified_at":"2026-10-08T18:11:43.…","hours_to_go":137.9},"flags":["liq_spike_1h"],"flag_rules":{"funding_extreme":"|z_30d| >= 2 on any…","liq_spike_1h":"last 60 minutes of l…","event_within_24h":"the next FOMC decisi…","iv_rich":"30-day implied vol m…","iv_cheap":"30-day implied vol m…"}},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: optional query param symbol = not-a-symbol.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_market_state","error":"market-state covers BTC, ETH, SOL, HYPE; got NOT-A-SYMBOL"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch market state: market state for btc, eth, sol or hype in","tags":["agentfeed"],"x-price-usd":0.02,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.02"}}}},"/api/macro-calendar":{"get":{"description":"FOMC, CPI, NFP and PCE calendar for traders: the next Fed rate decisions and the CPI, nonfarm payrolls and PCE release dates with UTC times converted from New York time (DST-aware), each with its official Fed, BLS or BEA source URL and the time we verified it. Read daily from the agencies' own pages and never entered by hand; data verified more than 35 days ago answers 503 and is never charged.","operationId":"get_macro_calendar","parameters":[{"in":"query","name":"type","required":false,"schema":{"type":"string","description":"comma list of FOMC, CPI, NFP, PCE (default all)"}},{"in":"query","name":"days","required":false,"schema":{"type":"number","description":"days ahead, 1-400, default 90"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"as_of":{"type":"string"},"verified_at":{"type":"string"},"window_days":{"type":"number"},"next":{"type":"object"},"events":{"type":"array"},"unavailable":{"type":"array"},"method":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_macro_calendar","data":{"as_of":"2026-10-08T18:17:55.…","verified_at":"2026-10-08T18:11:43.…","window_days":90,"next":{"FOMC":{"type":"FOMC","title":"FOMC rate decision (…","reference_period":null,"date_new_york":"2026-10-28","time_new_york":"14:00","utc":"2026-10-28T18:00:00.…","source_url":"https://www.federalr…","verified_at":"2026-10-08T18:11:43.…","press_conference":true},"CPI":{"type":"CPI","title":"Consumer Price Index","reference_period":"September 2026","date_new_york":"2026-10-14","time_new_york":"08:30","utc":"2026-10-14T12:30:00.…","source_url":"https://www.bls.gov/…","verified_at":"2026-10-08T18:11:43.…"},"NFP":{"type":"NFP","title":"The Employment Situa…","reference_period":"October 2026","date_new_york":"2026-11-06","time_new_york":"08:30","utc":"2026-11-06T13:30:00.…","source_url":"https://www.bls.gov/…","verified_at":"2026-10-08T18:11:43.…"},"PCE":{"type":"PCE","title":"PCE price index (Per…","reference_period":"September 2026","date_new_york":"2026-11-04","time_new_york":"08:30","utc":"2026-11-04T13:30:00.…","source_url":"https://www.bea.gov/…","verified_at":"2026-10-08T18:11:43.…"}},"events":[{"type":"CPI","title":"Consumer Price Index","reference_period":"September 2026","date_new_york":"2026-10-14","time_new_york":"08:30","utc":"2026-10-14T12:30:00.…","source_url":"https://www.bls.gov/…","verified_at":"2026-10-08T18:11:43.…"}],"unavailable":[],"method":"Dates and times are…"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch macro calendar: fomc, cpi, nfp and pce calendar for","tags":["agentfeed"],"x-price-usd":0.005,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}}}},"/api/tradfi-radar":{"get":{"description":"Stock perps, S&P 500, Nasdaq, gold and oil perps ranked by funding rate: every stock, index, commodity and FX perp on Hyperliquid HIP-3 dexes (trade[XYZ], Paragon, Markets by Kinetiq, Entropy), Bybit, Binance and OKX, with funding at its 8h equivalent, a 30-day funding z-score on HIP-3, open interest and its 24h change, mark minus oracle basis and 24h volume. Filter by asset class or venue. Precomputed every 5 minutes; stale data answers 503.","operationId":"get_tradfi_radar","parameters":[{"in":"query","name":"class","required":false,"schema":{"type":"string","description":"comma list of stock, index, commodity, fx, rates, pre_ipo, crypto_index, other (default all)"}},{"in":"query","name":"venue","required":false,"schema":{"type":"string","description":"comma list of hyperliquid, bybit, binance, okx (default all)"}},{"in":"query","name":"top","required":false,"schema":{"type":"number","description":"markets returned, 1-200, default 25"}},{"in":"query","name":"min_oi_usd","required":false,"schema":{"type":"number","description":"minimum open interest in USD; venues that publish no OI are then left out (default 0)"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"as_of":{"type":"string"},"age_s":{"type":"number"},"venues":{"type":"array"},"classes":{"type":"object"},"matched":{"type":"number"},"returned":{"type":"number"},"markets":{"type":"array"},"dexes":{"type":"array"},"method":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_tradfi_radar","data":{"as_of":"2026-10-08T18:29:49.327Z","age_s":293,"venues":["hyperliquid (HIP-3 dexes)","bybit","binance","okx"],"classes":{"index":80,"commodity":30,"stock":679,"pre_ipo":11,"fx":7,"other":3,"rates":4,"crypto_index":4},"matched":818,"returned":25,"markets":[{"venue":"hyperliquid","market":"xyz:SOFTBANK","dex":"xyz","ticker":"SOFTBANK","asset_class":"stock","underlying":"SoftBank Group, TSE 9984","class_evidence":"https://docs.trade.xyz/perpetuals/specifications-and-schedul…","funding_rate_1h":-0.0013843854,"funding_rate_8h":-0.01107508,"funding_interval_hours":1,"z_30d":null,"z_note":"only 0 settled rates in the window; 10 needed for a z-score","samples":0,"window_days":0,"oi_usd":1699252,"oi_change_24h_pct":null,"oi_change_note":"our OI samples for this market do not reach 24h back yet","mark":36.398,"oracle":37.329,"basis_bps":-249.4,"volume_24h_usd":834473}],"dexes":[{"dex":"xyz","full_name":"XYZ","deployer":"0x88806a71d74ad0a510b350545c9ae490912f0888","oracle_updater":null,"live_markets":114}],"method":"Ranked by |funding| at its 8h equivalent (each venue's own i…"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch tradfi radar: stock perps, s&p 500, nasdaq, gold and oil","tags":["agentfeed"],"x-price-usd":0.02,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.02"}}}},"/api/equity-24h":{"get":{"description":"Weekend price for US stocks: an indicative 24/7 price for a stock or index (TSLA, NVDA, S&P 500, Nasdaq) from stock perps on Hyperliquid, Bybit, Binance and OKX and our tokenized stocks DEX price, with the last regular-session price, its time and source, the implied gap in %, each source's liquidity and the session (open, pre, after, overnight, weekend). Indicative, never an exchange quote; 503 when no source has liquidity.","operationId":"get_equity_24h","parameters":[{"in":"query","name":"symbol","required":true,"schema":{"type":"string","description":"US stock or index ticker as the venues list it, e.g. TSLA, NVDA, SP500, XYZ100"}}],"x-example-query":{"symbol":"TSLA"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"symbol":{"type":"string"},"indicative":{"type":"boolean"},"notice":{"type":"string"},"session":{"type":"string"},"indicative_price":{"type":"number"},"indicative_source":{"type":"string"},"last_regular_session":{"type":"object"},"implied_gap_pct":{"type":"number"},"sources":{"type":"array"},"as_of":{"type":"string"},"age_s":{"type":"number"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_equity_24h","data":{"symbol":"TSLA","indicative":true,"notice":"INDICATIVE price from 24/7 venues, not an exchange quote. US exchange holidays are not detected in the session label.","session":"open","indicative_price":371.74,"indicative_source":"Hyperliquid HIP-3 xyz:TSLA perp mark","last_regular_session":{"price":372,"as_of":"2026-10-08T18:33:49.000Z","source":"alpaca latest trade at our last regular-session sample (5-minute sampling; not the official closing auction print)"},"implied_gap_pct":-0.07,"sources":[{"source":"Hyperliquid HIP-3 xyz:TSLA perp mark","price":371.74,"oracle":371.68,"funding_rate_8h":0.00005,"liquidity":{"open_interest_usd":44835967,"volume_24h_usd":16182573},"as_of":"2026-10-08T18:29:49.327Z"},{"source":"bybit TSLAUSDT perp mark","price":372.17,"funding_rate_8h":0,"liquidity":{"open_interest_usd":9790475,"volume_24h_usd":5377971},"as_of":"2026-10-08T18:29:49.327Z"}],"as_of":"2026-10-08T18:29:49.327Z","age_s":293},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: required query param symbol omitted.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_equity_24h","error":"symbol required: a US stock or index ticker, e.g. TSLA, NVDA, SP500"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch equity 24h: weekend price for us stocks","tags":["agentfeed"],"x-price-usd":0.01,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}}}},"/api/open-interest":{"get":{"description":"Open interest for ANY USDT perp: Bybit OI in base units and in USD with 1h and 24h change, plus OKX open interest and the mark price. /api/positioning covers SOL and BTC only.","operationId":"get_open_interest","parameters":[{"in":"query","name":"symbol","required":false,"schema":{"type":"string","description":"USDT perp symbol e.g. SOLUSDT, BTCUSDT (default SOLUSDT)"}}],"x-example-query":{"symbol":"SOLUSDT"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"symbol":{"type":"string"},"bybit":{"type":"object"},"okx":{"type":"object"},"mark_price":{"type":"number"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_open_interest","data":{"symbol":"SOLUSDT","bybit":{"oi_base":6478924.1,"oi_usd":809609835,"change_1h_pct":-1.3,"change_24h_pct":9.93},"okx":{"oi_base":3054425.3599999994,"oi_usd":370837783},"mark_price":121.419},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: optional query param symbol = not-a-symbol.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_open_interest","error":"invalid symbol: not-a-symbol"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch open interest: open interest for any usdt perp","tags":["agentfeed"],"x-price-usd":0.01,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}}}},"/api/oi-spike-scan":{"get":{"description":"Open interest spikes across every Bybit USDT perp: abnormal OI jumps against an earlier snapshot of the same universe, at least 30 minutes old and with its exact age returned as baseline_min_ago, plus funding and 24h price context.","operationId":"get_oi_spike_scan","parameters":[{"in":"query","name":"limit","required":false,"schema":{"type":"number","description":"top N, 1-25, default 10"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"source":{"type":"string"},"baseline_min_ago":{"type":"number"},"spikes":{"type":"array"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_oi_spike_scan","data":{"source":"bybit_linear_universe","baseline_min_ago":30,"spikes":[{"symbol":"FLOCKUSDT","oi_usd":3173189,"oi_change_pct":16.48,"funding_rate_8h":0.0001,"funding_rate_raw":0.00005,"funding_interval_hours":4,"price_24h_pct":-9.9},{"symbol":"ALGOUSDT","oi_usd":14571114,"oi_change_pct":5.44,"funding_rate_8h":-0.00022272,"funding_rate_raw":-0.00022272,"funding_interval_hours":8,"price_24h_pct":8.95},{"symbol":"MARSCOINUSDT","oi_usd":12820971,"oi_change_pct":-5.37,"funding_rate_8h":0.0001,"funding_rate_raw":0.00005,"funding_interval_hours":4,"price_24h_pct":10.81}]},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch OI spike scan: open interest spikes across every bybit","tags":["agentfeed"],"x-price-usd":0.02,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.02"}}}},"/api/long-short":{"get":{"description":"Long/short ratio for ANY USDT perp: the retail long and short account percentages from Bybit with 1h and 24h trend. The crowding gauge.","operationId":"get_long_short","parameters":[{"in":"query","name":"symbol","required":false,"schema":{"type":"string","description":"USDT perp symbol e.g. SOLUSDT, BTCUSDT (default SOLUSDT)"}}],"x-example-query":{"symbol":"SOLUSDT"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"symbol":{"type":"string"},"source":{"type":"string"},"period":{"type":"string"},"long_pct":{"type":"number"},"short_pct":{"type":"number"},"long_pct_1h_ago":{"type":"number"},"long_pct_24h_ago":{"type":"number"},"ts":{"type":"number"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_long_short","data":{"symbol":"SOLUSDT","source":"bybit_v5_public","period":"1h","long_pct":68.86,"short_pct":31.14,"long_pct_1h_ago":68.74,"long_pct_24h_ago":70.08,"ts":1790352000000},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: optional query param symbol = not-a-symbol.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_long_short","error":"invalid symbol: not-a-symbol"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch long short: long/short ratio for any usdt perp","tags":["agentfeed"],"x-price-usd":0.01,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}}}},"/api/basis":{"get":{"description":"Perp-vs-spot basis for any USDT pair: the premium or discount in %, a contango or backwardation read, and the funding context that goes with it.","operationId":"get_basis","parameters":[{"in":"query","name":"symbol","required":false,"schema":{"type":"string","description":"USDT perp symbol e.g. SOLUSDT, BTCUSDT (default SOLUSDT)"}}],"x-example-query":{"symbol":"SOLUSDT"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"symbol":{"type":"string"},"mark_price":{"type":"number"},"spot_price":{"type":"number"},"basis_pct":{"type":"number"},"state":{"type":"string"},"funding_rate_8h":{"type":"number"},"funding_rate_raw":{"type":"number"},"funding_interval_hours":{"type":"number"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_basis","data":{"symbol":"SOLUSDT","mark_price":118.201,"spot_price":118.26,"basis_pct":-0.0499,"state":"flat","funding_rate_8h":0.00008784,"funding_rate_raw":0.00008784,"funding_interval_hours":8},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: optional query param symbol = not-a-symbol.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_basis","error":"invalid symbol: not-a-symbol"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch basis: perp-vs-spot basis for any usdt pair","tags":["agentfeed"],"x-price-usd":0.01,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}}}},"/api/volatility":{"get":{"description":"Realized volatility for any USDT perp: 7-day and 30-day annualized from daily closes, plus today's range in %. A position-sizing input.","operationId":"get_volatility","parameters":[{"in":"query","name":"symbol","required":false,"schema":{"type":"string","description":"USDT perp symbol e.g. SOLUSDT, BTCUSDT (default SOLUSDT)"}}],"x-example-query":{"symbol":"SOLUSDT"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"symbol":{"type":"string"},"source":{"type":"string"},"realized_vol_7d_ann_pct":{"type":"number"},"realized_vol_30d_ann_pct":{"type":"number"},"today_range_pct":{"type":"number"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_volatility","data":{"symbol":"SOLUSDT","source":"bybit_daily_klines","realized_vol_7d_ann_pct":58.77,"realized_vol_30d_ann_pct":68.65,"today_range_pct":5.33},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: optional query param symbol = not-a-symbol.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_volatility","error":"invalid symbol: not-a-symbol"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch volatility: realized volatility for any usdt perp","tags":["agentfeed"],"x-price-usd":0.01,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}}}},"/api/funding-history":{"get":{"description":"Funding rate history for any USDT perp, up to 200 intervals: the average rate, its annualized %, the share of intervals that were positive, and the raw series. What the carry has actually been.","operationId":"get_funding_history","parameters":[{"in":"query","name":"symbol","required":false,"schema":{"type":"string","description":"USDT perp symbol e.g. SOLUSDT, BTCUSDT (default SOLUSDT)"}},{"in":"query","name":"limit","required":false,"schema":{"type":"number","description":"intervals, 1-200, default 30"}}],"x-example-query":{"symbol":"SOLUSDT"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"symbol":{"type":"string"},"intervals":{"type":"number"},"avg_rate_8h":{"type":"number"},"avg_annualized_pct":{"type":"number"},"positive_share_pct":{"type":"number"},"history":{"type":"array"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_funding_history","data":{"symbol":"SOLUSDT","intervals":30,"avg_rate_8h":0.00005327,"avg_annualized_pct":5.83,"positive_share_pct":77,"history":[{"ts":1790582400000,"rate_8h":0.00008247,"funding_rate_raw":0.00008247,"funding_interval_hours":8},{"ts":1790553600000,"rate_8h":0.00006338,"funding_rate_raw":0.00006338,"funding_interval_hours":8},{"ts":1790524800000,"rate_8h":0.0001,"funding_rate_raw":0.0001,"funding_interval_hours":8}]},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: optional query param symbol = not-a-symbol.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_funding_history","error":"invalid symbol: not-a-symbol"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch funding history: funding rate history for any usdt perp","tags":["agentfeed"],"x-price-usd":0.005,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}}}},"/api/top-movers":{"get":{"description":"Top gainers and losers over 24h across every Bybit USDT perp above a liquidity floor, each with its funding rate attached. The \"what moved\" screener.","operationId":"get_top_movers","parameters":[{"in":"query","name":"limit","required":false,"schema":{"type":"number","description":"top N each side, 1-25, default 10"}},{"in":"query","name":"min_turnover_usd","required":false,"schema":{"type":"number","description":"liquidity floor, default 1M"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"source":{"type":"string"},"universe_size":{"type":"number"},"min_turnover_usd":{"type":"number"},"gainers":{"type":"array"},"losers":{"type":"array"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_top_movers","data":{"source":"bybit_linear_universe","universe_size":299,"min_turnover_usd":1000000,"gainers":[{"symbol":"QNTUSDT","price":226.72,"change_24h_pct":31.05,"turnover_24h_usd":522856332,"funding_rate_8h":0.0001,"funding_rate_raw":0.0001,"funding_interval_hours":8},{"symbol":"BTWUSDT","price":1.39689,"change_24h_pct":26.07,"turnover_24h_usd":45725371,"funding_rate_8h":0.00056134,"funding_rate_raw":0.00028067,"funding_interval_hours":4},{"symbol":"HBARUSDT","price":0.11291,"change_24h_pct":19.17,"turnover_24h_usd":89605037,"funding_rate_8h":-0.00000436,"funding_rate_raw":-0.00000436,"funding_interval_hours":8}],"losers":[{"symbol":"QUSDT","price":0.02544,"change_24h_pct":-45.87,"turnover_24h_usd":55364194,"funding_rate_8h":0.0001,"funding_rate_raw":0.00005,"funding_interval_hours":4},{"symbol":"LONGXIAUSDT","price":0.07,"change_24h_pct":-32.3,"turnover_24h_usd":5859730,"funding_rate_8h":0.00149958,"funding_rate_raw":0.00074979,"funding_interval_hours":4},{"symbol":"STONKUSDT","price":0.2396,"change_24h_pct":-24.44,"turnover_24h_usd":4663895,"funding_rate_8h":0.0007196,"funding_rate_raw":0.0003598,"funding_interval_hours":4}]},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch top movers: top gainers and losers over 24h across every","tags":["agentfeed"],"x-price-usd":0.01,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}}}},"/api/orderbook-imbalance":{"get":{"description":"Orderbook imbalance for any USDT perp: resting bid and ask liquidity in USD within ±N bps of mid, the ratio between the two sides, and a skew read.","operationId":"get_orderbook_imbalance","parameters":[{"in":"query","name":"symbol","required":false,"schema":{"type":"string","description":"USDT perp symbol e.g. SOLUSDT, BTCUSDT (default SOLUSDT)"}},{"in":"query","name":"bps","required":false,"schema":{"type":"number","description":"window ±bps around mid, 5-500, default 50"}}],"x-example-query":{"symbol":"SOLUSDT"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"symbol":{"type":"string"},"mid_price":{"type":"number"},"window_bps":{"type":"number"},"bid_usd":{"type":"number"},"ask_usd":{"type":"number"},"imbalance_ratio":{"type":"number"},"skew":{"type":"string"},"note":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_orderbook_imbalance","data":{"symbol":"SOLUSDT","mid_price":121.455,"window_bps":50,"bid_usd":12875007,"ask_usd":8430080,"imbalance_ratio":1.527,"skew":"bid_heavy (support below)","note":"visible resting liquidity only — spoofable, read as context not signal"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: optional query param symbol = not-a-symbol.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_orderbook_imbalance","error":"invalid symbol: not-a-symbol"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch orderbook imbalance: orderbook imbalance for any usdt","tags":["agentfeed"],"x-price-usd":0.01,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}}}},"/api/orderbook-walls":{"get":{"description":"Orderbook walls for any USDT perp: the largest resting orders on each side of the book, with USD size and distance from mid.","operationId":"get_orderbook_walls","parameters":[{"in":"query","name":"symbol","required":false,"schema":{"type":"string","description":"USDT perp symbol e.g. SOLUSDT, BTCUSDT (default SOLUSDT)"}},{"in":"query","name":"top","required":false,"schema":{"type":"number","description":"walls per side, 1-15, default 5"}}],"x-example-query":{"symbol":"SOLUSDT"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"symbol":{"type":"string"},"mid_price":{"type":"number"},"depth_levels":{"type":"number"},"bid_walls":{"type":"array"},"ask_walls":{"type":"array"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_orderbook_walls","data":{"symbol":"SOLUSDT","mid_price":121.455,"depth_levels":400,"bid_walls":[{"price":120.03,"usd":2753572,"distance_pct":-1.173},{"price":120.92,"usd":2368581,"distance_pct":-0.44},{"price":119.6,"usd":2343299,"distance_pct":-1.527}],"ask_walls":[{"price":122.66,"usd":2403192,"distance_pct":0.992},{"price":121.94,"usd":2271120,"distance_pct":0.399},{"price":123.09,"usd":2166175,"distance_pct":1.346}]},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: optional query param symbol = not-a-symbol.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_orderbook_walls","error":"invalid symbol: not-a-symbol"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch orderbook walls: orderbook walls for any usdt perp","tags":["agentfeed"],"x-price-usd":0.01,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}}}},"/api/whale-trades":{"get":{"description":"Whale trades for any USDT perp: prints from the live trade tape above a USD threshold, with buy and sell totals, net flow and the dominant side.","operationId":"get_whale_trades","parameters":[{"in":"query","name":"symbol","required":false,"schema":{"type":"string","description":"USDT perp symbol e.g. SOLUSDT, BTCUSDT (default SOLUSDT)"}},{"in":"query","name":"min_usd","required":false,"schema":{"type":"number","description":"min print USD, default 100k"}},{"in":"query","name":"limit","required":false,"schema":{"type":"number","description":"max trades returned, 1-50, default 20"}}],"x-example-query":{"symbol":"SOLUSDT","min_usd":50000},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"symbol":{"type":"string"},"tape_size":{"type":"number"},"min_usd":{"type":"number"},"whale_count":{"type":"number"},"whale_buy_usd":{"type":"number"},"whale_sell_usd":{"type":"number"},"net_usd":{"type":"number"},"dominant":{"type":"string"},"trades":{"type":"array"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_whale_trades","data":{"symbol":"SOLUSDT","tape_size":1000,"min_usd":50000,"whale_count":4,"whale_buy_usd":920123,"whale_sell_usd":53356,"net_usd":866767,"dominant":"buyers","trades":[{"ts":1790355175276,"side":"Sell","price":121.43,"usd":53356},{"ts":1790355157926,"side":"Buy","price":121.35,"usd":728100},{"ts":1790355111474,"side":"Buy","price":121.34,"usd":62417}]},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: optional query param symbol = not-a-symbol.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_whale_trades","error":"invalid symbol: not-a-symbol"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch whale trades: whale trades for any usdt perp","tags":["agentfeed"],"x-price-usd":0.02,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.02"}}}},"/api/spread-arb":{"get":{"description":"Cross-exchange spread and arbitrage edge for any USDT perp: the best bid and ask on Bybit, OKX and Hyperliquid, with the best cross-venue edge in bps, pre-fee.","operationId":"get_spread_arb","parameters":[{"in":"query","name":"symbol","required":false,"schema":{"type":"string","description":"USDT perp symbol e.g. SOLUSDT, BTCUSDT (default SOLUSDT)"}}],"x-example-query":{"symbol":"SOLUSDT"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"symbol":{"type":"string"},"venues":{"type":"object"},"best_cross":{"type":"object"},"note":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_spread_arb","data":{"symbol":"SOLUSDT","venues":{"bybit":{"bid":121.45,"ask":121.46},"okx":{"bid":121.39,"ask":121.4},"hyperliquid":{"bid":121.44,"ask":121.45}},"best_cross":{"sell_on":"bybit","buy_on":"okx","edge":0.04999999999999716,"edge_usd_per_unit":0.05,"edge_bps":4.12},"note":"gross edge, pre-fee — perp funding and fees usually eat sub-5bps gaps"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: optional query param symbol = not-a-symbol.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_spread_arb","error":"invalid symbol: not-a-symbol"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch spread arb: cross-exchange spread and arbitrage edge for","tags":["agentfeed"],"x-price-usd":0.02,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.02"}}}},"/api/token-holders/{mint}":{"get":{"description":"Top holders of any SPL token: per-account share with top-1, top-5 and top-10 concentration for a Solana mint. A deeper cut than the summary in /api/token-risk.","operationId":"get_token_holders","parameters":[{"description":"SPL token mint address (base58)","in":"path","name":"mint","required":true,"schema":{"type":"string","description":"SPL token mint address (base58)"}}],"x-example-path":{"mint":"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"mint":{"type":"string"},"symbol":{"type":"string"},"supply":{"type":"number"},"top_accounts":{"type":"array"},"concentration":{"type":"object"},"note":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_token_holders","data":{"mint":"DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263","symbol":"Bonk","supply":87994383847609.11,"top_accounts":[{"address":"5hpfC9VBxVcoW9opCnM2PqR6YWRLBzrBpabJTZnwwNiw","amount":7770515063166.431,"pct":8.83},{"address":"2vPvEovB1gw8bAUqasThEv6YMAdJ77AU3RxiUNqknEiw","amount":5772593511837.953,"pct":6.56},{"address":"6LozHQrLbEPeJGWKpN6wnnk76GhD4bGAVSoTBE5xXpsf","amount":3111312968005.8394,"pct":3.54}],"concentration":{"top1_pct":8.83,"top5_pct":25.02,"top10_pct":38.33},"note":"token accounts, not unique owners — pools and exchanges included. Fails for mega-holder tokens (USDC-scale)."},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: path param mint = not-a-valid-address.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_token_holders","error":"invalid mint address"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch token holders: top holders of any spl token","tags":["agentfeed"],"x-price-usd":0.02,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.02"}}}},"/api/wallet-activity/{wallet}":{"get":{"description":"Solana wallet activity: recent transactions for any address, parsed human-readable — type, protocol, description, fee and failures. Helius enhanced transactions.","operationId":"get_wallet_activity","parameters":[{"description":"Solana wallet address (base58)","in":"path","name":"wallet","required":true,"schema":{"type":"string","description":"Solana wallet address (base58)"}},{"in":"query","name":"limit","required":false,"schema":{"type":"number","description":"tx count, 1-25, default 10"}}],"x-example-path":{"wallet":"Gack9UtqfeZxFA1LqeqjLgC3JGuD7rS6CsSHKoXsD4Tu"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"wallet":{"type":"string"},"tx_count":{"type":"number"},"transactions":{"type":"array"},"source":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_wallet_activity","data":{"wallet":"Gack9UtqfeZxFA1LqeqjLgC3JGuD7rS6CsSHKoXsD4Tu","tx_count":10,"transactions":[{"signature":"4dSnZpJDH2c7hn6dwFWkQiZyasMxZGtNJt9fvBGEYtF9tVzw9R7yEto9J6KX679waGTPbSbEUtfGMt8ksWTvrYQ3","ts":1790353880,"type":"TRANSFER","source":"SOLANA_PROGRAM_LIBRARY","description":"Gack9UtqfeZxFA1LqeqjLgC3JGuD7rS6CsSHKoXsD4Tu transferred 0.002 USDC to 4a8o45skRPcyjAdyR8yES215Swvh8uTpZD6KLarhxCJ7.","fee_sol":0.000010001,"failed":false},{"signature":"36r2wk3TgQyWJH7d2NHPsGYkee82WwEfcHXonDwhFz1BVJofrNZwkHYn7Ncd4uSqYL3imojJzJioMeJTXzeKpAku","ts":1790353876,"type":"TRANSFER","source":"SOLANA_PROGRAM_LIBRARY","description":"Gack9UtqfeZxFA1LqeqjLgC3JGuD7rS6CsSHKoXsD4Tu transferred 0.001 USDC to 4a8o45skRPcyjAdyR8yES215Swvh8uTpZD6KLarhxCJ7.","fee_sol":0.000010001,"failed":false},{"signature":"2kQeB8GJBbftzb73FNoJw2HncN1Yh1Lt3sHPTBU3TY6AevVoGTBfQkoYKAT5d2Uzr7KnYT8F8Rphb1GWBgguLFfQ","ts":1790353870,"type":"TRANSFER","source":"SOLANA_PROGRAM_LIBRARY","description":"Gack9UtqfeZxFA1LqeqjLgC3JGuD7rS6CsSHKoXsD4Tu transferred 0.001 USDC to 4a8o45skRPcyjAdyR8yES215Swvh8uTpZD6KLarhxCJ7.","fee_sol":0.000010001,"failed":false}],"source":"helius-enhanced"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: path param wallet = not-a-valid-address.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_wallet_activity","error":"invalid wallet address"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch wallet activity: solana wallet activity","tags":["agentfeed"],"x-price-usd":0.02,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.02"}}}},"/api/priority-fees":{"get":{"description":"Solana priority fees right now: the fee estimate at every level from min to unsafeMax in micro-lamports per compute unit, with a recommended tip. For bots that need their transactions to land.","operationId":"get_priority_fees","responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"unit":{"type":"string"},"levels":{"type":"object"},"recommended":{"type":"number"},"source":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_priority_fees","data":{"unit":"micro-lamports per compute unit","levels":{"min":0,"low":0,"medium":1408,"high":50000,"very_high":1000000,"unsafe_max":285196203000000},"recommended":50000,"source":"helius getPriorityFeeEstimate"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch priority fees: solana priority fees right now","tags":["agentfeed"],"x-price-usd":0.005,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}}}},"/api/jito-tips":{"get":{"description":"Jito tips: bundle tip floor percentiles from p25 to p99 in SOL — what landed bundles are actually paying — with an EMA p50 and a landing recommendation.","operationId":"get_jito_tips","responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"unit":{"type":"string"},"percentiles":{"type":"object"},"ema_p50":{"type":"number"},"read":{"type":"string"},"source":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_jito_tips","data":{"unit":"SOL","percentiles":{"p25":0.000001864,"p50":0.00000456,"p75":0.000013719,"p95":0.0001098144,"p99":0.00016805936000000005},"ema_p50":0.000004113848068456372,"read":"tip >= p75 to land bundles reliably in contested blocks","source":"jito tip_floor"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch jito tips: jito tips","tags":["agentfeed"],"x-price-usd":0.005,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}}}},"/api/sol-network":{"get":{"description":"Solana network health: recent average TPS, the current slot, the current epoch and epoch progress in %.","operationId":"get_sol_network","responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"tps_avg_recent":{"type":"number"},"slot":{"type":"number"},"epoch":{"type":"number"},"epoch_progress_pct":{"type":"number"},"source":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_sol_network","data":{"tps_avg_recent":4990,"slot":450411920,"epoch":1042,"epoch_progress_pct":62,"source":"helius rpc"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch SOL network: solana network health","tags":["agentfeed"],"x-price-usd":0.005,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}}}},"/api/tvl":{"get":{"description":"TVL for any DeFi protocol with 1d and 7d change, or a top-15 chains ranking. DefiLlama-backed; a protocol family is aggregated across its deployments and the change is TVL-weighted.","operationId":"get_tvl","parameters":[{"in":"query","name":"target","required":false,"schema":{"type":"string","description":"protocol slug/name e.g. jito, marinade — omit for top chains"}}],"x-example-query":{"target":"jito"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"scope":{"type":"string"},"protocol":{"type":"string"},"slug":{"type":"string"},"category":{"type":"string"},"chains":{"type":"array"},"tvl_usd":{"type":"number"},"change_1d_pct":{"type":"number"},"change_7d_pct":{"type":"number"},"deployments":{"type":"number"},"components":{"type":"array"},"note":{"type":"string"},"source":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_tvl","data":{"scope":"protocol_family","protocol":"Jito","slug":"jito","category":"Liquid Staking","chains":["Solana"],"tvl_usd":1191075811,"change_1d_pct":-3.61,"change_7d_pct":-3.65,"deployments":2,"components":[{"name":"Jito Liquid Staking","slug":"jito-liquid-staking","tvl_usd":1171815631,"change_1d_pct":-3.65},{"name":"Jito Restaking","slug":"jito-restaking","tvl_usd":19260179,"change_1d_pct":-1.11}],"note":"aggregate of 2 deployment(s); change is TVL-weighted. Query a component slug for one deployment.","source":"defillama"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch TVL: tvl for any defi protocol with 1d and 7d change, or","tags":["agentfeed"],"x-price-usd":0.005,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}}}},"/api/stablecoin-flows":{"get":{"description":"Stablecoin supply and flows: total stablecoin market cap with 7d and 30d deltas and the top stables by size — the macro risk-on / risk-off dial for crypto.","operationId":"get_stablecoin_flows","responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"total_stablecoin_usd":{"type":"number"},"delta_7d_usd":{"type":"number"},"delta_30d_usd":{"type":"number"},"read":{"type":"string"},"top_stables":{"type":"array"},"source":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_stablecoin_flows","data":{"total_stablecoin_usd":313908116771,"delta_7d_usd":2781522872,"delta_30d_usd":3541396267,"read":"supply expanding — dry powder entering","top_stables":[{"symbol":"USDT","circulating_usd":183731252779},{"symbol":"USDC","circulating_usd":76048023004},{"symbol":"USDS","circulating_usd":6626400086}],"source":"defillama-stablecoins"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch stablecoin flows: stablecoin supply and flows","tags":["agentfeed"],"x-price-usd":0.01,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.01"}}}},"/api/dex-quote":{"get":{"description":"Solana DEX quote from Jupiter for any SPL pair: output amount, price impact %, the route taken and the slippage assumed. The real executable price on Solana, not an index price.","operationId":"get_dex_quote","parameters":[{"in":"query","name":"input_mint","required":true,"schema":{"type":"string","description":"input mint (base58)"}},{"in":"query","name":"output_mint","required":true,"schema":{"type":"string","description":"output mint (base58)"}},{"in":"query","name":"amount","required":true,"schema":{"type":"string","description":"amount in raw base units of input mint"}}],"x-example-query":{"input_mint":"So11111111111111111111111111111111111111112","output_mint":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","amount":"1000000000"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"input_mint":{"type":"string"},"output_mint":{"type":"string"},"in_amount":{"type":"string"},"out_amount":{"type":"string"},"other_amount_threshold":{"type":"string"},"price_impact_pct":{"type":"number"},"route":{"type":"array"},"slippage_bps":{"type":"number"},"source":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_dex_quote","data":{"input_mint":"So11111111111111111111111111111111111111112","output_mint":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","in_amount":"1000000000","out_amount":"108691257","other_amount_threshold":"108147801","price_impact_pct":0,"route":["BisonFi"],"slippage_bps":50,"source":"jupiter-v6"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: required query param input_mint omitted.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_dex_quote","error":"invalid input_mint or output_mint"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch DEX quote: solana dex quote from jupiter for any spl pair","tags":["agentfeed"],"x-price-usd":0.005,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}}}},"/api/peg-deviation":{"get":{"description":"Tokenized stock peg deviation on Solana: the on-chain DEX price of a tokenized US equity versus the underlying's last real trade, in bps, with 24h stats split into market-open and off-hours. Sampled every 5 minutes by our own collector.","operationId":"get_peg_deviation","parameters":[{"in":"query","name":"symbol","required":true,"schema":{"type":"string","description":"Tokenized equity symbol e.g. CRCLx, MSTRx, COINx"}},{"in":"query","name":"hours","required":false,"schema":{"type":"number","description":"lookback 1-168, default 24"}}],"x-example-query":{"symbol":"CRCLx"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"symbol":{"type":"string"},"status":{"type":"string"},"window_hours":{"type":"number"},"latest":{"type":"object"},"window":{"type":"object"},"offhours":{"type":"object"},"market_open":{"type":"object"},"note":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_peg_deviation","data":{"symbol":"CRCLx","status":"ok","window_hours":24,"latest":{"ts":1790355082,"iso":"2026-09-25T16:51:22.000Z","session":"open","onchain":88.71,"reference":88.62,"deviation_bps":10.2,"direction":"premium","liquidity_usd":2553105,"dex":"raydium"},"window":{"n":288,"mean_abs_bps":32.7,"p50_abs_bps":29,"p95_abs_bps":76.4,"max_abs_bps":125.8,"pct_over_100bps":1.4,"pct_over_200bps":0},"offhours":{"n":210,"mean_abs_bps":40,"p50_abs_bps":38.7,"p95_abs_bps":86,"max_abs_bps":125.8,"pct_over_100bps":1.9,"pct_over_200bps":0},"market_open":{"n":78,"mean_abs_bps":12.9,"p50_abs_bps":11,"p95_abs_bps":30.2,"max_abs_bps":52.7,"pct_over_100bps":0,"pct_over_200bps":0},"note":"Deviation is measured against the underlying's last real trade. Outside US market hours that is the last print before the close, not a live quote."},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: required query param symbol omitted.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_peg_deviation","error":"missing required parameter: symbol — a tokenized equity symbol, e.g. symbol=CRCLx (get_peg_universe lists all tracked symbols)"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch peg deviation: tokenized stock peg deviation on solana","tags":["agentfeed"],"x-price-usd":0.02,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.02"}}}},"/api/peg-sessions":{"get":{"description":"Tokenized stock peg by trading session: deviation broken out across open, premarket, afterhours, overnight and weekend — mean, p95, max bps and median liquidity each, with the worst off-hours window flagged. Market-open acts as the control.","operationId":"get_peg_sessions","parameters":[{"in":"query","name":"symbol","required":true,"schema":{"type":"string","description":"Tokenized equity symbol e.g. CRCLx, MSTRx, COINx"}},{"in":"query","name":"days","required":false,"schema":{"type":"number","description":"lookback 1-30, default 7"}}],"x-example-query":{"symbol":"CRCLx"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"symbol":{"type":"string"},"status":{"type":"string"},"window_days":{"type":"number"},"sessions":{"type":"object"},"worst_offhours_session":{"type":"string"},"open_vs_offhours_ratio":{"type":"number"},"note":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_peg_sessions","data":{"symbol":"CRCLx","status":"ok","window_days":7,"sessions":{"open":{"n":390,"mean_abs_bps":10.3,"p50_abs_bps":7.6,"p95_abs_bps":27.7,"max_abs_bps":52.7,"pct_over_100bps":0,"pct_over_200bps":0,"median_liquidity_usd":2728225},"premarket":{"n":330,"mean_abs_bps":141.2,"p50_abs_bps":58.1,"p95_abs_bps":531.4,"max_abs_bps":583.7,"pct_over_100bps":37.3,"pct_over_200bps":24.5,"median_liquidity_usd":2737692},"afterhours":{"n":240,"mean_abs_bps":54.8,"p50_abs_bps":41.4,"p95_abs_bps":205.5,"max_abs_bps":339,"pct_over_100bps":8.8,"pct_over_200bps":6.3,"median_liquidity_usd":2733917},"overnight":{"n":480,"mean_abs_bps":105,"p50_abs_bps":61.4,"p95_abs_bps":315.4,"max_abs_bps":381,"pct_over_100bps":36,"pct_over_200bps":20.8,"median_liquidity_usd":2728721}},"worst_offhours_session":"premarket","open_vs_offhours_ratio":19.2,"note":"Deviation is measured against the underlying's last real trade. Outside US market hours that is the last print before the close, not a live…"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: required query param symbol omitted.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_peg_sessions","error":"missing required parameter: symbol — a tokenized equity symbol, e.g. symbol=CRCLx (get_peg_universe lists all tracked symbols)"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch peg sessions: tokenized stock peg by trading session","tags":["agentfeed"],"x-price-usd":0.03,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.03"}}}},"/api/peg-universe":{"get":{"description":"Tokenized stocks ranked by off-hours peg risk: every tokenized US equity we track, with p95 and max deviation bps, market-open deviation as the control, and median liquidity. Dead pools are excluded rather than reported as perfect pegs.","operationId":"get_peg_universe","parameters":[{"in":"query","name":"days","required":false,"schema":{"type":"number","description":"lookback 1-30, default 7"}},{"in":"query","name":"min_liquidity_usd","required":false,"schema":{"type":"number","description":"filter out thinner pools"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"status":{"type":"string"},"window_days":{"type":"number"},"symbols":{"type":"array"},"excluded":{"type":"array"},"ranked_by":{"type":"string"},"note":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_peg_universe","data":{"status":"ok","window_days":7,"symbols":[{"symbol":"CRCLx","n":2016,"offhours_p95_bps":319.6,"offhours_max_bps":583.7,"open_p95_bps":27.7,"median_liquidity_usd":2704762},{"symbol":"MSTRx","n":2016,"offhours_p95_bps":315.1,"offhours_max_bps":740,"open_p95_bps":62.1,"median_liquidity_usd":797570},{"symbol":"METAx","n":2016,"offhours_p95_bps":233.2,"offhours_max_bps":278.8,"open_p95_bps":56.8,"median_liquidity_usd":364651}],"excluded":[],"ranked_by":"offhours_p95_bps","note":"Deviation is measured against the underlying's last real trade. Outside US market hours that is the last print before the close, not a live quote."},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch peg universe: tokenized stocks ranked by off-hours peg","tags":["agentfeed"],"x-price-usd":0.05,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.05"}}}},"/api/exit-quote":{"get":{"description":"EXIT LIQUIDITY on seized collateral: what a liquidator ACTUALLY realises selling a Kamino reserve into live routing, versus the oracle price the protocol marks it at. Returns max_exitable_usd (largest clip whose liquidator margin is still positive, found by bisection, with its resolution width), the exitable fraction, the conservative bound at the 2% penalty floor, and for the nearest clip actually probed: realised USD, haircut bps and liquidator margin bps. Distinguishes a router that REFUSES to quote a token (permissioning, not illiquidity) from a book with no route (a real liquidity finding) - they are different facts and were one status until this split. A terminal verdict requires six consecutive agreeing observations from the symbol's own tape, so a single bad quote cannot produce a finding; withheld verdicts fall back to the last corroborated measurement with its age rather than returning null. Zero bad debt today does not disprove any of this - it means nobody has been forced to test it at size. Method, corroboration rules and row counts are free via get_exit_method.","operationId":"get_exit_quote","parameters":[{"in":"query","name":"symbol","required":true,"schema":{"type":"string","description":"reserve symbol e.g. SPYx, cbBTC, FWDI, CRCLx (get_exit_method lists all covered)"}},{"in":"query","name":"size_usd","required":false,"schema":{"type":"number","description":"clip size in USD you would need to exit; the nearest MEASURED clip is returned, never interpolated"}}],"x-example-query":{"symbol":"SPYx"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"source":{"type":"string"},"what_this_answers":{"type":"string"},"symbol":{"type":"string"},"protocol":{"type":"string"},"market":{"type":"string"},"mint":{"type":"string"},"gated_from_ts":{"type":"number"},"confidence":{"type":"string"},"measurement_age_sec":{"type":"number"},"current_sample_withheld":{},"measurement":{"type":"object"},"exit_blocked":{},"nearest_measured_clip":{"type":"object"},"liquidation_bonus_band":{"type":"object"},"method":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_exit_quote","data":{"source":"overhang","what_this_answers":"If I seize this coll…","symbol":"SPYx","protocol":"kamino","market":"xStocks Market","mint":"XsoCS1TfEyfFhfvj8EtZ…","gated_from_ts":1786406400,"confidence":"measured","measurement_age_sec":533,"current_sample_withheld":null,"measurement":{"as_of":1791476102,"as_of_utc":"2026-10-08T16:15:02.…","session":"regular","marked_usd":4372796.94,"oracle_price":779.036556,"oracle_source":"kamino_implied_live","oracle_age_sec":null,"mark_generated_at":1791476102,"mark_is_live":true,"max_exitable_usd":1708735,"exitable_fraction":0.390765,"max_exitable_cons_usd":1025641,"unbacked_usd_lower_bound":2664061.94,"resolution_usd":68309,"status":"partial","observation":"cleared","corroboration":null,"liq_bonus_bps_assumed":500,"liq_bonus_min_bps":200,"liq_bonus_max_bps":1000},"exit_blocked":null,"nearest_measured_clip":{"requested_size_usd":1708735,"measured_clip_usd":1708735,"is_exact_match":true,"routed":true,"realised_usd":1631818.42,"haircut_bps":450.14,"liq_margin_bps":49.86,"reason":null,"clips_measured_usd":[1000],"note":"Exact measured clip…"},"liquidation_bonus_band":{"min_bps":200,"max_bps":1000,"assumed_bps":500,"note":"Kamino publishes the…"},"method":"get_exit_method is F…"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: required query param symbol omitted.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_exit_quote","error":"symbol is required (e.g. SPYx, cbBTC, FWDI). Call get_exit_method (free) for the covered list."}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch exit quote: exit liquidity on seized collateral","tags":["agentfeed"],"x-price-usd":0.02,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.02"}}}},"/api/eth-price":{"get":{"description":"ETH spot price in USD, aggregated across seven independent venues (CoinGecko, Coinbase, Kraken, Binance, OKX, Gemini, DefiLlama). Returns the lead figure plus every venue quote that answered, so a caller can see the spread rather than trust one exchange. Venues are ranked in a fixed declared order, not completion order, so identical market state always returns the same lead price.","operationId":"get_eth_price","responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"symbol":{"type":"string"},"price":{"type":"number"},"quotes":{"type":"array"},"confidence":{},"publish_time":{},"source":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_eth_price","data":{"symbol":"ETH","price":2685.21,"quotes":[{"source":"coingecko","price":2685.21},{"source":"coinbase","price":2688.69},{"source":"kraken","price":2687.1}],"confidence":null,"publish_time":null,"source":"multi:coingecko+coinbase+kraken+binance+okx+gemini+defillama+paprika"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch ETH price: eth spot price in usd, aggregated across","tags":["agentfeed"],"x-price-usd":0.005,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}}}},"/api/base-gas":{"get":{"description":"Base gas price (chain 8453) in BOTH gwei and wei, with base fee, priority fee and block number when the node supplies them. Both units are returned because a caller asking in wei and a caller asking in gwei are asking the same question. Served from keyless public RPC with three-node fallback, so there is no API key to rotate or expire.","operationId":"get_base_gas","responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"chain":{"type":"string"},"chain_id":{"type":"number"},"gas_price_gwei":{"type":"number"},"gas_price_wei":{"type":"number"},"base_fee_gwei":{"type":"number"},"base_fee_wei":{"type":"number"},"priority_fee_gwei":{"type":"number"},"priority_fee_wei":{"type":"number"},"block":{"type":"number"},"source":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_base_gas","data":{"chain":"Base","chain_id":8453,"gas_price_gwei":0.006,"gas_price_wei":6000000,"base_fee_gwei":0.005,"base_fee_wei":5000000,"priority_fee_gwei":0.001,"priority_fee_wei":1000000,"block":51782920,"source":"base-rpc:mainnet.base.org"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch base gas: base gas price","tags":["agentfeed"],"x-price-usd":0.005,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}}}},"/api/base-balance":{"get":{"description":"ERC20 and native ETH wallet balance on Base or Ethereum mainnet, for a 0x address or an ENS name. decimals() and symbol() are read from the contract at request time rather than assumed, because assuming 18 reports a USDC balance a trillion times too large. ENS is resolved through two independent resolvers and the answer is used only when they agree, so a wrong address can never produce a confident balance for the wrong wallet. An unsupported chain is refused rather than silently answered from the wrong one.","operationId":"get_base_balance","parameters":[{"in":"query","name":"address","required":true,"schema":{"type":"string","description":"0x address (40 hex) or an ENS name ending .eth"}},{"in":"query","name":"token","required":false,"schema":{"type":"string","description":"ERC20 contract address, or a known ticker: USDC, WETH, DAI, CBBTC, USDBC, CBETH, AERO, EURC. Omit for the native ETH balance"}},{"in":"query","name":"chain","required":false,"schema":{"type":"string","description":"base (default) or ethereum"}}],"x-example-query":{"address":"0x22DB3A9686EE5261e7Bf3ed4f91277232E8076e6"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"chain":{"type":"string"},"chain_id":{"type":"number"},"address":{"type":"string"},"asset":{"type":"string"},"balance":{"type":"number"},"balance_wei":{"type":"string"},"source":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_base_balance","data":{"chain":"Base","chain_id":8453,"address":"0x22DB3A9686EE5261e7Bf3ed4f91277232E8076e6","asset":"ETH","balance":0.000094829,"balance_wei":"94829352850506","source":"rpc:mainnet.base.org"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: required query param address omitted.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_base_balance","error":"missing required parameter: address (a 0x… Base address)"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch base balance: erc20 and native eth wallet balance on","tags":["agentfeed"],"x-price-usd":0.005,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}}}},"/api/perp":{"get":{"description":"Use when an agent needs one perp market in a single call. Returns cross-venue funding (Bybit, OKX, Hyperliquid), open interest with 1h/24h change, long/short ratio, and 24h liquidations with long/short split and biggest print from our own tape.","operationId":"get_perp","parameters":[{"in":"query","name":"symbol","required":false,"schema":{"type":"string","description":"USDT perp symbol e.g. SOLUSDT, BTCUSDT (default SOLUSDT)"}}],"x-example-query":{"symbol":"SOLUSDT"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"symbol":{"type":"string"},"funding":{"type":"object"},"open_interest":{"type":"object"},"long_short":{"type":"object"},"liquidations_24h":{"type":"object"},"tape_age_sec":{"type":"number"},"partial":{},"source":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_perp","data":{"symbol":"SOLUSDT","funding":{"venues":{"bybit":{"funding_rate_8h":0.00008784,"funding_rate_raw":0.00008784,"funding_interval_hours":8,"next_funding_time":1790611200000,"mark_price":118.209},"okx":{"funding_rate_8h":0.0000384889726373,"funding_rate_raw":0.0000384889726373,"funding_interval_hours":8,"next_funding_time":1790611200000,"mark_price":118.19},"hyperliquid":{"funding_rate_1h":0.0000125,"funding_rate_8h_equiv":0.0001,"funding_rate_raw":0.0000125,"funding_interval_hours":1,"mark_price":118.31}},"spread_8h":0.00006151,"crowding":"longs_pay_everywhere"},"open_interest":{"bybit":{"oi_base":6961018.5,"oi_usd":822567812,"change_1h_pct":0.36,"change_24h_pct":-4.74},"okx":{"oi_base":3046096.9400000013,"oi_usd":360200963},"mark_price":118.209},"long_short":{"long_pct":68.82,"short_pct":31.18,"long_pct_1h_ago":68.79,"long_pct_24h_ago":67.29,"source":"bybit_v5_public"},"liquidations_24h":{"prints":1652,"total_usd":12370870.62,"longs_usd":10578854.85,"shorts_usd":1792015.77,"biggest_print_usd":603093.97,"venues":3,"dominant_side":"longs"},"tape_age_sec":4,"partial":null,"source":"bybit+okx+hyperliquid venues, liquidations from our own tape"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. Observed: optional query param symbol = not-a-symbol.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"get_perp","error":"invalid symbol: not-a-symbol"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch perp: use when an agent needs one perp market in a","tags":["agentfeed"],"x-price-usd":0.005,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}}}},"/api/liq-pulse":{"get":{"description":"Use when an agent needs to know what is being liquidated right now. Returns the last 60 minutes across every USDT perp we record: total USD, long/short split, prints and the top 5 symbols. Declines with the tape age if our recording is stale.","operationId":"get_liq_pulse","responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"stale":{"type":"boolean"},"window_min":{"type":"number"},"tape_age_sec":{"type":"number"},"prints":{"type":"number"},"total_usd":{"type":"number"},"longs_usd":{"type":"number"},"shorts_usd":{"type":"number"},"dominant_side":{"type":"string"},"symbols":{"type":"number"},"venues":{"type":"number"},"top_symbols":{"type":"array"},"source":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_liq_pulse","data":{"stale":false,"window_min":60,"tape_age_sec":3,"prints":2714,"total_usd":6181574.19,"longs_usd":1331975.85,"shorts_usd":4849598.34,"dominant_side":"shorts","symbols":219,"venues":3,"top_symbols":[{"symbol":"ETHUSDT","prints":80,"usd":903316.03,"longs_usd":114481.98,"shorts_usd":788834.05,"dominant_side":"shorts"},{"symbol":"BTCUSDT","prints":72,"usd":852392.57,"longs_usd":31983.89,"shorts_usd":820408.68,"dominant_side":"shorts"},{"symbol":"SOLUSDT","prints":111,"usd":551818.07,"longs_usd":19962.17,"shorts_usd":531855.9,"dominant_side":"shorts"}],"source":"our own bybit+okx+binance liquidation tape"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch liq pulse: use when an agent needs to know what is being","tags":["agentfeed"],"x-price-usd":0.005,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}}}},"/api/funding-pulse":{"get":{"description":"Use when an agent needs the most extreme funding rates right now. Returns the 5 largest absolute annualised rates across the whole Bybit USDT perp universe, each with venue, 8h rate, open interest and 24h price move. One call, not a full screen.","operationId":"get_funding_pulse","responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"extremes":{"type":"array"},"universe_size":{"type":"number"},"min_turnover_usd":{"type":"number"},"venue_scope":{"type":"array"},"note":{"type":"string"},"source":{"type":"string"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_funding_pulse","data":{"extremes":[{"symbol":"ORCAUSDT","venue":"bybit","funding_rate_8h":-0.00963784,"funding_rate_raw":-0.00481892,"funding_interval_hours":4,"annualized_pct":-1055.34,"oi_usd":7303411,"price_24h_pct":-10.83},{"symbol":"SKLUSDT","venue":"bybit","funding_rate_8h":-0.00745625,"funding_rate_raw":-0.00745625,"funding_interval_hours":8,"annualized_pct":-816.46,"oi_usd":807732,"price_24h_pct":6.94},{"symbol":"ZKCUSDT","venue":"bybit","funding_rate_8h":-0.00744792,"funding_rate_raw":-0.00372396,"funding_interval_hours":4,"annualized_pct":-815.55,"oi_usd":1195906,"price_24h_pct":-4.57}],"universe_size":304,"min_turnover_usd":1000000,"venue_scope":["bybit"],"note":"Ranked by absolute annualised funding across every Bybit USDT perp above the liquidity floor. For one symbol across Bybit, OKX and Hyperliquid use /api/funding-cross.","source":"bybit_linear_universe"},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch funding pulse: use when an agent needs the most extreme","tags":["agentfeed"],"x-price-usd":0.005,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}}}},"/api/price":{"get":{"description":"Use when an agent needs a spot price without choosing a venue. Returns the price, the venue that actually served it, and a Pyth confidence when Pyth served. Coinbase, then Kraken, then Pyth Hermes. Serves SOL, BTC and ETH; anything else is declined.","operationId":"get_spot","parameters":[{"in":"query","name":"symbol","required":false,"schema":{"type":"string","description":"SOL, BTC or ETH (default SOL). Anything else is declined with the supported list"}}],"x-example-query":{"symbol":"SOL"},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string"},"data":{"type":"object","properties":{"symbol":{"type":"string"},"price":{"type":"number"},"confidence":{},"publish_time":{},"source":{"type":"string"},"supported":{"type":"array"}}},"paid":{"type":"boolean"}}},"example":{"tool":"get_spot","data":{"symbol":"SOL","price":121.38,"confidence":null,"publish_time":null,"source":"coinbase","supported":["SOL","BTC","ETH"]},"paid":true}}},"description":"Paid response."},"400":{"description":"The handler threw: a missing or malformed caller parameter, or an upstream data source failed. This route takes no required input, so a 400 means an upstream source failed, not a caller mistake.","content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<human-readable reason>"}}}},"402":{"description":"No payment presented, or the payment did not settle. x402 v2: the full challenge is base64 in the PAYMENT-REQUIRED response header, for every rail; read it first. x402 v1: the body above, for Base and Solana; pay it with X-PAYMENT.","headers":{"PAYMENT-REQUIRED":{"description":"Base64 x402 v2 challenge. The body is the same challenge as x402 v1 (Base and Solana).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"x402Version":1,"error":"Payment required","accepts":["<x402 v1 PaymentRequirements, one per v1 rail: base, solana>"]}}}},"405":{"description":"HEAD on a free /api route. The response has an Allow: GET header and an empty body. HEAD on a paid route answers 402 with the challenge in PAYMENT-REQUIRED and no body.","headers":{"Allow":{"description":"Always GET.","schema":{"type":"string"}}}},"429":{"description":"More than 240 GET (or POST /mcp) requests from one IP in 60s. Other HTTP methods have a separate 2400/60s allowance. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"error":"rate limit: 240 req/min","retry_after":"<seconds>"}}}},"503":{"description":"The route answers from a precomputed snapshot and that snapshot is past its staleness limit, or no source has data to answer with. Never charged: a status of 400 or more cancels the x402 settlement. Retry-After is also set as a response header.","headers":{"Retry-After":{"description":"Seconds to wait.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object"},"example":{"tool":"<tool name>","error":"<reason, including the snapshot age>","retry_after":60}}}}},"summary":"Fetch spot: use when an agent needs a spot price without","tags":["agentfeed"],"x-price-usd":0.005,"x-payment-info":{"protocols":[{"x402":{}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}}}},"/api/sample":{"get":{"description":"Free. Lists every paid route that has a stored sample response.","operationId":"list_samples","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Free response. This endpoint is not payment-gated."}},"security":[],"summary":"List the free sample responses","tags":["agentfeed","free"]}},"/api/sample/{route}":{"get":{"description":"Free. Returns the real captured response for one paid route, with its price, input schema and paid URL. The same example the Bazaar listing carries.","operationId":"get_sample","parameters":[{"in":"path","name":"route","required":true,"description":"A paid route slug or tool name, e.g. liq-pulse, perp, or get_liq_pulse. GET /api/sample lists them.","example":"liq-pulse","schema":{"type":"string","example":"liq-pulse","enum":["base-balance","base-gas","basis","btc-price","cascade","cascade-forecast","cascade-history","cascade-scan","dex-quote","equity-24h","eth-price","exit-quote","funding-cross","funding-extremes","funding-history","funding-pulse","funding-radar","funding-rate","get_base_balance","get_base_gas","get_basis","get_btc_price","get_cascade_alert","get_cascade_forecast","get_cascade_history","get_cascade_scan","get_dex_quote","get_equity_24h","get_eth_price","get_exit_quote","get_funding_cross","get_funding_extremes","get_funding_history","get_funding_pulse","get_funding_radar","get_funding_rate","get_jito_tips","get_liq_heatmap","get_liq_history","get_liq_pulse","get_liquidation_leaders","get_liquidation_stats","get_long_short","get_macro_calendar","get_market_snapshot","get_market_state","get_oi_spike_scan","get_open_interest","get_options_gex","get_options_summary","get_orderbook_imbalance","get_orderbook_walls","get_peg_deviation","get_peg_sessions","get_peg_universe","get_perp","get_positioning","get_priority_fees","get_recent_liquidations","get_sol_network","get_sol_price","get_spot","get_spread_arb","get_squeeze_score","get_stablecoin_flows","get_token_holders","get_token_metadata","get_token_risk","get_top_movers","get_trade_context","get_tradfi_radar","get_tvl","get_venue_liq_share","get_volatility","get_wallet_activity","get_wallet_holdings","get_whale_trades","jito-tips","liq-heatmap","liq-history","liq-pulse","liquidation-leaders","liquidation-stats","liquidations","long-short","macro-calendar","market-snapshot","market-state","oi-spike-scan","open-interest","options-gex","options-summary","orderbook-imbalance","orderbook-walls","peg-deviation","peg-sessions","peg-universe","perp","positioning","price","priority-fees","sol-network","sol-price","spread-arb","squeeze-score","stablecoin-flows","token-holders","token-metadata","token-risk","top-movers","trade-context","tradfi-radar","tvl","venue-liq-share","volatility","wallet-activity","wallet-holdings","whale-trades"]}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Free response. This endpoint is not payment-gated."},"404":{"description":"No such paid route."}},"security":[],"summary":"Fetch a free sample response","tags":["agentfeed","free"]}},"/api/fear-greed":{"get":{"description":"Free. fear greed.","operationId":"get_fear_greed","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Free response. This endpoint is not payment-gated."}},"security":[],"summary":"Fetch fear greed: fear greed from the agentfeed api","tags":["agentfeed","free"]}},"/api/last-liquidation":{"get":{"description":"Free. Last liquidation for SOL, BTC, ETH, XRP and DOGE, delayed by 15 minutes. For real-time data, use /api/liquidations.","operationId":"get_last_liquidation","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Free response. This endpoint is not payment-gated."}},"security":[],"summary":"Fetch last liquidation: last liquidation from the agentfeed api","tags":["agentfeed","free"]}},"/api/exit-method":{"get":{"description":"Free. exit method.","operationId":"get_exit_method","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Free response. This endpoint is not payment-gated."}},"security":[],"summary":"Fetch exit method: exit method from the agentfeed api","tags":["agentfeed","free"]}},"/api/forecast-record":{"get":{"description":"Free. forecast record.","operationId":"get_forecast_record","responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Free response. This endpoint is not payment-gated."}},"security":[],"summary":"Fetch forecast record: forecast record from the agentfeed api","tags":["agentfeed","free"]}}},"components":{}}