API Wilayah Indonesia: Data Provinsi, Kabupaten, Kecamatan, dan Kelurahan Lengkap
Panduan lengkap menggunakan API Wilayah Indonesia untuk mengambil data provinsi, kabupaten/kota, kecamatan, hingga kelurahan/desa secara terstruktur lewat satu endpoint REST.

Hampir semua aplikasi yang punya form alamat, dari e-commerce, HRIS, sampai aplikasi pemerintahan, butuh dropdown wilayah bertingkat: pilih provinsi, lalu kabupaten/kota muncul otomatis, lalu kecamatan, lalu kelurahan/desa. Masalahnya, data resmi wilayah administratif Indonesia (mengacu pada Kepmendagri) itu besar dan sering berubah karena pemekaran daerah. Meng-hardcode data ini di aplikasi sendiri berarti Anda harus rajin melakukan maintenance setiap ada perubahan.
API Wilayah dari API Indonesia menyediakan seluruh hierarki wilayah administratif, provinsi, kabupaten/kota, kecamatan, dan kelurahan/desa, dalam satu REST API yang tinggal panggil, tanpa perlu menyimpan dataset statis di server Anda sendiri.
Cakupan Data
- Provinsi: 38 provinsi di seluruh Indonesia
- Kabupaten/Kota: seluruh kabupaten dan kota di bawah tiap provinsi
- Kecamatan: seluruh kecamatan di bawah tiap kabupaten/kota
- Kelurahan/Desa: seluruh kelurahan dan desa di bawah tiap kecamatan
- Pencarian lintas level: cari nama wilayah tanpa tahu levelnya dulu
Daftar Endpoint
Base URL: https://use.apiindonesia.id/api/v1/wilayah
| Method | Endpoint | Keterangan |
|---|---|---|
| GET | /provinsi |
Daftar semua provinsi (paginated) |
| GET | /provinsi/:id |
Detail satu provinsi |
| GET | /kabupaten?provinsi_id= |
Daftar kabupaten/kota dalam satu provinsi |
| GET | /kabupaten/:id |
Detail satu kabupaten/kota |
| GET | /kecamatan?kabupaten_id= |
Daftar kecamatan dalam satu kabupaten/kota |
| GET | /kecamatan/:id |
Detail satu kecamatan |
| GET | /kelurahan?kecamatan_id= |
Daftar kelurahan/desa dalam satu kecamatan |
| GET | /kelurahan/:id |
Detail satu kelurahan/desa |
| GET | /search?q= |
Cari wilayah di semua level sekaligus |
Semua endpoint list mendukung parameter page dan per_page (maksimal 100 per halaman) dan mengembalikan objek meta berisi total, page, per_page, dan total_pages.
Contoh Request
Ambil daftar kabupaten/kota di Jawa Barat:
curl "https://use.apiindonesia.id/api/v1/wilayah/kabupaten?provinsi_id=32" \
-H "x-api-key: aip_live_xxx"
const res = await fetch(
'https://use.apiindonesia.id/api/v1/wilayah/kabupaten?provinsi_id=32',
{ headers: { 'x-api-key': process.env.API_INDONESIA_KEY } }
);
const { data, meta } = await res.json();
console.log(data); // [{ id, name, province_id, ... }, ...]
import requests
res = requests.get(
"https://use.apiindonesia.id/api/v1/wilayah/kabupaten",
params={"provinsi_id": "32"},
headers={"x-api-key": "aip_live_xxx"},
)
data = res.json()["data"]
Contoh Response
{
"data": [
{ "id": "3273", "name": "KOTA BANDUNG", "province_id": "32" },
{ "id": "3204", "name": "KABUPATEN BANDUNG", "province_id": "32" }
],
"meta": { "total": 27, "page": 1, "per_page": 20, "total_pages": 2 }
}
Membangun Dropdown Alamat Bertingkat
Pola paling umum: simpan provinsi_id yang dipilih user di state, lalu panggil /kabupaten?provinsi_id= setiap kali user ganti provinsi. Ulangi pola yang sama untuk kecamatan dan kelurahan. Karena setiap level punya id yang konsisten dan bisa dijadikan foreign key, Anda bisa langsung menyimpan province_id, regency_id, district_id, dan village_id di database sendiri tanpa perlu menyalin nama wilayah.
Jika Anda butuh fitur pencarian alamat bebas (misalnya autocomplete "cari kelurahan"), gunakan endpoint /search?q= yang mencari di keempat level sekaligus dan mengembalikan field level untuk menandai jenis wilayahnya.
Tips untuk endpoint /search:
- Kirim minimal 3 karakter sebelum benar-benar memanggil API, supaya hasil autocomplete tidak terlalu boros kuota.
- Debounce input user sekitar 300ms sebelum fetch.
- Gunakan field
leveldi response untuk menentukan ikon atau label di dropdown (misalnya badge "Kota" vs "Kabupaten").
Kenapa Tidak Hardcode Data Sendiri?
Banyak tim memilih meng-copy dataset wilayah open-source ke database mereka. Ini bisa berjalan, tapi ada risiko data menjadi usang setelah ada pemekaran/perubahan kode wilayah, dan Anda tetap harus membangun endpoint pencarian dan paginasi sendiri. Dengan API Wilayah, data selalu konsisten dengan kode wilayah terbaru dan Anda hanya perlu satu API key yang sama untuk mengakses semua endpoint.
Kombinasi dengan API Lainnya
Data wilayah baru benar-benar lengkap kalau dipasangkan dengan API lain di ekosistem yang sama:
- API Kode Pos: setelah user memilih kelurahan, ambil daftar kode pos yang cocok lewat
/api/v1/kodepos/search?q=supaya field kode pos terisi otomatis. Cocok untuk checkout e-commerce dan form onboarding. - API KBBI: kalau aplikasi Anda menampilkan nama wilayah dalam konten (misalnya portal berita daerah), validasi ejaan nama tempat lewat
/api/v1/kbbi/word/:word. - API Kurs BI: untuk aplikasi logistik atau e-commerce yang menampilkan harga multi-mata uang per wilayah, pasangkan dengan kurs resmi Bank Indonesia dari
/api/v1/kurs-bi/latest.
Semua API ini memakai satu API key yang sama, jadi integrasinya tinggal menambah base path, bukan bikin akun baru.
FAQ
Apakah data ini mengikuti pemekaran wilayah terbaru? Ya, data mengacu pada kode wilayah Kepmendagri terbaru dan diperbarui di sisi API, jadi Anda tidak perlu patch dataset sendiri setiap ada pemekaran.
Berapa total kelurahan/desa yang tersedia? Seluruh kelurahan dan desa di Indonesia (lebih dari 80 ribu) tersedia lewat endpoint /kelurahan dengan paginasi.
Apakah bisa dipakai untuk autocomplete? Bisa. Endpoint /search?q= mencari di semua level sekaligus dan cocok untuk autocomplete dengan debounce di sisi klien.
Apakah gratis? Tier Free 1.000 hits/bulan, cukup untuk MVP dan staging.
Mulai Sekarang
Dapatkan API key gratis di dashboard.apiindonesia.id/register dan pelajari parameter lengkap di docs.apiindonesia.id.
