← Blog
Artikel

API Kurs Bank Indonesia Real-time via REST API

Ambil kurs resmi Bank Indonesia real-time lewat REST API: kurs terbaru USD/EUR/SGD dan riwayat harian hingga 366 hari. Sumber BI, atribusi otomatis.

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.attribution di 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.

Mulai Sekarang

Mulai Integrasi
Hari Ini

Daftar gratis, ambil API key, dan langsung call endpoint pertama Anda — tanpa kartu kredit, tanpa proses approval yang ribet.

Visualisasi gelombang titik