Skip to content

Funding normalisation

Venues publish funding in different units and for different intervals: one settles every hour, another every eight, another accrues continuously and publishes a rate per hour or per second. DEBYKO stores the rate exactly as the venue published it, records the interval or unit that rate is for, and derives a second figure on one basis. Nothing is guessed: where the venue does not publish the unit or the interval, there is no second figure.

Compare the current funding spread across all collected instruments in Studio, with native intervals and 30-day settlement context.

field what it is
funding the venue’s own rate, as published, for the listing’s own interval. A fraction (0.0001 is 0.01%). Never rescaled.
funding_interval how often funding settles on the listing, from the venue’s data or, where the venue does not publish it, from its documentation (funding_interval_source says which).
funding_8h the same rate restated over 8 hours: funding × 8 h / funding_interval. Null where the registry holds no interval.
funding_short, funding_short_8h the short side’s rate, where the venue charges one rate for both sides: the negative of funding, marked derived.
funding_cap, funding_floor the highest and lowest rate the venue lets a settlement take, as its API publishes them, for the same interval. Null where the venue’s API publishes none.
funding_cap_8h, funding_floor_8h the bounds restated over 8 hours exactly as funding_8h restates the rate, so a rate and its cap are on one basis.
funding_at_cap true when funding sits on a bound the venue published.

A venue that accrues funding continuously has no settlement interval: funding_interval is null with reason funding_continuous, and the registry holds instead the period its rate is per (funding_rate_unit on GET /v2/instruments: per_hour, per_second, per_8h). There funding_8h is funding × the number of such periods in 8 hours: 8 per hour, 28 800 per second.

A rate published for one hour and a rate published for eight hours differ by a factor of eight before the market has said anything. Comparing them as published compares units, not markets. funding_8h puts every rate on one basis, and the interval stays beside it so the original is never hidden. Worked example, with numbers: Funding rate 8h vs 1h.

An hourly rate of 0.0000125 is 0.0001 over 8 hours (0.01%). The arithmetic is the rule above and nothing else.

How each venue’s rate and interval are known

Section titled “How each venue’s rate and interval are known”

Generated from the venue facts of the platform. The interval of a listing is per listing on a venue that publishes one (Binance-family venues publish it for each symbol), so it is read from GET /v2/instruments, not from this table.

venue funding the venue’s rate field how the interval or unit is known the 8 h figure
ASTER-PERP settled lastFundingRate (as published) field fundingIntervalHours, in hours funding × 8 h / funding_interval
AVANTIS-PERP continuous fundingRate.long (divided by 100) the rate is per hour; unit from github.com/Avantis-Labs/avantis_trader_sdk/blob/main/docs/mintlify/data/socket-io.mdx (fundingRate = fundingFeePerHourP) funding × the number of rate periods in 8 h
BINANCE-USDM settled lastFundingRate (as published) field fundingIntervalHours, in hours funding × 8 h / funding_interval
BITGET-PERP settled fundingRate (as published) field fundInterval, in hours funding × 8 h / funding_interval
BYBIT-PERP settled fundingRate (as published) field fundingInterval, in minutes funding × 8 h / funding_interval
COINBASE-INTX settled funding_rate (as published) field funding_interval, in nanoseconds funding × 8 h / funding_interval
DERIBIT-PERP continuous funding_8h (as published) the rate is per 8h; unit from Coinbase Derivatives / Deribit linear perpetual funding specification: published rate is expressed per 8 hours funding × the number of rate periods in 8 h
DYDX-PERP settled rate (as published) a constant of 1h from the venue’s documentation, docs.dydx.xyz/concepts/trading/funding funding × 8 h / funding_interval
EDGEX-PERP settled ticker.fundingRate (unit undocumented) (as published) field fundingRateIntervalMin, in minutes none: the unit or interval is not published, so funding_8h is null with reason venue_capability
GATE-PERP settled funding_rate (as published) field funding_interval funding × 8 h / funding_interval
GMX-PERP continuous fundingRateLong (divided by 10^30 and negated) the rate is per hour; unit from arbitrum.gmxapi.io/v1/markets/tickers fundingRateLong = /v1/markets/info fundingFactorPerSecond × 3600; docs.gmx.io/docs/api/contracts/fees funding × the number of rate periods in 8 h
HYPERLIQUID settled funding (as published) field fundingIntervalHours, in hours funding × 8 h / funding_interval
KRAKEN-FUTURES settled relative_funding_rate (as published) a constant of 1h from the venue’s documentation, support.kraken.com/articles/4844359082772-linear-multi-collateral-derivatives-contract-specifications funding × 8 h / funding_interval
LIGHTER-PERP settled market_stats.funding_rate (percent per hour) (divided by 100) a constant of 1h from the venue’s documentation, docs.lighter.xyz/trading/funding funding × 8 h / funding_interval
MEXC-PERP settled fundingRate (as published) field collectCycle, in hours funding × 8 h / funding_interval
NADO-PERP settled funding_rate_history.funding_rate_x18 (divided by 10^18) a constant of 1h from the venue’s documentation, docs.nado.xyz/core/funding-rates funding × 8 h / funding_interval
OKX-PERP settled settFundingRate (as published) the difference of nextFundingTime,fundingTime funding × 8 h / funding_interval
SYNTHETIX-PERP settled fundingRate (as published) field fundingInterval, in milliseconds funding × 8 h / funding_interval
WEEX-FUTURES settled fundingRate (as published) field collectCycle, in minutes funding × 8 h / funding_interval

The interval is the one in force at each print

Section titled “The interval is the one in force at each print”

A venue can change the funding interval of a listing without notice: Binance moved ADAUSDC from 8 hours to 4 in March 2025 (its print at 2025-03-06 08:00 settled an 8 h period, the next at 12:00 a 4 h one), and it has done the same to many USD-M symbols since. A print is therefore restated by the interval that held when it settled, never by today’s: POST /v2/snapshots/history returns funding_interval and funding_8h per row, each from the interval in force at that row’s time (GET /v2/instruments carries the current one).

The platform keeps the interval as a dated fact (listing_funding_interval): one row each time it changes, written when a venue record carries a new interval, or, for history before collection began, derived from the gaps between the settlement times the venue itself published (a print four hours after the previous one settled a 4 h period). Only the usual intervals count (1, 2, 4, 8 hours, the gap rounded to the minute); a longer gap is a halted listing, and a single gap of twice the interval between runs of the same interval is a missed settlement; neither says anything about the interval, and the print keeps the interval before it. A settlement print at the instant a period changes belongs to the period it closes. Where nothing was recorded for a listing, the registry’s current interval is read, as before.

Where the history comes from: the venue’s public funding-history endpoint (GET /fapi/v1/fundingRate on Binance USD-M, GET /v5/market/funding/history on Bybit, GET /api/v5/public/funding-rate-history on OKX) through the operator’s funding-backfill command. A backfilled print is a funding row with origin backfill, stamped with the venue’s settlement time (history is addressed by time of receipt, so a row stamped with the day of the fetch would answer to no past window), and kept in the longest retention class. It stops short of the first sample this platform observed itself, and it never writes into a UTC day that is anchored on Base (ADR-034): those prints are skipped and counted, and a late row there is a revision of the day (ADR-036) only on the owner’s word.

The prints themselves, one row each with the interval in force at it, the cross-check against the interval the venue publishes, and the cap at the time, are GET /v2/funding/settlements: Funding settlements.

Kraken Futures: the predicted rate and the settled rate

Section titled “Kraken Futures: the predicted rate and the settled rate”

The live funding of KRAKEN-FUTURES is the rate its ticker publishes (relative_funding_rate): the venue’s predicted rate for the hour in progress. It moves while the hour runs, and it is not the rate charged. The settled rate is the venue’s own figure, published after the hour in its funding history (relativeFundingRate of historicalfundingrates). The two differ: live samples taken before the hour differed from the settled figure on 95 of 98 prints. Read the live figure as a forecast, and the settled one as what was paid. GET /v2/funding/settlements uses the settled rate (rate_source: venue_history). A print recorded live holds the last sample before the hour, a predicted rate, until the backfill reads the venue’s figure over it; the row says which of the two it holds in rate_source.

Several venues build the funding rate on a fixed interest component of 0.01% per 8 hours (0.03% per day), so even a quiet market prints about 0.01% per 8 hours (1 bps) and two such venues agree by construction. base_rate_fixed states what each venue’s own documentation says, and nothing it does not: it is true for Binance, Bybit, OKX, Gate, Bitget, Aster, Nado and Hyperliquid (documented exceptions, such as Binance’s ETHBTC or Gate’s traditional-finance contracts, are the venues’ own and stay at 0), and false for Kraken, Deribit, dYdX, edgeX, Lighter, GMX and Weex, whose formulas carry no such term or a per-market or borrow-rate one. For MEXC, Coinbase International, Avantis, Synthetix and the HIP-3 builder dexes of Hyperliquid it is null: not verified, so no claim is made. Read a gap between two base_rate_fixed venues as a gap in the premium, not in the base.

A venue whose funding unit or interval is not published, or not documented, has no funding_8h. The registry does not assume a scale: the figure is null with a reason, and a comparison that needs it leaves the listing out and says so. The venues in the last column above marked “none” are those.

A venue clamps funding at a cap and a floor, so an extreme value can be the venue’s rule and not the market. Where the venue’s API publishes the bounds they are funding_cap and funding_floor; a cap the venue documents only in prose is not data and is not stored. What each venue’s API carries, and the request that carries it, is the funding-cap survey of docs://layers in the MCP server and in the table below.

venue status request fields scope basis
ASTER-PERP published_not_collected GET fapi.asterdex.com/fapi/v1/fundingInfo fundingFeeCap; fundingFeeFloor per symbol fraction per funding interval (fundingIntervalHours), read as Binance’s; not stated
AVANTIS-PERP not_published GET data.avantisfi.com/v2/trading — - -
BINANCE-USDM published GET fapi.binance.com/fapi/v1/fundingInfo adjustedFundingRateCap; adjustedFundingRateFloor per symbol fraction, per the symbol’s funding interval (fundingIntervalHours)
BITGET-PERP published_not_collected GET api.bitget.com/api/v2/mix/market/current-fund-rate?productType=USDT-FUTURES maxFundingRate; minFundingRate per symbol decimal fraction, per fundingRateInterval (hours)
BYBIT-PERP published GET api.bybit.com/v5/market/instruments-info?category=linear upperFundingRate; lowerFundingRate per listing fraction, per the listing’s funding interval (fundingInterval, minutes)
COINBASE-INTX not_published GET api.international.coinbase.com/api/v1/instruments — - -
DERIBIT-PERP not_published GET drb.coinbase.com/api/v2/public/get_instruments; public/ticker — - -
DYDX-PERP not_published GET indexer.dydx.trade/v4/perpetualMarkets (initialMarginFraction, maintenanceMarginFraction) and the chain parameter funding_rate_clamp_factor_ppm — per listing through its margins; the factor is global documented: 6 x (initial - maintenance margin fraction), per 8 h
EDGEX-PERP unknown GET edgex-prod-v2.edgex.exchange/api/v2/public/meta/getMetaData fundingMaxRate; fundingMinRate per contract fraction; the interval is not stated (fundingRateIntervalMin is 240 on all 187 contracts)
GATE-PERP published_not_collected GET api.gateio.ws/api/v4/futures/usdt/contracts funding_rate_limit (cap only; the floor is not published) per contract fraction, per funding_interval (seconds); read as a symmetric limit
GMX-PERP published_not_collected GET arbitrum.gmxapi.io/v1/markets/info minFundingFactorPerSecondLong/Short; maxFundingFactorPerSecondLong/Short per market 1e30-scaled fraction per second (hourly rate = value / 1e30 x 3600)
HYPERLIQUID not_published — — per venue (the same for every asset) documented in prose: 4% per hour
KRAKEN-FUTURES published GET futures.kraken.com/derivatives/api/v3/instruments maxRelativeFundingRate; minRelativeFundingRate on pre-IPO perpetuals only per instrument fraction on the relative hourly scale of relativeFundingRate (0.005 is 0.5% per hour)
LIGHTER-PERP published GET mainnet.zklighter.elliot.ai/api/v1/orderBookDetails funding_clamp_big (no floor field) per listing percent per 8 h on the wire (4.0000 is 4 % per 8 h); stored as a fraction per the listing’s 1 h funding interval (0.005)
MEXC-PERP published GET contract.mexc.com/api/v1/contract/funding_rate maxFundingRate; minFundingRate per contract decimal fraction, per the contract’s collectCycle (hours)
NADO-PERP not_published — — per venue documented in prose: +-2% per day
OKX-PERP published WS wss://ws.okx.com:8443/ws/v5/public funding-rate (REST: GET www.okx.com/api/v5/public/funding-rate) maxFundingRate; minFundingRate per instrument fraction, per settlement of the instrument’s own interval (0.01 on an 8 h and on a 4 h swap)
SYNTHETIX-PERP not_published — — per market documented in prose: +-2% (BTC, ETH) and +-4% (SOL) per 8 h
WEEX-FUTURES not_published GET api-contract.weex.com/capi/v3/market/exchangeInfo; premiumIndex; fundingRate — - -

published means the platform collects the bound; published_not_collected that the API carries it and the platform does not collect it yet; unknown that the survey could not resolve the unit or the interval.