Ringkasan
Lume Exchange Rates menyatukan perbandingan, konversi dan riwayat untuk perjalanan, harga internasional dan produk.
Sumber terkonfigurasi adalah Penyedia kurs eksternal. Respons mencantumkan sumber dan waktu publikasi. Mata uang tersedia mengikuti data nyata.
Mulai cepat
Baca daftar mata uang, lalu pilih anchor dan targets. Nama kolom dan kode sama di semua bahasa.
curl --request GET 'https://lumeexchangerates.com/v1/quotes?anchor=USD&targets=EUR,JPY'const response = await fetch('/v1/quotes?anchor=USD&targets=EUR,JPY', {
credentials: 'same-origin'
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const { meta, anchor, data } = await response.json();
console.log(anchor, meta.as_of, data);Contoh browser memakai asal yang sama. Situs privat memerlukan izin; URL tidak melewati proses masuk.
Akses dan autentikasi
Akses mengikuti izin situs dan sesi browser. Kunci API pelanggan, autentikasi Bearer pelanggan dan API publik lintas asal belum tersedia. Simpan App ID penyedia di server.
| Parameter | Tipe | Deskripsi |
|---|---|---|
| Base URL | URL | https://lumeexchangerates.com |
| Content-Type | header | application/json |
| Customer API key | — | Pratinjau terkelola ini menggunakan sesi browser yang sudah masuk. Kunci API per pelanggan belum diterbitkan. |
| Provider App ID | server secret | OPEN_EXCHANGE_RATES_APP_ID |
| CORS | same-origin | Header izin lintas asal belum disediakan. |
Authorization: Token hanya untuk server ke Penyedia kurs eksternal, bukan autentikasi pelanggan. Periksa HTTP dan Content-Type: penolakan akses bisa berupa HTML atau pengalihan.
Endpoint
| Method | Path | Deskripsi |
|---|---|---|
| GET | /v1/currencies | Semua simbol dengan kurs terkini dan nama dari penyedia. Termasuk mata uang alternatif dan logam yang tersedia. |
| GET | /v1/quotes | Simbol mata uang dasar; default USD. Semua simbol penyedia yang tersedia saat ini diterima. |
| GET | /v1/exchange | Jumlah numerik tidak negatif yang akan dikonversi. |
| GET | /v1/history | Gunakan /v1/history untuk tanggal tertentu dan /v1/series untuk rentang tanggal. |
| GET | /v1/series | Gunakan /v1/history untuk tanggal tertentu dan /v1/series untuk rentang tanggal. |
| GET | /v1/candles | OHLC |
| GET | /v1/capabilities | Ketersediaan |
| GET | /api/rates/latest | Kurs terakhir diterbitkan |
| GET | /api/currencies | Mata uang |
| GET | /api/rates/history | Grafik |
| GET | /api/rates/previous | Hari UTC sebelumnya |
| POST | /api/convert | Konverter |
/v1 adalah API kueri ringkas; /api menyediakan kurs, riwayat dan konversi situs. Default dan format respons berbeda.
GET /v1/currencies
Semua simbol dengan kurs terkini dan nama dari penyedia. Termasuk mata uang alternatif dan logam yang tersedia.
Parameter: —
curl --request GET 'https://lumeexchangerates.com/v1/currencies'Nilai dan tanggal adalah contoh, bukan kurs terkini. Daftar dapat diringkas; gunakan uji API untuk data nyata.
{
"meta": {
"mode": "provider",
"source": "Penyedia kurs eksternal",
"source_url": "https://openexchangerates.org/",
"as_of": "2026-01-01T00:00:00.000Z",
"fetched_at": "2026-01-01T00:00:05.000Z",
"currency_count": 3,
"includes_alternative": true,
"refresh_interval_seconds": 300,
"provider_plan": "Unlimited",
"notice": "Illustrative response; not live rates."
},
"data": [
{
"code": "USD",
"name": "United States Dollar"
},
{
"code": "EUR",
"name": "Euro"
},
{
"code": "JPY",
"name": "Japanese Yen"
}
]
}| Parameter | Tipe | Deskripsi |
|---|---|---|
| data[].code | string | Kode huruf besar; aset alternatif bisa lebih dari tiga karakter atau mengandung garis bawah. |
| data[].name | string | Nama dari penyedia, atau kode bila nama tidak tersedia. |
GET /v1/quotes
Simbol mata uang dasar; default USD. Semua simbol penyedia yang tersedia saat ini diterima.
| Parameter | Tipe | Wajib | Default | Deskripsi |
|---|---|---|---|---|
| anchor | string | Opsional | USD | Simbol mata uang dasar; default USD. Semua simbol penyedia yang tersedia saat ini diterima. |
| targets | string | Opsional | semua | Simbol tujuan dipisahkan koma. Kosongkan untuk mengembalikan semua simbol yang tersedia. |
curl --request GET 'https://lumeexchangerates.com/v1/quotes?anchor=USD&targets=EUR,JPY'Nilai dan tanggal adalah contoh, bukan kurs terkini. Daftar dapat diringkas; gunakan uji API untuk data nyata.
{
"meta": {
"mode": "provider",
"source": "Penyedia kurs eksternal",
"source_url": "https://openexchangerates.org/",
"as_of": "2026-01-01T00:00:00.000Z",
"fetched_at": "2026-01-01T00:00:05.000Z",
"currency_count": 3,
"includes_alternative": true,
"refresh_interval_seconds": 300,
"provider_plan": "Unlimited",
"notice": "Illustrative response; not live rates."
},
"anchor": "USD",
"data": [
{
"currency": "EUR",
"value": 0.9
},
{
"currency": "JPY",
"value": 150
}
]
}/v1/quotes?anchor=EUR&targets=USD,JPY memberi unit tujuan per satu unit dasar. Duplikat dibuang; kode kosong, huruf kecil atau tidak tersedia mengembalikan 400.
| Parameter | Tipe | Deskripsi |
|---|---|---|
| anchor | string | Simbol mata uang dasar; default USD. Semua simbol penyedia yang tersedia saat ini diterima. |
| data[].currency | string | Ke |
| data[].value | number | rates[currency] / rates[anchor] |
GET /v1/exchange
Jumlah numerik tidak negatif yang akan dikonversi.
| Parameter | Tipe | Wajib | Default | Deskripsi |
|---|---|---|---|---|
| from | string | Opsional | USD | Simbol mata uang sumber; default USD. |
| to | string | Opsional | KRW | Simbol mata uang tujuan; default KRW. |
| quantity | number | Opsional | 1 | Jumlah numerik tidak negatif yang akan dikonversi. |
curl --request GET 'https://lumeexchangerates.com/v1/exchange?from=USD&to=EUR&quantity=100'Nilai dan tanggal adalah contoh, bukan kurs terkini. Daftar dapat diringkas; gunakan uji API untuk data nyata.
{
"meta": {
"mode": "provider",
"source": "Penyedia kurs eksternal",
"source_url": "https://openexchangerates.org/",
"as_of": "2026-01-01T00:00:00.000Z",
"fetched_at": "2026-01-01T00:00:05.000Z",
"currency_count": 3,
"includes_alternative": true,
"refresh_interval_seconds": 300,
"provider_plan": "Unlimited",
"notice": "Illustrative response; not live rates."
},
"data": {
"from": "USD",
"to": "EUR",
"quantity": 100,
"rate": 0.9,
"result": 90
}
}/v1/exchange?from=USD&to=EUR&quantity=100. Selalu tentukan from dan to; rute GET lama ini memakai KRW sebagai default. Nilai kosong, negatif, NaN, tak terhingga dan luapan hasil mengembalikan 400.
| Parameter | Tipe | Deskripsi |
|---|---|---|
| data.rate | number | rates[to] / rates[from] |
| data.result | number | quantity × rate |
GET /api/rates/latest
Kurs terakhir diterbitkan
Parameter: —
curl --request GET 'https://lumeexchangerates.com/api/rates/latest'Nilai dan tanggal adalah contoh, bukan kurs terkini. Daftar dapat diringkas; gunakan uji API untuk data nyata.
{
"meta": {
"provider": "Penyedia kurs eksternal",
"kind": "latest_published",
"provider_timestamp": 1767225600,
"published_at": "2026-01-01T00:00:00.000Z",
"expected_interval_seconds": 300,
"lag_seconds": 5,
"stale": false,
"timezone": "Asia/Seoul",
"fetched_at": "2026-01-01T00:00:05.000Z",
"persistent_storage": false
},
"data": {
"base": "USD",
"rates": {
"USD": 1,
"EUR": 0.9,
"JPY": 150
}
}
}| Parameter | Tipe | Deskripsi |
|---|---|---|
| data.base | string | USD |
| data.rates | object | Kurs relatif terhadap USD; periksa kode dalam respons terbaru. |
| meta.provider_timestamp | integer | UTC · UNIX seconds |
| meta.published_at | string | ISO 8601 · UTC |
| meta.fetched_at | string | Waktu pengambilan server, berbeda dari publikasi penyedia. |
| meta.expected_interval_seconds | integer | seconds |
| meta.stale | boolean | true jika usia melebihi max(3 × interval yang diharapkan, 900 detik). |
| meta.lag_seconds | integer | Detik sejak publikasi penyedia. |
| meta.persistent_storage | boolean | Apakah layanan pengumpulan persisten telah terhubung. |
| meta.kind | string | latest_published | utc_daily |
GET /api/currencies
Mata uang
| Parameter | Tipe | Wajib | Default | Deskripsi |
|---|---|---|---|---|
| lang | string | Opsional | en | en / ko / ja / zh / es / hi / bn / de / fr / nl / pt / it / ru / vi / th / ar / id / ur |
curl --request GET 'https://lumeexchangerates.com/api/currencies?lang=en'Nilai dan tanggal adalah contoh, bukan kurs terkini. Daftar dapat diringkas; gunakan uji API untuk data nyata.
{
"meta": {
"provider": "Penyedia kurs eksternal",
"kind": "latest_published",
"provider_timestamp": 1767225600,
"published_at": "2026-01-01T00:00:00.000Z",
"expected_interval_seconds": 300,
"lag_seconds": 5,
"stale": false,
"timezone": "Asia/Seoul",
"fetched_at": "2026-01-01T00:00:05.000Z",
"persistent_storage": false
},
"data": [
{
"code": "USD",
"name": "US Dollar"
},
{
"code": "EUR",
"name": "Euro"
}
]
}Nama dilokalkan melalui Intl.DisplayNames; aset tak dikenal tetap memakai kode. Hanya kode dalam data terkini yang dikembalikan.
GET /api/rates/history
Gunakan /v1/history untuk tanggal tertentu dan /v1/series untuk rentang tanggal.
| Parameter | Tipe | Wajib | Default | Deskripsi |
|---|---|---|---|---|
| from | string | Opsional | USD | Dari |
| to | string | Opsional | EUR | Ke |
| period | enum | Opsional | 1M | 1D | 1W | 1M | 3M | 1Y |
curl --request GET 'https://lumeexchangerates.com/api/rates/history?from=USD&to=EUR&period=1W'Nilai dan tanggal adalah contoh, bukan kurs terkini. Daftar dapat diringkas; gunakan uji API untuk data nyata.
{
"meta": {
"kind": "utc_daily",
"from": "USD",
"to": "EUR",
"period": "1W",
"provider": "Penyedia kurs eksternal",
"persistent_storage": false
},
"data": [
{
"time": "2026-01-01",
"value": 0.9
},
{
"time": "2026-01-02",
"value": 0.91
}
]
}1W dimulai tujuh hari lalu; 1M, 3M dan 1Y mengikuti kalender. Data harian berakhir kemarin. Batas bulan dan tahun kabisat disesuaikan. Periode panjang dibagi per bulan, diurutkan dan dihapus duplikatnya.
| Parameter | Tipe | Deskripsi |
|---|---|---|
| data[].time | string | integer | Harian: YYYY-MM-DD (UTC). Intrahari: detik UNIX. |
| data[].value | number | rates[to] / rates[from] |
| meta.kind | string | utc_daily | intraday |
{
"meta": {
"kind": "intraday",
"persistent_storage": false
},
"data": []
}Tanpa layanan pengumpulan, 1D mengembalikan HTTP 200 dan daftar kosong; bukan galat atau data per menit. Mata uang yang belum ada pada periode historis dapat gagal.
GET /api/rates/previous
Hari UTC sebelumnya
| Parameter | Tipe | Wajib | Default | Deskripsi |
|---|---|---|---|---|
| from | string | Opsional | USD | Dari |
| to | string | Opsional | EUR | Ke |
curl --request GET 'https://lumeexchangerates.com/api/rates/previous?from=USD&to=EUR'Nilai dan tanggal adalah contoh, bukan kurs terkini. Daftar dapat diringkas; gunakan uji API untuk data nyata.
{
"meta": {
"kind": "utc_daily",
"reference_date": "2026-01-01",
"reference_timestamp": "2026-01-01T23:59:59Z"
},
"data": {
"from": "USD",
"to": "EUR",
"rate": 0.9,
"rates": {
"USD": 1,
"EUR": 0.9
}
}
}Dibandingkan dengan hari UTC sebelumnya. reference_timestamp adalah akhir hari logis, bukan waktu publikasi. Persentase: (terkini − acuan) / acuan × 100.
POST /api/convert
Konverter
| Parameter | Tipe | Wajib | Default | Deskripsi |
|---|---|---|---|---|
| Content-Type | header | Wajib | application/json | application/json |
| amount | number | Wajib | — | 0 ≤ amount ≤ 1e15; finite |
| from | string | Wajib | — | Dari |
| to | string | Wajib | — | Ke |
curl --request POST 'https://lumeexchangerates.com/api/convert' \
--header 'Content-Type: application/json' \
--data '{"amount":100,"from":"USD","to":"EUR"}'Nilai dan tanggal adalah contoh, bukan kurs terkini. Daftar dapat diringkas; gunakan uji API untuk data nyata.
{
"meta": {
"provider": "Penyedia kurs eksternal",
"kind": "latest_published",
"provider_timestamp": 1767225600,
"published_at": "2026-01-01T00:00:00.000Z",
"expected_interval_seconds": 300,
"lag_seconds": 5,
"stale": false,
"timezone": "Asia/Seoul",
"fetched_at": "2026-01-01T00:00:05.000Z",
"persistent_storage": false
},
"data": {
"amount": 100,
"from": "USD",
"to": "EUR",
"rate": 0.9,
"result": 90
}
}Kirim amount sebagai angka JSON; string "100" mengembalikan 400. Kode harus ada di snapshot terkini. Tidak menjalankan transfer atau perdagangan.
GET /v1/history
Gunakan /v1/history untuk tanggal tertentu dan /v1/series untuk rentang tanggal.
| Parameter | Tipe | Wajib | Default | Deskripsi |
|---|---|---|---|---|
| date | YYYY-MM-DD | Wajib | — | 1999-01-01 ≤ date ≤ UTC today |
| anchor | string | Opsional | USD | Dari |
| targets | CSV | Opsional | all | Ke |
curl --request GET 'https://lumeexchangerates.com/v1/history?date=2026-01-01&anchor=EUR&targets=USD,JPY'Nilai dan tanggal adalah contoh, bukan kurs terkini. Daftar dapat diringkas; gunakan uji API untuk data nyata.
{
"meta": {
"date": "2026-01-01",
"published_at": "2026-01-01T23:00:00Z",
"partial_day": false
},
"anchor": "EUR",
"data": [
{
"currency": "USD",
"value": 1.1
}
]
}| Parameter | Tipe | Deskripsi |
|---|---|---|
| meta.partial_day | boolean | Referensi harian UTC |
| meta.published_at | ISO 8601 UTC | Kurs terakhir diterbitkan |
GET /v1/series
Gunakan /v1/history untuk tanggal tertentu dan /v1/series untuk rentang tanggal.
| Parameter | Tipe | Wajib | Default | Deskripsi |
|---|---|---|---|---|
| start / end | YYYY-MM-DD | Wajib | — | 1999-01-01 ≤ start ≤ end < UTC today; ≤ 366 days inclusive |
| anchor / targets | string / CSV | Opsional | USD / all | same as /v1/quotes |
curl --request GET 'https://lumeexchangerates.com/v1/series?start=2026-01-01&end=2026-01-07&anchor=USD&targets=EUR'Nilai dan tanggal adalah contoh, bukan kurs terkini. Daftar dapat diringkas; gunakan uji API untuk data nyata.
{
"meta": {
"start": "2026-01-01",
"end": "2026-01-02",
"timezone": "UTC",
"count": 2
},
"anchor": "USD",
"data": [
{
"date": "2026-01-01",
"rates": [
{
"currency": "EUR",
"value": 0.9
}
]
},
{
"date": "2026-01-02",
"rates": [
{
"currency": "EUR",
"value": 0.91
}
]
}
]
}OHLC melalui /v1/candles memerlukan hak akses penyedia. Periksa /v1/capabilities; ketersediaan mengikuti paket yang terhubung.
{
"timezone": "UTC",
"date_bounds": "inclusive",
"max_days": 366,
"upstream_chunk": "calendar_month"
}GET /v1/candles
OHLC melalui /v1/candles memerlukan hak akses penyedia. Periksa /v1/capabilities; ketersediaan mengikuti paket yang terhubung.
| Parameter | Tipe | Wajib | Default | Deskripsi |
|---|---|---|---|---|
| start | YYYY-MM-DDTHH:mm:00Z | Wajib | — | UTC; completed period only; ≥ 2016-12-19 |
| period | enum | Wajib | — | 1m | 5m | 15m | 30m | 1h | 12h | 1d | 1w | 1mo |
| anchor / targets | string / CSV | Opsional | USD / all | provider base / symbols |
curl --request GET 'https://lumeexchangerates.com/v1/candles?start=2026-01-01T00%3A00%3A00Z&period=1d&anchor=USD&targets=EUR'Nilai dan tanggal adalah contoh, bukan kurs terkini. Daftar dapat diringkas; gunakan uji API untuk data nyata.
{
"meta": {
"start": "2026-01-01T00:00:00Z",
"end": "2026-01-01T23:59:59Z",
"period": "1d"
},
"anchor": "USD",
"data": [
{
"currency": "EUR",
"open": 0.9,
"high": 0.92,
"low": 0.89,
"close": 0.91,
"average": 0.905
}
]
}{
"source": "provider_ohlc",
"synthetic": false,
"cross_rate_ohlc": false,
"max_age": {
"1m": "1h",
"5m": "24h",
"15m": "24h",
"30m": "32d",
"1h": "32d"
},
"alignment_minutes": {
"5m": 5,
"15m": 15,
"30m": 30,
"1h": 30,
"12h": 30,
"1d": 30
},
"calendar_alignment": {
"1w": "00:00 UTC",
"1mo": "YYYY-MM-01T00:00:00Z"
}
}GET /v1/capabilities
Ketersediaan
Parameter: —
curl --request GET 'https://lumeexchangerates.com/v1/capabilities'Nilai dan tanggal adalah contoh, bukan kurs terkini. Daftar dapat diringkas; gunakan uji API untuk data nyata.
{
"data": {
"latest": true,
"currencies": true,
"conversion": "latest_snapshot",
"historical": "verified_on_request",
"time_series": true,
"ohlc": false,
"refresh_interval_seconds": 300,
"customer_api_keys": false
}
}OHLC melalui /v1/candles memerlukan hak akses penyedia. Periksa /v1/capabilities; ketersediaan mengikuti paket yang terhubung.
Data dan presisi
Kurs indikatif bukan penawaran bank atau harga transaksi yang dijamin. Konversi memakai snapshot yang sama; bulatkan saat menampilkan atau menyelesaikan transaksi.
rate = rates[to] / rates[from]
result = amount * rateKurs mempertahankan presisi angka pecahan tanpa pemotongan desimal tetap. Bulatkan hanya untuk tampilan atau sesuai kebijakan akuntansi Anda.
Satu unit sumber, termasuk JPY. Kalikan 100 hanya untuk tampilan jika diperlukan. Perhatikan galat biner JavaScript dan tetapkan aturan desimal serta pembulatan saat penyelesaian.
Tanggal dan waktu
UNIX berupa detik UTC; ISO memakai Z. Tanggal UTC bisa berbeda dari lokal. Situs memakai zona browser; meta.timezone hanya petunjuk tampilan.
| Parameter | Tipe | Deskripsi |
|---|---|---|
| /v1 meta.as_of | ISO 8601 | YYYY-MM-DD | Waktu penyedia |
| /v1 meta.refresh_interval_seconds | integer | Cache |
| /v1 meta.currency_count | integer | … mata uang tersedia |
| /v1 meta.mode | provider | daily | Sumber data |
| /api meta.published_at | ISO 8601 UTC | Kurs terakhir diterbitkan |
| history data[].time | YYYY-MM-DD UTC | UNIX seconds | Referensi harian UTC |
Kesalahan
| HTTP | code | Deskripsi |
|---|---|---|
| 400 | INVALID_CURRENCY / INVALID_INPUT / INVALID_CONVERSION / INVALID_JSON / INVALID_PERIOD | Masukkan jumlah yang tidak negatif |
| 405 | METHOD_NOT_ALLOWED | GET: /v1/*, /api/rates/*, /api/currencies; POST: /api/convert |
| 404 | NOT_FOUND | /api/rates/* |
| 422 | HISTORY_NOT_IN_PLAN / DATA_UNAVAILABLE | Ketersediaan |
| 429 | RATE_LIMITED | /api/* · 90 / IP / minute |
| 404 | NOT_FOUND | Unknown /v1 endpoint |
| 422 | FEATURE_NOT_IN_PLAN / HISTORY_NOT_IN_PLAN / OHLC_NOT_IN_PLAN | Ketersediaan |
| 400 | INVALID_DATE / INVALID_DATE_RANGE / INVALID_PERIOD / INCOMPLETE_PERIOD | Masukkan jumlah yang tidak negatif |
| 503 | PROVIDER_UNAVAILABLE / DATA_UNAVAILABLE / SERVICE_UNAVAILABLE | Kurs tidak tersedia. Silakan coba lagi nanti. |
{
"error": {
"code": "INVALID_CURRENCY",
"message": "Symbol not available in latest provider data"
}
}message dapat tidak disertakan. Gunakan HTTP dan error.code. Perbaiki masukan; untuk 429 atau 503 sementara gunakan percobaan terbatas dengan jeda eksponensial dan acak. Retry-After tidak dijamin.
Batas dan cache
Data di-cache dengan interval konfigurasi lima menit. /api: 90 permintaan per menit per IP, lokal pada Worker langsung atau bersama melalui Redis. /v1 belum menerapkan kuota paket mendatang.
Cache-Control: no-store berlaku untuk respons, bukan cache penyedia di server. Gunakan ulang snapshot menurut publikasi. Saat gangguan, data valid terakhir bisa dikembalikan: periksa stale atau as_of. Cache Worker tidak persisten.
{
"endpoints": [
"/v1/history",
"/v1/series",
"/v1/candles",
"/v1/capabilities"
],
"requests_per_ip_per_minute": 60,
"cache": "in_process",
"completed_history_cache_seconds": 3600,
"current_day_cache_seconds": 60
}Ketersediaan
OHLC melalui /v1/candles memerlukan hak akses penyedia. Periksa /v1/capabilities; ketersediaan mengikuti paket yang terhubung.
OHLC melalui /v1/candles memerlukan hak akses penyedia. Periksa /v1/capabilities; ketersediaan mengikuti paket yang terhubung.
Uji API
Panggil API di situs ini. Kunci penyedia tetap tersimpan di server.
Jalankan permintaan untuk melihat respons JSON nyata.