# API Indonesia: full endpoint reference > Every public endpoint of API Indonesia (apiindonesia.id), the REST API for Indonesian public data. Base URL: https://use.apiindonesia.id. Authenticate with the header `x-api-key: YOUR_API_KEY` (create one at https://dashboard.apiindonesia.id/register; new accounts get a one-time 3,000 credit bonus). Responses use one JSON envelope: `{ "success": true, "data": ... }`. Summary and pricing: https://apiindonesia.id/llms.txt. OpenAPI 3.1: https://apiindonesia.id/openapi.json. ## Dataset Metadata Snapshot and provenance metadata for datasets, including source, version, item count, synchronization time, checksum, status, and warnings. Auth: public (no key). Price: 2 credits (Rp2) per successful request; failed requests are free. Docs: https://docs.apiindonesia.id/en/#dataset-metadata - GET https://use.apiindonesia.id/api/v1/meta/datasets: List dataset metadata. Returns metadata for every registered dataset. This endpoint does not require an API key. - GET https://use.apiindonesia.id/api/v1/meta/datasets/:dataset: Retrieve dataset metadata. Returns snapshot and provenance metadata for one dataset. - dataset (string, required): Dataset ID, e.g. sekolah. ## Regions Indonesian administrative region data from province down to village level, complete with region codes, postal codes, and coordinates. All list endpoints support pagination. Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/wilayah/ Docs: https://docs.apiindonesia.id/en/#wilayah - GET https://use.apiindonesia.id/api/v1/wilayah/provinsi: List provinces. Returns a list of all provinces in Indonesia. - page (integer): Page to retrieve. Defaults to 1. - per_page (integer): Items per page. Defaults to 20, maximum 100. - GET https://use.apiindonesia.id/api/v1/wilayah/provinsi/:id: Retrieve a province. Returns a single province by its region code. - id (string, required): Province code, e.g. 32. - GET https://use.apiindonesia.id/api/v1/wilayah/provinsi/:id/kabupaten: List regencies/cities in a province. Nested alias for listing regencies/cities by province code. - id (string, required): Province code. - page (integer): Page to retrieve. Defaults to 1. - per_page (integer): Items per page. Maximum 100. - GET https://use.apiindonesia.id/api/v1/wilayah/kabupaten: List regencies/cities. Returns a list of regencies and cities, optionally filtered by province. - provinsi_id (string): Filter by province code. - page (integer): Page to retrieve. Defaults to 1. - per_page (integer): Items per page. Defaults to 20, maximum 100. - GET https://use.apiindonesia.id/api/v1/wilayah/kabupaten/:id: Retrieve a regency/city. Returns a single regency/city by its region code. - id (string, required): Regency/city code, e.g. 3273. - GET https://use.apiindonesia.id/api/v1/wilayah/kabupaten/:id/kecamatan: List districts in a regency/city. Nested alias for listing districts by regency/city code. - id (string, required): Regency/city code. - page (integer): Page to retrieve. Defaults to 1. - per_page (integer): Items per page. Maximum 100. - GET https://use.apiindonesia.id/api/v1/wilayah/kecamatan: List districts. Returns a list of districts, optionally filtered by regency/city. - kabupaten_id (string): Filter by regency/city code. - page (integer): Page to retrieve. Defaults to 1. - per_page (integer): Items per page. Defaults to 20, maximum 100. - GET https://use.apiindonesia.id/api/v1/wilayah/kecamatan/:id: Retrieve a district. Returns a single district by its region code. - id (string, required): District code, e.g. 327301. - GET https://use.apiindonesia.id/api/v1/wilayah/kecamatan/:id/kelurahan: List villages in a district. Nested alias for listing villages and customary villages by district code. - id (string, required): District code. - page (integer): Page to retrieve. Defaults to 1. - per_page (integer): Items per page. Maximum 100. - GET https://use.apiindonesia.id/api/v1/wilayah/kelurahan: List villages. Returns a list of villages complete with postal codes, optionally filtered by district. - kecamatan_id (string): Filter by district code. - page (integer): Page to retrieve. Defaults to 1. - per_page (integer): Items per page. Defaults to 20, maximum 100. - GET https://use.apiindonesia.id/api/v1/wilayah/kelurahan/:id: Retrieve a village. Returns a single village by its region code. - id (string, required): Village code, e.g. 3273011001. - GET https://use.apiindonesia.id/api/v1/wilayah/search: Search regions. Searches region names across all levels at once (province, regency, district, village). The level field indicates the region level of each result. - q (string, required): Search keyword, minimum 2 characters. - page (integer): Page to retrieve. Defaults to 1. - per_page (integer): Items per page. Defaults to 20, maximum 100. ## Public Holidays Calendar of national public holidays, religious holidays, and joint leave days based on the SKB 3 Menteri (joint ministerial decree). Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/hari-libur/ Docs: https://docs.apiindonesia.id/en/#hari-libur - GET https://use.apiindonesia.id/api/v1/libur: List public holidays. Returns a list of public holidays, sorted by date. Can be filtered by year and month. - tahun (integer): Filter by year, e.g. 2026. - bulan (string): Filter by month (two digits), e.g. 06. - GET https://use.apiindonesia.id/api/v1/libur/upcoming: Upcoming holidays. Returns up to 10 upcoming public holidays, counted from today. - GET https://use.apiindonesia.id/api/v1/libur/:id: Retrieve a holiday. Returns a single public holiday by ID. - id (string, required): Holiday ID. ## Prayer Times Daily and monthly prayer times for 514 regencies/cities across Indonesia. Data is sourced from equran.id and aladhan.com. Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/jadwal-sholat/ Docs: https://docs.apiindonesia.id/en/#jadwal-sholat - GET https://use.apiindonesia.id/api/v1/sholat/list-kota: List available cities. Returns the regencies/cities that have prayer time data. Use the regency_id from this response with the schedule endpoints. - GET https://use.apiindonesia.id/api/v1/sholat: Daily prayer times. Returns one day of prayer times for a given regency/city. - kabupaten_id (string, required): Regency/city code, e.g. 3273. - tanggal (string): Date in YYYY-MM-DD format. Defaults to today. - GET https://use.apiindonesia.id/api/v1/sholat/monthly: Monthly prayer times. Returns a full month of prayer times for a given regency/city, sorted by date. - kabupaten_id (string, required): Regency/city code, e.g. 3273. - tahun (integer, required): Year, e.g. 2026. - bulan (integer, required): Month (1–12), e.g. 7. ## Schools Directory of 93,500+ schools across Indonesia (SD, SMP, SMA, SMK, SLB) with NPSN (national school ID), address, accreditation, and coordinates. Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/sekolah/ Docs: https://docs.apiindonesia.id/en/#sekolah - GET https://use.apiindonesia.id/api/v1/sekolah: List schools. Returns a paginated list of schools with name/NPSN search plus region, level, status, and accreditation filters. - provinsi_id (string): Filter by province code. - kabupaten_id (string): Filter by regency/city code. - district_id (string): Filter by district ID. Indonesian alias: kecamatan_id. - district_code (string): Filter by district code. Indonesian alias: kecamatan_code. - jenis (string): School level: SD, SMP, SMA, SMK, or SLB. - grade (string): English alias for jenis/school level. - type (string): Additional alias for jenis/school level. - status (string): School status: Negeri (state) or Swasta (private). - accreditation (string): Filter by accreditation grade. Indonesian alias: akreditasi. - q (string): Exact NPSN or school-name prefix, minimum 2 characters. - page (integer): Page to retrieve. Defaults to 1. - per_page (integer): Items per page. Defaults to 50, maximum 200. - GET https://use.apiindonesia.id/api/v1/sekolah/search: Search schools. Searches schools by name. Returns up to 50 results. - q (string, required): Search keyword, minimum 3 characters. - GET https://use.apiindonesia.id/api/v1/sekolah/:npsn: Retrieve a school. Returns a single school by NPSN, including province, regency/city, district, and village names. - npsn (string, required): NPSN (national school ID). ## Universities Directory of 4,200+ PTN, PTS, PTA, and PTK higher-education institutions: universities, institutes, polytechnics, academies, and colleges. Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/kampus/ Docs: https://docs.apiindonesia.id/en/#kampus - GET https://use.apiindonesia.id/api/v1/kampus: List universities. Returns a paginated, filterable list of higher-education institutions, including province and regency/city names. - q (string): Search by name or abbreviation. - province (string): Filter by province code. Legacy alias: provinsi_id. - regency (string): Filter by regency/city code. Legacy alias: kabupaten_id. - type (string): Type: universitas, institut, politeknik, akademi, or sekolah_tinggi. Legacy alias: jenis. - group (string): Group: PTN, PTS, PTA, or PTK. Legacy alias: kelompok. - page (integer): Page to retrieve. Defaults to 1. - per_page (integer): Items per page. Defaults to 50, maximum 200. - GET https://use.apiindonesia.id/api/v1/kampus/search: Search universities. Searches institutions by name or abbreviation. Returns up to 50 results. - q (string, required): Search keyword, minimum 2 characters. - GET https://use.apiindonesia.id/api/v1/kampus/:id: Retrieve a university. Returns a single institution by ID, including province and regency/city names. - id (string, required): Institution ID. ## Hospitals Directory of 2,900+ hospitals from a Ministry of Health data-center export, with hospital codes, types, locations, contacts, bed capacity, and source metadata. Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/rumah-sakit/ Docs: https://docs.apiindonesia.id/en/#rumah-sakit - GET https://use.apiindonesia.id/api/v1/rumah-sakit: List hospitals. Compact list with name/code search and region, type, class, ownership, and BLU filters. Use the detail endpoint for service, staff, bed, and facility collections. - q (string): Search partial hospital name or code. - code (string): Filter by exact SIRS code. - province_id (string): Filter by province code. Legacy alias: provinsi_id. - regency_id (string): Filter by regency/city code. Legacy alias: kabupaten_id. - type (string): Filter by raw SIRS hospital type or legacy type code. Alias: jenis. - class (string): Filter by hospital class. Alias: kelas. - ownership (string): Filter by ownership. Alias: kepemilikan. - blu (string): Filter BLU/BLUD status by SIRS label or boolean. Alias: blu_status/is_blu. - page (integer): Page to retrieve. Defaults to 1. - per_page (integer): Items per page. Defaults to 50, maximum 200. - GET https://use.apiindonesia.id/api/v1/rumah-sakit/search: Search hospitals. Searches hospitals by name/code with the same filters as the list endpoint. Returns up to 50 results. - q (string): Name/code keyword, minimum 2 characters when code is absent. - code (string): Exact SIRS code. - GET https://use.apiindonesia.id/api/v1/rumah-sakit/:id: Retrieve a hospital. Returns a full profile by internal ID or SIRS code, including available bed, service, staff, facility, provenance, and synchronization details. - id (string, required): Internal ID or SIRS code. ## Earthquakes Realtime earthquake data sourced from BMKG, refreshed automatically every hour via cron. Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/gempa/ Docs: https://docs.apiindonesia.id/en/#gempa - GET https://use.apiindonesia.id/api/v1/gempa/terkini: Latest earthquakes. Returns the 15 most recent earthquakes, newest first. - GET https://use.apiindonesia.id/api/v1/gempa/dirasakan: Felt earthquakes. Returns the 15 most recent felt earthquakes (BMKG term for quakes reported felt by the public), complete with the MMI scale per area. - GET https://use.apiindonesia.id/api/v1/gempa/history: Earthquake history. Returns earthquakes within a given date range, up to 100 records, newest first. - start (string, required): Start date, YYYY-MM-DD format. - end (string, required): End date, YYYY-MM-DD format. ## Weather Forecast 3-day weather forecast from BMKG for all villages across Indonesia. Data is fetched on demand and cached for 6 hours. Use the village code (adm4) from the Regions endpoint. Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/cuaca/ Docs: https://docs.apiindonesia.id/en/#cuaca - GET https://use.apiindonesia.id/api/v1/cuaca: Village weather forecast. Returns a 3-day weather forecast for a single village. Choose between adm4 (village code) or kabupaten_id to fetch a representative forecast for the regency. - adm4 (string): Village code from the Regions endpoint, e.g. 32.73.01.1001. - kabupaten_id (string): Regency/city code (alternative to adm4), e.g. 3273. - GET https://use.apiindonesia.id/api/v1/cuaca/search: Search forecast location. Searches for villages or cities that have weather forecast data by name. Returns a list of adm4 codes usable in the main endpoint. - q (string, required): Search keyword, e.g. bandung. ## Weather Warnings Extreme weather warnings from BMKG RSS/CAP. Data is refreshed hourly and refreshed on demand when the cache is empty. Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/peringatan-dini/ Docs: https://docs.apiindonesia.id/en/#peringatan-dini - GET https://use.apiindonesia.id/api/v1/peringatan-dini: List weather warnings. Returns all currently active weather warnings. Can be filtered by province name. - provinsi (string): Filter by province name, e.g. Jawa Barat. ## Postal Codes Directory of 83,000+ postal code records per village across Indonesia, with the regional hierarchy from province to village, keyed by Kemendagri region codes. - One record per village, with its place in the hierarchy - Official BPS region codes (SIG BPS 2025) filled for about 96% of records - Some newer villages have no BPS counterpart yet - Static data, sourced from the official dataset Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/kodepos/ Docs: https://docs.apiindonesia.id/en/#kodepos - GET https://use.apiindonesia.id/api/v1/kodepos: List postal codes. Returns paginated postal codes with explicit Kemendagri administrative codes. BPS code fields and filters are available for 96% of records (official SIG BPS 2025 bridge). A small number of newer villages have no BPS counterpart yet. - provinsi_id (string): Filter by province code, e.g. 32. - kabupaten_id (string): Filter by regency/city code, e.g. 3273. - kecamatan_id (string): Filter by 6-digit Kemendagri district code, e.g. 327301. - kode_pos (string): Exact 5-digit postal-code filter. - bps_province_code (string): BPS province code. Official BPS code (SIG BPS 2025); filled for about 96% of records, some newer villages have no BPS counterpart yet. - bps_regency_code (string): BPS regency/city code. Official BPS code (SIG BPS 2025); filled for about 96% of records, some newer villages have no BPS counterpart yet. - bps_district_code (string): BPS district code. Official BPS code (SIG BPS 2025); filled for about 96% of records, some newer villages have no BPS counterpart yet. - bps_village_code (string): BPS village code. Official BPS code (SIG BPS 2025); filled for about 96% of records, some newer villages have no BPS counterpart yet. - kemendagri_province_code (string): Kemendagri province code. - kemendagri_regency_code (string): Kemendagri regency/city code. - kemendagri_district_code (string): Kemendagri district code. - kemendagri_village_code (string): Kemendagri village code. - page (integer): Page to retrieve. Defaults to 1. - per_page (integer): Items per page. Defaults to 20, maximum 100. - GET https://use.apiindonesia.id/api/v1/kodepos/lookup: Cross-system code lookup. Exact lookup by postal or Kemendagri code. At least one filter is required. Lookup by BPS code also works for the roughly 96% of records that have a BPS counterpart. - kode_pos (string): 5-digit postal code. - bps_province_code (string): BPS province code. Official BPS code (SIG BPS 2025); filled for about 96% of records, some newer villages have no BPS counterpart yet. - bps_regency_code (string): BPS regency/city code. Official BPS code (SIG BPS 2025); filled for about 96% of records, some newer villages have no BPS counterpart yet. - bps_district_code (string): BPS district code. Official BPS code (SIG BPS 2025); filled for about 96% of records, some newer villages have no BPS counterpart yet. - bps_village_code (string): BPS village code. Official BPS code (SIG BPS 2025); filled for about 96% of records, some newer villages have no BPS counterpart yet. - kemendagri_province_code (string): Kemendagri province code. - kemendagri_regency_code (string): Kemendagri regency/city code. - kemendagri_district_code (string): Kemendagri district code. - kemendagri_village_code (string): Kemendagri village code. - page (integer): Page. Defaults to 1. - per_page (integer): Items per page. Maximum 100. - GET https://use.apiindonesia.id/api/v1/kodepos/search: Search postal codes. Searches postal codes by village name or postal code number. - q (string, required): Keyword, minimum 2 characters. Can be a village name or postal code. - page (integer): Page. Defaults to 1. - per_page (integer): Items per page. Defaults to 20, maximum 100. - GET https://use.apiindonesia.id/api/v1/kodepos/:id: Retrieve a postal code. Returns a single postal code entry by ID. - id (string, required): Postal code entry ID, e.g. kp_3273011001. ## Exchange Rates Foreign exchange rates against Indonesian Rupiah (IDR) from Frankfurter/ECB. Data is refreshed automatically daily via cron. Available pairs: USD, EUR, SGD, GBP to IDR. Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/kurs/ Docs: https://docs.apiindonesia.id/en/#kurs - GET https://use.apiindonesia.id/api/v1/kurs/latest: Latest exchange rate. Returns the latest exchange rate for a given currency pair. - base (string): Source currency. Defaults to USD. - target (string): Target currency. Defaults to IDR. - GET https://use.apiindonesia.id/api/v1/kurs/history: Historical exchange rates. Returns historical exchange rates for a given date range. - base (string): Source currency. Defaults to USD. - target (string): Target currency. Defaults to IDR. - start (string, required): Start date, YYYY-MM-DD format. - end (string, required): End date, YYYY-MM-DD format. ## Al-Quran Complete list of 114 Al-Quran surahs with Arabic name, Latin transliteration, translation, number of verses, and revelation place. Static data sourced from quran.gading.dev. Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/quran/ Docs: https://docs.apiindonesia.id/en/#quran - GET https://use.apiindonesia.id/api/v1/quran/list-surah: List surah. Returns the complete list of 114 Al-Quran surahs, ordered by number. - GET https://use.apiindonesia.id/api/v1/quran/surah/:id: Retrieve a surah. Returns the metadata of a single surah by number (1–114). - id (integer, required): Surah number, 1–114. ## Alkitab (Bible) Indonesian Bible (TB translation) — 66 books (39 Old Testament + 27 New Testament) with 31,104 verses. Data sourced from alkitab.sabda.org. Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/alkitab/ Docs: https://docs.apiindonesia.id/en/#alkitab - GET https://use.apiindonesia.id/api/v1/alkitab/books: List books. Returns all 66 Bible books with chapter counts and testament classification (OT/NT). - GET https://use.apiindonesia.id/api/v1/alkitab/books/:testament: List books by testament. Filter books by testament: PL (Old Testament) or PB (New Testament). - testament (string, required): PL or PB. - GET https://use.apiindonesia.id/api/v1/alkitab/passage/:bookAbbr/:chapter: Read a chapter. Returns all verses in a chapter. Use book abbreviation (e.g. Gen, John, Ps) or full name. - bookAbbr (string, required): Book abbreviation or name, e.g. Kej, Yoh, Mzm. - chapter (integer, required): Chapter number. - GET https://use.apiindonesia.id/api/v1/alkitab/verse/:bookAbbr/:chapter/:verse: Read a single verse. Returns a single verse by book, chapter, and verse number. - bookAbbr (string, required): Book abbreviation or name. - chapter (integer, required): Chapter number. - verse (integer, required): Verse number. - GET https://use.apiindonesia.id/api/v1/alkitab/search: Search verses. Search for a word or phrase across all 31,104 Bible verses. Supports pagination via limit and offset. - q (string, required): Search keyword, minimum 3 characters. - limit (integer): Results per page. Defaults to 20, maximum 100. - offset (integer): Pagination offset. Defaults to 0. ## KBBI (Indonesian Dictionary) Indonesian Great Dictionary (KBBI) with 62,850+ word entries. Supports word search, exact word lookup, and random words. Data sourced from github.com/dyazincahya/KBBI-SQL-database (MIT License). Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/kbbi/ Docs: https://docs.apiindonesia.id/en/#kbbi - GET https://use.apiindonesia.id/api/v1/kbbi/search: Search words. Search KBBI dictionary by keyword. Supports pagination. - q (string, required): Search keyword. - page (integer): Page number (default 1). - per_page (integer): Items per page (default 20, max 100). - GET https://use.apiindonesia.id/api/v1/kbbi/word/:word: Look up a word. Returns all KBBI entries for a specific word (some words have multiple entries). - word (string, required): Word to look up, e.g. rumah. - GET https://use.apiindonesia.id/api/v1/kbbi/random: Random words. Returns random words from KBBI. Useful for games or learning apps. - count (integer): Number of words (default 1, max 20). ## Vehicle Plates Complete list of 61 Indonesian vehicle plate codes with region and province names. Static data sourced from an open dataset. Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/plat-nomor/ Docs: https://docs.apiindonesia.id/en/#plat-nomor - GET https://use.apiindonesia.id/api/v1/plates: List vehicle plates. Returns all 61 vehicle plate codes, sorted by code. - GET https://use.apiindonesia.id/api/v1/plates/:code: Retrieve a plate code. Returns details for a single plate code. - code (string, required): Plate code, e.g. B, DK, L. ## Minimum Provincial Wages (UMP) Provincial Minimum Wage (UMP) data from 1997 to 2026 across 38 Indonesian provinces. - 1997 to 2025: Kaggle "Indonesian Salary by Region" (Apache 2.0) - 2026: Satudata Kemnaker - Filters by year, province name, and salary range Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/ump/ Docs: https://docs.apiindonesia.id/en/#ump - GET https://use.apiindonesia.id/api/v1/ump: List UMP (latest first). All provincial minimum wage records. Use query params to filter. - year (number): Specific year (1997–2026) - province_name (string): Province name (case-insensitive, partial) - min_salary (number): Minimum salary (IDR) - max_salary (number): Maximum salary (IDR) - GET https://use.apiindonesia.id/api/v1/ump/:province_code: UMP per province (all years). All UMP records for one province, sorted by latest year. - province_code (string, required): Province code (e.g., 32 = West Java) - GET https://use.apiindonesia.id/api/v1/ump/:province_code/:year: UMP province × year. A single UMP record for a specific province and year. - province_code (string, required): Province code - year (number, required): Year (1997–2026) ## Format Validation Structural validation for NIK, NPWP, phone numbers, and bank accounts — no lookup to official databases. Includes Indonesian bank code list. Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/validasi/ Docs: https://docs.apiindonesia.id/en/#validasi - GET https://use.apiindonesia.id/api/v1/validasi/bank: List banks. Returns bank codes with valid account number lengths. - POST https://use.apiindonesia.id/api/v1/validasi/nik: Validate NIK. Checks 16-digit NIK format and extracts region/birth date codes. Not Dukcapil verification. - nik (string, required): 16-digit NIK - POST https://use.apiindonesia.id/api/v1/validasi/npwp: Validate NPWP. Checks 15-digit NPWP format. Not DJP verification. - npwp (string, required): NPWP number ## Developer Utilities Pure local utilities: Rupiah format/parse, dummy data generators (NIK/NPWP/phone), and QRIS parser. Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/util/ Docs: https://docs.apiindonesia.id/en/#util - POST https://use.apiindonesia.id/api/v1/util/rupiah/format: Format Rupiah. Formats a number as Indonesian Rupiah string. - amount (number, required): Amount in IDR - POST https://use.apiindonesia.id/api/v1/util/qris/parse: Parse QRIS. Decodes a QRIS EMVCo payload string. - payload (string, required): QRIS string - POST https://use.apiindonesia.id/api/v1/util/rupiah/parse: Parse Rupiah. Parses Rupiah text into a number. - text (string, required): Rupiah text. - POST https://use.apiindonesia.id/api/v1/util/rupiah/terbilang: Spell out Rupiah. Spells out an IDR amount. - amount (number, required): Amount. - POST https://use.apiindonesia.id/api/v1/util/dummy/nik: Generate dummy NIK. Synthetic test data, not official verification. - POST https://use.apiindonesia.id/api/v1/util/dummy/npwp: Generate dummy NPWP. Synthetic test data, not official verification. - POST https://use.apiindonesia.id/api/v1/util/dummy/telepon: Generate dummy TELEPON. Synthetic test data, not official verification. - POST https://use.apiindonesia.id/api/v1/util/qris/to-dynamic: Convert to dynamic QRIS. Adds an amount to static QRIS and recalculates CRC. - payload (string, required): Static QRIS payload. - amount (number, required): IDR amount. - fee (number): Optional fee. ## Bank Indonesia Rates Official Bank Indonesia exchange rates (transaction rates). Cached in D1 and refreshed via cron. BI attribution required. Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/kurs-bi/ Docs: https://docs.apiindonesia.id/en/#kurs-bi - GET https://use.apiindonesia.id/api/v1/kurs-bi/latest: Latest rates. Latest transaction rates for USD/EUR/SGD (default) or other currencies. - currencies (string): Comma-separated ISO codes, e.g. USD,EUR,SGD - GET https://use.apiindonesia.id/api/v1/kurs-bi/history: Rate history. Daily rate history for one currency (max 366 days). - currency (string): ISO code, default USD - start (string, required): YYYY-MM-DD - end (string, required): YYYY-MM-DD ## Halal (BPJPH) Search halal supervisors/businesses from the BPJPH portal. On-demand: fetches upstream on cache miss, 24h TTL per keyword. Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/halal/ Docs: https://docs.apiindonesia.id/en/#halal - GET https://use.apiindonesia.id/api/v1/halal: Search halal. Search by business or supervisor name. - q (string, required): Keyword (min. 2 chars) - limit (integer): Max 200, default 50 - GET https://use.apiindonesia.id/api/v1/halal/:id: Supervisor detail. Get one record by id_penyelia UUID. - id (string, required): Supervisor UUID ## BPOM Products Search BPOM registered products (NIE, name, ingredients). On-demand with 24h cache per keyword. Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/bpom/ Docs: https://docs.apiindonesia.id/en/#bpom - GET https://use.apiindonesia.id/api/v1/bpom: Search products. Search registered medicine/traditional/cosmetic products. - q (string, required): Keyword (min. 2 chars) - GET https://use.apiindonesia.id/api/v1/bpom/:nie: NIE detail. Get product by NIE (registration number). - nie (string, required): NIE e.g. DBL9424502004A1 ## Hijri Calendar Gregorian ↔ Hijri date conversion based on the Indonesian Hijri Calendar (Kemenag, MABIMS). Static 2026 data. Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/hijriah/ Docs: https://docs.apiindonesia.id/en/#hijriah - GET https://use.apiindonesia.id/api/v1/hijriah/konversi: Convert date. Convert one Gregorian date to Hijri. - tanggal (string, required): YYYY-MM-DD - GET https://use.apiindonesia.id/api/v1/hijriah/kalender: Year calendar. Full date mapping for one Gregorian year (currently 2026). - tahun (integer, required): Gregorian year, e.g. 2026 ## OJK Investment Investment data from Otoritas Jasa Keuangan (OJK): legal products and apps, plus the illegal investment list. - Legal mutual fund products - Legal investment apps - Illegal investment watchlist supervised by OJK - Source: Namchee/ojk-invest-api (MIT License) Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/ojk-invest/ Docs: https://docs.apiindonesia.id/en/#ojk-invest - GET https://use.apiindonesia.id/api/v1/ojk/products: List legal investment products. Returns a list of legal mutual fund products registered with OJK. Supports pagination and name search. - name (string): Search products by name (fuzzy match). - limit (number): Items per page (max 200, default 50). - offset (number): Number of items to skip (for pagination). - GET https://use.apiindonesia.id/api/v1/ojk/products/:id: Investment product detail. Returns details of a single mutual fund product by ID. - id (number): Product ID. - GET https://use.apiindonesia.id/api/v1/ojk/apps: List legal investment apps. Returns a list of legal investment apps registered with OJK. Supports pagination and name search. - name (string): Search apps by name (fuzzy match). - limit (number): Items per page (max 200, default 50). - offset (number): Number of items to skip (for pagination). - GET https://use.apiindonesia.id/api/v1/ojk/apps/:id: Investment app detail. Returns details of a single investment app by ID. - id (number): App ID. - GET https://use.apiindonesia.id/api/v1/ojk/illegals: List illegal investments. Returns a list of illegal investments flagged by OJK. Each entry may include aliases, addresses, phone numbers, emails, websites, entity type, activity types, and a description. Supports pagination and name search. - name (string): Search illegal investments by name (fuzzy match). - limit (number): Items per page (max 200, default 50). - offset (number): Number of items to skip (for pagination). - GET https://use.apiindonesia.id/api/v1/ojk/illegals/:id: Illegal investment detail. Returns details of a single illegal investment by ID. - id (number): Illegal investment ID. ## Astronomy Astronomy data computed from public NOAA/USNO formulas. - Sunrise and sunset, plus day length - Twilight - Moon phase and the upcoming moon phases - Eclipse predictions - Pure local computation, no external data source - Commercially safe to use Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/astronomi/ Docs: https://docs.apiindonesia.id/en/#astronomi - GET https://use.apiindonesia.id/api/v1/astronomi/sun: Sunrise & sunset. Returns sunrise, sunset, solar noon, and day length for a given lat/lon and date. Handles polar night / midnight sun. - lat (number, required): Decimal latitude (-90..90), e.g. -6.2. - lon (number, required): Decimal longitude (-180..180), e.g. 106.8. - tanggal (string): Date in YYYY-MM-DD. Defaults to today. - tz (string): ISO timezone offset, e.g. +07:00. Defaults to +00:00. - GET https://use.apiindonesia.id/api/v1/astronomi/twilight: Twilight times. Returns civil, nautical, and astronomical twilight boundaries for photography/observation. - lat (number, required): Decimal latitude. - lon (number, required): Decimal longitude. - tanggal (string): Date in YYYY-MM-DD. Defaults to today. - tz (string): ISO timezone offset, e.g. +07:00. - GET https://use.apiindonesia.id/api/v1/astronomi/moon: Moon phase. Returns the moon phase (illumination, phase name, age, distance) for a given date. - tanggal (string): Date in YYYY-MM-DD. Defaults to today. - GET https://use.apiindonesia.id/api/v1/astronomi/moon/next: Upcoming moon phases. Returns the next major moon phases (new/first quarter/full/last quarter), up to 12 ahead. - tanggal (string): Start date in YYYY-MM-DD. Defaults to today. - count (integer): Number of phases (1–12). Defaults to 4. - GET https://use.apiindonesia.id/api/v1/astronomi/gerhana: Eclipse predictions. Returns upcoming solar & lunar eclipses (approximation based on saros/draconic cycles). Dates & kinds are indicative. - tanggal (string): Start date in YYYY-MM-DD. Defaults to today. - days (integer): Horizon in days (1–1825). Defaults to 365. ## Trademarks (DJKI) Indonesian trademark data from DJKI. - 900,000+ registered marks with application numbers, owners, NICE classes, and consultants - The trademark journal (Berita Resmi Merek) to monitor new filings by your brand or competitors - Search by name, owner, and class Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/merek/ Docs: https://docs.apiindonesia.id/en/#merek - GET https://use.apiindonesia.id/api/v1/merek/search: Search registered trademarks. Returns registered trademarks matching a keyword. Search covers the mark-name column; use optional parameters to filter by owner, NICE class, or search within the owner column instead. - q (string, required): Search keyword, e.g. garuda. - page (integer): Page to retrieve. Defaults to 1. - limit (integer): Items per page. Defaults to 20. - owner (string): Filter by trademark owner name. - class (string): Filter by NICE class, e.g. 35. - in (string): Set in=owner to search the keyword within the owner column instead of the mark name. - GET https://use.apiindonesia.id/api/v1/merek/:appNumber: Trademark detail. Returns details of a single trademark by application number. If the number only appears in the publication journal (not yet registered), the response still returns 200 with journal data plus a journal_events list. - appNumber (string): Trademark application number, e.g. DID2019050403. - GET https://use.apiindonesia.id/api/v1/merek/journal: Search the trademark journal. Returns trademark applications published in the DJKI Berita Resmi Merek journal. Coverage is a rolling window of recent editions (roughly twice a month, last few months). Use it to monitor lookalike filings during the opposition window. - q (string): Search keyword, e.g. garuda. - page (integer): Page to retrieve. Defaults to 1. - limit (integer): Items per page. Defaults to 20. - journal_no (string): Filter by journal number, e.g. 140/P-M/VII/A/2026. ## Administrative Boundaries Province-to-village administrative GeoJSON. Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/wilayah-boundary/ Docs: https://docs.apiindonesia.id/en/#wilayah-boundary Source: open-admin-data/indonesia-administrative-divisions by jakkrapongt, version 2026.06, CC BY 4.0. Preserve attribution. - GET https://use.apiindonesia.id/api/v1/wilayah-boundary: List boundaries. Active boundary metadata. - level (string): province, regency, district, village. - page (integer): Page, default 1. - per_page (integer): Default 20, maximum 100. - GET https://use.apiindonesia.id/api/v1/wilayah-boundary/:code/metadata: Boundary metadata. Source, license, GeoJSON URL. - code (string, required): Dotted code, e.g. 31. - GET https://use.apiindonesia.id/api/v1/wilayah-boundary/:code: Boundary GeoJSON. GeoJSON application/geo+json; X-Data-* headers carry source, version, license and attribution. Illustrative geometry. - code (string, required): Dotted region code. ## Air Quality List only readings cached today; city lookup returns the latest reading, which may be older. Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/kualitas-udara/ Docs: https://docs.apiindonesia.id/en/#kualitas-udara Per-reading source is in source: BMKG-CAMS or AQICN/WAQI. Check cached_at and updated_at before treating readings as current. - GET https://use.apiindonesia.id/api/v1/kualitas-udara: Today cached readings. List may be empty. - GET https://use.apiindonesia.id/api/v1/kualitas-udara/:city: Latest city reading. Substring city lookup; 404 when absent. - city (string, required): City name. ## Food Prices & Anomaly Index (National Food Agency) Official National Food Agency (Bapanas) food-price data. - Monthly average consumer prices since 2021 and producer prices since 2019 - National and per-province coverage - The latest available open price edition ends in January 2026, not real-time prices - Price Anomaly Index (QIPA/AIPA/IFPA) to flag abnormal spikes and drops - Source: BPN Open Data Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/harga-pangan/ Docs: https://docs.apiindonesia.id/en/#harga-pangan - Source: National Food Agency, Open Data Pangan (data.badanpangan.go.id) - Data follows official BPN releases and may change with agency updates - API Indonesia adds an access and aggregation layer, not a replacement for official channels in government decision-making - GET https://use.apiindonesia.id/api/v1/harga-pangan: Food-price series overview. Returns a summary of every series (consumer/producer level x national/province region): commodity count, row count, and the available month range. - GET https://use.apiindonesia.id/api/v1/harga-pangan/harga: Monthly food prices. Returns monthly average food prices, filterable by level, region, commodity, province, and month range. Prices are integers in rupiah; "-" in the source becomes null. - tingkat (string): Set tingkat=konsumen or tingkat=produsen. - wilayah (string): Set wilayah=nasional or wilayah=provinsi. - komoditas (string): Filter by commodity name, e.g. beras premium (partial match). - provinsi (string): Filter by province name or code, e.g. aceh or 11. - dari (string): Start month, format yyyy-mm, e.g. 2025-01. - sampai (string): End month, format yyyy-mm, e.g. 2026-01. - page (integer): Page to retrieve. Defaults to 1. - limit (integer): Items per page. Default 20, max 100. - GET https://use.apiindonesia.id/api/v1/harga-pangan/anomali: Food-price anomaly index. Strategic commodity price-anomaly indices (QIPA, AIPA, IFPA) with status Alert (Low/High Price) or Normal. From National Food Agency monthly releases (check the latest date in the response); useful to flag abnormal price spikes or drops. - komoditas (string): Filter by commodity name, e.g. beras premium. - dari (string): Start month, format yyyy-mm. - sampai (string): End month, format yyyy-mm. - page (integer): Page to retrieve. Defaults to 1. - limit (integer): Items per page. Default 20. ## Transjakarta (Official PT Transportasi Jakarta GTFS) Transjakarta bus routes with the halte they serve, fares, and departure headways. - Bus routes with the halte they serve - Nearest-halte search from a coordinate - Fares - Per-route departure headways - Data: the official static GTFS published by PT Transportasi Jakarta, licensed CC BY 4.0, reusable commercially as long as the attribution is kept Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/transjakarta/ Docs: https://docs.apiindonesia.id/en/#transjakarta - Source: GTFS Static Transjakarta (c) 2026 by PT Transportasi Jakarta, licensed under the Creative Commons Attribution 4.0 International licence (CC BY 4.0) - Licence statement: https://ppid.transjakarta.co.id/informasi/berkala - Source file: https://gtfs.transjakarta.co.id/files/file_gtfs.zip - Attribution: the licence requires attribution, a licence link, and an indication of changes. Every successful response carries meta.attribution with the publisher, the licence name, a licence link, a link to the source file, the licence-statement page, and the statement of changes "Data diubah: dinormalisasi ke format JSON API Indonesia", so you do not have to assemble the credit yourself, just pass that object through in every redistribution - What API Indonesia changed: the GTFS was normalised to JSON, the stop_times rows were condensed into one stop list per route and direction, and shapes.txt (geometry) is not included in this version - GET https://use.apiindonesia.id/api/v1/transjakarta/rute: List routes. Returns the 240 Transjakarta routes. - Short and long names - Service description (BRT, integrated public transport, Mikrotrans, Transjabodetabek, tour bus) - GTFS route type - Corporate colour with its text colour - The number of unique halte the route serves, counted across both directions, not the number of rows - q (string): Partial, case-insensitive route-name search, e.g. blok (23 routes). - page (integer): Page to retrieve. Defaults to 1; a page past the offset ceiling answers 400 PAGINATION_LIMIT. - per_page (integer): Items per page. Defaults to 20, maximum 100. - GET https://use.apiindonesia.id/api/v1/transjakarta/rute/:id: Retrieve a route. One route in full. - The fares that apply to it (from fare_rules) - Its departure headways (per trip) - The halte list of both directions: "ke" for direction_id 0 and "kembali" for direction_id 1, each ordered by ascending stop_sequence - An unknown route answers 404 NOT_FOUND - The official release carries no street geometry, so per-segment travel distances are not available here - id (string, required): Route ID, e.g. 1, 1C, 10A, or JAK.79. - GET https://use.apiindonesia.id/api/v1/transjakarta/halte: List halte. Returns the 8,091 Transjakarta halte with code, name, coordinates, and GTFS stop type. The q filter partially matches name, code, or halte ID. - q (string): Search a halte by name, code, or ID, e.g. monas or B02475P. - page (integer): Page to retrieve. Defaults to 1. - per_page (integer): Items per page. Defaults to 20, maximum 100. - GET https://use.apiindonesia.id/api/v1/transjakarta/halte/nearby: Nearest halte. Finds the halte around a coordinate, nearest first, with the distance in metres (distance_m). - A bounding box is applied first and the exact great-circle distance second, so a 5 km radius stays cheap - Radius defaults to 1,000 metres (maximum 5,000) and limit to 20 (maximum 100) - A missing or non-numeric lat/lng, a radius outside 1-5,000, or a limit outside 1-100 answers 400 VALIDATION_ERROR - lat (number, required): Latitude of the reference point, -90 to 90, e.g. -6.172531. - lng (number, required): Longitude of the reference point, -180 to 180, e.g. 106.82315. - radius (integer): Search radius in metres, 1 to 5,000. Defaults to 1,000. - limit (integer): Maximum halte returned, 1 to 100. Defaults to 20. - GET https://use.apiindonesia.id/api/v1/transjakarta/halte/:id: Retrieve a halte. One halte plus the routes that call there, one row per route and direction pair (direction_id). A halte served in both directions appears twice, and a tourist halte can be served by several routes. An unknown halte answers 404 NOT_FOUND. - id (string, required): Halte ID, e.g. B02475P. - GET https://use.apiindonesia.id/api/v1/transjakarta/tarif: List fares. The six GTFS fares with their rupiah prices. - FP: Rp3,500, the flat Transjakarta fare - GR: Rp0, free on selected routes - PP: Rp20,000, plus PP2/PP3 for airport services - How many transfers are allowed (null means the fare covers a single journey) - This endpoint does not paginate, so meta carries the attribution only - GET https://use.apiindonesia.id/api/v1/transjakarta/jadwal: Departure headways. Departure frequencies from GTFS frequencies.txt. - One row per trip serving that route, with the operating window and the headway in seconds (900 seconds means a bus every 15 minutes) - The route filter narrows the result to one route; a route without frequency rows answers an empty list, not a 404 - Times are returned as the source "HH:MM:SS" strings, so night services can exceed 24:00:00 - rute (string): Route ID to narrow the result, e.g. 10A. - page (integer): Page to retrieve. Defaults to 1. - per_page (integer): Items per page. Defaults to 20, maximum 100. ## Indonesia POI (Overture Maps Places) Location category: 1,376,228 places (POI) in Indonesia from the Overture Maps Foundation Places theme, release 2026-10-21.0. - From restaurants, mosques, schools, government offices and hotels to shops, across 1,250 categories - Search by name prefix, category or city (locality) - Find the POI nearest to a coordinate - Fetch one POI in detail - Only places with an Overture confidence score of at least 0.5 are included, and every POI carries its score (0 to 1) - Only the Places theme is used (CDLA Permissive 2.0 and Apache 2.0), with no OpenStreetMap data Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/poi/ Docs: https://docs.apiindonesia.id/en/#poi - Source: Overture Maps Foundation, Places theme (overturemaps.org), release 2026-10-21.0 - File: public GeoParquet at s3://overturemaps-us-west-2/release/2026-10-21.0/theme=places/type=place/ - Licence: the Places theme is released under CDLA Permissive 2.0 (https://cdla.dev/permissive-2-0/) and Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) for the Foursquare records; AllThePlaces records are CC0 1.0 - Foursquare attribution: "Data from Foursquare. Copyright 2024 Foursquare Labs, Inc. All rights reserved. Available under Apache 2.0. Foursquare data was transformed to the Overture schema. Changed: 2026-03-18." together with the full content of the Foursquare NOTICE.txt (https://opensource.foursquare.com/places-notice-txt/), which is also included verbatim in meta.attribution.third_party_notices on every response - What API Indonesia changed: only records whose address has country=ID are kept, columns are trimmed to the served ones, control characters are removed from text, and the data is normalised to JSON - Not included: Kemendagri region codes, because that mapping would need boundary data from a differently licensed source - GET https://use.apiindonesia.id/api/v1/poi: Search & list POI. POI list ordered by name. - The q filter matches the START of the name, case-insensitively (q=masjid matches "Masjid Istiqlal", q=istiqlal does not) - category takes a key from /api/v1/poi/categories - locality (alias kota) matches the city/regency exactly as written in the Overture address, e.g. "Jakarta Selatan" or "Surabaya" - Filters can be combined - per_page is capped at 100 and the offset at 5,000 - q (string): Name prefix, e.g. monumen. - category (string): Overture category key, e.g. muslim_place_of_worship. - locality (string): City/regency as in the Overture address (alias: kota), e.g. Jakarta Pusat. - page (integer): Page to retrieve. Defaults to 1. - per_page (integer): Items per page. Defaults to 20, maximum 100. - GET https://use.apiindonesia.id/api/v1/poi/nearby: Nearest POI. POI around a coordinate, nearest first, with the distance in metres (distance_m). - Optionally filtered by category and minimum confidence (min_confidence) - Radius defaults to 1,000 metres (maximum 5,000) and limit to 20 (maximum 100) - A missing or non-numeric lat/lon, a radius outside 1-5,000, a limit outside 1-100, or a min_confidence outside 0-1 answers 400 VALIDATION_ERROR - lng is accepted as an alias for lon - lat (number, required): Latitude of the reference point, e.g. -6.1753924. - lon (number, required): Longitude of the reference point, e.g. 106.8271528. - radius (integer): Radius in metres, 1 to 5,000. Defaults to 1,000. - category (string): Category key, e.g. cafe. - min_confidence (number): Minimum Overture confidence, 0 to 1, e.g. 0.9. - limit (integer): Maximum POI returned, 1 to 100. Defaults to 20. - GET https://use.apiindonesia.id/api/v1/poi/categories: List categories. Every Overture category present in the Indonesian data (1,250 categories), most POI first, with basic_category, taxonomy hierarchy and POI count. The q filter partially matches the category key. - q (string): Part of the category key, e.g. restaurant. - GET https://use.apiindonesia.id/api/v1/poi/:id: Retrieve a POI. One POI by its Overture ID (GERS ID, stable across releases). An unknown ID answers 404 NOT_FOUND. - id (string, required): Overture ID, e.g. 58fef60b-6916-4905-a28b-9dec369147f1. ## IP Geolocation (DB-IP Lite) Look up the country, region, city, coordinates, and the network ASN and organisation of an IPv4 or IPv6 address. - Includes the caller's own address via /ip/me - Data: DB-IP Lite (IP to City Lite and IP to ASN Lite), licensed CC BY 4.0 and refreshed by DB-IP every month - DB-IP describes the Lite editions as subsets with reduced coverage and accuracy compared with its commercial database, so city-level results are approximate Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/ip-geolocation/ Docs: https://docs.apiindonesia.id/en/#ip-geolocation - Source: DB-IP Lite (https://db-ip.com/db/lite.php), licensed under the Creative Commons Attribution 4.0 International licence (CC BY 4.0) - Required credit: "IP Geolocation by DB-IP" (https://db-ip.com). Every successful response carries meta.attribution with the credit line, the licence, a licence link, a link to db-ip.com and the statement of changes - Your application's obligation: the DB-IP licence requires web applications that display or use the results to include a link back to DB-IP.com, for example the text "IP Geolocation by DB-IP" linked to https://db-ip.com, so that obligation also applies when your application shows results from this API - What API Indonesia changed: IP ranges and locations were normalised to JSON, and "ZZ" (private/reserved) ranges are reported as reserved: true with null location fields - API Indonesia is not affiliated with or endorsed by DB-IP - GET https://use.apiindonesia.id/api/v1/ip/:ip: Look up an IP address. Details for one IP address. - Country (ISO 3166-1 alpha-2 code), continent code, region, city, latitude/longitude - The ASN with its organisation name, and the DB-IP range the address falls in - IPv6 can be written directly in the path; IPv4-mapped addresses (::ffff:a.b.c.d) are looked up as IPv4 - An invalid address answers 400 and an address with no matching range answers 404; neither is charged - ip (string, required): An IPv4 or IPv6 address, e.g. 36.66.0.1 or 2001:4860:4860::8888. - GET https://use.apiindonesia.id/api/v1/ip/me: Look up the caller's IP. Same as /ip/{ip}, for the address that called the API (the CF-Connecting-IP header). The answer still comes from the DB-IP tables, not from Cloudflare's own geolocation. Never edge-cached. On the RapidAPI surface the caller address is the RapidAPI gateway, so this endpoint answers 400 UNSUPPORTED there; use /ip/{ip}. - POST https://use.apiindonesia.id/api/v1/ip/batch: Look up many IP addresses. Up to 100 addresses in one call, answered in input order. - An invalid or uncovered address gets a per-item error object instead of failing the whole call - Priced per CALL, not per IP: 100 credits for 1 to 100 addresses (1 credit per IP on a full batch) - For fewer than 50 addresses, /ip/{ip} (2 credits per call) is cheaper - A body with no valid address answers 400 and is not charged - ips (array, required): List of 1-100 IPv4/IPv6 addresses. ## Indonesian Legal Entity Identifiers (GLEIF Golden Copy) Compliance & KYB category: Legal Entity Identifiers (LEI, ISO 17442) for legal entities whose legal or headquarters address is in Indonesia. - Legal and other names - Entity status and LEI registration status - Legal form (ELF code) - Legal and headquarters addresses - Registration-authority number - Registration and next-renewal dates - The managing LOU - Direct and ultimate parent, including parents abroad - Data: the GLEIF Golden Copy files, licensed CC0 Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/lei/ Docs: https://docs.apiindonesia.id/en/#lei - Source: the GLEIF Golden Copy (LEI-CDF and RR-CDF files, CSV format) from https://goldencopy.gleif.org - Licence: CC0 1.0 per the terms of use at https://www.gleif.org/en/meta/lei-data-terms-of-use - What API Indonesia changed: the data is filtered to entities with an Indonesian legal or headquarters address plus their direct/ultimate parents and their foreign subsidiaries, then normalised to JSON - Attribution: every successful response carries meta.attribution with the source, the licence and file_date (the publish time of the golden copy used) - Not included: parent reporting exceptions and ELF code names - API Indonesia is not affiliated with GLEIF and this service is not endorsed by GLEIF - GET https://use.apiindonesia.id/api/v1/lei: Search legal entities. Searches the 1,644 entities with an Indonesian legal or headquarters address (golden copy snapshot of 1 November 2026). - q matches the legal name and other/transliterated names through a full-text index (word prefixes) - The provinsi filter applies to both the legal and headquarters address - Some GLEIF records still use retired island codes (for example ID-JW for Java) and those are not rolled up into provinces - q (string): Words from the entity name, e.g. pertamina. - status (string): Entity status: ACTIVE, INACTIVE or NULL. - registration_status (string): LEI registration status, e.g. ISSUED or LAPSED. - kota (string): Part of the city on the legal or headquarters address, e.g. surabaya. City spelling follows GLEIF records ("Jakarta Selatan" or "SOUTH JAKARTA"). - provinsi (string): ISO 3166-2 code (ID-JK) or province name (DKI Jakarta, Jawa Timur). - page (integer): Page to retrieve. Defaults to 1. - per_page (integer): Items per page. Defaults to 20, maximum 100. - GET https://use.apiindonesia.id/api/v1/lei/:lei: Retrieve an LEI. One entity in full. - Legal and headquarters addresses - Registration number (registration_authority.id from the GLEIF authority list + entity_id) - Registration status and managing LOU - direct_parent and ultimate_parent (null when no relationship record exists) - An LEI with the wrong shape or an invalid ISO 17442 checksum answers 400 INVALID_LEI; a valid LEI outside the dataset answers 404 - lei (string, required): 20-character LEI, e.g. 254900NDAKGNZ2IBBL45. - GET https://use.apiindonesia.id/api/v1/lei/:lei/children: List children. Entities that report this LEI as their direct parent (type=direct, the default), ultimate parent (type=ultimate), or either (type=all). For a parent abroad, only the children held in this dataset (entities with an Indonesian address) are listed. - lei (string, required): Parent LEI, e.g. 529900FWX0GRR7WG5W79. - type (string): direct (default), ultimate or all. - page (integer): Page to retrieve. Defaults to 1. - per_page (integer): Items per page. Defaults to 20, maximum 100. ## World Geo: Countries, Cities & Time Zones (GeoNames) World geography reference category: countries, cities, and time zones. - 252 countries with ISO2/ISO3 codes, capital, currency, languages, calling code and population - 69,991 cities (cities5000: population above 5,000 or an administrative seat) with coordinates, first-level division, population and time zone - Nearest-city search from a coordinate - 418 IANA time zones with GMT/DST offsets and the current local time - Data: the official GeoNames dump, licensed CC BY 4.0, so it may be used commercially as long as the attribution is kept Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/geo/ Docs: https://docs.apiindonesia.id/en/#geo - Source: GeoNames (https://www.geonames.org), the daily dump at https://download.geonames.org/export/dump/ (countryInfo.txt, cities5000.zip, admin1CodesASCII.txt, timeZones.txt) - Licence: Creative Commons Attribution 4.0 International (CC BY 4.0) per the dump readme.txt - Attribution: every successful response carries meta.attribution with the GeoNames credit and link, the licence name and link, a link to the source files and the statement of changes, so you only need to pass that object through in any redistribution - What API Indonesia changed: the dump files were normalised to JSON, first-level division names were joined onto the cities, and the local time on the time zone endpoint is computed by API Indonesia - Not included: the alternatenames column and the alternateNamesV2 file - Not used: the GeoNames web services and the Zillow data - GET https://use.apiindonesia.id/api/v1/geo/negara: List countries. Returns the 252 countries and territories in GeoNames countryInfo, ordered by name: ISO2, ISO3, numeric code, capital, continent, area, population, currency, calling code (without +), languages, TLD, postal code format and neighbours. - q (string): Partial country or capital name, or an exact ISO2/ISO3 code. - continent (string): Continent filter: AF, AN, AS, EU, NA, OC, SA. - page (integer): Page. Defaults to 1. - per_page (integer): Items per page. Defaults to 50, maximum 300 (every country in one page). - GET https://use.apiindonesia.id/api/v1/geo/negara/:code: Retrieve a country. One country by ISO2 or ISO3 code (case-insensitive), with its time zones and the number of its cities in the cities5000 data. An unknown code answers 404 NOT_FOUND. - code (string, required): ISO2 or ISO3 code, e.g. ID or IDN. - GET https://use.apiindonesia.id/api/v1/geo/kota: Search cities. Cities from GeoNames cities5000, largest population first. q matches the PREFIX of the name or ASCII name, case-insensitively ("sao" finds São Paulo); translated names (e.g. Indonesian names for foreign cities) are not available yet. - q (string): City name prefix, e.g. jak. - country (string): ISO2 country code, e.g. ID (485 cities). - page (integer): Page. Defaults to 1; a page past the offset ceiling answers 400 PAGINATION_LIMIT. - per_page (integer): Items per page. Defaults to 20, maximum 100. - GET https://use.apiindonesia.id/api/v1/geo/kota/nearby: Nearest cities. Cities around a coordinate, nearest first, with the great-circle distance in kilometres (distance_km). Radius defaults to 50 km (maximum 500) and limit to 20 (maximum 100). Searches across the 180° meridian are handled. - lat (number, required): Latitude, -90 to 90. - lon (number, required): Longitude, -180 to 180 (lng is accepted too). - radius (number): Radius in km, maximum 500. Defaults to 50. - limit (integer): Number of cities, 1 to 100. Defaults to 20. - GET https://use.apiindonesia.id/api/v1/geo/kota/:geonameid: Retrieve a city. One city by geonameid, with the country name, elevation, DEM, GeoNames modification date and its time zone offsets. An unknown id answers 404 NOT_FOUND. - geonameid (integer, required): GeoNames geonameid, e.g. 1642911 (Jakarta). - GET https://use.apiindonesia.id/api/v1/geo/zona-waktu: List time zones. All 418 time zones in GeoNames timeZones.txt (or one country with country), with the GMT offset on 1 January, the DST offset on 1 July of the same year (offset_year) and the raw offset without DST, in hours. - country (string): ISO2 country code, e.g. ID. - GET https://use.apiindonesia.id/api/v1/geo/zona-waktu/:tz: Time zone with local time. One IANA time zone with the GeoNames offsets and the CURRENT local time, computed per request from the runtime IANA data (not cached): local_time, utc_offset and is_dst. The id may contain slashes (Asia/Jakarta) and is case-insensitive. - tz (string, required): IANA time zone id, e.g. Asia/Jakarta. ## Indonesia Toll Roads: Toll Gates, Roads & Tariffs Transport category: toll gates, toll roads, and official BPJT tariffs. - 558 toll gates with lat/lng coordinates across 16 provinces - The 77 toll roads that BPJT lists as operating or partly operating (3,151.81 km in operation, 55 toll road companies), with operator, length, status, operating decree (SK operasi) date and PPJT history - 1,485 official BPJT tariff rows per origin-destination for vehicle classes I, II-III and IV-V - Nearest-gate search from a coordinate - Every gate has a validasi field: terverifikasi (482 gates, name confirmed by an independent source) or osm (76 gates, OpenStreetMap only) Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/tol/ Docs: https://docs.apiindonesia.id/en/#tol - Gate coordinate source: OpenStreetMap (tag barrier=toll_booth), (c) OpenStreetMap contributors, licensed under the Open Database License (ODbL 1.0), so the derived gate data is also ODbL and every response carries meta.attribution - Toll road and tariff source: the public listings of Badan Pengatur Jalan Tol (BPJT), Ministry of Public Works (bpjt.pu.go.id) for operator/BUJT, length, status, operating decree date, PPJT, and tariffs - Wikipedia is used only for investment values (5 roads, with the source link in nilai_investasi_sumber) and opening dates in the sejarah field - Validation: unnamed OSM points are dropped unless a named Jasa Marga gate lies within 500 m; a gate must be inside an Indonesian regency/city and within 1 km of an OSM toll carriageway; same-name points within 2 km are merged - Terverifikasi: the gate name also matches Jasa Marga data within 1 km (248 gates, median difference 22 m), a Wikipedia exit list, or the BPJT tariff sheet - Limits: gates not yet mapped in OSM are missing (for example GT Kalikangkung and GT Cikatama), toll roads still under construction are not in the public BPJT list, and for older roads the operating decree date can be a later decree rather than the first opening date - GET https://use.apiindonesia.id/api/v1/tol/ruas: List toll roads. Returns the 77 toll roads in the BPJT list with operator (BUJT), status (operasi or operasi sebagian), total and operating length, provinces, operating decree date, investment value when available, gate count, BPJT road code, type (intercity/urban) and the PSN flag. Ordered by name. - q (string): Partial search on road name or operator, e.g. cikampek. - status (string): Status filter: operasi or operasi sebagian. - provinsi (string): 2-digit Kemendagri province code, e.g. 32. Any other format answers 400 VALIDATION_ERROR. - page (integer): Page to retrieve. Defaults to 1; a page past the offset ceiling answers 400 PAGINATION_LIMIT. - per_page (integer): Items per page. Defaults to 20, maximum 100. - GET https://use.apiindonesia.id/api/v1/tol/ruas/:id: Retrieve a toll road. One toll road with its history (sejarah: operating decree and PPJT from BPJT, plus the Wikipedia opening date when available), its sources, every toll gate on the road and the BPJT tariffs for it. An unknown road answers 404 NOT_FOUND. - id (string, required): Road ID from GET /tol/ruas, e.g. kanci-pejagan. - GET https://use.apiindonesia.id/api/v1/tol/gerbang: List toll gates. Returns the 558 toll gates with coordinates, toll road, province, regency/city, operator and validation status. Filters can be combined. - q (string): Partial gate-name search, e.g. ciawi. - ruas (string): Road ID, e.g. jakarta-bogor-ciawi. - provinsi (string): 2-digit province code, e.g. 32. - kabupaten (string): Regency/city code like 32.16. - validasi (string): terverifikasi or osm. Any other value answers 400 VALIDATION_ERROR. - page (integer): Page to retrieve. Defaults to 1; a page past the offset ceiling answers 400 PAGINATION_LIMIT. - per_page (integer): Items per page. Defaults to 20, maximum 100. - GET https://use.apiindonesia.id/api/v1/tol/gerbang/nearby: Nearest toll gates. Finds the toll gates around a coordinate, nearest first, with the distance in metres (distance_m). Radius defaults to 10,000 metres (maximum 50,000) and limit to 10 (maximum 50); a missing or non-numeric lat/lng, a radius outside 1-50,000 or a limit outside 1-50 answers 400 VALIDATION_ERROR. - lat (number, required): Latitude of the reference point, e.g. -6.2. - lng (number, required): Longitude of the reference point, e.g. 106.8. - radius (integer): Radius in metres, 1 to 50,000. Defaults to 10,000. - limit (integer): Maximum gates returned, 1 to 50. Defaults to 10. - GET https://use.apiindonesia.id/api/v1/tol/gerbang/:id: Retrieve a toll gate. One gate with its validation details: number of merged OSM points, distance to the OSM toll carriageway (jarak_ke_tol_m), validation notes (checks passed and confirming sources) and the OSM element IDs. An unknown gate answers 404 NOT_FOUND. - id (string, required): Gate ID from GET /tol/gerbang, e.g. ciawi-jakarta-bogor-ciawi. - GET https://use.apiindonesia.id/api/v1/tol/tarif: Toll tariffs. Returns the 1,485 tariff rows from the BPJT "Data Tarif Jalan Tol" sheet: origin, destination and the rupiah tariff for classes I, II-III and IV-V (classes II and III, and IV and V, share a tariff as in the source). Tariffs change by ministerial decree, so check BPJT for adjustments after the snapshot date. - ruas (string): Road ID, e.g. kanci-pejagan. - asal (string): Partial origin search, e.g. cikupa. - tujuan (string): Partial destination search. - q (string): Search the road name as written in the tariff sheet. - page (integer): Page to retrieve. Defaults to 1; a page past the offset ceiling answers 400 PAGINATION_LIMIT. - per_page (integer): Items per page. Defaults to 20, maximum 100. ## Indonesia Airports: Coordinates, ICAO/IATA Codes & Runways Transport category: 440 airports across 38 provinces, with ICAO and IATA codes. - lat/lng coordinates, regency/city and province (Kemendagri codes), elevation, size, scheduled service - Runway data for 302 airports - The international status set by KM 37 Tahun 2025 (36 airports) - Every airport matched against the official Directorate General of Civil Aviation list and sitting within 3 km of the official position (median 0.23 km) - Nearest-airport search from a coordinate and direct lookup by ICAO/IATA code Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/bandara/ Docs: https://docs.apiindonesia.id/en/#bandara - Sources: OurAirports (public domain), OpenStreetMap (aeroway=aerodrome, (c) OpenStreetMap contributors, ODbL 1.0) and Wikidata (CC0) - The international status follows KM 37 Tahun 2025 on international airports - The Directorate General of Civil Aviation list (597 airports) is used only for validation: an airport is included when it matches the official list and its coordinate is within 3 km of the official position; the official list itself is not copied - validasi terverifikasi (322 airports) means at least two open sources agree within 2 km; sebagian (118) means a single open source - Not included yet: 157 official airports, namely 120 that are not in any open source (mostly small pioneer airstrips in Papua) and 37 that failed the 3 km check - Because part of the data comes from OpenStreetMap, the derived data follows ODbL and every response carries meta.attribution - GET https://use.apiindonesia.id/api/v1/bandara: List airports. Returns the 440 airports with ICAO/IATA codes, region, coordinates, elevation, size, scheduled service, international status and validation status. Filters can be combined. - q (string): Partial search on airport or regency/city name, or an exact ICAO/IATA code, e.g. supadio or PNK. - provinsi (string): 2-digit Kemendagri province code, e.g. 61. Any other format answers 400 VALIDATION_ERROR. - kabupaten (string): Regency/city code like 61.12. - internasional (boolean): true for the 36 international airports (KM 37 Tahun 2025), false for the rest. - jenis (string): Airport size: besar, sedang or kecil. - validasi (string): terverifikasi or sebagian. - page (integer): Page to retrieve. Defaults to 1; a page past the offset ceiling answers 400 PAGINATION_LIMIT. - per_page (integer): Items per page. Defaults to 20, maximum 100. - GET https://use.apiindonesia.id/api/v1/bandara/nearby: Nearest airports. Finds airports around a coordinate, nearest first, with the distance in metres (distance_m). Radius defaults to 50,000 metres (maximum 300,000) and limit to 5 (maximum 50); invalid parameters answer 400 VALIDATION_ERROR. - lat (number, required): Latitude of the reference point, e.g. -0.03. - lng (number, required): Longitude of the reference point, e.g. 109.33. - radius (integer): Radius in metres, 1 to 300,000. Defaults to 50,000. - limit (integer): Maximum airports returned, 1 to 50. Defaults to 5. - GET https://use.apiindonesia.id/api/v1/bandara/:kode: Retrieve an airport. One airport by ICAO code, IATA code or id, with its runways (direction, length, width, surface), operator when available, Wikidata ID, validation notes (distances between sources and to the official position) and coordinate source. An unknown code answers 404 NOT_FOUND. - kode (string, required): ICAO code (WIOO), IATA code (PNK) or id (wioo). ## Indonesia Ports: Sea and Ferry Ports (National Port Master Plan) Transport category: 1,082 ports from the National Port Master Plan (RIPN). - 637 sea ports with their official hierarchy (28 utama, 164 pengumpul, 165 pengumpan regional, 279 pengumpan lokal) - 445 ferry ports with class I/II/III - Every port has its province and regency/city (Kemendagri codes) - 468 ports have validated coordinates, 133 have a UN/LOCODE and 84 have World Port Index details - Nearest-port search from a coordinate Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/pelabuhan/ Docs: https://docs.apiindonesia.id/en/#pelabuhan - List, hierarchy and ferry-class source: KP 432 Tahun 2017 on the National Port Master Plan as amended by KM 30 Tahun 2020 (regulations are not copyrighted) - Hierarchy uses the 2022 period column; the 2017, 2027 and 2037 values are included too - Not applied yet: the KM 172 Tahun 2021 amendment and most of KM 217 Tahun 2022 - Coordinate sources: OpenStreetMap ((c) OpenStreetMap contributors, ODbL 1.0), the NGA World Port Index (public domain), UN/LOCODE (UNECE) and Wikidata (CC0), only when they pass validation - terverifikasi (178) means at least two independent sources agree within 5 km and the province matches RIPN; sebagian (290) means one source with matching province and regency/city - Other ports are listed without coordinates (lat/lng null, validasi tanpa_koordinat) rather than with an estimate - Every response carries meta.attribution - GET https://use.apiindonesia.id/api/v1/pelabuhan: List ports. Returns the 1,082 sea and ferry ports with hierarchy or class, region, UN/LOCODE, coordinates when validated and validation status. Filters can be combined. - q (string): Partial search on port or regency/city name, or an exact UN/LOCODE, e.g. priok or IDJKT. - provinsi (string): 2-digit Kemendagri province code, e.g. 31. - kabupaten (string): Regency/city code like 31.72. - jenis (string): laut or penyeberangan. - hierarki (string): utama, pengumpul, pengumpan_regional or pengumpan_lokal (sea ports). - validasi (string): terverifikasi, sebagian or tanpa_koordinat. - koordinat (boolean): true for ports with coordinates only, false for ports without. - page (integer): Page to retrieve. Defaults to 1; a page past the offset ceiling answers 400 PAGINATION_LIMIT. - per_page (integer): Items per page. Defaults to 20, maximum 100. - GET https://use.apiindonesia.id/api/v1/pelabuhan/nearby: Nearest ports. Finds ports with coordinates around a coordinate, nearest first, with the distance in metres (distance_m). Radius defaults to 25,000 metres (maximum 200,000) and limit to 10 (maximum 50); ports without coordinates are not included. Invalid parameters answer 400 VALIDATION_ERROR. - lat (number, required): Latitude of the reference point, e.g. -5.93. - lng (number, required): Longitude of the reference point, e.g. 105.99. - radius (integer): Radius in metres, 1 to 200,000. Defaults to 25,000. - limit (integer): Maximum ports returned, 1 to 50. Defaults to 10. - jenis (string): laut or penyeberangan. - GET https://use.apiindonesia.id/api/v1/pelabuhan/:id: Retrieve a port. One port by id or UN/LOCODE, with its 2017/2027/2037 hierarchy, World Port Index details when available, validation notes, coordinate source and legal basis. An unknown id answers 404 NOT_FOUND. - id (string, required): Port ID (tg-priok-jakarta-utara) or UN/LOCODE (IDJKT). ## Indonesia Bus Terminals: Type A and Other Terminals with Coordinates Transport category: 614 bus terminals in 36 provinces. - 127 type A terminals follow Permenhub PM 1 Tahun 2025, with their managing BPTD - 487 other terminals come from open sources - Every terminal has its province and regency/city (Kemendagri codes) - Coordinates when they pass validation, with a validation status - Nearest-terminal search from a coordinate Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/terminal/ Docs: https://docs.apiindonesia.id/en/#terminal - Source of the type A terminal list and their managing BPTD: Permenhub PM 1 Tahun 2025 (regulations are not copyrighted) - Addresses and coordinates of 7 Jabodetabek type A terminals come from KM 175 Tahun 2019 - Sources for other terminals and coordinates: OpenStreetMap ((c) OpenStreetMap contributors, ODbL 1.0), Wikidata (CC0) and Wikipedia (CC BY-SA 4.0) - Types B and C are not published because no openly licensed national list exists, so tipe is null for terminals other than type A - Validation: terverifikasi (171) means at least two sources agree within 1 km, or a type A terminal matches an open source in the same regency/city; sebagian (412) means one open source; tanpa_koordinat (31) are type A terminals without a validated coordinate (lat/lng null, never estimated) - Every response carries meta.attribution - GET https://use.apiindonesia.id/api/v1/terminal: List bus terminals. Returns the 614 bus terminals with type (A or null), managing BPTD for type A, region, coordinates when validated and validation status. Filters can be combined. - q (string): Partial search on terminal or regency/city name, e.g. leuwipanjang. - provinsi (string): 2-digit Kemendagri province code, e.g. 32. - kabupaten (string): Regency/city code like 32.73. - tipe (string): Only A (type A terminals). Other values answer 400. - validasi (string): terverifikasi, sebagian or tanpa_koordinat. - koordinat (boolean): true for terminals with coordinates only, false for terminals without. - page (integer): Page to retrieve. Defaults to 1; a page past the offset ceiling answers 400 PAGINATION_LIMIT. - per_page (integer): Items per page. Defaults to 20, maximum 100. - GET https://use.apiindonesia.id/api/v1/terminal/nearby: Nearest terminals. Finds terminals with coordinates around a coordinate, nearest first, with the distance in metres (distance_m). Radius defaults to 10,000 metres (maximum 100,000) and limit to 10 (maximum 50); terminals without coordinates are not included. Invalid parameters answer 400 VALIDATION_ERROR. - lat (number, required): Latitude of the reference point, e.g. -6.2125. - lng (number, required): Longitude of the reference point, e.g. 106.9525. - radius (integer): Radius in metres, 1 to 100,000. Defaults to 10,000. - limit (integer): Maximum terminals returned, 1 to 50. Defaults to 10. - GET https://use.apiindonesia.id/api/v1/terminal/:id: Retrieve a terminal. One terminal with address (when available), Wikidata ID, validation notes, coordinate source and legal basis. An unknown terminal answers 404 NOT_FOUND. - id (string, required): Terminal ID from the list endpoint, e.g. terminal-leuwipanjang-kota-bandung. ## Indonesia Railway Stations: Codes, Coordinates and Status Transport category: 1,129 stations in 13 provinces. - 660 active stations: 449 heavy rail, 155 KRL commuter, 36 LRT, 13 MRT, 4 airport rail, 3 high-speed rail - 469 inactive stations that still have coordinates - KAI station code (993 stations), elevation (781), Daop/Divre (957) - Operator and region with Kemendagri codes - Whether the station appears in an operator passenger list (518) - Nearest-station search from a coordinate Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/stasiun/ Docs: https://docs.apiindonesia.id/en/#stasiun - Sources: OpenStreetMap ((c) OpenStreetMap contributors, ODbL 1.0), Wikidata (CC0) and Indonesian Wikipedia (CC BY-SA 4.0) - Passenger station lists from KAI, KAI Commuter, MRT Jakarta and LRT Jabodebek are used only for validation (confirming codes and whether a station serves passengers) and are not copied - Station codes that conflict between sources and cannot be confirmed are left null - Validation: terverifikasi means at least two coordinate sources agree within 1 km with a matching code or name (491 of the 660 active stations); sebagian means one coordinate source or no match in an operator list - Inactive stations are included when they have coordinates; filter status=aktif for operating stations - Every response carries meta.attribution - GET https://use.apiindonesia.id/api/v1/stasiun: List stations. Returns the 1,129 stations with code, type, operator, Daop/Divre, status, region, coordinates and validation status. The jenis filter also matches services, so jenis=krl includes heavy-rail stations served by KRL. - q (string): Partial station-name search or an exact station code, e.g. gambir or GMR. - provinsi (string): 2-digit Kemendagri province code, e.g. 32. - kabupaten (string): Regency/city code like 32.73. - jenis (string): kereta_api, krl, mrt, lrt, kereta_cepat or kereta_bandara. - status (string): aktif or nonaktif. - validasi (string): terverifikasi, sebagian or tanpa_koordinat. - page (integer): Page to retrieve. Defaults to 1; a page past the offset ceiling answers 400 PAGINATION_LIMIT. - per_page (integer): Items per page. Defaults to 20, maximum 100. - GET https://use.apiindonesia.id/api/v1/stasiun/nearby: Nearest stations. Finds stations around a coordinate, nearest first, with the distance in metres (distance_m). Only active stations by default; status=semua includes inactive ones. Radius defaults to 5,000 metres (maximum 100,000) and limit to 10 (maximum 50). Invalid parameters answer 400 VALIDATION_ERROR. - lat (number, required): Latitude of the reference point, e.g. -6.1767. - lng (number, required): Longitude of the reference point, e.g. 106.8306. - radius (integer): Radius in metres, 1 to 100,000. Defaults to 5,000. - limit (integer): Maximum stations returned, 1 to 50. Defaults to 10. - jenis (string): Filter by type or service, e.g. krl. - status (string): Defaults to aktif; semua to include inactive stations. - GET https://use.apiindonesia.id/api/v1/stasiun/:kode: Retrieve a station. One station by KAI station code or ID, with its service list, elevation, Wikidata ID, validation notes and coordinate source. When a code is shared by more than one row, the active station wins. An unknown code answers 404 NOT_FOUND. - kode (string, required): KAI station code or ID, e.g. GMR. ## UMK 2026: Regency and City Minimum Wages in 8 Provinces UMK 2026 for 163 regencies and cities in 11 provinces, each row citing its governor decree. - Sumatera Utara 22, Jawa Barat 27, Jawa Tengah 35, Jawa Timur 38, Banten 8, DIY 5, Kalimantan Barat 13, Kaltim 9, Bali 4, Kepri 1, Lampung 1 - DKI Jakarta has no UMK, only a provincial UMP, so there is no row for code 31 - Each row carries the wage, the decree number and date, and the source URL - Sorted by province then regency/city; use sort=umk_asc or umk_desc to compare figures - More provinces are being added, so check meta.total before treating a result as complete Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/umk/ Docs: https://docs.apiindonesia.id/en/#umk - Source: governor decrees on regency and city minimum wages for 2026 (regulations are not copyrighted) - Figures are read from the official decree copies; the decree number sits in dasar_hukum on every row - DKI Jakarta sets only a provincial UMP, so code 31 does not appear; its figure is in the ump product - The current coverage is 11 provinces and 163 regencies/cities, the rest follow in later releases - Every response carries meta.attribution - GET https://use.apiindonesia.id/api/v1/umk: List UMK by regency/city. Returns regency and city minimum wages for the requested year, defaulting to the latest year in the dataset. Province filter, name search and value sort can be combined; the result count is in meta.total. - tahun (integer): Year, e.g. 2026. Defaults to the latest year available. - provinsi (string): 2-digit Kemendagri province code, e.g. 32. - q (string): Partial search on the regency/city name, e.g. bekasi. - sort (string): umk_asc or umk_desc to sort by value; the default order is province then regency/city. - page (integer): Page to retrieve. Defaults to 1; a page past the offset ceiling answers 400 PAGINATION_LIMIT. - per_page (integer): Items per page. Defaults to 20, maximum 100. - GET https://use.apiindonesia.id/api/v1/umk/:kode: Retrieve one regency/city UMK. Returns the latest wage for one regency/city code, with the validation note and the history of earlier years (empty when only one year exists). A region that only uses the provincial UMP answers 404. - kode (string): Regency/city code like 32.75. ## HS Codes and MFN Import Duty (BTKI 2022) 11,545 eight-digit HS codes from BTKI 2022 (PMK 26/PMK.010/2022) with the MFN import duty rate. - 99 chapters, each with its 4-digit tariff heading and Indonesian and English descriptions - Search by code (0901, 8517.13.00) or by words in the description, then filter by chapter or heading - The duty is given as a number (bea_masuk_mfn) and as the annex text (bea_masuk_raw) - Descriptions were parsed from an OCR of the annex, so some words are misread - Later PMK rate changes are not applied yet; check the regulation before using it for customs Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/hs/ Docs: https://docs.apiindonesia.id/en/#hs - Source: BTKI 2022, annex of PMK 26/PMK.010/2022 (regulations are not copyrighted) - The annex was parsed from the official JDIH Kemenkeu PDF; the annex page is recorded in validasi_catatan on every row - Satuan is filled only when the annex states a unit, so most rows have null - Later PMK rate changes are not applied yet; for customs work always check the current regulation - Every response carries meta.attribution - GET https://use.apiindonesia.id/api/v1/hs/bab: List BTKI chapters. Returns the 99 BTKI chapters with their section, Indonesian and English descriptions and the number of tariff lines per chapter. Useful for building navigation before filtering codes. - GET https://use.apiindonesia.id/api/v1/hs: List HS codes. Returns eight-digit HS codes with their description, heading, chapter and MFN duty. q accepts a 2 to 8 digit code (dots ignored) or words from the description; the bab and pos filters can be combined. - q (string): An HS code (2 to 8 digits, dots ignored) or words from the description, e.g. 0901 or kopi. - bab (string): 2-digit chapter, e.g. 09. - pos (string): 4-digit tariff heading, e.g. 0901. - page (integer): Page to retrieve. Defaults to 1; a page past the offset ceiling answers 400 PAGINATION_LIMIT. - per_page (integer): Items per page. Defaults to 20, maximum 100. - GET https://use.apiindonesia.id/api/v1/hs/:kode: Retrieve one HS code. Returns one HS code with its MFN duty, the validation note and its chapter detail. The code may be written with dots (8517.13.00) or without; an unknown code answers 404. - kode (string): Eight-digit HS code, e.g. 8517.13.00. ## PLN Electricity Tariffs and Subsidised Fuel Prices PLN electricity tariffs for 37 classes and subsidised or assigned fuel prices, as of a date. - 37 tariff classes from Permen ESDM 7/2024, with block tariffs and a fixed charge for subsidised classes - Quarterly tariff adjustments from Q1 2023 to Q4 2026 (245 rows), matched to the requested date - 20 fuel price periods since 2014 for Pertalite, Solar/Biosolar, kerosene, Premium and 3 kg LPG - Non-subsidised fuel such as Pertamax and Dexlite is not included - The date defaults to today (WIB); every row carries its legal basis and source URL Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/energi/ Docs: https://docs.apiindonesia.id/en/#energi - Sources: Permen ESDM 7/2024 for the base electricity tariffs, ESDM/PLN press releases for the quarterly adjustments, and Kepmen ESDM for subsidised and assigned fuel prices (regulations are not copyrighted) - When a date is covered by both a regulation row and a quarterly adjustment row, the row with the latest periode_mulai wins - Subsidised classes carry tiered blocks in detail; other classes use a single rate per kWh - Only JBT, JBKP and assigned prices are recorded; general fuel prices are not set by regulation, so they are not included - Every response carries meta.attribution - GET https://use.apiindonesia.id/api/v1/energi/tarif-listrik: Electricity tariffs in force. Returns electricity tariffs in force on a date (default today, WIB), one row per class and power limit. The golongan filter matches partially; kategori filters household, business, industrial or government classes. - tanggal (string): Date as YYYY-MM-DD, defaults to today (WIB). - golongan (string): Tariff class, partial match, e.g. R-1. - kategori (string): rumah tangga, bisnis, industri or pemerintah. - GET https://use.apiindonesia.id/api/v1/energi/tarif-listrik/riwayat: Electricity tariff history for one class. Returns every tariff period for one class, ordered by class, power limit and period start. The golongan parameter is required; an unknown class answers 404. - golongan (string): Tariff class, partial match, e.g. R-1. Required. - GET https://use.apiindonesia.id/api/v1/energi/bbm: Subsidised fuel prices in force. Returns subsidised and assigned fuel prices in force on a date (default today, WIB), ordered by product, with the unit, the selling area and the legal basis. - tanggal (string): Date as YYYY-MM-DD, defaults to today (WIB). - GET https://use.apiindonesia.id/api/v1/energi/bbm/riwayat: Fuel price history. Returns every fuel price period, or a single product when produk is given (partial match, e.g. pertalite), ordered by product then start date. - produk (string): Product name, partial match, e.g. pertalite. ## Public Facilities: Health Centres, Fuel Stations, Police and Worship 75,627 public facilities across Indonesia with category, region codes and coordinates. - 10,354 puskesmas (health centres) from the KMK HK.01.07/MENKES/1206/2026 register; 1,656 have coordinates, the rest have lat/lng null - 4,827 fuel stations (Pertamina including Pertashop, Shell, BP), 2,659 police offices, 318 fire stations, 854 post offices - 56,615 places of worship: mosques, prayer rooms, churches, temples, viharas, shrines, chapels - Filter by category, subcategory, province, regency, validation status, or search by name - Nearest-facility search from a coordinate, with a radius up to 50 km Auth: x-api-key header. Price: 2 credits (Rp2) per successful request; failed requests are free. Product page: https://apiindonesia.id/produk/fasilitas/ Docs: https://docs.apiindonesia.id/en/#fasilitas - Locations and attributes come from OpenStreetMap ((c) OpenStreetMap contributors, ODbL 1.0) and Wikidata (CC0), filtered and validated - The KMK HK.01.07/MENKES/1206/2026 puskesmas register is used to confirm names and codes; coordinates still come from OpenStreetMap - A puskesmas without a coordinate is listed with lat/lng null and validasi tanpa_koordinat, never an estimated coordinate - Fuel stations cover Pertamina including Pertashop, Shell, BP and other brands mapped in OpenStreetMap - Every response carries meta.attribution - GET https://use.apiindonesia.id/api/v1/fasilitas/kategori: Categories and facility counts. Returns the six categories with their facility counts and subcategory breakdown. Useful for building a filter menu before calling the list endpoint. - GET https://use.apiindonesia.id/api/v1/fasilitas: List facilities. Returns facilities matching the filters, ordered by name. At least one of kategori, provinsi, kabupaten or q is required; without a filter the answer is 400, so the whole table is never pulled at once. - kategori (string): puskesmas, spbu, polisi, pemadam_kebakaran, kantor_pos or ibadah. - subkategori (string): Subcategory within the category, e.g. rawat_inap or pertashop. - provinsi (string): 2-digit Kemendagri province code, e.g. 32. - kabupaten (string): Regency/city code like 32.73. - q (string): Partial search on the facility name, e.g. istiqlal. - validasi (string): terverifikasi, sebagian or tanpa_koordinat. - page (integer): Page to retrieve. Defaults to 1; a page past the offset ceiling answers 400 PAGINATION_LIMIT. - per_page (integer): Items per page. Defaults to 20, maximum 100. - GET https://use.apiindonesia.id/api/v1/fasilitas/nearby: Nearest facilities. Finds facilities around a coordinate, nearest first, with the distance in metres (distance_m). Radius defaults to 2,000 metres (maximum 50,000) and limit to 10 (maximum 50). Facilities without coordinates are not returned. - lat (number): Latitude of the reference point, e.g. -6.1702. - lng (number): Longitude of the reference point, e.g. 106.8311. - radius (integer): Radius in metres, 1 to 50,000. Defaults to 2,000. - limit (integer): Maximum facilities returned, 1 to 50. Defaults to 10. - kategori (string): Restrict to one category, e.g. spbu. - subkategori (string): Restrict to one subcategory, e.g. masjid. - GET https://use.apiindonesia.id/api/v1/fasilitas/:id: Retrieve one facility. Returns one facility with its category-specific attributes, the OpenStreetMap and Wikidata ids, and the validation notes. An unknown id answers 404. - id (string): Facility id like pkm-1000126725. ## Image Upscale (Super Resolution) Enlarge an image 2x, 4x, or 8x with detail reconstruction rather than plain interpolation. - Submit the image as a data URI, receive a job_id, then download the result from our endpoint - We do not store results: the file lives on the processing CDN for 1 hour after the job finishes, so download it as soon as the status is succeeded - Input is capped at 1 MB and 1 MP (send JPEG or WebP to stay under it) - A job that fails is refunded in full - Checking status or downloading is free Auth: x-api-key header. Price: 250 / 1,000 / 4,000 credits per image (2x / 4x / 8x); 1 credit = Rp1. Product page: https://apiindonesia.id/produk/image-upscale/ Docs: https://docs.apiindonesia.id/en/#image-upscale - POST https://use.apiindonesia.id/api/v1/image/upscale/2x: Upscale 2x (up to 4 MP output). Upscales an image 2x, accepting up to 1 MP of input and returning at most 4 MP. Costs 250 credits per job. A failed job is refunded in full, and an account that has never topped up can run this tier at most 4 times from the signup bonus (failed jobs do not count). - image (string, required): The image as a data URI: data:image/png;base64,... (PNG, JPEG, or WebP, 1 MB maximum after decoding; use JPEG or WebP). A plain http URL is rejected. - POST https://use.apiindonesia.id/api/v1/image/upscale/4x: Upscale 4x (up to 16 MP output). Upscales an image 4x, accepting up to 1 MP of input and returning at most 16 MP. Costs 1,000 credits per job. This tier requires an account that has topped up at least once. - image (string, required): The image as a data URI (PNG, JPEG, or WebP, 1 MB maximum). - POST https://use.apiindonesia.id/api/v1/image/upscale/8x: Upscale 8x (up to 64 MP output). Upscales an image 8x, accepting up to 1 MP of input and returning at most 64 MP. Costs 4,000 credits per job, and this tier also requires an account that has topped up. The output file is large, so plan for the download time and your own storage. - image (string, required): The image as a data URI (PNG, JPEG, or WebP, 1 MB maximum). - GET https://use.apiindonesia.id/api/v1/image/jobs/:id: Job status. Returns the job status (pending, succeeded, or failed) with the result resolution, the failure reason, and the download expiry. This endpoint is free: polling does not consume credits. - id (string, required): The job_id returned by the submit call. - GET https://use.apiindonesia.id/api/v1/image/jobs/:id/file: Download the result. Streams the result file from the processing CDN to your client. - Free, only reachable by the account that owns the job - Only until download_expires_at (1 hour after the job finished) - After that the answer is 410 RESULT_EXPIRED, because the file really is deleted upstream - The response is image bytes, not JSON - id (string, required): A job_id owned by your account.