Get Funding
GET/v1/cryptodata/backtesting/funding
Historical funding — the 5-minute rate snapshots (with OI / mark) or, with ``grain=hourly``, the settled hourly Hyperliquid payments. Read ``grain`` on the response before aggregating: the default rows sample the live hourly rate ~12 times per settlement, so summing them overstates carry ~12x. The honest daily carry from the snapshot series is ``mean(funding_rate) x 24``; the exact figure is ``sum(funding_rate)`` over the ``grain=hourly`` rows. ``coverage`` gives local retention for the symbol; ``next_cursor`` / ``has_more`` page the window. Hyperliquid pays funding on the ORACLE price (rate x position x oracle), which its history API never serves. ``oracle_price`` on the hourly rows is the asset context at the settlement boundary: Hyperliquid's own archived minute snapshot (``oracle_source=hl_s3_asset_ctxs``, ``oracle_as_of`` = its stamp) or, from 2026-10-24 03:00 UTC, our read seconds after the boundary (``live_read``, ``oracle_as_of`` = our wall clock). Null only where neither exists.
Price
$0.01/ callEdge cache
Off
Uptime 24h
100.00%
p95
784ms
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| symbol* | query | string | Symbol, e.g. BTC or BTCUSDT |
| exchange | query | string = hyperliquid | binance or hyperliquid |
| start* | query | string | Start time (ISO 8601 or unix ms) |
| end | query | string | End time (ISO 8601 or unix ms, defaults to now). EXCLUSIVE — the range is [start, end), so consecutive windows do not repeat a boundary row. |
| bounds | query | string = half-open | Interval convention for `start`/`end`. `half-open` (default) is [start, end) — `end` is EXCLUSIVE, so consecutive windows tile without repeating a boundary row. `closed` is [start, end] — `end` INCLUSIVE, the pre-2026-08-08 behaviour; use it only to keep an existing integration byte-identical. |
| limit | query | integer = 1000 | |
| grain | query | string = snapshot_5m | `snapshot_5m` (default): the LIVE rate sampled every 5 minutes, plus open interest, mark and (from 2026-10-24 02:10 UTC) `oracle_price` / `premium` — a rate series, NOT payments; do not sum it. Hyperliquid rows before 2026-03-30 are hourly settled prints seeded from the deep archive (null OI/mark). `hourly`: one row per settled Hyperliquid funding print (HL `fundingHistory`, the carry actually paid), with `premium` plus the asset context at that boundary — `oracle_price` / `mark_price` / `open_interest` / `oracle_as_of` and `oracle_source` (`hl_s3_asset_ctxs` = HL's archived minute snapshot, `live_read` = our read seconds after it, from 2026-10-24 03:00 UTC); hyperliquid only, filled daily for the previous UTC day. |
| cursor | query | string | Opaque page cursor — the `next_cursor` of the previous response, verbatim. Resumes strictly after the last row served, keyed on the table's full primary key, so a page boundary inside a same-millisecond burst loses nothing (unlike `start = last.time + 1`). `start` / `end` still bound the window. |
| format | query | string = json | json or csv. CSV has no envelope: paging state travels in the `X-Has-More` / `X-Next-Cursor` response headers. |
Code
# 1. No key, no payment: the gateway answers 402 with the price
curl -i "https://api.realtimeapi.ai/v1/cryptodata/backtesting/funding?symbol=BTCUSDT&start=2026-10-28"
# 2. Pay: retry with a signed x402 payment (any x402 client builds this header)
curl "https://api.realtimeapi.ai/v1/cryptodata/backtesting/funding?symbol=BTCUSDT&start=2026-10-28" -H "PAYMENT-SIGNATURE: $X402_PAYMENT"// npm i @x402/fetch @x402/core @x402/evm viem
import { wrapFetchWithPayment } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
const client = x402Client.fromConfig({ schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(privateKeyToAccount(PRIVATE_KEY)) }] });
const pay = wrapFetchWithPayment(fetch, client);
const data = await (await pay("https://api.realtimeapi.ai/v1/cryptodata/backtesting/funding?symbol=BTCUSDT&start=2026-10-28")).json();
console.log(data);# pip install x402 eth-account requests
from eth_account import Account
from x402.clients.requests import x402_requests
session = x402_requests(Account.from_key(PRIVATE_KEY))
print(session.get("https://api.realtimeapi.ai/v1/cryptodata/backtesting/funding?symbol=BTCUSDT&start=2026-10-28").json())curl "https://api.realtimeapi.ai/v1/cryptodata/backtesting/funding?symbol=BTCUSDT&start=2026-10-28" -H "X-API-Key: $RTAPI_KEY"Frequently asked questions
How do I get get funding from CryptoDataAPI?
Send GET https://api.realtimeapi.ai/v1/cryptodata/backtesting/funding. Pay $0.01 per request with x402, or send an X-API-Key header.
What does GET /backtesting/funding cost?
$0.01 per successful request in USDC on Base. Failed requests are never charged.
Can I call this endpoint from an MCP client?
Yes. Connect any MCP client to the RealtimeAPI server and use call_feed with this endpoint's URL, or get_quote to check the price first.