---
title: "Cross-venue funding arbitrage signal — up to 6 exchanges, net-of-fees — $0.02/call"
method: GET
path: "/api/v1/funding-arb/{asset}"
tags: ["funding-arb", "paid"]
---

# Cross-venue funding arbitrage signal — up to 6 exchanges, net-of-fees — $0.02/call

`GET /api/v1/funding-arb/{asset}`

## Request

- Base URL: `https://kronossignals.com` (the document declares no server; this is the origin it was published from)
- URL: `https://kronossignals.com/api/v1/funding-arb/{asset}`
- Auth: none declared

Queries up to 6 perpetual swap exchanges for real-time 8h-equivalent funding rates (Binance USDT-M, OKX, Bybit, KuCoin Futures, Bitget, Hyperliquid) and computes the gross and net-of-fees spread between the best short venue (highest rate8h) and the best long venue (lowest rate8h). gross_spread_bps = (best_short_rate8h − best_long_rate8h) × 10000. net_spread_bps = gross_spread_bps − 20 (ROUND_TRIP_FEE_BPS: 5 bps/side taker × 4 fills). annualized_pct = (net per-8h fraction) × 3 × 365 × 100. Actionability: not_actionable (net≤0), marginal (0<net≤5 bps), actionable (net>5 bps). Outcome recorded to Supabase funding_arb_signals (fire-and-forget). Returns honest nulls when a venue fails — never fabricated. All 17 assets. $0.02 USDC via x402.

## Path parameters

- `asset` 'btc' | 'eth' | 'sol' | 'bnb' | 'xrp' | 'doge' | 'ada' | 'avax' | 'link' | 'dot' | 'ltc' | 'trx' | 'bch' | 'atom' | 'near' | 'apt', required

## Response `200`

Funding arbitrage signal returned (payment verified)

- object
  - `asset` string, required: Asset label (e.g. BTC-USD).
  - `short` string, required: Short ticker.
  - `as_of` string, date-time, required: Timestamp of the venue-rate snapshot.
  - `best_short_venue` string, nullable: Venue with the highest rate8h (receiver of funding when short).
  - `best_long_venue` string, nullable: Venue with the lowest rate8h (pays least / receives when long).
  - `best_short_rate8h` number, nullable: 8h-equivalent rate at the best short venue.
  - `best_long_rate8h` number, nullable: 8h-equivalent rate at the best long venue.
  - `gross_spread_bps` number, nullable: (best_short_rate8h − best_long_rate8h) × 10000.
  - `net_spread_bps` number, nullable: gross_spread_bps − ROUND_TRIP_FEE_BPS (20).
  - `spread_8h_normalized` number, nullable: Raw (non-bps) 8h-normalized rate spread that gross_spread_bps is derived from (gross_spread_bps = spread_8h_normalized × 10000).
  - `venues_count` integer: Number of the 6 venues that returned a usable rate.
  - `annualized_pct` number, nullable: (net per-8h fraction) × 3 × 365 × 100.
  - `actionability` 'not_actionable' | 'marginal' | 'actionable' | 'insufficient_data', required: not_actionable: net≤0 bps. marginal: 0<net≤5 bps. actionable: net>5 bps.
  - `round_trip_fee_bps` number, required: Fee assumption used (5 bps/side taker × 4 fills).
  - `methodology` string, required: Computation explanation.
  - `caveats` string[], required: Honest limitations and disclaimers.
  - `per_venue` object, required: Per-venue rate8h and OI. Null = venue failed or asset not listed.
  - `dispersion` object, required
    - `max_min_spread` number, nullable
    - `stdev` number, nullable
    - `venues_reporting` integer
  - `oi_weighted_avg_8h` number, nullable
  - `simple_avg_8h` number, nullable

## Other responses

- `400`: Unsupported asset slug.
- `402`: Payment Required — x402 micropayment instructions in response body.
- `503`: All venue fetches failed — no rates available.

---

[API](https://skmtc.dev/kronossignals/apis/kronos-crypto-data-api.md) · [All operations](https://skmtc.dev/kronossignals/apis/kronos-crypto-data-api/llms.txt) · [OpenAPI document](https://skmtc.dev/kronossignals/apis/kronos-crypto-data-api/revisions/bfdcf7230e93?raw)
