Errors
Error Response
{
"success": false,
"code": "ERROR_CODE",
"message": "Human readable message",
"requestId": "b7b2c2e5-8b8a-4e2a-9a4b-5f5b1f5d2e2a",
"ts": 1737665012345
}Error Codes
| Status code | Error Code | Description |
|---|---|---|
| 400 | INVALID_REQUEST | Bad or missing parameter |
| 401 | UNAUTHORIZED | Invalid or missing X-Authentication |
| 403 | FORBIDDEN | Scope/IP not allowed |
| 404 | NOT_FOUND | Resource not found |
| 409 | CONFLICT | Conflicting or duplicate action |
| 429 | RATE_LIMIT_EXCEEDED | Throttled by rate limiter |
| 5xx | SERVER_ERROR | Internal error; retry with backoff |
Currency-related errors
INR margin introduces no new HTTP status codes. The cases below are existing codes applied to currency-aware behaviour.
Invalid trade currency — any trade_currency (or currency) value other than USDT or INR.
{
"success": false,
"errors": [
{ "code": 400, "text": "Invalid trade currency" }
]
}Status: 400 Bad Request
INR sent to the USDT transfer path — POST /wallet/futures/transfer does not accept INR; use POST /futures/transfers/inr.
{
"success": false,
"errors": [
{ "code": null, "text": "insufficient balance" }
]
}Status: 400 Bad Request
Insufficient balance — an INR transfer or order against an empty/low source wallet.
{
"success": false,
"errors": [
{ "code": null, "text": "insufficient balance" }
]
}Status: 400 Bad Request
Leverage not set in this currency — querying leverage for an (asset, currency) pair never set.
{
"success": false,
"errors": [
{ "code": 404, "text": "leverage not found" }
]
}Status: 404 Not Found
Missing risk order id — editing SL/TP without stoploss_order_id / takeprofit_order_id.
{
"success": false,
"errors": [
{ "code": 400, "text": "risk order id missing" }
]
}Status: 400 Bad Request
Order amend without quantity — amending an order with order_price only (both order_price and quantity are required).
{
"success": false,
"errors": [
{ "code": 400, "text": "order quantity out of permissible range" }
]
}Status: 400 Bad Request
