| Limiter | Scope | Default | Error on breach |
|---|---|---|---|
| Per API key | The credential | 600 requests per minute | 429 RATE_LIMIT_EXCEEDED |
| Global | Per source IP address | 120 requests per minute | 429 RATE_LIMITED |
| Futures orders | Per user | 30 orders per minute | 429 RATE_LIMITED |
The global per-IP limit of 120 per minute is lower than the per-key limit, so it is usually the one you hit first when calling from a single server. It applies to all traffic from that address, signed or not.
RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset headers. Read them and slow down while Remaining is still positive, rather than waiting for a 429 and reacting.permissions field on the create request, and the set never changes for the life of the key.| Permission | Grants access to |
|---|---|
READ_BALANCE | Wallet balances, and the asset and network catalogue |
READ_ORDERS | Your spot and futures orders |
SPOT_TRADE | Placing and cancelling spot orders |
FUTURES_TRADE | Placing and cancelling futures orders |
403 API_PERMISSION_DENIED is rare. If you see it, the route is probably one that API keys cannot reach at all.An API key can never move funds off the platform
There is no withdrawal permission and no transfer permission, and one cannot be added to a key by any means. It is refused by a database constraint, not merely left unassigned. A leaked key can lose you money through bad trades. It cannot send your money anywhere. Withdrawals and internal transfers require a logged-in browser session.
403 KYC_REQUIRED until the account's identity verification is approved. An API key is a trading credential, so there is no partial access before verification.X-MG-API-KEY is a public value, so checking earlier would let anyone holding just that key learn whether its owner is verified.| Not available | Why, and what to do instead |
|---|---|
| WebSocket or server-sent event streams for account data | One signature cannot vouch for a long-lived connection. Poll the list endpoints |
POST /v1/transfers | Moves funds between your own wallets. No permission can authorize fund movement. Use the web app |
GET /v1/wallets, /v1/deposit/address, /v1/deposit/history | Deposit addresses and history are session only |
/v1/futures/fills, /v1/futures/positions | Outside the API key permission set |
/v1/withdrawals/* | Withdrawals are never reachable with an API key |
/v1/admin/* | An API key carries no role and can never reach the back office |
401, not a permission error. They do not participate in API key authentication at all, so the server finds no session and stops there.limit is the only control, and its maximum is 200.INVALID_TIMESTAMP. Run NTP on your server.X-MG-RECV-WINDOW, but never above 60000, and prefer fixing the clock. A wider window is a wider replay surface.| Issue | Impact on you |
|---|---|
Futures list filters symbol, orderType, startTime and endTime are accepted and then ignored | Filter in your own code. A client that trusts these filters will act on the wrong orders |
GET /v1/futures/fills returns 500 on every call | Do not use it. Read fills from /v1/futures/orders/history |
A venue-side futures cancel failure surfaces as a generic 500 INTERNAL | Re-read the order rather than assuming a transport fault. Spot already returns typed 409 and 503 for the same conditions |