Frankfurter, 98 merkez bankası ve resmi kaynaktan 206 para birimi için günlük döviz kurlarını takip eder. Veriler 1948 yılına kadar uzanır.

Genel API api.frankfurter.dev adresinde çalışır ve API anahtarı gerektirmez. Proje açık kaynaklıdır; tam kontrol için kendin de barındırabilirsin.

Bir yapay zeka ajanıyla mı çalışıyorsun? Ona llms.txt dosyasını ver veya MCP sunucusunu bağla.

Döviz 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 belirli bir dönemdeki kurları al.

curl https://api.frankfurter.dev/v2/rates?from=2026-01-01&quotes=usd

İpucu: Yalnızca ihtiyacın olan para birimlerini sorgulamak yanıt boyutunu küçük tutar. Geniş tarih aralıklarında sonuçları satır satır akışla almak için NDJSON isteyebilirsin.

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 kurlar tüm kaynaklardan harmanlanır. Tek bir kaynağın kurlarını almak için providers parametresini kullan veya doğrudan o kaynağın rotalarını sorgula.

Kaynak Dağılımı

Harmanlanan her kura hangi kaynakların katkıda bulunduğunu görmek için expand=providers ekle.

curl https://api.frankfurter.dev/v2/rates?expand=providers

Her satıra katkı sağlayan kaynak kodlarını içeren bir providers dizisi eklenir. Sabit kurlu para birimlerinde bu alan bulunmaz; bu kurlar kaynak verilerinden değil kur sabitlemesinden gelir.

CSV Çıktısı

Kurlar CSV formatında da alınabilir. Yola .csv ekle veya Accept başlığını text/csv olarak ayarla.

curl https://api.frankfurter.dev/v2/rates.csv

NDJSON Çıktısı

Büyük yanıtlar için Accept başlığını application/x-ndjson yaparak NDJSON (satır sonuyla ayrılmış JSON) iste. Her satır bağımsız bir JSON nesnesidir; yanıtın tamamını belleğe almadan geniş zaman serilerini akışla okumak için uygundur.

curl https://api.frankfurter.dev/v2/rates?from=2026-01-01

Tek Kur

Tek bir para birimi çiftinin kurunu al. İsteğe bağlı olarak date veya providers ekleyebilirsin.

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

Para Birimleri

Mevcut para birimlerini ve kaynak kapsamlarını al.

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

Eski para birimlerini scope ile dahil et.

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

Tek Para Birimi

Tek bir para biriminin detayları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 detayları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ı parametreleri destekler.

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

Bu kaynaktan tek bir para birimi çiftini al.

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

date, tarih aralıkları (from ve to) veya gruplama ile 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

Ayrı bir dönüştürme endpoint'i yoktur. Kuru alıp birkaç satır kodla dönüştürebilirsin.

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ı bir JSON gövdesiyle döndürür.

{
  "message": "Could not find currency ABC"
}
400
Geçersiz parametre veya hatalı biçimlendirilmiş istek.
404
Para birimi, kur veya kaynak bulunamadı.
422
İstek anlaşıldı ancak işlenemiyor.

Self-Hosting

Frankfurter'ı Docker ile kendi sunucunda barındırabilirsin. Prodüksiyon kurulumu ve API anahtarı yapılandırması için deploy rehberine göz at.

FAQ

Frankfurter kimler içindir (ve kimler için değildir)?
SaaS faturalandırması, e-ticaret, vergi raporlaması, ERP ve muhasebe sistemleri ile 1948'e kadar uzanan geçmiş seriler üzerinden yapılan akademik araştırmalar için uygundur. Canlı alım satım (trading) veya gün içi sert dalgalanmalara maruz kalan egzotik para birimleriyle çalışan işletmeler için uygun değildir.
API ticari kullanım için ücretsiz mi?
Evet, kesinlikle. Temel verilerle ilgili ayrıntılar için her kaynağın kendi koşullarına bakabilirsin.
API'de herhangi bir çağrı veya kullanım sınırı var mı?
Kota yoktur. Kötüye kullanımı önlemek amacıyla istek sıklığı sınırlandırılır (rate limit), ancak günlük veya aylık tavanlar bulunmaz. Yüksek hacimli kullanım için yanıtları önbelleğe almayı, kendi sunucunda barındırmayı veya veri setlerini doğrudan sorgulamayı değerlendirebilirsin.
API GraphQL destekliyor mu?
Hayır. REST API yeterince basittir; GraphQL büyük bir fayda sağlamadan karmaşıklık getirir. Ayrıca API'yi hızlı tutan edge önbelleklemesini de devre dışı bırakır. Tam olarak ihtiyacın olan veriyi almak için base, quotes ve from/to gibi sorgu parametrelerini kullanabilirsin.
v1 API'si kullanımdan kaldırılıyor mu?
Hayır. v1 API'si v2 lehine deprecated edilmiştir ancak süresiz olarak çalışmaya devam edecektir. v1 dokümantasyonuna göz atabilirsin. Avrupa Merkez Bankası verileri için /v2/providers/ecb/rates endpoint'ini kullan.
API'nin gizlilik politikası nedir?
Frankfurter kişisel verileri, IP adreslerini veya sorgulanan URL'leri toplamaz ve kaydetmez. Genel erişim noktası, yalnızca toplu trafik istatistikleri sunan Cloudflare arkasında önbellekleme ve DDoS korumasıyla çalışır.
API'yi App Store veya Google Play gizlilik beyanlarında belirtmem gerekir mi?
Hayır. Sorgular anonim olduğundan ve istek günlüğü tutulmadığından, Apple ve Google Play kuralları kapsamında Toplanmayan Veri (Data Not Collected) olarak sınıflandırılır.
Nereden hata bildirebilir veya soru sorabilirim?
Hata bildirmek, yeni bir özellik istemek veya yeni bir veri kaynağı önermek için bir issue açabilirsin. Soru sormak ya da Frankfurter ile geliştirdiğin bir kütüphane veya aracı paylaşmak için Discussions alanını kullanabilirsin.
Kurlar ne kadar hassas ve doğrudur?
Mevzuata uyumluluk için, resmi gösterge kurlarını almak üzere belirli bir kaynağa göre filtreleme yapabilirsin. Genel kullanım için varsayılan harmanlanmış kurlar yeterlidir; ancak yeni veriler geldikçe son ondalık basamaklar değişebilir.
Kurlar alış, satış mı yoksa orta piyasa kuru mudur?
API orta piyasa (mid-market) kurlarını döndürür. Bir kaynak gösterge kuru yerine alış ve satış kurları yayınladığında Frankfurter her ikisini de kaydeder ve orta noktayı hesaplar.
Tüm döviz kurları günlük müdür?
Neredeyse tümü öyledir. Yalnızca 2 kaynak günlük olmayan periyotlarla yayın yapar: Birleşik Krallık Gelir ve Gümrük İdaresi HMRC (aylık) ve ABD Hazine Bakanlığı UST (üç aylık). Kurları haftalarca veya aylarca geçerli kaldığı için harmanlanmış akışa dahil edilmezler ve yalnızca bu kaynaklar doğrudan sorgulandığında görünürler.
Neden bazı eski ve yeni para birimlerinin tarihleri çakışıyor?
Bazı kaynaklar ardıl para birimlerini eski para biriminin dönemine geriye dönük olarak işler (örneğin TRL 2010'da biterken TRY 1996'da başlar). Kaynak verilerini olduğu gibi kaydederiz ve çakışmaları yalnızca harmanlama yaparken filtreleriz.
Neden Frankfurter?
Çünkü her şeyin verileriyle başladığı Avrupa Merkez Bankası'nın merkezi Frankfurt'ta.
European Central Bank and Main riverfront, Frankfurt