Skip to main content

Error Handling

Comprehensive guide to handling errors in Fincept API, including error codes, retry strategies, and debugging.

Error Response Structure

{
  "success": false,
  "message": "Brief error summary",
  "detail": "Detailed explanation with context"
}

HTTP Status Codes

4xx Client Errors

CodeErrorCauseSolution
400Bad RequestInvalid parametersCheck request body
401UnauthorizedInvalid API keyVerify key, login again
402Payment RequiredInsufficient creditsPurchase credits
403ForbiddenTier access neededUpgrade plan
404Not FoundEndpoint doesn’t existCheck URL
429Rate LimitToo many requestsWait and retry

5xx Server Errors

CodeErrorCauseSolution
500Internal ErrorServer issueRetry, contact support
503Service UnavailableMaintenanceCheck status page

Common Errors

Insufficient Credits

{
  "success": false,
  "message": "Insufficient credits",
  "detail": "Required: 5 credits, Available: 2 credits. Please purchase a new plan to continue."
}
Solution: Purchase credits or subscribe

Invalid API Key

{
  "success": false,
  "message": "Invalid or expired API key"
}
Solutions:
  • Login to retrieve current key
  • Check for typos
  • Verify key wasn’t regenerated
  • For guests, check expiry

Rate Limit Exceeded

{
  "success": false,
  "message": "Rate limit exceeded"
}
Response headers:
X-RateLimit-Limit: 500
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1640998800
Retry-After: 3600

Retry Strategies

Exponential Backoff

import time
import requests

def api_call_with_retry(url, data, max_retries=3):
    for attempt in range(max_retries):
        try:
            response = requests.post(url, json=data, headers=headers)

            if response.status_code == 200:
                return response.json()

            elif response.status_code == 429:
                # Rate limited - wait and retry
                retry_after = int(response.headers.get("Retry-After", 60))
                time.sleep(retry_after)
                continue

            elif response.status_code >= 500:
                # Server error - exponential backoff
                wait_time = (2 ** attempt) * 1
                time.sleep(wait_time)
                continue

            else:
                # Client error - don't retry
                return response.json()

        except requests.RequestException as e:
            if attempt == max_retries - 1:
                raise
            time.sleep(2 ** attempt)

    raise Exception("Max retries exceeded")
Complete examples →