Hata Kodları
API yanıtlarında standart HTTP durum kodları kullanılır. Hata durumunda yanıt gövdesi her zaman aynı yapıdadır: bir errors dizisi.
Yanıt Yapısı
Tüm hatalar aşağıdaki yapıyla döner. Tek bir hata olsa bile errors her zaman dizidir:
{
"errors": [
{
"code": "Unauthorized",
"message": "Invalid credentials"
}
]
}
code makine tarafından okunmak içindir; kodunuzda buna göre dallanın.
message insan içindir ve sürümler arasında değişebilir, bu yüzden mesaj metnine göre karşılaştırma yapmayın.
code Değerleri
| code | HTTP | Ne zaman döner |
|---|---|---|
BadRequest | 400 | Gövde geçerli JSON değil, zorunlu bir alan eksik veya sorgu parametresi geçersiz |
Unauthorized | 401 | Kimlik bilgisi yok, hatalı, pasif veya kullanılan ortamla uyumsuz |
Forbidden | 403 | Yetki yetersiz, IP izin listesi dışı veya sellerId anahtarla eşleşmiyor |
NotFound | 404 | Uç yok veya istenen kayıt (sipariş, toplu işlem, kategori) bulunamadı |
MethodNotAllowed | 405 | İstek metodu API genelinde desteklenmiyor. Yalnızca GET, POST, PUT ve PATCH kabul edilir |
Conflict | 409 | Barkod veya stok kodu zaten kayıtlı, ya da sipariş zaten kargoya verilmiş |
ValidationError | 422 | Gövde yapısal olarak geçerli ama içerik kurallarına uymuyor. Limit aşımı veya geçersiz ID gibi |
TooManyRequests | 429 | İstek limiti aşıldı, güvenlik kilidi devrede veya günlük varyant kotası doldu |
InternalError | 500 | Beklenmeyen sunucu hatası |
UpstreamError | 502 | Ürün oluşturma sırasında altyapı hatası. Ürün tamamen geri alınır, yarım kayıt kalmaz |
ServiceUnavailable | 503 | Servis geçici olarak kullanılamıyor |
DELETE gibi hiç desteklenmeyen bir metot
405 döner. Ancak var olan bir yola yanlış metotla gitmek, örneğin yalnızca POST kabul eden bir uca
GET göndermek, o yolu eşleştirmez ve 404 döndürür. Bu beklenen davranıştır.
Toplu Doğrulamada Farklı Hata Yapısı
Stok ve fiyat güncelleme ucu kalemleri tek tek doğruladığı için farklı bir 422 gövdesi döndürür. Burada errors dizisinin elemanlarında code bulunmaz; onun yerine hatalı kalemi işaret eden index ve barcode yer alır:
HTTP/1.1 422 Unprocessable Entity
{
"errors": [
{ "index": 0, "barcode": "ABC123", "message": "quantity must be int 0..20000" },
{ "index": 2, "barcode": "DEF456", "message": "barcode is required (1-100 chars)" }
]
}
errors[0].code alanının bulunmayabileceğini hesaba katın.
code yoksa gövde kalem bazlı bir toplu işlem hatasıdır ve index alanı hangi kalemin
reddedildiğini söyler. Diğer tüm uçlarda code her zaman vardır.
Sıkça Karşılaşılan Hatalar
401, Authentication required
{"errors":[{"code":"Unauthorized","message":"Authentication required"}]}
Authorization başlığı hiç gönderilmemiş. Yanıtta ayrıca WWW-Authenticate: Basic realm="Milagron API" döner.
401, Invalid credentials
{"errors":[{"code":"Unauthorized","message":"Invalid credentials"}]}
Anahtar veya parola hatalı, ya da anahtar pasif durumda. Anahtarın ortamı da bu hatayı verir: canlı ortam anahtarını başka bir ortamda kullanmak da aynı mesajı döndürür. Bilgi sızdırmamak için ayrı bir mesaj verilmez.
403, SellerId does not match credentials
{"errors":[{"code":"Forbidden","message":"SellerId does not match credentials"}]}
URL'deki sellerId, anahtarın sahibi olan mağazayla eşleşmiyor. İstek her zaman anahtarın kendi sellerId değeri üzerinden yapılmalıdır.
403, Insufficient scope
{"errors":[{"code":"Forbidden","message":"Insufficient scope: product:write"}]}
Uç için gereken yetki anahtarda tanımlı değil. Hangi ucun hangi yetkiyi istediği Kimlik Doğrulama sayfasındadır.
409, Barkod veya stok kodu çakışması
{"errors":[{"code":"Conflict","message":"A pending/created product already uses barcode BC123 or stockCode SKU123"}]}
Barkod veya stok kodu, yayındaki ya da onay bekleyen başka bir üründe kayıtlı. Barkodlar mağaza genelinde benzersiz olmalıdır.
422, Doğrulama hatası
{"errors":[{"code":"ValidationError","message":"title exceeds the maximum length (max 255 chars, got 312)"}]}
Mesaj, hangi alanın hangi limiti aştığını ve gönderdiğiniz değeri içerir. Varyant içindeki alanlarda sıra numarası belirtilir: variants[3].barcode is too long (max 100 chars). Tüm sınırlar için Limitler sayfasına bakın.
429, İstek limiti
{"errors":[{"code":"TooManyRequests","message":"Rate limit exceeded"}]}
Dakikalık istek limiti aşıldı. Yanıtta Retry-After, X-RateLimit-Limit ve X-RateLimit-Remaining başlıkları döner. Ayrıntı için İstek Limitleri.
429, Güvenlik kilidi
{"errors":[{"code":"TooManyRequests","message":"Too many failed authentication attempts. Try again later."}]}
Aynı IP adresinden 10 dakika içinde 15 başarısız kimlik doğrulama denemesi yapıldı. 403 yanıtları da bu sayaca eklenir; yanlış sellerId ile döngüye giren bir entegrasyon kendini kilitleyebilir. Başarılı bir kimlik doğrulaması sayacı sıfırlar.
502, Ürün oluşturulamadı
{"errors":[{"code":"UpstreamError","message":"Product images could not be processed; check that every image url is publicly reachable and points directly to an image file"}]}
Ürün oluşturma, tüm adımları tamamlanmadan başarılı sayılmaz. Görsel adımı başarısız olursa oluşturulan ürün geri alınır ve hiçbir kayıt kalmaz. Aynı gövdeyle güvenle tekrar deneyebilirsiniz.
Toplu İşlemde Kalem Bazında Hatalar
Stok ve fiyat güncellemeleri asenkron çalışır. Doğrulamayı geçen bir işlemin içindeki bazı kalemler işlenirken tek tek başarısız olabilir. Bu durumda işlemin geneli completed olur, hatalı kalemler failed işaretlenir:
{
"batchRequestId": "abc-123",
"status": "completed",
"successCount": 8,
"failureCount": 2,
"items": [
{
"barcode": "XYZ",
"status": "failed",
"failureReasons": ["barcode not found for this seller"]
}
]
}
200 ve status: "completed" almanız her kalemin başarılı olduğu anlamına gelmez.
Her zaman failureCount alanını kontrol edin.
| failureReasons mesajı | Anlamı |
|---|---|
barcode not found for this seller | Barkod bu mağazanın ürünleri arasında yok. Ürünün yayında olduğundan ve barkodun doğru yazıldığından emin olun. |
salePrice cannot be greater than listPrice | listPrice piyasa satış fiyatıdır ve satış fiyatından küçük olamaz. İndirim yoksa 0 gönderin. |
Invalid or empty request payload | Kalem gövdesi okunamadı veya boş. |
Entegrasyon hatası, lütfen yöneticinizle iletişime geçin | Altyapı kaynaklı hata. Barkodu ve işlem zamanını bildirerek bize ulaşın. |
Hata İşleme Önerileri
codeile dallanın,messageile değil. Mesaj metinleri önceden bildirilmeden iyileştirilebilir.errors[0].codeyoksa gövde kalem bazlı bir toplu işlem hatasıdır;indexalanını kullanın.- 4xx hatalarını yeniden denemeyin. 400, 401, 403, 404, 409 ve 422 aynı istekle her zaman aynı sonucu verir. Düzeltmeden tekrar göndermek yalnızca istek hakkınızı ve güvenlik sayaçlarını tüketir.
- 429, 500, 502 ve 503 yeniden denenebilir. Denemeler arasındaki süreyi kademeli olarak artırın, 429 için
Retry-Afterbaşlığına uyun. - Asenkron uçlarda 200 son söz değildir. İşlemin sonucunu durum sorgulama ile doğrulayın.