# Sharpe API: Full Reference > Crypto derivatives and market data API. This document describes every endpoint, parameter, type, enum value, and response schema. > Updated: 2026-06-10 ## Base URL - Authenticated API: `https://www.sharpe.ai/api/v1/` - Free API (no auth): `https://www.sharpe.ai/api/` ## Authentication All `/v1/` endpoints require an API key except `/v1/health`, `/v1/meta/coverage`, and `/v1/meta/datasets`. Method 1, Bearer token (recommended): Header: `Authorization: Bearer sk_live_...` Method 2, API key header: Header: `X-API-Key: sk_live_...` Query-string API keys are rejected by default because URLs are commonly stored in logs, browser history, analytics tools, and referrer headers. If both supported methods are present, they are checked in order: Bearer token > X-API-Key header. The first one found is used. Key format: `sk_live_` prefix + 48 hex characters = 56 characters total. Generate a key from the [authentication docs](https://www.sharpe.ai/docs/authentication). ## Response Envelope Every successful response uses this envelope: ``` { "data": , // Shape varies by endpoint "meta": { "request_id": string, // e.g. "req_a1b2c3d4e5f6g7h8i9j0" "timestamp": string, // ISO 8601, e.g. "2026-03-27T07:45:00Z" "elapsed_ms": integer // Server-side processing time in milliseconds } } ``` Paginated endpoints add a `pagination` field: ``` { "data": [], "pagination": { "cursor": string | null, // Pass as ?cursor= to get next page. null = no more pages. "has_more": boolean, "total": integer | null // Total record count when available }, "meta": { "request_id": string, "timestamp": string, "elapsed_ms": integer } } ``` ## Error Format All errors follow RFC 9457 (Problem Details for HTTP APIs). The response body is a flat JSON object (not nested inside an `error` wrapper): ``` { "type": string, // URI identifying the error, e.g. "https://www.sharpe.ai/errors/invalid_parameter" "title": string, // Short human-readable summary, e.g. "Invalid Parameter" "status": integer, // HTTP status code, e.g. 400 "detail": string, // Human-readable explanation specific to this request "request_id": string, // Unique request ID for support, e.g. "req_abc123def456ghij" "doc_url": string, // Link to relevant docs page, e.g. "https://www.sharpe.ai/docs/errors#error-codes" "suggested_action": string // Actionable guidance for resolving the error, e.g. "Check the parameter value against the endpoint documentation." } ``` ### Error Codes | type slug | status | meaning | |--------------------------|--------|-------------------------------------------------| | invalid_api_key | 401 | Key is malformed or revoked | | expired_api_key | 401 | Key has expired | | insufficient_scope | 403 | Key lacks required scope for this endpoint | | monthly_quota_exceeded | 429 | Monthly request quota exhausted (retryable) | | invalid_parameter | 400 | Query parameter has invalid value | | missing_parameter | 400 | Required query parameter is missing | | rate_limit_exceeded | 429 | Per-minute rate limit exceeded | | resource_not_found | 404 | Endpoint or resource does not exist | | internal_error | 500 | Unexpected server error | | upstream_error | 502 | Dependency (database, exchange API) failed | | service_unavailable | 503 | Temporary maintenance or data freshness issue | ### Retry Guidance - 4xx (except 429): Do not retry. Fix the request. - 429 rate_limit_exceeded: Wait for the `Retry-After` seconds, or until the Unix timestamp in `X-RateLimit-Reset`, then retry. - 429 monthly_quota_exceeded: The monthly quota is exhausted, not the per-minute window. `Retry-After` holds the seconds until the quota resets (`X-Quota-Reset`), which can be days. Queue the work instead of spinning on retries. - 5xx: Exponential backoff. Wait 1s, 2s, 4s, 8s, 16s (max 30s, max 5 retries). Unknown `/v1/` paths: an authenticated request to a path with no route returns 404 `resource_not_found`, so a wrong path is distinguishable from a wrong key. Without a credential the same path returns 401, so route existence is never disclosed anonymously. ## Rate Limits Limits are per API key, enforced as requests per minute (RPM) and requests per month at one of four internal plan tiers. Every API key is currently issued on the Free tier; there are no paid plans today. | Tier | RPM | Monthly limit | |------------|-------|---------------| | Free | 30 | 10,000 | | Analyst | 500 | 500,000 | | Pro | 1,000 | 3,000,000 | | Enterprise | 5,000 | 50,000,000 | Higher-tier keys are granted on request: contact team@sharpe.ai. ### Rate Limit Headers (included in every response) | Header | Type | Description | |----------------------|---------|------------------------------------------------| | X-RateLimit-Limit | integer | Max requests per minute for your tier | | X-RateLimit-Remaining| integer | Requests remaining in current 1-minute window | | X-RateLimit-Reset | integer | Unix timestamp (seconds) when window resets | | X-Request-Id | string | Unique request identifier for support reference | --- ## v1 Endpoint Inventory Canonical machine-readable contract: [OpenAPI spec](https://www.sharpe.ai/openapi.json). Current v1 endpoint inventory: | Method | Path | Auth | Summary | |--------|------|------|---------| | POST | `/v1/analytics/query` | API key | Governed analytics query | | GET | `/v1/arbitrage/cex-spot-transfer` | API key | CEX spot-transfer arbitrage scanner | | GET | `/v1/arbitrage/cross-exchange` | API key | Cross-exchange arbitrage | | GET | `/v1/arbitrage/dated-futures-basis` | API key | Dated futures basis scanner | | GET | `/v1/arbitrage/dex-scanner/preview` | API key | Preview validated DEX scanner gross-spread candidates | | GET | `/v1/arbitrage/futures-calendar-spread` | API key | Futures calendar spread scanner | | GET | `/v1/arbitrage/perp-dated-carry` | API key | Perp versus dated futures carry scanner | | GET | `/v1/arbitrage/spot-perp` | API key | Spot-perp arbitrage | | GET | `/v1/correlation/matrix` | API key | Correlation matrix | | GET | `/v1/dexscreener/data` | API key | DEX Screener data | | GET | `/v1/dexscreener/security` | API key | DEX Screener token security | | GET | `/v1/ecosystems/data` | API key | Ecosystems data | | GET | `/v1/funding/rates` | API key | Funding rates | | GET | `/v1/funding/settlement` | API key | Funding fee settlement | | GET | `/v1/global/overview` | API key | Global market overview | | GET | `/v1/rwa-perps/rates` | API key | RWA perp funding rates | | GET | `/v1/futures/coins` | API key | Available futures coins | | GET | `/v1/futures/data` | API key | Futures chart data | | GET | `/v1/gem-finder/data` | API key | Gem finder | | GET | `/v1/health` | Public | Health check | | GET | `/v1/heatmap/data` | API key | Market heatmap | | GET | `/v1/insider-selling/data` | API key | Insider selling pressure | | GET | `/v1/listings/data` | API key | New listings hub data | | GET | `/v1/listings/events` | API key | Canonical listing events | | GET | `/v1/listings/exchanges` | API key | New listings exchange registry | | GET | `/v1/listings/recent` | API key | Recent new listings | | GET | `/v1/market-cap/search` | API key | Market cap search | | GET | `/v1/market/derivatives-overview` | API key | Market-wide derivatives overview | | GET | `/v1/memecoins/data` | API key | Memecoins data | | GET | `/v1/memecoins/launches` | API key | Memecoin launches | | GET | `/v1/meta/coverage` | Public | API data coverage | | GET | `/v1/meta/datasets` | Public | Data Ocean dataset catalog | | GET | `/v1/mindshare/data` | API key | Mindshare data | | GET | `/v1/narratives/data` | API key | Narratives data | | GET | `/v1/news/curated` | API key | Curated news stories | | GET | `/v1/news/feed` | API key | News feed | | GET | `/v1/price-prediction/data` | API key | Price prediction | | GET | `/v1/pump-dump/data` | API key | Pump and dump detection | | GET | `/v1/rug-check/security` | API key | Rug Check token security | | GET | `/v1/rug-check/trending` | API key | Rug Check trending tokens | | GET | `/v1/stablecoins/data` | API key | Stablecoins data | | GET | `/v1/token-scanner/scan` | API key | Token scanner | | GET | `/v1/tracker/market-overview` | API key | Market overview | | GET | `/v1/usage` | API key | API usage and quota | | GET | `/v1/web-traffic/data` | API key | Web traffic data | ### POST /v1/analytics/query Governed analytics query over Sharpe Data Ocean datasets. The route accepts only registered dataset IDs, whitelisted fields, whitelisted filter operators, whitelisted sort fields, bounded limits, and opaque cursors. No arbitrary SQL or table names are accepted. Authentication: API key required. During the initial rollout the route is gated by `SHARPE_DATA_OCEAN_V1_ENABLED`. Request JSON: ``` { "dataset": "funding_rates_current" | "funding_accumulated" | "stablecoins_metrics", "select": [string], // Optional field ids from /v1/meta/datasets "filters": [ { "field": string, "op": "eq" | "in" | "gte" | "lte", "value": string | number | boolean | [string | number | boolean] } ], "sort": [{ "field": string, "direction": "asc" | "desc" }], "limit": integer, // 1..500; dataset-specific caps may be lower "cursor": string | null } ``` Response (200): ``` { "data": { "dataset_id": string, "rows": [object], // Row datasets "snapshot": object, // Snapshot datasets "data_meta": { "dataset_id": string, "source": [string], "as_of": string | null, "freshness_status": "fresh" | "stale" | "unknown", "cache_status": "live" | "hit" | "miss", "runtime_status": "ok" | "degraded", "warnings": [string], "truncated": boolean }, "pagination": { "cursor": string | null, "has_more": boolean } }, "meta": { "request_id": string, "timestamp": string, "elapsed_ms": integer } } ``` Cache: `no-store`. Errors: 400, 401, 403, 404, 429, 502, 503, 500. --- ### GET /v1/health Health check. Returns service status and database connectivity. Authentication: None required. Parameters: None. Response (200): ``` { "status": "healthy" | "degraded", "version": "v1", "checks": { "database": boolean }, "timestamp": string // ISO 8601 } ``` Response (503): Same schema with `status: "degraded"`. --- ### GET /v1/usage API usage and quota information for the authenticated key. Authentication: Required. Parameters: None. Response (200): ``` { "data": { "plan": { "tier": "free" | "analyst" | "pro" | "enterprise", "rpm": integer, // Requests per minute limit "monthly_limit": integer // Monthly request quota }, "rate_limit": { "requests_per_minute": integer }, "quota": { "used": integer, // Requests used this billing period "limit": integer, // Total monthly quota "remaining": integer, // Requests remaining "resets_at": string // ISO 8601 timestamp of next reset }, "last_24h": { "total_requests": integer, "by_endpoint": { "": { "count": integer, "avg_response_ms": integer, "errors": integer } } } }, "meta": { "request_id": string, "timestamp": string, "elapsed_ms": integer } } ``` Errors: 401 Unauthorized, 429 Rate Limited, 500 Internal Error. --- ### GET /v1/funding/rates Perpetual funding rates across 33 exchanges. The book is not crypto-only: tokenized equity, commodity, index and FX perps trade on the same venues and are returned by default. Use `asset_class` to narrow. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |-------------|-------|---------|----------|-----------|-------------| | type | query | string | no | "current" | Type of data. Enum: `current`, `accumulated`, `history`. | | coin | query | string | depends | -- | Base coin ticker (e.g. BTC, ETH). Optional filter for current/accumulated; required when type=history. | | days | query | integer | no | 30 | Days of history (type=history only). Min: 1, Max: 1095. | | asset_class | query | string | no | -- | Underlying category filter. Enum: `crypto`, `equity`, `commodity`, `fx`, `index`. Unfiltered by default. Applies to current and accumulated. | | margin | query | string | no | -- | Collateral convention filter. Enum: `linear`, `inverse`. Unfiltered by default. Applies to current and accumulated. | | limit | query | integer | no | -- | Max records per page. Min: 1, Max: 5000. | | cursor | query | string | no | -- | Opaque pagination cursor from previous response. | Behavior by type: - `current`: Returns the latest funding-rate snapshot, optionally filtered by `coin`, `asset_class` and `margin`. - `accumulated`: Returns accumulated funding and settlement counts over 1d, 7d, 30d, 90d, and 1y windows, optionally filtered by `coin`, `asset_class` and `margin`. - `history`: Returns time-series funding rate history for a single coin. Requires `coin` param. Response (200): Success envelope or paginated envelope. Data shape for type=current (each item): ``` { "exchange": string, // Venue display name, exact case, e.g. "Binance", "Gate.io", "BitMEX", "edgeX" "symbol": string, // e.g. "BTCUSDT" "base_coin": string, // e.g. "BTC" "rate": number, // Fraction charged once per interval_hours, e.g. 0.0001 = 0.01% "predicted_rate": number|null, // Venue-published next rate when available "interval_hours": integer, // Per-contract funding interval: 1, 2, 4, 8 or 24. Never assume 8. "next_funding_time": string|null, // ISO 8601, null on venues that do not publish it "updated_at": string, // ISO 8601 "margin_type": string, // "linear" or "inverse" "asset_class": string, // "crypto", "equity", "commodity", "fx" or "index" "open_interest": number|null, // USD open interest for (exchange, base_coin) when a futures row matches; null otherwise, never 0 "market_cap_rank": integer|null, // Market-cap rank of the base coin; null when unranked "age_seconds": number|null, // Row age at response time; null when updated_at was unparseable "data_source": string, // "supabase" or "live" "freshness_sla_seconds": integer, // Stale threshold for this payload (2700) "is_stale": boolean // true when age_seconds exceeds the SLA or is null } ``` `rate` is a fraction, not a percent, and it is charged once per `interval_hours`. Annualize with `rate * (24 / interval_hours) * 365`. A fixed 8-hour assumption misprices every 1h, 2h, 4h and 24h contract. Errors: 400, 401, 403, 429, 500. --- ### GET /v1/funding/settlement How many dollars actually changed hands at funding settlement, and which side paid it. `fee_usd = open_interest_usd * rate`, priced at the open interest recorded at or before each settlement, never re-priced at today's OI. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |----------|-------|---------|----------|-----------|-------------| | window | query | string | no | "current" | Settlement window. Enum: `current`, `1d`, `3d`, `7d`. `current` is the next (forward-looking) settlement, priced live and labelled `estimated`. | | class | query | string | no | "all" | Asset-class scope. Enum: `all`, `crypto`, `rwa`. `rwa` is every non-crypto `asset_class` (equity, commodity, fx, index). Not a narrower `asset_class` filter -- this plus the per-row `asset_class` field answers every question a second parameter could. | | coin | query | string | no | -- | Comma-separated base coin tickers, e.g. BTC,ETH. Unfiltered by default. | | exchange | query | string | no | -- | Filter to coins settling on one venue. Slug, display name, or ccxt id. Unrecognized value returns 400. | | limit | query | integer | no | 100 | Max rows returned. Min: 1, Max: 1000. | | offset | query | integer | no | 0 | Zero-based row offset for pagination. | | sort | query | string | no | -- | Sort field for the selected window, optionally prefixed with "-" for descending. Enum: `base_coin`, `net`, `long_paid`, `short_paid`, `open_interest_usd` (each also accepted with a leading "-"). | | expand | query | string | no | -- | Set to `venues` to include each row's per-venue breakdown. Omitted by default. | Response (200): Success envelope. `data` is an object (not a bare array) so that `totals` travels with every response: ``` { "data": { "rows": [ { ...SettlementRow } ], "totals": { "current": {...}, "1d": {...}, "3d": {...}, "7d": {...} }, "settlementMeta": { "class": string, "coins": integer, "updated_at": string, "total": integer, "limit": integer, "offset": integer }, "pagination": { "cursor": string|null, "has_more": boolean, "total": integer } | null }, "meta": { "request_id": string, "timestamp": string, "elapsed_ms": integer } } ``` Each window value: ``` { "net": number|null, // long_paid - short_paid "long_paid": number|null, // >= 0 "short_paid": number|null, // >= 0 "estimated": boolean, // current window only "rate_source": "predicted"|"current"|null, // current window only "coverage_ratio": number, // realised windows only, 0-1 "partial": boolean // realised windows only, true below the 0.8 coverage threshold } ``` `net` is never returned without both legs: a $0 net can conceal $50M flowing each way. Null means an unpriced/absent contract, never a zero flow. `totals` is scoped to the selected `class` only: `crypto` + `rwa` reconciles exactly to `all`, in every window, for `net`, `long_paid` and `short_paid`. Venue coverage: 29 of the 33 venues in Sharpe's funding book run an open-interest fetcher capable of pricing a dollar figure here; 25 are currently verified and contributing. `tradeXYZ`, `Lighter`, `Variational` and `Aster` are withheld -- each currently reads at roughly half its corroborated open interest, a discrepancy still under investigation. Their funding rates are unaffected and still appear on `/v1/funding/rates`; only the settlement dollar figures here are. Errors: 400, 401, 403, 429, 500, 502. --- ### GET /v1/global/overview Whole-market derivatives board. Returns market-wide metrics (total open interest with its crypto-versus-RWA split, 24h liquidations, average Wilder RSI(14) across the top 100 crypto perps by open interest, the Altcoin Season Index, and open interest by asset class) plus a ranked per-asset row table for the requested tab. Liquidations are crypto-only: no RWA perp venue publishes a liquidation feed. Market cap is absent on the preipo and index tabs. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | | ------ | ----- | ------- | -------- | --------- | ----------- | | tab | query | string | No | crypto | Universe to return rows for: crypto, equity, preipo, etf, index, commodity, fx. | | limit | query | integer | No | -- | Maximum rows per page (1-1000). Enables cursor pagination. | | cursor | query | string | No | -- | Opaque pagination cursor from a previous response. | ### GET /v1/rwa-perps/rates Funding and carry for real-world-asset perpetuals (RWA perps: stocks, pre-IPO, ETFs, indices, commodities, FX) across 19 venues: CEXs, perp DEXs, Hyperliquid HIP-3 builder markets, and the rollover venues Ostium and Avantis. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |--------|-------|---------|----------|-----------|-------------| | type | query | string | no | "current" | Type of data. Enum: `current`, `history`, `stats`. | | symbol | query | string | depends | -- | Underlying equity ticker (e.g. TSLA, NVDA). Required when type=history. GOOG and GOOGL are distinct share classes. | | venue | query | string | no | -- | Filter to one venue (Binance, Bybit, OKX, Bitget, Gate, Kraken, Coinbase, Aster, Lighter, Extended, GRVT, ApeX, Pacifica, Orderly, Ostium, Avantis, or a Hyperliquid HIP-3 builder market). Registry-driven, not a fixed enum. | | days | query | integer | no | 7 | Days of history (type=history only). Min: 1, Max: 90. | | limit | query | integer | no | -- | Max records per page. Min: 1, Max: 5000. | | cursor | query | string | no | -- | Opaque pagination cursor from previous response. | Behavior by type: - `current`: Latest funding/rollover snapshot per venue market. `funding_apr` annualizes each venue's own settlement interval; borrow-based stock markets report both-sides rollover in `borrow_apr_annual`, excluded from funding spreads. - `history`: Session-tagged settlement time-series for one symbol (Hyperliquid + Kraken; Ostium has no per-settlement feed). Requires `symbol`. - `stats`: Best carry, top cross-venue funding spread, weekend premium (7d), and tracked open interest. Response (200): Success envelope or paginated envelope. Data shape for type=current (each item): ``` { "venue": string, // Registry-driven venue name "market": string, // venue-native id, e.g. "xyz:TSLA", "PF_TSLAXUSD" "symbol": string, // e.g. "TSLA" "mechanism": string, // "standard" | "builder_set" | "funding_plus_borrow" "funding_rate": number|null, // fraction per interval; null when venue has no periodic funding "interval_hours": number, // native market settlement interval "funding_apr": number|null, // annualized funding fraction "borrow_apr_annual": number|null, // Borrow-based venue rollover, both-sides cost "mark_price": number|null, "oracle_price": number|null, "open_interest_usd": number|null, "next_funding_time": string|null, // ISO 8601 "updated_at": string, // ISO 8601 "is_stale": boolean // true after 90 minutes without a sync } ``` Data shape for type=history (each item): ``` { "venue": string, "market": string, "symbol": string, "rate": number, // settled funding fraction for the interval "interval_hours": number, "session_phase": string, // "market" | "after_hours" | "weekend" | "holiday" (America/New_York) "settled_at": string // ISO 8601 } ``` Errors: 400, 401, 403, 429, 500. --- ### GET /v1/futures/data Futures chart time-series data. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |-----------|-------|---------|----------|---------|-------------| | chart | query | string | yes | -- | Chart identifier. See chart list below. | | coin | query | string | no | "BTC" | Base coin ticker. | | timeframe | query | string | no | "3M" | Lookback window. Enum: `1W`, `2W`, `1M`, `3M`, `6M`, `1Y`, `3Y`. | | exchanges | query | string | no | -- | Comma-separated exchange names (e.g. "Binance,Bybit,OKX"). | | limit | query | integer | no | -- | Max data points per page. Min: 1, Max: 10000. | | cursor | query | string | no | -- | Opaque pagination cursor. | Available chart values: - perp-dislocation: Perp premium, funding APR, and open-interest dislocation - funding-cost -- OI-weighted funding cost across venues - crowding-risk -- Funding/OI/long-share/price crowding score with complete-input coverage - flow-confirmation -- Taker-flow CVD, price, and open-interest confirmation - carry-curve -- Perp funding plus dated-futures basis curve - perpetual-price -- OHLCV candlestick data - funding-rate -- Historical funding rate time-series - oi-snapshot -- Open interest snapshot across exchanges - oi-change -- Open interest change over time - oi-daily-change -- Daily OI delta - oi-stacked -- Stacked OI by exchange - oi-volume -- OI vs volume comparison - volume-snapshot -- Current 24h volume snapshot by exchange - volume-history -- Historical dollar volume by exchange - liquidations -- Long and short liquidation events - annualized-basis -- Rolling 3-month dated-futures annualized basis - term-structure -- Futures term structure (quarterly expiries) - long-short-ratio -- Global long/short ratio - top-trader-ls -- Top trader long/short ratio - cvd -- Cumulative volume delta - returns-session -- Returns by trading session (Asia, Europe, US) - returns-heatmap -- Returns heatmap by hour and day - returns-hour -- Hourly returns distribution - returns-day -- Daily returns distribution Supported exchanges: Binance, Bybit, OKX, Deribit, Hyperliquid (defaults), Bitget, Gate.io, KuCoin, MEXC, HTX (optional). Response (200): Success envelope. Data shape varies by chart type. Errors: 400, 401, 403, 429, 500. --- ### GET /v1/futures/coins List of coins with available futures data. Authentication: Required. Parameters: None. Response (200): ``` { "data": { "coins": [ { "baseCoin": string, // e.g. "BTC" "displayName": string, // e.g. "BTC" "hasOI": boolean, // Open interest data available "hasFunding": boolean, "hasLiquidations": boolean, "hasLongShort": boolean, // Long/short ratio data available "hasCVD": boolean, "hasBasis": boolean, // Dated-futures basis available "venueCount": integer, "venues": [string], "marketCapRank": integer|null } ] }, "meta": { "request_id": string, "timestamp": string, "elapsed_ms": integer } } ``` Errors: 401, 429, 500. --- ### GET /v1/heatmap/data Market heatmap for coins, narratives, or ecosystems. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |----------|-------|--------|----------|-----------|-------------| | mode | query | string | no | "coins" | Grouping mode. Enum: `coins`, `narratives`, `ecosystems`. | | category | query | string | no | "top-100" | One of 34 category slugs (e.g. top-100, defi, layer-1, meme-token, ethereum-ecosystem, solana-ecosystem). The legacy top-100 slug returns the Top 50 universe. | Response (200): Success envelope. Data includes tokens sized by market cap with 1h, 24h, 7d, 30d, 1y, 3y performance. Errors: 400, 401, 403, 429, 500. --- ### GET /v1/correlation/matrix NxN price correlation matrix for crypto and TradFi assets. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |--------|-------|--------|----------|---------|-------------| | period | query | string | no | "30d" | Lookback period. Enum: `30d`, `90d`, `1y`, `3y`. | | ids | query | string | no | default set | Comma-separated asset IDs. Crypto: CoinGecko IDs (bitcoin, ethereum, solana). TradFi: short IDs (sp500, gold, nvda). Max 10. Default: bitcoin,ethereum,solana,sp500,gold. | Response (200): Success envelope containing: ``` { "data": { "assets": [string], // Ordered list of asset IDs "matrix": [[number]], // NxN Pearson correlation coefficients (-1 to 1) "dataPoints": integer // Number of data points used }, "meta": { ... } } ``` Errors: 400, 401, 403, 429, 500. --- ### GET /v1/tracker/market-overview Broad market overview with global metrics. Authentication: Required. Parameters: None. Response (200): Success envelope containing BTC/ETH price and 24h change, total market cap and volume, BTC dominance, total market-cap change, and Fear & Greed. Auxiliary source fields may be null when unavailable. Errors: 401, 403, 429, 500, 502, 503. --- ### GET /v1/market-cap/search Search crypto and supported TradFi assets by name or ticker. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------|-------|--------|----------|---------|-------------| | q | query | string | yes | -- | Search query. Min length: 2, Max length: 100. | Response (200): Success envelope containing up to 20 matching assets with asset class, market cap, nullable price and 24h change, plus nullable crypto FDV and estimated ATH fields. Errors: 400, 401, 403, 429, 500. --- ### GET /v1/gem-finder/data Market-ranked token screening data. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |--------|-------|---------|----------|---------|-------------| | limit | query | integer | no | -- | Max tokens to return. Min: 1, Max: 1000. Omit for the complete cached payload. | | cursor | query | string | no | -- | Opaque, snapshot-bound pagination cursor. It expires when the cache refreshes. | Response (200): Success envelope containing market cap, nullable FDV and FDV/MCap ratio, volume, nullable price and market-cap changes, circulating supply, ATH and ATL history, the preferred chain plus every supported chain the asset is deployed on, observed exchange availability, quote freshness, and enrichment coverage. Assets whose upstream quote is more than 24 hours old are excluded as no-longer-trading. Ambiguous same-ticker assets do not receive symbol-only exchange attribution. No wallet signal or proprietary token score is returned. Errors: 400, 401, 403, 429, 500, 502, 503. --- ### GET /v1/news/feed Aggregated crypto news from 50+ sources. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |----------|-------|---------|----------|---------|-------------| | limit | query | integer | no | 200 | Max articles. Min: 1, Max: 500. | | offset | query | integer | no | 0 | Articles to skip for pagination. Min: 0. | | category | query | string | no | -- | Filter by news category. | | coin | query | string | no | -- | Filter by coin ticker. | | since | query | string | no | -- | ISO 8601 timestamp. Only return articles published after this time. | Response (200): Success envelope containing array of news articles. Errors: 400, 401, 403, 429, 500. --- ### GET /v1/price-prediction/data Deterministic directional scores with derivatives and momentum sub-signal breakdowns. Optional 7D/30D values are volatility-scaled heuristic scenarios, not calibrated targets or probabilities. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------|-------|--------|----------|---------|-------------| | coin | query | string | no | -- | Coin ticker to get predictions for. Omit for all coins. | Response (200): Success envelope containing directional scores and available sub-signal breakdowns across funding, OI, perp basis, CVD, long/short positioning, liquidations, RSI, EMA, positioning pressure, momentum exhaustion, and squeeze risk. Errors: 400, 401, 403, 429, 500. --- ### GET /v1/arbitrage/spot-perp Spot-perpetual funding rate arbitrage opportunities. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |-----------|-------|--------|----------|---------|-------------| | exchange | query | string | no | "all" | Filter by exchange name, or "all" for all exchanges. | | direction | query | string | no | "all" | Filter by perpetual-leg direction: `short` for positive funding capture or `long` for negative funding capture. Enum: `all`, `long`, `short`. | Response (200): Success envelope containing structurally executable funding-capture rows with verified spot or margin availability, diagnostic basis, gross APR, and fee-adjusted net APR. Errors: 400, 401, 403, 429, 500. --- ### GET /v1/arbitrage/cross-exchange Cross-exchange funding differentials across every funding venue (33) and asset class — crypto plus RWA perps (equity, commodity, FX, index; pairs never cross classes) — ranked by gross annualized funding differential (`apr`). `netFundingRate` is the per-period differential at `intervalHours` (the faster leg's cadence). Spread comes from real books where both legs expose one (`spreadSource` "book") and reference prices otherwise ("reference"); `netApr` (spread- and fee-adjusted, 30-day hold) is only present on book-priced rows. Unknown spread, open interest or volume are null, never zero. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |-----------|-------|--------|----------|---------|-------------| | exchanges | query | string | no | -- | Comma-separated list of venues to compare; omit for all 33. | | assetClass | query | string | no | all | "all", "crypto", or "rwa" (equity/commodity/FX/index perps). | | minOiUsd | query | number | no | 0 | Minimum smaller-leg open interest in USD; unknown OI fails a positive floor. | | minVolUsd | query | number | no | 0 | Minimum smaller-leg 24h volume in USD; unknown volume fails a positive floor. | Response (200): Success envelope with `apr` (gross), `netApr` (book-priced rows only), `netFundingRate` + `intervalHours`, `spreadRate` + `spreadSource`, per-leg open interest and 24h volume (nullable), and the next settlement timestamp. Errors: 400, 401, 403, 429, 500. --- ### GET /v1/narratives/data Analytics for 30 crypto narratives. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |-------------|-------|--------|----------|---------|-------------| | narrative | query | string | no | -- | Narrative slug for detail view. Omit for full list. | | correlation | query | string | no | -- | Set to "true" to include correlation data for the narrative's tokens. | | timeframe | query | string | no | -- | Timeframe for correlation data. | Available narrative slugs: layer-1, layer-2, defi, defai, ai-agents, depin, desci, gaming, dex-tokens, cex-tokens, lending, memes, nfts, oracles, privacy, rwa, stablecoins, restaking, liquid-staking, modular, socialfi, intent, prediction-markets, perps, bridges, account-abstraction, tap-to-earn, telegram-apps, zk, yield-farming. Response (200): Success envelope containing narrative-level market cap, volume, performance, social metrics, and optionally correlation data. Errors: 400, 401, 403, 429, 500. --- ### GET /v1/ecosystems/data Analytics for 23 blockchain ecosystems including TVL. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |---------------|-------|--------|----------|---------|-------------| | ecosystem | query | string | no | -- | Ecosystem slug for detail view. Omit for full list. | | correlation | query | string | no | -- | Set to "true" to include correlation data. | | timeframe | query | string | no | -- | Timeframe for correlation data. | | excludeNative | query | string | no | -- | Set to "true" to exclude the native token from aggregated metrics. | Available ecosystem slugs: ethereum, solana, bnb-chain, arbitrum, base, bitcoin, avalanche, optimism, cosmos, polkadot, sui, aptos, ton, tron, cardano, sonic, hyperliquid, berachain, sei, zksync, starknet, scroll, movement. Response (200): Success envelope containing ecosystem-level market cap, volume, TVL (from DeFi Llama), performance, and optionally correlation data. Errors: 400, 401, 403, 429, 500. --- ### GET /v1/memecoins/data Memecoin narrative data across grouped aggregate, theme, chain, and launchpad categories. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------------|-------|--------|----------|---------|-------------| | narrative | query | string | no | -- | Memecoin narrative slug. Omit for all narratives. | | historical | query | string | no | -- | Include historical data. Enum: `24h`, `7d`, `30d`, `1y`. | | coinHistory | query | string | no | -- | Include per-coin price history. Enum: `24h`, `7d`, `1m`, `1y`. | Available narrative slugs include dog-coins, cat-coins, frog-coins, ai-memes, trump-coins, celebrity-coins, solana-memes, base-memes, bnb-memes, bitcoin-memes, pump-fun-memes, ton-memes, tron-memes, sui-memes, desci-memes, commodities-memes, and sun-pump-memes. Response (200): Success envelope containing narrative-level market cap, market share, volume, freshness, coverage limits, calculation method, momentum kind, performance, and top tokens per narrative. Errors: 400, 401, 403, 429, 500. --- ### GET /v1/memecoins/launches Recently launched tokens from recognized memecoin launchpads, screened by age, liquidity, volume, and transaction count. Generic new DEX pairs are excluded. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------|----|------|----------|---------|-------------| | chains | query | string | no | solana,base,bsc,ethereum | Comma-separated chain ids. | | days | query | number | no | 7 | Launch lookback window from 1 to 30 days. | | limit | query | number | no | 80 | Maximum launch rows from 1 to 200. | | profile | query | string | no | balanced | Screening profile: `discovery`, `balanced`, or `strict`. | Response (200): Success envelope containing screened launch rows plus `coverage.status`, `successfulChains`, `failedChains`, and `classificationMethod=recognized_meme_launchpad`. Errors: 400, 401, 403, 429, 500, 503. --- ### GET /v1/market/derivatives-overview Market-wide derivatives snapshot aggregating OI and 8-hour-equivalent funding rates across all tracked exchanges and coins. Each funding observation is joined to OI at the same exchange + coin grain; the endpoint fails closed if either source dataset is unavailable. Authentication: Required. Parameters: None. Response (200): ``` { "data": { "total_oi_usd": integer, // Total open interest in USD across all exchanges "avg_funding_rate": number, // Simple average funding rate across all exchange+coin pairs "oi_weighted_funding_rate": number, // OI-weighted average funding rate "top_coins_oi": [ // Top 20 coins by open interest { "coin": string, // e.g. "BTC" "open_interest_usd": integer, // Total OI in USD "exchange_count": integer // Number of exchanges with OI data for this coin } ], "exchange_count": integer, // Total unique exchanges in the dataset "coin_count": integer, // Total unique coins with OI data "updated_at": string // ISO 8601 timestamp }, "meta": { "request_id": string, "timestamp": string, "elapsed_ms": integer } } ``` Errors: 401, 429, 502, 500. --- ### GET /v1/meta/coverage Metadata about available data products, exchanges, coins, chart types, timeframes, and update frequencies. Authentication: None required (public endpoint). Parameters: None. Response (200): ``` { "data": { "products": { "": { "name": string, "status": "production" | "shared" | "planned", "ui_routes": [string], "public_api_routes": [string], "v1_api_routes": [string], "docs_routes": [string], "openapi_paths": [string], "mcp_tools": [string], "cli_commands": [string], "data_sources": [string], "freshness_sla": string, "tests": [string], "notes": string // Optional } } }, "meta": { "request_id": string, "timestamp": string, "elapsed_ms": integer } } ``` Product slugs match the typed IDs in `src/lib/api/product-surface-registry.ts`; the endpoint currently returns 33 entries. Cache: 1 hour. Errors: 500. --- ### GET /v1/meta/datasets Public Sharpe Data Ocean catalog. Returns dataset metadata only: dataset IDs, source labels, freshness SLAs, default selections, allowed fields, allowed filter operators, sortability, and limits. It never returns market-data rows. Authentication: None required (public endpoint). Parameters: None. Response (200): ``` { "data": { "dataset_count": integer, "datasets": { "": { "id": string, "name": string, "description": string, "owner_product_id": string, "visibility": "v1" | "internal", "backing_kind": "supabase_table" | "supabase_view" | "tracker_cache", "source_labels": [string], "freshness_sla_seconds": integer | null, "default_limit": integer, "max_limit": integer, "default_select": [string], "default_sort": [{ "field": string, "direction": "asc" | "desc" }], "fields": [ { "id": string, "label": string, "type": "string" | "number" | "integer" | "boolean" | "timestamp" | "object" | "array", "role": "dimension" | "metric" | "time" | "metadata", "description": string, "filter_ops": ["eq" | "in" | "gte" | "lte"], "sortable": boolean } ] } } }, "meta": { "request_id": string, "timestamp": string, "elapsed_ms": integer } } ``` Initial dataset IDs: `funding_rates_current`, `funding_accumulated`, `stablecoins_metrics`. Cache: 1 hour. Errors: 500. --- ### GET /v1/arbitrage/cex-spot-transfer Returns live CEX spot-transfer arbitrage rows after common network and token-contract matching, withdrawal/deposit status, withdrawal fees, executable depth, slippage, and spread-lifetime checks. Same-ticker contract mismatches fail closed. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------|----|------|----------|---------|-------------| | coin | query | string | no | -- | Optional base coin ticker, for example BTC, ETH, or SOL. | | exchanges | query | string | no | -- | Comma-separated exchange filter, for example Binance,Bybit,OKX. | | minApr | query | number | no | -- | Minimum net transfer profit in percentage points. | | minDepthUsd | query | number | no | -- | Minimum executable depth in USD when available. | | notional | query | number | no | 10000 | Position notional in USD. | | limit | query | integer | no | 100 | Maximum number of rows returned. | | cursor | query | string | no | -- | Opaque cursor from the previous page. | | format | query | enum(json, csv) | no | "json" | Response format. When set to "csv", the response Content-Type is text/csv instead of JSON. | Response statuses: 200, 400, 401, 403, 429, 500, 503. --- ### GET /v1/arbitrage/dated-futures-basis Returns executable cash-and-carry rows priced at spot ask and dated-futures bid, ranked by fee-adjusted net APR. Reference-only rows are omitted and expiry remains fractional. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------|----|------|----------|---------|-------------| | coin | query | string | no | -- | Optional base coin ticker, for example BTC, ETH, or SOL. | | exchanges | query | string | no | -- | Comma-separated exchange filter, for example Binance,Bybit,OKX. | | minApr | query | number | no | -- | Minimum fee-adjusted net basis APR in percentage points. | | minOiUsd | query | number | no | -- | Minimum open interest in USD. | | minVolumeUsd | query | number | no | -- | Minimum 24h futures or spot volume in USD. | | minDepthUsd | query | number | no | -- | Minimum executable depth in USD when available. | | marginType | query | enum(linear, inverse, both) | no | -- | Futures margin filter. | | notional | query | number | no | 10000 | Position notional in USD. | | limit | query | integer | no | 100 | Maximum number of rows returned. | | cursor | query | string | no | -- | Opaque cursor from the previous page. | | format | query | enum(json, csv) | no | "json" | Response format. When set to "csv", the response Content-Type is text/csv instead of JSON. | Response statuses: 200, 400, 401, 403, 429, 500, 503. --- ### GET /v1/arbitrage/dex-scanner/preview Resolves one or two GeckoTerminal liquidity pool URLs, verifies canonical token identity, and compares DEX pool mids against CEX bid/ask books or another verified DEX pool. Returns gross quote-spread candidates, blocked states, source timestamps, and explicit warnings; it does not return executable net profit. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------|----|------|----------|---------|-------------| | poolUrl | query | string | yes | -- | GeckoTerminal pool URL, for example https://www.geckoterminal.com/eth/pools/0x... | | exchanges | query | string | no | -- | Comma-separated CEX list. Supported values: Binance, OKX, Bybit, Gate.io, MEXC, KuCoin, Bitget, HTX, BingX, CoinEx. | | minProfitPct | query | number | no | 1 | Minimum gross spread percentage to mark a row as an opportunity. | | mode | query | enum(cex_dex, dex_dex) | no | "cex_dex" | Scanner mode. Use cex_dex for CEX-vs-DEX comparison or dex_dex to compare two DEX pools. | | secondPoolUrl | query | string | no | -- | Required when mode=dex_dex. GeckoTerminal pool URL for the comparison pool. | | tier2Exchanges | query | string | no | -- | Optional comma-separated extended CEX list for broader spot-market coverage. | | includeFundingLeg | query | enum(true, false) | no | "false" | Set to true to include funding-leg context when the scanner can match a relevant perpetual market. | Response statuses: 200, 400, 401, 403, 429, 500, 502, 503. --- ### GET /v1/arbitrage/futures-calendar-spread Returns executable near-versus-far dated futures spreads using buy asks and sell bids. Post-fee losing spreads remain negative. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------|----|------|----------|---------|-------------| | coin | query | string | no | -- | Optional base coin ticker, for example BTC, ETH, or SOL. | | exchanges | query | string | no | -- | Comma-separated exchange filter, for example Binance,Bybit,OKX. | | minApr | query | number | no | -- | Minimum signed post-fee net roll APY in percentage points. | | minOiUsd | query | number | no | -- | Minimum open interest in USD. | | minVolumeUsd | query | number | no | -- | Minimum 24h futures or spot volume in USD. | | minDepthUsd | query | number | no | -- | Minimum executable depth in USD when available. | | marginType | query | enum(linear, inverse, both) | no | -- | Futures margin filter. | | notional | query | number | no | 10000 | Position notional in USD. | | limit | query | integer | no | 100 | Maximum number of rows returned. | | cursor | query | string | no | -- | Opaque cursor from the previous page. | | format | query | enum(json, csv) | no | "json" | Response format. When set to "csv", the response Content-Type is text/csv instead of JSON. | Response statuses: 200, 400, 401, 403, 429, 500, 503. --- ### GET /v1/arbitrage/perp-dated-carry Returns perp funding versus executable dated-futures basis carry rows. To-expiry carry and annualized carry are separate; ranking uses fee-adjusted net carry APR. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------|----|------|----------|---------|-------------| | coin | query | string | no | -- | Optional base coin ticker, for example BTC, ETH, or SOL. | | exchanges | query | string | no | -- | Comma-separated exchange filter, for example Binance,Bybit,OKX. | | minApr | query | number | no | -- | Minimum fee-adjusted net carry APR in percentage points. | | minOiUsd | query | number | no | -- | Minimum open interest in USD. | | minVolumeUsd | query | number | no | -- | Minimum 24h futures or spot volume in USD. | | minDepthUsd | query | number | no | -- | Minimum executable depth in USD when available. | | marginType | query | enum(linear, inverse, both) | no | -- | Futures margin filter. | | notional | query | number | no | 10000 | Position notional in USD. | | limit | query | integer | no | 100 | Maximum number of rows returned. | | cursor | query | string | no | -- | Opaque cursor from the previous page. | | format | query | enum(json, csv) | no | "json" | Response format. When set to "csv", the response Content-Type is text/csv instead of JSON. | Response statuses: 200, 400, 401, 403, 429, 500, 503. --- ### GET /v1/dexscreener/data Returns live DEX pair screening rows by category, supported network slug, or search phrase. Phrase searches remain scoped to the requested network. Rows retain provider provenance and observation time; `observed_at` is source/cache freshness while `fetched_at` is response assembly time. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------|----|------|----------|---------|-------------| | category | query | enum(volume, trending, gainers, losers, new_pairs) | no | "trending" | Screening category. | | network | query | string | no | -- | Optional supported chain/network slug; unsupported values return 400. | | phrase | query | string | no | -- | Optional search phrase, scoped to network when both are set. | | limit | query | integer | no | 50 | Maximum rows to return. Min: 1, Max: 50. | Response statuses: 200, 400, 401, 403, 429, 500, 502, 503. --- ### GET /v1/dexscreener/security Returns token contract security signals for a DEX Screener token. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------|----|------|----------|---------|-------------| | address | query | string | yes | -- | Token contract address. | | chainId | query | integer | yes | -- | Codex network ID. | Response statuses: 200, 400, 401, 403, 429, 500, 503. --- ### GET /v1/insider-selling/data Composite score (0-10) flagging coins with persistent negative funding rates across 33 perpetual futures exchanges. Higher scores indicate stronger evidence of systematic short positioning. Updates every 30 minutes. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------|----|------|----------|---------|-------------| | limit | query | integer | no | 100 | Maximum number of coins to return. | | min_score | query | number | no | 0 | Filter to coins scoring at or above this value. | | format | query | enum(json, csv) | no | "json" | Response format. When set to "csv", the response Content-Type is text/csv instead of JSON. | Response statuses: 200, 400, 401, 403, 429, 500, 503. --- ### GET /v1/listings/data Returns aggregated weekly and monthly compatibility listing counts plus the last-90-day recent listings for the New Listings product. Optionally filter by narrative slug or exchange. The new canonical event feed is available at `/v1/listings/events`; enabled listing connectors refresh hourly. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------|----|------|----------|---------|-------------| | narrative | query | string | no | -- | Filter to a single narrative slug (e.g. `ai-agents`, `memes`, `layer-1`). | | exchange | query | enum(binance, okx, bybit, gateio, mexc) | no | -- | Filter to a single exchange. | Response statuses: 200, 400, 401, 403, 429, 500, 502, 503. --- ### GET /v1/listings/events Returns canonical listing lifecycle events across CEXs and Perp DEXs, including Spot listings, Perp listings, delistings, suspensions, resumptions, scheduled trading starts, source URLs, and source confidence. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------|----|------|----------|---------|-------------| | exchange | query | enum(binance, okx, bybit, gateio, mexc, bitget, kucoin, bingx, bitmart, deepcoin, coinbase, kraken, crypto_com, upbit, bithumb, htx, bitfinex, bitstamp, gemini, bitmex, deribit, phemex, lbank, bitrue, coinex, backpack, hashkey, whitebit, toobit, hyperliquid, aster, dydx, aevo) | no | -- | Filter to a single exchange or perp DEX. | | venue_type | query | enum(cex, perp_dex, dex) | no | -- | Filter by venue type. | | market_type | query | enum(spot, perp, futures, options, margin) | no | -- | Filter by market type. | | event_type | query | enum(listing, delisting, suspension, resumption, prelaunch) | no | -- | Filter by listing lifecycle event type. | | asset_class | query | enum(token, spot_pair, perp_contract, futures_contract, options_contract) | no | -- | Filter by listed instrument class. | | status | query | enum(announced, scheduled, live, completed, cancelled, needs_review) | no | -- | Filter by event status. | | narrative | query | string | no | -- | Filter by Sharpe narrative slug. | | confidence | query | enum(authoritative, high, medium, low, proxy, manual) | no | -- | Filter by source confidence. | | from | query | string | no | -- | ISO date or datetime lower bound. | | to | query | string | no | -- | ISO date or datetime upper bound. | | days | query | integer | no | 90 | Lookback window in days. | | limit | query | integer | no | 200 | Max rows returned. | | cursor | query | string | no | -- | Cursor returned by previous page. | Response statuses: 200, 400, 401, 403, 429, 500, 502, 503. --- ### GET /v1/listings/exchanges Returns the typed listing connector registry, including supported market types, source URLs, parser confidence, connector status, and market coverage for each exchange. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------|----|------|----------|---------|-------------| | venue_type | query | enum(cex, perp_dex, dex) | no | -- | Filter exchange coverage by venue type. | | market_type | query | enum(spot, perp, futures, options, margin) | no | -- | Filter exchange coverage by supported market type. | | enabled | query | enum(true, false) | no | -- | Filter to enabled or disabled connectors. | Response statuses: 200, 400, 401, 403, 429, 500, 502, 503. --- ### GET /v1/listings/recent Returns a flat list of recent listings (token, exchange, narrative, listing date). Defaults remain backward-compatible with the legacy spot feed; event-specific filters switch to the canonical event feed while preserving the recent-feed row shape. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------|----|------|----------|---------|-------------| | narrative | query | string | no | -- | Filter to a single narrative slug. | | exchange | query | enum(binance, okx, bybit, gateio, mexc, bitget, kucoin, bingx, bitmart, deepcoin, coinbase, kraken, crypto_com, upbit, bithumb, htx, bitfinex, bitstamp, gemini, bitmex, deribit, phemex, lbank, bitrue, coinex, backpack, hashkey, whitebit, toobit, hyperliquid, aster, dydx, aevo) | no | -- | Filter to a single exchange. | | venue_type | query | enum(cex, perp_dex, dex) | no | -- | Optional event-feed venue type filter. | | market_type | query | enum(spot, perp, futures, options, margin) | no | -- | Optional event-feed market type filter. | | event_type | query | enum(listing, delisting, suspension, resumption, prelaunch) | no | -- | Optional event-feed lifecycle event filter. | | asset_class | query | enum(token, spot_pair, perp_contract, futures_contract, options_contract) | no | -- | Optional listed instrument class filter. | | status | query | enum(announced, scheduled, live, completed, cancelled, needs_review) | no | -- | Optional event status filter. | | confidence | query | enum(authoritative, high, medium, low, proxy, manual) | no | -- | Optional source confidence filter. | | from | query | string | no | -- | ISO date or datetime lower bound. | | to | query | string | no | -- | ISO date or datetime upper bound. | | days | query | integer | no | 90 | How many days back to include. Default 90. | | limit | query | integer | no | 200 | Max rows returned. | | cursor | query | string | no | -- | Cursor returned by previous page. | Response statuses: 200, 400, 401, 403, 429, 500, 502, 503. --- ### GET /v1/mindshare/data Returns narrative mindshare rankings, token rows, rolling windows, or historical snapshots. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------|----|------|----------|---------|-------------| | tokens | query | enum(true, false) | no | -- | Set to true for token rows. | | narrative | query | string | no | -- | Optional narrative slug. | | historical | query | enum(true, false) | no | -- | Set to true for historical snapshots. | | timeframe | query | enum(1W, 1M, 3M, 6M, 1Y, 3Y) | no | -- | Historical timeframe. | | window | query | enum(now, 24h, 7d, 30d) | no | -- | Rolling snapshot window. | Response statuses: 200, 400, 401, 403, 429, 500, 503. --- ### GET /v1/news/curated AI-curated top crypto news stories with banner headlines and source attribution. Refreshed every 15 minutes. Supports keyset pagination via the cursor field returned alongside results. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------|----|------|----------|---------|-------------| | limit | query | integer | no | 20 | Maximum number of stories to return. | | category | query | enum(all, crypto, ai, markets, geopolitics) | no | -- | Filter by curation category. | | cursor | query | string | no | -- | Opaque pagination cursor in the format 'ISO_DATE/ID'. Use the nextCursor field from the previous response. | | format | query | enum(json, csv) | no | "json" | Response format. When set to "csv", the response Content-Type is text/csv instead of JSON. | Response statuses: 200, 400, 401, 403, 429, 500, 502, 503. --- ### GET /v1/pump-dump/data Composite score (0-10) flagging coins where price is rising while funding is negative, a divergence pattern consistent with pump-and-dump activity. Gated on negative 72h average funding AND positive 7d price change. Updates every 30 minutes. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------|----|------|----------|---------|-------------| | limit | query | integer | no | 100 | Maximum number of coins to return. | | min_score | query | number | no | 0 | Filter to coins scoring at or above this value. | | phase | query | enum(setup, markup, distribution, dump, dumping) | no | -- | Filter to one manipulation phase label. | | format | query | enum(json, csv) | no | "json" | Response format. When set to "csv", the response Content-Type is text/csv instead of JSON. | Response statuses: 200, 400, 401, 403, 429, 500, 503. --- ### GET /v1/rug-check/security Returns token contract security and liquidity risk signals. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------|----|------|----------|---------|-------------| | address | query | string | yes | -- | Token contract address. | | chainId | query | integer | yes | -- | Chain/network ID. | Response statuses: 200, 400, 401, 403, 429, 500, 503. --- ### GET /v1/rug-check/trending Returns trending tokens suitable for rug-check review. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------|----|------|----------|---------|-------------| | limit | query | integer | no | 50 | Maximum tokens to return. | Response statuses: 200, 400, 401, 403, 429, 500, 502, 503. --- ### GET /v1/stablecoins/data Returns hourly stablecoin overview, detail, or yield data with nominal supply at peg, marked value, nullable peg metrics, chain supply/TVL ratios, velocity coverage, freshness, and APY risk flags. NAV-accrual assets are not scored against a fixed $1 peg, and ambiguous same-symbol yield pools are omitted. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------|----|------|----------|---------|-------------| | type | query | enum(overview, detail, yields) | no | "overview" | Payload type. | | slug | query | string | no | -- | Stablecoin slug. Required when type=detail. | Response statuses: 200, 400, 401, 403, 404, 429, 500, 502, 503. --- ### GET /v1/token-scanner/scan Runs a read-only token scanner mode for hot tokens, new runners, alpha drops, AI tokens, or top new pairs. Responses expose per-source coverage; missing valuation and valuation-dependent risk remain null. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------|----|------|----------|---------|-------------| | mode | query | enum(hot, new-runners, alpha-drops, ai-top, top-new) | no | "hot" | Scanner mode. | | chains | query | string | no | -- | Comma-separated Dexscreener chain IDs for scanner modes. | | chain | query | string | no | "base" | Single chain for top-new mode. | | profile | query | enum(discovery, balanced, strict) | no | -- | Scanner profile; use explicit thresholds for custom tuning. | | days | query | number | no | -- | Lookback window in days for supported scanner modes. | | limit | query | integer | no | 50 | Maximum rows to return. Min: 1, Max: 72. | | minLiquidityUsd | query | number | no | -- | Minimum liquidity in USD. | | minVolumeH24 | query | number | no | -- | Minimum 24h volume in USD. | | minTxnsH1 | query | number | no | -- | Minimum 1h transaction count. | | minTxnsH24 | query | number | no | -- | Minimum 24h transaction count. | | maxAgeHours | query | number | no | -- | Maximum token-pair age in hours. | | includeUnknownAge | query | enum(true, false) | no | -- | Whether pairs with unknown age may pass age filters. | | sortBy | query | enum(score, readiness, rs, volume, momentum) | no | -- | Scanner sort key. | | minBreakoutReadiness | query | number | no | -- | Minimum breakout-readiness score. | | minRelativeStrength | query | number | no | -- | Minimum relative-strength score. | | maxVolLiqRatio | query | number | no | -- | Maximum 24h volume-to-liquidity ratio. | | minPriceChangeH1 | query | number | no | -- | Minimum 1h price change percentage. | Response statuses: 200, 400, 401, 403, 429, 500, 502, 503. --- ### GET /v1/web-traffic/data Returns attention rankings, search trends, social snapshots, or market-level traffic signals. Authentication: Required. Parameters: | Name | In | Type | Required | Default | Description | |------|----|------|----------|---------|-------------| | type | query | enum(exchange, coin, narrative) | no | -- | Entity type. | | mode | query | enum(rankings, trends, snapshots, market) | no | -- | Payload mode. | | tf | query | enum(7d, 30d, 90d, 1y, 3y, all) | no | -- | Lookback window. | | entities | query | string | no | -- | Comma-separated entity IDs for trends or snapshots. | | sub | query | enum(trending, categories, global) | no | -- | Market sub-mode when mode=market. | Response statuses: 200, 400, 401, 403, 429, 500, 503. --- ## Free API Endpoints (No Auth Required) Base URL: `https://www.sharpe.ai/api/` These endpoints overlap with documented v1 surfaces but may omit pagination, request tracking, or fields that exist only in authenticated routes. Responses are edge-cached for performance. There is no `meta` envelope on free endpoints: responses are raw JSON. CORS: free endpoints answer cross-origin browser requests. Responses send `Access-Control-Allow-Origin: *`, OPTIONS preflights return 204 with `Access-Control-Allow-Methods: GET, HEAD, OPTIONS`, and data-provenance headers (`X-Data-Source`, `X-Data-Stale`, `X-Data-As-Of`, `X-Freshness-Sla-Seconds`, `X-Sharpe-Data-State`) are listed in `Access-Control-Expose-Headers`. `Access-Control-Allow-Credentials` is never sent. The authenticated `/v1/` API sends no CORS headers: call it from a server so the key never reaches page JavaScript. ### GET /api/funding/rates Funding rates across 33 exchanges. Crypto plus tokenized equity, commodity, index and FX perps; unfiltered by default. Parameters: - type (string, default "current"). One of: current, accumulated, history. - coin (string) -- Optional asset filter for current/accumulated; required for history (e.g. BTC, ETH). Accepts a comma-separated list for current/accumulated. - days (number, default 30) -- Lookback days for history mode. - exchange (string) -- Venue slug, e.g. binance, gate-io, hyperliquid, tradexyz. Unknown values return 400. Applies to current and accumulated. - margin (string) -- One of: linear, inverse. Unfiltered by default. - asset_class (string) -- One of: crypto, equity, commodity, fx, index. Unfiltered by default. - max_age_h (number) -- Drop current rows whose updated_at is older than N hours. Unfiltered by default. - limit (number, 1-5000) -- Bound the response to one page; returns X-Total-Count and X-Next-Cursor headers. - cursor (string) -- Opaque page cursor from X-Next-Cursor. Requires limit. Response is a bare JSON array (no meta envelope). Each current row carries the same fields as the v1 current shape above, including margin_type, asset_class, open_interest, market_cap_rank and the freshness block. `rate` is a fraction charged once per `interval_hours` (1, 2, 4, 8 or 24; never assume 8), and `exchange` is the venue display name in its exact case ("Binance", "Gate.io", "BitMEX", "edgeX"). Cache: type=current is 5 min (s-maxage), 10 min (stale-while-revalidate). The window is bounded by the 45-minute freshness SLA so a replayed body cannot claim is_stale:false past its own target. type=accumulated and type=history are 15 min / 30 min; stale accumulated data is revalidated sooner. ### GET /api/futures/data Futures chart data. Parameters: - chart (string, required) -- Chart type. One of: perp-dislocation, funding-cost, crowding-risk, flow-confirmation, carry-curve, perpetual-price, funding-rate, oi-snapshot, oi-change, oi-daily-change, oi-stacked, oi-volume, volume-snapshot, volume-history, liquidations, annualized-basis, term-structure, long-short-ratio, top-trader-ls, cvd, returns-session, returns-heatmap, returns-hour, returns-day. - coin (string, default "BTC") -- Asset ticker. - timeframe (string, default "3M") -- One of: 1W, 2W, 1M, 3M, 6M, 1Y, 3Y. - exchanges (string) -- Comma-separated exchange IDs (e.g. binance,bybit,okx). Cache: 5 min. ### GET /api/futures/coins Available futures coins with capability flags. Parameters: None. Cache: 1 hour. ### GET /api/arbitrage/spot-perp Spot-perp basis trade opportunities. Parameters: - exchange (string, default "all") -- Exchange ID or "all". - direction (string, default "all") -- Perpetual-leg direction: short for positive funding capture, long for negative funding capture, or all. Cache: 5 min. ### GET /api/arbitrage/cross-exchange Cross-exchange funding rate arbitrage across every funding venue (33). Parameters: - exchanges (string) -- Comma-separated venue names. Returns all by default. - assetClass (string, default "all") -- "all", "crypto", or "rwa" (equity/commodity/FX/index perps; pairs never cross classes). - minOiUsd (number, default 0) -- Minimum open interest on the smaller leg; unknown OI fails a positive floor. - minVolUsd (number, default 0) -- Minimum 24h volume on the smaller leg; unknown volume fails a positive floor. `apr` is the gross annualized funding differential. Spread uses real books where available ("book") or reference prices ("reference"); `netApr` is only present on book-priced rows. Unknown market data is null, never zero. Cache: 1 min. ### GET /api/heatmap/data Market heatmap. Parameters: - category (string, default "top-100") -- One of 34 category slugs (e.g. top-100, defi, layer-1, artificial-intelligence, meme-token, ethereum-ecosystem, solana-ecosystem). The legacy top-100 slug returns the Top 50 universe. - mode (string, default "coins") -- One of: coins, narratives, ecosystems. Cache: 5 min. ### GET /api/correlation/matrix NxN Pearson correlation matrix. Parameters: - period (string, default "30d") -- One of: 30d, 90d, 1y, 3y. - ids (string) -- Comma-separated asset IDs. Crypto: CoinGecko IDs (bitcoin, ethereum). TradFi: short IDs (sp500, gold, nvda). Max 10. Default: bitcoin,ethereum,solana,sp500,gold. Cache: 1 hour. ### GET /api/correlation/history Rolling correlation windows between two assets over time. Parameters: - asset1 (string, required) -- First asset ID (e.g. bitcoin). - asset2 (string, required) -- Second asset ID (e.g. sp500). - period (string, default "1y") -- One of: 30d, 90d, 1y, 3y. Returns 30D, 60D, 90D rolling correlation windows. Cache: 1 hour. ### GET /api/price-prediction/data Deterministic directional scores with optional volatility-scaled heuristic scenarios. Legacy confidence fields measure signal agreement, not probability. Parameters: - coin (string) -- Asset slug (e.g. bitcoin, ethereum). Omit for all coins. Sub-signal breakdowns vary by source coverage and can include funding, OI, perp basis, CVD, long/short positioning, liquidations, RSI, EMA, positioning pressure, momentum exhaustion, and squeeze risk. Cache: 10 min. ### GET /api/gem-finder/data Market-ranked token rows with valuation, supply, momentum, ATH/ATL, every supported chain the asset is deployed on, nullable dilution fields, observed exchange availability, and enrichment coverage. Ambiguous same-ticker assets do not receive symbol-only exchange attribution. Parameters: None. Cache: 5 min. ### GET /api/market-cap/search Crypto and supported TradFi asset search by name or ticker. Parameters: - q (string, required) -- Search query. Cache: varies. ### GET /api/tracker/market-overview Market overview: BTC/ETH price and 24h change, total market cap and volume, BTC dominance, total market-cap change, and Fear & Greed. Missing auxiliary source fields are null. Parameters: None. Cache: 10 min. Returns 503 when the cached snapshot is missing or invalid. ### GET /api/news/feed Aggregated crypto news. Parameters: - limit (integer, default 200) -- Max articles. Max: 500. - offset (integer, default 0) -- Pagination offset. - category (string) -- Filter by category. - coin (string) -- Filter by coin ticker. - since (string) -- ISO 8601 timestamp cutoff. - q (string) -- Search article titles across the stored corpus. - cursor (string) -- Continue from `nextCursor`. Current cursors use `ISO_TIMESTAMP|STORY_ID`; legacy timestamp-only cursors remain accepted. Responses include `nextCursor`, `nextOffset`, and `truncated`. Treat the returned cursor as opaque and pass it back unchanged. Cache: 5 min. ### GET /api/narratives/data Analytics for 30 crypto narratives. Parameters: - narrative (string) -- Narrative slug for detail view (e.g. defi, ai-agents, rwa). When set, returns coins and sparkline for that narrative. Omit for all. - historical (string) -- Timeframe for historical snapshot data. One of: 24H, 1W, 7D, 1M, 30D, 3M, 6M, MTD, YTD, 1Y, 3Y. - correlation (string) -- Set to "true" to return NxN correlation matrix for the narrative's tokens. - timeframe (string) -- Used with correlation, funding_history, token_history, and mindshare_history modes. One of: 24H, 1W, 7D, 1M, 30D, 3M, 6M, MTD, YTD, 1Y, 3Y. Default varies by mode. - chart (string) -- Selects a specific metric for historical mode (e.g. market_cap, volume_24h, open_interest, funding_rate, coin_count). - funding_history (string) -- Narrative slug. Returns funding rate heatmap data for that narrative's tokens. - token_volume (string) -- Narrative slug. Returns per-token volume with 10-day rolling average. - token_history (string) -- Narrative slug. Returns per-token mcap/volume/OI time-series. - mindshare_history (string) -- Set to "true" to return mindshare percentage snapshots over time. Cache: 15 min. ### GET /api/ecosystems/data Analytics for 23 blockchain ecosystems. Parameters: - ecosystem (string) -- Ecosystem slug for detail view (e.g. ethereum, solana, arbitrum). When set, returns coins and sparkline for that ecosystem. Omit for all. - historical (string) -- Timeframe for historical snapshot data. One of: 24H, 1W, 7D, 1M, 30D, 3M, 6M, MTD, YTD, 1Y, 3Y. - correlation (string) -- Set to "true" to return NxN correlation matrix for the ecosystem's tokens. - timeframe (string) -- Used with correlation and mindshare_history modes. One of: 24H, 1W, 7D, 1M, 30D, 3M, 6M, MTD, YTD, 1Y, 3Y. Default varies by mode. - tvl (string) -- Set to "true" to include TVL data from DeFi Llama (triggers historical mode). - chart (string) -- Selects a specific metric for historical mode (e.g. market_cap, volume_24h, open_interest, tvl). - excludeNative (string) -- Set to "true" to exclude the native token from aggregate metrics and coin lists. - mindshare_history (string) -- Set to "true" to return mindshare percentage snapshots over time. Cache: 15 min. ### GET /api/memecoins/data Grouped memecoin categories across aggregate, theme, chain, and launchpad views. Parameters: - narrative (string) -- Narrative slug (e.g. dog-coins, cat-coins, frog-coins, ai-memes, trump-coins). Omit for all. - historical (string) -- One of: 24h, 7d, 30d, 1y. - coinHistory (string) -- One of: 24h, 7d, 1m, 1y for retained price history per coin. Cache: 15 min. ### GET /api/memecoins/launches Recently launched tokens from recognized memecoin launchpads, screened by age, liquidity, volume, and transaction count. Includes complete/partial chain coverage; returns 503 when every requested scanner fails. Parameters: - chains (string) -- Comma-separated chain ids. - days (number) -- 1 to 30 day launch lookback window. - limit (number) -- 1 to 200 rows. - profile (string) -- discovery, balanced, or strict. Cache: 5 min. ### GET /api/mindshare/data Social attention and mindshare metrics. Parameters: - tokens (string) -- Set to "true" for token-level mindshare data. - narrative (string) -- Narrative ID for detail view. - historical (string) -- Set to "true" to include historical snapshots. - timeframe (string) -- One of: 7d, 30d, 90d. Cache: 1 hour. ### GET /api/web-traffic/data Website traffic trends for 87+ exchanges and crypto projects. Parameters: - type (string) -- One of: exchange, coin, narrative. - mode (string) -- One of: rankings, trends, snapshots, market. - tf (string) -- Timeframe. One of: 7d, 30d, 90d, 1y, 3y, all. - entities (string) -- Comma-separated entity slugs for detail view. Cache: 15 min. ### Free API Rate Limits Free endpoints are cache-backed and may also have route-specific protective limits. Do not treat them as SLA-backed quotas. Documented per-IP limits include: | Endpoint | Limit | |------------------------------|-----------------| | /api/correlation/on-demand | 10 req/min/IP | | /api/price-prediction/search | 20 req/min/IP | ### Free API Cache Behavior | Endpoint group | s-maxage | stale-while-revalidate | |-------------------------------------------------------------------|----------|------------------------| | Funding rates, futures, arbitrage, heatmap, gem finder | 5 min | 10 min | | Price prediction | 10 min | 20 min | | Narratives, ecosystems, memecoins, mindshare, web traffic | 15 min | 30 min | | Correlation matrix/history | 1 hr | 2 hr | --- ## Versioning URL-path versioning: `/v1/`. Current and only production version is v1. Backward-compatible changes (shipped without version bump): - Adding new endpoints - Adding new optional query parameters - Adding new fields to response objects - Adding new error codes or enum values - Improving error messages Breaking changes (new version with 6-month deprecation window): - Removing or renaming endpoints or response fields - Changing field types - Making optional parameters required - Changing auth requirements or envelope structure Deprecated request shapes return a `Deprecation` HTTP header (RFC 9745) on every response, stating the retirement date and the migration path. Query-string API keys are rejected by default; use `Authorization: Bearer` or `X-API-Key` headers. ## Per-route markdown Every indexable Sharpe page exposes a clean markdown representation for AI agents at `/api/markdown`. No auth required. - Preferred: `GET /api/markdown?path=` - Legacy alias (still accepted): `GET /api/markdown?for=` The endpoint returns `text/markdown; charset=utf-8` with an `x-markdown-tokens` hint header. `` is any absolute site path (URL-encoded), for example `/dexscreener/solana` or `/products/dexscreener`. Curated indexable pages expose markdown alternates through negotiation or link headers; unknown paths fall back to the site-level `llms.txt` summary. ## Links - Documentation: https://www.sharpe.ai/docs - Quickstart: https://www.sharpe.ai/docs/quickstart - Authentication: https://www.sharpe.ai/docs/authentication - Rate Limits: https://www.sharpe.ai/docs/rate-limits - Error Reference: https://www.sharpe.ai/docs/errors - Free API Docs: https://www.sharpe.ai/docs/free-api - OpenAPI Spec (JSON): https://www.sharpe.ai/openapi.json - Changelog: https://www.sharpe.ai/docs/changelog - Versioning: https://www.sharpe.ai/docs/versioning - Status Page: https://status.sharpe.ai - Authentication: https://www.sharpe.ai/docs/authentication - Support: support@sharpe.ai