Türkiye’de taksit, kart programının (bonus, world, maximum, axess, paraf…) ve POS anlaşmasının kesişimidir: aynı kart, farklı POS’larda farklı taksit ve farklı vade farkı görebilir. Poyra bu kesişimi üç parçayla modeller:

BIN kataloğu

Kartın ilk 6–8 hanesi (BIN), platform genelinde tutulan bir katalogla banka, program, marka, kart tipine (kredi / banka kartı / ön ödemeli) ve kartı çıkaran ülkeye çevrilir. Katalog işyerine özgü değildir; platform işletmecisi POST /v1/bins ile toplu yükler, işyerleri GET /v1/bins/{bin} ile sorgular. Arama en uzun eşleşmeyi kazandırır: 8 haneli kayıt varsa 6 haneliyi ezer. country alanı ISO-3166 alpha-2’dir (TR, DE, US…) ve verilmezse TR sayılır — katalog Türkiye odaklıdır. Bu alan taksidi etkilemez; yurt dışı kartı başka bir POS’a yollamak isteyen yönlendirme kuralları için vardır. BIN katalogda yoksa ülke bilinmez ve ülke kuralı eşleşmez.

Taksit şemaları

Şema, “hangi POS hesabı, hangi kart programına, kaç taksiti, yüzde kaç vade farkıyla sunuyor” sorusunun kaydıdır:
  • program yerine "*" yazmak şemayı tüm programlara uygular; programa özel şema her zaman "*" şemasını ezer.
  • customerRateBps on binde birdir: 350 = %3,50 vade farkı, 0 = vade farksız.
  • Taksit sayısı 2–12’dir; tek çekim şema gerektirmez.
  • Şemalar silinmez, pasife çekilir.

Vade farkı hesabı

Yüzdesel hesap ondalık hassasiyetle yapılır, sonuç her zaman kuruşa döner ve bankacı yuvarlaması (yarım kuruş çift haneye) kullanılır — milyonlarca işlemde tek yönlü yuvarlama sapması birikmesin diye:
149,90 ₺‘lik bir işlem 6 taksit ve %3,50 vade farkıyla: toplam 155,15 ₺, 5 × 25,85 ₺ + son ay 25,90 ₺.

Teklif: POST /v1/installments/quote

Checkout’un taksit tablosu bu uçtan gelir; kendi arayüzünüzde de aynı ucu kullanırsınız:
Teklifin kuralları:
  1. BIN’i gönderin, kart numarasını değil. Doğrulama 6–8 haneyle sınırlıdır; tam PAN göndermek hem gereksiz hem PCI kapsamını genişletir.
  2. Tek çekim her hesapta her zaman listelenir — vade farksız, tutar aynen.
  3. Taksit yalnızca katalogda tanınan kredi kartlarına önerilir; banka kartı ve ön ödemeli karta taksit çıkmaz.
  4. Aynı hesap ve taksit için programa özel şema "*" şemasını ezer.
  5. Her seçenekte toplam, aylık tutar ve son ay tutarı ayrı döner.
Yanıttaki program alanını ödeme oluştururken geri gönderin — confirm aşamasında şema seçimine girer.

Fiyatın ödemeye bağlanışı

Taksit fiyatı hesap bazında bağlanır. Confirm sırasında rota motoru bir aday seçtiğinde o hesabın şeması sorulur:
  • Şema varsa karttan çekilecek tutar (chargedAmountMinor) vade farkı dahil hesaplanır ve bankaya bu tutar gider. Mal bedeli (amountMinor) intent’te değişmeden kalır; iade tavanı çekilen tutardır.
  • Şema yoksa o hesap “bu taksidi sunmuyor” demektir — deneme açılmadan sıradaki adaya geçilir.
  • Hesap taksidi hiç desteklemiyorsa (ör. Stripe/Adyen’de TR banka taksidi yoktur) aday tümüyle atlanır; aksi hâlde sağlayıcı tutarı tek çekim alır ve fark sessizce kaybolurdu.
Hiçbir aday istenen taksidi sunmuyorsa yanıt 409 installments.not_offered olur ve ödeme created durumunda kalır: bu bir banka reddi değil yapılandırma eksiğidir — şema tanımlayın ya da taksit sayısını değiştirin.