Skip to main content
Understanding and handling API errors.

Error Response Format

{
  "success": false,
  "error": {
    "code": "ERROR_CODE",
    "message": "Human-readable message",
    "details": { }
  }
}

Error Codes

CodeStatusDescription
UNAUTHORIZED401Missing or invalid authentication
FORBIDDEN403Insufficient permissions
NOT_FOUND404Resource not found
INVALID_PARAMS400Invalid request parameters
INSUFFICIENT_BALANCE400Not enough balance
MARKET_CLOSED400Market no longer trading
RATE_LIMITED429Too many requests
INTERNAL_ERROR500Server error

Handling Errors

async function apiCall(endpoint: string) {
  const response = await fetch(endpoint);
  const data = await response.json();
  
  if (!data.success) {
    switch (data.error.code) {
      case 'UNAUTHORIZED':
        // Re-authenticate
        break;
      case 'RATE_LIMITED':
        // Wait and retry
        await sleep(60000);
        return apiCall(endpoint);
      default:
        throw new Error(data.error.message);
    }
  }
  
  return data.data;
}