Payment Orchestrator
Ödeme Listeleme

Ödemeleri Listeleme

Oluşturduğunuz her ödeme — hosted checkout, direkt API, pazaryeri split — aynı iki okuma endpoint'inden sorgulanır: filtrelenmiş listeler için GET /payments, tek bir ödemenin tüm detayı için GET /payments/:id. Dashboard'lar, mutabakat işleri, müşteri hizmetleri sorguları ve sipariş durumu kontrolleri için kullanın.

İki endpoint de sunucu tarafı erişim token'ınızla (at_live_…) düz Bearer kimlik doğrulaması kullanır — salt-okuma çağrılarında istek imzası gerekmez.

Yanıtlardaki tüm tutarlar minor-unit (kuruş) integer olarak döner: "amount": 10050 = ₺100,50.

Ödemeleri listeleme

GET /payments, en yeniden eskiye sıralı, sayfalanmış bir liste döner. Filtreler:

Query parametresiTipAnlamı
statusstringYalnızca bu durumdaki ödemeler (bkz. durum referansı)
customerIdstringYalnızca bu müşteriye ait ödemeler
pageintegerSayfa numarası
limitintegerSayfa boyutu
includeLegsbooleantrue: Checkout Formu parçalı ödemelerinin parçalarını da ayrı satır olarak getirir. Varsayılan false: parçalı ödeme yalnız ana ödemesiyle tek satırdır

Parçalı ödemeyle ilgili satırlar split alanı taşır: splitPaymentId, role (PARENT ana ödeme, LEG parça) ve parçada parentPaymentId ile legSequence. Ayrıntı: Parçalı Ödeme › Liste ve detay.

curl "https://api-gateway.lunixi.com/api/v1/payments?status=CAPTURED&customerId=cus_8f2a9c&page=1&limit=20" \
  -H "Authorization: Bearer at_live_5f3e2b1a..."

Yanıt

{
  "status": "success",
  "code": "PAYMENTS_LISTED",
  "data": {
    "data": [
      {
        "id": "9c6f2b1a-4e8d-4a3f-b5e6-2d7c1a9b8e30",
        "amount": 10050,
        "currency": "TRY",
        "merchantId": "m_…",
        "status": "CAPTURED",
        "createdAt": 1780740000000,
        "updatedAt": 1780740002500
      }
    ],
    "total": 137,
    "page": 1,
    "limit": 20,
    "totalPages": 7
  },
  "statusCode": 200,
  "requestId": "…"
}

Liste satırları kompakttır — id, amount (minor unit; çekilen tutar, taksitte vade farkı dahil), currency, merchantId, status, createdAt/updatedAt (epoch milisaniye). Tam kayıt için GET /payments/:id çağırın.

Tek ödeme detayı

GET /payments/:id, ödemenin tam kaydını döner; attempt'ler ve yönlendirme kararının özeti de dahildir.

  • Attempt'ler — bir ödeme birden fazla kez denenebilir (örneğin akıllı yönlendirme başka bir sağlayıcı kimliğine failover yaptığında). Her attempt kendi sonucunu kaydeder; nihai duruma tam olarak nasıl gelindiğini görürsünüz.
  • Yönlendirme kararı — ödemenin neden o rotaya gönderildiğinin niteliksel özeti: hangi yönlendirme sonucunun uygulandığı ve failover olup olmadığı. İç skorlama detayları dışarıya açılmaz.
curl https://api-gateway.lunixi.com/api/v1/payments/pay_9f3a1c \
  -H "Authorization: Bearer at_live_5f3e2b1a..."

Yanıt

{
  "status": "success",
  "code": "PAYMENT_FOUND",
  "data": {
    "id": "9c6f2b1a-4e8d-4a3f-b5e6-2d7c1a9b8e30",
    "amount": 10050,
    "currency": "TRY",
    "merchantId": "m_…",
    "status": "CAPTURED",
    "createdAt": 1780740000000,
    "updatedAt": 1780740002500,
    "orderId": "ORD-84722",
    "paymentChannel": "WEB",
    "locale": "tr",
    "installment": 1,
    "is3D": true,
    "metadataJson": "{}",
    "description": "Sipariş #84722 ödemesi",
    "providerCode": "…",
    "attemptCount": 2,
    "recoveredAfterRetry": true,
    "recoveryAttemptCount": 1,
    "recoveryProviderPathJson": "[…]"
  },
  "details": {
    "capturedAmount": "10050",
    "refundedAmount": "0",
    "remainingCapturable": "0",
    "remainingRefundable": "10050",
    "events": [ "…ödeme event zaman çizelgesi…" ],
    "routingSummary": { "…niteliksel rota kararı…": "…" },
    "attemptHistory": [ "…her çekim denemesi için bir kayıt…" ],
    "card": { "…maskeli kart bilgisi…": "…" },
    "threeD": {
      "mode": "…",
      "liabilityShiftGranted": true,
      "post3DFailoverUsed": false
    }
  },
  "statusCode": 200,
  "requestId": "…"
}

data bloğu ödeme kaydının kendisidir; details bloğu settlement tutarlarını (capturedAmount, refundedAmount, remainingCapturable, remainingRefundable — minor-unit string), event zaman çizelgesini, attempt geçmişini ve yönlendirme/3-D özetlerini ekler.

Ödeme durumları

status alanı her zaman şu 12 değerden tam olarak birini taşır:

DurumAnlamı
INITIATEDÖdeme kaydı oluşturuldu; işleme henüz bir sonuca varmadı
PROCESSINGÖdeme aktif olarak işleniyor
AWAITING_3DAlıcı 3-D Secure'a yönlendirildi ve henüz tamamlamadı
AUTHORIZEDTutar alıcının kartında bloke; henüz capture edilmedi (ön provizyon)
CAPTUREDYetkilendirilen tutarın tamamı çekildi
PARTIALLY_CAPTUREDYetkilendirilen tutarın yalnızca bir kısmı çekildi
REFUNDEDÇekilen tutarın tamamı iade edildi
PARTIALLY_REFUNDEDÇekilen tutarın bir kısmı iade edildi
VOIDEDYetkilendirme capture edilmeden serbest bırakıldı — para hareket etmedi
EXPIREDCapture edilmemiş bir yetkilendirmenin süresi doldu ve otomatik serbest bırakıldı
FAILEDÖdeme başarısız oldu; para çekilmedi
NEEDS_RECONCILIATIONNihai sonuç otomatik doğrulanamadı; ödeme mutabakat sürecinde

Ters ibraz finansal durumu ezmez — dispute durumu payment.disputed webhook'u ve Ters İbraz yüzeyinden izlenir; ödeme CAPTURED/REFUNDED olarak kalır.

⚠️

NEEDS_RECONCILIATION durumunu başarısız değil belirsiz olarak ele alın: nihai bir duruma çözülene kadar bu ödemeye karşılık iade yapmayın, tekrar denemeyin, siparişi teslim etmeyin. Çözüldüğünü GET /payments/:id ile sorgulayarak ya da ilgili webhook'u dinleyerek öğrenirsiniz.

Analytics

Listeyi tamamlayan iki salt-okuma analytics endpoint'i vardır (Bearer):

  • GET /payments/analytics/failover-recovery — akıllı yönlendirmenin başka bir rotaya failover yaparak ödemeyi ne sıklıkla kurtardığı: trafiğiniz üzerinden kurtarılan hacim ve adetler.
  • GET /payments/analytics/provider-credentials/:id — tek bir sağlayıcı kimliğinin performansı (:id, panelde yapılandırdığınız credential'dır): ona atfedilen başarı oranları ve hacimler.

İkisi de toplulaştırılmış ve nitelikseldir — iç yönlendirme modelini değil, sonuçları raporlar.

Hatalar

DurumNe olur / ne yapmalı
Bilinmeyen ödeme id'si404 — id mevcut değil ya da başka bir merchant'a ait.
Geçersiz filtre değeri (örn. bilinmeyen status)Doğrulama hatası — 12 enum değerinden birini birebir yazıldığı gibi kullanın.
Eksik veya geçersiz API key401 — erişim token'ınızı Authorization: Bearer at_live_… olarak gönderin.

Sonraki adımlar