Skip to content

Hata Formatı

Laravel standart format kullanıyoruz. Accept: application/json header'ı her zaman ekleyin — eksikse hata HTML olarak dönebilir.

HTTP kodları

KodAnlamTipik senaryo
200Başarılılistele, güncelle, indirme
201Oluşturulduyeni kayıt — response içinde id
202Kuyruğa alındıbulk import (POST /bulk-operations/import)
200Silme başarılısilme — JSON mesaj döner ({"message":"… silindi."})
400Bozuk istekJSON parse hatası
401Kimliksiztoken eksik / geçersiz
403Yasaktenant izinsiz erişim veya abonelik/plan kısıtı (bkz. aşağıda)
404Bulunamadıid yok veya başka tenant'a ait
409Çakışmaiş kuralı: duplicate mapping vs.
422İşlenemezvalidation — errors alanında detay
429Çok fazla istekrate limit (gelecekte)
500Sunucu hatasılog'a düşer, retry edilebilir
503Hizmet yokDB down, queue full

Abonelik & plan hataları (403)

Tüm v1 uçları aboneliğe bağlıdır. Yetki/tenant hatasından ayrı olarak, gövdedeki code alanı kısıtı belirtir — entegratörün bunu ayırt etmesi gerekir:

codeAnlamıNe yapmalı
subscription_expiredAbonelik kilitli/süresi dolmuş — yazma işlemleri reddedilirOperatör abonelik yenilemeli; retry etme
plan_limit_exceededPlan kotası aşıldı (örn. ürün limiti)Plan yükseltilmeli; retry etme
json
{ "message": "Aboneliğinizin süresi doldu.", "code": "subscription_expired" }

Başlangıç planında API kapalı: api_access özelliği yalnız Pro/Kurumsal planlarda açıktır. Başlangıç planındaki bir hesabın API anahtarı v1 uçlarında 403 alır. GET /v1/mesubscription.plan_code / status ile durumu önceden kontrol edebilirsin.

Standart hata gövdesi

Validation hatası (422)

json
{
  "message": "Geçersiz KDV oranı: 18. Tanımlı oranlar: 0, 1, 10, 20",
  "errors": {
    "tax_rate": ["Geçersiz KDV oranı: 18. Tanımlı oranlar: 0, 1, 10, 20"]
  }
}
  • message — okunabilir özet (ilk hatanın metni)
  • errors — alan adı → mesaj array'i

Birden fazla alan hatalıysa hepsi errors içinde döner:

json
{
  "message": "The given data was invalid.",
  "errors": {
    "name": ["The name field is required."],
    "sku": ["Bu SKU ile başka bir ürün zaten var."]
  }
}

Genel hata (401, 403, 404, 500)

json
{"message": "Unauthenticated."}

500'lerde mesajı kullanıcıya gösterme — log'a yansır, retry öner.

Sık karşılaşılan validation mesajları

AlanMesajÇözüm
name"The name field is required."POST /products'ta name zorunlu
sku"Bu SKU ile başka bir ürün zaten var."farklı sku gönder veya mevcut ürünü güncelle
tax_rate"Geçersiz KDV oranı: X. Tanımlı oranlar: 0, 1, 10, 20"Sadece sistemdeki oranı kullan veya tax_rate_id ile gönder
brand_id"Seçilen marka bulunamadı."GET /brands ile valid ID öğren veya brand_name kullan
category_ids"Seçilen kategorilerden bazıları bulunamadı."GET /categories ile valid ID öğren veya category_paths kullan
image"image must be one of: jpeg, jpg, png, webp"sadece kabul edilen formatlar
image"image may not be greater than 5120 kilobytes"5MB altı

Retry stratejisi

  • 422 → retry yapma, payload düzeltilmeli
  • 401/403 → retry yapma, token sorunu
  • 500/503 → exponential backoff (1s, 2s, 4s, 8s, 16s — max 5 deneme)
  • Network timeout → retry yap ama idempotency için ileride Idempotency-Key header desteği eklenecek

Entegrasyoner — Pazaryeri Entegrasyon Sistemi