Cross-Exchange Arbitrage
Cross-exchange arbitrage exploits funding rate differentials for the same asset across two venues. The scanner pairs every funding venue (33, CEXs and perp DEXs) across every asset class — crypto plus RWA perps (tokenized equities, commodities, FX, indices) — ranks by the gross annualized funding differential, and prices the spread from real order books where both legs expose one, falling back to reference prices and reporting unknown market data as null rather than zero. Pairs never cross asset classes.
List cross-exchange opportunities
Returns cross-exchange funding differentials ranked by gross annualized APR. An asset needs current funding with a verified per-market settlement interval on at least two selected venues; the best pair per asset is returned. Rows are never dropped for missing market data — spread, open interest and volume degrade to null. Stale funding rates older than 6 hours are excluded.
Query parameters
- Name
exchanges- Type
- string
- Description
Comma-separated list of venues to include. Accepts every funding-tracker venue (33), e.g.
Binance,OKX,Bybit,Hyperliquid,WhiteBIT,Kraken,dYdX. Omit to include all venues.
- Name
minOiUsd- Type
- number
- Description
Minimum open interest in USD on the smaller leg. Defaults to
0(no floor). A leg with unknown OI fails a positive floor.
- Name
minVolUsd- Type
- number
- Description
Minimum 24h perp volume in USD on the smaller leg. Defaults to
0(no floor). A leg with unknown volume fails a positive floor.
- Name
assetClass- Type
- string
- Description
Underlying filter. One of
all(default),crypto, orrwa— the latter covering equity, commodity, FX and index perps. Pairing always stays within one asset class.
Request
curl -G https://www.sharpe.ai/api/v1/arbitrage/cross-exchange \
-H "Authorization: Bearer sk_live_your_key_here" \
-d exchanges=Binance,OKX,Bybit
Response
{
"data": [
{
"symbol": "DOGE",
"assetClass": "crypto",
"longExchange": "Gate.io",
"shortExchange": "Binance",
"longRate": -0.00025,
"shortRate": 0.00035,
"netFundingRate": 0.0006,
"apr": 0.657,
"grossApr": 0.657,
"netApr": 0.608358,
"spreadRate": 0.001998,
"spreadSource": "book",
"longAsk": 0.1002,
"shortBid": 0.1000,
"executableDepthUsd": 25000,
"holdingDays": 30,
"executionStatus": "executable",
"oiLong": 4200000,
"oiShort": 9800000,
"volumeLong24hUsd": 5200000,
"volumeShort24hUsd": 88000000,
"nextSettlement": "2026-03-28T08:00:00Z",
"intervalHours": 8
}
],
"meta": {
"request_id": "req_def456ghi789jklm",
"timestamp": "2026-03-28T07:45:00Z",
"elapsed_ms": 12
}
}
Response fields
Each object in the data array represents the best long/short exchange pair for a single asset.
- Name
symbol- Type
- string
- Description
The base asset ticker (e.g.,
BTC,ETH,TSLA).
- Name
assetClass- Type
- string
- Description
Underlying category:
crypto,equity,commodity,fx, orindex. A pair's two legs always share it.
- Name
longExchange- Type
- string
- Description
The exchange where you open the long position (receiving funding or paying the least).
- Name
shortExchange- Type
- string
- Description
The exchange where you open the short position (receiving the most funding).
- Name
longRate- Type
- number
- Description
Current funding rate on the long exchange as a decimal.
- Name
shortRate- Type
- number
- Description
Current funding rate on the short exchange as a decimal.
- Name
netFundingRate- Type
- number
- Description
Funding differential you collect per
intervalHoursperiod, as a decimal. Each leg's raw rate is normalized to hourly before subtracting, so mixed intervals (1h/4h/8h) compare correctly; the result is expressed at the pair's faster cadence.
- Name
apr- Type
- number
- Description
Gross annualized funding differential as a decimal:
|netFundingRate| × (8760 / intervalHours). Entry spread and fees are one-time costs surfaced separately, not baked in.
- Name
grossApr- Type
- number
- Description
Deprecated alias of
apr, retained for one release.
- Name
netApr- Type
- number | null
- Description
Spread- and fee-adjusted APR over
holdingDays. Present only whenspreadSourceisbook;nullon reference-priced or unpriced rows, where a net figure would overstate precision.
- Name
spreadRate- Type
- number | null
- Description
Signed venue price gap. From
(longAsk − shortBid) / midpointwhen both books exist; from last/mark prices when only reference pricing exists;nullwhen either leg has no price source.
- Name
spreadSource- Type
- string | null
- Description
book(executable quotes),reference(last/mark prices), ornull.
- Name
longAsk- Type
- number | null
- Description
Best ask on the long leg when the venue exposes a book; otherwise
null.
- Name
shortBid- Type
- number | null
- Description
Best bid on the short leg when the venue exposes a book; otherwise
null.
- Name
executableDepthUsd- Type
- number | null
- Description
Smaller top-level quote notional when both providers expose correctly normalized size; otherwise
null.
- Name
holdingDays- Type
- number
- Description
Cost-amortization horizon for
netApr. Currently30.
- Name
executionStatus- Type
- string
- Description
executablewhen the spread comes from real books,indicativeotherwise.
- Name
oiLong- Type
- number | null
- Description
Open interest in USD on the long exchange, from live tickers with a stored-snapshot fallback.
nullwhen the venue did not report — never0.
- Name
oiShort- Type
- number | null
- Description
Open interest in USD on the short exchange.
nullwhen unknown, never0.
- Name
volumeLong24hUsd- Type
- number | null
- Description
24h perp turnover in USD on the long exchange, or
nullwhen the venue does not report it.
- Name
volumeShort24hUsd- Type
- number | null
- Description
24h perp turnover in USD on the short exchange, or
nullwhen unknown.
- Name
nextSettlement- Type
- string | null
- Description
ISO 8601 timestamp of the next known funding settlement, or
nullwhen neither venue reports it. Unknown time is never replaced with the request time.
- Name
intervalHours- Type
- number
- Description
Settlement cadence
netFundingRateis expressed at — the faster of the two legs' funding intervals.longRateandshortRateremain in their exchanges' native per-interval terms.
Single opportunity
{
"symbol": "BTC",
"assetClass": "crypto",
"longExchange": "KuCoin",
"shortExchange": "Binance",
"longRate": -0.00003,
"shortRate": 0.00012,
"netFundingRate": 0.00015,
"apr": 0.16425,
"grossApr": 0.16425,
"netApr": 0.13505,
"spreadRate": 0.0004,
"spreadSource": "book",
"longAsk": 104500.5,
"shortBid": 104458.7,
"executableDepthUsd": null,
"holdingDays": 30,
"executionStatus": "executable",
"oiLong": 4200000,
"oiShort": 9800000,
"volumeLong24hUsd": 310000000,
"volumeShort24hUsd": 9400000000,
"nextSettlement": "2026-03-28T16:00:00Z",
"intervalHours": 8
}