Tüm Payven API’lerinde tutarlar kuruş cinsinden, 64-bit tam sayı (long) olarak iletilir. Ondalıklı (float, decimal) değer kabul edilmez. İstemci tarafında 32-bit int kullanmayın — yüksek tutarlı işlemlerde taşma riskine girersiniz.
Tutar her zaman bir para birimiyle birlikte taşınır:
{ "amount": 15000, "currency": "TRY" }
Çevrim kuralı
tutar (kuruş) = tutar (₺) × 100
| Görünen tutar | API değeri |
|---|
| 0,01 ₺ | 1 |
| 1,00 ₺ | 100 |
| 25,50 ₺ | 2550 |
| 150,00 ₺ | 15000 |
| 1.234,56 ₺ | 123456 |
| 1.999.999,99 ₺ | 199999999 |
Örnek dönüştürme fonksiyonları
public static long LiraToKurus(decimal lira) => (long)Math.Round(lira * 100m);
public static decimal KurusToLira(long kurus) => kurus / 100m;
// Görüntüleme
public static string FormatKurus(long kurus) =>
(kurus / 100m).ToString("N2", new CultureInfo("tr-TR")) + " ₺";
Float kullanmayın. Ondalık aritmetiği yuvarlama hatalarına yol açar. Çevrimi mutlaka tamsayı (integer/long) ile yapın.
Para birimleri
| Kod | Para birimi | Doğrudan kabul | DCC çıktısı |
|---|
TRY | Türk Lirası | Evet | — |
USD | Amerikan Doları | — | Evet |
EUR | Euro | — | Evet |
GBP | İngiliz Sterlini | — | Evet |
Request body’sinde currency alanına şu an yalnız "TRY" gönderilir. Yabancı kartlarda DCC (Dynamic Currency Conversion) akışı devreye girerse Payven, kart para birimindeki çevrilmiş tutarı response body’sinde döner — istemci USD/EUR/GBP değerini doğrudan göndermez. Detay: DCC Akışı.
Sınır değerler
| Kural | Limit |
|---|
| Minimum işlem tutarı | 100 kuruş (1,00 ₺) |
| Maksimum tek işlem tutarı | Plan ve banka anlaşmanıza göre değişir |
| Kısmi iade tutarı | Orijinal işlem tutarını aşamaz |
İhlal durumunda invalid_amount veya refund_exceeds_original kodu ile 422 Unprocessable Entity döner. Tüm hata yanıtları RFC 9457 problem+json formatındadır — bkz. Hata Yönetimi.