Soru ya da sorun varsa GitHub Discussions'a yaz.

SDK'ya gerek yok. Frankfurter, düz JSON döndüren sade bir HTTPS API'si; zaten kullandığın HTTP kütüphanesi yeterli. API anahtarı yok, hesap yok.

Hızlı başlangıç

Kuru al ve dönüştür:

import requests

res = requests.get("https://api.frankfurter.dev/v2/rate/usd/eur")
data = res.json()
total = 100 * data["rate"]

Yanıt tek bir düz nesne: {"date": "2026-07-17", "base": "USD", "quote": "EUR", "rate": 0.8739}. Geçersiz bir para birimi kodu, JSON mesajıyla birlikte 422 döner.

Para için güvenli hesaplama

Float'lar ekranda göstermek için yeterli, muhasebe için yanlış. parse_float parametresini json.loads fonksiyonuna geçirerek kurları Decimal olarak parse et:

from decimal import Decimal

import requests

res = requests.get("https://api.frankfurter.dev/v2/rate/usd/eur")
data = res.json(parse_float=Decimal)
total = Decimal("100") * data["rate"]

Tek seferde birden fazla kur

/v2/rates, her hedef para birimi için bir satır içeren düz bir dizi döndürür. Bir dict comprehension ile bunu lookup sözlüğüne çevir. Tüm para birimleri için quotes parametresini hiç gönderme.

res = requests.get(
    "https://api.frankfurter.dev/v2/rates",
    params={"base": "usd", "quotes": "eur,gbp,jpy"},
)
rates = {row["quote"]: row["rate"] for row in res.json()}

Değişmeyeni önbelleğe al

Sabitlediğin sağlayıcının geçmiş kurları değişmez, bu yüzden onları süresiz önbelleğe alabilirsin. Harmanlanmış kurlar yeni veri geldikçe kayabilir, güncel kurlar da sağlayıcılar yayımladıkça, bir iş gününde en fazla birkaç kez değişir. Bunlar için kısa bir TTL yeter. requests-cache ile önbellekleme tek satır:

import requests_cache

session = requests_cache.CachedSession("frankfurter", expire_after=3600)
res = session.get("https://api.frankfurter.dev/v2/rate/usd/eur")
data = res.json()

Async

Asenkron bir web uygulamasında httpx kullan:

import httpx

API = "https://api.frankfurter.dev"


async def rate(base, quote):
    async with httpx.AsyncClient(base_url=API) as client:
        res = await client.get(f"/v2/rate/{base}/{quote}")
        res.raise_for_status()
        return res.json()["rate"]

Resmi kaynak sabitleme

Varsayılan olarak tüm kaynakların harmanını alırsın. Tek bir kurumu sabitlemek için providers ekle. Mevzuat, merkez bankasının yayımladığı kuru şart koşuyorsa bu önemli; AB KDV'si için ECB referans kuru buna bir örnek.

res = requests.get(
    "https://api.frankfurter.dev/v2/rate/usd/eur",
    params={"providers": "ecb"},
)
data = res.json()

Tüm kaynaklara göz at. Sabitlenen bir kaynak kendi yayın takvimini izler; bu yüzden en güncel kuru, harmanlanmış güncel kurun bir gün gerisinde kalabilir.

Seri mi analiz ediyorsun?

Tarih aralıkları, aylık gruplama ve grafikler için CSV endpoint'i doğrudan DataFrame'e yüklenir. pandas sayfasına bak.