Payment Orchestrator
Yöntemleri Listeleme

Yöntemleri Listeleme

GET /payments/methods, hesabınızda açık olan ödeme yöntemlerini döner: her yöntemin sağlayıcıları, sağlayıcıyı kimin seçtiği, alıcıdan istenen alanlar, tutar sınırları, para birimleri ve alıcının yapması gerekebilecek işlemler. Ödemeyi POST /payments/direct/payment ile başlatmadan önce bu yanıtı okuyun. Checkout Formu aynı listeyi kullanır.

Listede yalnız Checkout Formu ayarlarınızda açık olan (panelde Ödeme → Form Ayarları) ve en az bir sağlayıcısı bağlı olan yöntemler yer alır. Yöntemler ve sağlayıcılar Form Ayarları'nda verdiğiniz sırayla gelir; bkz. Sıra.

Akış

Yöntemleri listeleyin

GET /payments/methods çağırın. Tek bir yöntemin satırını okumak için ?paymentMethod=<KOD> ekleyin; bkz. Süzgeç.

Sağlayıcıyı belirleyin

Yöntem satırındaki providerSelectionMode sağlayıcıyı kimin seçtiğini söyler; bkz. Sağlayıcı seçimi.

  • BUYER: birden fazla sağlayıcı bağlıysa providers[] listesini alıcıya gösterin; alıcının seçtiği sağlayıcının providerCode'unu gönderin.
  • PLATFORM: providerCode isteğe bağlıdır. Sağlayıcıları alıcıya gösterip seçtiği sağlayıcının kodunu gönderebilirsiniz; göndermezseniz platform bağlı sağlayıcılardan birini seçer.

Alanları doldurun

Sağlayıcının inputFields tanımındaki alanları alıcıdan alın ya da prefill ile alıcı verisinden doldurun; bkz. Yöntem alanları.

Ödemeyi başlatın

POST /payments/direct/payment ile paymentMethod'u ve yöntemin bloğunu (ör. mobileBilling) gönderin. Blokta alanlar tanımdaki key adıyla, gerekiyorsa providerCode ile gelir → Payment.

İstek

GET https://api-gateway.lunixi.com/api/v1/payments/methods

Uç Step-Up kimlik doğrulaması ister (Bearer token ve Ed25519 imza başlıkları); gövdesi olmadığı için Digest başlığı gönderilmez. İmzanın kuruluşu Kimlik Doğrulama sayfasındadır. Uç hesabınızda Payment Gateway ürününün açık olmasını ister.

Süzgeç (?paymentMethod=)

GET https://api-gateway.lunixi.com/api/v1/payments/methods?paymentMethod=MOBILE_BILLING
ParametreTipZorunluAçıklama
paymentMethodstringHayırYöntem kodu, büyük harfle (ör. MOBILE_BILLING, WALLET, CARD). QR kodu QR_CODE olarak okunur
  • Parametre yoksa açık bütün yöntemler döner.
  • Parametre varsa yanıt yine methods listesidir ve yalnız o yöntemin satırını taşır. Satır, süzgeçsiz listedeki satırın aynısıdır.
  • Yöntem form ayarlarınızda kapalıysa ya da bağlı sağlayıcısı yoksa yanıt 200 ve { "methods": [] } olur; hata dönmez.
  • Tanınmayan kod, küçük harfle yazılmış kod (mobile_billing), boş değer (?paymentMethod=) ve tekrarlanan parametre 400 payment.method.unknown alır. Geçerli kodlar details.allowed listesindedir; bkz. Hatalar.
  • Diğer sorgu parametreleri yok sayılır.

Yanıt

{
  "status": "success",
  "code": "SUCCESS",
  "message": "…",
  "data": {
    "methods": [
      {
        "paymentMethod": "CARD",
        "category": "CARD",
        "blockName": "card",
        "displayName": "Kart",
        "providerSelection": "ROUTED",
        "providerSelectionMode": "PLATFORM",
        "actionTypes": ["REDIRECT"],
        "currencies": ["TRY"],
        "minAmount": null,
        "maxAmount": null,
        "preauth": true,
        "providers": [],
        "splitEligible": true,
        "splitBehavior": "HOLD_CAPTURE"
      },
      {
        "paymentMethod": "MOBILE_BILLING",
        "category": "TELCO",
        "blockName": "mobileBilling",
        "displayName": "Faturana Yansıt",
        "providerSelection": "OPTIONAL",
        "providerSelectionMode": "PLATFORM",
        "actionTypes": ["OTP"],
        "currencies": ["TRY"],
        "minAmount": 100,
        "maxAmount": 50000,
        "preauth": false,
        "providers": [
          {
            "providerCode": "<providerCode>",
            "displayName": "<sağlayıcının görünen adı>",
            "logoUrl": "https://…",
            "actionTypes": ["OTP"],
            "currencies": ["TRY"],
            "minAmount": 100,
            "maxAmount": 50000,
            "preauth": false,
            "inputFields": [
              {
                "key": "gsmNumber",
                "type": "PHONE",
                "required": true,
                "label": { "tr": "Faturasına yansıtılacak hat", "en": "Mobile line to be billed" },
                "prefill": "buyer.gsmNumber",
                "pii": true,
                "pattern": null,
                "minLength": null,
                "maxLength": null,
                "options": [],
                "url": null
              }
            ],
            "splitEligible": true,
            "splitBehavior": "CAPTURE_IRREVERSIBLE"
          }
        ],
        "splitEligible": true,
        "splitBehavior": "CAPTURE_IRREVERSIBLE"
      }
    ]
  },
  "statusCode": 200,
  "requestId": "…"
}

Örneklerdeki <providerCode> bir yer tutucudur. Hesabınızda bağlı sağlayıcıların kodlarını bu yanıttan okuyun; kodu uygulamanıza sabit yazmayın. Tutar sınırları ve para birimleri de sağlayıcıya göre değişir.

Yöntem satırı

AlanTipAçıklama
paymentMethodstringYöntem kodu; istekteki paymentMethod
categorystringYöntem kategorisi
blockNamestringİstek gövdesindeki blok adı (card, wallet, mobileBilling, promissoryNote)
displayNamestring | nullForm ayarlarında verdiğiniz etiket; yoksa null
providerSelectionstringproviderCode göndermeniz gerekip gerekmediği: ROUTED, OPTIONAL ya da REQUIRED. Bkz. Sağlayıcı seçimi
providerSelectionModestringBirden fazla sağlayıcı bağlıyken sağlayıcıyı kimin seçtiği: BUYER ya da PLATFORM. Bkz. Sağlayıcı seçimi
actionTypesstring[]Bu yöntemin yanıtta döndürebileceği aksiyon tipleri; bkz. Payment — Aksiyonlar
currenciesstring[]En az bir sağlayıcının kabul ettiği para birimleri
minAmount, maxAmountinteger | nullSağlayıcılar arasındaki en düşük alt ve en yüksek üst sınır, minor unit; sınır yoksa null
preauthbooleanEn az bir sağlayıcı preauth: true kabul ediyorsa true; bkz. Ön Provizyon
providersarraySağlayıcılar, Form Ayarları'ndaki sıranızla; kartta boştur
splitEligiblebooleanYöntem parçalı ödemede kullanılabilir mi. Kartta her zaman true; kart dışı yöntemde en az bir sağlayıcısı uygunsa true. Bkz. Parçalı ödeme alanları
splitBehaviorstring | nullYöntemin parçalı ödemedeki davranışı; uygun sağlayıcıların davranışı farklıysa null. Bkz. Parçalı ödeme alanları

Sağlayıcı satırı (providers[])

AlanTipAçıklama
providerCodestringSağlayıcı kodu; istekte <blok>.providerCode olarak gönderilir
displayNamestringAlıcıya gösterebileceğiniz ad
logoUrlstring | nullHTTPS logo adresi; yoksa null
actionTypesstring[]Bu sağlayıcının döndürebileceği aksiyon tipleri
currenciesstring[]Sağlayıcının para birimleri; beyan yoksa boş
minAmount, maxAmountinteger | nullTutar sınırları, minor unit; sınır yoksa null
preauthbooleanBu sağlayıcıyla preauth: true kabul edilir mi
inputFieldsarraySağlayıcının alıcıdan istediği alanlar; bkz. Yöntem alanları. Boşsa alan istenmez
splitEligiblebooleanBu sağlayıcıyla parçalı ödeme bacağı açılabilir mi
splitBehaviorstring | nullSağlayıcının parçalı ödemedeki davranışı; sağlayıcı parçalı ödemeyi desteklemiyorsa null

Sıra

Yöntemleri ve her yöntemin sağlayıcılarını panelde Ödeme → Form Ayarları ekranında sıralarsınız. Bu uç, Checkout Formu ve panel aynı sırayı kullanır.

  • Yöntemler sizin sıranızla gelir. Sıra vermediyseniz varsayılan sıra: CARD, BNPL, SHOPPING_LOAN, PROMISSORY_NOTE, MEAL_CARD, GIFT_CARD, CASH, CASH_ON_DELIVERY, WALLET, BANK_TRANSFER, OPEN_BANKING, MOBILE_BILLING, QR_CODE, CRYPTO, OTHER. Listede yalnız hesabınızda açık olanlar bulunur.
  • Sağlayıcılar (providers[]) yöntem içinde sizin sıranızla gelir. Sıra vermediyseniz sağlayıcı koduna göre sıralanır.
  • Sonradan bağladığınız sağlayıcı yönteminin sırasının sonuna eklenir. Bağlantısını kapattığınız sağlayıcı listeden düşer.
  • Sıra test ve canlı ortamda aynıdır.

Form Ayarları'nda yalnız formda kapattığınız sağlayıcı bu listede görünmeye devam eder ve POST /payments/direct/payment ile kullanılabilir; Checkout Formu'nda görünmez. Sağlayıcıyı her yerde kapatmak için sağlayıcı bağlantısını kapatın → Checkout Formu — Payment › Sıra ve formda gösterilen sağlayıcılar.

Parçalı ödeme alanları

Satırdaki splitEligible ve splitBehavior, yöntemin ve sağlayıcının parçalı ödemeye girip giremeyeceğini ve parçalı ödemede nasıl çekildiğini söyler.

  • Sağlayıcı satırında splitEligible, sağlayıcı parçalı ödemeyi destekliyorsa ve yöntemi Form Ayarları'nda parçalı ödemeye açtıysanız true'dur.
  • splitBehavior sağlayıcının özelliğidir: yöntemi parçalı ödemeye açmamış olsanız da görünür.
  • Parçalı ödemenin kart dışı bacağında yalnız splitEligible: true olan sağlayıcıları kullanın.
splitBehaviorAnlamıParçalı ödemedeki yeri
APPROVE_THEN_DISBURSEÖnce onay alınır, tutar en sonda çekilir (kredi, BNPL)Her zaman ilk adım
HOLD_CAPTURETutar bloke edilir, en sonda çekilir (kart)Onaydan sonra
CAPTURE_REVERSIBLETutar çekilir; gerekirse iade edilirKartlardan sonra
CAPTURE_IRREVERSIBLETutar çekilir ve geri alınamazEn son; bir ödemede en fazla bir tane

Sıranın ayrıntısı: Birden Fazla Yöntemle Ödeme › Adım sırası.

Sağlayıcı seçimi

Bir yönteme hesabınızda birden fazla sağlayıcı bağlı olabilir. providerCode göndermediğinizde ne olacağını yöntem satırındaki providerSelectionMode söyler:

providerSelectionModeAnlamı<blok>.providerCode
BUYERAlıcı markayı seçer; örneğin cüzdanda alıcı kendi cüzdanını seçerTek sağlayıcı bağlıysa gönderilmeyebilir. Birden fazla sağlayıcı bağlıysa zorunludur; göndermezseniz 400 payment.provider.required döner ve bağlı kodlar details.boundProviderCodes içindedir
PLATFORMSağlayıcıyı göndermezseniz platform seçerİsteğe bağlıdır. Gönderirseniz o sağlayıcı kullanılır. Göndermezseniz platform bağlı sağlayıcılardan birini para çekilmeden önce seçer ve ödemeye sabitler. Hiçbiri bu ödemeyi karşılamıyorsa 422 payment.provider.none_eligible döner

Bugün kullanılabilen yöntemlerin modları:

YöntemproviderSelectionModeSayfa
Kart (CARD)PLATFORM: sağlayıcıyı yönlendirme seçer; kart bloğunda providerCode yokturKredi/Banka Kartı
Cüzdan (WALLET)BUYERCüzdanla Öde › Sağlayıcıyı seçme
Faturana Yansıt (MOBILE_BILLING)PLATFORMFaturana Yansıt › Sağlayıcıyı seçme

providerSelection ile ilişkisi

providerSelection, providerCode göndermenizin gerekip gerekmediğini doğrudan söyler; değeri moddan ve bağlı sağlayıcı sayısından hesaplanır:

DurumproviderSelectionproviderCode
KartROUTEDGönderilmez; sağlayıcıyı yönlendirme seçer
Kart dışı, PLATFORM (sağlayıcı sayısı fark etmez)OPTIONALGönderilmeyebilir
Kart dışı, BUYER, tek sağlayıcıOPTIONALGönderilmeyebilir
Kart dışı, BUYER, birden fazla sağlayıcıREQUIREDZorunlu

Entegrasyonunuz providerSelection REQUIRED olduğunda providerCode gönderiyorsa doğru çalışır. Alıcıya sağlayıcı listesi gösterip göstermeyeceğinize siz karar verirsiniz: PLATFORM yönteminde de listeyi gösterip alıcının seçtiği kodu gönderebilirsiniz.

providerSelectionMode yalnız bu uç ve Direct API içindir. Checkout Formu'nda alıcı, Faturana Yansıt dahil her kart dışı yöntemde sağlayıcıyı kendisi seçer; form seçilen kodu her zaman gönderir → Checkout Formu — Payment › Sağlayıcı seçimi.

Platformun seçimi

PLATFORM yönteminde providerCode göndermediğinizde ve birden fazla sağlayıcı bağlı olduğunda platform sağlayıcıları sırayla dener ve bu ödemeyi karşılayabilen ilk sağlayıcıyı seçer:

  • Tutar ve para birimi sağlayıcının sınırları içinde olmalıdır.
  • preauth: true gönderdiyseniz sağlayıcı ön provizyonu desteklemelidir.
  • Yöntem bloğundaki alanlar sağlayıcının inputFields tanımına uymalıdır.
  • Sağlayıcı alıcının uygunluğunu sorgulamayı destekliyorsa (ör. hattın bu yönteme açık olması) sorgu olumlu dönmelidir. Bu sorgu para hareketi değildir.

Seçimden sonra:

  • Seçilen sağlayıcı ödemeye sabitlenir. Hata olursa başka sağlayıcıya, başka yönteme ya da karta geçilmez.
  • Ödemeyi yürüten sağlayıcı yanıtta ve webhook'ta providerCode alanındadır.
  • Aynı Idempotency-Key ile tekrarlanan istek yeni seçim yapmaz; ilk istekte seçilen sağlayıcı kullanılır.

Platform seçiminde iki durum, tek sağlayıcılı yöntemdeki kodla döner:

Yöntem alanları (inputFields)

Her sağlayıcı alıcıdan farklı bilgi isteyebilir: telefon numarası, T.C. kimlik numarası, doğum tarihi gibi. Hangi alanların gerektiğini sağlayıcının inputFields tanımı söyler; değerleri yöntem bloğunda, tanımdaki key adıyla gönderirsiniz:

"mobileBilling": { "providerCode": "<providerCode>", "gsmNumber": "+905321234567" }
AlanTipAçıklama
keystringBloktaki alan adı
typestringDeğer tipi; aşağıdaki tabloya bakın
requiredbooleanAlan zorunlu mu
labelobjectAlıcıya gösterilecek etiket: { "tr": "…", "en": "…" }
prefillstring | nullAlan gönderilmezse kullanılacak alıcı verisi: buyer.gsmNumber, buyer.email, buyer.identityNumber, buyer.name, buyer.surname. Önceden doldurulan değer de doğrulanır
piibooleanKişisel veri: değer loglanmaz, ödemenin metadata'sına yazılmaz ve yanıtlarda dönmez
patternstring | nullDeğerin uyması gereken düzenli ifade
minLength, maxLengthinteger | nullUzunluk sınırları
optionsarraySELECT seçenekleri: { "value": "…", "label": { "tr": "…", "en": "…" } }; diğer tiplerde boş
urlstring | nullCONSENT alanında sözleşmenin HTTPS adresi
requiredWhenobject | nullKoşullu zorunluluk: { "field": "…", "equals": "…" }. Aynı seviyedeki field alanının (bir SELECT) değeri equals ise alan zorunludur; değilse alan gönderilmemelidir. Koşul yoksa null
itemFieldsarrayGROUP alanında her öğenin alanları; biçimi bu tabloyla aynıdır (iç içe GROUP yoktur). Diğer tiplerde boş
minItems, maxItemsinteger | nullGROUP alanında öğe sayısı sınırları; sınır yoksa null. Bir listede en fazla 10 öğe bulunur
TipBeklenen değer
PHONEİsteğe bağlı + ve 10–15 rakam. Örnek: +905321234567
TCKN11 haneli T.C. kimlik numarası; sağlama algoritmasıyla doğrulanır
VKN10 haneli vergi kimlik numarası; sağlama algoritmasıyla doğrulanır
EMAILE-posta adresi
DATETakvimde var olan tarih, YYYY-AA-GG. Örnek: 1990-01-31
TEXTMetin
NUMBERRakamlar, isteğe bağlı ondalık kısım; metin ya da sayı olarak gönderilebilir
SELECToptions[].value değerlerinden biri
CONSENTtrue; alıcı url adresindeki sözleşmeyi onayladı
ADDRESSNesne: { "provinceCode", "districtCode", "neighborhoodCode", "line" }; dördü de zorunlu, metin. provinceCode "01"–"81", ilçe ve mahalle kodu rakamlardan oluşur, line (açık adres) en fazla 250 karakter. Kodlar adres sözlüğündendir
GROUPNesne listesi; her öğe itemFields tanımıyla doğrulanır. Öğe sayısı minItems ve maxItems sınırındadır

Alanların istekte nasıl doğrulandığı ve hata ayrıntıları: Payment — Yöntem alanları.

Hatalar

DurumYanıtNe yapmalı
paymentMethod süzgecindeki kod tanınmıyor, küçük harfle yazılmış, boş ya da tekrarlanmış400 payment.method.unknowndetails.allowed listesindeki bir kodu gönderin
Yöntem kapalı ya da sağlayıcısı yok200, { "methods": [] }Yöntemi panelde açın ve sağlayıcısını bağlayın
Kimlik, imza ya da ürün yetkisi hatası401, 403, 503Bkz. Hata Yönetimi
{
  "status": "failure",
  "code": "payment.method.unknown",
  "message": "Ödeme yöntemi tanınmıyor — `paymentMethod` alanında geçerli bir yöntem kodu gönderin.",
  "statusCode": 400,
  "timestamp": "2026-10-12T09:00:00.000Z",
  "service": "api-gateway",
  "systemTime": 1791795600000,
  "requestId": "…",
  "details": {
    "field": "paymentMethod",
    "allowed": ["CARD", "BNPL", "SHOPPING_LOAN", "PROMISSORY_NOTE", "MEAL_CARD", "GIFT_CARD", "CASH", "CASH_ON_DELIVERY", "WALLET", "BANK_TRANSFER", "OPEN_BANKING", "MOBILE_BILLING", "QR_CODE", "CRYPTO", "OTHER"]
  }
}

details.allowed tanınan bütün yöntem kodlarını taşır. Bir yöntemin hesabınızda kullanılabilir olup olmadığını süzgeçsiz listeden okuyun.

Sonraki adımlar