İçeriğe geç
IBAN Aracı

IBAN API

Geliştiriciler için ücretsiz, limitli bir IBAN doğrulama ve banka kodu sorgulama API'si. Tüm uç noktalar JSON döner ve CORS'a açıktır; tarayıcıdan ya da sunucudan doğrudan çağırabilirsiniz. İstekler oran sınırına (rate limit) tabidir.

Sınır: API yalnızca biçimsel doğrulama yapar. Bir hesabın varlığı, sahipliği veya aktifliği hakkında bilgi döndürmez. Loglarda ham IBAN tutulmaması hedeflenir.

Canlı deneyin (Playground)

Bir uç nokta seçin, örneği düzenleyin ve isteği tarayıcınızdan gerçek API'ye gönderin:

POST /api/validate

Tek bir IBAN'ı doğrular ve zengin bir sonuç nesnesi döner.

İstek (curl)
curl -X POST https://ibanaraci.com/api/validate \
  -H "Content-Type: application/json" \
  -d '{ "iban": "TR140001005001234567890123" }'
Yanıt (JSON)
{
  "valid": true,
  "normalized": "TR140001005001234567890123",
  "formatted": "TR14 0001 0050 0123 4567 8901 23",
  "masked": "TR14 0001 •••• •••• •••• •••• 23",
  "countryCode": "TR",
  "countryName": "Türkiye",
  "expectedLength": 26,
  "actualLength": 26,
  "checkDigits": "14",
  "checksumValid": true,
  "bankCode": "00010",
  "bankName": "T.C. Ziraat Bankası A.Ş.",
  "bankShortName": "Ziraat Bankası",
  "bankType": "Mevduat Bankası",
  "bic": "TCZBTR2A",
  "reserveDigit": "0",
  "accountNumber": "5001234567890123",
  "errors": [],
  "warnings": [
    { "code": "ACCOUNT_NOT_VERIFIED",
      "message": "Bu sonuç biçimsel bir kontroldür. Hesabın aktif olduğunu veya hesap sahibini doğrulamaz." }
  ],
  "message": "IBAN biçimsel olarak geçerlidir. Hesap varlığı, sahipliği veya aktifliği doğrulanmamıştır."
}

Yanıt alanları

AlanTipAçıklama
validbooleanIBAN biçimsel olarak geçerli mi?
normalizedstringBoşluksuz, büyük harfli (elektronik) biçim.
formattedstringDörtlü gruplu (yazılı) biçim.
maskedstringGüvenli paylaşım için maskeli gösterim.
countryCodestring | nullISO ülke kodu (ör. TR).
expectedLength / actualLengthnumberBeklenen ve girilen uzunluk.
checksumValidboolean | nullMOD 97 kontrol hanesi tuttu mu?
bankCode / bankName / bicstring | nullTR IBAN'larında banka bilgisi.
errors[] / warnings[]arrayHata ve uyarı kodları + mesajları.

POST /api/bulk-validate

Bir dizi IBAN'ı toplu doğrular (en fazla 1000 adet). Muhasebe ve toplu ödeme akışları için idealdir.

İstek
curl -X POST https://ibanaraci.com/api/bulk-validate \
  -H "Content-Type: application/json" \
  -d '{ "ibans": ["TR140001005001234567890123", "DE89370400440532013000", "bozuk"] }'
Yanıt
{
  "total": 3,
  "valid": 2,
  "invalid": 1,
  "results": [
    { "input": "TR14...", "valid": true, "normalized": "TR14...", "countryCode": "TR", "bankName": "T.C. Ziraat Bankası A.Ş." },
    { "input": "DE89...", "valid": true, "normalized": "DE89...", "countryCode": "DE", "bankName": null },
    { "input": "bozuk", "valid": false, "normalized": "BOZUK", "countryCode": null, "bankName": null }
  ]
}

GET /api/bank-code/{country}/{code}

5 haneli Türkiye banka kodunu banka bilgisine çevirir.

İstek
curl https://ibanaraci.com/api/bank-code/TR/00062
Yanıt
{
  "found": true,
  "code": "00062",
  "name": "Türkiye Garanti Bankası A.Ş.",
  "shortName": "Garanti BBVA",
  "type": "Mevduat Bankası",
  "status": "active",
  "lastReviewed": "2026-07-05"
}

Kod örnekleri

JavaScript (fetch)
const res = await fetch("https://ibanaraci.com/api/validate", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ iban: "TR140001005001234567890123" }),
});
const data = await res.json();
console.log(data.valid, data.bankName); // true "T.C. Ziraat Bankası A.Ş."
Python (requests)
import requests

r = requests.post(
    "https://ibanaraci.com/api/validate",
    json={"iban": "TR140001005001234567890123"},
    timeout=10,
)
data = r.json()
print(data["valid"], data["bankName"])  # True T.C. Ziraat Bankası A.Ş.
PHP (curl)
<?php
$ch = curl_init("https://ibanaraci.com/api/validate");
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_POST => true,
  CURLOPT_HTTPHEADER => ["Content-Type: application/json"],
  CURLOPT_POSTFIELDS => json_encode(["iban" => "TR140001005001234567890123"]),
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
echo $data["valid"] ? "geçerli" : "geçersiz";

Hata kodları

Geçersiz IBAN'larda errors dizisi, ihlal edilen kuralı belirten kodlar içerir:

codeAnlamı
EMPTYIBAN boş gönderildi.
INVALID_CHARACTERSİzin verilmeyen karakter (Türkçe harf, sembol, boşluk).
MISSING_COUNTRY_CODEBaşta iki harfli ülke kodu yok.
UNSUPPORTED_COUNTRYÜlke kodu desteklenmiyor.
INVALID_LENGTHUzunluk, ülke standardına uymuyor.
INVALID_CHECK_DIGITSKontrol hanesi biçimi hatalı.
CHECKSUM_FAILEDMOD 97 doğrulaması başarısız (yazım hatası).
UNKNOWN_TR_BANK_CODETR banka kodu listede bulunamadı.

HTTP durum kodları

KodDurum
200Başarılı (IBAN geçersiz olsa bile istek başarılıdır; sonuç gövdededir).
400Hatalı istek (eksik alan ya da geçersiz JSON).
404Banka kodu bulunamadı (yalnızca /bank-code).
413Toplu istekte 1000 sınırının aşılması.
429Oran sınırı aşıldı; Retry-After başlığına bakın.

Oran sınırları

  • /api/validate: dakikada 60 istek
  • /api/bulk-validate: dakikada 20 istek
  • /api/bank-code: dakikada 120 istek

Sınır aşıldığında 429 yanıtı ve Retry-After başlığı döner. Daha yüksek limit veya kurumsal kullanım için iletişime geçebilirsiniz. Tarayıcı içi, bağımsız JavaScript örnekleri için JavaScript IBAN kodu sayfasına da bakabilirsiniz.

İlgili rehberler

İlgili araçlar