# Bank Indonesia — Zapi reference > Official Indonesian exchange rates — JISDOR, the transaction rate and the banknote rate — plus the BI-Rate and headline inflation. **Base URL:** `https://api.zpi.web.id` **Auth:** Send `x-api-key: YOUR_KEY` header on every request. Get a free key at https://zpi.web.id/dashboard/keys. **Response envelope:** `{ status, message, content }` **Rate limit:** 60 req/min on free tier. **Related:** - Detail page: https://zpi.web.id/api/finance/bi-kurs - Endpoint catalog: https://zpi.web.id/category/finance - Concise index: https://zpi.web.id/llms.txt - Full reference: https://zpi.web.id/llms-full.txt --- ## Bank Indonesia **Category:** finance · **Slug:** `bi-kurs` **Detail page:** https://zpi.web.id/api/finance/bi-kurs Official Indonesian exchange rates — JISDOR, the transaction rate and the banknote rate — plus the BI-Rate and headline inflation. **Tags:** forex, exchange-rate, indonesia, jisdor, inflation, interest-rate ### JISDOR The official USD/IDR reference rate, by day. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/finance:bi-kurs/jisdor` - **Cache TTL:** 300s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `startDate` | string | query | no | Range start, YYYY-MM-DD. Omit for the latest published rate | | `endDate` | string | query | no | Range end, YYYY-MM-DD. Defaults to today when a start is given | **cURL:** ```bash curl "https://api.zpi.web.id/v1/finance:bi-kurs/jisdor?startDate=2026-07-01&endDate=2026-07-31" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/finance:bi-kurs/jisdor?startDate=2026-07-01&endDate=2026-07-31", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/finance:bi-kurs/jisdor?startDate=2026-07-01&endDate=2026-07-31", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 23, "items": [ { "date": "2026-07-31", "rate": 18058 }, { "date": "2026-07-30", "rate": 18078 }, { "date": "2026-07-29", "rate": 18087 }, { "date": "2026-07-28", "rate": 18088 }, { "date": "2026-07-27", "rate": 17995 }, { "date": "2026-07-24", "rate": 17973 }, { "date": "2026-07-23", "rate": 17915 }, { "date": "2026-07-22", "rate": 17909 } ], "series": "jisdor", "source": "bank-indonesia", "endDate": "2026-07-31", "currency": "USD", "startDate": "2026-07-01" } ``` --- ### Transaction rate Kurs Transaksi BI — the rate used for settlement and tax reporting. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/finance:bi-kurs/transaction` - **Cache TTL:** 300s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `date` | string | query | no | Single publication date, YYYY-MM-DD. Omit for the latest | | `currency` | string | query | no | ISO currency code. Required when requesting a date range | | `startDate` | string | query | no | Range start, YYYY-MM-DD. Needs a currency | | `endDate` | string | query | no | Range end, YYYY-MM-DD. Defaults to today | **cURL:** ```bash curl "https://api.zpi.web.id/v1/finance:bi-kurs/transaction?date=2026-07-31¤cy=USD&startDate=2026-07-01&endDate=2026-07-31" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/finance:bi-kurs/transaction?date=2026-07-31¤cy=USD&startDate=2026-07-01&endDate=2026-07-31", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/finance:bi-kurs/transaction?date=2026-07-31¤cy=USD&startDate=2026-07-01&endDate=2026-07-31", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "date": "2026-07-31", "count": 26, "items": [ { "buy": 4897.12, "date": "2026-07-31", "sell": 4946.61, "unit": 1, "currency": "AED" }, { "buy": 12501.39, "date": "2026-07-31", "sell": 12628.85, "unit": 1, "currency": "AUD" }, { "buy": 13925.53, "date": "2026-07-31", "sell": 14068.75, "unit": 1, "currency": "BND" }, { "buy": 12786.19, "date": "2026-07-31", "sell": 12917.45, "unit": 1, "currency": "CAD" }, { "buy": 22003.19, "date": "2026-07-31", "sell": 22235.21, "unit": 1, "currency": "CHF" }, { "buy": 2662.27, "date": "2026-07-31", "sell": 2689.18, "unit": 1, "currency": "CNH" }, { "buy": 2661.83, "date": "2026-07-31", "sell": 2688.86, "unit": 1, "currency": "CNY" }, { "buy": 2752.21, "date": "2026-07-31", "sell": 2780.29, "unit": 1, "currency": "DKK" } ], "series": "transaction", "source": "bank-indonesia", "endDate": null, "currency": null, "startDate": null } ``` --- ### Banknote rate Kurs Uang Kertas Asing — the physical cash rate. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/finance:bi-kurs/banknote` - **Cache TTL:** 300s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `date` | string | query | no | Single publication date, YYYY-MM-DD. Omit for the latest | | `currency` | string | query | no | ISO currency code. Required when requesting a date range | | `startDate` | string | query | no | Range start, YYYY-MM-DD. Needs a currency | | `endDate` | string | query | no | Range end, YYYY-MM-DD. Defaults to today | **cURL:** ```bash curl "https://api.zpi.web.id/v1/finance:bi-kurs/banknote?date=2026-07-31¤cy=USD&startDate=2026-07-01&endDate=2026-07-31" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/finance:bi-kurs/banknote?date=2026-07-31¤cy=USD&startDate=2026-07-01&endDate=2026-07-31", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/finance:bi-kurs/banknote?date=2026-07-31¤cy=USD&startDate=2026-07-01&endDate=2026-07-31", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "date": "2026-07-31", "count": 1, "items": [ { "buy": 17578, "date": "2026-07-31", "sell": 18578, "unit": 1, "currency": "USD" } ], "series": "banknote", "source": "bank-indonesia", "endDate": null, "currency": "USD", "startDate": null } ``` --- ### Currencies Which currencies each rate series carries. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/finance:bi-kurs/currencies` - **Cache TTL:** 300s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `series` | enum(all|transaction|banknote) | query | no | Restrict to one rate series. Default all | **cURL:** ```bash curl "https://api.zpi.web.id/v1/finance:bi-kurs/currencies?series=all" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/finance:bi-kurs/currencies?series=all", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/finance:bi-kurs/currencies?series=all", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "date": "2026-07-31", "count": 26, "items": [ { "code": "AED", "name": "UNITED ARAB EMIRATES DIRHAM", "banknote": true, "transaction": true }, { "code": "AUD", "name": "AUSTRALIAN DOLLAR", "banknote": true, "transaction": true }, { "code": "BND", "name": "BRUNEI DOLLAR", "banknote": true, "transaction": true }, { "code": "CAD", "name": "CANADIAN DOLLAR", "banknote": true, "transaction": true }, { "code": "CHF", "name": "SWISS FRANC", "banknote": true, "transaction": true }, { "code": "CNH", "name": "CHINA YUAN", "banknote": true, "transaction": true }, { "code": "CNY", "name": "CHINA YUAN", "banknote": false, "transaction": true }, { "code": "DKK", "name": "DANISH KRONE", "banknote": true, "transaction": true } ], "series": "all", "source": "bank-indonesia" } ``` --- ### BI-Rate The policy rate and every decision that changed it. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/finance:bi-kurs/policy-rate` - **Cache TTL:** 300s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `count` | number | query | no | Most recent decisions to return. Default 24, max 200 | **cURL:** ```bash curl "https://api.zpi.web.id/v1/finance:bi-kurs/policy-rate?count=24" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/finance:bi-kurs/policy-rate?count=24", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/finance:bi-kurs/policy-rate?count=24", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "count": 10, "items": [ { "date": "2026-07-22", "ratePercent": 5.75, "announcementUrl": "https://www.bi.go.id/id/publikasi/ruang-media/news-release/Pages/sp_2814226.aspx" }, { "date": "2026-06-18", "ratePercent": 5.75, "announcementUrl": "https://www.bi.go.id/id/publikasi/ruang-media/news-release/Pages/sp_2812626.aspx" }, { "date": "2026-06-09", "ratePercent": 5.5, "announcementUrl": "https://www.bi.go.id/id/publikasi/ruang-media/news-release/Pages/sp_2811926.aspx" }, { "date": "2026-05-20", "ratePercent": 5.25, "announcementUrl": "https://www.bi.go.id/id/publikasi/ruang-media/news-release/Pages/sp_2810726.aspx" }, { "date": "2026-04-22", "ratePercent": 4.75, "announcementUrl": "https://www.bi.go.id/id/publikasi/ruang-media/news-release/Pages/sp_288426.aspx" }, { "date": "2026-03-17", "ratePercent": 4.75, "announcementUrl": "https://www.bi.go.id/id/publikasi/ruang-media/news-release/Pages/sp_286526.aspx" }, { "date": "2026-02-19", "ratePercent": 4.75, "announcementUrl": "https://www.bi.go.id/id/publikasi/ruang-media/news-release/Pages/sp_284326.aspx" }, { "date": "2026-01-21", "ratePercent": 4.75, "announcementUrl": "https://www.bi.go.id/id/publikasi/ruang-media/news-release/Pages/sp_281326.aspx" } ], "series": "bi-rate", "source": "bank-indonesia", "effectiveDate": "2026-07-22", "currentRatePercent": 5.75 } ``` --- ### Inflation Indonesian headline inflation, year on year, by month. - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/finance:bi-kurs/inflation` - **Cache TTL:** 300s **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `count` | number | query | no | Most recent months to return. Default 24, max 120 | **cURL:** ```bash curl "https://api.zpi.web.id/v1/finance:bi-kurs/inflation?count=24" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/finance:bi-kurs/inflation?count=24", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/finance:bi-kurs/inflation?count=24", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "basis": "year-on-year", "count": 10, "items": [ { "month": "2026-06", "inflationPercent": 3.34 }, { "month": "2026-05", "inflationPercent": 3.08 }, { "month": "2026-04", "inflationPercent": 2.42 }, { "month": "2026-03", "inflationPercent": 3.48 }, { "month": "2026-02", "inflationPercent": 4.76 }, { "month": "2026-01", "inflationPercent": 3.55 }, { "month": "2025-12", "inflationPercent": 2.92 }, { "month": "2025-11", "inflationPercent": 2.72 } ], "series": "inflation", "source": "bank-indonesia", "latestMonth": "2026-06", "latestPercent": 3.34 } ``` --- _Generated: 2026-08-02T14:27:45.948Z_