Skip to content

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 4 exchanges in real time, deduplicates symbols, computes annualized returns, and returns opportunities sorted by APR.


GET/v1/arbitrage/spot-perp

List spot-perp opportunities

Returns an array of spot-perp arbitrage opportunities ranked by annualized return. Each opportunity includes the current funding rate, 7-day cumulative rate, APR, 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. Defaults to all.

  • Name
    direction
    Type
    string
    Description

    Filter by portfolio direction. One of all, long, short. Defaults to all. A short direction means buy spot and short the perp (when funding rate is positive); long means sell spot and long the perp (when funding rate is negative).

Request

GET
/v1/arbitrage/spot-perp
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.3464,
      "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.16025,
      "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 (Binance, OKX, Bybit, or Bitget).

  • 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. null if 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 — see netApr.

  • Name
    basisRate
    Type
    number | null
    Description

    Spot-perp basis as a decimal: (perpPrice − spotPrice) / spotPrice. Best-effort from live prices; null when prices were unavailable (never a silent 0).

  • Name
    netApr
    Type
    number | null
    Description

    apr net of estimated round-trip trading fees over the hold, as a decimal. null only when apr is not finite.

  • Name
    intervalHours
    Type
    number
    Description

    Hours between funding settlements. Typically 8, but some exchanges use 1 or 4.

  • Name
    direction
    Type
    string
    Description

    Portfolio direction: short (buy spot, short perp — when funding rate >= 0) or long (sell spot, long perp — when funding rate < 0).

  • Name
    portfolio
    Type
    object
    Description

    Breakdown of the hedge portfolio. Contains spotSide (buy or sell) and perpSide (long or short).

  • Name
    nextFundingTime
    Type
    string | null
    Description

    ISO 8601 timestamp of the next scheduled funding settlement, or null if unavailable.

Single opportunity

{
  "symbol": "BTC",
  "exchange": "Bybit",
  "fundingRate": 0.000100,
  "cumRate7d": 0.002100,
  "apr": 0.1095,
  "basisRate": 0.0004,
  "netApr": 0.1055,
  "intervalHours": 8,
  "direction": "short",
  "portfolio": {
    "spotSide": "buy",
    "perpSide": "short"
  },
  "nextFundingTime": "2026-03-28T16:00:00Z"
}

Was this page helpful?