Cara Ambil Data Sekolah Indonesia lewat API

Ditulis oleh Rifaldy Elninoru·Ditinjau oleh ·12 Oktober 2026·Diperbarui 9 Oktober 2026·Dasar API & Integrasi
Bagikan:

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.

Alur api data sekolah indonesia dari kode wilayah ke daftar sekolah

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.

Ditulis oleh

Rifaldy Elninoru

Founder Api.co.id dan Principal Engineer di PT Akselerasi Platform Indonesia. Membangun platform API serbaguna untuk developer dan perusahaan di Indonesia, mulai dari OCR, data regional, sampai validasi rekening bank. Founding Engineer Lumen Trade di Gotrade (YC S19), merancang mesin trading futures real time berikut integrasi MT4, MT5, dan protokol FIX. Sebelumnya Backend Engineer di Bank Rakyat Indonesia menggarap sistem Ceria dengan Go dan Node.js, serta Web Developer di Direktorat Jenderal Pendidikan Tinggi Kemdikbudristek.

Lihat semua artikel →
Ditinjau oleh

Roni Eka SetiawanExpert Reviewer

CTO Api.co.id. Menangani arsitektur produk, infrastruktur, penetapan harga, dan pengalaman developer untuk API verifikasi identitas, OCR, data keuangan, logistik, geolokasi, data regional, dan AI. Sebelumnya tiga tahun sebagai Web Platform Engineer di Bank Rakyat Indonesia, membangun API pencairan dana real time dengan Go, PostgreSQL, dan Kafka, serta modul KYC, QRIS, dan alur persetujuan pelunasan. Pernah menangani deteksi fraud dan integrasi payment gateway di Airpaz, dan live streaming latensi rendah di Kompas Gramedia. Alumni Bangkit Academy jalur Cloud Computing.

Lihat konten yang ditinjau →
Scroll to Top