API Documentation
Complete reference for the InfoHub Public API. Real-time derivatives data from 33 exchanges, aggregated into 26 REST endpoints.
- ●Fee model surface — every fee-aware endpoint now returns
meta.feeModelwith a version identifier and the full schedule. Read → - ●Aggregate modes on funding / open-interest / tickers — pass
?aggregate=1for one row per symbol.Read → - ●/klines endpoint with Binance → Bybit → OKX fallback.Read →
- ●Long/short regime classifier — every
/longshortresponse now includes aregimefield (crowded-long / balanced / crowded-short). - ●Liquidation summary mode —
/liquidations?summary=1returns aggregated stats instead of paging through the feed.
Authentication
All endpoints except /status require an API key passed as a Bearer token in the Authorization header.
Authorization: Bearer ih_your_api_key_here
Keys start with ih_ and are 35 characters long.
Generate up to 5 keys at /developers.
Keys are hashed server side. The full key is shown once at creation. Store it securely.
Rate Limits
Every response includes rate limit headers:
X-RateLimit-Limit: 100 X-RateLimit-Remaining: 97 X-RateLimit-Reset: 1709248060
Exceeding the limit returns 429 with a Retry-After header indicating seconds until the window resets.
Response Format
All endpoints return JSON with a consistent structure:
{
"success": true,
"data": [ ... ],
"meta": { "timestamp": 1709248000, ... }
}{
"success": false,
"error": "Human-readable error message"
}The meta field is optional and varies by endpoint. It may include counts, timestamps, or filter summaries.
Fee Model
Fee-sensitive endpoints (/arbitrage,/spreads,/funding-arb) expose the fee schedule they used to compute net P&L so callers can verify the assumption or recompute under their own fill model.
Unit. All fee values are percent-per-trade.0.05 means 0.05%, not 5%. Maker fees may be negative on venues that rebate makers.
Version bumps. Themeta.feeModel.version string changes whenever any value in our internal fee table changes — including a single venue's taker rate. Format is vMAJOR.MINOR-YYYY-MM-DD.
Headers. The same identifiers are mirrored onX-Fee-Model-Version andX-Fee-Model-Updated-At response headers, so a cheap HEAD request is enough to detect a bump.
Where it appears. Same shape on every fee-sensitive endpoint: meta.feeModel = { version, updatedAt, unit, schedule }./status and/exchanges emit just the identifiers (no schedule) so you can probe cheaply.
{
"version": "v1.0-2026-02-01",
"updatedAt": "2026-02-01T00:00:00Z",
"unit": "percent",
"schedule": {
"Binance": { "maker": 0.0200, "taker": 0.0500 },
"Bybit": { "maker": 0.0200, "taker": 0.0550 },
"Hyperliquid": { "maker": 0.0150, "taker": 0.0450 },
"Nado": { "maker": -0.0080, "taker": 0.0150 }
}
}# Lightweight HEAD probe — no body, just the version header curl -sI -H "Authorization: Bearer ih_xxx" \ https://info-hub.io/api/v1/status \ | grep -i "x-fee-model-version" # Output: # X-Fee-Model-Version: v1.0-2026-02-01 # X-Fee-Model-Updated-At: 2026-02-01T00:00:00Z
// Use the per-side fees in each arbitrage row to back out a maker-only net
const row = data[0];
const makerRoundTrip =
(row.fees.shortExchangeMaker ?? row.fees.shortExchangeTaker) +
(row.fees.longExchangeMaker ?? row.fees.longExchangeTaker);
// Round-trip = open + close on each side = 4 fills total
const netSpreadMakerOnly = row.grossSpread8h - makerRoundTrip * 2;
// Cache key for downstream models — refresh when this changes
const cacheKey = `fee:${meta.feeModel.version}`;Funding Rates
/api/v1/fundingReal-time funding rates across 33 exchanges. Rates are expressed as percentages in the exchange's native interval.
| Parameter | Type | Default | Description |
|---|---|---|---|
symbols | string | all | Comma-separated symbols (e.g. BTC,ETH,SOL) |
exchanges | string | all | Comma-separated exchanges (e.g. binance,bybit) |
assetClass | string | crypto | crypto, stocks, forex, commodities, or all |
aggregate | number | 0 | 1 = one row per symbol with avg/min/max rate8h |
{
"success": true,
"data": [
{
"symbol": "BTC",
"exchange": "Binance",
"rate": 0.0100,
"rate8h": 0.0100,
"predictedRate": 0.0085,
"markPrice": 95000.50,
"indexPrice": 94980.25,
"fundingInterval": "8h",
"nextFundingTime": 1709251200000,
"type": "cex",
"assetClass": "crypto"
}
],
"meta": { "timestamp": 1709248000, "exchanges": 24, "pairs": 6466, "mode": "per-venue" }
}{
"success": true,
"data": [
{
"symbol": "BTC",
"venueCount": 14,
"avgRate8h": 0.0185,
"minRate8h": -0.0245,
"minExchange": "Hyperliquid",
"maxRate8h": 0.0567,
"maxExchange": "Bybit",
"spread8h": 0.0812
}
],
"meta": { "timestamp": 1709248000, "entries": 230, "mode": "aggregate", "assetClass": "crypto" }
}spread8h descending, so the widest opportunities surface first. All rates are 8h-normalised, so 1h and 4h venues compare directly with the typical 8h CEX rate.Open Interest
/api/v1/openinterestOpen interest across exchanges in USD. Per-venue rows by default; pass aggregate=1 to get one row per symbol (with the per-venue breakdown nested inside), orchanges=1 to include 1h / 4h / 24h % deltas computed from server-side snapshots.
| Parameter | Type | Default | Description |
|---|---|---|---|
symbols | string | all | Comma-separated symbols |
exchanges | string | all | Comma-separated exchanges |
aggregate | number | 0 | 1 = one row per symbol with summed openInterestUsd |
changes | number | 0 | 1 = include {pct1h, pct4h, pct24h} on each row |
{
"success": true,
"data": [
{
"symbol": "BTC",
"exchange": "Binance",
"openInterest": 4200000000,
"openInterestUsd": 4200000000,
"timestamp": 1713181800000
}
],
"meta": { "timestamp": 1713181800000, "entries": 420, "exchanges": 26, "mode": "per-venue" }
}{
"success": true,
"data": [
{
"symbol": "BTC",
"openInterestUsd": 40250000000,
"venueCount": 14,
"venues": [
{ "exchange": "Binance", "openInterestUsd": 7870000000 },
{ "exchange": "Bybit", "openInterestUsd": 4280000000 }
],
"timestamp": 1713181800000,
"changes": { "pct1h": 0.42, "pct4h": -1.83, "pct24h": 5.21 }
}
],
"meta": { "timestamp": 1713181800000, "entries": 230, "mode": "aggregate", "changesAvailable": true }
}Tickers
/api/v1/tickersReal-time price and volume data across exchanges. Per-venue rows by default; pass aggregate=1 to get one row per symbol with median price, max H, min L, and cross-venue deduped 24h volume ($100B per-entry sanity cap to filter mis-reported figures).
| Parameter | Type | Default | Description |
|---|---|---|---|
symbols | string | all | Comma-separated symbols (e.g. BTC,ETH) |
exchanges | string | all | Comma-separated exchanges |
aggregate | number | 0 | 1 = one row per symbol with summed volume |
{
"success": true,
"data": [
{
"symbol": "BTC",
"exchange": "Binance",
"lastPrice": 84250.50,
"high24h": 85100.00,
"low24h": 83200.00,
"volume24h": 12500000000,
"priceChange24hPct": 1.25
}
],
"meta": { "timestamp": 1713181800000, "entries": 380, "mode": "per-venue" }
}{
"success": true,
"data": [
{
"symbol": "BTC",
"lastPrice": 84250.50,
"high24h": 85100.00,
"low24h": 83200.00,
"volume24h": 38400000000,
"priceChange24hPct": 1.27,
"venueCount": 14
}
],
"meta": { "timestamp": 1713181800000, "entries": 230, "mode": "aggregate" }
}Klines (OHLCV)
/api/v1/klinesOHLCV candle data backed by a multi-venue fallback chain (Binance perp → Bybit → OKX → Binance spot). A single venue outage doesn't break the response — the upstream that served the response is named in data.source.
| Parameter | Type | Default | Description |
|---|---|---|---|
symbol | string | required | Base symbol (USDT pair appended internally) |
interval | string | 1h | 1m | 5m | 15m | 1h | 4h | 1d | 1w |
limit | number | 100 | Max candles (1 to 500) |
{
"success": true,
"data": {
"pair": "BTCUSDT",
"interval": "1h",
"source": "binance",
"count": 100,
"candles": [
{
"time": 1778493600000,
"open": 80923.30,
"high": 81162.40,
"low": 80889.90,
"close": 80900.80,
"volume": 3424.195,
"closeTime": 1778497199999
}
]
},
"meta": { "timestamp": 1778493700000 }
}data.source to detect when the primary venue is down and your indicator math is sitting on a fallback's data shape.Spreads
/api/v1/spreadsCross-exchange price spreads ranked by opportunity size. Returns both gross spread and net spread (after round-trip taker fees on both legs), plus per-side maker + taker so callers can recompute under their own fill model.
| Parameter | Type | Default | Description |
|---|---|---|---|
symbols | string | all | Comma-separated symbols |
minSpread | number | 0 | Minimum GROSS spread % to include |
limit | number | 50 | Max results (1 to 200) |
{
"success": true,
"data": [
{
"symbol": "BTC",
"spreadPct": 0.0312,
"spreadUsd": 26.30,
"netSpreadPct": -0.0688,
"highExchange": "Bitfinex",
"highPrice": 84276.30,
"lowExchange": "Binance",
"lowPrice": 84250.00,
"exchangeCount": 18,
"fees": {
"roundTrip": 0.1000,
"highExchangeTaker": 0.0000,
"highExchangeMaker": 0.0000,
"lowExchangeTaker": 0.0500,
"lowExchangeMaker": 0.0200
}
}
],
"meta": {
"feeModel": {
"version": "v1.0-2026-02-01",
"updatedAt": "2026-02-01T00:00:00Z",
"unit": "percent",
"schedule": { /* full venue table */ }
}
}
}netSpreadPct when fees outweigh the price difference — that's the signal that the opportunity isn't actionable on taker liquidity. Bump-detect onmeta.feeModel.versionto know when to invalidate cached calcs.Arbitrage
/api/v1/arbitrageFunding rate arbitrage opportunities with feasibility grades, PnL projections, and OI data. Short the high-rate exchange, long the low-rate exchange.
| Parameter | Type | Default | Description |
|---|---|---|---|
minSpread | number | 0 | Minimum 8h spread % (e.g. 0.05) |
minOI | number | 0 | Minimum OI in USD on the smaller side |
grade | string | all | Filter by grade: A, B, C, D (comma-separated) |
symbols | string | all | Comma-separated symbols |
limit | number | 100 | Max results (1 to 500) |
assetClass | string | crypto | Asset class filter |
{
"success": true,
"data": [
{
"symbol": "PONKE",
"shortExchange": "Kraken",
"longExchange": "Bitunix",
"shortRate8h": 0.5032,
"longRate8h": 0.0000,
"grossSpread8h": 0.5032,
"netSpread8h": 0.2832,
"annualizedPct": 310.1,
"dailyPnlPer10k": 8.50,
"fees": {
"roundTrip": 0.2200,
"shortExchangeTaker": 0.0500,
"shortExchangeMaker": 0.0200,
"longExchangeTaker": 0.0600,
"longExchangeMaker": 0.0200,
"shortExchangeFee": 0.0500,
"longExchangeFee": 0.0600
},
"oi": {
"short": 500000,
"long": 120000,
"total": 620000,
"minSide": 120000
},
"grade": "C",
"stability": "volatile",
"exchangeCount": 5,
"allExchanges": [
{
"exchange": "Kraken",
"rate8h": 0.5032,
"type": "cex",
"makerFee": 0.0200,
"takerFee": 0.0500
}
]
}
],
"meta": {
"totalPairs": 657,
"filtered": 50,
"grades": { "A": 0, "B": 1, "C": 120, "D": 536 },
"feeModel": {
"version": "v1.0-2026-02-01",
"updatedAt": "2026-02-01T00:00:00Z",
"unit": "percent",
"schedule": {
"Binance": { "maker": 0.0200, "taker": 0.0500 },
"Hyperliquid": { "maker": 0.0150, "taker": 0.0450 }
}
}
}
}All fee values are percent-per-trade (e.g. 0.05 means 0.05%). Maker may be negative on venues that rebate makers.
netSpread8h = grossSpread8h - roundTrip, where round-trip assumes taker fills (open + close on each side, so taker × 4).
Use meta.feeModel.version to detect schedule bumps — it changes whenever any EXCHANGE_FEES value changes. The same identifier is on the X-Fee-Model-Version response header for cheap HEAD checks.
Long/Short Ratio
/api/v1/longshortLong/short ratio data from Binance and OKX with historical values. Includes a derived longShortRatio(long ÷ short) and a regimeclassifier so callers don't have to bucket the values themselves.
| Parameter | Type | Default | Description |
|---|---|---|---|
symbol | string | BTC | Symbol (e.g. BTC, ETH, SOL) |
period | string | 1h | Time period: 5m, 15m, 30m, 1h, 4h, 1d |
source | string | global | Data source: global, topTraders, taker |
{
"success": true,
"data": {
"symbol": "BTC",
"period": "1h",
"source": "global",
"longRatio": 52.34,
"shortRatio": 47.66,
"longShortRatio": 1.098,
"regime": "balanced",
"exchange": "binance",
"history": [
{ "longRatio": 52.1, "shortRatio": 47.9, "longShortRatio": 1.088, "timestamp": 1709244000 },
{ "longRatio": 52.34, "shortRatio": 47.66, "longShortRatio": 1.098, "timestamp": 1709247600 }
]
}
}crowded-long— longRatio ≥ 70%long-heavy— 60–70%balanced— 40–60%short-heavy— 30–40%crowded-short— longRatio ≤ 30%
Liquidations
/api/v1/liquidationsRecent liquidation events from the database. Sources: Binance, OKX, HTX, gTrade, Deribit. Two modes: feed (default) returns individual events; summary returns aggregated stats (total / long / short volume + largest single hit) for a symbol over the lookback window — useful when you only want counts, not the full feed.
| Parameter | Type | Default | Description |
|---|---|---|---|
symbol | string | all | Filter by symbol (required for summary mode) |
exchange | string | all | Filter by exchange (feed only) |
side | string | all | Filter by side: long or short (feed only) |
hours | number | 1 | Lookback window (1 to 24 hours) |
limit | number | 100 | Max entries (1 to 500; feed only) |
summary | number | 0 | 1 = aggregated stats instead of feed |
{
"success": true,
"data": [
{
"symbol": "ETH",
"exchange": "binance",
"side": "long",
"quantity": 12.5,
"price": 3245.80,
"valueUsd": 40572.50,
"timestamp": 1713181800000
}
],
"meta": { "timestamp": 1713181800000, "hours": 1, "entries": 1, "limit": 100, "mode": "feed" }
}{
"success": true,
"data": {
"symbol": "BTC",
"hours": 1,
"totalCount": 247,
"totalVolumeUsd": 8420000,
"longVolumeUsd": 6210000,
"shortVolumeUsd": 2210000,
"longShare": 0.737,
"largest": {
"valueUsd": 425000,
"price": 81250.00,
"side": "long",
"exchange": "binance",
"timestamp": 1713181500000
}
},
"meta": { "timestamp": 1713181800000, "mode": "summary" }
}Options
/api/v1/optionsOptions market data across Deribit, Binance, OKX, and Bybit. Includes max pain, put/call ratio, open interest by strike, and implied volatility.
| Parameter | Type | Default | Description |
|---|---|---|---|
currency | string | BTC | Currency: BTC, ETH, or SOL |
{
"success": true,
"data": {
"currency": "BTC",
"underlyingPrice": 84250,
"maxPain": 85000,
"putCallRatio": 0.72,
"totalCallOI": 7200000000,
"totalPutOI": 5300000000,
"totalOI": 12500000000,
"instrumentCount": 4500,
"ivAtm": 48.5,
"exchanges": [
{ "exchange": "Deribit", "callOI": 5100000000, "putOI": 3800000000, "totalOI": 8900000000, "share": 71.2 }
],
"expirations": [
{ "date": "2026-04-25", "callOI": 450000000, "putOI": 320000000, "totalOI": 770000000, "maxPain": 84000 }
]
}
}Top Movers
/api/v1/top-moversTop gaining and losing coins by 24h price change.
| Parameter | Type | Default | Description |
|---|---|---|---|
limit | number | 20 | Max gainers and losers each (1 to 50) |
{
"success": true,
"data": {
"gainers": [
{ "symbol": "PEPE", "price": 0.0000089, "change24h": 24.5 }
],
"losers": [
{ "symbol": "DOGE", "price": 0.162, "change24h": -8.2 }
]
}
}Global Stats
/api/v1/global-statsMarket-wide statistics: altcoin season index, BTC dominance, total market cap, 24h volume.
{
"success": true,
"data": {
"altcoinSeasonIndex": 38,
"btcDominance": 57.2,
"ethDominance": 8.1,
"totalMarketCap": 2850000000000,
"totalMarketCapChange24h": -1.2,
"totalVolume24h": 98000000000,
"totalDerivativesOI": 55000000000,
"activeCryptocurrencies": 10200
}
}Fear & Greed
/api/v1/fear-greedCrypto Fear & Greed Index with optional 30-day history.
| Parameter | Type | Default | Description |
|---|---|---|---|
history | boolean | false | Include 30 day historical values |
{
"success": true,
"data": {
"value": 72,
"label": "Greed",
"timestamp": 1709248000,
"history": [
{ "value": 68, "label": "Greed", "timestamp": 1709161600 }
]
}
}Funding History
/api/v1/funding/historyHistorical funding rate snapshots from the database. 10-minute resolution. Lookback cap depends on your tier: Free 30d / Trader 180d / Pro 1y / Whale 5y.
| Parameter | Type | Default | Description |
|---|---|---|---|
symbols | string | (required) | Comma-separated symbols (max 20) |
days | number | 7 | Lookback period (1 to your tier cap) |
{
"success": true,
"data": {
"BTC": [
{ "day": "2026-04-13", "rate": 0.0082 },
{ "day": "2026-04-14", "rate": 0.0100 }
],
"ETH": [
{ "day": "2026-04-13", "rate": 0.0045 },
{ "day": "2026-04-14", "rate": 0.0061 }
]
},
"meta": { "timestamp": 1713181800000, "symbols": 2, "days": 7 }
}Exchanges
/api/v1/exchangesMetadata for all 33 supported exchanges including fees, funding intervals, trade URL patterns, and a top-level feeModel with the schedule version + last-updated timestamp.
{
"success": true,
"data": [
{
"name": "Binance",
"type": "cex",
"fees": { "takerPct": 0.05, "makerPct": 0.02, "roundTripPct": 0.10 },
"fundingInterval": "8h",
"tradeUrlPattern": "https://www.binance.com/en/futures/{SYMBOL}USDT"
}
],
"meta": {
"total": 33, "cex": 19, "dex": 14,
"timestamp": 1713181800000,
"feeModel": {
"version": "v1.1-2026-05-20",
"updatedAt": "2026-05-20T00:00:00Z",
"unit": "percent"
}
}
}meta.feeModel.version and only refresh when it bumps. X-Fee-Model-Versionand X-Fee-Model-Updated-At response headers mirror the identifiers for cheap HEAD-request bump detection.Status
/api/v1/statusAPI health check + fee-model identifier. No authentication required. Use this for uptime monitoring or as a cheap HEAD-request probe to detect fee-schedule bumps without parsing a body.
{
"success": true,
"status": "operational",
"version": "v1",
"feeModel": {
"version": "v1.0-2026-02-01",
"updatedAt": "2026-02-01T00:00:00Z",
"surfacedOn": ["/api/v1/arbitrage", "/api/v1/spreads", "/api/v1/funding-arb"]
},
"endpoints": [
{ "path": "/api/v1/funding", "method": "GET", "description": "Real-time funding rates across 33 exchanges" }
],
"tiers": {
"free": { "rateLimit": "100 req/min", "dailyLimit": "5,000 req/day" },
"pro": { "rateLimit": "600 req/min", "dailyLimit": "unlimited" }
},
"documentation": "https://info-hub.io/developers/docs",
"timestamp": 1713181800000
}Funding Arbitrage
/api/v1/funding-arbCross-exchange funding-rate arbitrage SCANNER — returns GROSS spreads (no fees deducted). For the net version with feasibility grading + OI sanity + 7-day stability, see /arbitrage.
| Parameter | Type | Default | Description |
|---|---|---|---|
min_venues | number | 3 | Only include symbols with N+ venues (2..40) |
min_spread | number | 0.01 | Minimum 8h spread % to include |
sort | string | annualized | Sort: annualized | spread | venues |
limit | number | 100 | Max symbols (1..500) |
{
"success": true,
"data": [
{
"symbol": "BTC",
"venueCount": 14,
"min": { "exchange": "Hyperliquid", "rate8h": -0.0245, "interval": "1h", "markPrice": 81250.0, "type": "dex" },
"max": { "exchange": "Bybit", "rate8h": 0.0567, "interval": "8h", "markPrice": 81254.5, "type": "cex" },
"spread8h": 0.0812,
"annualized": 88.92,
"venues": [/* every venue */],
"dexOnOneSide": true
}
],
"summary": { "totalSymbols": 230, "displayed": 50, "topAnnualized": 1937, "topSymbol": "AR", "medianSpread": 0.03, "dexCrossSymbols": 18 },
"meta": { "timestamp": 1709248000, "feeModel": { /* see Fee Model section */ }, "scope": "gross" }
}CME Basis
/api/v1/basisCME front-month futures basis vs spot for BTC + ETH. Annualized cash-and-carry rate institutions use to size basis trades. Persistent positive basis = risk-on.
{
"success": true,
"data": [
{
"asset": "BTC",
"spot": 81250.50,
"cmeFront": 82100.00,
"daysToExpiry": 28,
"basisPct": 1.045,
"annualizedPct": 13.63,
"cmeSource": "CME",
"spotSource": "coinbase"
}
],
"meta": { "timestamp": 1709248000, "fromCache": false }
}Listing Radar
/api/v1/listing-radarReal-time feed of Binance listing announcements + delistings. Listings historically pump 30-200% in the first 24h — this is the earliest pre-trade signal we publish.
| Parameter | Type | Default | Description |
|---|---|---|---|
type | string | all | Filter: spot | perp | futures | option | delisting | other |
hot | number | 0 | 1 = only announcements <6h old |
limit | number | 50 | Max results (1..200) |
Events Calendar
/api/v1/earnings-calendarAggregated upcoming protocol events: token unlocks, TGEs, halvings, governance votes. Source-attributed. One unified timeline of every catalyst that historically moves price.
Whale Trades
/api/v1/whalesRecent on-chain DEX whale trades. Two modes:?address=0x... for one wallet (paginated newest-first), or no address for the global feed across every tracked wallet.
| Parameter | Type | Default | Description |
|---|---|---|---|
address | string | Lowercased EVM address or Solana base58 (optional) | |
chain | string | all | ethereum | bsc | arbitrum | base | polygon | optimism | solana |
minValueUsd | number | 0 | Only trades >= this notional (global mode only) |
limit | number | 50 | Max entries (1..200) |
Whale Liquidation Roulette
/api/v1/whale-liqHyperliquid whale positions sorted by proximity to liquidation price. Useful for cascade prediction and alpha generation — the closer a whale is to liq, the bigger the wipeout if it triggers.
| Parameter | Type | Default | Description |
|---|---|---|---|
within | number | 0.20 | Distance threshold (0..1, e.g. 0.10 = within 10% of liq) |
limit | number | 100 | Max rows (1..500) |
Smart Money Leaderboard
/api/v1/smart-money-leaderboardTop Hyperliquid wallets ranked by 90-day realised PnL. For each wallet: pulls closing-trade analytics (win rate, biggest win/loss, top symbols, days-since-last). Heavy first call (~5-15s) — cached 30 min after.
Bridge Flows
/api/v1/bridge-flowsCross-chain bridge flow tracker (Wormhole). Volume, transfers, top assets, top corridors across every Wormhole-supported chain. Strong leading indicator for chain rotation.
Restaking Yields
/api/v1/restakingRestaking yield aggregator. Cross-protocol pools (EigenLayer + Symbiotic + Karak + LRTs) with APY, TVL, reward composition. Source: DeFi Llama yields.
Backtest
/api/v1/backtestRun a strategy backtest on historical data. Two strategies: dca (dollar-cost average accumulation) and funding-carry (collect funding spread between cheap-and-expensive venues). Pure historical simulation — no fees, slippage, or execution lag modelled.
{
"strategy": "dca",
"config": {
"asset": "bitcoin",
"amountUsd": 100,
"intervalDays": 7,
"lookbackDays": 90
}
}{
"strategy": "funding-carry",
"config": {
"notionalUsd": 10000,
"lookbackDays": 30,
"symbol": "BTC"
}
}lookbackDays clamped to 365.Error Codes
| Status | Code | Description |
|---|---|---|
200 | OK | Request succeeded |
400 | Bad Request | Invalid or missing parameters |
401 | Unauthorized | Missing or invalid API key |
429 | Too Many Requests | Rate limit exceeded, check Retry-After header |
500 | Internal Error | Something went wrong on our end |
502 | Bad Gateway | Upstream exchange returned an error |
503 | Unavailable | Service temporarily down for maintenance |
{
"success": false,
"error": "Rate limit exceeded. Paid tiers bump this cap (Trader, Pro, Whale on /pricing) — all free during launch."
}