Hata Kataloğu

Kimlik Doğrulama Hataları

/partner/1.0/... veri düzlemi, imza doğrulaması başarısız olduğunda HTTP 401 döner. Gövdedeki mesaj başarısızlık nedenini belirtir:

MesajNeden
missing api key, timestamp or signature headerX-Api-Key, X-Timestamp veya X-Signature header'ı eksik.
invalid timestampX-Timestamp sayı olarak ayrıştırılamadı.
stale timestampX-Timestamp sunucu saatinden ±5 dakika dışında.
invalid api keyAnahtar bilinmiyor veya aktif değil (revoked).
expired api keyAnahtarın geçerlilik süresi dolmuş.
ip not allowedİstek, anahtarın IP allowlist'i dışından geldi.
signature mismatchX-Signature beklenen imzayla eşleşmiyor.
replay detectedAynı imza 5 dakikalık pencere içinde ikinci kez görüldü.

Scope yetersizse istek yine reddedilir; endpoint'in gerektirdiği scope entegrasyona verilmiş olmalıdır (bkz. Scope Kataloğu).

İş / Validasyon Hataları

İmza doğrulandıktan sonra istek gövdesi doğrulanır. Validasyon ve iş kuralı hataları aynı gövde yapısıyla döner:

{
  "code": 406,
  "message": "Sepet toplamı tutarla eşleşmiyor",
  "content": null,
  "correlationId": "3f6d1c2e-…",
  "errors": {
    "errorCode": "30008",
    "errorGroup": "BUSINESS_RULE",
    "errorDescription": "…",
    "userMessage": "…",
    "details": { },
    "traceId": "…",
    "retryable": false
  }
}

errors.errorCode makine tarafından ayırt edilecek koddur; retryable isteğin aynen tekrar denenebileceğini söyler. Kimlik doğrulama redlerinde (401/429) errors bulunmaz, neden message alanındadır.

HTTPAnlamı
400Body / parametre validasyon hatası (ör. eksik zorunlu alan, tanımsız enum değeri, tutar > 0 değil) veya eksik Idempotency-Key header'ı.
401Kimlik doğrulama / imza / IP / expiry hatası.
403Anahtarınızda endpoint'in gerektirdiği scope yok.
404Kayıt bulunamadı ya da işletmenize ait değil. Başka bir işletmenin kaydı da bu kodla döner — varlığı sızdıran ayrı bir kod yoktur.
406İş kuralı ihlali (ör. geçersiz e-posta/telefon, geçmiş geçerlilik tarihi, sağlayıcı reddi, anahtar tavanının aşılması) veya idempotency çakışması — aynı anahtarın farklı gövdeyle kullanılması ya da ilk istek sürerken tekrar gönderilmesi.
429Hız sınırı aşıldı (varsayılan 300 istek/dakika, anahtar bazında).
502 / 503 / 504Sağlayıcı reddi, erişilemezliği ya da zaman aşımı. 503 ve 504 tekrar denenebilir.
5xxUpstream / iç servis hatası.

Sık Karşılaşılan İş Kuralı Mesajları

Mesaj anahtarıHTTPNeden
items.total.mismatch406Sepet kalemlerinin toplamı gönderilen amount ile eşleşmiyor. Beklenen ve gönderilen tutar mesajda yer alır.
items.limit.exceeded400Tek istekte izin verilen kalem sayısı (250) aşıldı.
items.invalid400Kalemde name, unitPrice veya pozitif quantity eksik.
pos.not.available406İşletmenin POS'u kapalı.
pos.non.secure.not.allowed406Bu POS 3D'siz işleme kapalı — threeDsEnabled: true gönderin.
transaction.amount.exceeds.per.transaction.limit406Tutar, işletmenin işlem başına POS limitini aşıyor.
pos.no.routing.rule.for.request406İstenen para birimi/POS için tanımlı yönlendirme kuralı yok.
checkout.not.captured406Tahsil edilmemiş işlem iade edilemez.
checkout.already.captured406Tahsil edilmiş işlem iptal edilemez; iade kullanın.
partner.api.amount.limit.exceeded406Tutar, API anahtarınız için tanımlı üst sınırı aşıyor.
partner.api.item.limit.exceeded406Kalem sayısı, API anahtarınız için tanımlı üst sınırı aşıyor.
pos.transaction.not.pre.authorized406İşlem provizyon durumunda değil.
pos.capture.exceeds.authorized406Kapatma tutarı provizyon tutarını aşıyor.
pos.reversal.rejected.by.provider406Sağlayıcı iptal/iade isteğini reddetti; sağlayıcının ret gerekçesi mesajda yer alır.
pos.commission.not.found406İstenen yöntem + taksit için tanımlı komisyon yok — bu durumda ödeme de reddedilir.
pos.amount.must.be.valid400amount eksik ya da 0'dan büyük değil.
invalid.payment.method400Geçersiz paymentMethod. Boş bırakırsanız sunucu CARD / SAVED_CARD olarak türetir.
paymenttransaction.not.found404İşlem bulunamadı ya da işletmenize ait değil. Başka bir işletmenin işlemi de bu kodla döner.
pos.provider.not.found404İşletmenizde kart saklamaya uygun aktif bir POS sağlayıcısı yok.
checkout.link.status.invalid406Tahsilat linki bu işlem için uygun durumda değil.
checkout.notfound400Tahsilat linki bulunamadı ya da işletmenize ait değil.
date.range.too.long400Rapor aralığı 92 günü aşıyor.

Hız Sınırı

Her API anahtarı için dakikalık istek tavanı uygulanır (varsayılan 300 istek/dakika). Tavan aşılırsa istek HTTP 429 ile reddedilir:

HTTP/1.1 429
rate limit exceeded

Sayaç sabit pencerelidir (dakika başı sıfırlanır) ve anahtar bazında tutulur — birden fazla sunucudan istek atmanız sınırı değiştirmez. 429 alırsanız isteği bir süre bekletip tekrar deneyin; Idempotency-Key aynı kaldığı sürece tekrar denemek güvenlidir.

Sınır imza doğrulandıktan sonra işler

Geçersiz imzalı istekler sayaca yazılmaz; yalnız public anahtarınızı bilen birinin kotanızı tüketmesi mümkün değildir.