Skip to main content
Para Transferi hata kodları üç kategoride döner: Payven domain kodları (transfer iş kuralı), HTTP canonical kodlar (auth, validation, rate limit) ve banka yanıt kodları (provider_error_code). Tüm hatalar RFC 9457 problem+json formatında uygun HTTP durum koduyla döner:
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/problem+json
{
  "type":          "https://docs.payven.com.tr/errors/insufficient_balance",
  "title":         "Kaynak hesapta yeterli bakiye yok",
  "status":        422,
  "code":          "insufficient_balance",
  "detail":        "Talep edilen tutar (1.500.000 kuruş) hesap bakiyesini aşıyor.",
  "instance":      "/api/v1/transfers/bulk/send",
  "correlation_id": "9f1c8e76-..."
}

Transfer yaşam döngüsü

HTTPcodeAnlam
404transfer_not_foundVerilen transfer_id bulunamadı veya bu tenant’a ait değil
404source_account_not_foundsource_account_id bulunamadı
404recipient_not_foundrecipient_id bulunamadı
422invalid_state_transitionTransfer mevcut durumdan istenen aksiyona geçemez (örn. pending olmayan transfer onaylanamaz)
422payment_already_approvedTransfer zaten onaylanmış
422payment_already_sentTransfer zaten gönderilmiş
422payment_already_rejectedTransfer zaten reddedilmiş
409duplicate_external_idAynı external_id ile başka bir transfer zaten var

Tutar ve hesap kuralları

HTTPcodeAnlam
422invalid_amountTutar pozitif değil, sıfır veya minimum altında
422invalid_currencyPara birimi desteklenmiyor (şu an yalnız TRY)
422insufficient_balanceKaynak hesapta yeterli bakiye yok
422daily_limit_exceededHesap günlük transfer limiti aşıldı
422monthly_limit_exceededHesap aylık transfer limiti aşıldı
422single_transfer_limit_exceededTek transferde izin verilen üst tutar aşıldı
403source_account_inactiveKaynak hesap pasif
403source_account_unauthorizedBu kullanıcı kaynak hesaba yetkili değil

Alıcı / IBAN

HTTPcodeAnlam
422invalid_ibanIBAN checksum’ı geçmiyor
422iban_not_eligibleIBAN seçilen transfer tipinde işlenemez (örn. yurtdışı IBAN’a FAST)
422recipient_blockedAlıcı blacklist’te
422recipient_validation_failedTC kimlik / vergi kimliği IBAN sahibiyle eşleşmiyor (banka tarafı kontrolü)
422invalid_cardKart numarası Luhn checksum’ı geçmiyor (kart transferi)

Transfer tipi

HTTPcodeAnlam
422unsupported_transfer_typeBu kaynak hesap bu transfer tipini desteklemiyor
422fast_amount_limitFAST için maksimum tutar (200.000 TL) aşıldı
422fast_window_closedFAST sistemi geçici olarak hizmet dışı
422eft_window_closedEFT saatleri dışında EFT talebi

Banka tarafı

HTTPcodeAnlam
422bank_declinedBanka transferi reddetti — provider_error_code daha spesifik bilgi taşır
504bank_timeoutBanka yanıt vermedi (otomatik retry tetiklenmiş olabilir)
503connector_unavailableBanka konnektörü geçici olarak devre dışı (circuit breaker açık)
502bank_system_errorBanka tarafında bilinmeyen hata

Validasyon ve auth

HTTPcodeAnlam
400validation_failedİstek alanları geçersiz — errors[] ile detay
400tenant_id_requiredX-Tenant-Id header’ı eksik
401invalid_tokenToken eksik / geçersiz
403forbiddenRol yetersiz (örn. transfer-admin gerektiren endpoint’e transfer-operator ile istek)
409idempotency_key_in_useAynı Idempotency-Key farklı body için kullanılmış
429rate_limit_exceededİstek limiti aşıldı — Retry-After header’ına uyun

Banka yanıt kodları (provider_error_code)

bank_declined durumunda banka tarafından dönen orijinal kod provider_error_code alanında taşınır. Yaygın kodlar:
KodAçıklamaMüşteriye gösterim
01Yetersiz bakiye”Hesabınızda yeterli bakiye yok.”
02Hesap bulunamadı”Alıcı IBAN’ı geçersiz veya kapalı.”
03Hesap dondurulmuş / blokeli”Alıcı hesabı işleme uygun değil.”
04Limit aşımı”Bu transfer banka limitlerini aşıyor.”
05TC kimlik eşleşmiyor”Alıcı bilgilerinde uyumsuzluk.”
91Banka sistemi yanıt vermedi(Otomatik retry devreye girer)
96Sistem hatası(Otomatik retry)
Banka-spesifik tam kod listesi konsoldaki Konnektör Hata Kodları ekranında bulunabilir.

Müşteriye gösterme

detail alanı son kullanıcıya gösterilebilir nitelikte yazılır. Yine de hassas durumlarda (recipient_blocked, fraud şüphesi) genel bir mesajla geçiştirmek daha güvenlidir:
function userMessage(problem) {
  switch (problem.code) {
    case "insufficient_balance":
    case "daily_limit_exceeded":
    case "monthly_limit_exceeded":
      return problem.detail;
    case "recipient_blocked":
    case "recipient_validation_failed":
      return "Transfer gerçekleştirilemedi. Lütfen alıcı bilgilerinizi kontrol edin.";
    case "bank_declined":
      return "Bankanız transferi onaylamadı. Lütfen sonra tekrar deneyin.";
    default:
      return "Transfer şu an gerçekleştirilemedi. Lütfen tekrar deneyin.";
  }
}

Destek talebi

Her hata yanıtında dönen correlation_id değerini paylaşın — log zincirini saniyeler içinde bulabiliriz. Response header’ındaki X-Correlation-Id ile gövdedeki correlation_id aynı değerdir.
Konu:    Transfer 422 — insufficient_balance
Detay:   correlation_id: 9f1c8e76-...
         transfer_id:   8e3f5c12-...
         external_id:   PAYROLL-001
         zaman:         2026-05-03T15:34:58+03:00
Genel hata yönetimi prensibi: Hata Yönetimi (Konsept).