Finance: exchange rates, minimum wage, QRIS and rupiah
Documentation index for AI agents: /llms.txt. Every page is also available as markdown: add
.mdto the URL.
Bank Indonesia and ECB exchange rates, UMP 1997-2026, QRIS parsing and rupiah formatting/terbilang.
Exchange rates come from Bank Indonesia (/kurs-bi) and from Frankfurter/ECB (/kurs). Minimum provincial wage (UMP) covers 1997-2026. The utility endpoints parse QRIS payloads and format, parse or spell out (terbilang) rupiah amounts.
All endpoints need the x-api-key header (see Authentication) and return the standard envelope. A successful request costs 2 credits.
Endpoints on this page
GET /api/v1/kurs/latest: Latest exchange rateGET /api/v1/kurs/history: Historical exchange ratesGET /api/v1/ump: List UMP (latest first)GET /api/v1/ump/{province_code}: UMP per province (all years)GET /api/v1/ump/{province_code}/{year}: UMP province × yearPOST /api/v1/util/rupiah/format: Format RupiahPOST /api/v1/util/qris/parse: Parse QRISPOST /api/v1/util/rupiah/parse: Parse RupiahPOST /api/v1/util/rupiah/terbilang: Spell out RupiahPOST /api/v1/util/qris/to-dynamic: Convert to dynamic QRISGET /api/v1/kurs-bi/latest: Latest ratesGET /api/v1/kurs-bi/history: Rate history
Bank Indonesia Rates
GET /api/v1/kurs-bi/latest
Latest rates. Latest transaction rates for USD/EUR/SGD (default) or other currencies.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
currencies | query | no | string | Comma-separated ISO codes, e.g. USD,EUR,SGD |
curl "https://use.apiindonesia.id/api/v1/kurs-bi/latest" \
-H "x-api-key: YOUR_API_KEY"
Example response (shortened):
{
"data": [
{
"date": "2026-07-09",
"currency": "USD",
"buy_rate": 18090,
"sell_rate": 18095
}
],
"meta": {
"attribution": "Sumber: Bank Indonesia",
"source": "Bank Indonesia"
}
}
GET /api/v1/kurs-bi/history
Rate history. Daily rate history for one currency (max 366 days).
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
currency | query | no | string | ISO code, default USD |
start | query | yes | string | YYYY-MM-DD |
end | query | yes | string | YYYY-MM-DD |
curl "https://use.apiindonesia.id/api/v1/kurs-bi/history?start=2026-07-01&end=2026-07-09" \
-H "x-api-key: YOUR_API_KEY"
Example response (shortened):
{
"data": [
{
"date": "2026-07-09",
"currency": "USD",
"mid_rate": 18092.52
}
],
"meta": {
"attribution": "Sumber: Bank Indonesia"
}
}
Exchange Rates
GET /api/v1/kurs/latest
Latest exchange rate. Returns the latest exchange rate for a given currency pair.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
base | query | no | string | Source currency. Defaults to USD. |
target | query | no | string | Target currency. Defaults to IDR. |
curl "https://use.apiindonesia.id/api/v1/kurs/latest" \
-H "x-api-key: YOUR_API_KEY"
Example response (shortened):
{
"data": {
"id": "kr_2026-07-03_USD_IDR",
"date": "2026-07-03",
"base": "USD",
"target": "IDR",
"rate": 16350.5,
"source": "Frankfurter/ECB"
}
}
GET /api/v1/kurs/history
Historical exchange rates. Returns historical exchange rates for a given date range.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
base | query | no | string | Source currency. Defaults to USD. |
target | query | no | string | Target currency. Defaults to IDR. |
start | query | yes | string | Start date, YYYY-MM-DD format. |
end | query | yes | string | End date, YYYY-MM-DD format. |
curl "https://use.apiindonesia.id/api/v1/kurs/history?start=2026-06-01&end=2026-06-30" \
-H "x-api-key: YOUR_API_KEY"
Example response (shortened):
{
"data": [
{
"id": "kr_2026-06-01_USD_IDR",
"date": "2026-06-01",
"base": "USD",
"target": "IDR",
"rate": 16290,
"source": "Frankfurter/ECB"
}
]
}
Minimum Provincial Wages (UMP)
GET /api/v1/ump
List UMP (latest first). All provincial minimum wage records. Use query params to filter.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
year | query | no | number | Specific year (1997–2026) |
province_name | query | no | string | Province name (case-insensitive, partial) |
min_salary | query | no | number | Minimum salary (IDR) |
max_salary | query | no | number | Maximum salary (IDR) |
curl "https://use.apiindonesia.id/api/v1/ump" \
-H "x-api-key: YOUR_API_KEY"
Example response (shortened):
{
"data": [
{
"id": "ump-32-2025",
"province_code": "32",
"province_name": "JAWA BARAT",
"year": 2025,
"salary": 2500000
},
{
"id": "ump-35-2025",
"province_code": "35",
"province_name": "JAWA TIMUR",
"year": 2025,
"salary": 2305984
}
],
"meta": {
"total": 2,
"page": 1,
"per_page": 20,
"total_pages": 1
}
}
GET /api/v1/ump/{province_code}
UMP per province (all years). All UMP records for one province, sorted by latest year.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
province_code | path | yes | string | Province code (e.g., 32 = West Java) |
curl "https://use.apiindonesia.id/api/v1/ump/32" \
-H "x-api-key: YOUR_API_KEY"
Example response (shortened):
{
"data": [
{
"id": "ump-32-2025",
"province_code": "32",
"province_name": "JAWA BARAT",
"year": 2025,
"salary": 2500000
},
{
"id": "ump-32-2024",
"province_code": "32",
"province_name": "JAWA BARAT",
"year": 2024,
"salary": 2200000
}
],
"meta": {
"total": 2,
"page": 1,
"per_page": 20,
"total_pages": 1
}
}
GET /api/v1/ump/{province_code}/{year}
UMP province × year. A single UMP record for a specific province and year.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
province_code | path | yes | string | Province code |
year | path | yes | number | Year (1997–2026) |
curl "https://use.apiindonesia.id/api/v1/ump/32/2025" \
-H "x-api-key: YOUR_API_KEY"
Example response (shortened):
{
"data": {
"id": "ump-32-2025",
"province_code": "32",
"province_name": "JAWA BARAT",
"year": 2025,
"salary": 2500000
}
}
Developer Utilities
POST /api/v1/util/rupiah/format
Format Rupiah. Formats a number as Indonesian Rupiah string.
| Body field | Required | Type | Description |
|---|---|---|---|
amount | yes | number | Amount in IDR |
curl -X POST "https://use.apiindonesia.id/api/v1/util/rupiah/format" \
-H "x-api-key: YOUR_API_KEY" \
-H "content-type: application/json" \
-d '{"amount":125000}'
Example response (shortened):
{
"data": {
"formatted": "Rp125.000",
"amount": 125000
}
}
POST /api/v1/util/qris/parse
Parse QRIS. Decodes a QRIS EMVCo payload string.
| Body field | Required | Type | Description |
|---|---|---|---|
payload | yes | string | QRIS string |
curl -X POST "https://use.apiindonesia.id/api/v1/util/qris/parse" \
-H "x-api-key: YOUR_API_KEY" \
-H "content-type: application/json" \
-d '{"payload":"0002010102115204581253033605802ID5910TOKO CONTO6007JAKARTA630451E9"}'
Example response (shortened):
{
"success": true,
"data": {
"valid": true,
"fields": [
{
"id": "00",
"length": 2,
"value": "01"
},
{
"id": "01",
"length": 2,
"value": "11"
}
],
"merchant_name": "TOKO CONTO",
"merchant_city": "JAKARTA"
}
}
POST /api/v1/util/rupiah/parse
Parse Rupiah. Parses Rupiah text into a number.
| Body field | Required | Type | Description |
|---|---|---|---|
text | yes | string | Rupiah text. |
curl -X POST "https://use.apiindonesia.id/api/v1/util/rupiah/parse" \
-H "x-api-key: YOUR_API_KEY" \
-H "content-type: application/json" \
-d '{"text":"Rp125.000"}'
Example response (shortened):
{
"success": true,
"data": {
"amount": 125000
}
}
POST /api/v1/util/rupiah/terbilang
Spell out Rupiah. Spells out an IDR amount.
| Body field | Required | Type | Description |
|---|---|---|---|
amount | yes | number | Amount. |
curl -X POST "https://use.apiindonesia.id/api/v1/util/rupiah/terbilang" \
-H "x-api-key: YOUR_API_KEY" \
-H "content-type: application/json" \
-d '{"amount":125000}'
Example response (shortened):
{
"success": true,
"data": {
"terbilang": "seratus dua puluh lima ribu rupiah"
}
}
POST /api/v1/util/qris/to-dynamic
Convert to dynamic QRIS. Adds an amount to static QRIS and recalculates CRC.
| Body field | Required | Type | Description |
|---|---|---|---|
payload | yes | string | Static QRIS payload. |
amount | yes | number | IDR amount. |
fee | no | number | Optional fee. |
curl -X POST "https://use.apiindonesia.id/api/v1/util/qris/to-dynamic" \
-H "x-api-key: YOUR_API_KEY" \
-H "content-type: application/json" \
-d '{"payload":"0002010102115204581253033605802ID5910TOKO CONTO6007JAKARTA630451E9","amount":50000}'
Example response (shortened):
{
"success": true,
"data": {
"payload": "0002010102125204581253033605405500005802ID5910TOKO CONTO6007JAKARTA6304BB73"
}
}