Frankfurter
Frankfurter, 223 para birimi için ücretsiz bir döviz kuru API'sidir. Kurlar 104 merkez bankası ve resmi kaynaktan her gün güncellenir ve 1948 yılına kadar geriye uzanır.
Herkese açık API api.frankfurter.dev adresinde çalışır ve API anahtarı istemez. Proje açık kaynak; tam kontrol istersen kendi sunucunda barındırabilirsin.
Bir yapay zeka ajanıyla mı çalışıyorsun? Ona llms.txt dosyasını ver ya da MCP sunucusunu ekle.
Kurlar
En güncel döviz kurlarını al.
curl https://api.frankfurter.dev/v2/ratesbase ile baz para birimini değiştir.
curl https://api.frankfurter.dev/v2/rates?base=usdquotes ile hedef para birimlerini filtrele.
curl https://api.frankfurter.dev/v2/rates?quotes=usd,gbpGeçmiş kurlar
Belirli bir tarihteki kurları sorgula.
curl https://api.frankfurter.dev/v2/rates?date=1999-01-04Zaman serisi
from ve to ile bir dönemin kurlarını al.
curl https://api.frankfurter.dev/v2/rates?from=2026-01-01"es=usdİpucu: Para birimlerini daraltmak yanıtları küçük tutar. Geniş tarih aralıklarında sonuçları satır satır stream etmek için NDJSON iste.
Gruplama
group ile zaman serisinin örnekleme sıklığını düşür. week ve month desteklenir.
curl https://api.frankfurter.dev/v2/rates?from=2026-01-01&group=monthKaynağa göre filtreleme
providers ile sorguyu belirli kaynaklarla sınırla.
curl https://api.frankfurter.dev/v2/rates?providers=ecb Varsayılan olarak API tüm kaynakların kurlarını harmanlar. Tek bir kaynağın kurlarını almak için providers kullan ya da kaynağı kendi endpoint'leri üzerinden doğrudan sorgula.
Kaynak bilgisi
Harmanlanmış her kura hangi kaynakların katkı verdiğini görmek için expand=providers ekle.
curl https://api.frankfurter.dev/v2/rates?expand=providers Her satıra, katkı veren kaynakların kimliklerini içeren bir providers dizisi eklenir. Sabit kurlu para birimlerinde bu alan yer almaz; bu kurlar kaynak verisinden değil, kur sabitlemesinden gelir.
CSV çıktısı
Kurları CSV olarak da alabilirsin. Path'in sonuna .csv ekle ya da Accept header'ını text/csv yap.
curl https://api.frankfurter.dev/v2/rates.csvNDJSON çıktısı
Büyük yanıtlarda Accept header'ını application/x-ndjson yaparak NDJSON (newline-delimited JSON) iste. Her satır bağımsız bir JSON nesnesidir; böylece uzun zaman serilerini yanıtın tamamını belleğe almadan stream edebilirsin.
curl https://api.frankfurter.dev/v2/rates?from=2026-01-01Tek kur
Tek bir para birimi çiftinin kurunu al. İstersen date veya providers da ekleyebilirsin.
curl https://api.frankfurter.dev/v2/rate/eur/usdPara birimleri
Mevcut para birimlerini, hangi kaynakların kapsadığıyla birlikte al.
curl https://api.frankfurter.dev/v2/currenciesscope ile eski para birimlerini de dahil et.
curl https://api.frankfurter.dev/v2/currencies?scope=allTek para birimi
Tek bir para biriminin ayrıntılarını ve kaynak kapsamını al.
curl https://api.frankfurter.dev/v2/currency/eurKaynaklar
API'nin arkasındaki veri kaynaklarını listele.
curl https://api.frankfurter.dev/v2/providersTek bir kaynağın ayrıntılarını al.
curl https://api.frankfurter.dev/v2/providers/ecbKaynağa göre kurlar
Kurları doğrudan belirli bir kaynaktan sorgula. /v2/rates ve /v2/rate ile aynı parametreler geçerlidir.
curl https://api.frankfurter.dev/v2/providers/ecb/ratesBu kaynaktan tek bir para birimi çifti al.
curl https://api.frankfurter.dev/v2/providers/ecb/rate/eur/usd date, tarih aralığı (from ve to) veya gruplamayla birlikte kullanabilirsin. .csv ve ndjson gibi formatlar burada da çalışır.
curl https://api.frankfurter.dev/v2/providers/ecb/rates?date=2024-05-15Dönüştürme
Dönüştürme için ayrı bir endpoint yok. Kuru al, birkaç satır kodla dönüştür.
function convert(base, quote, amount) {
const api = "https://api.frankfurter.dev";
return fetch(`${api}/v2/rate/${base}/${quote}`)
.then((r) => r.json())
.then((d) => (amount * d.rate).toFixed(2));
}
convert("eur", "usd", 10).then((result) =>
alert(`10 EUR = ${result} USD`)
);Hatalar
API, standart HTTP durum kodlarını JSON body ile döndürür.
{
"status": 422,
"message": "invalid currency: ABC"
}400- Geçersiz parametre veya hatalı istek.
404- Para birimi, kur veya kaynak bulunamadı.
422- İstek anlaşıldı ama işlenemiyor.
Self-hosting
Docker ile kendi sunucunda barındırabilirsin. Production kurulumu ve API anahtarı yapılandırması için deploy rehberine bak.
Sık sorulan sorular
- Frankfurter kimin için uygun (ve kimin için değil)?
- SaaS faturalama, e-ticaret, vergi raporlama, ERP ve muhasebe sistemleri ile 1948'e uzanan geçmiş serilerle yapılan akademik araştırmalarda iyi iş çıkarır. Canlı trading'e ya da gün içinde sert dalgalanan egzotik para birimleriyle çalışan işletmelere uygun değildir.
- API ticari kullanım için ücretsiz mi?
- Evet. Kurların kendisi için her sağlayıcının kullanım koşulları geçerlidir.
- API'nin çağrı limiti var mı?
- Kota yok. Kötüye kullanıma karşı rate limit var, ama aylık ya da günlük bir üst sınır yok. Yüksek hacimli kullanımda yanıtları önbelleğe almayı, kendi sunucunda barındırmayı veya veri setlerini doğrudan sorgulamayı düşünebilirsin.
- API GraphQL destekliyor mu?
- Hayır. REST API yeterince basit; GraphQL pek fayda sağlamadan karmaşıklık katar. Üstelik API'yi hızlı tutan edge caching'i de bozar. Tam ihtiyacın olan veriyi almak için
base,quotesvefrom/togibi query parametrelerini kullan. - v1 API'si kapatılıyor mu?
- Hayır. v1 API'si v2 lehine deprecated durumda, ama süresiz olarak çalışmaya devam edecek. Ayrıntılar için v1 dokümantasyonuna bak. Avrupa Merkez Bankası verileri için /v2/providers/ecb/rates endpoint'ini kullan.
- API'nin gizlilik politikası nedir?
- API kişisel verileri, IP adreslerini veya istek URL'lerini toplamaz ve kaydetmez. Herkese açık sunucu, önbellekleme ve DDoS koruması için Cloudflare arkasında çalışır; Cloudflare da yalnızca toplu trafik istatistikleri verir.
- API'yi App Store veya Google Play gizlilik etiketlerinde belirtmem gerekir mi?
- Hayır. Sorgular anonim olduğu ve istek logu tutulmadığı için istekler, Apple ve Google Play yönergelerinde "Data Not Collected" (Veri Toplanmıyor) kapsamına girer.
- Hata bildirmek veya soru sormak için nereye yazabilirim?
- Hata bildirmek, özellik istemek ya da yeni bir veri kaynağı önermek için bir issue aç. Soru sormak veya Frankfurter ile geliştirdiğin bir kütüphaneyi ya da aracı paylaşmak için Discussions bölümünü kullan.
- Kurlar ne kadar doğru?
- Mevzuat uyumu gerekiyorsa resmi referans kurlarını almak için tek bir kaynağa göre filtrele. Genel kullanımda varsayılan harmanlanmış kurlar iş görür; yalnız yeni veri geldikçe son ondalık basamaklar değişebilir.
- Kurlar alış mı, satış mı, orta kur mu?
- API orta piyasa (mid-market) kurlarını döndürür. Bir kaynak referans kur yerine alış ve satış kotasyonu yayımlıyorsa Frankfurter ikisini de kaydeder ve orta noktayı hesaplar.
- Tüm kurlar günlük mü?
- Neredeyse hepsi. Bazı kaynaklar haftalık, aylık veya üç aylık gözlemler sağlar. Bu kaynaklar harmanlanmış akışa dahil edilmez.
providersfiltresiyle doğrudan sorgulayabilirsin. - Neden bazı eski ve yeni para birimlerinin tarihleri çakışıyor?
- Bazı kaynaklar yeni para birimini geriye dönük olarak eskisinin dönemine de işler (örneğin
TRL2010'da biterkenTRY1996'da başlar). Kaynak verisini olduğu gibi kaydediyoruz; çakışmaları yalnızca harmanlarken ayıklıyoruz. - Neden Frankfurter?
- Çünkü ilk veri kaynağımız olan Avrupa Merkez Bankası Frankfurt'ta.