Uygulamayı aç
Moonborn — Developers

Hata kodları — zarf (envelope), kodlar, yeniden deneme anlambilimi

Tek hata zarfı şekli, 14 kodluk katalog, hangi kodlar otomatik-yeniden-deneme için uygun, idempotency anahtarı + hız limiti başlıkları.

Her Moonborn hata yanıtı aynı zarfı (envelope) paylaşır — işleyicin tek bir yerden ayrıştırabilir, sınıflandırabilir, yeniden deneme kararı verebilir.

Bu sayfayı bitirdiğinde

  • Hata zarf şeklini bileceksin.
  • HTTP durum kodu → hata kodu eşleşmesini ayırt edebileceksin.
  • 14 kodluk katalogu ve hangi kodların otomatik yeniden denemeye uygun olduğunu öğreneceksin.
  • Idempotency anahtarını ve hız limiti başlıklarını doğru kullanabileceksin.

Ön koşul: Bir API çağrısı yapmış olmak; mevcut bir SDK entegrasyonu olabilir.

Zarf şekli

{
  "error": {
    "code": "rate_limited",
    "message": "Per-minute API rate limit exceeded.",
    "details": { "retryAfter": 12 }
  }
}
AlanAnlamı
codeStabil, makine-okunabilir metin. Kontrol akışını koda göre yaz.
messageİnsan-okunabilir; kayıtlarda göstermek güvenli. Son kullanıcıya doğrudan gösterme — çeviri yap.
detailsKoda özgü alanlar (örn. retryAfter saniye, validationErrors[], conflictField).

HTTP durum kodu → ne anlama gelir

DurumNe zaman
400Bozuk istek — ayrıştırma (parse) hatası, eksik zorunlu alan
401Eksik veya geçersiz Bearer token
403Kimlik doğrulandı ama yetki yok — yetki kapsamı (scope) / rol yetersiz
404Kaynak bulunamadı
409Çakışma — idempotency anahtarı çakışması, drift engellemesi, durum makinesi reddi
422Doğrulama hatası — şekil geçerli, anlam değil
429Hız sınırı veya kota aşıldı
500Beklenmeyen sunucu hatası
502 / 503 / 504Üst akıştaki (upstream) LLM sağlayıcı sorunu — yeniden deneme adayı

14 kodluk katalog

KodDurumAnlam
unauthorized401Bearer token eksik veya süresi dolmuş
forbidden403Token geçerli, yetki / rol yetersiz
not_found404Kaynak yok veya çağırana görünür değil
validation_failed422Gövde (body) şekli geçerli ama değer aralığı / numaralandırma (enum) / zorunlu alan uyumsuzluğu
idempotency_conflict409Aynı idempotency anahtarı, farklı yük
state_conflict409Durum makinesi geçişi reddetti (örn. zaten silinmiş persona'yı arşivleme)
drift_blocked409Drift detection action=block ile tetiklendi
audit_blocked409Denetim kararı eşik altı; persona flagged (işaretli) döndü
moderation_blocked422Çıktı moderasyonu reddetti
rate_limited429Dakika başı üst sınır aşıldı; details.retryAfter saniye taşır
quota_exceeded429Aylık kota aşıldı (örn. üretim kotası)
provider_error502Üst akıştaki LLM sağlayıcı hatası
provider_timeout504Üst akıştaki LLM sağlayıcı zaman aşımı
internal_error500Ele alınmamış istisna (bizde kayda alındı)

Yeniden deneme anlambilimi

SDK'lar bu kodları üstel geri çekilmeyle (exponential backoff) otomatik yeniden dener:

KodVarsayılan yeniden deneme politikası
provider_error (5xx)3 yeniden deneme, üstel geri çekilme (1s, 2s, 4s)
provider_timeout (504)3 yeniden deneme, üstel geri çekilme
rate_limited (429)Retry-After başlığına uyar, en fazla 3 yeniden deneme

Bu kodlar asla otomatik yeniden denenmez — çağıran tarafın kararı gerekir:

KodNeden yeniden deneme değil
validation_failedÖnce isteği düzelt (yeniden deneme aynı hatayı verir)
idempotency_conflictAnahtarı değiştir
drift_blockedArayüzde kullanıcıya uyarı göster, persona'yı refine et
audit_blockedElle inceleme kuyruğuna al
moderation_blockedİçerik politikası ihlali — kayda al + elle incele
forbiddenYetki / rol düzeltilmedikçe aynı sonuç

Idempotency anahtarı

Her yazma isteği bir Idempotency-Key başlığı kabul eder:

curl -X POST https://api.moonborn.co/v1/personas \
  -H "Authorization: Bearer $MOONBORN_API_KEY" \
  -H "Idempotency-Key: persona-build-2026-05-17-mert" \
  -H "Content-Type: application/json" \
  -d '{"intent": "..."}'

24 saat içindeki yeniden gönderimler orijinal yanıtı döndürür — aynı gövde sağlama toplamı (checksum) → önbelleğe alınmış yanıt. SDK'lar varsayılan olarak UUID otomatik üretir; belirleyici (deterministik) iş anahtarın varsa geçersiz kıl.

Hız limiti başlıkları

Her yanıt (başarı veya hata) şunları taşır:

X-RateLimit-Limit: 3000
X-RateLimit-Remaining: 2987
X-RateLimit-Reset: 1747498200

429'da ek olarak:

Retry-After: 12

İstemci tarafı geri basınç (backpressure) için X-RateLimit-Remaining izle — üst sınırın %10'unun altındaysa yavaşla. Detay: Hız limitleri.

Sık karşılaşılan hatalar

"validation_failed" alıyorum ama alan eksik değil

details.validationErrors[] dizisine bak — hangi alanda hangi kural başarısız oldu:

{
  "error": {
    "code": "validation_failed",
    "message": "Request body validation failed.",
    "details": {
      "validationErrors": [
        { "path": "soul.desire", "code": "min_length", "value": 5, "expected": 20 }
      ]
    }
  }
}

soul.desire 20 karakterden kısa demiş — gövdeyi düzelt.

"drift_blocked" sürekli geliyor

engine.pipeline.drift_detection.action_on_alert = block modu etkin. Üretimde çok kullanıcı block nedeniyle şikayet ediyorsa auto_recover'a çevir (sessizce düzeltir) veya eşiği gevşet. Detay: Drift eşik ayarı.

"rate_limited" → "quota_exceeded" arasındaki fark?

Aynı durum kodu (429), farklı code:

  • rate_limited — dakika başı üst sınırı aştın; Retry-After saniyeleri bekle, devam et.
  • quota_exceeded — aylık kota tükendi; plan yükseltmesi veya bir sonraki faturalama döngüsü beklenmeli. Retry-After saniye değil faturalama sıfırlama zamanını gösterir.

Dürüst kapsam

İlgili

Hız limitleri

Plan başı üst sınırlar ve istemci-tarafı geri basınç deseni.

Open →
Yetkiler (scopes)

forbidden ayıklama — hangi uç nokta hangi yetkiyi gerektirir.

Open →
API sürümleme politikası

Hata zarfının ana sürümler (major versions) arasındaki kararlılığı.

Open →
Webhook olayları

Eşzamansız hatalar — persona.audit_failed, moderation.flagged.

Open →