Error Handling

Error Handling

Error Handling

The IPTO API uses standard HTTP status codes and provides detailed error messages to help you handle errors gracefully. This guide explains our error handling approach and best practices.

HTTP Status Codes

Status CodeDescription
200Success
201Created
204No Content
400Bad Request
401Unauthorized
403Forbidden
404Not Found
422Validation Error
429Too Many Requests
500Internal Server Error

Error Response Format

All error responses follow this format:

{
  "detail": "Error message",
  "code": "ERROR_CODE",
  "field": "field_name",  // Optional
  "value": "invalid_value"  // Optional
}

Common Error Types

Authentication Errors

{
  "detail": "Invalid authentication credentials",
  "code": "AUTH_001"
}
{
  "detail": "Token has expired",
  "code": "AUTH_002"
}

Validation Errors

{
  "detail": "Invalid email format",
  "code": "VAL_001",
  "field": "email",
  "value": "invalid-email"
}
{
  "detail": "File size exceeds limit",
  "code": "VAL_002",
  "field": "file",
  "value": "2097152"
}

Resource Errors

{
  "detail": "Asset not found",
  "code": "RES_001",
  "field": "asset_id",
  "value": "non_existent_id"
}
{
  "detail": "Insufficient balance",
  "code": "RES_002",
  "field": "balance",
  "value": "0.1"
}

Error Codes

Authentication (AUTH_*)

CodeDescription
AUTH_001Invalid credentials
AUTH_002Token expired
AUTH_003Invalid token
AUTH_004Missing token

Validation (VAL_*)

CodeDescription
VAL_001Invalid email
VAL_002File too large
VAL_003Invalid file type
VAL_004Missing required field

Resource (RES_*)

CodeDescription
RES_001Not found
RES_002Insufficient balance
RES_003Already exists
RES_004Permission denied

Rate Limit (RATE_*)

CodeDescription
RATE_001Too many requests
RATE_002Rate limit exceeded
RATE_003Quota exceeded

Handling Errors

Example: Error Handling in Python

import requests
from typing import Dict, Any

def handle_api_error(response: requests.Response) -> Dict[str, Any]:
    if response.status_code == 200:
        return response.json()
        
    error = response.json()
    
    if response.status_code == 401:
        # Handle authentication error
        refresh_token()
        return retry_request(response.request)
        
    if response.status_code == 422:
        # Handle validation error
        print(f"Validation error in field {error.get('field')}")
        return None
        
    if response.status_code == 429:
        # Handle rate limit
        retry_after = int(response.headers.get('Retry-After', 60))
        time.sleep(retry_after)
        return retry_request(response.request)
        
    # Handle other errors
    print(f"Error: {error.get('detail')}")
    return None

Example: Error Handling in JavaScript

async function handleApiError(response) {
  if (response.ok) {
    return await response.json();
  }
  
  const error = await response.json();
  
  switch (response.status) {
    case 401:
      // Handle authentication error
      await refreshToken();
      return retryRequest(response);
      
    case 422:
      // Handle validation error
      console.log(`Validation error in field ${error.field}`);
      return null;
      
    case 429:
      // Handle rate limit
      const retryAfter = response.headers.get('Retry-After') || 60;
      await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
      return retryRequest(response);
      
    default:
      // Handle other errors
      console.log(`Error: ${error.detail}`);
      return null;
  }
}

Best Practices

  1. Always check response status codes
  2. Implement proper error handling
  3. Log errors for debugging
  4. Use appropriate retry strategies
  5. Handle rate limits gracefully
  6. Validate input before sending
  7. Use appropriate timeouts
  8. Implement circuit breakers
  9. Monitor error rates
  10. Keep error messages user-friendly

Debugging Tips

  1. Check the error code and message
  2. Verify input parameters
  3. Check authentication status
  4. Monitor rate limits
  5. Review API documentation
  6. Check system status
  7. Contact support if needed