By Fikra Support • 3 min read

Troubleshooting OpenAI API Error 403 Forbidden

Troubleshooting OpenAI API Error 403 Forbidden

Understanding HTTP 403 in Fikra API Context

The Fikra API is OpenAI-compatible, meaning it accepts standard chat/completions requests. However, HTTP 403 Forbidden is not a standard error code defined in the Fikra API's documented error taxonomy.

If you are receiving a 403 error, it is likely due to one of the following: 1. Misconfigured Base URL: You may be sending requests to an OpenAI endpoint (https://api.openai.com/v1) instead of the Fikra endpoint (https://api.fikraapi.co.ke/v1). 2. Network/Proxy Interception: A corporate firewall or proxy may be blocking the request before it reaches Fikra. 3. Incorrect Authentication Header: While Fikra uses Authorization: Bearer fk_live_..., some proxies or intermediate services may reject malformed headers with a 403.

Fikra API Standard Error Codes

For accurate troubleshooting, refer to the following Fikra-specific error codes:

Code Meaning Action
400 Malformed request or unsupported model alias. Verify your JSON payload structure and ensure the model field uses a valid Fikra alias (e.g., fikra-flash, fikra-pro-20b).
401 Missing, invalid, or inactive API key. Check that your Authorization header contains a valid fk_live_... key from your Fikra dashboard.
402 Insufficient wallet balance. Top up your token-credit wallet via the Fikra dashboard (M-Pesa or card).
429 Rate limit exceeded. Unverified accounts are limited to 30 RPM; trusted accounts to 100 RPM. Implement backoff.
503 Upstream/provider temporarily unavailable. Retry with exponential backoff.

Handling 429 and 503 with Exponential Backoff

When encountering 429 (rate limit) or 503 (service unavailable), implement exponential backoff to avoid hammering the API. Below is a compact Python example:

import time
import random
import requests

FIKRA_API_KEY = "fk_live_..."  # Replace with your actual key
BASE_URL = "https://api.fikraapi.co.ke/v1"

def call_fikra_with_backoff(payload, max_retries=5):
    url = f"{BASE_URL}/chat/completions"
    headers = {
        "Authorization": f"Bearer {FIKRA_API_KEY}",
        "Content-Type": "application/json"
    }

    for attempt in range(max_retries):
        try:
            response = requests.post(url, 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

            response.raise_for_status()
            return response.json()

        except requests.exceptions.RequestException as e:
            if attempt == max_retries - 1:
                raise e
            wait_time = (2 ** attempt) + random.uniform(0, 1)
            time.sleep(wait_time)

    raise Exception("Max retries exceeded")

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

try:
    result = call_fikra_with_backoff(payload)
    print(result)
except Exception as e:
    print(f"Error: {e}")

Key Notes

  • No Automatic Failover: Fikra does not promise automatic failover to other providers. If a 503 persists, check the Fikra dashboard for status updates.
  • Rate Limits: Respect the 30 RPM (unverified) or 100 RPM (trusted) limits to avoid 429 errors.
  • Model Aliases: Always use valid Fikra aliases (fikra-flash, fikra-fast-8b, fikra-pro-20b, fikra-pro-120b). Using OpenAI model names (e.g., gpt-4o) will result in a 400 error.

If the issue persists after verifying your base URL, API key, and wallet balance, contact Fikra support via the dashboard.


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