{"openapi": "3.1.0", "info": {"title": "Crypto Resources Agent Intelligence", "version": "1.1.0", "description": "Market intelligence for trading agents on Binance and Bybit USDT perpetuals. Find unusual conditions with scan_market, then pull a filtered or full Trap Radar dump. Evidence of what the tape is doing — not a forecast and not investment advice. Recommended flow: 1) get_supported_markets — confirm the market and available indicator filters. 2) get_market_metrics — optional free 15m pulse on one ticker. 3) get_market_context — optional, only when regime changes how you read a scan. 4) scan_market — cheap filter; read reasons[], not just score. 5) get_instrument_state — depth on a candidate; pass indicators/windows to avoid the full map. 6) historical_validation — evidence only; insufficient sample is a valid 200. Full JSON examples: https://crypto-resources.com/agents/v0/examples.json. Market-state evidence, not investment advice.", "x-recommended-workflow": "1) get_supported_markets — confirm the market and available indicator filters. 2) get_market_metrics — optional free 15m pulse on one ticker. 3) get_market_context — optional, only when regime changes how you read a scan. 4) scan_market — cheap filter; read reasons[], not just score. 5) get_instrument_state — depth on a candidate; pass indicators/windows to avoid the full map. 6) historical_validation — evidence only; insufficient sample is a valid 200.", "x-data-freshness": "Live data (`data_mode: live`). Every live response includes `request_id`, `updated_at`, `freshness_seconds`, `ttl_seconds`, `is_stale`. `is_closed` means the event/candle finished; `is_stale` means the TTL expired. They are different. Some indicators include updated_at and is_closed. updated_at is the open time of the 1-minute candle included in that measurement. is_closed true means that 1-minute candle was already closed when the value was measured. Example: updated_at 2026-09-08T14:52:00Z with is_closed true means the last closed candle in this report is the 14:52 bar; freshness is 14:53:00 UTC. This is the candle clock, not delayed data.", "x-agent-payment-policy": "Do not spend USDC automatically. Require explicit user approval before signing any TransferWithAuthorization or retrying a paid call. Respect wallet spend limits, confirmation prompts, and your host application's payment policy. A 402 response is a quote, not permission to pay.", "x-api-key-policy": "Optional header X-CR-Api-Key (or X-Api-Key / Authorization: Bearer). Today the key is accepted but does not skip USDC — unpaid scan_market, get_market_context and get_instrument_state still return HTTP 402. Planned: an active Crypto Resources subscription will unlock paid tools without on-chain payment. Always call unpaid first: HTTP 200 means no USDC needed; HTTP 402 means follow x402."}, "servers": [{"url": "https://crypto-resources.com/agents"}], "paths": {"/v0/tools/get_supported_markets": {"get": {"operationId": "get_supported_markets", "summary": "Markets, tickers, indicator filters, scan conditions. Free. Alias of get_supported_symbols.", "parameters": [{"name": "exchange", "in": "query", "schema": {"type": "string", "enum": ["binance", "bybit"]}}], "responses": {"200": {"description": "Market catalog"}}}}, "/v0/tools/get_supported_symbols": {"get": {"operationId": "get_supported_symbols", "summary": "List live USDT perpetual tickers. Free — start here.", "parameters": [{"name": "exchange", "in": "query", "schema": {"type": "string", "enum": ["binance", "bybit"]}, "description": "Omit to receive both Binance and Bybit."}], "responses": {"200": {"description": "Ticker catalog", "content": {"application/json": {"example": {"market": "futures", "exchange": "binance", "count": 420, "symbols": ["BTCUSDT", "ETHUSDT"], "has_data": true, "data_mode": "live"}}}}, "429": {"description": "Rate limited", "content": {"application/json": {"example": {"error": "rate_limited", "message": "Too many requests"}}}}}}}, "/v0/tools/get_market_metrics": {"get": {"operationId": "get_market_metrics", "summary": "15m OI/price/CVD/RSI plus 30m VWAP deviation. Free — quick read on one ticker.", "description": "Live data (`data_mode: live`). Every live response includes `request_id`, `updated_at`, `freshness_seconds`, `ttl_seconds`, `is_stale`. `is_closed` means the event/candle finished; `is_stale` means the TTL expired. They are different. Some indicators include updated_at and is_closed. updated_at is the open time of the 1-minute candle included in that measurement. is_closed true means that 1-minute candle was already closed when the value was measured. Example: updated_at 2026-09-08T14:52:00Z with is_closed true means the last closed candle in this report is the 14:52 bar; freshness is 14:53:00 UTC. This is the candle clock, not delayed data.", "parameters": [{"name": "symbol", "in": "query", "required": true, "schema": {"type": "string", "example": "BTCUSDT"}}, {"name": "exchange", "in": "query", "schema": {"type": "string", "enum": ["binance", "bybit"], "default": "binance"}}], "responses": {"200": {"description": "15m metrics slice", "content": {"application/json": {"example": {"request_id": "6f1c2a0e-4b3d-4c8a-9e11-2b7a0c4d91aa", "updated_at": "2026-09-08T14:52:00Z", "freshness_seconds": 8, "ttl_seconds": 60, "is_stale": false, "exchange": "binance", "market": "futures", "symbol": "BTCUSDT", "metrics": {"price_delta": {"value": 0.42, "is_ready": true, "unit": "%", "window": "15m", "updated_at": "2026-09-08T14:52:00Z", "is_closed": true}, "oi_delta": {"value": -0.18, "is_ready": true, "unit": "%", "window": "15m", "updated_at": "2026-09-08T14:52:00Z", "is_closed": true}, "cvd_delta": {"value": 1.05, "is_ready": true, "unit": "%", "window": "15m", "updated_at": "2026-09-08T14:52:00Z", "is_closed": true}, "rsi": {"value": 54.2, "is_ready": true, "unit": "", "timeframe": "15m", "updated_at": "2026-09-08T14:52:00Z", "is_closed": true}, "vwap_dev": {"value": -0.12, "is_ready": true, "unit": "%", "window": "30m", "updated_at": "2026-09-08T14:52:00Z", "is_closed": true}}, "has_data": true, "data_mode": "live"}}}}, "404": {"description": "Unknown symbol", "content": {"application/json": {"example": {"error": "unknown_symbol", "message": "Unknown symbol FOOBAR on binance. This ticker is not in the live catalog. Call get_supported_symbols for the available list: GET https://crypto-resources.com/agents/v0/tools/get_supported_symbols?exchange=binance", "exchange": "binance", "symbol": "FOOBAR", "catalog_tool": "get_supported_symbols", "catalog_url": "https://crypto-resources.com/agents/v0/tools/get_supported_symbols?exchange=binance"}}}}, "429": {"description": "Rate limited", "content": {"application/json": {"example": {"error": "rate_limited", "message": "Too many requests"}}}}}}}, "/v0/tools/get_instrument_state": {"post": {"operationId": "get_instrument_state", "summary": "Full Trap Radar Pro state for one ticker. Paid: 0.01 USDC on Base.", "description": "Use this tool to read live Binance/Bybit USDT perpetual instrument state from Trap Radar Pro: open interest, price delta, CVD, RSI, VWAP deviation, liquidations and volume spike across every available window. Market-state evidence only, not investment advice.\n\nDo not spend USDC automatically. Require explicit user approval before signing any TransferWithAuthorization or retrying a paid call. Respect wallet spend limits, confirmation prompts, and your host application's payment policy. A 402 response is a quote, not permission to pay.\n\nWallet: EVM address on Base with USDC. Same address in JSON `wallet` and header `X-Agent-Wallet`. EIP-3009 signer must match.\n\nOptional header X-CR-Api-Key (or X-Api-Key / Authorization: Bearer). Today the key is accepted but does not skip USDC — unpaid scan_market, get_market_context and get_instrument_state still return HTTP 402. Planned: an active Crypto Resources subscription will unlock paid tools without on-chain payment. Always call unpaid first: HTTP 200 means no USDC needed; HTTP 402 means follow x402.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["symbol"], "properties": {"symbol": {"type": "string", "example": "BTCUSDT"}, "exchange": {"type": "string", "enum": ["binance", "bybit"], "default": "binance"}, "wallet": {"type": "string", "description": "0x payer address (Base). Required for 402 quote; must match payment signature."}, "indicators": {"type": "string", "description": "Optional family list: oi, price, cvd, rsi, vwap, volume_spike, liquidations, liquidations_usd, liquidations_oi", "example": "oi,cvd,liquidations_oi"}, "windows": {"type": "string", "description": "Optional windows, e.g. 15m,60m", "example": "15m,60m"}, "idempotency_key": {"type": "string"}}}, "example": {"exchange": "binance", "symbol": "BTCUSDT", "wallet": "0xYOUR_PAYER_ADDRESS", "indicators": "oi,cvd,liquidations_oi", "windows": "15m,60m"}}}}, "responses": {"402": {"description": "Payment quote (x402). Sign accepts[0], retry with X-Payment.", "content": {"application/json": {"example": {"x402Version": 1, "error": "PAYMENT_REQUIRED", "accepts": [{"scheme": "exact", "network": "base", "maxAmountRequired": "10000", "resource": "https://crypto-resources.com/agents/v0/tools/get_instrument_state", "description": "Full Trap Radar Pro instrument state for one perpetual. Market-state evidence, not investment advice.", "mimeType": "application/json", "payTo": "0x2BC6Fc80C7F6b27C3C83228d2031D78E73b4362e", "maxTimeoutSeconds": 60, "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "extra": {"name": "USD Coin", "version": "2", "cohort": "B", "price_usd": "0.01", "facilitator": "https://facilitator.payai.network"}}], "real": {"instruction": "Sign accepts[0] as EIP-712 TransferWithAuthorization on network Base, USDC contract in accepts[0].asset, domain name/version from accepts[0].extra. Retry the same HTTP request with X-Payment containing the signed x402 payload.", "retry_headers": {"X-Agent-Wallet": "0xYOUR_PAYER_ADDRESS"}}}}}}, "200": {"description": "Filter row plus every indicator window/timeframe.", "content": {"application/json": {"example": {"request_id": "6f1c2a0e-4b3d-4c8a-9e11-2b7a0c4d91aa", "updated_at": "2026-09-08T14:52:00Z", "freshness_seconds": 8, "ttl_seconds": 60, "is_stale": false, "exchange": "binance", "market": "futures", "symbol": "BTCUSDT", "filter": {"symbol": "BTCUSDT", "exchange": "binance", "last_price": 64250.5, "volume_24h_usd": 1500000000, "funding_rate": 0.0001, "age_days": 1200.5}, "indicators": {"rsi_15m": {"rule": "rsi_15m", "indicator": "rsi", "window": "15m", "unit": "", "value": 54.2, "is_ready": true, "updated_at": "2026-09-08T14:52:00Z", "is_closed": true}, "oi_15m_delta_pct": {"rule": "oi_15m_delta_pct", "indicator": "oi", "window": "15m", "unit": "%", "value": -0.18, "is_ready": true, "updated_at": "2026-09-08T14:52:00Z", "is_closed": true}, "volume_spike_120m_ratio": {"rule": "volume_spike_120m_ratio", "indicator": "volume_spike", "window": "120m", "unit": "x", "value": null, "is_ready": false, "updated_at": null, "is_closed": false}}, "indicator_count": 130, "ready_count": 98, "has_data": true, "data_mode": "live", "payment": {"mode": "x402", "rail": "x402", "price_usd": "0.01", "wallet": "0xYOUR_PAYER_ADDRESS", "transaction": "0x…", "network": "base"}, "selection": {"families": ["all"], "windows": ["all"]}}}}}, "429": {"description": "Rate limited", "content": {"application/json": {"example": {"error": "rate_limited", "message": "Too many requests"}}}}}}}, "/v0/tools/get_market_context": {"post": {"operationId": "get_market_context", "summary": "Optional market-wide regime. Paid 0.005 USDC.", "description": "Skip unless regime changes how you read a scan. Unpaid → 402.", "requestBody": {"content": {"application/json": {"example": {"exchange": "binance", "horizon": "15m", "wallet": "0xYOUR_PAYER_ADDRESS"}}}}, "responses": {"402": {"description": "Payment quote", "content": {"application/json": {"example": {"x402Version": 1, "error": "PAYMENT_REQUIRED", "accepts": [{"scheme": "exact", "network": "base", "maxAmountRequired": "5000", "resource": "https://crypto-resources.com/agents/v0/tools/get_market_context", "description": "Full Trap Radar Pro instrument state for one perpetual. Market-state evidence, not investment advice.", "mimeType": "application/json", "payTo": "0x2BC6Fc80C7F6b27C3C83228d2031D78E73b4362e", "maxTimeoutSeconds": 60, "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "extra": {"name": "USD Coin", "version": "2", "cohort": "B", "price_usd": "0.005", "facilitator": "https://facilitator.payai.network"}}], "real": {"instruction": "Sign accepts[0] as EIP-712 TransferWithAuthorization on network Base, USDC contract in accepts[0].asset, domain name/version from accepts[0].extra. Retry the same HTTP request with X-Payment containing the signed x402 payload.", "retry_headers": {"X-Agent-Wallet": "0xYOUR_PAYER_ADDRESS"}}}}}}, "200": {"description": "Regime snapshot", "content": {"application/json": {"example": {"request_id": "6f1c2a0e-4b3d-4c8a-9e11-2b7a0c4d91aa", "updated_at": "2026-09-08T14:52:00Z", "freshness_seconds": 8, "ttl_seconds": 60, "is_stale": false, "exchange": "binance", "market": "futures", "horizon": "15m", "regime": "mixed", "btc": {"symbol": "BTCUSDT", "has_data": true, "metrics": {"price_delta": {"value": 0.42, "is_ready": true, "unit": "%", "window": "15m"}, "oi_delta": {"value": -0.18, "is_ready": true, "unit": "%", "window": "15m"}}}, "breadth": {"tickers": 420, "oi_up": 210, "oi_down": 180, "avg_oi_delta_pct": 0.21}, "has_data": true, "data_mode": "live", "note": "Background only. Call scan_market for ticker-level reasons.", "payment": {"mode": "x402", "rail": "x402", "price_usd": "0.005", "network": "base"}}}}}}}}, "/v0/tools/scan_market": {"post": {"operationId": "scan_market", "summary": "Market-wide filter with reasons. Paid 0.005 USDC.", "description": "Read reasons[], not only score. Empty results is HTTP 200. Unpaid → 402.", "requestBody": {"content": {"application/json": {"example": {"exchange": "binance", "horizon": "15m", "condition": "divergence", "limit": 10, "wallet": "0xYOUR_PAYER_ADDRESS"}}}}, "responses": {"402": {"description": "Payment quote", "content": {"application/json": {"example": {"x402Version": 1, "error": "PAYMENT_REQUIRED", "accepts": [{"scheme": "exact", "network": "base", "maxAmountRequired": "5000", "resource": "https://crypto-resources.com/agents/v0/tools/scan_market", "description": "Full Trap Radar Pro instrument state for one perpetual. Market-state evidence, not investment advice.", "mimeType": "application/json", "payTo": "0x2BC6Fc80C7F6b27C3C83228d2031D78E73b4362e", "maxTimeoutSeconds": 60, "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "extra": {"name": "USD Coin", "version": "2", "cohort": "B", "price_usd": "0.005", "facilitator": "https://facilitator.payai.network"}}], "real": {"instruction": "Sign accepts[0] as EIP-712 TransferWithAuthorization on network Base, USDC contract in accepts[0].asset, domain name/version from accepts[0].extra. Retry the same HTTP request with X-Payment containing the signed x402 payload.", "retry_headers": {"X-Agent-Wallet": "0xYOUR_PAYER_ADDRESS"}}}}}}, "200": {"description": "Ranked tickers", "content": {"application/json": {"example": {"request_id": "6f1c2a0e-4b3d-4c8a-9e11-2b7a0c4d91aa", "updated_at": "2026-09-08T14:52:00Z", "freshness_seconds": 8, "ttl_seconds": 60, "is_stale": false, "exchange": "binance", "market": "futures", "horizon": "15m", "condition": "divergence", "condition_version": "cr-scan-1.1.0", "count": 1, "scanned": 420, "results": [{"symbol": "ARCUSDT", "condition": "divergence", "score": 0.72, "reasons": ["price +3.2% / 15m", "OI +7.4% / 15m", "CVD -48% / 15m (-2.1σ)"], "metrics": {"price_delta": 3.2, "oi_delta": 7.4, "cvd_delta": -48.0}}], "has_data": true, "data_mode": "live", "score_note": "score is relative unusualness in this universe, not a probability.", "payment": {"mode": "x402", "rail": "x402", "price_usd": "0.005", "network": "base"}}}}}}}}, "/v0/tools/historical_validation": {"get": {"operationId": "historical_validation", "summary": "Evidence layer. insufficient sample is a valid 200. GET or POST.", "parameters": [{"name": "condition", "in": "query", "schema": {"type": "string", "enum": ["anomaly", "divergence", "trap", "liquidation"]}}, {"name": "symbol", "in": "query", "schema": {"type": "string"}}, {"name": "exchange", "in": "query", "schema": {"type": "string", "enum": ["binance", "bybit"]}}, {"name": "lookback_days", "in": "query", "schema": {"type": "integer", "default": 90}}], "responses": {"200": {"description": "Observed sample or insufficient=true", "content": {"application/json": {"example": {"request_id": "6f1c2a0e-4b3d-4c8a-9e11-2b7a0c4d91aa", "condition": "divergence", "condition_version": "cr-scan-1.1.0", "definition_hash": "cr-scan-1.1.0", "data_scope": {"exchange": "any", "market": "futures", "symbol": "universe", "horizons": "any"}, "lookback_days": 90, "overlap_policy": "distinct_scan_hits", "sample": {"size": 0, "insufficient": true, "min_required": 30}, "updated_at": "2026-09-08T14:52:00Z", "freshness_seconds": 0, "is_stale": false, "note": "Insufficient observed sample — valid API response, not an error. Forward-return statistics will appear after enough scan_market hits accumulate. This is not a prediction."}}}}}}}, "/v0/examples.json": {"get": {"operationId": "examples", "summary": "Full JSON examples: responses, x402 payment, errors."}}, "/mcp": {"post": {"operationId": "mcp", "summary": "MCP JSON-RPC: tools/list, tools/call."}}}, "externalDocs": {"description": "x402 payment protocol", "url": "https://www.x402.org/"}}