/api/margin-fee/matrix
GETAvailable

Margin borrow-rate matrix

Margin borrow-rate matrix (coin × exchange)

GET/api/margin-fee/matrix
Cells older than 3 hours carry `is_stale: true` in `cells`; cells older than 6 hours are not returned.

Request

Query parameters

NameTypeRequiredDefaultAllowed valuesDescription
vipLevelintegerOptional0≥ 0 · ≤ 9VIP level (Binance only). A value outside the supported range is treated as 0. Example: 0

Example request

curl -s "https://www.coinboss.com/api/margin-fee/matrix?vipLevel=0"

Response fields

The field table is generated from real responses, so it lists exactly what the endpoint returns. Paths use a[] for array items and {*} for objects keyed by a dynamic name such as a coin or an exchange.

FieldTypeUnitDescription
successboolean—true when the request succeeded. On failure the body is `{ success: false, code, error, request_id }`.
exchangesarray—Exchanges.
exchanges[]string—Exchanges.
dataarray—Payload.
data[]object—Payload.
data[].coinstring—Coin symbol, upper case (for example BTC).
data[].dailyobject—Daily values.
data[].daily.binancenumber—Value for exchange `binance` (the key is the exchange id).
data[].daily.bitgetnumber—Value for exchange `bitget` (the key is the exchange id).
data[].daily.bybitnumber—Value for exchange `bybit` (the key is the exchange id). may be absent
data[].daily.gatenumber—Value for exchange `gate` (the key is the exchange id).
data[].daily.okxnumber—Value for exchange `okx` (the key is the exchange id).
data[].annualobject—Annualised margin borrow rate per exchange (daily rate × 365) as a fraction (0.0048 = 0.48 %); keys are exchange ids, only cells updated within 6 hours.
data[].annual.binancenumber—Value for exchange `binance` (the key is the exchange id).
data[].annual.bitgetnumber—Value for exchange `bitget` (the key is the exchange id).
data[].annual.bybitnumber—Value for exchange `bybit` (the key is the exchange id). may be absent
data[].annual.gatenumber—Value for exchange `gate` (the key is the exchange id).
data[].annual.okxnumber—Value for exchange `okx` (the key is the exchange id).
data[].updated_atnumbermsWhen this row was last updated.
data[].cellsobject—Matrix cells. dynamic keys: binance,bitget,gate,okx
data[].cells.{*}object—Matrix cells.
data[].cells.{*}.updated_atnumbermsWhen this row was last updated.
data[].cells.{*}.is_staleboolean—true when the row is older than the freshness window; stale rows are not used in totals.
updated_atnumbermsWhen this row was last updated.
vipLevelnumber—Binance VIP tier (0–9) the Binance column refers to, echoed from the request; other exchanges always show their base tier.
vipSupportobject—VIP tiers selectable per exchange; keys are exchange ids and only `binance` is present, with the list of tiers that have fresh data.
vipSupport.binancearray—Value for exchange `binance` (the key is the exchange id).
vipSupport.binance[]number—Value for exchange `binance` (the key is the exchange id).
data_updated_atnumbermsTimestamp.
stale_threshold_msnumbermsA rate older than this is flagged `is_stale`.
hide_threshold_msnumbermsA rate older than this is removed from the matrix and listed in `hidden_stale`.
stale_exchangesarray—Exchanges whose newest rate is older than `stale_threshold_ms`.
stale_exchanges[]object—Exchange id and the time of its newest rate (`last_updated_at`, ms).
stale_exchanges[].exchangestring—Exchange id, lower case (for example `binance`).
stale_exchanges[].last_updated_atnumbermsTimestamp.
hidden_stalearray—Rates removed from the matrix because they are older than `hide_threshold_ms`.
hidden_stale[]object—Exchange, coin and time (`updated_at`, ms) of one removed rate.
hidden_stale[].exchangestring—Exchange id, lower case (for example `binance`).
hidden_stale[].coinstring—Coin symbol, upper case (for example BTC).
hidden_stale[].updated_atnumbermsWhen this row was last updated.
hidden_stale[].is_staleboolean—true when the row is older than the freshness window; stale rows are not used in totals.

Generated 2026-11-11 23:00 UTC from 1 real responses.

Example response

/api/margin-fee/matrix?vipLevel=0 · Real response captured 2026-11-13 03:57:32 UTC. Long arrays and maps are shortened for display: data had 14 items; data[].cells had 5 items; hidden_stale had 15 items; vipSupport.binance had 10 items.

  • {
    • "success": true,
    • "exchanges": [
      • "binance",
      • "okx",
      • "bybit",
      • "bitget",
      • "gate"
      ],
    • "data": [
      • { … 5 },
      • { … 5 }
      ],
    • "updated_at": 1794542252596,
    • "vipLevel": 0,
    • "vipSupport": {
      • "binance": [ … 8 ]
      },
    • "data_updated_at": 1794540604531,
    • "stale_threshold_ms": 10800000,
    • "hide_threshold_ms": 21600000,
    • "stale_exchanges": [
      • { … 2 }
      ],
    • "hidden_stale": [
      • { … 4 },
      • { … 4 }
      ]
    }

Details

Authentication
None. Public endpoint.
Rate limit
1200 requests per minute per IP
Server cache
60s
Edge micro-cache
10s
Update frequency
every 30 min; rows older than 6 h are dropped; API cache 60 s
Window
current rate
Data sources
Margin borrow interest rates per exchange and coin, collected from each exchange's public margin-interest endpoint.
Exchange coverage
6 exchanges (binance, okx, bybit, bitget, gate, kucoin) x 14 coins; vipLevel 0-9 applies to binance only
Pagination
none
Units
daily rate and annualized rate as decimals
Method
annual = daily * 365; gate publishes an annual rate, daily = annual / 365; binance rate is divided by 1.05 to remove the BNB-discount markup
Timestamps
Unix epoch milliseconds (UTC) unless the field description says otherwise
Response format
json
Stability
Stable

Live status

AvailableChecked 2026-11-13 03:57:32 UTCHTTP 2003 msSchema matchesNewest data point 0s old

Availability, last 30 days

99.76% of 411 checks passed

Errors

Failed calls share one shape on every endpoint. The full list is on the errors page. Errors and rate limits →

CodeHTTPMeaningWhat to do
INVALID_PARAM400A required parameter is missing or a value is not accepted. `param` names the parameter when it is known.Do not retry unchanged; fix the request.
UNAUTHORIZED401The `CB-API-KEY` header was sent but the key is unknown or revoked. Public data needs no key — drop the header or use a valid key.Do not retry unchanged.
FORBIDDEN403The route is not part of the public API (internal or account-only).Do not retry.
NOT_FOUND404Unknown route, or the requested coin / exchange / fund does not exist.Do not retry; check the path and identifiers against the catalog.
RATE_LIMITED429More requests than the per-minute limit. `Retry-After` gives the seconds to wait.Wait for `Retry-After`, then retry with backoff.
INTERNAL500Unexpected server error. The message is generic by design; quote `request_id` when reporting it.Retry once after a few seconds; report it with the request id if it persists.
UPSTREAM_FAILED503The data source behind this endpoint did not answer in time. No stale or substitute numbers are returned in its place.Retry with backoff; check the status page.
UNAVAILABLE501 / 503The dataset is temporarily not ready (cache warming) or the endpoint has no lawful public source yet.Retry later; the catalog marks endpoints that are unavailable by design.
REQUEST_FAILED200Some older endpoints answer HTTP 200 with `success: false`. Always check `success`, not only the HTTP status.Depends on the message; treat as a failed request.

Try it

GET/api/margin-fee/matrixAvailable
Parameters

integer · default 0 · min 0 · max 9 — VIP level (Binance only). A value outside the supported range is treated as 0.

Request URLhttps://www.coinboss.com/api/margin-fee/matrix?vipLevel=0
Choose an endpoint and press “Send request”. The response, headers and timing will appear here.