Rate limits
Request budgets, open orders per symbol, and minimum order sizes.
Wellat uses Binance's rate-limit model and headers. CCXT's enableRateLimit (on by default) reads them and paces your bot without configuration.
Buckets
| Bucket | Keyed by | Limit | Header on every response |
|---|---|---|---|
| Request weight | API key on signed routes, your IP on public routes | 1,200 weight per minute | X-MBX-USED-WEIGHT-1M |
| Order count | API key, order placements only | 50 per 10 seconds and 1,200 per minute | X-MBX-ORDER-COUNT-10S, X-MBX-ORDER-COUNT-1M |
Each route has a weight, listed on the Spot, Futures and Market data pages. Windows are calendar-aligned (the minute bucket resets on the minute). Weight is charged before the request is executed and is not refunded on error.
Order placements (POST /api/v3/order, POST /fapi/v1/order, POST /fapi/v1/algoOrder) count against both buckets. Cancels and reads count only as weight.
When you go over
| Response | Meaning |
|---|---|
429 { "code": -1003, "msg": "Too many requests; current limit is 1200 request weight per 1 MINUTE." } | Weight exhausted. Retry-After says how many seconds until the window resets. |
429 { "code": -1015, "msg": "Too many new orders; current limit is 50 orders per 10 SECONDS." } | Order count exhausted. |
418 { "code": -1003, "msg": "Way too much request weight used; banned until <ms>." } | Ten 429s inside one minute. The key (or IP) is banned for two minutes; every request in that time answers 418. |
CCXT raises RateLimitExceeded for -1003 and -1015 and DDoSProtection for 418. Back off on Retry-After; do not retry in a tight loop, because each rejected request still counts toward the 418 threshold. The ban is per key on signed routes and per IP on public routes. Both the gateway and the trading engine enforce the same budgets.
Budgeting
A typical loop:
| Call | Weight | Per minute at 5 s cadence |
|---|---|---|
ticker/bookTicker for one symbol | 2 | 24 |
openOrders for one symbol (spot) | 6 | 72 |
account (spot) | 20 | 240 |
One createOrder | 1 | 12 |
| Total | 348 of 1,200 |
exchangeInfo costs 20 on spot: load markets once at start-up, not every loop. allOrders and myTrades cost 20 each; page them by startTime rather than polling them whole.
Public-route weight is per IP. If several bots share an egress IP they share that budget; signed calls are per key and do not.
Open orders per symbol
Wellat sets no cap of its own. Symbol filters are passed through from Binance, so the MAX_NUM_ORDERS filter in exchangeInfo is Binance's: 200 resting orders per symbol on spot and on USDⓈ-M futures, with a separate MAX_NUM_ALGO_ORDERS cap for TP / SL legs. Copiers mirror the same set of resting orders on their own accounts, so the same cap applies to each of them.
In practice the binding constraint is margin, not order count. On futures every resting entry locks its initial margin at placement, for your strategy and for every copier, so a ladder of 18 entries commits 18 slices of collateral before the first fill.
Minimum order size
Binance's filters apply unchanged and are returned per symbol by exchangeInfo:
| Filter | What it constrains |
|---|---|
LOT_SIZE | quantity must be at least minQty and a multiple of stepSize. |
PRICE_FILTER | price must be a multiple of tickSize. |
NOTIONAL (spot) / MIN_NOTIONAL (futures) | quantity × price must be at least the minimum notional. It is 5 USDT on most pairs and higher on a few, such as BTCUSDT futures. Read the filter rather than assuming. |
An order that fails a filter is rejected with 400 before anything is recorded. CCXT's amountToPrecision and priceToPrecision apply the step and tick sizes for you; the notional minimum you must check yourself.
Copiers are scaled, not rounded up. Each copier receives your order sized to their own balance (spot) or collateral fraction at your leverage (futures), snapped down to stepSize. If a copier's scaled order falls under minQty or the minimum notional, that order is skipped for that copier and logged; it is not raised to the minimum. A ladder of many small entries therefore reaches small copiers only on its larger rungs. Size each entry so that the smallest copier share you expect still clears the minimum notional.
Request budgets, open orders per symbol, and minimum order sizes.
Updated 9 days ago