Uygulamayı aç
Moonborn — Developers

Errors

Error envelope şekli, tam error code kataloğu, retry semantiği ve rate-limit'e özgü işleme.

Her Moonborn error response'u aynı envelope'u paylaşır:

{
  "error": {
    "code": "rate_limited",
    "message": "Per-minute API rate limit exceeded.",
    "details": { "retryAfter": 12 }
  }
}

code stable, machine-readable bir string. message human-readable (log'larda göstermek güvenli; çeviri yapmadan end user'a gösterme). details ilgili olduğunda koda özgü alanlar taşır.

HTTP status code mapping

StatusNe zaman
400bozuk istek (parse hatası, eksik zorunlu alan)
401eksik ya da geçersiz bearer token
403authenticated ama unauthorized (scope ya da role yetersiz)
404resource bulunamadı
409conflict — tipik olarak idempotency key collision, drift block ya da persona state machine reddi
422validation hatası (şekil geçerli, semantik değil)
429rate-limited
500beklenmedik sunucu hatası
502/503/504upstream LLM provider sorunu; retry

Error code kataloğu

CodeStatusAnlam
unauthorized401Bearer token eksik ya da expired
forbidden403Token geçerli, scope/role yetersiz
not_found404Resource yok ya da caller'a görünür değil
validation_failed422Request body şekli geçerli ama değer aralığı / enum / zorunlu-alan uyumsuzluğu
idempotency_conflict409Aynı idempotency key, farklı payload
state_conflict409Resource state machine geçişi reddetti (örn. zaten silinmiş bir personayı archive etmek)
drift_blocked409Drift detection action=block bu yanıtta tetiklendi
audit_blocked409Audit verdict'i eşik altında; persona flagged state'inde döndü
moderation_blocked422Output moderasyondan kaldı; yanıt reddedildi
rate_limited429Tier başı rate cap'i vuruldu; details.retryAfter (saniye) cooldown'ı taşır
quota_exceeded429Aylık kota vuruldu (örn. generation kotası)
provider_error502Upstream LLM provider hatası; backoff ile retry
provider_timeout504Upstream LLM provider timeout
internal_error500Handle edilmemiş exception; bizde loglandı

Retry semantiği

SDK'lar bu kodları exponential backoff ile auto-retry yapar:

  • provider_error (5xx)
  • provider_timeout (504)
  • rate_limited (429) — Retry-After header'ına uyar

Bu kodlar asla auto-retry edilmez:

  • validation_failed — önce request'i düzelt
  • idempotency_conflict — key'i değiştir
  • drift_blocked / audit_blocked / moderation_blocked — caller kararı

Idempotency-Key

Her write request bir Idempotency-Key header'ı kabul eder. 24 saat içindeki replay'ler orijinal yanıtı döndürür. SDK'lar default'ta key'i auto-generate eder; deterministik bir business key'in varsa çağrı başı override et (Idempotency-Key: order-12345).

Rate-limit header'ları

Her response (başarı ya da error) taşır:

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

Client'ında backpressure için X-RateLimit-Remaining kullan. Tier başı cap'ler için Rate limits'e bak.

Dürüst kapsam

Yukarıdaki kodları izleriz; internal exception tip'leri, stack trace'leri ya da upstream provider error code'larını yüzeye çıkarmayız. Bir provider_error'ı debug ediyorsan, audit log (GET /v1/audit/events) details altında upstream error envelope'u taşır.