exchangerate.dev adalah REST API untuk kurs mata uang. Gunakan /v1/latest/{BASE} untuk kurs terkini IDR terhadap dolar, atau pilih tanggal untuk riwayatnya. Paket Free mencakup 5.000 permintaan per bulan. Semua permintaan di bawah bisa dicoba tanpa API key.
Isi respons API
Setiap endpoint mengembalikan JSON lewat HTTPS. Tabel berikut merangkum hasil tiap endpoint dan paket minimum yang mendukungnya.
| Endpoint | Hasil | Mulai paket |
|---|---|---|
/v1/latest/{BASE} | Kurs terkini untuk mata uang dasar | Free |
/v1/convert/{FROM}/{TO}/{AMT} | Konversi satu nominal | Free |
/v1/{YYYY-MM-DD}/{BASE} | Kurs pada tanggal tertentu (Free: 30 hari terakhir) | Free |
/v1/timeseries | Bar intrahari | Plus |
/v1/stream | Kurs real-time lewat WebSocket | Plus |
/v1/currencies | Semua mata uang yang didukung | Free |
Permintaan pertama Anda
Permintaan ini mengambil kurs IDR dan dua mata uang lain terhadap dolar. Kirim key lewat header Authorization: Bearer dari server Anda. Tanpa key, permintaan yang sama tetap bisa dijalankan dalam batas anonim.
curl "https://api.exchangerate.dev/v1/latest/USD?symbols=IDR,SGD,MYR" \ -H "Authorization: Bearer $EXCHANGERATE_API_KEY"const res = await fetch("https://api.exchangerate.dev/v1/latest/USD?symbols=IDR,SGD,MYR", { headers: { Authorization: `Bearer ${process.env.EXCHANGERATE_API_KEY}` },})const data = await res.json()if (data.result !== "success") throw new Error(data.code)import os, requestsres = requests.get( "https://api.exchangerate.dev/v1/latest/USD?symbols=IDR,SGD,MYR", headers={"Authorization": f"Bearer {os.environ['EXCHANGERATE_API_KEY']}"}, timeout=10,)data = res.json()if data["result"] != "success": raise RuntimeError(data["code"])Membaca respons
rates memuat kurs tiap mata uang yang diminta terhadap base. timestamp menunjukkan waktu respons dalam UTC. Untuk tiap mata uang, stale menandai kurs yang lebih lama dari semestinya. Contoh di bawah diambil pada 19 Oktober 2026, bukan kurs terkini.
{ "result": "success", "base": "USD", "source": "live", "sources": { "IDR": "live", "SGD": "live", "MYR": "live" }, "market_session": "open", "timestamp": "2026-10-19T13:22:00Z", "data_updated_at": "2026-10-19T13:06:59Z", "effective_at": { "IDR": "2026-10-19T13:06:59Z", "SGD": "2026-10-19T13:06:59Z", "MYR": "2026-10-19T13:06:59Z" }, "rates": { "IDR": 18042.36, "SGD": 1.27924, "MYR": 4.08206 }, "stale": { "IDR": false, "SGD": false, "MYR": false }, "derived_symbols": [], "notice": "Indicative rates, not for settlement."}Bandingkan paket
Semua paket mencakup kurs terkini, konversi, dan riwayat. Paket berbayar menambahkan kurs real-time, riwayat lebih panjang, bar intrahari, streaming, dan webhook. Rinciannya ada di halaman harga.
| Paket | Free | Basic | Plus | Pro |
|---|---|---|---|---|
| Harga bulanan (dolar Amerika) | $0 | $19 | $39 | $89 |
| Permintaan per bulan | 5.000 | 100.000 | 300.000 | 1.000.000 |
| Permintaan per menit | 10 | 60 | 120 | 300 |
| Kurs | Tertunda 15 menit | Real-time | Real-time | Real-time |
| Riwayat harian | 30 hari | 1 tahun | Lengkap, sejak 1999 | Lengkap, sejak 1999 |
| Bar intrahari | Tidak | Tidak | Ya | Ya |
| Streaming WebSocket | Tidak | Tidak | Ya | Ya |
| Endpoint webhook | 0 | 0 | 5 | 25 |
| Server MCP | Ya | Ya | Ya | Ya |
| Penggunaan komersial | Ya, dengan atribusi berisi tautan | Ya | Ya | Ya |
Coba tanpa API key
Endpoint data bisa diakses tanpa key dengan data paket Free. Batas per alamat IP adalah 10 permintaan per menit dan 100 per jam. Jika terlampaui, API mengembalikan 429 dengan body JSON yang menyebut batas tersebut.
Langkah berikutnya
Baca dokumentasi untuk endpoint dan parameternya, lalu dapatkan key gratis untuk memakai kuota sendiri.