
Apa yang kamu dapat dari API data sekolah Indonesia
Kamu lagi bikin form PPDB atau dashboard edutech, dan butuh menampilkan daftar sekolah lengkap dengan NPSN dan alamat tanpa harus scraping situs Dapodik sendiri. Untuk mengambil api data sekolah indonesia, kamu tinggal memanggil satu endpoint GET /regional/indonesia/schools di https://use.api.co.id dengan header x-api-co-id, lalu menyaring hasilnya pakai kode wilayah, NPSN, nama, status Negeri atau Swasta, sampai jenjang. Kode wilayahnya kamu ambil dulu dari API Wilayah, jadi dua API ini dipakai berurutan dalam satu alur. Responsnya balik sebagai JSON berisi NPSN, nama sekolah, jenjang, status, dan alamat yang siap langsung kamu taruh di dropdown atau tabel.
Data sekolah ini satu paket dengan kumpulan API data Indonesia lainnya, dan kami yang merawat datanya supaya kamu tidak perlu mengurusnya sendiri. Kamu berlangganan lewat halaman API Data Sekolah, ambil API key-nya, lalu langsung memanggil endpoint. Di panduan ini kita ikuti satu pekerjaan sampai jadi: menampilkan daftar SD Negeri di Kota Banda Aceh lengkap NPSN dan alamat, difilter dari kode wilayah. Alur yang sama berlaku untuk kota lain, tinggal ganti kodenya, misalnya Kota Bandung 3273 atau provinsi DKI Jakarta 31.
Yang perlu disiapkan
Sebelum panggilan pertamamu jalan, ada beberapa hal yang harus kamu lakukan terlebih dulu di api.co.id, yaitu:
- Membuat akun di api.co.id
- Berlangganan paket Data Sekolah
- Mengambil API key di dashboard
Kamu pasang API key itu di header x-api-co-id pada setiap panggilan, jadi simpan nilainya di tempat yang aman.
Base URL dan autentikasi
Semua panggilan, baik ke data sekolah maupun ke kode wilayah, mengarah ke host produksi https://use.api.co.id. Autentikasinya satu header saja, x-api-co-id berisi API key kamu. Tanpa header itu API langsung menolak sebelum query jalan, jadi pastikan nilainya terkirim di tiap request.
Langkah 1: Ambil kode wilayah dari API Wilayah
Filter sekolah bekerja dengan kode wilayah, jadi kamu butuh regency_code Kota Banda Aceh lebih dulu. Kode ini kamu ambil dari API Wilayah Indonesia dengan mencari namanya. Pola yang sama dipakai untuk data kode pos Indonesia, dan kalau kamu masih menimbang sumbernya, ada pembanding beberapa penyedia data wilayah.
curl -H "x-api-co-id: YOUR_API_KEY" \
"https://use.api.co.id/regional/indonesia/regencies?name=banda"
{ "is_success": true, "message": "Success",
"data": [ { "code": "1171", "name": "KOTA BANDA ACEH",
"province": { "code": "11", "name": "ACEH" } } ],
"paging": { "page": 1, "size": 10, "total_item": 1, "total_page": 1 } }
Yang kamu simpan dari sini cuma satu nilai: code “1171”, itulah regency_code yang jadi filter di langkah berikutnya. Provinsinya ikut terbaca di objek province (“11”) kalau kamu mau mengisi dropdown provinsi lebih dulu. Panjang kodenya konsisten, provinsi 2 digit, kabupaten/kota 4, kecamatan 6, jadi kamu bisa menebak level wilayah dari jumlah digitnya.
Dua API ini jalan beruntun: input kota dari penggunamu diubah jadi regency_code lewat API Wilayah, lalu regency_code itu dikirim ke endpoint sekolah untuk menyaring daftarnya. Begini alurnya kalau digambar.

Langkah 2: Ambil daftar sekolah dengan filter
Dengan regency_code di tangan, kamu panggil endpoint sekolah dan menambahkan filter jenjang dan status. Di contoh ini grade=SD untuk jenjang SD dan status=N untuk sekolah Negeri.
curl -H "x-api-co-id: YOUR_API_KEY" \
"https://use.api.co.id/regional/indonesia/schools?regency_code=1171&grade=SD&status=N&page=1"
{ "is_success": true, "message": "Success",
"data": [ {
"npsn": "10100101", "name": "SD NEGERI 1 BANDA ACEH", "grade": "SD",
"status": "N", "accreditation": "this data only available on premium package",
"address": "JL. CUT NYAK DIEN NO. 1",
"province_code": "11", "province_name": "ACEH",
"regency_code": "1171", "regency_name": "KOTA BANDA ACEH",
"district_code": "1171010", "district_name": "BAITURRAHMAN",
"lang": "this data only available on premium package",
"long": "this data only available on premium package" } ],
"paging": { "page": 1, "size": 100, "total_item": 250000, "total_page": 2500 } }
Tiap item sudah membawa yang kamu butuh untuk ditampilkan, yaitu npsn, name, dan address yang tinggal dipetakan ke baris tabel atau opsi dropdown. Nilai status cuma dua, “N” untuk Negeri dan “S” untuk Swasta, jadi tombol “Negeri/Swasta” di aplikasimu langsung dipetakan ke parameter ini. Kalau yang kamu pegang cuma NPSN-nya, filter npsn mengembalikan satu sekolah persis:
curl -H "x-api-co-id: YOUR_API_KEY" \
"https://use.api.co.id/regional/indonesia/schools?npsn=10100101"
Langkah 3: Halaman dan menampilkan hasil
Ukuran halaman dikunci 100 item dan tidak bisa kamu ubah, jadi daftar panjang datang bertahap. Jumlah halaman ada di paging.total_page, dan kamu mengulang request dengan page=2, page=3, sampai nomor halaman menyamai total_page, lalu menggabungkan tiap data jadi satu daftar. Parameter page default-nya 1, dan nilai di bawah 1 dinormalkan jadi 1, jadi page=0 tidak bikin galat.
Begitu semua halaman terkumpul, tiap item kamu petakan ke tampilan, NPSN jadi nilai tersimpan, nama dan alamat jadi label yang dilihat pengguna. Buat produk edutech, NPSN itu kamu simpan sebagai acuan resmi sekolah asal siswa. Kalau butuh dataset sejenis untuk jenjang kampus, ada API data kampus dengan pola pemanggilan yang mirip.
Field premium dan pesan galat yang akan kamu temui
Beberapa field cuma terisi kalau akunmu premium. Di respons non-premium, accreditation, lang, dan long berisi teks "this data only available on premium package". Perlakukan itu sebagai “tidak tersedia”, jangan coba mem-parse-nya jadi koordinat. Kalau kamu memaksa menyaring pakai filter akreditasi tanpa premium, API membalas 403:
{ "is_success": false, "message": "Accreditation filter is for premium members only" }
Kalau header x-api-co-id kosong atau salah, API berhenti di 401 sebelum query jalan:
{ "is_success": false, "message": "Unauthorized: API key is required" }
Tangani kedua galat ini di kode sebelum kamu baca data.
Harga dan kuota langganan
Paket Data Sekolah kami hitung dari jumlah hit, dan kamu bisa mulai dari yang paling kecil:
| Paket | Harga | Kuota |
|---|---|---|
| Starter | Rp19.000 | 10.000 hit |
| Pro | Rp39.000 | 50.000 hit |
| Business | Rp79.000 | unlimited |
API Wilayah yang kamu pakai di Langkah 1 punya langganannya sendiri, mulai Starter Rp19.000 untuk 5.000 hit, jadi anggarkan keduanya kalau alurmu memang menggabungkan dua API ini.
Endpoint lain yang tersedia
Pekerjaan di atas cukup pakai dua endpoint, tapi ada beberapa lagi yang berguna saat kamu membangun dropdown wilayah atau butuh pencarian lintas field:
| Path | Guna | Catatan |
|---|---|---|
GET /regional/indonesia/schools/search?query= |
Cari lintas nama, NPSN, alamat | Premium; amplop respons status/timestamp/result, tanpa auth balas 401 “User not authenticated” |
GET /regional/indonesia/provinces |
Daftar provinsi untuk dropdown | Dari API Wilayah |
GET /regional/indonesia/regencies?province_code= |
Daftar kabupaten/kota per provinsi | Sumber regency_code |
GET /regional/indonesia/districts?regency_code= |
Daftar kecamatan per kabupaten/kota | Sumber district_code |
GET /regional/indonesia/autocomplete?query=&type=regency |
Autocomplete cepat untuk dropdown | Maks 10 hasil, tanpa paging |
Pertanyaan yang sering muncul
Apakah NPSN dari API ini sama dengan data resmi?
NPSN yang kami kembalikan adalah Nomor Pokok Sekolah Nasional, nomor identitas resmi tiap sekolah, dan formatnya sama dengan yang kamu temukan di Referensi Data Pendidikan Kemendikdasmen. Kalau kamu mau mencocokkan atau membandingkan dengan sumber terbuka, dataset NPSN di portal Satu Data bisa jadi acuan tambahan.
Kalau cuma tahu nama sekolahnya, bisa cari tanpa kode wilayah?
Bisa. Filter name menerima pencarian sebagian dan tidak peduli huruf besar-kecil, jadi kamu bisa mengirim potongan namanya langsung ke endpoint sekolah. Untuk mencari lintas nama, NPSN, dan alamat sekaligus, ada endpoint /schools/search yang statusnya premium.
Berapa banyak sekolah yang ada di dataset?
Contoh respons menampilkan total_item 250000, tapi itu cuma nilai contoh di dokumentasi. Angka yang benar selalu kamu baca dari total_item di dalam paging pada responsmu sendiri.






