Leverage Brackets & Position Limits
Overview
Every USDⓈ-M perpetual market is provisioned with a small set of per-symbol
risk parameters that, together, define how much leverage a user may pick
and how large any single order or position may be. This page is the single
source of truth for those limits — what they are, how they are exposed to API
clients, and which of them act as hard admission gates on POST /fapi/v1/order.
Unified-Margin mode uses a different (notional-tiered) leverage schedule; see Unified Margin Overview. The rules below describe the default Isolated mode.
Per-Symbol Risk Parameters
Each symbol carries the following configuration, managed centrally and hot-reloaded without redeploy:
| Parameter | Typical default | Surfaced as |
|---|---|---|
max_leverage | 100 | maxLeverage in exchangeInfo, used to clamp POST /fapi/v1/leverage |
min_leverage | 1 | floor of POST /fapi/v1/leverage |
min_order_size_usd | symbol-specific | hard order gate (-1013 FILTER_FAILURE) |
max_order_size_usd | symbol-specific | hard order gate (-1013 FILTER_FAILURE) |
max_position_size_usd | 10,000,000 | maxNotionalValue in Change Leverage and Position Risk responses |
max_long_oi_usd | symbol-specific | symbol-wide cap on aggregate long open interest |
max_short_oi_usd | symbol-specific | symbol-wide cap on aggregate short open interest |
Limits can change over time — always read them from the live API rather than hard-coding values. Listing-day, post-listing stabilization windows, and volatility events are the most common reasons for ad-hoc tightening.
Leverage
How leverage is selected
A user's effective leverage on a given symbol is persisted rather than attached to each order:
- Call
POST /fapi/v1/leverageto set the desired leverage. The request is validated against[min_leverage, max_leverage]; a violation returns-4028 Leverage {n} is not valid. Max: {max_leverage}. - The accepted value is stored under
(user, symbol). - Subsequent
POST /fapi/v1/ordercalls that do not carry an explicitleveragefield read the persisted value and clamp it again to[1, max_leverage]at admission. If the symbol'smax_leveragewas lowered after the user set their preference, the lower of the two wins — the stored preference is not rewritten. - If the user has never called
POST /fapi/v1/leveragefor a symbol, the order uses the symbol's currentmax_leverageas the default.
Updating leverage with open positions
Lowering leverage with an open position does not modify the existing position's leverage or liquidation price — those were locked in at the time the position was opened (or, on add-on fills, at the time of the most recent add-on; see Order, Position & Leverage Flow). The change applies only to subsequent new orders.
Order-Size Limits
Order quantity is first floored to the symbol's LOT_SIZE step. The resulting
notional (quantity × ref_price, where ref_price is the limit price for
LIMIT orders or the current mark price for MARKET orders) is then checked
against [min_order_size_usd, max_order_size_usd]. Either side of the band
returns -1013 FILTER_FAILURE with a specific message:
Order notional 12500.00 exceeds the maximum 10000 USD for ETHUSDT.
Order notional 4.50 is below the minimum 5 USD for ETHUSDT.
max_order_size_usd is the per-order ceiling. To open or grow a position
beyond that ceiling, submit multiple orders.
Position-Size Limits
max_position_size_usd is exposed as maxNotionalValue in the responses of:
POST /fapi/v1/leverage— the post-update notional capGET /fapi/v1/positionRisk— the cap that applies to the position currently held
Use this value to size up your strategy in advance — for example, to plan
order ladders that respect the ceiling without bouncing on -1013.
Open-Interest Caps
max_long_oi_usd and max_short_oi_usd cap the aggregate open interest
on each side of a symbol across all users. They are evaluated for any order
whose net effect would open or grow same-side exposure (pure-close orders
and reduceOnly orders bypass this check). A breach returns:
{
"error": "BTCUSDT OI cap exceeded on Long side: current $9800000, cap $10000000, requested delta $300000",
"code": "OI_CAP_EXCEEDED"
}
When a side is already at cap, all new opens on that side are paused until existing positions reduce. Hedge orders against the opposite side are unaffected.
Leverage Brackets Endpoint
For Binance-compatible tooling, the per-symbol leverage ladder can be fetched as a structured response:
HTTP Request
GET /api/v1/open-interest/{symbol}/leverage-brackets
No authentication is required.
Response Example
For a symbol whose max_leverage is 50:
[
{
"symbol": "BTCUSDT",
"brackets": [
{ "bracket": 1, "initialLeverage": 50, "notionalCap": 50000, "notionalFloor": 0, "maintMarginRatio": "0.004", "cum": "0" },
{ "bracket": 2, "initialLeverage": 50, "notionalCap": 250000, "notionalFloor": 50000, "maintMarginRatio": "0.005", "cum": "50" },
{ "bracket": 3, "initialLeverage": 25, "notionalCap": 1000000, "notionalFloor": 250000, "maintMarginRatio": "0.01", "cum": "1300" },
{ "bracket": 4, "initialLeverage": 10, "notionalCap": 5000000, "notionalFloor": 1000000, "maintMarginRatio": "0.025", "cum": "16300" },
{ "bracket": 5, "initialLeverage": 5, "notionalCap": 10000000, "notionalFloor": 5000000, "maintMarginRatio": "0.05", "cum": "141300" },
{ "bracket": 6, "initialLeverage": 2, "notionalCap": 50000000, "notionalFloor": 10000000, "maintMarginRatio": "0.1", "cum": "641300" },
{ "bracket": 7, "initialLeverage": 1, "notionalCap": 100000000, "notionalFloor": 50000000, "maintMarginRatio": "0.125", "cum": "1891300" }
]
}
]
Field Semantics
| Field | Meaning |
|---|---|
bracket | 1-indexed tier identifier |
initialLeverage | Maximum leverage permitted while position notional is in [notionalFloor, notionalCap). Capped from above by the symbol's max_leverage. |
notionalFloor / notionalCap | Position notional band the tier covers, in USD |
maintMarginRatio | Maintenance margin rate that applies inside the tier |
cum | Cumulative deduction (USD) used to keep the maintenance-margin ladder continuous: MM = notional × maintMarginRatio − cum |
Isolated mode note: the brackets above are synthesized at request time from the symbol's
max_leverage; tiers whose default leverage exceedsmax_leverageare clamped down to it. In Isolated mode a single position thus sees one effective leverage cap (max_leverage) regardless of which tier its notional currently falls into; the brackets are surfaced primarily for compatibility with risk-display widgets and for parity with Unified-Margin mode, where the ladder is applied tier-by-tier.
Order Admission — Validation Order
When you submit POST /fapi/v1/order, the limits above are evaluated in the
following order. The first check that fails terminates the request:
- Symbol active & timestamp window —
-1121/ signed-window errors LOT_SIZE—quantityfloored to step- Order notional band —
min_order_size_usd ≤ quantity × ref_price ≤ max_order_size_usd(-1013) - Leverage clamp — persisted leverage clamped to
[1, max_leverage] reduceOnlyconstraints — opposite-side position must exist (-2022); quantity capped to position size- Margin sufficiency —
available_balance ≥ required_margin × (1 + buffer)(-2019) - Open-interest cap — only when the order opens or grows same-side exposure (
OI_CAP_EXCEEDED) - Engine admission — engine-level checks (
GTXcross,IOC/FOKsemantics, etc.)
Any of these can be the failing edge — when investigating a rejected order, read the error code first; the mapping is one-to-one with the rule above.
See Also
- Change Leverage — endpoint reference for
POST /fapi/v1/leverage - Position Risk — read the
maxNotionalValueandleveragecurrently in effect for an open position - exchangeInfo —
LOT_SIZE,MIN_NOTIONAL,PRICE_FILTER,PERCENT_PRICE,MAX_NUM_ORDERS - Unified Margin Overview — notional-tiered leverage ladder used in Unified-Margin mode
- Order, Position & Leverage Flow — full lifecycle of margin freeze, position merge, and liquidation-price math