# Common Error Handling

This page explains common errors, why they occur, and how to resolve them. For the full list of error codes, see [REST API Error Code](./restapi) or [WebSocket Error Code](./websocket).

## WebSocket Errors

<a id="err-30002"></a>
### 30002 — Unrecognized request

The request message format is invalid. Check that the subscription or request payload is valid JSON and matches the expected schema.

<a id="err-30004"></a>
### 30004 — User not logged in / User must be logged in

A subscription message was sent before the login response was received. Always wait for a successful login response before sending subscription messages.

## Authentication Errors

<a id="err-40006"></a>
### 40006 — Invalid ACCESS\_KEY

Check that the `ACCESS-KEY` in your request header is correct.

<a id="err-40008"></a>
### 40008 — Request timestamp expired

The timestamp in your request deviates too far from the server time. Sync your local clock using [Get Server Time](/docs/uta/public/get-server-time).

<a id="err-40009"></a>
### 40009 — sign signature error

Common causes and fixes:

- **Signature algorithm error** → follow the [Signature Guide](/docs/uta/guide/signature)
- **Query string or body was URL-encoded before signing** (breaks when coin names contain non-ASCII characters) → do **not** URL-encode the query string or body before signing

## Rate Limit Errors

<a id="err-429"></a>
### 429 — Too Many Requests

The API rate limit has been exceeded. Reduce your request frequency and comply with the rate limits for each endpoint.

<a id="err-40725"></a>
### 40725 — service return an error

Usually caused by a server deployment. Retry after receiving the error response.

## Order Errors

<a id="err-25003"></a>
### 25003 — Concurrent operation, please retry

In one-way position mode, if the total quantity of all reduce-only orders exceeds the current position size, the system will cancel existing orders before placing new ones. In cancel-then-place scenarios, the new order can arrive before the cancellation is processed by the matching engine. No special action is needed — retry after a short delay.

<a id="err-25102"></a>
### 25102 — Trading pair temporarily closed for maintenance

The trading pair may not yet support UTA orders, may not be launched on v3, or may be under maintenance.

> `25101` = short-term maintenance or not open yet; `25102` = longer maintenance or near-delisting; `40309` = already delisted.

<a id="err-25105"></a>
### 25105 — This contract does not support opening positions

The trading pair does not support opening positions, or it has been delisted. Check whether the unified contract is live or refer to delisting announcements.

<a id="err-25110"></a>
### 25110 — This coin is not supported for deposits into the unified account

This coin cannot be transferred into the unified account. No workaround is available.

<a id="err-25212"></a>
### 25212 — Duplicate clientOid

Idempotency is checked against the current order status: `clientOid` cannot be reused while an order is open; it can be reused after the order is filled or cancelled.

<a id="err-25229"></a>
### 25229 — Total positions exceed the current limit of \{0\} positions

The maximum position count of 200 has been reached. Keep position count below 200, or distribute positions across sub-accounts.

<a id="err-25232"></a>
### 25232 — Reduce-only orders will only reduce your position

This occurs when non-reduce-only orders exist and the combined quantity of both order types exceeds the position size, while the non-reduce-only order price is more favorable. Cancel or modify existing non-reduce-only orders before placing a reduce-only order.

<a id="err-25234"></a>
### 25234 — Remaining quantity for regular orders is 0

An IO position limit was triggered. Adjust your order size and retry. [Learn more](https://www.bitget.com/zh-CN/trade-info/oi_limit)

<a id="err-25567"></a>
### 25567 — Exceeded the maximum quantity of contract orders

The order size exceeds the single-order quantity limit. Check `maxMarketOrderQty` (max market order size) and `maxOrderQty` (max limit order size) from the [Get Instruments](/docs/uta/public/get-instruments) endpoint.

<a id="err-25568"></a>
### 25568 — The order does not meet the modification requirements

Preset TP/SL orders and market orders cannot be modified. Do not attempt to modify these order types.

<a id="err-25574"></a>
### 25574 — Reduce-only order protection

When non-reduce-only orders exist, the modified price cannot be more favorable than the existing reduce-only order price. Adjust the modified price so it does not take priority over the reduce-only order.

<a id="err-45110"></a>
### 45110 — Less than the minimum order amount

Order value is below the minimum (5 USDT for futures, 1 USDT for spot). Note that in unified accounts, the backend resets the effective order quantity to match the trading pair's precision — this can silently reduce the order value below the minimum (e.g., SYRUPUSDT with a step of 10: placing 16 × 0.4484 → effective qty 10 × 0.4484 = 4.484 USDT, rejected). Ensure the final effective order value clears the minimum threshold.

<a id="err-45116"></a>
### 45116 — The count of positions held by the account exceeds the maximum count

The maximum position count (200) has been exceeded. Keep positions below 200, or distribute across sub-accounts.

<a id="err-45119"></a>
### 45119 — This symbol does not support position opening operation

The trading pair's `status` has been restricted or the pair has been delisted. Use [Get Instruments](/docs/uta/public/get-instruments) to check the trading pair status, or refer to delisting announcements.

<a id="err-45121"></a>
### 45121 — The reasonable mark price deviates too much from the market

The reasonable mark price has deviated too far from the market price, making the current leveraged position high-risk. See the [Bitget support article](https://www.bitget.com/support/articles/12560603775538) for details.

<a id="err-45001"></a>
### 45001 — Unknown error

Usually caused by a server deployment. Retry after receiving the error response.

<a id="err-40908"></a>
### 40908 — Concurrent operation failed

Occurs when position processing takes longer than usual (accounts with many positions), or when a close order arrives before a prior cancellation is fully processed. Wait for the previous operation to complete before sending a new request.

<a id="err-40710"></a>
### 40710 — Abnormal account status

Account status is abnormal. Contact customer support.

<a id="err-40760"></a>
### 40760 — Unable to place order due to ongoing liquidation

The account is currently being liquidated — trading and transfers are blocked until the process completes. Wait for the liquidation to finish before retrying.

<a id="err-40022"></a>
### 40022 — The business of this account has been restricted

Two common causes:

- **Sub-account trading permission is not enabled** → enable trading permission for the sub-account
- **Account under risk control** → contact customer support to verify the account's risk control status

<a id="err-40715"></a>
### 40715 — Exceeded the maximum open count

The maximum openable quantity has been reached. Use [Get Max Open Available](/docs/uta/trade/get-max-open-available) to check the current limit.

<a id="err-40034"></a>
### 40034 — Parameter does not exist

One or more request parameters are incorrect. Verify all parameters against the API documentation.

<a id="err-40763"></a>
### 40763 — Exceeds position tier limit

The position size exceeds the current position tier limit. See [Position Tier](https://www.bitget.com/futures/introduction/position-tier) for the applicable limits.

<a id="err-40774"></a>
### 40774 — The order type for unilateral position must also be the unilateral position type

Order parameters do not match the current position mode (`tradeSide` / `posSide` mismatch). Use the correct combination for your account's position mode:

| Mode | Action | Parameters |
|---|---|---|
| Hedge | Open long | `side=buy&posSide=long` |
| Hedge | Open short | `side=sell&posSide=short` |
| Hedge | Close long | `side=sell&posSide=long` |
| Hedge | Close short | `side=buy&posSide=short` |
| One-way | Open long | `side=buy` |
| One-way | Open short | `side=sell` |
| One-way | Close long | `side=sell&reduceOnly=yes` |
| One-way | Close short | `side=buy&reduceOnly=yes` |

<a id="err-40815"></a>
### 40815 — The order price is higher than the highest bid price

The buy order price exceeds the current highest bid. Adjust the price downward.

<a id="err-40816"></a>
### 40816 — The order price is lower than the lowest selling price

The sell order price is below the current lowest ask. Adjust the price upward.

<a id="err-40922"></a>
### 40922 — Only work order modifications are allowed

The order cannot be modified because it is fully filled, cancelled, or rejected. Only unfilled or partially-filled orders can be modified.

<a id="err-41117"></a>
### 41117 — Selling price cannot be lower than the limit

The order price is outside the allowed buy/sell spread range (`buyLimitPriceRatio` / `sellLimitPriceRatio`). Check these values from [Get Instruments](/docs/uta/public/get-instruments) and place orders within the allowed range.

<a id="err-43027"></a>
### 43027 — The minimum order value is not met

When placing a buy order, the system uses the lower of the mark price and the order price. If the mark price is below the order price, an order priced at exactly 5 USDT may still be rejected. Avoid placing orders at the exact boundary — leave a small margin above the minimum.

<a id="err-45118"></a>
### 45118 — Reached the upper limit of orders

The pending order count has reached the platform limit. Limits by account type:

- **Futures:** 200 unfilled orders per symbol, 400 per business line (UID-level)
- **Max position count:** 200 per business line (UID-level)
- **Spot margin:** 100 open orders per trading pair per UID, 1,000 total
- **Spot:** 200 open orders per trading pair per UID, 1,000 total

Reduce the number of pending orders to proceed.

<a id="err-22046"></a>
### 22046 — The order price exceeds the minimum price limit

The order price is below the minimum allowed. Adjust the price upward to meet the minimum limit.

<a id="err-22047"></a>
### 22047 — The order price exceeds the maximum price limit

The order price exceeds the maximum allowed. Adjust the price downward to stay within the limit.

<a id="err-22048"></a>
### 22048 — Exceeded personal limit, unable to delegate

The user's borrowable quantity has reached the personal limit. Check the current limit from [Get Max Open Available](/docs/uta/trade/get-max-open-available).

<a id="err-22067"></a>
### 22067 — ADL processing, forbid operate the symbol

The symbol is temporarily blocked due to ADL (Auto-Deleveraging) processing. Wait for the ADL process to complete before retrying.

<a id="err-12001"></a>
### 12001 — \{0\} can be used at most

Insufficient account balance. Top up the account and retry.

<a id="err-13008"></a>
### 13008 — Traders minimum place orderSize is \{0\}

The order size is below the trader's minimum requirement. Increase the order size to meet the minimum.
