By Fikra Support • 3 min read

Troubleshooting Anthropic Timeout Errors in Python with Fikra API

Troubleshooting Anthropic Timeout Errors in Python with Fikra API

If you are encountering timeout errors while using Python with an Anthropic-style integration, note that Fikra API does not serve Anthropic models. Fikra provides OpenAI-compatible chat-completions endpoints for its own model aliases (e.g., fikra-flash, fikra-pro-20b).

Common HTTP Status Codes in Fikra API

  • 400 Bad Request: The request body is malformed, or the specified model alias is not supported. Verify that your model field matches a current Fikra alias.
  • 401 Unauthorized: The Authorization header is missing, the API key is invalid, or the key is inactive. Ensure you are using a valid fk_live_... key from your Fikra dashboard.
  • 402 Payment Required: Your token-credit wallet balance is insufficient. Top up your wallet via the Fikra dashboard to continue.
  • 429 Too Many Requests: You have exceeded the rate limit. Unverified accounts are limited to 30 RPM; trusted accounts to 100 RPM.
  • 503 Service Unavailable: The upstream provider is temporarily unavailable. This is a transient error.

Handling 429 and 503 with Exponential Backoff

When you receive a 429 or 503 response, implement exponential backoff to retry the request. Do not assume automatic failover or dedicated capacity.

import time
import random
import requests

FIKRA_API_KEY = "your_fikra_api_key"
BASE_URL = "https://api.fikraapi.co.ke/v1"

headers = {
    "Authorization": f"Bearer {FIKRA_API_KEY}",
    "Content-Type": "application/json"
}

def call_fikra_api(payload, max_retries=5):
    for attempt in range(max_retries):
        response = requests.post(f"{BASE_URL}/chat/completions", headers=headers, json=payload)

        if response.status_code in [429, 503]:
            # Exponential backoff with jitter
            wait_time = (2 ** attempt) + random.uniform(0, 1)
            print(f"Received {response.status_code}. Retrying in {wait_time:.2f}s...")
            time.sleep(wait_time)
            continue

        if response.status_code == 200:
            return response.json()
        else:
            # Handle other errors (400, 401, 402) immediately
            raise Exception(f"API Error {response.status_code}: {response.text}")

    raise Exception("Max retries exceeded for 429/503 errors.")

# Example usage
payload = {
    "model": "fikra-flash",
    "messages": [{"role": "user", "content": "Hello"}]
}

try:
    result = call_fikra_api(payload)
    print(result)
except Exception as e:
    print(e)

Notes

  • Fikra API does not guarantee uptime SLAs or automatic failover.
  • Always check the Fikra dashboard for your current rate limit tier and wallet balance.
  • If you continue to experience timeouts, verify your network connection and ensure you are using the correct base URL: https://api.fikraapi.co.ke/v1.

JM
// The Founder

James Miano

CTO & ML Engineer at Lacesse Ventures. James specializes in low-overhead LLM quantization processes, custom ternary weights architectures, and localized server optimization.

Stop paying for overpriced round-trip latency

Why route queries over Western servers when you can use low-overhead hardware located in Nairobi? Save 87% on your monthly inference spend. No minimum credit limits. M-Pesa ready.

usagestatusdashboard