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/rates

base ile baz para birimini değiştir.

curl https://api.frankfurter.dev/v2/rates?base=usd

quotes ile hedef para birimlerini filtrele.

curl https://api.frankfurter.dev/v2/rates?quotes=usd,gbp

Geçmiş kurlar

Belirli bir tarihteki kurları sorgula.

curl https://api.frankfurter.dev/v2/rates?date=1999-01-04

Zaman serisi

from ve to ile bir dönemin kurlarını al.

curl https://api.frankfurter.dev/v2/rates?from=2026-01-01&quotes=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=month

Kaynağ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.csv

NDJSON çı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-01

Tek kur

Tek bir para birimi çiftinin kurunu al. İstersen date veya providers da ekleyebilirsin.

curl https://api.frankfurter.dev/v2/rate/eur/usd

Para birimleri

Mevcut para birimlerini, hangi kaynakların kapsadığıyla birlikte al.

curl https://api.frankfurter.dev/v2/currencies

scope ile eski para birimlerini de dahil et.

curl https://api.frankfurter.dev/v2/currencies?scope=all

Tek para birimi

Tek bir para biriminin ayrıntılarını ve kaynak kapsamını al.

curl https://api.frankfurter.dev/v2/currency/eur

Kaynaklar

API'nin arkasındaki veri kaynaklarını listele.

curl https://api.frankfurter.dev/v2/providers

Tek bir kaynağın ayrıntılarını al.

curl https://api.frankfurter.dev/v2/providers/ecb

Kaynağ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/rates

Bu 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-15

Dö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, quotes ve from/to gibi 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. providers filtresiyle 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 TRL 2010'da biterken TRY 1996'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.
European Central Bank and Main riverfront, Frankfurt