Muat provinsi
Gunakan saat halaman dimuat untuk mengisi dropdown pertama.
GET /api/locations/provinces
Dokumentasi
Gunakan API ini untuk menampilkan provinsi, kabupaten/kota, kecamatan, dan kelurahan/desa secara berjenjang (cascading).
Loading...
Data wilayah disusun secara bertingkat. Anda memerlukan kode area sebelumnya untuk mencari area di bawahnya.
Simulasikan form alamat dengan API ini. Pilih tiap tingkat wilayah untuk melihat request berjenjang secara otomatis.
// Hasil respons API (JSON) akan tampil di sini
Gunakan saat halaman dimuat untuk mengisi dropdown pertama.
GET /api/locations/provinces
Saat pengguna memilih provinsi, gunakan kodenya untuk memuat kabupaten/kota, lalu ulangi untuk kecamatan dan desa.
GET /api/locations/regencies?province_code=11
Gunakan endpoint detail untuk koordinat, lalu minta boundary saat ingin menggambarkannya di peta.
GET /api/locations/{code}
GET /api/locations/{code}/boundary
Simpan full_code dan name di sistem Anda untuk referensi alamat yang konsisten.
Semua endpoint mengembalikan JSON. Tambahkan code_format=short jika hanya memerlukan kode level turunan.
Ganti placeholder seperti {province_code} dengan nilai dari endpoint sebelumnya.
GET /healthz
GET /api/locations/stats
Opsional: province_code={province_code}, regency_code={regency_code}, district_code={district_code}
GET /api/locations/provinces
GET /api/locations/regencies?province_code={province_code}
GET /api/locations/districts?regency_code={regency_code}
GET /api/locations/villages?district_code={district_code}
GET /api/postal-codes/{postal_code}
Mengembalikan desa/kelurahan yang menggunakan kode pos tersebut beserta hierarkinya.
GET /api/locations/search?q={query}&limit={limit}
GET /api/locations/{code}
Mengembalikan hierarki, koordinat jika tersedia, dan has_boundary.
GET /api/locations/{code}/boundary
Mengembalikan leaflet_path dalam urutan Leaflet [latitude, longitude]. Boundary yang tidak tersedia mengembalikan 404.
GET /api/islands?province_code={province_code}&page=1&limit=50
province_code bersifat opsional. Pagination default halaman 1, limit 50, maksimum 500.
GET /api/islands/{code}
Gunakan kode pulau seperti 11.01.40001.
GET /api/locations/{code}/population
Mengembalikan male, female, total, sumber, tanggal referensi, dan waktu import.
GET /api/locations/{code}/area
Mengembalikan area_km2, sumber, tanggal referensi, dan waktu import.
Respons berhasil menggunakan envelope yang sama. Data dapat berupa object atau array, tergantung endpoint.
{
"log_id": "019ab0f0-c8ec-7d25-9f62-2f23d92fcda3",
"code": 200,
"status": true,
"message": "Success",
"data": [
{
"code": "11",
"full_code": "11",
"name": "Aceh",
"level": "province"
}
]
}
const BASE_URL = '__BASE_URL__'
async function getProvinces() {
const response = await fetch(`${BASE_URL}/api/locations/provinces`)
const json = await response.json()
if (!json.status) {
throw new Error(json.message)
}
return json.data
}
type LocationItem = {
code: string
full_code: string
name: string
level: string
}
type ApiResponse<T> = {
status: boolean
message: string
data: T
}
async function getRegencies(provinceCode: string): Promise<LocationItem[]> {
const response = await fetch(
`${BASE_URL}/api/locations/regencies?province_code=${provinceCode}`
)
const json: ApiResponse<LocationItem[]> = await response.json()
if (!json.status) throw new Error(json.message)
return json.data
}
import { useEffect, useState } from 'react'
const BASE_URL = '__BASE_URL__'
async function getJSON(path) {
const response = await fetch(`${BASE_URL}${path}`)
const json = await response.json()
if (!json.status) throw new Error(json.message)
return json.data
}
export function ProvinceSelect() {
const [provinces, setProvinces] = useState([])
useEffect(() => {
getJSON('/api/locations/provinces').then(setProvinces)
}, [])
return (
<select>
<option value="">Select province</option>
{provinces.map((item) => (
<option key={item.full_code} value={item.full_code}>
{item.name}
</option>
))}
</select>
)
}
package main
import (
"encoding/json"
"fmt"
"net/http"
)
type Response struct {
Status bool `json:"status"`
Data []struct {
FullCode string `json:"full_code"`
Name string `json:"name"`
} `json:"data"`
}
func main() {
res, err := http.Get("__BASE_URL__/api/locations/provinces")
if err != nil {
panic(err)
}
defer res.Body.Close()
var payload Response
json.NewDecoder(res.Body).Decode(&payload)
for _, item := range payload.Data {
fmt.Println(item.FullCode, item.Name)
}
}
Memerlukan Laravel HTTP Client.
use Illuminate\Support\Facades\Http;
$response = Http::get('__BASE_URL__/api/locations/provinces');
$json = $response->json();
if (! $json['status']) {
throw new Exception($json['message']);
}
$provinces = $json['data'];
Menggunakan standard library Python.
import json
from urllib.request import urlopen
base_url = '__BASE_URL__'
with urlopen(f'{base_url}/api/locations/provinces', timeout=10) as response:
payload = json.load(response)
if not payload['status']:
raise Exception(payload['message'])
provinces = payload['data']
print(provinces[0]['name'])
Gunakan full code saat menyimpan data. Short code hanya untuk tampilan UI atau form lama.
| Level | Full code | Short code |
|---|---|---|
| Provinsi | 11 |
11 |
| Kabupaten/kota | 11.01 |
01 |
| Kecamatan | 11.01.01 |
01 |
| Desa/kelurahan | 11.01.01.2001 |
2001 |