XOOMAR

Free Funding Rates API

Real-time perpetual futures funding rates from Binance, Bybit, and OKX. No API key. Open CORS. Competitors charge $50-200/month for the same underlying data; the exchanges publish it for free, so we do too.

Endpoints

GET
/api/markets/funding-rates

Current funding rates for all 30+ tracked symbols across all exchanges.

GET
/api/markets/funding-rates/{slug}?history=30d|1y|all

Historical funding rates for a specific symbol. Default 30 days.

Rate Limit

30 req/min/IP

CORS

Open (*)

Auth

None

Live Response (right now)

{
  "data": [
    {
      "symbol": "btc",
      "baseAsset": "BTC",
      "exchange": "bybit",
      "fundingRate": "-0.0000041400",
      "markPrice": "64403.88000000",
      "openInterest": "3152799525.8300",
      "nextFundingTime": "2026-06-18T00:00:00.000Z"
    },
    {
      "symbol": "btc",
      "baseAsset": "BTC",
      "exchange": "binance",
      "fundingRate": "0.0000261600",
      "markPrice": "64403.49738406",
      "openInterest": "6382719217.4967",
      "nextFundingTime": "2026-06-18T00:00:00.000Z"
    },
    {
      "symbol": "btc",
      "baseAsset": "BTC",
      "exchange": "okx",
      "fundingRate": "0.0000109866",
      "markPrice": null,
      "openInterest": null,
      "nextFundingTime": "2026-06-18T00:00:00.000Z"
    }
  ],
  "updatedAt": "2026-06-17T23:44:12.574Z",
  "source": "xoomar.com",
  "docs": "https://xoomar.com/markets/api"
}

Examples

curl

curl https://xoomar.com/api/markets/funding-rates

Python

import requests

r = requests.get("https://xoomar.com/api/markets/funding-rates")
data = r.json()["data"]
for row in data:
    print(f"{row['baseAsset']} {row['exchange']}: {row['fundingRate']}")

JavaScript

const res = await fetch("https://xoomar.com/api/markets/funding-rates");
const { data } = await res.json();
console.log(data);

Honest Limits

  • Snapshots update every 60 seconds. This is NOT tick-level data.
  • Historical funding goes back to 2019 for major pairs on Binance.
  • Not suitable for HFT or sub-second strategies.
  • 30 requests/minute per IP. If you need more, run your own Binance websocket.

Main Features

  • Live funding rates for 30 tracked perpetual futures symbols across Binance, Bybit, and OKX, refreshed every 60 seconds.
  • Cross-exchange comparison in one call: the same coin's rate on all three venues side by side, so basis and arb spreads are one subtraction away.
  • Historical funding settlements back to 2019 for the majors via the per-symbol endpoint.
  • Mark price, 24h price change, open interest, and next funding time bundled into the same row so one request powers a whole dashboard widget.
  • Funding percentile context (how extreme is the current rate vs the last 30 days) feeds our Signals API from this same dataset.

How It Works

Three stages run continuously on our own infrastructure; you read the result.

1

Polling

Every 60 seconds a worker hits Binance premiumIndex, Bybit tickers, and OKX funding-rate endpoints for all tracked symbols. Failures on one exchange never block the others.

2

Enrichment

Binance's funding feed does not carry open interest, so rows are enriched with the latest value from our hourly OI table before serving. Settled funding events are appended to a history table that goes back to 2019.

3

Serving

Responses come from a 120-second cache with a direct database fallback, so the endpoint stays up even mid-deploy.

Real Example

Request

curl "https://xoomar.com/api/markets/funding-rates"

Response (captured live, trimmed)

{
  "data": [
    {
      "slug": "btc",
      "baseAsset": "BTC",
      "exchange": "binance",
      "markPrice": "64140.60000000",
      "fundingRate": "0.00001876",
      "nextFundingTime": "2026-06-12T16:00:00.000Z",
      "openInterest": null,
      "openInterestValue": null,
      "priceChangePct24h": "0.023558"
    },
    {
      "slug": "btc",
      "baseAsset": "BTC",
      "exchange": "bybit",
      "markPrice": "64128.90",
      "fundingRate": "0.00005431",
      "nextFundingTime": "2026-06-12T16:00:00.000Z",
      "openInterest": "54376.122",
      "openInterestValue": "3487080890.13",
      "priceChangePct24h": "0.023558"
    }
  ],
  "updatedAt": "2026-06-12T15:08:34.581Z",
  "source": "xoomar.com",
  "docs": "https://xoomar.com/markets/api"
}

Note the real quirk visible here: Binance rows carry null OI between hourly enrichments while Bybit reports it natively. Your code should treat OI as nullable.

What People Build With This

Funding arbitrage scanners

Diff the same coin's rate across the three venues each minute and alert when the spread covers fees. The cross-exchange layout makes this a five-line script.

Carry strategy dashboards

Annualize the 8-hour rate (rate x 3 x 365) per symbol and rank coins by carry. The history endpoint backtests the strategy to 2019.

Sentiment overlays

Persistent positive funding marks crowded longs. Chart funding against your own price data to spot squeeze conditions.

Trading bot inputs

MT4/MT5 EAs and Python bots poll this endpoint as a crowd-positioning filter before entering trades.

Pricing and Fair Use

Free. No API key, no signup, no credit card. We rate limit per IP to keep the service fast for everyone; a 429 response carries a Retry-After header telling you exactly when to retry. Cache responses on your side where you can. If you are building something that needs guaranteed volume, contact us first instead of hammering the endpoint.

Response Shape

Every endpoint returns the same JSON envelope: { data, updatedAt, source, docs }. The data field is an array of records with these fields:

FieldTypeDescription
slugstringSymbol slug used in URLs (btc, eth, sol...)
baseAssetstringBase asset ticker (BTC, ETH...)
exchangestringbinance, bybit, or okx
markPricestring | nullLatest mark price in USD
fundingRatestring | nullCurrent funding rate as a decimal (0.0001 = 0.01% per interval)
nextFundingTimestring | nullISO timestamp of the next funding settlement
openIntereststring | nullOpen interest in contracts
openInterestValuestring | nullOpen interest notional in USD
priceChangePct24hstring | null24h price change as a decimal

One row per symbol per exchange. The per-symbol endpoint /api/markets/funding-rates/{slug} returns { current, history }; history is null unless you pass ?history=30d|1y|all, and extends to 2019 for the majors.

Numeric values arrive as strings where precision matters (prices, rates); parse with your language's decimal type for accounting-grade math. Rate limiting is fair-use per IP; a 429 response includes a Retry-After header. No authentication, no API key, no signup. Attribution is appreciated: xoomar.com/markets.

Frequently Asked Questions

Is the funding rate API really free?
Yes. No key, no signup. The underlying data comes from public exchange APIs. We aggregate and serve it for free.
How often does the data update?
Every 60 seconds. Each response includes an updatedAt timestamp so you know exactly when the snapshot was taken.
Can I use this in my trading bot?
Absolutely. Open CORS means it works from browsers, Node.js, Python, or any language. Stay within the 30 req/min limit.
What exchanges are covered?
Binance USDT-M, Bybit linear, and OKX USDT-M. All three report funding for the same 30 major perpetual pairs.
How far back does the history go?
Funding history extends to 2019 for major pairs on Binance. Use the ?history=all parameter on the per-symbol endpoint.

Data on this page is provided for informational purposes only and is not financial advice. See our editorial policy.