/v1/latest/USD kur, kaynak ve gözlem zamanını içeren JSON döndürür. Para tutarlarında Decimal kullanın.
Önemli noktalar
urllib ek bağımlılık istemez.
requests kimlik doğrulama, timeout ve hataları kolaylaştırır.
forex-python geçiş sırasında ara bir arayüz olabilir.
source, effective_at ve data_updated_at alanlarını kurla birlikte saklayın.
Geçmiş için tarihli endpoint veya /v1/range kullanın.
İlk istek
İlk istek için standart kütüphane yeterlidir. Para hesabında JSON sayılarını Decimal olarak okuyun.
Anahtarlı requests
Serviste timeout ayarlayın, anahtarı ortam değişkeninden okuyun ve kaydetmeden önce HTTP durumunu kontrol edin.
forex-python’dan geçiş
forex-python kendi sağlayıcısını kullanır ve exchangerate.dev’e otomatik bağlanmaz. Geçiş sırasında tanıdık arayüzü koruyabilirsiniz; ancak exchangerate.dev’in source ve gözlem zamanını kaybetmeyin.
Geçmiş veriyi doğru ele alın
Tarihli istek, o gün yeni veri yayımlanmadıysa taşınmış bir değer döndürebilir. /v1/range saklanan gözlemleri döndürür ve JSON’u 366 satırlık sayfalara böler.
Sık sorulanlar
python · standard librarycopy
import json
from decimal import Decimal
import urllib.request
url = "https://api.exchangerate.dev/v1/latest/USD?symbols=EUR,GBP"
with urllib.request.urlopen(url, timeout=10) as response:
data = json.load(response, parse_float=Decimal)
print(data["rates"]["EUR"])
print(data["sources"]["EUR"], data["effective_at"]["EUR"])
print(data["market_session"])
python · requestscopy
# Install first: python -m pip install requests
import os
from decimal import Decimal
import requests
response = requests.get(
"https://api.exchangerate.dev/v1/latest/USD",
headers={"Authorization": f"Bearer {os.environ['EXCHANGERATE_API_KEY']}"},
timeout=10,
allow_redirects=False,
)
if response.status_code == 429:
raise RuntimeError(f"Rate limited; Retry-After: {response.headers.get('Retry-After')}")
if 300 <= response.status_code < 400:
raise RuntimeError("Unexpected redirect")
response.raise_for_status()
data = response.json(parse_float=Decimal)
print(data["rates"]["GBP"], data["effective_at"]["GBP"])
python · convert 100 USD to EURcopy
import os
from decimal import Decimal
import requests
response = requests.get(
"https://api.exchangerate.dev/v1/convert/USD/EUR/100",
headers={"Authorization": f"Bearer {os.environ['EXCHANGERATE_API_KEY']}"},
timeout=10,
allow_redirects=False,
)
if not 200 <= response.status_code < 300:
raise RuntimeError(f"HTTP {response.status_code}; Retry-After: {response.headers.get('Retry-After')}")
data = response.json(parse_float=Decimal)
print(data["rate"], data["converted"])
python · rate on a past datecopy
import os
from decimal import Decimal
import requests
response = requests.get(
"https://api.exchangerate.dev/v1/2026-03-14/USD?symbols=JPY",
headers={"Authorization": f"Bearer {os.environ['EXCHANGERATE_API_KEY']}"},
timeout=10,
allow_redirects=False,
)
if not 200 <= response.status_code < 300:
raise RuntimeError(f"HTTP {response.status_code}; Retry-After: {response.headers.get('Retry-After')}")
data = response.json(parse_float=Decimal)
print(data["rates"]["JPY"], data["is_forward_filled"])