Error Handling
Learn how to handle errors gracefully in your Quub Exchange integration.
All errors follow a consistent structure:
{
"error": "invalid_request",
"message": "Invalid order quantity",
"code": "ORD_001",
"details": {
"field": "quantity",
"reason": "Must be greater than 0"
},
"requestId": "req_abc123",
"timestamp": "2025-11-03T10:30:00Z"
}
HTTP Status Codes
| Code |
Status |
Description |
| 200 |
OK |
Request successful |
| 201 |
Created |
Resource created |
| 400 |
Bad Request |
Invalid request parameters |
| 401 |
Unauthorized |
Missing or invalid authentication |
| 403 |
Forbidden |
Insufficient permissions |
| 404 |
Not Found |
Resource not found |
| 429 |
Too Many Requests |
Rate limit exceeded |
| 500 |
Internal Server Error |
Server error |
| 503 |
Service Unavailable |
Service temporarily unavailable |
Error Codes
Authentication (AUTH_xxx)
| Code |
Description |
Solution |
| AUTH_001 |
Invalid or expired token |
Refresh token or re-authenticate |
| AUTH_002 |
Invalid API credentials |
Check API key and secret |
| AUTH_003 |
Token revoked |
Generate new API key |
Trading (ORD_xxx, TRD_xxx)
| Code |
Description |
Solution |
| ORD_001 |
Invalid order quantity |
Check min/max order sizes |
| ORD_002 |
Insufficient balance |
Add funds to account |
| ORD_003 |
Invalid price |
Check price precision |
| TRD_001 |
Market closed |
Wait for market to open |
| TRD_002 |
Symbol not found |
Verify trading pair |
Rate Limiting (RATE_xxx)
| Code |
Description |
Solution |
| RATE_001 |
Too many requests |
Implement rate limiting |
| RATE_002 |
Burst limit exceeded |
Reduce request frequency |
For complete error codes, see API Reference.
Handling Errors
JavaScript Example
try {
const order = await client.placeOrder(orderParams);
console.log('Order placed:', order.orderId);
} catch (error) {
if (error.response) {
const { status, data } = error.response;
switch (status) {
case 400:
console.error('Invalid request:', data.message);
break;
case 401:
console.error('Authentication failed, refreshing token...');
await client.refreshToken();
break;
case 429:
const retryAfter = error.response.headers['retry-after'];
console.log(`Rate limited. Retry after ${retryAfter}s`);
break;
default:
console.error('Unexpected error:', data);
}
} else {
console.error('Network error:', error.message);
}
}
Python Example
from requests.exceptions import HTTPError
try:
order = client.place_order(order_params)
print(f"Order placed: {order['orderId']}")
except HTTPError as e:
status = e.response.status_code
data = e.response.json()
if status == 400:
print(f"Invalid request: {data['message']}")
elif status == 401:
print("Authentication failed, refreshing token...")
client.refresh_token()
elif status == 429:
retry_after = e.response.headers.get('Retry-After', 60)
print(f"Rate limited. Retry after {retry_after}s")
else:
print(f"Unexpected error: {data}")
except Exception as e:
print(f"Network error: {str(e)}")