Sorun veya soruların için GitHub Discussions'a yaz.

Bir SDK'ya ihtiyacın yoktur. Frankfurter standart HTTPS üzerinden düz JSON döndürür; bu yüzden halihazırda kullandığın HTTP kütüphanesi yeterlidir. API anahtarı veya hesap gerekmez.

Hızlı Başlangıç

Bir kur 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 nesnedir: {"date": "2026-07-17", "base": "USD", "quote": "EUR", "rate": 0.8739}. Geçersiz bir para birimi kodu JSON mesajıyla birlikte 422 döndürür.

Para İçin Güvenli Matematik

Kayan noktalı sayılar (float) ekranda göstermek için uygundur ancak muhasebe için yanlıştır. json.loads fonksiyonuna parse_float ileterek kurları Decimal olarak ayrıştır:

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"]

Aynı Anda Birden Fazla Hedef Kur

/v2/rates her hedef kur için bir satır içeren düz bir dizi döndürür. Bir sözlük üreteci (comprehension) ile bunu bir sözlüğe dönüştür. Tüm para birimlerini almak için quotes parametresini atla.

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

Geçmiş kurlar değişmezdir, bu yüzden onları sonsuza kadar önbelleğe alabilirsin. Güncel kurlar ise yalnızca kaynaklar yayınladıkça, bir iş gününde en fazla birkaç kez değişir; bu nedenle kısa bir TTL fazlasıyla yeterlidir. requests-cache ile önbellekleme tek satırdı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 Bir Kaynağı Sabitle

Varsayılan olarak tüm kaynakların harmanını alırsın. AB KDV'si için AMB gösterge kuru gibi bir mevzuatın kendi merkez bankasının yayınladığı kuru zorunlu kıldığı durumlarda tek bir kurumu sabitlemek için providers parametresini ekle.

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 nedenle en güncel kuru, harmanlanmış güncel kurun bir gün gerisinde kalabilir.

Bir Seriyi mi Analiz Ediyorsun?

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