Payment Orchestrator
Ters İbraz (Chargeback)

Ters İbraz

Ters ibraz (chargeback / dispute), alıcının bankasının bir ödemeyi geri almasıdır — genellikle kart sahibi dolandırıcılık, ürünün teslim edilmediği ya da faturalama hatası iddiasında bulunduğu için. Chargeback API'si her itiraz için tam bir vaka yönetimi iş akışı sunar: kaydedin, sahip atayın, not tutun, kart şemasının istediği belgeleri takip edin, kanıt yükleyin, representment ile itiraza karşı savunma yapın ve vakayı bir sonuçla kapatın.

Bir ters ibraz geldiğinde payment.disputed webhook'u tetiklenir (chargebackId, disputeState ve itiraz edilen tutarı taşır) — sistemleriniz durumu birinin banka portalını kontrol etmesini beklemeden, olduğu anda öğrenir. Ödemenin finansal durumu (CAPTURED/REFUNDED) itirazla ezilmez.

Tüm chargeback endpointleri düz Bearer kimlik doğrulaması kullanır (at_live_… erişim token'ı); para hareketi değil, vaka kaydı yönetirler.

Tüm tutarlar minor-unit (kuruş) taşınır: chargeback gövdesinde "amountMinor": "10050" = ₺100,50 (string).

Yaşam döngüsü

Bir itiraz vakası basit bir yaşam döngüsünden geçer:

  1. Alındı — vaka oluşturulur (POST /chargebacks) ve ödemeye bağlanır (vaka durumu RECEIVED).
  2. İşleniyor — ekibiniz vakayı yürütür: atama, notlar, belge talepleri, kanıtlar (UNDER_REVIEW).
  3. Representment gönderildi (opsiyonel) — kanıtlarınızla birlikte representment göndererek ters ibraza resmen itiraz edersiniz (REPRESENTMENT_SUBMITTED).
  4. Çözüldü — vaka üç sonuçtan biriyle kapanır:
SonuçAnlamı
WONRepresentment başarılı — para size geri döner
LOSTİtiraz kart sahibi lehine sonuçlandı — para geri alınmış kalır
ACCEPTEDTers ibraza itiraz etmemeyi seçtiniz ve geri alınmayı kabul ettiniz

Endpointler

MethodPathNe yapar
POST/chargebacksBir ödemeye karşı yeni itiraz vakası kaydeder
GET/chargebacksİtiraz vakalarını listeler
GET/chargebacks/:idVakanın tam detayı
PATCH/chargebacks/:id/statusVakanın yaşam döngüsü durumunu günceller
POST/chargebacks/:id/assignVakayı bir ekip üyesine atar
POST/chargebacks/:id/notesVaka zaman çizelgesine iç not ekler
POST/chargebacks/:id/document-requestsŞemanın/bankanın istediği bir belgeyi takibe alır
POST/chargebacks/:id/evidenceVakaya kanıt belgesi yükler
POST/chargebacks/:id/representmentRepresentment gönderir (ters ibraza resmen itiraz)
POST/chargebacks/:id/resolveVakayı bir sonuçla kapatır: WON, LOST veya ACCEPTED

Bir itirazı yürütme

İtirazdan haberdar olun

payment.disputed webhook'unuz chargebackId ve disputeState ile tetiklenir. Vakayı kaydedin (buradaki tutar minor-unit string'dir):

curl -X POST https://api-gateway.lunixi.com/api/v1/chargebacks \
  -H "Authorization: Bearer at_live_5f3e2b1a..." \
  -H "Content-Type: application/json" \
  -d '{
    "paymentId": "pay_9f3a1c",
    "amountMinor": "10050",
    "currency": "TRY",
    "networkReasonCode": "13.1",
    "reasonCategory": "product_not_received"
  }'

Opsiyonel alanlar: provider, providerCaseId, cycleCount, representmentDeadline (ISO tarih) ve ücret alanları. Vakalar provider + providerCaseId + cycle (manuel girişte paymentId + cycle) üzerinden dedupe edilir — aynı itirazı tekrar POST etmek mevcut vakayı created: false ile döndürür.

Sahip atayın ve inceleyin

Vakayı yürütecek kişiye atayın ve incelemeyi kayıt altında tutun:

curl -X POST https://api-gateway.lunixi.com/api/v1/chargebacks/cb_5d21e0/assign \
  -H "Authorization: Bearer at_live_5f3e2b1a..." \
  -H "Content-Type: application/json" \
  -d '{ "assignedUserId": "usr_ops_17", "priority": "HIGH" }'
 
curl -X POST https://api-gateway.lunixi.com/api/v1/chargebacks/cb_5d21e0/notes \
  -H "Authorization: Bearer at_live_5f3e2b1a..." \
  -H "Content-Type: application/json" \
  -d '{ "note": "Sipariş 2026-06-28 kargolandı, takip teslim edildi gösteriyor. Kurye tutanağı isteniyor." }'

Şemanın istediklerini toplayın

Banka ya da şema belirli belgeler isterse her birini POST /chargebacks/:id/document-requests ile ({ "requestType": "…", "description": "…", "dueDate": "…" }) takibe alın, sonra kanıt ekleyerek karşılayın. Kanıt, daha önce yüklenmiş bir dosyaya referans veren (fileRef) bir JSON kaydıdır; aynı type ile yeniden gönderim versiyonlanır:

curl -X POST https://api-gateway.lunixi.com/api/v1/chargebacks/cb_5d21e0/evidence \
  -H "Authorization: Bearer at_live_5f3e2b1a..." \
  -H "Content-Type: application/json" \
  -d '{
    "type": "DELIVERY",
    "fileRef": "media/disputes/cb_5d21e0/teslimat-tutanagi.pdf",
    "fileName": "teslimat-tutanagi.pdf",
    "mimeType": "application/pdf",
    "note": "İmzalı kurye teslimat onayı"
  }'

İtiraz edin — ya da kabul edin

Ters ibraza karşı savunma yapmak için representment gönderin (gövde yok — vakanın mevcut kanıt seti neyse o sunulur):

curl -X POST https://api-gateway.lunixi.com/api/v1/chargebacks/cb_5d21e0/representment \
  -H "Authorization: Bearer at_live_5f3e2b1a..."

İtiraz haklıysa (ya da uğraşmaya değmiyorsa) bu adımı atlayın ve vakayı ACCEPTED olarak kapatın.

Vakayı kapatın

Şemanın kararı geldiğinde vakayı sonuçlandırın:

curl -X POST https://api-gateway.lunixi.com/api/v1/chargebacks/cb_5d21e0/resolve \
  -H "Authorization: Bearer at_live_5f3e2b1a..." \
  -H "Content-Type: application/json" \
  -d '{ "outcome": "WON", "reason": "Teslimat kanıtı kabul edildi" }'

Yanıt biçimi

Mutasyon çağrıları kompakt bir vaka referansıyla yanıt verir:

{
  "id": "cb_5d21e0",
  "caseNumber": "CB-000123",
  "status": "UNDER_REVIEW",
  "created": false
}

GET /chargebacks/:id, vakanın tam detayını döner — vaka kaydı (ödeme bağlantısı, amountMinor, sebep kodları, atama, öncelik, son tarihler) artı zaman çizelgesi, checklist, kanıtlar, notlar ve görevler. Vaka status değerleri: RECEIVED, UNDER_REVIEW, REPRESENTMENT_SUBMITTED, WON, LOST, ACCEPTED, CLOSED.

İş akışınız açık bir aşama değişikliği gerektirdiğinde vakayı PATCH /chargebacks/:id/status ile { "toStatus": "UNDER_REVIEW" } (veya "REPRESENTMENT_SUBMITTED") göndererek ilerletin; itiraz kuyruğunuzu GET /chargebacks (Bearer, sayfalanmış) ile kurun.

Hatalar

DurumNe olur / ne yapmalı
Bilinmeyen chargeback veya ödeme id'si404 — id'yi kontrol edin; vakalar merchant kapsamındadır.
Zaten çözülmüş vakayı çözmeDurum-çakışması hatası — bir vaka yalnızca tek bir nihai sonuç alır.
Geçersiz outcome değeriDoğrulama hatası — WON, LOST veya ACCEPTED değerlerini birebir kullanın.
Kanıt yüklemesi reddedildiDosya boyutunu/biçimini kontrol edip tekrar deneyin; her yükleme çağrısında tek belge gönderin.
Eksik veya geçersiz API key401 — chargeback endpointleri sunucu tarafı Bearer key ister.

Webhooks

EventNe zaman tetiklenir
payment.disputedBir ödemeye ters ibraz açıldığında veya faz değiştirdiğinde — chargebackId, disputeState, disputedAmountMinor, openChargebackCount taşır

payment.disputed geldiğinde iç vakanızı hemen açın: itiraz pencereleri kısadır ve erken toplanan kanıt vakayı kazandırır.

Sonraki adımlar

  • Webhooks — payment.disputed arkasındaki teslimat modeli
  • Ödemeleri Listeleme — itiraz edilen ödemeyi ve geçmişini bulun
  • İadeler — proaktif iade, itirazın hiç açılmamasını sağlayabilir