Hareketler
- Taban yol
/api/v1/bank-connect- Kimlik
- Her istekte Ed25519 istek imzası —
X-Key-Id,X-Date,X-Nonce,X-Signature. Zaman penceresi ±5 dk, nonce tek kullanımlık. Bearer jetonu ya da panel oturumu bu uçlarda kabul edilmez (401 AUTH_HEADERS_MISSING). - Yetki
- Anahtarınız Banka Bağlantıları ürününü (
BANK_CONNECT) ve bu sayfadaki uçların yetkisini taşımalıdır:bank-connect:transactions:view. Ürünü olmayan anahtar403 PRODUCT_NOT_ENABLED, yetkisi olmayan anahtar403 API_INSUFFICIENT_SCOPEalır. Bkz. API'ye Giriş › Yetkiler. - Çapraz yüzey
- Bu uçlar s2s yüzeyindedir; kendi sunucunuzdan imzalı istekle çağırırsınız. Aynı verinin panelde ekranları var, ama panel uçları API anahtarıyla çağrılamaz; bu uçlar da panel oturumuyla çağrılamaz. Bankayı bağlama ve kesme yalnız panelde yapılır.
Hareket, hesap ekstresindeki tek satırdır. Bu uçlar bağlı hesaplarınızın hareketlerini döner. Hareket yönü ve tipleri: Kavramlar › Hareket yönü ve tipi.
Hareketleri listeleme
GET /api/v1/bank-connect/transactions
| Sorgu parametresi | Tip | Açıklama |
|---|---|---|
accountId | string | Virgülle ayrılmış hesap kimlikleri (UUID), en çok 100. Verilmezse anahtarınızın ortamındaki bütün hesaplar. |
bookedFrom | string (ISO 8601) | İşlem tarihi (bookedAt) bu andan itibaren — dahil. Saat dilimiyle gönderin. |
bookedTo | string (ISO 8601) | İşlem tarihi bu andan önce — hariç. Yalnız bookedFrom ile birlikte gönderilebilir. |
direction | string | CREDIT ya da DEBIT. |
minAmountMinor | integer | En az tutar, minor birimde — dahil. |
maxAmountMinor | integer | En çok tutar, minor birimde — dahil. |
canonicalType | string | Virgülle ayrılmış hareket tipleri, ör. TRANSFER_IN,POS_SETTLEMENT. |
limit | integer | Sayfa başına kayıt, 1–100. Varsayılan 25. |
cursor | string | Önceki yanıttaki pageInfo.nextCursor. |
Tarih aralığı kuralları
bookedFromvebookedToarası tek istekte en çok 92 gün olabilir.- Yalnız
bookedFromgönderirseniz üst sınır istek anıdır; aralık yine en çok 92 gündür. - Yalnız
bookedTogönderilemez;bookedFromda gerekir. - İkisini de göndermezseniz tarih süzgeci uygulanmaz ve bütün hareketler sayfalanır.
Bu kurallara uymayan istek 400 bank_connect.validation.invalid döner; sebep details.errors[].reason alanındadır:
reason | Sebep |
|---|---|
booked_from_required | bookedTo var, bookedFrom yok. |
after_booked_to | bookedFrom, bookedTo'dan sonra. |
range_too_large | Aralık 92 günden uzun. |
invalid | Tarih okunamadı. |
min_greater_than_max | minAmountMinor, maxAmountMinor'dan büyük. |
Süzgeç örnekleri
| Ne istiyorsunuz | Sorgu |
|---|---|
| Tek hesabın hareketleri | ?accountId=00000000-0000-0000-0000-000000000100 |
| İki hesabın hareketleri | ?accountId=00000000-0000-0000-0000-000000000100,00000000-0000-0000-0000-000000000101 |
| Ocak 2026'daki hareketler | ?bookedFrom=2026-01-01T00:00:00%2B03:00&bookedTo=2026-02-01T00:00:00%2B03:00 |
| Yalnız gelen para | ?direction=CREDIT |
| 1.000 TL ile 5.000 TL arası | ?minAmountMinor=100000&maxAmountMinor=500000 |
| Gelen havale/EFT'ler ve POS geçişleri | ?canonicalType=TRANSFER_IN,POS_SETTLEMENT |
Sorgu dizesinde + karakterini %2B olarak kodlayın; kodlanmamış + boşluk olarak okunur ve tarih geçersiz sayılır. İmzaladığınız yol, gönderdiğiniz kodlanmış yolla birebir aynı olmalıdır.
Açıklama metninde arama yapan bir süzgeç yoktur; tanımlanmamış her parametre 400 VALIDATION_ERROR döner.
source lunixi-sign.sh
REQ_PATH="/api/v1/bank-connect/transactions?direction=CREDIT&canonicalType=TRANSFER_IN&limit=50"
lunixi_sign GET "$REQ_PATH"
curl "https://api-gateway.lunixi.com$REQ_PATH" \
-H "X-Key-Id: $LUNIXI_KEY_ID" \
-H "X-Date: $DATE" \
-H "X-Nonce: $NONCE" \
-H "X-Signature: $SIGNATURE"PHP örneğindeki $bankConnect: API'ye Giriş › PHP SDK.
Sıralama
Hareketler kayda alınma anına (receivedAt) göre en yeniden eskiye sıralanır. receivedAt, hareketin bankadan okunup Lunixi'de kaydedildiği andır ve sonradan değişmez. İşlem tarihi (bookedAt) yalnız süzgeçtir, sıralama anahtarı değildir.
Bu yüzden banka bir hareketi geç bildirirse, işlem tarihi eski olsa da listenin başında görünür.
Yanıt
{
"status": "success",
"code": "SUCCESS",
"data": {
"items": [
{
"transactionId": "00000000-0000-0000-0000-000000001000",
"accountId": "00000000-0000-0000-0000-000000000100",
"direction": "CREDIT",
"amountMinor": 150000,
"currency": "TRY",
"bookedAt": "2026-01-01T07:00:00.000Z",
"canonicalType": "TRANSFER_IN",
"description": "ORNEK ACIKLAMA",
"counterpartyNameMasked": "Ö**** A****",
"counterpartyIbanMasked": "TR00 **** **** **** **** **00 00",
"receivedAt": "2026-01-01T07:05:00.000Z"
}
]
},
"pageInfo": { "hasMore": true, "nextCursor": "eyJ0IjoiMjAyNi0wMS0wMVQwNzowNTowMFoifQ", "totalCount": null },
"statusCode": 200,
"requestId": "00000000-0000-0000-0000-000000000000"
}Tek hareket
GET /api/v1/bank-connect/transactions/{transactionId} tek bir hareketi döner. Liste alanlarına ek olarak hareketten sonraki bakiyeyi, belge numarasını ve bankayı içerir. Bilinmeyen, başka bir organizasyona ya da diğer ortama ait hareket 404 bank_connect.transaction.not_found döner.
{
"status": "success",
"code": "SUCCESS",
"data": {
"transactionId": "00000000-0000-0000-0000-000000001000",
"accountId": "00000000-0000-0000-0000-000000000100",
"direction": "CREDIT",
"amountMinor": 150000,
"currency": "TRY",
"bookedAt": "2026-01-01T07:00:00.000Z",
"canonicalType": "TRANSFER_IN",
"description": "ORNEK ACIKLAMA",
"counterpartyNameMasked": "Ö**** A****",
"counterpartyIbanMasked": "TR00 **** **** **** **** **00 00",
"receivedAt": "2026-01-01T07:05:00.000Z",
"counterpartyBankCode": "0000",
"counterpartyBankName": "ÖRNEK BANKA",
"balanceAfterMinor": 990000,
"documentNo": "0000000",
"bank": { "bankId": "00000000-0000-0000-0000-000000000001", "eftCode": "0000", "name": "ÖRNEK BANKA" }
},
"statusCode": 200,
"requestId": "00000000-0000-0000-0000-000000000000"
}Hareket nesnesi
| Alan | Tip | Açıklama |
|---|---|---|
transactionId | string (UUID) | Hareketin kimliği. Aynı hareket için her zaman aynıdır; tekilleştirmede bunu kullanın. |
accountId | string (UUID) | Hareketin ait olduğu hesap. |
direction | string | CREDIT (giren) ya da DEBIT (çıkan). |
amountMinor | integer | Tutar, minor birimde. Her zaman sıfır ya da pozitif; yön direction alanındadır. |
currency | string | Para birimi (ISO 4217). |
bookedAt | string | İşlem tarihi. Değer yoksa alan yoktur. |
valueAt | string | Valör tarihi. Banka bildirmiyorsa alan yoktur. |
canonicalType | string | Bankadan bağımsız hareket tipi. → Hareket tipleri |
description | string | Bankanın yazdığı açıklama, maskelenmeden. Değer yoksa alan yoktur. |
counterpartyNameMasked | string | Karşı tarafın maskeli adı. Değer yoksa alan yoktur. |
counterpartyIbanMasked | string | Karşı tarafın maskeli IBAN'ı. Değer yoksa alan yoktur. |
receiptNo | string | Dekont numarası. Değer yoksa alan yoktur. |
receivedAt | string | Hareketin Lunixi'de kaydedildiği an; sıralama anahtarı. |
isReversal | boolean | Yalnız true olduğunda gelir: bu satır önceki bir hareketin ters kaydıdır (iptal ya da iade). Ters kayıt değilse alan yoktur. |
reversalOfTransactionId | string (UUID) | Ters kaydın bağlı olduğu asıl hareket. Banka bağlantıyı bildirmiyorsa alan yoktur. |
counterpartyBankCode | string | Karşı taraf bankanın EFT kodu. Banka bildirmiyorsa alan yoktur. |
counterpartyBankName | string | Karşı taraf bankanın adı. Banka bildirmiyorsa alan yoktur. |
balanceAfterMinor | integer | Yalnız tek hareket ucunda. Hareketten sonraki bakiye. Banka bildirmiyorsa alan yoktur. |
documentNo | string | Yalnız tek hareket ucunda. Bankanın belge numarası. Değer yoksa alan yoktur. |
bank | object | Yalnız tek hareket ucunda. bankId, eftCode ve varsa name. |
Hareketleri senkron tutma
Yeni hareketleri öğrenmenin birincil yolu webhook olayıdır. Liste ucu, webhook'u kaçırdığınız ya da ilk kez veri çektiğiniz durumlar için güvenilir kaynaktır. İkisini birlikte şöyle kullanın:
bookedAt ile değil, receivedAt ile belirleyin.- İlk yükleme. Süzgeçsiz (ya da yalnız
accountIdile) ilk sayfayı isteyin vepageInfo.hasMorefalseolana kadarnextCursorile sayfalayın. Her hareketitransactionIdile kaydedin ve gördüğünüz en yenireceivedAtdeğerini saklayın. - Düzenli tamamlama. Belirli aralıklarla aynı süzgeçlerle ilk sayfadan (imleçsiz) başlayın. Liste en yeniden eskiye sıralı olduğundan, sakladığınız en yeni
receivedAtdeğerinin gerisine düşene kadar sayfalayın ve sonra durun. - Tekilleştirin. Durma noktasını sakladığınız
receivedAtdeğerinin biraz gerisine koyun ve gelen her hareketitransactionIdile tekilleştirin; aynı hareketi webhook'tan ve listeden iki kez almak böylece sorun olmaz.
Senkronu işlem tarihine (bookedAt) göre kurmayın. Banka bir hareketi geç bildirebilir; işlem tarihi eski olan bir hareket, son kontrolünüzden sonra listeye girebilir. receivedAt bu yüzden sıralama ve durma noktası için doğru alandır.
Süzgeçleri değiştirdiğinizde imleci sıfırlayıp ilk sayfadan başlayın.
Hatalar
| HTTP | code | Ne yapmalı |
|---|---|---|
400 | VALIDATION_ERROR | Tanımlanmamış bir parametre (ör. açıklama araması), bilinmeyen canonicalType ya da direction, UUID olmayan accountId, 100'den fazla hesap ya da limit 1–100 dışında. |
400 | bank_connect.validation.invalid | Tarih aralığı ya da tutar aralığı kurala uymuyor; details.errors[].reason alanına bakın. |
400 | bank_connect.cursor.invalid | İmleci değiştirmeden gönderin ya da ilk sayfadan başlayın. |
403 | API_INSUFFICIENT_SCOPE | Anahtarınıza bank-connect:transactions:view yetkisini ekleyin; bank-connect:view yetmez. |
404 | bank_connect.transaction.not_found | Kimliği ve anahtarınızın ortamını kontrol edin. |