Spot-Perp Arbitrage
Spot-perp arbitrage captures the funding rate paid between long and short perpetual futures holders by simultaneously holding an offsetting spot position. This endpoint scans 10 exchanges, deduplicates symbols, verifies the required spot or margin leg, computes annualized returns, and returns opportunities sorted by fee-adjusted net APR.
List spot-perp opportunities
Returns an array of spot-perp arbitrage opportunities ranked by fee-adjusted net APR. Each opportunity includes the current funding rate, 7-day cumulative rate, gross APR, diagnostic basis, portfolio direction, and next settlement time. Stale rates older than 6 hours are excluded.
Query parameters
- Name
exchange- Type
- string
- Description
Filter by exchange. One of
all,Binance,OKX,Bybit,Bitget,Gate.io,KuCoin,MEXC,BingX,HTX,CoinEx. Defaults toall.
- Name
direction- Type
- string
- Description
Filter by portfolio direction. One of
all,long,short. Defaults toall. Ashortdirection means buy spot and short the perp (when funding rate is positive);longmeans sell spot and long the perp (when funding rate is negative).
Request
curl -G https://www.sharpe.ai/api/v1/arbitrage/spot-perp \
-H "Authorization: Bearer sk_live_your_key_here" \
-d exchange=all \
-d direction=all
Response
{
"data": [
{
"symbol": "DOGE",
"exchange": "Binance",
"fundingRate": 0.000320,
"cumRate7d": 0.006720,
"apr": 0.3504,
"basisRate": 0.0006,
"netApr": 0.3260667,
"intervalHours": 8,
"direction": "short",
"portfolio": {
"spotSide": "buy",
"perpSide": "short"
},
"nextFundingTime": "2026-03-28T08:00:00Z"
},
{
"symbol": "ETH",
"exchange": "OKX",
"fundingRate": 0.000150,
"cumRate7d": 0.003150,
"apr": 0.16425,
"basisRate": null,
"netApr": 0.1399167,
"intervalHours": 8,
"direction": "short",
"portfolio": {
"spotSide": "buy",
"perpSide": "short"
},
"nextFundingTime": "2026-03-28T08:00:00Z"
}
],
"meta": {
"request_id": "req_abc123def456ghij",
"timestamp": "2026-03-28T07:45:00Z",
"elapsed_ms": 12
}
}
Response fields
Each object in the data array represents a single arbitrage opportunity on one exchange.
- Name
symbol- Type
- string
- Description
The base asset ticker (e.g.,
BTC,ETH,DOGE).
- Name
exchange- Type
- string
- Description
Exchange identifier (e.g.
Binance,OKX,Bybit,Bitget,Gate.io,KuCoin,MEXC,BingX,HTX, orCoinEx).
- Name
fundingRate- Type
- number
- Description
Current funding rate as a decimal (e.g.,
0.0001= 0.01%). This is the per-interval rate.
- Name
cumRate7d- Type
- number | null
- Description
Cumulative funding rate over the last 7 days.
nullif no accumulated data is available.
- Name
apr- Type
- number
- Description
Gross annualized funding return as a decimal (e.g.,
0.3= 30%). Computed by extrapolating the current rate across all intervals in a year. Gross of trading fees. SeenetApr.
- Name
basisRate- Type
- number | null
- Description
Spot-perp basis as a decimal:
(perpPrice − spotPrice) / spotPrice. Best-effort from live prices;nullwhen prices were unavailable (never a silent0).
- Name
netApr- Type
- number | null
- Description
aprnet of four estimated execution fees (open and close both spot and perp) annualized over the 30-day default hold, as a decimal.nullonly whenapris not finite.
- Name
intervalHours- Type
- number
- Description
Hours between funding settlements. Typically
8, but some exchanges use1or4.
- Name
direction- Type
- string
- Description
Portfolio direction:
short(buy spot, short perp) when the funding rate is >= 0, orlong(sell spot, long perp) when the funding rate is < 0.
- Name
portfolio- Type
- object
- Description
Breakdown of the hedge portfolio. Contains
spotSide(buyorsell) andperpSide(longorshort).
- Name
nextFundingTime- Type
- string | null
- Description
ISO 8601 timestamp of the next scheduled funding settlement, or
nullif unavailable.
Single opportunity
{
"symbol": "BTC",
"exchange": "Bybit",
"fundingRate": 0.000100,
"cumRate7d": 0.002100,
"apr": 0.1095,
"basisRate": 0.0004,
"netApr": 0.0851667,
"intervalHours": 8,
"direction": "short",
"portfolio": {
"spotSide": "buy",
"perpSide": "short"
},
"nextFundingTime": "2026-03-28T16:00:00Z"
}