{
  "api_version": "v1",
  "dataset_version": "kepmendagri-300.2.2-2138-2025+2430-2025",
  "effective_date": "2025-06-23",
  "last_updated": "2025-06-23",
  "description": "Machine-readable Indonesian administrative region codes and names (kodifikasi wilayah administrasi pemerintahan) derived from publicly available regulatory documents of the Ministry of Home Affairs (Kementerian Dalam Negeri). This is an independent project, not an official government API.",
  "source": {
    "base_document": {
      "id": "KEPMENDAGRI-300-2-2-2138-2025",
      "file": "KEPMENDAGRI-300-2-2-2138-2025.pdf",
      "title": "Keputusan Menteri Dalam Negeri Nomor 300.2.2-2138 Tahun 2025 tentang Pemberian dan Pemutakhiran Kode, Data Wilayah Administrasi Pemerintahan, dan Pulau",
      "enacted": "2025-04-25",
      "status": "in force (amended by KEPMENDAGRI-300-2-2-2430-2025)",
      "role": "current code table",
      "pages": 4428,
      "sha256": "be7f2d61aa8572e4d3279b1cb86f0fd66c7436839ec7d29cba78e211b5ff26c4",
      "note": "Diktum KETUJUH (PDF page 15) revokes Kepmendagri 100.1.1-6117/2022."
    },
    "amendments": [
      {
        "id": "KEPMENDAGRI-300-2-2-2430-2025",
        "file": "KEPMENDAGRI-300-2-2-2430-2025.pdf",
        "title": "Keputusan Menteri Dalam Negeri Nomor 300.2.2-2430 Tahun 2025 tentang Perubahan atas Keputusan Menteri Dalam Negeri Nomor 300.2.2-2138 Tahun 2025 tentang Pemberian dan Pemutakhiran Kode, Data Wilayah Administrasi Pemerintahan, dan Pulau",
        "enacted": "2025-06-23",
        "status": "in force",
        "role": "amendment; changes island (pulau) data only",
        "pages": 23,
        "sha256": "4b5fd2023b8fc0efd4910c5490997c93107d227937536e6cfef414d05f315886",
        "note": "Diktum KESATU (PDF page 4) amends only Lampiran A rows 1-2 (island counts) and Lampiran D (island tables) for Aceh and Sumatera Utara, after 4 islands (Mangkir Gadang, Mangkir Ketek, Lipan, Panjang) moved to Kabupaten Aceh Singkil. The amended Lampiran A (PDF page 6) keeps every regency, district, kelurahan and desa count identical to 2138/2025: 38 provinces, 416 kabupaten, 98 kota, 7,285 kecamatan, 8,496 kelurahan, 75,266 desa."
      }
    ],
    "note": "Region codes and names come from the annex of Kepmendagri 300.2.2-2138/2025. Kepmendagri 300.2.2-2430/2025 amends only island (pulau) data for Aceh and Sumatera Utara; it does not change any province, regency/city, district or village code or name. The effective date is the date of the latest amendment; the region table itself has been in force since 2025-04-25."
  },
  "sources": [
    {
      "id": "PERMENDAGRI-137-2017",
      "file": "PERMENDAGRI-137-2017.pdf",
      "title": "Peraturan Menteri Dalam Negeri Nomor 137 Tahun 2017 tentang Kode dan Data Wilayah Administrasi Pemerintahan",
      "enacted": "2017-12-27",
      "status": "superseded",
      "role": "historical code table",
      "pages": 3852,
      "sha256": "2c7ee0ea622de447f2d76e5ad22f7ef72cfc899f2d49f3df7e70d57cb78c6a28"
    },
    {
      "id": "PP-72-2019",
      "file": "PP-72-2019.pdf",
      "title": "Peraturan Pemerintah Nomor 72 Tahun 2019 tentang Perubahan atas Peraturan Pemerintah Nomor 18 Tahun 2016 tentang Perangkat Daerah",
      "enacted": "2019-10-14",
      "status": "in force (not a code table)",
      "role": "legal context only; contains no region codes or names",
      "pages": 42,
      "sha256": "12e347982bacca9f25240374a7c2898a976301e37a7031e39abddcfa93496c85",
      "note": "This is the Government Regulation on Perangkat Daerah, not Permendagri 72/2019 (the amendment of Permendagri 137/2017 cited in Permendagri 58/2021). Permendagri 72/2019 is not part of this source set."
    },
    {
      "id": "PERMENDAGRI-58-2021",
      "file": "PERMENDAGRI-58-2021.pdf",
      "title": "Peraturan Menteri Dalam Negeri Nomor 58 Tahun 2021 tentang Kode, Data Wilayah Administrasi Pemerintahan, dan Pulau",
      "enacted": "2021-12-13",
      "status": "in force",
      "role": "defines the code format and code assignment rules (Pasal 4-8); contains no code table",
      "pages": 16,
      "sha256": "ebbf2920901a3ce4c7b1e61ecd6bb6ead60e53c77ae5994d49f54f33158a8eef"
    },
    {
      "id": "KEPMENDAGRI-100-1-1-6117-2022",
      "file": "KEPMENDAGRI-100-1-1-6117-2022.pdf",
      "title": "Keputusan Menteri Dalam Negeri Nomor 100.1.1-6117 Tahun 2022 tentang Pemberian dan Pemutakhiran Kode, Data Wilayah Administrasi Pemerintahan, dan Pulau",
      "enacted": "2022-11-09",
      "status": "revoked",
      "role": "historical code table",
      "pages": 4402,
      "sha256": "bbead2e16dce648c19a34e0569130d41ba2d6242de1a0a6c0ab2d5ca04578af3"
    },
    {
      "id": "KEPMENDAGRI-300-2-2-2138-2025",
      "file": "KEPMENDAGRI-300-2-2-2138-2025.pdf",
      "title": "Keputusan Menteri Dalam Negeri Nomor 300.2.2-2138 Tahun 2025 tentang Pemberian dan Pemutakhiran Kode, Data Wilayah Administrasi Pemerintahan, dan Pulau",
      "enacted": "2025-04-25",
      "status": "in force (amended by KEPMENDAGRI-300-2-2-2430-2025)",
      "role": "current code table",
      "pages": 4428,
      "sha256": "be7f2d61aa8572e4d3279b1cb86f0fd66c7436839ec7d29cba78e211b5ff26c4",
      "note": "Diktum KETUJUH (PDF page 15) revokes Kepmendagri 100.1.1-6117/2022."
    },
    {
      "id": "KEPMENDAGRI-300-2-2-2430-2025",
      "file": "KEPMENDAGRI-300-2-2-2430-2025.pdf",
      "title": "Keputusan Menteri Dalam Negeri Nomor 300.2.2-2430 Tahun 2025 tentang Perubahan atas Keputusan Menteri Dalam Negeri Nomor 300.2.2-2138 Tahun 2025 tentang Pemberian dan Pemutakhiran Kode, Data Wilayah Administrasi Pemerintahan, dan Pulau",
      "enacted": "2025-06-23",
      "status": "in force",
      "role": "amendment; changes island (pulau) data only",
      "pages": 23,
      "sha256": "4b5fd2023b8fc0efd4910c5490997c93107d227937536e6cfef414d05f315886",
      "note": "Diktum KESATU (PDF page 4) amends only Lampiran A rows 1-2 (island counts) and Lampiran D (island tables) for Aceh and Sumatera Utara, after 4 islands (Mangkir Gadang, Mangkir Ketek, Lipan, Panjang) moved to Kabupaten Aceh Singkil. The amended Lampiran A (PDF page 6) keeps every regency, district, kelurahan and desa count identical to 2138/2025: 38 provinces, 416 kabupaten, 98 kota, 7,285 kecamatan, 8,496 kelurahan, 75,266 desa."
    }
  ],
  "counts": {
    "provinces": 38,
    "regencies": 514,
    "regencies_by_type": {
      "kabupaten": 416,
      "kota": 98
    },
    "districts": 7285,
    "villages": 83762,
    "villages_by_type": {
      "kelurahan": 8496,
      "desa": 75252,
      "desa_adat": 14
    },
    "islands": 17374
  },
  "islands": {
    "description": "Named islands (pulau) from Lampiran D.c of the current decree, with the island changes of the amendment applied. Coordinates are the decree's own point coordinates (converted from degrees-minutes-seconds to decimal degrees); the decree does not state a datum.",
    "count": 17374,
    "recap_total": 17380,
    "recap_note": "Lampiran D.c lists 17,374 named islands; the recap total of 17,380 (Lampiran A) also counts the 6 main islands (Sumatera, Jawa, Kalimantan, Sulawesi, Timor, Papua), which have no rows. Unchanged by 2430/2025 (4 islands moved, not added).",
    "inhabited": 1589,
    "uninhabited": 12992,
    "unknown_status": 2793,
    "amendment_changes": [
      {
        "action": "removed",
        "code": "12.01.40013",
        "name": "Pulau Lipan",
        "document": "KEPMENDAGRI-300-2-2-2430-2025",
        "source_page": 18
      },
      {
        "action": "removed",
        "code": "12.01.40015",
        "name": "Pulau Mangkir Gadang",
        "document": "KEPMENDAGRI-300-2-2-2430-2025",
        "source_page": 18
      },
      {
        "action": "removed",
        "code": "12.01.40016",
        "name": "Pulau Mangkir Ketek",
        "document": "KEPMENDAGRI-300-2-2-2430-2025",
        "source_page": 18
      },
      {
        "action": "removed",
        "code": "12.01.40019",
        "name": "Pulau Panjang",
        "document": "KEPMENDAGRI-300-2-2-2430-2025",
        "source_page": 18
      },
      {
        "action": "added",
        "code": "11.10.40081",
        "name": "Pulau Lipan",
        "document": "KEPMENDAGRI-300-2-2-2430-2025",
        "source_page": 14
      },
      {
        "action": "added",
        "code": "11.10.40082",
        "name": "Pulau Mangkir Gadang",
        "document": "KEPMENDAGRI-300-2-2-2430-2025",
        "source_page": 14
      },
      {
        "action": "added",
        "code": "11.10.40083",
        "name": "Pulau Mangkir Ketek",
        "document": "KEPMENDAGRI-300-2-2-2430-2025",
        "source_page": 14
      },
      {
        "action": "added",
        "code": "11.10.40084",
        "name": "Pulau Panjang",
        "document": "KEPMENDAGRI-300-2-2-2430-2025",
        "source_page": 14
      }
    ]
  },
  "levels": [
    {
      "level": "province",
      "name_id": "provinsi",
      "code_format": "NN",
      "example": "31"
    },
    {
      "level": "regency",
      "name_id": "kabupaten/kota",
      "code_format": "NN.NN",
      "types": [
        "kabupaten",
        "kota"
      ],
      "note": "code 01-69 = kabupaten, 71-99 = kota"
    },
    {
      "level": "district",
      "name_id": "kecamatan (distrik in Papua)",
      "code_format": "NN.NN.NN"
    },
    {
      "level": "village",
      "name_id": "kelurahan/desa",
      "code_format": "NN.NN.NN.NNNN",
      "types": [
        "kelurahan",
        "desa",
        "desa_adat"
      ],
      "note": "last segment starts with 1 = kelurahan, 2 = desa, 3 = desa adat"
    }
  ],
  "code_rules_source": "PERMENDAGRI-58-2021 (Pasal 4)",
  "provenance": {
    "source_page": "1-based page index of the PDF file named in source.document (not the page number printed on the page)",
    "normalizations": "Names are kept exactly as printed, except regency names printed with the abbreviation 'Kab' (2 records), expanded to 'Kabupaten'.",
    "reconciliation": {
      "regencies_with_printed_counts": "514/514",
      "districts_with_printed_counts": "6688/7285",
      "count_mismatches": 0
    }
  },
  "known_issues": [
    {
      "codes": [
        "71.02.11.2003",
        "71.02.11.2018"
      ],
      "name": "Tounelet Satu",
      "status": "needs_review",
      "note": "Two desa in Kecamatan Sonder (71.02.11) are printed with the same name. The remark on 71.02.11.2018 reads 'Pemekaran desa Tounelet Satu Perda No. 13/2011', i.e. it was split from Tounelet Satu, yet carries the same name. Likely a document error; the correct name is not stated in the source set.",
      "source_page": 2871
    },
    {
      "codes": [
        "94.03.01.2011",
        "94.03.01.2018"
      ],
      "name": "Kogekotu",
      "status": "needs_review",
      "note": "Two desa/kampung in Distrik Paniai Timur (94.03.01) are printed with the same name. The remark on 94.03.01.2018 reads 'Perbaikan nama desa/kampung semula Kogetoku menjadi Kogekotu' (Perda Kabupaten Paniai No.20/2021; BA No. 29/TopoII/IX/2022), which makes it identical to 94.03.01.2011.",
      "source_page": 3708
    },
    {
      "codes": [
        "91.20.07.2005"
      ],
      "name": "Teuw*",
      "status": "needs_review",
      "note": "The name is printed with a trailing asterisk and the table has no matching footnote. Kept exactly as printed; the same spelling appears in KEPMENDAGRI-100-1-1-6117-2022.",
      "source_page": 3584
    },
    {
      "codes": [],
      "name": "(19 names)",
      "status": "as_printed",
      "note": "The tables use a straight double quote as an apostrophe/glottal-stop mark inside some names (e.g. Ra\"as 35.29.22, Soka\"an 35.13.15.2017, T\"Singa 94.04.10.2004) and a typographic apostrophe in others (e.g. Regapu’u 53.07.01.2021). Names are kept exactly as printed; no quote character is converted.",
      "source_page": null
    },
    {
      "codes": [
        "82.04.40451",
        "82.04.40458",
        "82.04.40463"
      ],
      "name": "Pulau Siloyang, Pulau Tapiola, Pulau Waitenger",
      "status": "needs_review",
      "note": "Listed under Kabupaten Halmahera Selatan (North Maluku) but printed with longitudes of about 109°55' E (West Kalimantan), about 1,900 km from the other 460 islands of the regency. Very likely a typo in the source (the other rows use 126°-129° E); kept exactly as printed.",
      "source_page": 4263
    }
  ],
  "downloads": [
    {
      "format": "csv",
      "url": "/api/v1/export/indonesia-regions.csv",
      "bytes": 8676675,
      "sha256": "6816e95619ea25f99f1c6c2e15499be7d563963e844ff7890e33901deebccb60"
    },
    {
      "format": "json",
      "url": "/api/v1/export/indonesia-regions.json",
      "bytes": 21701709,
      "sha256": "d0ee78e10a20d511b6eda34ea8e06a45bfb829ee351baa74f07770d5a4bd1653"
    },
    {
      "format": "xml",
      "url": "/api/v1/export/indonesia-regions.xml",
      "bytes": 21281671,
      "sha256": "554deeffc3675587337bbad7a052d4850590969eb1764b583cf2fc8a58020b33"
    },
    {
      "format": "sql",
      "url": "/api/v1/export/indonesia-regions.sql",
      "bytes": 13702101,
      "sha256": "22efedd828e0d1ff070b8a53e3a80a71fb64a96f03cfb8e2edb07f35765d701a"
    },
    {
      "format": "xlsx",
      "url": "/api/v1/export/indonesia-regions.xlsx",
      "bytes": 6515813,
      "sha256": "96af172eea1dd1d5f8a1bcdf911d3002228975075932f177e4f90adeb0f2176b"
    },
    {
      "format": "pdf",
      "url": "/api/v1/export/indonesia-regions.pdf",
      "bytes": 7594692,
      "sha256": "0b1ef8c1bbecdb5657b5446aba7de1050066f2b92019f7cfe755afa0b50e1fbe"
    },
    {
      "format": "json",
      "dataset": "islands",
      "url": "/api/v1/export/indonesia-islands.json",
      "bytes": 5701436,
      "sha256": "a12f6663666aede57ac63185f7cfedb8ca29e42e16d9212a681246db810b1d61"
    },
    {
      "format": "xml",
      "dataset": "islands",
      "url": "/api/v1/export/indonesia-islands.xml",
      "bytes": 5654867,
      "sha256": "e69e92fec0b9c1e2670c3e44053909b9ccea2e0e894c334cc18f90adc5f31ab4"
    }
  ],
  "csv_downloads": [
    {
      "file": "provinces.csv",
      "url": "/api/v1/csv/provinces.csv",
      "bytes": 2169
    },
    {
      "file": "regencies.csv",
      "url": "/api/v1/csv/regencies.csv",
      "bytes": 39581
    },
    {
      "file": "districts.csv",
      "url": "/api/v1/csv/districts.csv",
      "bytes": 490960
    },
    {
      "file": "villages.csv",
      "url": "/api/v1/csv/villages.csv",
      "bytes": 7268519
    },
    {
      "file": "islands.csv",
      "url": "/api/v1/csv/islands.csv",
      "bytes": 2584292
    }
  ],
  "boundaries": {
    "description": "Administrative boundary polygons from Badan Informasi Geospasial (BIG), joined to the Kemendagri records of this API by exact code. Only the geometry comes from BIG; codes, names and hierarchy are this API's. Every record is present; those without a BIG polygon have geometry null and spatial_status 'not_available'. latitude/longitude is a representative point inside the polygon (pole of inaccessibility of its largest part), not a centroid. Geometry is simplified for web display. The same spatial values are on every region record of the API (latitude, longitude, spatial_status, bbox as [min_longitude, min_latitude, max_longitude, max_latitude]) and of the exports (latitude, longitude, spatial_status); the province, regency and district detail endpoints include the polygon itself (geometry, links.boundary), and the polygons of every level are downloadable as GeoJSON (downloads).",
    "attribution": "Batas wilayah administrasi: Badan Informasi Geospasial (BIG)",
    "levels": {
      "province": {
        "source": "https://geoservices.big.go.id/gis/rest/services/STIG/Batas_Provinsi/MapServer/0",
        "records": 38,
        "with_geometry": 38,
        "without_geometry": 0,
        "big_retrieved": "2026-09-28"
      },
      "regency": {
        "source": "https://geoservices.big.go.id/gis/rest/services/DISIGT/BatasWilayah/FeatureServer/0",
        "records": 514,
        "with_geometry": 514,
        "without_geometry": 0,
        "big_retrieved": "2026-09-28"
      },
      "village": {
        "source": "https://geoservices.big.go.id/rbi/rest/services/BATASWILAYAH/BATAS_DESAKEL_AR/MapServer/0",
        "records": 83762,
        "with_geometry": 83529,
        "without_geometry": 233,
        "big_retrieved": "2026-09-28"
      },
      "district": {
        "source": "https://geoservices.big.go.id/rbi/rest/services/BATASWILAYAH/BATAS_KECAMATAN_AR/MapServer/0",
        "records": 7285,
        "with_geometry": 7282,
        "without_geometry": 3,
        "big_retrieved": "2026-09-28"
      }
    },
    "downloads": [
      {
        "level": "province",
        "url": "/api/v1/export/boundaries/provinces.geojson",
        "features": 38,
        "bytes": 427106,
        "sha256": "bbd9575746709944a82a7e353c073936349b983ca0eff4fa3c6c0ec29505fee5"
      },
      {
        "level": "regency",
        "url": "/api/v1/export/boundaries/regencies.geojson",
        "features": 514,
        "bytes": 3756810,
        "sha256": "50e464fef4dbc94a3f4221bf1f235abcea278abf934a44d11844a9d4c67bfd58"
      },
      {
        "level": "district",
        "province_code": "11",
        "url": "/api/v1/export/boundaries/districts-11.geojson",
        "features": 290,
        "bytes": 1357807,
        "sha256": "6377de60276718b493dddffde8e7953a68fd6ecbc6ec0f74c643ccd722effec9"
      },
      {
        "level": "district",
        "province_code": "12",
        "url": "/api/v1/export/boundaries/districts-12.geojson",
        "features": 455,
        "bytes": 1791431,
        "sha256": "a3c4fd61d740ed2342716b4a038b7da45f6cb88d603b332ee576fc6d8448344c"
      },
      {
        "level": "district",
        "province_code": "13",
        "url": "/api/v1/export/boundaries/districts-13.geojson",
        "features": 179,
        "bytes": 913891,
        "sha256": "15fb34c558b48757c32f9fc8b8f76bbc2ae9fe282a2b51245549cd44bcaa7fce"
      },
      {
        "level": "district",
        "province_code": "14",
        "url": "/api/v1/export/boundaries/districts-14.geojson",
        "features": 172,
        "bytes": 833540,
        "sha256": "93cad2d82919daebade1caa8b2a6e8e75f915efb5ac5d55ffb9889e4a857d01c"
      },
      {
        "level": "district",
        "province_code": "15",
        "url": "/api/v1/export/boundaries/districts-15.geojson",
        "features": 144,
        "bytes": 557442,
        "sha256": "8fc3837ca8ddb4b0a3f7a6e9769af0baf094888f0efdfa93b3919192a874e16d"
      },
      {
        "level": "district",
        "province_code": "16",
        "url": "/api/v1/export/boundaries/districts-16.geojson",
        "features": 241,
        "bytes": 1059108,
        "sha256": "7a4bb5c141b2277a0519f70eb03571e7b7bba893a8d465d9ffc14e517c4aa961"
      },
      {
        "level": "district",
        "province_code": "17",
        "url": "/api/v1/export/boundaries/districts-17.geojson",
        "features": 129,
        "bytes": 527661,
        "sha256": "0b3db5437f9b1f41c9955db27e1e1ab1e9b586f19dd53b7bba0ad6c1b3b8ee2a"
      },
      {
        "level": "district",
        "province_code": "18",
        "url": "/api/v1/export/boundaries/districts-18.geojson",
        "features": 229,
        "bytes": 1105912,
        "sha256": "8a6293bb0c47355a8ad3029b9f4656573e7ef024e87981d94650d65318684568"
      },
      {
        "level": "district",
        "province_code": "19",
        "url": "/api/v1/export/boundaries/districts-19.geojson",
        "features": 47,
        "bytes": 359477,
        "sha256": "bc7c0fde925615703c0aa8960e3055bff4005649daa0d9bb8def6e6f22d5c62d"
      },
      {
        "level": "district",
        "province_code": "21",
        "url": "/api/v1/export/boundaries/districts-21.geojson",
        "features": 80,
        "bytes": 640312,
        "sha256": "b48de58b23e64c260ce7ce795bf3ab5a94b0bda6f499bf19ffb6ca09cbd78e85"
      },
      {
        "level": "district",
        "province_code": "31",
        "url": "/api/v1/export/boundaries/districts-31.geojson",
        "features": 44,
        "bytes": 79687,
        "sha256": "8666d49555dbc438ddda4d41ff075afeacc8f5aed7cf47c644d7680c463efb68"
      },
      {
        "level": "district",
        "province_code": "32",
        "url": "/api/v1/export/boundaries/districts-32.geojson",
        "features": 627,
        "bytes": 2346133,
        "sha256": "be778d7fe3cded87783b1b8975f1ebe5370023b238d961d13cfcc5f6b46fb156"
      },
      {
        "level": "district",
        "province_code": "33",
        "url": "/api/v1/export/boundaries/districts-33.geojson",
        "features": 576,
        "bytes": 2273300,
        "sha256": "9745bbc6a80d471519e761ae98e97215c57460580f1d2e1a8b199fe9401406e6"
      },
      {
        "level": "district",
        "province_code": "34",
        "url": "/api/v1/export/boundaries/districts-34.geojson",
        "features": 78,
        "bytes": 244959,
        "sha256": "a5fb84a33a3d054e95c07fdd14fa8a347286e65211871dfa3ba8f9633a5082dd"
      },
      {
        "level": "district",
        "province_code": "35",
        "url": "/api/v1/export/boundaries/districts-35.geojson",
        "features": 666,
        "bytes": 2747212,
        "sha256": "f763a3c6c57722f2834304292f60eef4d4ad806aab50b63801be6e8189460fee"
      },
      {
        "level": "district",
        "province_code": "36",
        "url": "/api/v1/export/boundaries/districts-36.geojson",
        "features": 155,
        "bytes": 598789,
        "sha256": "b3ac15890deef3f39e7376251b924de1fa0013b5bf038be8d80e7ee1e39f65b9"
      },
      {
        "level": "district",
        "province_code": "51",
        "url": "/api/v1/export/boundaries/districts-51.geojson",
        "features": 57,
        "bytes": 273671,
        "sha256": "472a7b26abbe15d243a93ab0cdfe251322eee86638944a52721bce7bf0bfe157"
      },
      {
        "level": "district",
        "province_code": "52",
        "url": "/api/v1/export/boundaries/districts-52.geojson",
        "features": 117,
        "bytes": 646577,
        "sha256": "3db44f1f8e70e4b34f922eafa086b8b3a48f359dc1bc0bcf1c0a4fa7e06fa371"
      },
      {
        "level": "district",
        "province_code": "53",
        "url": "/api/v1/export/boundaries/districts-53.geojson",
        "features": 315,
        "bytes": 1675795,
        "sha256": "d377045d51d3c2880d407b2df4fdfd13f542e090486b38106744621b8b7aa484"
      },
      {
        "level": "district",
        "province_code": "61",
        "url": "/api/v1/export/boundaries/districts-61.geojson",
        "features": 174,
        "bytes": 1375487,
        "sha256": "369f8433ddda7d75cecafcd987084fddfae1b35c616e6bbb9e3df94cb31f0686"
      },
      {
        "level": "district",
        "province_code": "62",
        "url": "/api/v1/export/boundaries/districts-62.geojson",
        "features": 136,
        "bytes": 701529,
        "sha256": "3245c5e331d6940604bfa348bbe26988c1c0ddca5e57401bbcf09149cc5fbd94"
      },
      {
        "level": "district",
        "province_code": "63",
        "url": "/api/v1/export/boundaries/districts-63.geojson",
        "features": 156,
        "bytes": 646318,
        "sha256": "0dd3e1cf6a6fe7e0ff43aba726963f8c286003f5809b4f9db7c91ee7a16cd3fc"
      },
      {
        "level": "district",
        "province_code": "64",
        "url": "/api/v1/export/boundaries/districts-64.geojson",
        "features": 105,
        "bytes": 1063881,
        "sha256": "8827c094caf20bc4788f2e972aa4299cd06a1eaf1423f15848f8e65342580132"
      },
      {
        "level": "district",
        "province_code": "65",
        "url": "/api/v1/export/boundaries/districts-65.geojson",
        "features": 55,
        "bytes": 711567,
        "sha256": "858b1573ab7bb638aa1d718a9941707e9e102b317215b77d7f8fdd5f79aed050"
      },
      {
        "level": "district",
        "province_code": "71",
        "url": "/api/v1/export/boundaries/districts-71.geojson",
        "features": 171,
        "bytes": 583967,
        "sha256": "49e1b976601600dd06a38059da34c5226eb1ffb76c8361b69bb85752256a1977"
      },
      {
        "level": "district",
        "province_code": "72",
        "url": "/api/v1/export/boundaries/districts-72.geojson",
        "features": 177,
        "bytes": 1303313,
        "sha256": "6cfef1c4a9bc12c69bbf16faa8c5fe42bd0f647e44c375dd97fe2383137ebc70"
      },
      {
        "level": "district",
        "province_code": "73",
        "url": "/api/v1/export/boundaries/districts-73.geojson",
        "features": 313,
        "bytes": 1514508,
        "sha256": "ea77beae5bad26a0fc889492091a3612777619fb9dd30f713c5524f78da96634"
      },
      {
        "level": "district",
        "province_code": "74",
        "url": "/api/v1/export/boundaries/districts-74.geojson",
        "features": 221,
        "bytes": 1031538,
        "sha256": "3886eb553857f437c1b8bed9cd210baf219de4617ee67ce625665def8bfaa125"
      },
      {
        "level": "district",
        "province_code": "75",
        "url": "/api/v1/export/boundaries/districts-75.geojson",
        "features": 77,
        "bytes": 373992,
        "sha256": "5b875e04b9ac32d205b02ec8570c9eef4bb23307e08497a764a4ca7864ac28fb"
      },
      {
        "level": "district",
        "province_code": "76",
        "url": "/api/v1/export/boundaries/districts-76.geojson",
        "features": 69,
        "bytes": 437208,
        "sha256": "b2729bc74e621a2fa246178405c367b71a08925c040c8ae435f94be560092dab"
      },
      {
        "level": "district",
        "province_code": "81",
        "url": "/api/v1/export/boundaries/districts-81.geojson",
        "features": 119,
        "bytes": 1166062,
        "sha256": "6a47703cce81022f7b8ea7f2d8cd59b2deee3288b02395de774d665229946000"
      },
      {
        "level": "district",
        "province_code": "82",
        "url": "/api/v1/export/boundaries/districts-82.geojson",
        "features": 118,
        "bytes": 811040,
        "sha256": "6716f3aa6cf3ed452eae299fd5aa714a46e8327e3828dfd0972e050d8810983f"
      },
      {
        "level": "district",
        "province_code": "91",
        "url": "/api/v1/export/boundaries/districts-91.geojson",
        "features": 105,
        "bytes": 1064638,
        "sha256": "d2c8612d1c0d50b90cf84ff599aedf438f611489ea947481484bddfcbdaa7879"
      },
      {
        "level": "district",
        "province_code": "92",
        "url": "/api/v1/export/boundaries/districts-92.geojson",
        "features": 91,
        "bytes": 1102088,
        "sha256": "d999762f254780902e02a29f9e3c4c9204e5bfc6f7b7f4b6efd7eff23e72346a"
      },
      {
        "level": "district",
        "province_code": "93",
        "url": "/api/v1/export/boundaries/districts-93.geojson",
        "features": 82,
        "bytes": 893618,
        "sha256": "7a8936064774105cc995567a6cb9f6733e56561b815a3f98914d931554abaecc"
      },
      {
        "level": "district",
        "province_code": "94",
        "url": "/api/v1/export/boundaries/districts-94.geojson",
        "features": 131,
        "bytes": 804227,
        "sha256": "d316941d426de335fe3893c93dc2567ac4cbaad8e391a04b21e1cbc5ce13fae1"
      },
      {
        "level": "district",
        "province_code": "95",
        "url": "/api/v1/export/boundaries/districts-95.geojson",
        "features": 252,
        "bytes": 836844,
        "sha256": "79b7b20c1b68e5ad688c3a43b07890d694d65a2898be1c275395f07683af7c87"
      },
      {
        "level": "district",
        "province_code": "96",
        "url": "/api/v1/export/boundaries/districts-96.geojson",
        "features": 132,
        "bytes": 1204734,
        "sha256": "68ac7d8fd607cfdac03079240dece221e64ae2d6874e2fb4d1bf213c3b7497b6"
      },
      {
        "level": "village",
        "province_code": "11",
        "url": "/api/v1/export/boundaries/villages-11.geojson",
        "features": 6500,
        "bytes": 11674996,
        "sha256": "e3ec5227fbbb1cdc250791bbdc13e1a92b93acc34bc0cbdf177d8be5d9ecf9a5"
      },
      {
        "level": "village",
        "province_code": "12",
        "url": "/api/v1/export/boundaries/villages-12.geojson",
        "features": 6110,
        "bytes": 12446082,
        "sha256": "98fb88377cc7cee3ce223153ea26e74f993828398ef1be9dccb508a37d34ab82"
      },
      {
        "level": "village",
        "province_code": "13",
        "url": "/api/v1/export/boundaries/villages-13.geojson",
        "features": 1265,
        "bytes": 4482500,
        "sha256": "5995bdfe8e24db8592651eca82e388846af11b638532d4cdcfc3e5195e70f5ba"
      },
      {
        "level": "village",
        "province_code": "14",
        "url": "/api/v1/export/boundaries/villages-14.geojson",
        "features": 1862,
        "bytes": 4928453,
        "sha256": "960578da9381996e6f5926744fb9593029127dc812790b42a26488b7ed9be8c0"
      },
      {
        "level": "village",
        "province_code": "15",
        "url": "/api/v1/export/boundaries/villages-15.geojson",
        "features": 1585,
        "bytes": 3343296,
        "sha256": "b091dadac1ae6e20d482b462befa148b8de1522c25f756c97fe5fe094f167782"
      },
      {
        "level": "village",
        "province_code": "16",
        "url": "/api/v1/export/boundaries/villages-16.geojson",
        "features": 3259,
        "bytes": 6417428,
        "sha256": "0ece4c2b2b8dcb786056e1b0d21593e57ee4419d9f4f771091f4af6383dfcd73"
      },
      {
        "level": "village",
        "province_code": "17",
        "url": "/api/v1/export/boundaries/villages-17.geojson",
        "features": 1513,
        "bytes": 3464834,
        "sha256": "5ffa9a6a69f7b9497c6ab30d825a6fe76e35c1c8133330f40b311824843ab97b"
      },
      {
        "level": "village",
        "province_code": "18",
        "url": "/api/v1/export/boundaries/villages-18.geojson",
        "features": 2651,
        "bytes": 7566511,
        "sha256": "6d0da5c33a96e11aaea87fc1f91a0d8e3c405382fd87eb990da287c64a1512b5"
      },
      {
        "level": "village",
        "province_code": "19",
        "url": "/api/v1/export/boundaries/villages-19.geojson",
        "features": 393,
        "bytes": 1869670,
        "sha256": "73fcb6efa9407935b61da4655625cb80cfad04d81f5895e31cea9982ddbdd9fc"
      },
      {
        "level": "village",
        "province_code": "21",
        "url": "/api/v1/export/boundaries/villages-21.geojson",
        "features": 419,
        "bytes": 2303267,
        "sha256": "1e6813551358c11a188242499bdd9345075d0d63f3ebb0a12280e12b2f52e84c"
      },
      {
        "level": "village",
        "province_code": "31",
        "url": "/api/v1/export/boundaries/villages-31.geojson",
        "features": 267,
        "bytes": 418683,
        "sha256": "1285e3c211af053bdedb155039e599f8a35eb3fbf7338b4b3503bf8ca8604240"
      },
      {
        "level": "village",
        "province_code": "32",
        "url": "/api/v1/export/boundaries/villages-32.geojson",
        "features": 5957,
        "bytes": 17604872,
        "sha256": "602a6939a376c26ed092d0ff3d30dd67db263aa7ecdb9b8c83881c678a725b88"
      },
      {
        "level": "village",
        "province_code": "33",
        "url": "/api/v1/export/boundaries/villages-33.geojson",
        "features": 8563,
        "bytes": 20528519,
        "sha256": "2d942e2deb8f0618b75e2dddec60db675cb0d28ca4fae066e2bb6aad642fec39"
      },
      {
        "level": "village",
        "province_code": "34",
        "url": "/api/v1/export/boundaries/villages-34.geojson",
        "features": 438,
        "bytes": 1557809,
        "sha256": "8ece38ee9df24bb321b279feace2440aec2558e7c7785b41cbfe983484dc3226"
      },
      {
        "level": "village",
        "province_code": "35",
        "url": "/api/v1/export/boundaries/villages-35.geojson",
        "features": 8494,
        "bytes": 22672009,
        "sha256": "cb4b28c8c9abab51211fd6df5be8884c5139e450f8217a012f2f1c474b02c4d0"
      },
      {
        "level": "village",
        "province_code": "36",
        "url": "/api/v1/export/boundaries/villages-36.geojson",
        "features": 1552,
        "bytes": 4476216,
        "sha256": "0e92a2914612bb23ae60f49cee1307472c750ed3ff51499fc99ce2962c4f3af6"
      },
      {
        "level": "village",
        "province_code": "51",
        "url": "/api/v1/export/boundaries/villages-51.geojson",
        "features": 716,
        "bytes": 2267267,
        "sha256": "5d3334b99f67151c5d9c05e8563717a9c4bb61d33fe41a817b603a6f0f3f1ff7"
      },
      {
        "level": "village",
        "province_code": "52",
        "url": "/api/v1/export/boundaries/villages-52.geojson",
        "features": 1166,
        "bytes": 4152458,
        "sha256": "b4aab97de97dfcded451723e33e0b1e09762f8330848a12460d4b61a7accea5d"
      },
      {
        "level": "village",
        "province_code": "53",
        "url": "/api/v1/export/boundaries/villages-53.geojson",
        "features": 3442,
        "bytes": 11340932,
        "sha256": "be2a1d11a91716082f13b8b7a26742fd57b25db2884e3d6d0456d128f64d4945"
      },
      {
        "level": "village",
        "province_code": "61",
        "url": "/api/v1/export/boundaries/villages-61.geojson",
        "features": 2145,
        "bytes": 6946313,
        "sha256": "3fba190c7b98ad6a4545798a686cc9e9ebb2d43dc264a98bf8bd003a9ed47796"
      },
      {
        "level": "village",
        "province_code": "62",
        "url": "/api/v1/export/boundaries/villages-62.geojson",
        "features": 1571,
        "bytes": 4187182,
        "sha256": "3a9782ef553fd224adabb78a87058512722936c6bc963856632c63c391a41a22"
      },
      {
        "level": "village",
        "province_code": "63",
        "url": "/api/v1/export/boundaries/villages-63.geojson",
        "features": 2016,
        "bytes": 4488758,
        "sha256": "3dc5792add9aea71d39d92c7294605708130f2887e308e815de958d8698b6a5f"
      },
      {
        "level": "village",
        "province_code": "64",
        "url": "/api/v1/export/boundaries/villages-64.geojson",
        "features": 1038,
        "bytes": 5760315,
        "sha256": "61c262973465ab36c2560ec7ac06f76f7fa7a6f4dd05f93742f64bf4f8bff66c"
      },
      {
        "level": "village",
        "province_code": "65",
        "url": "/api/v1/export/boundaries/villages-65.geojson",
        "features": 482,
        "bytes": 3186816,
        "sha256": "8e8d5457c676cdf801ea2972ccf4de281cb4ac40444dbf9b8cb2aa8ccc87b226"
      },
      {
        "level": "village",
        "province_code": "71",
        "url": "/api/v1/export/boundaries/villages-71.geojson",
        "features": 1839,
        "bytes": 3951108,
        "sha256": "5c302fb251ff9547d58294f828b25252a791d67f29aff439fc67135590956e87"
      },
      {
        "level": "village",
        "province_code": "72",
        "url": "/api/v1/export/boundaries/villages-72.geojson",
        "features": 2017,
        "bytes": 8732910,
        "sha256": "2469260694c8e8465fa759a4b069952621f7246919e9dddd92613b694c42e12b"
      },
      {
        "level": "village",
        "province_code": "73",
        "url": "/api/v1/export/boundaries/villages-73.geojson",
        "features": 3059,
        "bytes": 9809603,
        "sha256": "96f55a901b442ef509684cc718ef7f8d2c675dcd47065da543e1d9971845a21f"
      },
      {
        "level": "village",
        "province_code": "74",
        "url": "/api/v1/export/boundaries/villages-74.geojson",
        "features": 2285,
        "bytes": 6395665,
        "sha256": "7f2a2ba3d29c7cca31eb67c037c545ccbfaf695f3593ad979f1f29b8635bde4b"
      },
      {
        "level": "village",
        "province_code": "75",
        "url": "/api/v1/export/boundaries/villages-75.geojson",
        "features": 729,
        "bytes": 2261817,
        "sha256": "abf8fbfe1fb4fbfcf74f13cb6a23feab0ffec050557f28d2450e9b1e8d6106dc"
      },
      {
        "level": "village",
        "province_code": "76",
        "url": "/api/v1/export/boundaries/villages-76.geojson",
        "features": 648,
        "bytes": 2622260,
        "sha256": "77fd7a7333a9c52b0da902862d38df1d853883d5d4d7bfcecd9b54fceccabdfc"
      },
      {
        "level": "village",
        "province_code": "81",
        "url": "/api/v1/export/boundaries/villages-81.geojson",
        "features": 1235,
        "bytes": 5754794,
        "sha256": "6c0182b87c4085f862565a66f112d673f55a40dbb65cae6b099103871b8fc807"
      },
      {
        "level": "village",
        "province_code": "82",
        "url": "/api/v1/export/boundaries/villages-82.geojson",
        "features": 1185,
        "bytes": 4199875,
        "sha256": "6dbaa0677141863ea1b29f2fd9c894ef43c10c868cfa0da1f402d435a7c4e8ab"
      },
      {
        "level": "village",
        "province_code": "91",
        "url": "/api/v1/export/boundaries/villages-91.geojson",
        "features": 999,
        "bytes": 4959378,
        "sha256": "9cd94089d1ab4c8c3e1c388a5af7380042f8ddbda87ba61466fa780c581b4435"
      },
      {
        "level": "village",
        "province_code": "92",
        "url": "/api/v1/export/boundaries/villages-92.geojson",
        "features": 824,
        "bytes": 5771776,
        "sha256": "fd9b3c22e49c0aeb2f84db9477ee7fc5a68a513bdab460f05dbf3677a5f812e9"
      },
      {
        "level": "village",
        "province_code": "93",
        "url": "/api/v1/export/boundaries/villages-93.geojson",
        "features": 690,
        "bytes": 5053371,
        "sha256": "6a3b721637f18e708eed674b45ad613a51bf4465dcdb578e62db4d8d8d74c8fa"
      },
      {
        "level": "village",
        "province_code": "94",
        "url": "/api/v1/export/boundaries/villages-94.geojson",
        "features": 1208,
        "bytes": 3784829,
        "sha256": "11b00a863cbe2c6957340a7ea15e9d5b322e7d9e7a7b46850c8a2dbdf32385e9"
      },
      {
        "level": "village",
        "province_code": "95",
        "url": "/api/v1/export/boundaries/villages-95.geojson",
        "features": 2627,
        "bytes": 5962351,
        "sha256": "0cd73056961174e5af4f11ff286f873225a815209f87cdd1e024c80c8c369e7b"
      },
      {
        "level": "village",
        "province_code": "96",
        "url": "/api/v1/export/boundaries/villages-96.geojson",
        "features": 1013,
        "bytes": 5698137,
        "sha256": "005fc2cb0f41afb765f278c0871a78430efb052bda350d6d916ec475436f4187"
      }
    ],
    "endpoints": {
      "provinces": "/api/v1/boundaries/provinces.geojson",
      "province_regencies": "/api/v1/boundaries/provinces/{province_code}/regencies.geojson",
      "regency_districts": "/api/v1/boundaries/regencies/{regency_code}/districts.geojson",
      "regency_villages": "/api/v1/boundaries/regencies/{regency_code}/villages.geojson"
    }
  },
  "deprecated": {
    "/api/v1/villages.json": "Kept unchanged in v1 for existing clients, but close to the hosting's 25 MiB per-file limit. Use /api/v1/provinces/{province_code}/villages.json (same records, per province) or /api/v1/districts/{district_code}/villages.json."
  },
  "postal_codes": {
    "description": "Postal codes (kode pos) from Pos Indonesia (kodepos.posindonesia.co.id), collected separately from the site build. Pos Indonesia publishes names, not region codes, so each village is matched by exact normalized name within its kecamatan and regency; ambiguous or conflicting matches are left null. See https://indonesia-region.caturseptian.site/docs#postal-codes.",
    "source": "https://kodepos.posindonesia.co.id/",
    "retrieved": "2026-09-28",
    "villages": 83762,
    "with_postal_code": 72329,
    "without_postal_code": 11433,
    "match_rate": 0.8635,
    "postal_codes": 9039,
    "incomplete_codes": 0,
    "endpoint": "/api/v1/postal-codes/{first_3_digits}.json"
  },
  "endpoints": {
    "meta": "/api/v1/meta.json",
    "provinces": "/api/v1/provinces.json",
    "regencies": "/api/v1/regencies.json",
    "districts": "/api/v1/districts.json",
    "villages": "/api/v1/villages.json",
    "province": "/api/v1/provinces/{province_code}.json",
    "province_regencies": "/api/v1/provinces/{province_code}/regencies.json",
    "province_villages": "/api/v1/provinces/{province_code}/villages.json",
    "village_search_index": "/api/v1/search/villages.json",
    "regency": "/api/v1/regencies/{regency_code}.json",
    "regency_districts": "/api/v1/regencies/{regency_code}/districts.json",
    "regency_villages": "/api/v1/regencies/{regency_code}/villages.json",
    "district": "/api/v1/districts/{district_code}.json",
    "district_villages": "/api/v1/districts/{district_code}/villages.json",
    "changes": "/api/v1/changes.json",
    "islands": "/api/v1/islands.json",
    "islands_geojson": "/api/v1/islands.geojson",
    "province_islands": "/api/v1/provinces/{province_code}/islands.json",
    "regency_islands": "/api/v1/regencies/{regency_code}/islands.json",
    "csv": "/api/v1/csv/{provinces|regencies|districts|villages|islands}.csv",
    "export": "/api/v1/export/indonesia-regions.{csv|json|xml|sql|xlsx|pdf}",
    "islands_export": "/api/v1/export/indonesia-islands.{json|xml}",
    "postal_codes": "/api/v1/postal-codes/{first_3_digits}.json",
    "boundaries": "/api/v1/boundaries/provinces.geojson",
    "boundary_export": "/api/v1/export/boundaries/{provinces|regencies}.geojson, /api/v1/export/boundaries/{districts|villages}-{province_code}.geojson"
  },
  "license": {
    "code": "Source code is not published.",
    "data": "Derived from Indonesian government regulatory documents. See https://indonesia-region.caturseptian.site/docs#license for attribution and the status of the source documents."
  }
}
