Python
Anda tidak memerlukan SDK. Frankfurter adalah layanan HTTPS biasa yang mengembalikan JSON datar, sehingga pustaka HTTP yang sudah Anda gunakan sudah cukup. Tanpa kunci API, tanpa akun.
Mulai Cepat
Ambil kurs lalu konversi:
import requests
res = requests.get("https://api.frankfurter.dev/v2/rate/usd/eur")
data = res.json()
total = 100 * data["rate"] Responsnya berupa satu objek datar: {"date": "2026-07-17", "base": "USD", "quote": "EUR", "rate": 0.8739}. Kode mata uang yang tidak valid mengembalikan status 422 beserta pesan JSON.
Perhitungan Finansial yang Presisi
Tipe float cukup untuk tampilan, tetapi tidak tepat untuk akuntansi. Parsing kurs sebagai Decimal dengan meneruskan parse_float ke json.loads:
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"]Beberapa Mata Uang Sekaligus
/v2/rates mengembalikan array datar, satu baris per mata uang tujuan. Ubah menjadi dictionary pencarian dengan comprehension. Hapus quotes untuk mengambil seluruh mata uang.
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()}Cache Data yang Tidak Berubah
Kurs historis dari penyedia yang dikunci tidak akan berubah, jadi simpan di cache selama yang Anda inginkan. Kurs gabungan dapat bergeser saat data baru masuk, dan kurs terbaru berubah saat penyedia menerbitkan pembaruan, paling banyak beberapa kali dalam satu hari kerja, jadi berikan TTL singkat. Dengan requests-cache, caching cukup satu baris:
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
Pada aplikasi web async, gunakan httpx:
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"]Kunci Penyedia Resmi
Secara default Anda mendapatkan kurs gabungan dari seluruh penyedia. Tambahkan providers untuk mengunci satu otoritas resmi, yang penting saat suatu yurisdiksi mewajibkan kurs resmi terbitan bank sentralnya, seperti kurs referensi ECB untuk PPN Uni Eropa.
res = requests.get(
"https://api.frankfurter.dev/v2/rate/usd/eur",
params={"providers": "ecb"},
)
data = res.json()Jelajahi semua penyedia. Penyedia yang dikunci mengikuti jadwal penerbitannya sendiri, sehingga kurs terbarunya bisa tertinggal satu hari dibanding kurs gabungan terbaru.
Menganalisis Deret Waktu?
Untuk rentang tanggal, pengelompokan bulanan, dan grafik, endpoint CSV dapat dimuat langsung ke dalam DataFrame. Lihat pandas.