Bitget errors
Bitget error codes in LootX: signature 40009, key and passphrase, permissions and IP, unified trading account 40085, price corridor and insufficient funds.
Bitget reports errors via code and msg fields: "00000" is success, any other five-digit number is a rejection. The text is usually English, but some messages come in Chinese regardless of account language — for example, “订单不存在” (“order does not exist”). If the terminal does not recognize the code, the popup message shows the exchange response as-is after “Order:”: Bitget POST /api/v2/…: HTTP 400 {"code":"43012","msg":"Insufficient balance",…} or shorter — Bitget error 43012: Insufficient balance.
For some codes the terminal appends a short English explanation after the exchange response — what happened and where to fix it. It is deliberately in English: that way it reads the same for any interface language. All of these explanations are translated below. For the general approach to troubleshooting errors, see Error messages: how to read them; for key setup, see Connecting exchanges and API keys.
What the terminal explains itself
| Situation | Codes | What you will see |
|---|---|---|
| Exchange rejected the key or passphrase | 40006, 40012, 40037; on stream login — 30011, 30012 |
Card with the connection name: “…: exchange rejected the API key or secret — check them in connection settings”. In Settings → Connections the connection shows the tooltip “Exchange rejected the API key or secret”. Explanation: “Bitget did not accept the API key or its passphrase…” — the key or passphrase was not accepted; a deleted key is rejected the same way |
| Signature not verified | 40009 |
On connection — the same card; on an order — “Order rejected: invalid API key or secret”. Explanation: “Bitget could not verify the request with this secret key…” — see Signature not verified |
| Key lacks permission | 40014 |
Exchange text with the explanation “the API key lacks a permission…” — enable spot or futures trading for the key |
| IP outside the key’s list | 40018 |
Exchange text with the explanation “this IP address is outside the IP list bound to the key…” — add the IP to the key’s list or remove the binding; with a proxy, the proxy address counts |
| Account switched to unified trading account | 40085 |
Exchange text with the explanation “the Bitget account has been switched to Unified Trading Account (UTA) mode…” — see Account switched to UTA |
| Price outside the exchange’s corridor | 41117, 41118 |
“Bitget: price outside the allowed corridor (…). The order book may be stale (WS flap) — refresh data and re-peg the price.” |
| Too many requests | HTTP 429 | “⚠ … request limit exceeded (429), limited until 30.09.2026 12:01:00 UTC”. The terminal waits out the pause itself |
| Clocks drifted apart | 40005 |
The rejection is not treated as a key error, the connection is not dropped. The terminal syncs time with the exchange on connection and once a minute |
| Too frequent stream logins | 30006, 30007 |
Nothing: the terminal reconnects with a pause, the key is not marked invalid |
| Order no longer exists | 43001, 43025 |
Nothing: the cancellation is treated as completed |
| Nothing to cancel | 22001 |
Nothing: the mass cancellation is treated as completed |
| Position mode on futures | 40774 |
The terminal detects the account’s position mode on connection and builds orders accordingly. If you changed the mode on the website while working and orders are being rejected — reconnect Bitget |
| Not enough coins when closing a spot position | 43012, 45117, 50067, 40762 |
The terminal retries the sell with volume reduced by the fee amount. If that doesn’t help — shows the exchange text |
| Nothing to close on spot | — | “Bitget SOLUSDT: nothing to sell — SOL balance = 0, position already closed”. No order is sent to the exchange |
| Exchange suspended API trading for the coin | based on words in the response | “API trading is unavailable for this coin — exchange restriction” |
Frequent codes
| Code | How it looks | Cause | What to do |
|---|---|---|---|
40006 |
Card “exchange rejected the API key or secret” | The key is invalid | Copy the key again into API Key |
40012 |
Same card | Invalid key or passphrase | Check Passphrase — it’s the password you set when creating the key |
40037 |
Same card | No such key — most likely it was deleted | Create a new key on the Bitget website |
30011, 30012 |
Same card | On private stream login: invalid key or passphrase | Same as for 40006 and 40012 |
40009 |
Card or “Order rejected: invalid API key or secret” | Signature mismatch | See Signature not verified |
40014 |
Exchange text in the order message with the permissions explanation | The key lacks permission for the action | Enable trading for the key on the required market in API management |
40018 |
Exchange text in the order message with the IP explanation | The request came from an IP not on the key’s list | Add the IP (or proxy address) to the key’s list |
40085 |
Exchange text in the order message with the UTA explanation | Account switched to unified trading account | See Account switched to UTA |
40005 |
Exchange text in the order message | Computer clock drifted from the exchange, most often after waking from sleep | Retry the order in a minute. If it recurs — enable time sync in Windows |
| HTTP 429 | “request limit exceeded (429), limited until …” | Request limit exceeded | Wait until the specified time, close extra Bitget windows |
43012, 43011 |
Exchange text in the order message: “Insufficient balance” | Not enough funds on futures for the order | Reduce volume or leverage, cancel extra orders, top up the futures account |
45117, 50067, 40762 |
Exchange text in the order message | Not enough funds on spot | Check the free balance — funds under open orders are locked |
41117, 41118 |
Terminal message “price outside the allowed corridor” or exchange text “…price cannot be…” | Limit order price is too far from the market: 41117 — sell below the allowed level, 41118 — buy above |
Make sure the order book is updating and re-place the price closer to the market |
22002 |
Exchange text in the order message: “No position to close” | The order is reduce-only but the position no longer exists — it was closed on the exchange or by a stop-loss | Wait for positions to refresh in the terminal |
43001, 43025 |
Nothing | The order being cancelled no longer exists | Nothing to do |
How to fix frequent issues
Signature not verified (40009)
This rejection has three common causes:
- Secret not copied in full. Paste API Secret again in Settings → Connections, without leading or trailing spaces.
- Key with a self-created RSA pair. Bitget lets you create a key in two ways — system (HMAC) or custom RSA. The terminal signs requests only with a system key: create a Bitget-generated key.
- Coin with non-Latin characters in its name. If the rejection occurs only for such a coin while others work, the key is fine and reissuing it won’t help. The terminal picks the signature form for such characters itself and retries the request.
Account switched to UTA (40085)
Bitget split its API into two kinds: classic and unified trading account (UTA). LootX works with the classic one. As soon as the main account is switched to UTA, the exchange responds 40085 to every request from the terminal — trading simply stops working even though the key is valid.
What to do now: trade from a subaccount that runs in classic mode. Transfer funds to it, create an API key for it, and add that key in Settings → Connections.
Key not accepted
Check that the key exists
Open API management on the Bitget website. Code 40037 means the key does not exist — create a new one.
Check the three fields
In Settings → Connections, paste API Key, API Secret, and Passphrase again. Passphrase is the password you set when creating the key, not your account password.
Check permissions and IP
The key must have trading enabled on the markets marked with the Spot and Futures toggles. If the key is IP-bound, the list must contain your computer’s external address or proxy (the Proxy section in the connection card).
After fixing, the terminal reconnects automatically on the next attempt.
Price outside the corridor (41117, 41118)
Bitget rejects limit orders whose price is too far from the current one: a sell noticeably below the market or a buy noticeably above. Most often this happens when the order book in the terminal has fallen behind the market, for example after a connection drop. The terminal does not move your price on its own — that would be unsafe. Make sure the order book is updating and place the order again.
Insufficient funds
On spot, funds under open orders are locked — cancel extra orders or reduce volume. On futures, an order requires margin based on leverage: reduce volume or leverage, or transfer funds to the futures account.
When closing a spot position, some coins may have gone to the fee. The terminal retries the sell with a slightly smaller volume, and after it a “dust” amount smaller than the volume step may remain in the wallet — it cannot be sold with an order.