/api/margin/rates
GETAvailable

Margin borrow rates

Margin borrow rates

GET/api/margin/rates
Rates are collected hourly. An asset not updated for more than 6 hours carries `is_stale: true`; it is not removed from the ranking, so check the flag before using the top rows.

Request

This endpoint takes no parameters.

Example request

curl -s "https://www.coinboss.com/api/margin/rates"

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 }`.
sincenumber—Start of the period.
assetsarray—Assets.
assets[]object—Assets.
assets[].assetstring—Asset symbol.
assets[].daily_pctnumber%Binance margin daily borrow interest rate for the asset at VIP 0, in percent per day.
assets[].yearly_pctnumber%The daily borrow rate annualised without compounding: daily rate × 365, in percent.
assets[].borrow_limitnumber|nullcoinMaximum amount of the asset a VIP 0 account can borrow on Binance margin; null when Binance publishes none.
assets[].updated_atnumbermsWhen this row was last updated.
assets[].is_staleboolean—true when the row is older than the freshness window; stale rows are not used in totals.
historyobject—Historical points, oldest first unless stated. dynamic keys: ADA,APT,ARB,AVAX,BCH,BNB
history.{*}array—Historical points, oldest first unless stated.
history.{*}[]array—Historical points, oldest first unless stated.
history.{*}[][]number—Historical points, oldest first unless stated.
stale_threshold_msnumbermsA rate older than this is flagged `is_stale`.
fresh_countnumbercountNumber of assets with a rate newer than `stale_threshold_ms`.
stale_countnumbercountNumber of assets whose rate is older than `stale_threshold_ms`.
stale_assetsarray—Symbols of the stale assets.
stale_assets[]string—Asset symbol.
data_updated_atnumbermsTimestamp.

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

Example response

/api/margin/rates · Real response captured 2026-11-13 03:57:32 UTC. Long arrays and maps are shortened for display: assets had 518 items; history had 25 items; history.{*} had 3106 items; stale_assets had 24 items.

  • {
    • "success": true,
    • "since": 1783346400000,
    • "assets": [
      • { … 6 },
      • { … 6 }
      ],
    • "history": {
      • "ADA": [ … 2 ],
      • "APT": [ … 2 ]
      },
    • "stale_threshold_ms": 21600000,
    • "fresh_count": 494,
    • "stale_count": 24,
    • "stale_assets": [
      • "VELODROME",
      • "STG",
      • "VIC",
      • "ICX",
      • "STORJ",
      • "VANRY",
      • "PYR",
      • "ACX"
      ],
    • "data_updated_at": 1794540057658
    }

Details

Authentication
None. Public endpoint.
Rate limit
1200 requests per minute per IP
Server cache
10m
Edge micro-cache
10s
Update frequency
hourly; API cache 600 s
Window
latest rates; hourly history
Data sources
Binance cross-margin borrow rates for all assets, with hourly history for 26 core assets.
Exchange coverage
Binance only, VIP0
Pagination
none
Sorting
yearly_pct desc
Units
daily rate (decimal) and yearly_pct (percent)
Method
yearly_pct = daily * 365 * 100
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 200116 msSchema matchesNewest data point 37m 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/ratesAvailable
Parameters

No parameters.

Request URLhttps://www.coinboss.com/api/margin/rates
Choose an endpoint and press “Send request”. The response, headers and timing will appear here.