Dokümantasyon
Hatalar
Kunavo, yeniden deneme gerekip gerekmediğini belirten HTTP durum kodlarıyla birlikte OpenAI biçiminde hata yükleri döndürür. Standart OpenAI SDK hata işleme yöntemini izlerseniz sorun yaşamazsınız.
2xx dışındaki her yanıt aynı JSON yapısına, yani OpenAI standardına sahiptir. Programlı işleme için error.code alanına, yeniden deneme politikası için status_code alanına göre eşleştirme yapın.
Hata yükü
{
"error": {
"message": "Model 'xyz-2025' is not available",
"type": "model_not_found",
"code": "model_not_found",
"param": null
}
}| Alan | Tür | Notlar |
|---|---|---|
message | string | İnsan tarafından okunabilir. Günlüğe kaydetmek güvenlidir; gizli bilgiler içermez. |
type | string | Genel kategori (authentication_ |
code | string | Ayrıntılı tanımlayıcı. Programatik dallanma için kullanılır. |
param | string|null | Hata belirli bir alanla ilgiliyse alanın adını belirtir. |
HTTP durum kodları
| HTTP | Anlam | Retry? |
|---|---|---|
| 400 | invalid_ — yükünüz hatalı biçimlendirilmiş. | Hayır — isteği düzeltin. |
| 401 | authentication_ — API anahtarı hatalı / eksik / iptal edilmiş. | Hayır — anahtarı yenileyin. |
| 402 | insufficient_ — cüzdan bakiyesi yetersiz (code: insufficient_) veya aylık sınıra ulaşıldı. | Hayır — /app/billing sayfasından bakiye yükleyin. İstisna: Retry-After başlığı, otomatik bakiye yüklemenin devam ettiğini belirtir; birkaç saniye sonra yeniden deneyin. |
| 403 | permission_ — anahtar geçerli, ancak IP izin listesi sizin IP adresinizi kapsamıyor. | Hayır — izin verilen bir adresten çağrı yapın. |
| 404 | model_ — model kimliği bilinmiyor veya devre dışı. | Hayır — /v1/models sayfasını kontrol edin. |
| 404 | missing_ — api./v1 yok veya temel ana makineye POST isteği gönderilmiş. | Hayır — temel URL'yi https://api. |
| 404 | unknown_url — /v1 altında bu yolda bir uç nokta yok; iletide en yakın uç nokta belirtilir. | Hayır — yolu düzeltin. |
| 408 | İstemci isteği zaman aşımına uğradı. | Evet, idempotency uyarısını dikkate alarak. |
| 422 | upstream_422 — üst akış hizmeti girdinizi reddetti (ör. desteklenmeyen boyut). | Hayır — girdiyi düzenleyin. |
| 429 | Hız sınırına ulaşıldı — aynı anda çok fazla çağrı yapılıyor. | Evet — üstel geri çekilme uygulayın. |
| 500 | Kunavo'da dahili hata. | Evet — kısa süre bekleyip yeniden deneyin. |
| 502 | upstream_ — üst akış sağlayıcısı başarısız oldu. | Evet — üstel geri çekilme uygulayın. |
| 504 | Görev zaman aşımına uğradı (görsel / video oluşturma, yoklama bütçemizi aştı). | Evet, ancak ücret yansıtılmasını bekleyin. |
usage_logs içindeki maliyet satırı $0'dır. İstisna: uzun süren görev API'lerinde 504 zaman aşımlarında, görev tamamlanmış ancak sonucu iletememişsek üst akış maliyeti görünebilir; bu nadir görülür.Yaygın hata kodları
authentication_error
Authorization: Bearer ...başlığını ayarlamayı unuttunuz.- API anahtarı
/app/keysüzerinden iptal edildi. - Anahtarın öneki hâlâ yanlış (
sk-kn-ile başlamalı).
insufficient_quota
- Bu istek için cüzdan bakiyesi çok düşük →
error.code,insufficient_balancedeğerinde. Hata; cüzdandaki tutarı (balance_usd), bu isteğin ayırdığı tutarı (needed_usd) ve iki bağlantıyı içerir:topup_urlbağlantısı, yükleme tutarı önceden seçili olarak faturalandırma sayfasını açar;auto_recharge_urlbağlantısı, otomatik bakiye yükleme ayarlarının bulunduğu sayfayı açar. Bu bağlantıların hiçbiri kendi başına ücret tahsil etmez. - Anahtar başına aylık sınıra ulaşıldı. Sınır, takvim ayının başında (UTC) sıfırlanır. Sınırı
/app/keysüzerinden yükseltin.
{
"error": {
"message": "Wallet balance is too low for this request. Top up at https://kunavo.com/app/billing — or turn on auto-recharge there, and a saved card refills the wallet before requests are refused.",
"type": "insufficient_quota",
"code": "insufficient_balance",
"param": null,
"balance_usd": 0.0142,
"needed_usd": 0.0381,
"topup_url": "https://kunavo.com/app/billing?topup=20",
"auto_recharge_url": "https://kunavo.com/app/billing?autorecharge=1&src=api_402"
}
}Yanıtta Retry-After başlığı yoksa insufficient_balance için yeniden denemeyi bırakın. Bu başlık, otomatik bakiye yüklemenin kayıtlı kartınızdan ödeme almaya başladığını belirtir; aynı isteğin birkaç saniye sonra başarılı olması gerekir.
permission_error
- Anahtarda IP izin listesi var ve çağrınız listedeki adreslerin dışında bir adresten geldi. İletide gördüğümüz adres belirtilir — bu adresi (veya CIDR bloğunu)
/app/keysüzerinden ekleyin ya da her adrese izin vermek için izin listesini tamamen kaldırın. - Bir aracıyı yeni bir ana makineye veya yeni bir NAT ağ geçidine taşımak ya da farklı bir ağdaki dizüstü bilgisayardan çalışmak bu adresi değiştirir. İzin listesi olmayan bir anahtar bu nedenle hiçbir zaman reddedilmez.
model_not_found
- Yazım hatalı kısa ad. Kanonik liste için /models sayfasını kullanın.
- Model şu anda devre dışı (üst akış kesintisi veya fiyatlandırma incelemesi nedeniyle).
upstream_error
Üst akış model sağlayıcısının, daha belirli bir koda dönüştüremediğimiz bir hata döndürdüğünü belirtir. Yanıt gövdesi özgün iletiyi içerir. Yaygın nedenler:
- Sağlayıcı tarafında aşırı yük.
- İçerik denetimi reddi (farklı bir istem deneyin).
- Bölge / kullanılabilirlik kısıtlamaları.
Yeniden deneme stratejisi
En basit ve güvenilir yöntem: yalnızca 429 / 5xx durumlarında sapmalı üstel geri çekilme uygulayın.
import time, random
from openai import OpenAI, RateLimitError, APIError
client = OpenAI(api_key=os.environ["KUNAVO_API_KEY"], base_url="https://api.kunavo.com/v1")
def call_with_retry(call, max_attempts=5):
for attempt in range(max_attempts):
try:
return call()
except RateLimitError:
if attempt + 1 == max_attempts: raise
# 429: exponential backoff with jitter
time.sleep(min(2 ** attempt, 30) + random.random())
except APIError as e:
if e.status_code and 500 <= e.status_code < 600 and attempt + 1 < max_attempts:
time.sleep(min(2 ** attempt, 30) + random.random())
else:
raise
result = call_with_retry(lambda: client.chat.completions.create(
model="claude-haiku-4-5",
messages=[{"role": "user", "content": "hi"}],
))- Her deneme için bekleme süresini en fazla 30 saniye, toplam deneme sayısını ise 5 deneme ile sınırlayın.
- 4xx hatalarında (408 ve 429 hariç) yeniden denemeyin. Böyle yapmak yalnızca zaman kaybettirir.
- Görsel ve video oluşturma idempotent değildir: Yeniden deneme yeni bir oluşturma işlemidir ve başarılı olursa ücretlendirilir. Başarısız bir çağrıdan hiç ücret alınmamıştır, bu yüzden onu yeniden denemek güvenlidir. Video için
POST /v1/videos,Idempotency-Keybaşlığını kabul eder: Aynı anahtarla tekrarlanan bir gönderim ilk görevi döndürür. - Kendi kodunuzda yan etkilere yol açabilecek sohbet çağrılarında, uygulama katmanında bir idempotency anahtarı kullanarak yinelenen istekleri engelleyin.
Kontrol panelinden hata ayıklama
Başarılı veya başarısız her API çağrısı /app/usage adresinde görülebilir. İstek ve yanıtın tüm ayrıntılarını içeren sayfayı açmak için herhangi bir satıra tıklayın:
- İstemciye döndürülen HTTP durum kodu.
- Üst akış hata kodu (varsa).
- Gecikme, istek IP adresi, kullanıcı aracısı.
- Duruma göre filtreleme, belirli bir modeldeki tüm 422 hataları gibi örüntüleri bulmaya yardımcı olur.
Bir olayı bildirme
Çalışması gereken bir modelde sürekli 5xx hataları görüyorsanız, aşağıdakilerle birlikte support@kunavo.com adresine e-posta gönderin:
- Model kısa adı ve örnek istek gövdesi (gizli bilgileri çıkarın).
- Hataların oluştuğu zaman aralığı.
- Yanıttaki hata
code+message. - Mümkünse
/app/usage/[id]adresinden bir kullanım günlüğü bağlantısı.
Bir iş günü içinde yanıt verilir; geliri etkileyen acil sorunlarda daha hızlı yanıtlanır.