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.
The rule
Section titled “The rule”| 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.
Why 1 h and 8 h differ
Section titled “Why 1 h and 8 h differ”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.
A fixed base interest rate
Section titled “A fixed base interest rate”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.
Where a venue publishes no usable unit
Section titled “Where a venue publishes no usable unit”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.
Caps and floors
Section titled “Caps and floors”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.