Kalau aplikasi Anda menyentuh transaksi multi-mata uang, jurnal forex, reimbursement, atau laporan keuangan, pertanyaan "pakai kurs berapa hari ini?" harus punya jawaban yang bisa dipertanggungjawabkan. Jawaban yang paling umum diterima auditor dan tax advisor di Indonesia adalah kurs transaksi dari Bank Indonesia (BI).
Masalahnya, halaman kurs BI itu HTML untuk manusia, bukan API. Scraping itu rapuh, dan data kurs yang salah bisa berarti selisih pencatatan yang harus dijelaskan nanti.
API Kurs BI dari API Indonesia menyajikan kurs resmi Bank Indonesia dalam format JSON siap pakai, lengkap dengan atribusi "Sumber: Bank Indonesia" di setiap response. Data di-cache dan diperbarui otomatis, jadi aplikasi Anda selalu punya kurs terkini tanpa polling ke BI sendiri.
Kurs BI vs Kurs ECB: Perbedaan yang Penting
API Indonesia punya dua endpoint kurs yang mirip tapi berbeda sumber dan tujuan:
| Kurs BI | Kurs ECB (Frankfurter) | |
|---|---|---|
| Sumber | Bank Indonesia (kurs transaksi) | European Central Bank |
| Cocok untuk | Laporan keuangan, jurnal forex, reimbursement, tax | Konversi tampilan (display), harga multi-currency |
| Mata uang | USD, EUR, SGD, dan lainnya | USD, EUR, SGD, GBP ke IDR |
| Atribusi | Wajib atribusi BI | Tidak wajib |
Kalau angka kurs Anda akan muncul di dokumen resmi (invoice, laporan keuangan, pengajuan reimbursement), pakai Kurs BI. Kalau hanya untuk konversi tampilan di UI, Kurs ECB lebih ringan.
Daftar Endpoint
Base URL: https://use.apiindonesia.id/api/v1/kurs-bi
| Method | Endpoint | Keterangan |
|---|---|---|
| GET | /latest?currencies= |
Kurs transaksi terbaru untuk mata uang tertentu |
| GET | /history?currency=&start=&end= |
Riwayat kurs harian satu mata uang (maks. 366 hari) |
Contoh Request dan Response
1. Kurs terbaru (real-time)
curl "https://use.apiindonesia.id/api/v1/kurs-bi/latest?currencies=USD,EUR,SGD" \
-H "x-api-key: aip_live_xxx"
Response:
{
"data": [
{ "date": "2026-07-09", "currency": "USD", "buy_rate": 18090, "sell_rate": 18095 }
],
"meta": { "attribution": "Sumber: Bank Indonesia", "source": "Bank Indonesia" }
}
Parameter currencies opsional: kalau tidak diisi, default mengembalikan kurs USD, EUR, dan SGD.
2. Riwayat kurs harian
Untuk jurnal forex dan revaluasi, Anda biasanya butuh kurs pada tanggal transaksi, bukan hari ini:
curl "https://use.apiindonesia.id/api/v1/kurs-bi/history?currency=USD&start=2026-07-01&end=2026-07-09" \
-H "x-api-key: aip_live_xxx"
Response:
{
"data": [
{ "date": "2026-07-09", "currency": "USD", "mid_rate": 18092.52 }
],
"meta": { "attribution": "Sumber: Bank Indonesia" }
}
Rentang maksimum 366 hari per request. Field mid_rate adalah kurs tengah, yang biasanya dipakai untuk revaluasi.
Contoh Integrasi: Jurnal Forex di Node.js
Pola umum: saat transaksi tercatat, ambil kurs pada tanggal transaksi, lalu simpan bersama jurnalnya supaya tidak perlu lookup ulang nanti.
const BASE = 'https://use.apiindonesia.id/api/v1/kurs-bi';
async function getRateOnDate(currency, date) {
const url = `${BASE}/history?currency=${currency}&start=${date}&end=${date}`;
const res = await fetch(url, {
headers: { 'x-api-key': process.env.API_INDONESIA_KEY },
});
if (!res.ok) {
throw new Error(`Kurs BI API error: ${res.status}`);
}
const { data } = await res.json();
return data[0] ?? null; // { date, currency, mid_rate }
}
// Saat posting jurnal
const rate = await getRateOnDate('USD', transactionDate);
journalEntry({
amount_usd: 1500,
kurs_date: rate.date,
kurs_mid: rate.mid_rate,
amount_idr: Math.round(1500 * rate.mid_rate),
});
Contoh Python untuk batch revaluasi
import os, requests
def history(currency: str, start: str, end: str):
res = requests.get(
"https://use.apiindonesia.id/api/v1/kurs-bi/history",
params={"currency": currency, "start": start, "end": end},
headers={"x-api-key": os.environ["API_INDONESIA_KEY"]},
)
res.raise_for_status()
return res.json()["data"]
rates = history("USD", "2026-07-01", "2026-07-31")
rate_by_date = {r["date"]: r["mid_rate"] for r in rates}
Catatan Teknis
- Data di-cache di sisi API Indonesia dan diperbarui otomatis via cron, jadi Anda tidak perlu polling ke BI sendiri.
- Wajib sertakan atribusi "Sumber: Bank Indonesia" jika kurs ditampilkan ke pengguna. Field
meta.attributiondi response sudah menyediakan teksnya. - Auth pakai header
x-api-key, sama seperti API Indonesia lainnya. - Untuk konversi tampilan (bukan dokumen resmi), pertimbangkan endpoint
/api/v1/kurs/latest(ECB/Frankfurter) yang mendukung pasangan USD, EUR, SGD, GBP ke IDR.
Mulai Sekarang
Dapatkan API key gratis di dashboard.apiindonesia.id/register, lihat halaman produk API Kurs BI, dan pelajari parameter lengkap di docs.apiindonesia.id.
