Geliştiriciler

DGMOS Banking Integration API · v1.0.0

Banking API

Banking, DGMOS müşterilerinin banka hareketlerini toplayan salt-okunur servistir. Bu API'yi DGMOS backend çağırır; tarayıcıdan ya da mobil uygulamadan doğrudan çağrılmaz. Her istek, müşteriye ait bir secret API anahtarı ile imzalanır ve yalnızca o müşterinin verisini görür.

Temel adres$BANKING_URLyerelde http://localhost:8090
BiçimREST · JSONyalnızca /v1
SözleşmeOpenAPI 3.1openapi.yaml
OlaylarAsyncAPI 3.0asyncapi.yaml

Bu sayfa doğrudan openapi.yaml ve asyncapi.yaml dosyalarından üretilir. Sözleşme de API'nin kayıtlı rotalarıyla testte karşılaştırılır; yani burada gördüğünüz uç noktalar çalışan servisle birebir aynıdır.

Kimlik doğrulama

Anahtar çifti (access_key + secret_key) banking ekibi tarafından müşteri için üretilir. Secret yalnızca bir kez gösterilir; DGMOS'un secret deposunda saklayın, istemciye ya da loglara asla koymayın.

Her istekte üç başlık gönderilir:

BaşlıkDeğer
X-Access-KeyAnahtarın açık kısmı
X-TimestampUnix saniye. Sunucu saatinden 5 dakikadan fazla sapmamalı.
X-Signaturehex(HMAC-SHA256(secret_key, metin))

İmzalanan metin dört satırdır, aralarında \n vardır, sonda satır sonu yoktur:

METHOD\nPATH\nTIMESTAMP\nBODY
  • METHOD büyük harf: GET, POST…
  • PATH gönderildiği haliyle yol ve query: /v1/transactions?from=2025-11-01
  • BODY gönderilen ham gövde; GET'te boş.
  • Başarıyla işlenmiş bir yazma isteği aynı imzayla tekrar gelirse 409 duplicate_request döner. Başarısız istekler aynı imzayla tekrar denenebilir.
  • Anahtar kısıtları sunucuda uygulanır: izinli IP'ler, izinli route'lar, dakikalık limit, bitiş tarihi, iptal.
# Ortam: BANKING_URL, BANKING_ACCESS_KEY, BANKING_SECRET_KEY
# Kullanım: banking METHOD PATH [JSON]
banking() {
  local method=$1 path=$2 body=${3-} ts sig
  ts=$(date +%s)
  sig=$(printf '%s\n%s\n%s\n%s' "$method" "$path" "$ts" "$body" \
    | openssl dgst -sha256 -hmac "$BANKING_SECRET_KEY" | awk '{print $NF}')
  curl -sS -X "$method" "$BANKING_URL$path" \
    -H "X-Access-Key: $BANKING_ACCESS_KEY" \
    -H "X-Timestamp: $ts" -H "X-Signature: $sig" \
    ${body:+-H "Content-Type: application/json" --data-binary "$body"}
}

İlk istek

GET /v1/me anahtarın kime ait olduğunu döndürür. Kurulumu doğrulamak için en iyi ilk çağrıdır: 401 alırsanız imzayı, 403 alırsanız anahtarın IP ve route kısıtlarını kontrol edin.

Ardından tipik akış şöyledir:

  1. Banka kataloğundan bankayı bulun: GET /v1/banks
  2. Hesabı oluşturun: POST /v1/accounts
  3. Bağlantıyı kurun ya da ekstreyi yükleyin: POST /v1/connections, POST /v1/statements/import
  4. banking.transactions.imported.v1 olayını dinleyin ve hareketleri okuyun: GET /v1/accounts/{id}/transactions

Adımların ayrıntısı ve aralarındaki ilişki: Akışlar.

$ banking GET /v1/me
{
  "data": {
    "customer_id": 1001,
    "api_key_id": 7,
    "api_key_name": "dgmos-backend"
  }
}

Akışlar

Bu bölüm, bir müşterinin bankasının bağlanmasından hareketlerin DGMOS ekranına düşmesine kadar olan yolu baştan sona anlatır. Her adım ilgili uç noktaya ve olaya bağlantı verir; ayrıntı için referans bölümüne geçebilirsiniz.

BankaSFTP sunucusu Bankadosya gönderir Bankingçek · al · işletekilleştir · doğrula REST API/v1 · imzalı banking.eventsRabbitMQ · amqps DGMOSbackend veolay tüketicisi çekeriz push sorgular bildirir
Banka dosyayı gönderir ya da banking çeker; banking dosyayı işleyip hareketleri saklar. DGMOS veriyi API'den okur, değişiklikleri olaylardan anında öğrenir.
AkışNe zaman
1. Bir bankayı bağlamakMüşteri yeni bir banka hesabını eklerken; bir kez
2. Dosyanın gelişiHer gün, kendiliğinden (zamanlanmış çekme, bankanın gönderimi) ya da elle yükleme
3. Dosyadan hareketeHer dosya geldiğinde
4. Olayları dinlemekSürekli; DGMOS'un ekranlarını ve bildirimlerini güncel tutar
5. Hareketleri okumakBir olay geldiğinde ya da kullanıcı ekranı açtığında
6. SorunlarSenkron başarısız olduğunda, bakiye tutmadığında, dosya işlenemediğinde

1. Bir bankayı bağlamak

Banka, müşterinin hareketlerini ancak müşterinin yazılı talimatıyla paylaşır. Talimat sürecini başvuru akışı ile takip edebilirsiniz; teknik bağlantı aşağıdaki adımlarla kurulur. Bağlantı DRAFT olarak başlar ve yalnızca ACTIVE olduğunda dosya alır.

DRAFTTESTINGACTIVE

Yan durumlar: SUSPENDED (askıya alındı, yeni dosya alınmaz), DISABLED.

  1. Bankayı bulun. GET /v1/banks?q=akbank bankanın id değerini ve channels listesini döndürür: banka hangi yöntemi (SFTP_PULL, SFTP_PUSH…) ve formatı destekliyor. Ayrıntı: Bankalar ve gereksinimleri.
  2. Bankanın istediklerini öğrenin. GET /v1/application-templates?institution_id=6&channel_type=SFTP_PULL o bankanın bu yöntem için istediği form alanlarını ve evrakları verir.
  3. Hesabı oluşturun. POST /v1/accounts: IBAN ya da hesap numarası ve para birimi.
  4. Bağlantıyı oluşturun. POST /v1/connections: yöntem ve yönteme göre config (aşağıdaki tablo). Katalogda UNSUPPORTED işaretli bir yöntem reddedilir.
  5. Hesabı bağlantıya bağlayın. POST /v1/connections/{id}/accounts. Bir bağlantı birden fazla hesabı kapsayabilir.
  6. Anahtarlar. Çekme yönteminde POST /v1/connections/{id}/ssh-key bize özel bir SSH anahtarı üretir; public_key bankaya iletilir. Banka dosyaları PGP ile şifreliyorsa POST /v1/connections/{id}/pgp-key ve PUT /v1/connections/{id}/pgp-settings. Özel anahtarlar banking'den hiç çıkmaz.
  7. Deneyin. POST /v1/connections/{id}/test: çekmede sunucuya bağlanır, host key'i doğrular ve klasörü listeler.
  8. Açın. POST /v1/connections/{id}/activate.
  9. Zamanlayın. PUT /v1/connections/{id}/sync-policy ne sıklıkla çekileceğini belirler. Geçmiş günler için POST /v1/connections/{id}/backfill.
# 4. Çekme yöntemiyle bağlantı
$ banking POST /v1/connections '{
  "institution_id": 6,
  "name": "Ana hesap SFTP",
  "channel_type": "SFTP_PULL",
  "format": "MT940",
  "config": {
    "host": "sftp.bank.example",
    "port": 22,
    "username": "dgmos",
    "remote_dir": "/out",
    "pattern": "*.sta",
    "host_key_sha256": "SHA256:…"
  }
}'

Çekme mi, gönderme mi?

SFTP_PULL: banking çekerSFTP_PUSH: banka gönderir
Bağlantıyı kim açarBanking, bankanın SFTP sunucusunaBanka, banking'in SFTP sunucusuna
confighost, port, username, remote_dir, pattern, host_key_sha256 (zorunlu), min_file_age_secondsauthorized_keys (bankanın SSH public key'leri, zorunlu), allowed_ips, pattern, temp_suffixes
Bankaya verilenBizim SSH public key'imiz ve çıkış IP'mizGET /v1/connections/{id} yanıtındaki push: adres, kullanıcı adı, sunucu parmak izi
Bankadan alınanSunucu adresi, kullanıcı, klasör, host key parmak izi (resmî kanaldan)Bankanın SSH public key'i ve kaynak IP'leri
Zamanlamasync-policy ile; elle POST /v1/connections/{id}/syncBankanın gönderdiği anda

Host key değişirse çekme durur ve HOST_KEY_MISMATCH verir. Bankadan yeni parmak izini resmî kanaldan teyit etmeden config'i değiştirmeyin.

2. Dosyanın gelişi

Dosya üç yoldan gelir; hangisinden gelirse gelsin aynı işleme girer ve bir dosya kaydı oluşur (GET /v1/statement-files, alanı source).

Çekme SFTP_PULL

Zamanlayıcı ya da elle senkron bir iş açar. İş, bankanın sunucusundan yeni dosyaları indirir.

QUEUEDRUNNINGSUCCEEDED

Geçici hatada artan beklemeyle tekrar dener; kalıcıysa DEAD olur ve banking.sync.failed.v1 yayınlanır. İşler: GET /v1/connections/{id}/sync-jobs.

Gönderme SFTP_PUSH

Banka, bağlantıya özel kullanıcıyla (c<bağlantı id>) dosyayı bırakır. Sunucu yalnızca yazmaya açıktır: okuma, silme ve listeleme yoktur.

Kaynak IP ve SSH anahtarı bağlantıdaki değerlerle eşleşmelidir. Geçici adla (.part, .tmp) yükleyip yeniden adlandırma desteklenir; yarıda kesilen aktarım atılır.

Elle yükleme MANUAL_UPLOAD

POST /v1/statements/import ile dosya doğrudan yüklenir. Yanıt, işlemenin sonucunu hemen döndürür.

Bağlantı kurulmadan önce, geçiş döneminde ya da bir dosyayı yeniden denemek için kullanışlıdır.

3. Dosyadan harekete

  1. Aynı dosya mı? İçeriğin SHA-256'sı daha önce geldiyse dosya yeniden işlenmez (duplicate: true).
  2. Arşiv. Ham dosya değiştirilemez arşive, şifreli olarak yazılır.
  3. Çözme. PGP ayarlıysa dosya çözülür ve imzası doğrulanır; başarısızsa dosya FAILED.
  4. Format ve profil. MT940, MT942, CAMT.053, CAMT.052, CSV ya da XLSX tanınır; bankanın profili (CSV kolonları, tarih biçimi) uygulanır.
  5. Hesap eşleştirme. IBAN ya da hesap numarasıyla. Kesin eşleşme yoksa ekstre karantinaya alınır, hareketleri yazılmaz.
  6. Tekilleştirme. Daha önce görülen hareket ikinci kez yazılmaz; bkz. Tekilleştirme.
  7. Tek işlemde kayıt. Hareketler, bakiye kontrolü ve olaylar aynı veritabanı işleminde yazılır: ya hepsi ya hiçbiri.

Dosyanın sonucu

statusAnlamı
PROCESSEDTüm ekstreler işlendi
PARTIALBir kısmı işlendi, bir kısmı karantinada
QUARANTINEDHiçbir ekstre bir hesaba eşleşmedi
FAILEDOkunamadı ya da çözülemedi; ayrıntı dosya kaydında

Yayınlanan olaylar

4. Olayları dinlemek

Banking olayları kendi RabbitMQ'sundaki banking.events topic exchange'ine yayınlar. Her tüketici servis kendi kullanıcısını alır.

Banking ekibinden alınanDeğer
Adresamqps://<kullanıcı>:<şifre>@<host>:5671/banking (vhost banking)
CA sertifikasıca.pem: sunucu sertifikasını bununla doğrulayın, doğrulamayı kapatmayın
IP izniTüketicinin çıkış IP'si banking tarafında izinli olmalı
  1. Kuyruğunuzu kullanıcı adınızla başlayan bir adla açın: dgmos.banking-events. Başka adlara yetkiniz yoktur.
  2. Kuyruğu banking.events'e bağlayın. Routing key olay tipidir: hepsi için #, yalnızca hareketler için banking.transactions.*.
  3. Mesajı işledikten sonra onaylayın (manual ack). İşlem yarıda kalırsa mesaj tekrar gelir.
  4. eventId ile tekilleştirin: teslimat en az bir kezdir.
  5. Olay yalnızca kimlik taşır; güncel veriyi API'den okuyun (aşağıdaki tablo).

Önemli: kuyruğunuz bağlanmadan önce yayınlanan olaylar size ulaşmaz. Kuyruğu, ilk banka bağlantısından önce bir kez açıp bağlayın; sonrasında broker ya da tüketiciniz kapalıyken olaylar kuyrukta bekler.

// github.com/rabbitmq/amqp091-go
pem, _ := os.ReadFile("ca.pem")
roots := x509.NewCertPool()
roots.AppendCertsFromPEM(pem)
conn, err := amqp.DialTLS(os.Getenv("BANKING_AMQP_URL"),
	&tls.Config{RootCAs: roots})
ch, _ := conn.Channel()
q, _ := ch.QueueDeclare("dgmos.banking-events", true, false, false, false, nil)
_ = ch.QueueBind(q.Name, "#", "banking.events", false, nil)
msgs, _ := ch.Consume(q.Name, "", false, false, false, false, nil)
for m := range msgs {
	if err := handle(m.MessageId, m.Type, m.Body); err != nil {
		m.Nack(false, true) // tekrar dene
		continue
	}
	m.Ack(false)
}

Hangi olayda ne okunur

OlayPayloadOkuyun
transactions.importedaccountId, countGET /v1/accounts/{id}/transactions
statement.importedfileId, statusGET /v1/statement-files/{id}
statement.quarantinedfileIdGET /v1/quarantine
quarantine.resolvedaccountId, transactionsNewGET /v1/accounts/{id}/transactions
statement.balance_mismatchaccountId, differenceHesabı kullanıcıya işaretleyin; ekstre bankadan teyit edilmeli
sync.failedjobId, errorCodeGET /v1/sync-jobs/{id}
application.state_changedrequestId, toGET /v1/applications/{id}

5. Hareketleri okumak

  • Bir hesabın hareketleri: GET /v1/accounts/{id}/transactions; tüm hesaplar: GET /v1/transactions (isteğe bağlı account_id).
  • Liste en yeniden eskiye gelir; sonraki sayfa için next_cursor değerini cursor ile geri gönderin (Yanıt biçimi ve sayfalama).
  • Olay geldiğinde tüm geçmişi değil, yalnızca o hesabın son sayfalarını okuyun; count kaç yeni hareket olduğunu söyler.
  • Tutarlar ondalık string'dir ("1234.56"); kayan noktalı sayıya çevirmeyin.
  • Gün içi raporda PENDING gelen hareket, gün sonunda aynı kayıt üzerinde BOOKED olur: kaydı id ile güncelleyin, yeni kayıt açmayın.
$ banking GET '/v1/accounts/42/transactions?limit=50'
{
  "data": [
    { "id": 981, "booking_date": "2025-11-04",
      "signed_amount": "15000.00", "currency": "TRY",
      "description": "GELEN EFT ACME TİCARET A.Ş.", … }
  ],
  "next_cursor": "MjAyNS0xMS0wNHw5ODE"
}

6. Sorunlar

DurumNasıl anlaşılırNe yapılır
Senkron kalıcı olarak başarısızsync.failed; iş DEADGET /v1/sync-jobs/{id} hata kodu. Bankanın sunucusu, anahtar ya da IP değiştiyse bağlantıyı düzeltip yeniden senkron başlatın
Host key değiştiİş hatası HOST_KEY_MISMATCHGüvenlik olayı olabilir. Bağlantıyı askıya alın, yeni parmak izini bankadan resmî kanaldan teyit edin
Ekstre hesaba eşleşmedistatement.quarantinedKarantina: doğru hesaba atayın ya da kapatın
Bakiye tutmadıstatement.balance_mismatchHareketler yazıldı ama eksik/fazla olabilir; bankadan ekstreyi teyit edin
Dosya okunamadıDosya kaydı FAILEDGET /v1/statement-files/{id} hata ayrıntısı; PGP anahtarı ya da bankanın format değişikliği
İstek reddedildi4xx ve error.codeHata kodları

Bankalar ve gereksinimleri

Her banka farklıdır: desteklediği yöntemler, formatlar, istediği form ve evraklar değişir. Bu bilgiler banking'in banka kataloğunda tutulur ve API'den okunur; bankalardan cevap geldikçe katalog güncellenir.

Banka neyi destekliyor

GET /v1/banks/{id} yanıtındaki channels her yöntem ve format için bir kayıttır: channel_type, format, intraday (gün içi rapor) ve availability_status.

availability_statusAnlamı
UNKNOWNHenüz bilgi yok
REPORTEDBanka ya da müşteri bildirdi, doğrulanmadı
UNDER_REVIEWDoğrulanıyor (örnek dosyalar, test)
VERIFIEDGerçek dosyalarla doğrulandı; kanıtı evidence_url/evidence_note
UNSUPPORTED, DEPRECATEDBu yöntemle bağlantı açılamaz

Banka ne istiyor

GET /v1/application-templates?institution_id=&channel_type= o bankanın bu yöntem için güncel şablonunu döndürür: doldurulacak form alanları (şirket bilgileri, hesaplar, formatlar, sıklık…) ve evraklar (bankanın talimat formu, imza sirküleri…). Başvuru bu şablonla açılır ve eksikler sunucuda kontrol edilir.

CSV ve XLSX gönderen bankaların kolon eşlemesi profillerdedir: GET /v1/profiles.

Bankayla değiş tokuş edilenler

Bankaya verilenBankadan istenen
Her durumdaFirma ve teknik iletişim bilgileri; banking'in sabit IP'siMüşterinin imzalı talimatı; format ve sürümü; gerçek örnek dosyalar; dosya adlandırma kuralı; gün sonu saati ve gün içi rapor sıklığı; gün içi raporların artımlı mı tam mı olduğu; karakter kodlaması
Banka gönderirSFTP adresi, kullanıcı adı ve sunucu parmak izi (push alanı)SSH public key'i ve kaynak IP'leri
Biz çekerizBağlantıya özel SSH public key'imizSunucu adresi, kullanıcı, klasör ve host key parmak izi
PGPBağlantıya özel PGP public key'imizBankanın imza public key'i

Ortama özel değerler (SFTP adresi ve parmak izi, IP, olay adresi) banking ekibi tarafından verilir.

Türkiye'deki bankalar

Katalogdaki bankalar ve bankaların kendi kurumsal sayfalarında anlattıkları ekstre hizmeti. REPORTED: banka sayfasında SFTP ya da web servis açıkça yazıyor. UNKNOWN: sayfa yalnızca SWIFT, e-posta, FTP anıyor ya da kanal belirtmiyor; SFTP bankaya sorulmalı. Hiçbir banka gerçek dosyalarla doğrulanmadan VERIFIED olmaz.

Mevduat bankaları · 38
BankaEkstre hizmetiDurumNot
Akbank
Akbank T.A.Ş.
MT940 SFTP_PUSHMT942 SFTP_PUSH · gün içi REPORTED Banka sayfası: MT940/MT942 TXT olarak doğrulanmış e-posta, SFTP veya SWIFT ile; ayrıca XML web servis. Kaynak
DenizBank
Denizbank A.Ş.
MT940 DIRECT_APIMT942 DIRECT_API · gün içi REPORTED Banka sayfası: ekstre web servis (MT940) veya API ile; MT940 ve MT942 desteklenir. Banking'de API connector'ı henüz yok; SFTP bankaya sorulmalı. Kaynak
HSBC
HSBC Bank A.Ş.
MT940 MANUAL_UPLOAD REPORTED Banka sayfası: kurumsal internet bankacılığından hareketler MT940/942 olarak alınabilir; dosya elle yüklenebilir. Otomatik gönderim bankaya sorulmalı. Kaynak
QNB
QNB Bank A.Ş.
MT940 SFTP_PUSH REPORTED Banka sayfası: günlük MT940 e-posta, SFTP veya SWIFT ile; başvuru kurumsal internet bankacılığından. Kaynak
Yapı Kredi
Yapı ve Kredi Bankası A.Ş.
MT940 SFTP_PUSHMT942 SFTP_PUSH · gün içi REPORTED Banka sayfası: EHÖ / MT940 dosyaları gün içi ve gün sonu, SFTP ile. Kaynak
Ziraat Bankası
Türkiye Cumhuriyeti Ziraat Bankası A.Ş.
MT940 SFTP_PUSHMT942 SFTP_PUSH · gün içiMT940 DIRECT_API REPORTED Banka sayfası: MT940/MT942 e-posta, FTP, SFTP veya SWIFT ile; ayrıca web servis. Kaynak
Alternatif Bank
Alternatifbank A.Ş.
MT940 SFTP_PUSH UNKNOWN Banka sayfası: MT940 veya web servis ile muhasebe entegrasyonu. Bankanın sayfası kanal olarak SFTP belirtmiyor; SFTP ile gönderim bankaya sorulmalı. Kaynak
Anadolubank
Anadolubank A.Ş.
MT940 SFTP_PUSH UNKNOWN Banka sayfası: Luca / MT940 hesap hareketleri entegrasyonu. Bankanın sayfası kanal olarak SFTP belirtmiyor; SFTP ile gönderim bankaya sorulmalı. Kaynak
Burgan Bank
Burgan Bank A.Ş.
MT940 SFTP_PUSH UNKNOWN Banka sayfası: MT940 destekli hesap ekstresi mutabakat sistemi. Bankanın sayfası kanal olarak SFTP belirtmiyor; SFTP ile gönderim bankaya sorulmalı. Kaynak
Fibabanka
Fibabanka A.Ş.
MT940 SFTP_PUSH UNKNOWN Faaliyet raporu: kurumsal ve ticari müşterilere MT940 elektronik ekstre altyapısı. Güncel kanal bankaya sorulmalı. Kaynak
Garanti BBVA
Türkiye Garanti Bankası A.Ş.
MT940 SFTP_PUSHMT942 SFTP_PUSH · gün içi UNKNOWN Banka sayfası: MT940/MT942 (ve CSV) FTP, e-posta veya SWIFT ile; günlük/haftalık/aylık. İletişim: kurumsalcozumler@garantibbva.com.tr. Bankanın sayfası kanal olarak SFTP belirtmiyor; SFTP ile gönderim bankaya sorulmalı. Kaynak
Halkbank
Türkiye Halk Bankası A.Ş.
MT940 SFTP_PUSH UNKNOWN Banka sayfası: hareketler günlük/haftalık/aylık dosya olarak gönderilir; format ve kanal belirtilmemiş. Bankanın sayfası kanal olarak SFTP belirtmiyor; SFTP ile gönderim bankaya sorulmalı. Kaynak
ICBC Turkey
ICBC Turkey Bank A.Ş.
MT940 SFTP_PUSH UNKNOWN Banka sayfası: hareketler istenen sıklıkta SWIFT MT940 mesajı ile. Bankanın sayfası kanal olarak SFTP belirtmiyor; SFTP ile gönderim bankaya sorulmalı. Kaynak
ING
ING Bank A.Ş.
MT940 SFTP_PUSHMT942 SFTP_PUSH · gün içi UNKNOWN Banka sayfası: gün sonu MT940 her sabah, gün içi MT942 talep edilen sıklıkta, SWIFT ile. Bankanın sayfası kanal olarak SFTP belirtmiyor; SFTP ile gönderim bankaya sorulmalı. Kaynak
Odeabank
Odea Bank A.Ş.
MT940 SFTP_PUSH UNKNOWN Banka sayfası: hareketler SWIFT MT940 formatında elektronik olarak iletilir. Bankanın sayfası kanal olarak SFTP belirtmiyor; SFTP ile gönderim bankaya sorulmalı. Kaynak
TEB
Türk Ekonomi Bankası A.Ş.
MT940 SFTP_PUSHMT942 SFTP_PUSH · gün içi UNKNOWN Banka sayfası: MT940 günlük ve MT942 anlık SWIFT adresine; muhasebe entegrasyonu için elektronik dosya da verilir. Bankanın sayfası kanal olarak SFTP belirtmiyor; SFTP ile gönderim bankaya sorulmalı. Kaynak
VakıfBank
Türkiye Vakıflar Bankası T.A.O.
MT940 SFTP_PUSHMT942 SFTP_PUSH · gün içi UNKNOWN Banka sayfası: Hesap Ekstresi Mutabakat Sistemi (MT940/942), günlük/haftalık/aylık. Bankanın sayfası kanal olarak SFTP belirtmiyor; SFTP ile gönderim bankaya sorulmalı. Kaynak
İş Bankası
Türkiye İş Bankası A.Ş.
MT940 SFTP_PUSH UNKNOWN Banka sayfası: MT940 ekstre ile otomatik muhasebeleştirme. Bankanın sayfası kanal olarak SFTP belirtmiyor; SFTP ile gönderim bankaya sorulmalı. Kaynak
Şekerbank
Şekerbank T.A.Ş.
MT940 SFTP_PUSH UNKNOWN Banka sayfası: bir önceki günün hareket ve bakiyesi MT940 ile günlük/haftalık/aylık. Bankanın sayfası kanal olarak SFTP belirtmiyor; SFTP ile gönderim bankaya sorulmalı. Kaynak
A&T Bank
Arap Türk Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı.
Bank Mellat
Bank Mellat İstanbul Merkez Şubesi
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Bank of China Turkey
Bank of China Turkey A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı.
Birleşik Fon Bankası
Birleşik Fon Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Citi Türkiye
Citibank A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı.
Colendi Bank
Colendi Bank A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Deutsche Bank Türkiye
Deutsche Bank A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı.
Enpara Bank
Enpara Bank A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
FUPS Bank
FUPS Bank A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Habib Bank
Habib Bank Limited İstanbul Merkez Şubesi
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Intesa Sanpaolo
Intesa Sanpaolo S.p.A. İstanbul Merkez Şubesi
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
J.P. Morgan
JPMorgan Chase Bank N.A. İstanbul Merkez Şubesi
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
MUFG Bank Turkey
MUFG Bank Turkey A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı.
Rabobank
Rabobank A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Société Générale
Société Générale (SA) İstanbul Merkez Şubesi
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Turkish Bank
Turkish Bank A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı.
Turkland Bank
Turkland Bank A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Türk Ticaret Bankası
Türk Ticaret Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Ziraat Dinamik Banka
Ziraat Dinamik Banka A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Katılım bankaları · 11
BankaEkstre hizmetiDurumNot
Kuveyt Türk
Kuveyt Türk Katılım Bankası A.Ş.
MT940 SFTP_PUSHMT942 SFTP_PUSH · gün içi REPORTED Banka sayfası: MT940 günlük/haftalık/aylık, MT942 gün içi; e-posta, FTP/SFTP veya SWIFT ile. Kaynak
Türkiye Finans
Türkiye Finans Katılım Bankası A.Ş.
MT940 SFTP_PUSH REPORTED Banka sayfası: MT940 günlük/haftalık/aylık e-posta veya FTP ile; 2017 faaliyet raporu SFTP ve web servisi de anıyor. SFTP bankayla teyit edilmeli. Kaynak
Albaraka
Albaraka Türk Katılım Bankası A.Ş.
MT940 SFTP_PUSH UNKNOWN Banka sayfası: hareketler MT940 formatında FTP veya SWIFT ile. Bankanın sayfası kanal olarak SFTP belirtmiyor; SFTP ile gönderim bankaya sorulmalı. Kaynak
Ziraat Katılım
Ziraat Katılım Bankası A.Ş.
MT940 SFTP_PUSH UNKNOWN Banka sayfası: MT940/950 elektronik ekstre gönderimi hizmeti. Bankanın sayfası kanal olarak SFTP belirtmiyor; SFTP ile gönderim bankaya sorulmalı. Kaynak
Adil Katılım
Adil Katılım Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Dünya Katılım
Dünya Katılım Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı.
Emlak Katılım
Türkiye Emlak Katılım Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı.
Hayat Finans
Hayat Finans Katılım Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı.
T.O.M. Bank
T.O.M. Katılım Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Vakıf Katılım
Vakıf Katılım Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı.
İktisat Katılım
İktisat Katılım Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Kalkınma ve yatırım bankaları · 21
BankaEkstre hizmetiDurumNot
Aktif Bank
Aktif Yatırım Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı.
Aytemiz Yatırım Bankası
Aytemiz Yatırım Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Bank of America Yatırım Bank
Bank of America Yatırım Bank A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
BankPozitif
BankPozitif Kredi ve Kalkınma Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
D Yatırım Bankası
D Yatırım Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Destek Yatırım Bankası
Destek Yatırım Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Diler Yatırım Bankası
Diler Yatırım Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
GSD Yatırım Bankası
GSD Yatırım Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Golden Global Yatırım Bankası
Golden Global Yatırım Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı.
Hedef Yatırım Bankası
Hedef Yatırım Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Misyon Bank
Misyon Yatırım Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Nurol Yatırım Bankası
Nurol Yatırım Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Pasha Bank
Pasha Yatırım Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Q Yatırım Bankası
Q Yatırım Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Standard Chartered Yatırım Bankası
Standard Chartered Yatırım Bankası Türk A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
TKYB
Türkiye Kalkınma ve Yatırım Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı.
TSKB
Türkiye Sınai Kalkınma Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı.
Takasbank
İstanbul Takas ve Saklama Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Tera Yatırım Bankası
Tera Yatırım Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak
Türk Eximbank
Türkiye İhracat Kredi Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı.
İller Bankası
İller Bankası A.Ş.
Bilgi yok UNKNOWN Banka sayfasında kurumsal ekstre hizmeti bulunamadı; bankaya sorulmalı. Kaynak

Yanıt biçimi ve sayfalama

  • Başarılı yanıt {"data": …}, sayfalı listelerde ek olarak "next_cursor".
  • Hata yanıtı {"error": {"code", "message"}}. Kod sabittir, mesaj insan içindir; programınız koda göre karar versin.
  • Sonraki sayfa için next_cursor değerini cursor parametresiyle geri gönderin; boşsa son sayfadır.
  • Tutarlar ondalık string'dir: "1234.56", "-500.00". Kayan noktalı sayıya çevirmeyin.
  • Tarihler YYYY-MM-DD, zaman damgaları unix saniye.
  • İsteğe X-Request-Id başlığı ekleyebilirsiniz; yanıtta geri döner, loglarda ve dosya yüklemesinden doğan olayların correlationId alanında görünür.
  • Senkron başlatırken Idempotency-Key gönderirseniz aynı anahtarla tekrar deneme yeni iş açmaz, ilk işi döndürür.
$ banking GET '/v1/transactions?from=2025-11-01&limit=2'
{
  "data": [ { "id": 981, "signed_amount": "15000.00", … },
            { "id": 977, "signed_amount": "-250.50", … } ],
  "next_cursor": "MjAyNS0xMS0wNHw5Nzc"
}

$ banking GET '/v1/transactions?from=2025-11-01&limit=2&cursor=MjAyNS0xMS0wNHw5Nzc'

Tekilleştirme

Aynı hareket birden fazla dosyada görünebilir: gün içi rapor ve gün sonu ekstresi, yeniden gönderilen dosya, backfill. Banking her hareketi bir kez saklar.

  • Aynı dosya içeriği ikinci kez gelirse (SHA-256) yeniden işlenmez; duplicate: true döner.
  • Banka referansı güvenilir bankalarda kimlik referanstır; diğerlerinde tarih, tutar, yön ve açıklamadan oluşan parmak izi ile dosya içi sıra numarası kullanılır.
  • Aynı gün aynı tutarda iki hareket birleştirilmez. İkisi de yazılır; ikincisi duplicate_candidate_of ile işaretlenir.
  • Gün içi raporda PENDING gelen hareket, gün sonu ekstresinde kesinleşince aynı kayıt BOOKED olarak güncellenir.
  • occurrences, hareketin kaç ayrı ekstrede görüldüğünü gösterir.

Karantina

Bir ekstre hiçbir hesapla kesin eşleşmezse tahmin yapılmaz: ekstre karantinaya alınır, banking.statement.quarantined.v1 yayınlanır ve hareketler yazılmaz. Karar DGMOS tarafındaki kullanıcıya bırakılır.

Başvuru akışı

Bankaya entegrasyon başvurusu sürümlü bir şablonla açılır, form ve evraklar tamamlanır, operasyon ve banka adımlarından geçer. İzinli geçişler getApplication yanıtındaki allowed_next alanındadır; sunucu kuralları (eksik evrak, referanslar, bağlantı durumu) her geçişte kontrol eder.

DRAFTINTERNAL_REVIEWREADY_TO_SUBMITSUBMITTED_TO_BANKBANK_REVIEWAPPROVEDTECHNICAL_SETUPTESTINGACTIVE

Yan yollar: CUSTOMER_ACTION_REQUIRED, RETURNED_FOR_CORRECTION, SUSPENDED; bitişler: REJECTED, CANCELLED, EXPIRED. Her geçiş banking.application.state_changed.v1 yayınlar.

Olaylar

Banking değişiklikleri RabbitMQ'da banking.events topic exchange'ine yayınlar; routing key olay tipidir. Olay, değişikliğin yazıldığı aynı veritabanı işleminde kuyruğa girer, yani kaybolmaz.

  • Teslimat en az bir kezdir: aynı olay iki kez gelebilir. eventId ile tekilleştirin.
  • Olay yalnızca kimlikleri taşır; güncel veriyi API'den okuyun.
  • Alanlar geriye uyumlu şekilde eklenir; kırıcı değişiklik yeni bir .vN tipiyle gelir.
{
  "eventId": "0b9a6c1e-6f3d-4c55-9a43-1d2f6f0f6a11",
  "eventType": "…",
  "occurredAt": 1762250400,
  "customerId": 42,
  "aggregateType": "…",
  "aggregateId": 42,
  "schemaVersion": 1,
  "correlationId": "req-7f3c",
  "payload": {}
}

banking.statement.imported.v1

Bir ekstre dosyası işlendi.

fileId integer

Ekstre dosyası.

connectionId integer

Bağlantı (elle yüklemede 0).

format string

Dosya formatı; boşsa içerikten tespit edilir.

MT940MT942CAMT053CAMT052CSVXLSX
status string

Kaydın durumu.

PROCESSEDPARTIALQUARANTINED
transactionsNew integer

Eklenen yeni hareket sayısı.

transactionsSeen integer

Tekrar görülen hareket sayısı.

quarantinedStatements integer

Karantinaya alınan ekstre sayısı.

statements object[]

Dosyadaki her ekstrenin sonucu.

{
  "eventId": "0b9a6c1e-6f3d-4c55-9a43-1d2f6f0f6a11",
  "eventType": "banking.statement.imported.v1",
  "occurredAt": 1762250400,
  "customerId": 42,
  "aggregateType": "statement_file",
  "aggregateId": 42,
  "schemaVersion": 1,
  "correlationId": "req-7f3c",
  "payload": {
    "fileId": 42,
    "connectionId": 42,
    "format": "MT940",
    "status": "PROCESSED",
    "transactionsNew": 1,
    "transactionsSeen": 1,
    "quarantinedStatements": 1,
    "statements": [
      {
        "index": 1,
        "account_id": 42,
        "quarantined": "…",
        "entries": 1,
        "new": 1,
        "seen": 1,
        "balance_check": "OK"
      }
    ]
  }
}

banking.transactions.imported.v1

Bir hesaba yeni hareketler eklendi.

accountId integer

Hesap.

statementId integer

Ekstre.

fileId integer

Ekstre dosyası.

count integer

Yeni hareket sayısı.

{
  "eventId": "0b9a6c1e-6f3d-4c55-9a43-1d2f6f0f6a11",
  "eventType": "banking.transactions.imported.v1",
  "occurredAt": 1762250400,
  "customerId": 42,
  "aggregateType": "account",
  "aggregateId": 42,
  "schemaVersion": 1,
  "correlationId": "req-7f3c",
  "payload": {
    "accountId": 42,
    "statementId": 42,
    "fileId": 42,
    "count": 1
  }
}

banking.statement.quarantined.v1

Dosyadaki ekstreler bir hesapla eşleştirilemedi.

fileId integer

Ekstre dosyası.

quarantinedStatements integer

Karantinaya alınan ekstre sayısı.

{
  "eventId": "0b9a6c1e-6f3d-4c55-9a43-1d2f6f0f6a11",
  "eventType": "banking.statement.quarantined.v1",
  "occurredAt": 1762250400,
  "customerId": 42,
  "aggregateType": "statement_file",
  "aggregateId": 42,
  "schemaVersion": 1,
  "correlationId": "req-7f3c",
  "payload": {
    "fileId": 42,
    "quarantinedStatements": 1
  }
}

banking.quarantine.resolved.v1

Karantinadaki ekstre bir hesaba atandı ve içe aktarıldı.

quarantineId integer

Karantina kaydı.

fileId integer

Ekstre dosyası.

accountId integer

Hesap.

transactionsNew integer

Eklenen yeni hareket sayısı.

forced boolean

True when assigned although the account identifier in the file differed

{
  "eventId": "0b9a6c1e-6f3d-4c55-9a43-1d2f6f0f6a11",
  "eventType": "banking.quarantine.resolved.v1",
  "occurredAt": 1762250400,
  "customerId": 42,
  "aggregateType": "quarantine_item",
  "aggregateId": 42,
  "schemaVersion": 1,
  "correlationId": "req-7f3c",
  "payload": {
    "quarantineId": 42,
    "fileId": 42,
    "accountId": 42,
    "transactionsNew": 1,
    "forced": false
  }
}

banking.statement.balance_mismatch.v1

Açılış bakiyesi ile hareketler kapanış bakiyesini tutmuyor.

statementId integer

Ekstre.

accountId integer

Hesap.

difference string | null

Decimal string

{
  "eventId": "0b9a6c1e-6f3d-4c55-9a43-1d2f6f0f6a11",
  "eventType": "banking.statement.balance_mismatch.v1",
  "occurredAt": 1762250400,
  "customerId": 42,
  "aggregateType": "statement",
  "aggregateId": 42,
  "schemaVersion": 1,
  "correlationId": "req-7f3c",
  "payload": {
    "statementId": 42,
    "accountId": 42,
    "difference": "…"
  }
}

banking.sync.failed.v1

Bir senkron işi tüm denemelerden sonra vazgeçti.

jobId integer

Senkron işi.

connectionId integer

Bağlantı (elle yüklemede 0).

errorCode string

Hata kodu.

attempts integer

Yapılan deneme sayısı.

{
  "eventId": "0b9a6c1e-6f3d-4c55-9a43-1d2f6f0f6a11",
  "eventType": "banking.sync.failed.v1",
  "occurredAt": 1762250400,
  "customerId": 42,
  "aggregateType": "sync_job",
  "aggregateId": 42,
  "schemaVersion": 1,
  "correlationId": "req-7f3c",
  "payload": {
    "jobId": 42,
    "connectionId": 42,
    "errorCode": "…",
    "attempts": 1
  }
}

banking.application.state_changed.v1

Bir banka başvurusunun durumu değişti.

requestId integer

Başvuru.

from string

Başlangıç tarihi (dahil).

to string

Hedef durum.

waitingParty string

Yeni durumda sırada kim var.

CUSTOMEROPERATIONSBANK
{
  "eventId": "0b9a6c1e-6f3d-4c55-9a43-1d2f6f0f6a11",
  "eventType": "banking.application.state_changed.v1",
  "occurredAt": 1762250400,
  "customerId": 42,
  "aggregateType": "integration_request",
  "aggregateId": 42,
  "schemaVersion": 1,
  "correlationId": "req-7f3c",
  "payload": {
    "requestId": 42,
    "from": "…",
    "to": "…",
    "waitingParty": "CUSTOMER"
  }
}

Hata kodları

Programınız error.code alanına göre karar vermelidir. Aynı kod farklı mesajlarla gelebilir.

Kimlik doğrulama ve erişim

KodHTTPAnlamıNe yapmalı
missing_signature401X-Access-Key, X-Timestamp ya da X-Signature eksik.Üç başlığı da gönderin.
invalid_api_key401Anahtar bulunamadı, iptal edilmiş ya da süresi dolmuş.Geçerli bir secret anahtar kullanın.
invalid_signature401İmza tutmuyor.İmzalanan metni kontrol edin: METHOD, query dahil PATH, TIMESTAMP ve ham BODY, aralarında \n.
invalid_timestamp401Zaman damgası sunucu saatinden 5 dakikadan fazla farklı.Sunucu saatini NTP ile eşitleyin, her istekte yeni zaman damgası üretin.
secret_key_required403Public anahtarla çağrı yapıldı.Sunucu tarafında secret anahtar kullanın.
ip_not_allowed403İstek, anahtarın izinli IP listesinde olmayan bir adresten geldi.Çıkış IP'sini anahtara ekletin.
route_not_allowed403Anahtarın izinli route listesi bu yolu kapsamıyor.Anahtarın allowed_routes değerini genişletin (ör. /v1/*).
duplicate_request409Aynı imzalı istek zaten işlendi ya da şu an işleniyor.Yeni bir istek için yeni zaman damgasıyla imzalayın. Başarısız istekler aynı imzayla tekrar denenebilir.
rate_limited429Anahtarın dakikalık limiti ya da müşteri başına işlem limiti aşıldı.Retry-After başlığındaki süre kadar bekleyin.
auth_unavailable503Kimlik doğrulama altyapısına geçici olarak ulaşılamıyor.Kısa bir beklemeyle tekrar deneyin.

Genel

KodHTTPAnlamıNe yapmalı
invalid_request400 / 422Parametre ya da gövde geçersiz; mesaj hangi alan olduğunu söyler.İsteği düzeltin.
not_found404Kayıt yok ya da bu müşteriye ait değil.Kimliği kontrol edin; başka müşterinin kaydı hiçbir zaman görünmez.
conflict409Kayıt zaten var (ör. aynı hesap).Mevcut kaydı kullanın.
sync_in_progress409Bağlantı için zaten bekleyen ya da çalışan bir iş var.Mevcut işin bitmesini bekleyin.
channel_not_automated422Bu kanal için henüz otomatik bağlayıcı yok (ör. DIRECT_API, EBICS).SFTP_PULL, SFTP_PUSH ya da MANUAL_UPLOAD kullanın.
channel_unsupported422Banka bu kanalı desteklemiyor (katalogda UNSUPPORTED ya da DEPRECATED).getBank yanıtındaki kanallardan birini seçin.
test_required422Aktifleştirmeden önce son 24 saatte başarılı bağlantı testi gerekir.Önce POST …/test çağırın.
pgp_key_required422PGP çözme için önce bağlantının PGP anahtarı üretilmeli.POST …/pgp-key çağırın.
internal_error500Beklenmeyen hata.Tekrar deneyin; sürerse X-Request-Id ile bildirin.
not_ready503Servis bağımlılıklarından biri hazır değil.Kısa bir beklemeyle tekrar deneyin.

Ekstre ve karantina

KodHTTPAnlamıNe yapmalı
UNSUPPORTED_FORMAT422Dosya formatı tanınmadı.Formatı belirtin ya da bankadan desteklenen formatta dosya isteyin.
PARSE_FAILED422Dosya formatına uymuyor.Dosyayı ve profili kontrol edin.
FILE_TOO_LARGE422Dosya boyut sınırını aşıyor.Dosyayı bölün.
FILE_EMPTY422Dosya boş.Doğru dosyayı yükleyin.
PROFILE_INVALID422Seçilen profil bu dosya için geçersiz.Doğru profili seçin.
ACCOUNT_UNRESOLVEDkarantinaEkstre hiçbir hesapla kesin eşleşmedi.Hesabı resolve ile seçin ya da dismiss ile kapatın.
ACCOUNT_MISMATCHkarantinaSeçilen hesap ile dosyadaki hesap farklı.Doğruysa force ve açıklamayla atayın.
CURRENCY_MISMATCHkarantina / 422Para birimi hesapla tutmuyor; zorla atanamaz.Doğru para birimindeki hesabı seçin.
BALANCE_MISMATCHolayAçılış + hareketler ≠ kapanış; hareketler yazılır, ekstre işaretlenir.banking.statement.balance_mismatch.v1 olayını izleyin.
CONFIRMATION_REQUIRED422Farklı hesaba atama için onay gerekiyor.force: true ve açıklama gönderin.
QUARANTINE_NOT_OPEN409Karantina kaydı zaten kapatılmış.Güncel durumu okuyun.
STATEMENT_NOT_FOUND422Kaynak dosyada ilgili ekstre bulunamadı.Destek ekibine bildirin.
RAW_FILE_PURGED422Ham dosya saklama süresi dolduğu için silinmiş; yeniden işlenemez.Bankadan dosyayı tekrar alın.
NOTE_REQUIRED422İşlem için açıklama zorunlu.En az 5 karakterlik bir not gönderin.

Banka başvuruları

KodHTTPAnlamıNe yapmalı
no_template422Bu banka ve kanal için aktif başvuru şablonu yok.Banking ekibinden şablon isteyin.
invalid_transition409Bu durumdan hedef duruma geçilemez.getApplication yanıtındaki allowed_next'e bakın.
not_editable409Başvuru bu durumda düzenlenemez.Önce düzenlenebilir bir duruma taşıyın.
incomplete422Zorunlu alan ya da evrak eksik.missing listesini tamamlayın.
invalid_form422Form değeri şablona uymuyor.Mesajdaki alanı düzeltin.
invalid_document422Evrak türü, boyutu ya da geçerlilik tarihi uygun değil.Şablonun izin verdiği türde, sınır içinde ve süresi dolmamış evrak yükleyin.
unknown_requirement422Şablonda olmayan bir evrak kodu.Şablondaki kodlardan birini kullanın.
invalid_account422Hesap bu müşteriye ya da bankaya ait değil.Doğru hesabı seçin.
note_required422Bu geçiş için not zorunlu.note alanını doldurun.
submission_reference_required422SUBMITTED_TO_BANK için gönderim referansı gerekli.submission_reference gönderin.
bank_reference_required422APPROVED için banka referansı gerekli.bank_reference gönderin.
connection_required422TECHNICAL_SETUP için bağlantı gerekli.connection_id gönderin.
connection_mismatch422Bağlantı başvurunun bankası ya da kanalıyla uyuşmuyor.Doğru bağlantıyı seçin.
connection_not_ready422Başvuruya bağlı bağlantı kurulmamış.Önce bağlantıyı oluşturup başvuruya bağlayın.
connection_not_active422ACTIVE için bağlantının aktif olması gerekir.Önce bağlantıyı aktifleştirin.

Sistem

Sağlık kontrolleri, çağıranın kimliği ve bu sözleşme.

GET/healthzimzasız

Canlılık kontrolü

Yanıtlar

İstek

$ curl -sS "$BANKING_URL/healthz"

Yanıt · 200 (şemadan örnek)

{
  "data": {
    "status": "ok"
  }
}

GET/readyzimzasız

Hazırlık kontrolü (veritabanı, dosya deposu, secret deposu)

Yanıtlar

  • 200Ready · StatusData
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 503Hata: {"error": {"code", "message"}} · Error

İstek

$ curl -sS "$BANKING_URL/readyz"

Yanıt · 200 (şemadan örnek)

{
  "data": {
    "status": "ok"
  }
}

GET/openapi.yamlimzasız

Bu sözleşmeyi indir

Yanıtlar

  • 200OpenAPI document
  • 4XXHata: {"error": {"code", "message"}} · Error

İstek

$ curl -sS "$BANKING_URL/openapi.yaml"

GET/v1/me

Çağıran API anahtarını ve müşterisini döndürür

Yanıtlar

  • 200Caller
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking GET /v1/me

Yanıt · 200 (şemadan örnek)

{
  "data": {
    "customer_id": 42,
    "api_key_id": 42,
    "api_key_name": "dgmos-backend"
  }
}

Referans veriler

Banka kataloğu ve ayrıştırma profilleri.

GET/v1/banks

Banka kataloğunda ara

Parametreler

countryquery string

ISO 3166-1 alpha-2 ülke kodu.

qquery string

Ad ya da kodda arar.

cursorquery string

Önceki yanıttaki next_cursor.

limitquery integer

Sayfa boyutu.

Yanıtlar

İstek

$ banking GET /v1/banks

Yanıt · 200 (şemadan örnek)

{
  "data": [
    {
      "id": 42,
      "code": "tr-ornek-banka",
      "country": "TR",
      "legal_name": "Örnek Bankası A.Ş.",
      "display_name": "Örnek Bankası",
      "parent_group_code": "",
      "institution_type": "BANK",
      "bic": "TGBATRIS",
      "lei": "",
      "status": "ACTIVE",
      "source_url": "https://www.tcmb.gov.tr",
      "verified_at": 1762250400,
      "channels": [
        {
          "id": 42,
          "institution_id": 42,
          "channel_type": "SFTP_PULL",
          "format": "MT940",
          "auth_type": "…",
          "intraday": true,
          "availability_status": "UNKNOWN",
          "evidence_url": "",
          "evidence_note": "",
          "verified_at": 1762250400
        }
      ]
    }
  ],
  "next_cursor": "MjAyNS0xMS0wNHw0Mg"
}

GET/v1/banks/{id}

Banka ve desteklediği kanallar

Parametreler

idzorunlupath integer

Kimlik.

Yanıtlar

  • 200Bank
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking GET /v1/banks/42

Yanıt · 200 (şemadan örnek)

{
  "data": {
    "id": 42,
    "code": "tr-ornek-banka",
    "country": "TR",
    "legal_name": "Örnek Bankası A.Ş.",
    "display_name": "Örnek Bankası",
    "parent_group_code": "",
    "institution_type": "BANK",
    "bic": "TGBATRIS",
    "lei": "",
    "status": "ACTIVE",
    "source_url": "https://www.tcmb.gov.tr",
    "verified_at": 1762250400,
    "channels": [
      {
        "id": 42,
        "institution_id": 42,
        "channel_type": "SFTP_PULL",
        "format": "MT940",
        "auth_type": "…",
        "intraday": true,
        "availability_status": "UNKNOWN",
        "evidence_url": "",
        "evidence_note": "",
        "verified_at": 1762250400
      }
    ]
  }
}

GET/v1/profiles

Her kod için en güncel aktif ayrıştırma profili (ör. CSV/XLSX eşlemesi seçmek için)

Parametreler

institution_idquery integer

Banka kataloğundaki kurum.

formatquery Format

Dosya formatı; boşsa içerikten tespit edilir.

Yanıtlar

  • 200Profiles
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking GET /v1/profiles

Yanıt · 200 (şemadan örnek)

{
  "data": [
    {
      "id": 42,
      "institution_id": 42,
      "code": "tr-ornek-banka",
      "version": 1,
      "format": "MT940",
      "config": {},
      "description": "GELEN EFT ACME TİCARET A.Ş.",
      "is_active": true,
      "created_at": 1762250400
    }
  ]
}

Hesaplar

Müşterinin banka hesapları.

GET/v1/accounts

Hesapları listele

Yanıtlar

  • 200Accounts
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking GET /v1/accounts

Yanıt · 200 (şemadan örnek)

{
  "data": [
    {
      "id": 42,
      "customer_id": 42,
      "institution_id": 42,
      "iban": "TR330006100519786457841326",
      "account_number": "6457841326",
      "currency": "TRY",
      "alias": "Ana hesap",
      "ownership_status": "UNVERIFIED",
      "status": "ACTIVE",
      "created_at": 1762250400
    }
  ]
}

POST/v1/accounts

Hesap oluştur

Gövde application/json

institution_idzorunlu integer

Banka kataloğundaki kurum.

iban string

IBAN (mod-97 ile doğrulanır). iban ya da account_number zorunlu.

account_number string

Ekstrelerde göründüğü haliyle bankaya özgü hesap numarası.

currencyzorunlu string

ISO 4217 para birimi.

alias string

Görünen ad.

Yanıtlar

  • 201Created
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking POST /v1/accounts '{
  "institution_id": 42,
  "iban": "TR330006100519786457841326",
  "account_number": "6457841326",
  "currency": "TRY",
  "alias": "Ana hesap"
}'

Yanıt · 201 (şemadan örnek)

{
  "data": {
    "id": 42,
    "customer_id": 42,
    "institution_id": 42,
    "iban": "TR330006100519786457841326",
    "account_number": "6457841326",
    "currency": "TRY",
    "alias": "Ana hesap",
    "ownership_status": "UNVERIFIED",
    "status": "ACTIVE",
    "created_at": 1762250400
  }
}

GET/v1/accounts/{id}

Hesabı getir

Parametreler

idzorunlupath integer

Kimlik.

Yanıtlar

  • 200Account
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking GET /v1/accounts/42

Yanıt · 200 (şemadan örnek)

{
  "data": {
    "id": 42,
    "customer_id": 42,
    "institution_id": 42,
    "iban": "TR330006100519786457841326",
    "account_number": "6457841326",
    "currency": "TRY",
    "alias": "Ana hesap",
    "ownership_status": "UNVERIFIED",
    "status": "ACTIVE",
    "created_at": 1762250400
  }
}

Hareketler

Tekilleştirilmiş, salt-okunur banka hareketleri.

GET/v1/accounts/{id}/transactions

Bir hesabın hareketleri (en yeniden eskiye)

Parametreler

idzorunlupath integer

Kimlik.

fromquery string · date

Başlangıç tarihi (dahil).

toquery string · date

Hedef durum.

statusquery string

Kaydın durumu.

PENDINGBOOKEDUNKNOWN
directionquery string CREDITDEBIT
cursorquery string

Önceki yanıttaki next_cursor.

limitquery integer

Sayfa boyutu.

Yanıtlar

  • 200Movements · TransactionPage
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking GET /v1/accounts/42/transactions

Yanıt · 200 (şemadan örnek)

{
  "data": [
    {
      "id": 42,
      "account_id": 42,
      "booking_date": "2025-11-04",
      "value_date": "2025-11-04",
      "amount": "1234.56",
      "signed_amount": "1234.56",
      "currency": "TRY",
      "direction": "CREDIT",
      "is_reversal": false,
      "status": "PENDING",
      "description": "GELEN EFT ACME TİCARET A.Ş.",
      "bank_reference": "BNK0001",
      "customer_reference": "REF001",
      "end_to_end_id": "E2E-20251104-0001",
      "bank_tx_code": "NTRF",
      "counterparty_name": "ACME TİCARET A.Ş.",
      "counterparty_account": "TR120001000000000000000042",
      "duplicate_candidate_of": 1,
      "occurrences": 1,
      "first_seen_at": 1762250400
    }
  ],
  "next_cursor": "MjAyNS0xMS0wNHw0Mg"
}

GET/v1/transactions

Tüm hesapların hareketleri (en yeniden eskiye)

Parametreler

account_idquery integer

Hesap.

fromquery string · date

Başlangıç tarihi (dahil).

toquery string · date

Hedef durum.

statusquery string

Kaydın durumu.

PENDINGBOOKEDUNKNOWN
directionquery string CREDITDEBIT
cursorquery string

Önceki yanıttaki next_cursor.

limitquery integer

Sayfa boyutu.

Yanıtlar

  • 200Movements · TransactionPage
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking GET /v1/transactions

Yanıt · 200 (şemadan örnek)

{
  "data": [
    {
      "id": 42,
      "account_id": 42,
      "booking_date": "2025-11-04",
      "value_date": "2025-11-04",
      "amount": "1234.56",
      "signed_amount": "1234.56",
      "currency": "TRY",
      "direction": "CREDIT",
      "is_reversal": false,
      "status": "PENDING",
      "description": "GELEN EFT ACME TİCARET A.Ş.",
      "bank_reference": "BNK0001",
      "customer_reference": "REF001",
      "end_to_end_id": "E2E-20251104-0001",
      "bank_tx_code": "NTRF",
      "counterparty_name": "ACME TİCARET A.Ş.",
      "counterparty_account": "TR120001000000000000000042",
      "duplicate_candidate_of": 1,
      "occurrences": 1,
      "first_seen_at": 1762250400
    }
  ],
  "next_cursor": "MjAyNS0xMS0wNHw0Mg"
}

Bağlantılar

Banka kanalları, anahtarlar, senkron politikası ve işler.

GET/v1/connections

Bağlantıları listele

Yanıtlar

  • 200Connections
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking GET /v1/connections

Yanıt · 200 (şemadan örnek)

{
  "data": [
    {
      "id": 42,
      "customer_id": 42,
      "institution_id": 42,
      "name": "Ana hesap SFTP",
      "channel_type": "SFTP_PULL",
      "format": "MT940",
      "profile_id": 42,
      "config": {},
      "has_secret": true,
      "status": "DRAFT",
      "approval_reference": "AKB-H2H-778",
      "approved_at": 1762250400,
      "last_test_ok_at": 1762250400,
      "pgp": {
        "decrypt": false,
        "require_signature": false,
        "has_key": false,
        "public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA… banking",
        "has_bank_public_key": false
      },
      "created_at": 1762250400,
      "updated_at": 1762250400
    }
  ]
}

POST/v1/connections

Bağlantı oluştur (DRAFT olarak başlar)

config depends on the channel:

  • SFTP_PULL: host, port, username, remote_dir, pattern, host_key_sha256 (required, SHA256:...), min_file_age_seconds
  • SFTP_PUSH: authorized_keys (bank SSH public keys, required), allowed_ips, pattern, temp_suffixes
  • MANUAL_UPLOAD: {}

Channels marked UNSUPPORTED/DEPRECATED in the catalog are refused.

Gövde application/json

institution_idzorunlu integer

Banka kataloğundaki kurum.

namezorunlu string

Ad.

channel_typezorunlu ChannelType

Kanal türü.

format Format

Dosya formatı; boşsa içerikten tespit edilir.

profile_id integer

Ayrıştırma profili (CSV/XLSX için).

config object

Kanala göre değişen yapılandırma (aşağıdaki açıklamaya bakın).

Yanıtlar

  • 201Created
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking POST /v1/connections '{
  "institution_id": 42,
  "name": "Ana hesap SFTP",
  "channel_type": "SFTP_PULL",
  "format": "MT940",
  "profile_id": 42,
  "config": {}
}'

Yanıt · 201 (şemadan örnek)

{
  "data": {
    "connection": {
      "id": 42,
      "customer_id": 42,
      "institution_id": 42,
      "name": "Ana hesap SFTP",
      "channel_type": "SFTP_PULL",
      "format": "MT940",
      "profile_id": 42,
      "config": {},
      "has_secret": true,
      "status": "DRAFT",
      "approval_reference": "AKB-H2H-778",
      "approved_at": 1762250400,
      "last_test_ok_at": 1762250400,
      "pgp": {
        "decrypt": false,
        "require_signature": false,
        "has_key": false,
        "public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA… banking",
        "has_bank_public_key": false
      },
      "created_at": 1762250400,
      "updated_at": 1762250400
    },
    "capability_status": "UNKNOWN"
  }
}

GET/v1/connections/{id}

Bağlantı; politika, bağlı hesaplar, son iş ve push uç noktası bilgisiyle

Parametreler

idzorunlupath integer

Kimlik.

Yanıtlar

  • 200Connection details
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking GET /v1/connections/42

Yanıt · 200 (şemadan örnek)

{
  "data": {
    "connection": {
      "id": 42,
      "customer_id": 42,
      "institution_id": 42,
      "name": "Ana hesap SFTP",
      "channel_type": "SFTP_PULL",
      "format": "MT940",
      "profile_id": 42,
      "config": {},
      "has_secret": true,
      "status": "DRAFT",
      "approval_reference": "AKB-H2H-778",
      "approved_at": 1762250400,
      "last_test_ok_at": 1762250400,
      "pgp": {
        "decrypt": false,
        "require_signature": false,
        "has_key": false,
        "public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA… banking",
        "has_bank_public_key": false
      },
      "created_at": 1762250400,
      "updated_at": 1762250400
    },
    "sync_policy": {
      "connection_id": 42,
      "poll_interval_seconds": 3600,
      "bank_data_frequency": "…",
      "timezone": "Europe/Istanbul",
      "lookback_days": 3,
      "max_attempts": 6,
      "enabled": true,
      "last_attempt_at": 1762250400,
      "last_success_at": 1762250400,
      "last_data_at": 1762250400,
      "next_run_at": 1762250400
    },
    "accounts": [
      {
        "id": 42,
        "customer_id": 42,
        "institution_id": 42,
        "iban": "TR330006100519786457841326",
        "account_number": "6457841326",
        "currency": "TRY",
        "alias": "Ana hesap",
        "ownership_status": "UNVERIFIED",
        "status": "ACTIVE",
        "created_at": 1762250400
      }
    ],
    "last_job": {},
    "push": {
      "endpoint": "…",
      "username": "…",
      "host_key_fingerprint": "…"
    }
  }
}

POST/v1/connections/{id}/accounts

Bağlantıya hesap bağla

Parametreler

idzorunlupath integer

Kimlik.

Gövde application/json

account_idzorunlu integer

Hesap.

priority integer

Yanıtlar

  • 200Bound · FlagData
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking POST /v1/connections/42/accounts '{
  "account_id": 42,
  "priority": 1
}'

Yanıt · 200 (şemadan örnek)

{
  "data": {}
}

POST/v1/connections/{id}/ssh-key

Bağlantının SSH anahtarını üret ya da yenile; bankaya verilecek açık anahtarı döndürür

The private key is stored in the secret manager; the previous key is deleted.

Parametreler

idzorunlupath integer

Kimlik.

Yanıtlar

  • 201New key · PublicKeyData
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking POST /v1/connections/42/ssh-key

Yanıt · 201 (şemadan örnek)

{
  "data": {
    "public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA… banking",
    "fingerprint": "SHA256:3q2+7w…"
  }
}

POST/v1/connections/{id}/pgp-key

Bağlantının PGP anahtarını üret ya da yenile; bankaya verilecek açık anahtarı döndürür

Parametreler

idzorunlupath integer

Kimlik.

Yanıtlar

  • 201New key · PublicKeyData
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking POST /v1/connections/42/pgp-key

Yanıt · 201 (şemadan örnek)

{
  "data": {
    "public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA… banking",
    "fingerprint": "SHA256:3q2+7w…"
  }
}

PUT/v1/connections/{id}/pgp-settings

PGP şifre çözme ve banka imzası doğrulamasını ayarla

Parametreler

idzorunlupath integer

Kimlik.

Gövde application/json

decrypt boolean

Gelen dosyalar PGP ile çözülsün mü.

bank_public_key string

Bankanın PGP açık anahtarı (imza doğrulaması için).

require_signature boolean

Banka imzası zorunlu mu.

Yanıtlar

  • 200Settings
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking PUT /v1/connections/42/pgp-settings '{
  "decrypt": false,
  "bank_public_key": "…",
  "require_signature": false
}'

Yanıt · 200 (şemadan örnek)

{
  "data": {
    "decrypt": false,
    "require_signature": false,
    "has_key": false,
    "public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA… banking",
    "has_bank_public_key": false
  }
}

PUT/v1/connections/{id}/sync-policy

Kanalın ne sıklıkla kontrol edileceğini ayarla

Checking more often than the bank produces data does not produce newer data (a warning is returned).

Parametreler

idzorunlupath integer

Kimlik.

Gövde application/json

poll_interval_secondszorunlu integer

Kanalın kontrol aralığı (saniye).

bank_data_frequency string

Bankanın veriyi ne sıklıkla ürettiği.

UNKNOWNDAILYHOURLYINTRADAY
timezone string

Bankanın gün sınırı için saat dilimi.

lookback_days integer

Her senkronda geriye kaç gün bakılacağı.

max_attempts integer

Bir iş için en fazla deneme sayısı.

enabled boolean

Zamanlanmış senkron açık mı.

Yanıtlar

  • 200Policy
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking PUT /v1/connections/42/sync-policy '{
  "poll_interval_seconds": 3600,
  "bank_data_frequency": "UNKNOWN",
  "timezone": "Europe/Istanbul",
  "lookback_days": 3,
  "max_attempts": 6,
  "enabled": true
}'

Yanıt · 200 (şemadan örnek)

{
  "data": {
    "sync_policy": {
      "connection_id": 42,
      "poll_interval_seconds": 3600,
      "bank_data_frequency": "…",
      "timezone": "Europe/Istanbul",
      "lookback_days": 3,
      "max_attempts": 6,
      "enabled": true,
      "last_attempt_at": 1762250400,
      "last_success_at": 1762250400,
      "last_data_at": 1762250400,
      "next_run_at": 1762250400
    },
    "warning": "…"
  }
}

POST/v1/connections/{id}/test

Kanalı test et (SFTP çekmede bağlanıp listeler; push'ta yapılandırmayı doğrular)

Parametreler

idzorunlupath integer

Kimlik.

Yanıtlar

  • 200Test result (a failed test is still 200)
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking POST /v1/connections/42/test

Yanıt · 200 (şemadan örnek)

{
  "data": {
    "ok": false,
    "error_code": "CONNECTION_AUTH_FAILED",
    "message": "record not found"
  }
}

POST/v1/connections/{id}/activate

Aktifleştir (banka onay referansı, bağlı hesap ve son 24 saatte başarılı test gerekir)

Parametreler

idzorunlupath integer

Kimlik.

Gövde application/json

approval_referencezorunlu string

Bankanın onay, sözleşme ya da talep numarası.

Yanıtlar

  • 200Active · StatusData
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking POST /v1/connections/42/activate '{
  "approval_reference": "AKB-H2H-778"
}'

Yanıt · 200 (şemadan örnek)

{
  "data": {
    "status": "ok"
  }
}

POST/v1/connections/{id}/suspend

Bağlantıyı askıya al

Parametreler

idzorunlupath integer

Kimlik.

Yanıtlar

  • 200Suspended · StatusData
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking POST /v1/connections/42/suspend

Yanıt · 200 (şemadan örnek)

{
  "data": {
    "status": "ok"
  }
}

POST/v1/connections/{id}/sync

Hemen senkron kuyruğa al (yalnızca çekme kanalları)

Parametreler

idzorunlupath integer

Kimlik.

Idempotency-Keyheader string

Aynı anahtarla tekrar deneme orijinal işi döndürür.

Yanıtlar

  • 202Queued
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking POST /v1/connections/42/sync

Yanıt · 202 (şemadan örnek)

{
  "data": {
    "id": 42,
    "customer_id": 42,
    "connection_id": 42,
    "job_type": "SYNC",
    "trigger_type": "SCHEDULE",
    "params": {},
    "status": "QUEUED",
    "attempts": 1,
    "max_attempts": 6,
    "run_after": 1,
    "files_fetched": 1,
    "error_code": "",
    "error_detail": "",
    "created_at": 1762250400,
    "started_at": 1762250400,
    "finished_at": 1762250400
  }
}

POST/v1/connections/{id}/backfill

Kanalı geçmiş bir tarihten yeniden oku (düzenli imleci değiştirmez)

Parametreler

idzorunlupath integer

Kimlik.

Idempotency-Keyheader string

Aynı anahtarla tekrar deneme orijinal işi döndürür.

Gövde application/json

fromzorunlu string · date

Başlangıç tarihi (dahil).

Yanıtlar

  • 202Queued
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking POST /v1/connections/42/backfill '{
  "from": "2025-11-04"
}'

Yanıt · 202 (şemadan örnek)

{
  "data": {
    "id": 42,
    "customer_id": 42,
    "connection_id": 42,
    "job_type": "SYNC",
    "trigger_type": "SCHEDULE",
    "params": {},
    "status": "QUEUED",
    "attempts": 1,
    "max_attempts": 6,
    "run_after": 1,
    "files_fetched": 1,
    "error_code": "",
    "error_detail": "",
    "created_at": 1762250400,
    "started_at": 1762250400,
    "finished_at": 1762250400
  }
}

GET/v1/connections/{id}/sync-jobs

Bağlantının son işleri

Parametreler

idzorunlupath integer

Kimlik.

limitquery integer

Sayfa boyutu.

Yanıtlar

  • 200Jobs
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking GET /v1/connections/42/sync-jobs

Yanıt · 200 (şemadan örnek)

{
  "data": [
    {
      "id": 42,
      "customer_id": 42,
      "connection_id": 42,
      "job_type": "SYNC",
      "trigger_type": "SCHEDULE",
      "params": {},
      "status": "QUEUED",
      "attempts": 1,
      "max_attempts": 6,
      "run_after": 1,
      "files_fetched": 1,
      "error_code": "",
      "error_detail": "",
      "created_at": 1762250400,
      "started_at": 1762250400,
      "finished_at": 1762250400
    }
  ]
}

GET/v1/sync-jobs/{id}

İş durumu

Parametreler

idzorunlupath integer

Kimlik.

Yanıtlar

  • 200Job
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking GET /v1/sync-jobs/42

Yanıt · 200 (şemadan örnek)

{
  "data": {
    "id": 42,
    "customer_id": 42,
    "connection_id": 42,
    "job_type": "SYNC",
    "trigger_type": "SCHEDULE",
    "params": {},
    "status": "QUEUED",
    "attempts": 1,
    "max_attempts": 6,
    "run_after": 1,
    "files_fetched": 1,
    "error_code": "",
    "error_detail": "",
    "created_at": 1762250400,
    "started_at": 1762250400,
    "finished_at": 1762250400
  }
}

Ekstreler

Gelen dosyalar, elle yükleme ve karantina.

POST/v1/statements/import

Bir hesap için ekstre dosyası yükle

Formats: MT940, MT942, CAMT.053, CAMT.052 (auto-detected), CSV and XLSX (need profile_id). Re-uploading the same file returns 200 with duplicate: true; movements already known are counted as seen, never duplicated. Statements that do not match the account are quarantined.

Gövde multipart/form-data

filezorunlu string

Dosyanın kendisi.

account_idzorunlu integer

Hesap.

format Format

Dosya formatı; boşsa içerikten tespit edilir.

profile_id integer

Ayrıştırma profili (CSV/XLSX için).

Yanıtlar

  • 201Imported
  • 200Same file already imported
  • 422Hata: {"error": {"code", "message"}} · Error
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek · Go

data, _ := os.ReadFile("ekstre_251104.sta")
var res IngestResult
err := c.ImportStatement(ctx, 42, "ekstre_251104.sta", data, "", 0, &res)
// format boşsa içerikten tespit edilir; CSV/XLSX için profileID verin

Yanıt · 201 (şemadan örnek)

{
  "data": {
    "file_id": 42,
    "duplicate": false,
    "status": "…",
    "format": "…",
    "transactions_new": 1,
    "transactions_seen": 1,
    "quarantined_statements": 1,
    "statements": [
      {
        "index": 1,
        "account_id": 42,
        "quarantined": "…",
        "entries": 1,
        "new": 1,
        "seen": 1,
        "balance_check": "OK"
      }
    ],
    "error_code": ""
  }
}

GET/v1/statement-files

Gelen dosyalar (en yeniden eskiye)

Parametreler

cursorquery string

Önceki yanıttaki next_cursor.

limitquery integer

Sayfa boyutu.

Yanıtlar

  • 200Files
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking GET /v1/statement-files

Yanıt · 200 (şemadan örnek)

{
  "data": [
    {
      "id": 42,
      "connection_id": 42,
      "source": "SFTP",
      "source_name": "ekstre_251104.sta",
      "sha256": "b89607672f7701e79e2cf435c094d3080666057ba1f3b3f6f8ded787a3366161",
      "size_bytes": 18342,
      "format": "MT940",
      "status": "RECEIVED",
      "error_code": "",
      "error_detail": "",
      "statements_count": 1,
      "transactions_new": 1,
      "transactions_seen": 1,
      "quarantined_count": 1,
      "received_at": 1762250400,
      "processed_at": 1762250400
    }
  ],
  "next_cursor": "MjAyNS0xMS0wNHw0Mg"
}

GET/v1/statement-files/{id}

Dosya durumu

Parametreler

idzorunlupath integer

Kimlik.

Yanıtlar

  • 200File
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking GET /v1/statement-files/42

Yanıt · 200 (şemadan örnek)

{
  "data": {
    "id": 42,
    "connection_id": 42,
    "source": "SFTP",
    "source_name": "ekstre_251104.sta",
    "sha256": "b89607672f7701e79e2cf435c094d3080666057ba1f3b3f6f8ded787a3366161",
    "size_bytes": 18342,
    "format": "MT940",
    "status": "RECEIVED",
    "error_code": "",
    "error_detail": "",
    "statements_count": 1,
    "transactions_new": 1,
    "transactions_seen": 1,
    "quarantined_count": 1,
    "received_at": 1762250400,
    "processed_at": 1762250400
  }
}

GET/v1/quarantine

Karantinadaki ekstreler

Parametreler

statusquery string

Kaydın durumu.

OPENRESOLVEDDISMISSED

Yanıtlar

  • 200Items
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking GET /v1/quarantine

Yanıt · 200 (şemadan örnek)

{
  "data": [
    {
      "id": 42,
      "file_id": 42,
      "statement_index": 1,
      "reason_code": "ACCOUNT_UNRESOLVED",
      "account_identifier": "TR33•••••••••••••••••1326",
      "currency": "TRY",
      "entries_count": 1,
      "status": "OPEN",
      "created_at": 1762250400
    }
  ]
}

POST/v1/quarantine/{id}/resolve

Karantinadaki ekstreyi bir hesaba aktar

The archived file is re-parsed. A different account identifier needs force and a note; a different currency is never allowed.

Parametreler

idzorunlupath integer

Kimlik.

Gövde application/json

account_idzorunlu integer

Hesap.

force boolean

Dosyadaki hesap numarası farklı olsa da ata (açıklama zorunlu). Para birimi farkı zorlanamaz.

note string

Açıklama; audit kaydına yazılır.

Yanıtlar

  • 200Imported
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking POST /v1/quarantine/42/resolve '{
  "account_id": 42,
  "force": false,
  "note": "Bankaya iletildi"
}'

Yanıt · 200 (şemadan örnek)

{
  "data": {
    "index": 1,
    "account_id": 42,
    "quarantined": "…",
    "entries": 1,
    "new": 1,
    "seen": 1,
    "balance_check": "OK"
  }
}

POST/v1/quarantine/{id}/dismiss

Karantinadaki ekstreyi içe aktarmadan kapat

Parametreler

idzorunlupath integer

Kimlik.

Gövde application/json

notezorunlu string

Açıklama; audit kaydına yazılır.

Yanıtlar

  • 200Dismissed · StatusData
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking POST /v1/quarantine/42/dismiss '{
  "note": "Bankaya iletildi"
}'

Yanıt · 200 (şemadan örnek)

{
  "data": {
    "status": "ok"
  }
}

Banka başvuruları

Bankaya entegrasyon başvurusu: şablon, form, evrak ve durum akışı.

GET/v1/application-templates

Başvuru şablonları; institution_id ve channel_type ile en güncel aktif şablonu döndürür

Parametreler

institution_idquery integer

Banka kataloğundaki kurum.

channel_typequery ChannelType

Kanal türü.

Yanıtlar

  • 200Template(s)
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking GET /v1/application-templates

Yanıt · 200 (şemadan örnek)

{
  "data": {}
}

GET/v1/applications

Başvuruları listele

Parametreler

statequery ApplicationState

Yanıtlar

  • 200Applications
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking GET /v1/applications

Yanıt · 200 (şemadan örnek)

{
  "data": [
    {
      "id": 42,
      "customer_id": 42,
      "institution_id": 42,
      "channel_type": "SFTP_PULL",
      "template_id": 42,
      "template_version": 1,
      "template": {
        "fields": [
          {
            "code": "tr-ornek-banka",
            "label": "İmza sirküleri",
            "type": "text",
            "required": false,
            "pattern": "…",
            "options": [
              null
            ],
            "max_length": 1,
            "visible_if": {
              "field": null,
              "equals": null
            },
            "help": ""
          }
        ],
        "documents": [
          {
            "code": "tr-ornek-banka",
            "label": "İmza sirküleri",
            "required": false,
            "max_size_mb": 1,
            "allowed_types": [
              null
            ],
            "help": ""
          }
        ]
      },
      "form_data": {},
      "account_ids": [
        1
      ],
      "state": "DRAFT",
      "waiting_party": "CUSTOMER",
      "due_at": 1762250400,
      "submission_reference": "BAŞVURU-2025-118",
      "bank_reference": "BNK0001",
      "connection_id": 42,
      "created_at": 1762250400,
      "updated_at": 1762250400,
      "submitted_at": 1762250400,
      "decided_at": 1762250400
    }
  ]
}

POST/v1/applications

En güncel şablonla DRAFT başvuru aç

Gövde application/json

institution_idzorunlu integer

Banka kataloğundaki kurum.

channel_typezorunlu ChannelType

Kanal türü.

account_ids integer[]

Başvurunun kapsadığı hesaplar.

Yanıtlar

  • 201Created
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking POST /v1/applications '{
  "institution_id": 42,
  "channel_type": "SFTP_PULL",
  "account_ids": [
    1
  ]
}'

Yanıt · 201 (şemadan örnek)

{
  "data": {
    "id": 42,
    "customer_id": 42,
    "institution_id": 42,
    "channel_type": "SFTP_PULL",
    "template_id": 42,
    "template_version": 1,
    "template": {
      "fields": [
        {
          "code": "tr-ornek-banka",
          "label": "İmza sirküleri",
          "type": "text",
          "required": false,
          "pattern": "…",
          "options": [
            "…"
          ],
          "max_length": 1,
          "visible_if": {
            "field": "…",
            "equals": {}
          },
          "help": ""
        }
      ],
      "documents": [
        {
          "code": "tr-ornek-banka",
          "label": "İmza sirküleri",
          "required": false,
          "max_size_mb": 1,
          "allowed_types": [
            "application/pdf"
          ],
          "help": ""
        }
      ]
    },
    "form_data": {},
    "account_ids": [
      1
    ],
    "state": "DRAFT",
    "waiting_party": "CUSTOMER",
    "due_at": 1762250400,
    "submission_reference": "BAŞVURU-2025-118",
    "bank_reference": "BNK0001",
    "connection_id": 42,
    "created_at": 1762250400,
    "updated_at": 1762250400,
    "submitted_at": 1762250400,
    "decided_at": 1762250400
  }
}

GET/v1/applications/{id}

Başvuru; evraklar, zaman çizelgesi, eksikler ve izinli sonraki durumlarla

Parametreler

idzorunlupath integer

Kimlik.

Yanıtlar

  • 200Application
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking GET /v1/applications/42

Yanıt · 200 (şemadan örnek)

{
  "data": {
    "request": {
      "id": 42,
      "customer_id": 42,
      "institution_id": 42,
      "channel_type": "SFTP_PULL",
      "template_id": 42,
      "template_version": 1,
      "template": {
        "fields": [
          {
            "code": "tr-ornek-banka",
            "label": "İmza sirküleri",
            "type": "text",
            "required": false,
            "pattern": "…",
            "options": [
              null
            ],
            "max_length": 1,
            "visible_if": {
              "field": null,
              "equals": null
            },
            "help": ""
          }
        ],
        "documents": [
          {
            "code": "tr-ornek-banka",
            "label": "İmza sirküleri",
            "required": false,
            "max_size_mb": 1,
            "allowed_types": [
              null
            ],
            "help": ""
          }
        ]
      },
      "form_data": {},
      "account_ids": [
        1
      ],
      "state": "DRAFT",
      "waiting_party": "CUSTOMER",
      "due_at": 1762250400,
      "submission_reference": "BAŞVURU-2025-118",
      "bank_reference": "BNK0001",
      "connection_id": 42,
      "created_at": 1762250400,
      "updated_at": 1762250400,
      "submitted_at": 1762250400,
      "decided_at": 1762250400
    },
    "documents": [
      {
        "id": 42,
        "requirement_code": "imza_sirkuleri",
        "filename": "imza-sirkuleri.pdf",
        "content_type": "application/pdf",
        "size_bytes": 18342,
        "sha256": "b89607672f7701e79e2cf435c094d3080666057ba1f3b3f6f8ded787a3366161",
        "expires_at": 1762250400,
        "uploaded_at": 1762250400
      }
    ],
    "events": [
      {
        "id": 42,
        "from_state": "…",
        "to_state": "…",
        "actor": "api_key:dgmos-backend",
        "user_id": 42,
        "note": "Bankaya iletildi",
        "created_at": 1762250400
      }
    ],
    "missing": [
      "…"
    ],
    "allowed_next": [
      "DRAFT"
    ]
  }
}

PUT/v1/applications/{id}/form

Form değerlerini kaydet (kısmi taslak olur; yalnızca DRAFT, CUSTOMER_ACTION_REQUIRED, RETURNED_FOR_CORRECTION durumlarında)

Parametreler

idzorunlupath integer

Kimlik.

Gövde application/json

form_data object

Şablondaki alan kodlarına göre form değerleri.

account_ids integer[]

Başvurunun kapsadığı hesaplar.

Yanıtlar

  • 200Updated application
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking PUT /v1/applications/42/form '{
  "form_data": {},
  "account_ids": [
    1
  ]
}'

Yanıt · 200 (şemadan örnek)

{
  "data": {
    "request": {
      "id": 42,
      "customer_id": 42,
      "institution_id": 42,
      "channel_type": "SFTP_PULL",
      "template_id": 42,
      "template_version": 1,
      "template": {
        "fields": [
          {
            "code": "tr-ornek-banka",
            "label": "İmza sirküleri",
            "type": "text",
            "required": false,
            "pattern": "…",
            "options": [
              null
            ],
            "max_length": 1,
            "visible_if": {
              "field": null,
              "equals": null
            },
            "help": ""
          }
        ],
        "documents": [
          {
            "code": "tr-ornek-banka",
            "label": "İmza sirküleri",
            "required": false,
            "max_size_mb": 1,
            "allowed_types": [
              null
            ],
            "help": ""
          }
        ]
      },
      "form_data": {},
      "account_ids": [
        1
      ],
      "state": "DRAFT",
      "waiting_party": "CUSTOMER",
      "due_at": 1762250400,
      "submission_reference": "BAŞVURU-2025-118",
      "bank_reference": "BNK0001",
      "connection_id": 42,
      "created_at": 1762250400,
      "updated_at": 1762250400,
      "submitted_at": 1762250400,
      "decided_at": 1762250400
    },
    "documents": [
      {
        "id": 42,
        "requirement_code": "imza_sirkuleri",
        "filename": "imza-sirkuleri.pdf",
        "content_type": "application/pdf",
        "size_bytes": 18342,
        "sha256": "b89607672f7701e79e2cf435c094d3080666057ba1f3b3f6f8ded787a3366161",
        "expires_at": 1762250400,
        "uploaded_at": 1762250400
      }
    ],
    "events": [
      {
        "id": 42,
        "from_state": "…",
        "to_state": "…",
        "actor": "api_key:dgmos-backend",
        "user_id": 42,
        "note": "Bankaya iletildi",
        "created_at": 1762250400
      }
    ],
    "missing": [
      "…"
    ],
    "allowed_next": [
      "DRAFT"
    ]
  }
}

POST/v1/applications/{id}/documents

Gerekli evrakı yükle (PDF, PNG ya da JPEG; tür içerikten kontrol edilir)

Parametreler

idzorunlupath integer

Kimlik.

Gövde multipart/form-data

requirement_codezorunlu string

Şablondaki evrak kodu.

filezorunlu string

Dosyanın kendisi.

expires_at string · date

Geçerlilik sonu.

Yanıtlar

  • 201Stored
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek · Go

var buf bytes.Buffer
mw := multipart.NewWriter(&buf)
_ = mw.WriteField("requirement_code", "imza_sirkuleri")
fw, _ := mw.CreateFormFile("file", "imza-sirkuleri.pdf")
fw.Write(pdf)
mw.Close()
var doc ApplicationDocument
_, err := c.Do(ctx, "POST", "/v1/applications/42/documents",
	buf.Bytes(), mw.FormDataContentType(), bankingclient.Options{}, &doc)

Yanıt · 201 (şemadan örnek)

{
  "data": {
    "id": 42,
    "requirement_code": "imza_sirkuleri",
    "filename": "imza-sirkuleri.pdf",
    "content_type": "application/pdf",
    "size_bytes": 18342,
    "sha256": "b89607672f7701e79e2cf435c094d3080666057ba1f3b3f6f8ded787a3366161",
    "expires_at": 1762250400,
    "uploaded_at": 1762250400
  }
}

GET/v1/applications/{id}/documents/{docId}

Evrakı indir

Parametreler

idzorunlupath integer

Kimlik.

docIdzorunlupath integer

Yanıtlar

  • 200File
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking GET /v1/applications/42/documents/7

DELETE/v1/applications/{id}/documents/{docId}

Evrakı kaldır (yalnızca düzenlenebilir durumlarda)

Parametreler

idzorunlupath integer

Kimlik.

docIdzorunlupath integer

Yanıtlar

  • 200Deleted · FlagData
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking DELETE /v1/applications/42/documents/7

Yanıt · 200 (şemadan örnek)

{
  "data": {}
}

POST/v1/applications/{id}/transition

Başvuruyu başka bir duruma taşı

Allowed transitions are returned as allowed_next. Guards:

  • INTERNAL_REVIEW, READY_TO_SUBMIT, SUBMITTED_TO_BANK: no missing fields/documents (incomplete)
  • SUBMITTED_TO_BANK: submission_reference; APPROVED: bank_reference
  • TECHNICAL_SETUP: connection_id of the same bank and channel
  • ACTIVE: the linked connection is ACTIVE
  • CUSTOMER_ACTION_REQUIRED, RETURNED_FOR_CORRECTION, REJECTED, CANCELLED, SUSPENDED: note

Which DGMOS role may perform which transition is decided by DGMOS.

Parametreler

idzorunlupath integer

Kimlik.

Gövde application/json

tozorunlu ApplicationState

Hedef durum.

note string

Açıklama; audit kaydına yazılır.

submission_reference string

SUBMITTED_TO_BANK için zorunlu: bankaya gönderim referansı.

bank_reference string

APPROVED için zorunlu: bankanın onay referansı.

connection_id integer

TECHNICAL_SETUP için zorunlu: kurulacak bağlantı.

waiting_party string

Sırada kimin işlem yapacağı.

CUSTOMEROPERATIONSBANK
due_at string · date

Son tarih.

Yanıtlar

  • 200New state
  • 4XXHata: {"error": {"code", "message"}} · Error
  • 5XXHata: {"error": {"code", "message"}} · Error

İstek

$ banking POST /v1/applications/42/transition '{
  "to": "DRAFT",
  "note": "Bankaya iletildi",
  "submission_reference": "BAŞVURU-2025-118",
  "bank_reference": "BNK0001",
  "connection_id": 42,
  "waiting_party": "CUSTOMER",
  "due_at": "2025-11-04"
}'

Yanıt · 200 (şemadan örnek)

{
  "data": {
    "id": 42,
    "customer_id": 42,
    "institution_id": 42,
    "channel_type": "SFTP_PULL",
    "template_id": 42,
    "template_version": 1,
    "template": {
      "fields": [
        {
          "code": "tr-ornek-banka",
          "label": "İmza sirküleri",
          "type": "text",
          "required": false,
          "pattern": "…",
          "options": [
            "…"
          ],
          "max_length": 1,
          "visible_if": {
            "field": "…",
            "equals": {}
          },
          "help": ""
        }
      ],
      "documents": [
        {
          "code": "tr-ornek-banka",
          "label": "İmza sirküleri",
          "required": false,
          "max_size_mb": 1,
          "allowed_types": [
            "application/pdf"
          ],
          "help": ""
        }
      ]
    },
    "form_data": {},
    "account_ids": [
      1
    ],
    "state": "DRAFT",
    "waiting_party": "CUSTOMER",
    "due_at": 1762250400,
    "submission_reference": "BAŞVURU-2025-118",
    "bank_reference": "BNK0001",
    "connection_id": 42,
    "created_at": 1762250400,
    "updated_at": 1762250400,
    "submitted_at": 1762250400,
    "decided_at": 1762250400
  }
}

Şemalar

Error object

errorzorunlu object

Hata kodu ve mesajı.

StatusData object

data object

Yanıtın içeriği.

FlagData object

data object

Yanıtın içeriği.

PublicKeyData object

data object

Yanıtın içeriği.

Format string

MT940MT942CAMT053CAMT052CSVXLSX

ChannelType string

SFTP_PULLSFTP_PUSHDIRECT_APIOPEN_BANKINGHOST_TO_HOSTEBICSMANUAL_UPLOAD

AvailabilityStatus string

UNKNOWNREPORTEDUNDER_REVIEWVERIFIEDUNSUPPORTEDDEPRECATED

Money string

Institution object

id integer

Kimlik.

code string

Kod.

country string

ISO 3166-1 alpha-2 ülke kodu.

legal_name string
display_name string
parent_group_code string
institution_type string
bic string
lei string
status string

Kaydın durumu.

source_url string
verified_at integer
channels Capability[]

InstitutionPage object

data Institution[]

Yanıtın içeriği.

next_cursor string

Sonraki sayfa için cursor parametresine verin. Boşsa son sayfadır.

Capability object

id integer

Kimlik.

institution_id integer

Banka kataloğundaki kurum.

channel_type ChannelType

Kanal türü.

format Format

Dosya formatı; boşsa içerikten tespit edilir.

auth_type string
intraday boolean
availability_status AvailabilityStatus
evidence_url string
evidence_note string
verified_at integer

Profile object

id integer

Kimlik.

institution_id integer

Banka kataloğundaki kurum.

code string

Kod.

version integer
format Format

Dosya formatı; boşsa içerikten tespit edilir.

config object

Kanala göre değişen yapılandırma (aşağıdaki açıklamaya bakın).

description string

Açıklama.

is_active boolean
created_at integer

Oluşturulma zamanı (unix saniye).

Account object

id integer

Kimlik.

customer_id integer

Kaydın ait olduğu DGMOS müşterisi.

institution_id integer

Banka kataloğundaki kurum.

iban string

IBAN (mod-97 ile doğrulanır). iban ya da account_number zorunlu.

account_number string

Ekstrelerde göründüğü haliyle bankaya özgü hesap numarası.

currency string

ISO 4217 para birimi.

alias string

Görünen ad.

ownership_status string

Hesabın müşteriye ait olduğu banka dosyasıyla doğrulandı mı.

UNVERIFIEDVERIFIED_BY_BANK
status string

Kaydın durumu.

created_at integer

Oluşturulma zamanı (unix saniye).

Transaction object

id integer

Kimlik.

account_id integer

Hesap.

booking_date string · date

Bankanın kayıt tarihi.

value_date string · date

Valör tarihi.

amount Money

Mutlak tutar; ondalık string ("1234.56").

signed_amount Money

İşaretli tutar: alacak pozitif, borç negatif.

currency string

ISO 4217 para birimi.

direction string CREDITDEBIT
is_reversal boolean

Ters kayıt (iade/iptal) mi.

status string

Kaydın durumu.

PENDINGBOOKEDUNKNOWN
description string

Açıklama.

bank_reference string

APPROVED için zorunlu: bankanın onay referansı.

customer_reference string
end_to_end_id string
bank_tx_code string
counterparty_name string
counterparty_account string
duplicate_candidate_of integer

Looks like this movement from another file; never merged automatically

occurrences integer

Hareketin kaç ayrı ekstrede görüldüğü.

first_seen_at integer

İlk görüldüğü zaman (unix saniye).

TransactionPage object

data Transaction[]

Yanıtın içeriği.

next_cursor string

Sonraki sayfa için cursor parametresine verin. Boşsa son sayfadır.

PGPSettings object

decrypt boolean

Gelen dosyalar PGP ile çözülsün mü.

require_signature boolean

Banka imzası zorunlu mu.

has_key boolean
public_key string

Bankaya verilecek açık anahtar.

has_bank_public_key boolean

Connection object

id integer

Kimlik.

customer_id integer

Kaydın ait olduğu DGMOS müşterisi.

institution_id integer

Banka kataloğundaki kurum.

name string

Ad.

channel_type ChannelType

Kanal türü.

format Format

Dosya formatı; boşsa içerikten tespit edilir.

profile_id integer

Ayrıştırma profili (CSV/XLSX için).

config object

Kanala göre değişen yapılandırma (aşağıdaki açıklamaya bakın).

has_secret boolean

Bağlantının kimlik bilgisi secret deposunda tanımlı mı.

status string

Kaydın durumu.

DRAFTTESTINGACTIVESUSPENDEDDISABLED
approval_reference string

Bankanın onay, sözleşme ya da talep numarası.

approved_at integer
last_test_ok_at integer
pgp PGPSettings
created_at integer

Oluşturulma zamanı (unix saniye).

updated_at integer

Son güncelleme zamanı (unix saniye).

SyncPolicy object

connection_id integer

TECHNICAL_SETUP için zorunlu: kurulacak bağlantı.

poll_interval_seconds integer

Kanalın kontrol aralığı (saniye).

bank_data_frequency string

Bankanın veriyi ne sıklıkla ürettiği.

timezone string

Bankanın gün sınırı için saat dilimi.

lookback_days integer

Her senkronda geriye kaç gün bakılacağı.

max_attempts integer

Bir iş için en fazla deneme sayısı.

enabled boolean

Zamanlanmış senkron açık mı.

last_attempt_at integer
last_success_at integer
last_data_at integer

Newest movement date held (data freshness)

next_run_at integer

Job object

id integer

Kimlik.

customer_id integer

Kaydın ait olduğu DGMOS müşterisi.

connection_id integer

TECHNICAL_SETUP için zorunlu: kurulacak bağlantı.

job_type string SYNCBACKFILL
trigger_type string SCHEDULEMANUAL
params object
status string

Kaydın durumu.

QUEUEDRUNNINGSUCCEEDEDDEAD
attempts integer

Yapılan deneme sayısı.

max_attempts integer

Bir iş için en fazla deneme sayısı.

run_after integer
files_fetched integer
error_code string

Başarısızlıkta hata kodu.

error_detail string

Başarısızlık ayrıntısı.

created_at integer

Oluşturulma zamanı (unix saniye).

started_at integer
finished_at integer

StatementFile object

id integer

Kimlik.

connection_id integer

TECHNICAL_SETUP için zorunlu: kurulacak bağlantı.

source string SFTPSFTP_PUSHUPLOADAPI
source_name string
sha256 string
size_bytes integer
format Format

Dosya formatı; boşsa içerikten tespit edilir.

status string

Kaydın durumu.

RECEIVEDPROCESSEDPARTIALQUARANTINEDFAILED
error_code string

Başarısızlıkta hata kodu.

error_detail string

Başarısızlık ayrıntısı.

statements_count integer
transactions_new integer

Bu dosyayla eklenen yeni hareket sayısı.

transactions_seen integer

Daha önce kaydedilmiş, tekrar görülen hareket sayısı.

quarantined_count integer
received_at integer

Dosyanın alındığı zaman (unix saniye).

processed_at integer

Dosyanın işlendiği zaman (unix saniye).

StatementResult object

index integer
account_id integer

Hesap.

quarantined string

İçe aktarılmadıysa karantina nedeni.

entries integer
new integer
seen integer
balance_check string

Açılış + hareketler = kapanış kontrolünün sonucu.

OKMISMATCHNOT_APPLICABLE

IngestResult object

file_id integer
duplicate boolean

Aynı içerik daha önce yüklendiyse true; yeniden işlenmez.

status string

Kaydın durumu.

format string

Dosya formatı; boşsa içerikten tespit edilir.

transactions_new integer

Bu dosyayla eklenen yeni hareket sayısı.

transactions_seen integer

Daha önce kaydedilmiş, tekrar görülen hareket sayısı.

quarantined_statements integer

Karantinaya alınan ekstre sayısı.

statements StatementResult[]

Dosyadaki her ekstrenin sonucu.

error_code string

Başarısızlıkta hata kodu.

QuarantineItem object

id integer

Kimlik.

file_id integer
statement_index integer
reason_code string ACCOUNT_UNRESOLVEDACCOUNT_MISMATCHCURRENCY_MISMATCH
account_identifier string

Masked

currency string

ISO 4217 para birimi.

entries_count integer
status string

Kaydın durumu.

OPENRESOLVEDDISMISSED
created_at integer

Oluşturulma zamanı (unix saniye).

ApplicationState string

DRAFTINTERNAL_REVIEWCUSTOMER_ACTION_REQUIREDREADY_TO_SUBMITSUBMITTED_TO_BANKBANK_REVIEWAPPROVEDTECHNICAL_SETUPTESTINGACTIVERETURNED_FOR_CORRECTIONREJECTEDCANCELLEDEXPIREDSUSPENDED

ApplicationTemplate object

id integer

Kimlik.

institution_id integer

Banka kataloğundaki kurum.

channel_type ChannelType

Kanal türü.

version integer
name string

Ad.

definition TemplateDefinition
is_active boolean
created_at integer

Oluşturulma zamanı (unix saniye).

TemplateDefinition object

fields object[]
documents object[]

Application object

id integer

Kimlik.

customer_id integer

Kaydın ait olduğu DGMOS müşterisi.

institution_id integer

Banka kataloğundaki kurum.

channel_type ChannelType

Kanal türü.

template_id integer
template_version integer
template TemplateDefinition
form_data object

Şablondaki alan kodlarına göre form değerleri.

account_ids integer[]

Başvurunun kapsadığı hesaplar.

state ApplicationState
waiting_party string

Sırada kimin işlem yapacağı.

CUSTOMEROPERATIONSBANK
due_at integer

Son tarih.

submission_reference string

SUBMITTED_TO_BANK için zorunlu: bankaya gönderim referansı.

bank_reference string

APPROVED için zorunlu: bankanın onay referansı.

connection_id integer

TECHNICAL_SETUP için zorunlu: kurulacak bağlantı.

created_at integer

Oluşturulma zamanı (unix saniye).

updated_at integer

Son güncelleme zamanı (unix saniye).

submitted_at integer
decided_at integer

ApplicationDocument object

id integer

Kimlik.

requirement_code string

Şablondaki evrak kodu.

filename string
content_type string
size_bytes integer
sha256 string
expires_at integer

Geçerlilik sonu.

uploaded_at integer

ApplicationEvent object

id integer

Kimlik.

from_state string
to_state string
actor string
user_id integer
note string

Açıklama; audit kaydına yazılır.

created_at integer

Oluşturulma zamanı (unix saniye).