Panduan API untuk Website OPD
Tampilkan informasi publik OPD Anda di website OPD secara otomatis. Dokumen cukup diunggah sekali oleh Petugas OPD di panel PPID; setelah diterbitkan admin PPID, dokumen itu muncul di website Anda.
Empat langkah
Langkah 1
Minta kunci akses
Hubungi admin PPID Kabupaten Nunukan dengan menyebutkan nama OPD, alamat website (https://), serta nama dan nomor pengelola website. Admin memberikan satu kunci khusus untuk OPD Anda.
Langkah 2
Simpan kunci dengan aman
Kunci ibarat kata sandi. Simpan di pengaturan server website, jangan ditulis di halaman atau JavaScript yang terlihat pengunjung, dan jangan dibagikan lewat grup percakapan.
Langkah 3
Pasang pemanggilan data
Salin contoh kode di bawah ke website OPD. Website Anda meminta data ke portal PPID lalu menampilkannya sebagai daftar dokumen.
Langkah 4
Data tampil otomatis
Setiap informasi OPD yang diterbitkan admin PPID langsung ikut tampil. Tidak perlu mengunggah dokumen dua kali.
Data apa yang dikirim?
- Hanya informasi milik OPD Anda yang sudah diterbitkan admin PPID. Draf dan informasi OPD lain tidak ikut.
- Judul, ringkasan, kategori, klasifikasi, tahun, tanggal terbit, dan tautan unduhan PDF.
- Informasi dikecualikan tetap tercantum tetapi tanpa tautan unduhan.
- Tautan unduhan PDF dapat dibuka pengunjung website Anda secara langsung, tanpa kunci.
Contoh pemasangan
Ganti KUNCI_OPD_ANDA atau PPID_API_KEY dengan kunci dari admin PPID. Panggil dari server website, bukan dari JavaScript di browser, agar kunci tidak terlihat pengunjung.
curl -H "X-API-Key: KUNCI_OPD_ANDA" \
"https://ppid.nunukankab.go.id/api/v1/informasi?per_halaman=5"<?php
// Simpan kunci di pengaturan server (mis. variabel lingkungan
// PPID_API_KEY), bukan di dalam kode.
$portal = 'https://ppid.nunukankab.go.id';
$kunci = getenv('PPID_API_KEY');
$ch = curl_init($portal . '/api/v1/informasi?per_halaman=10');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['X-API-Key: ' . $kunci],
CURLOPT_TIMEOUT => 10,
]);
$hasil = json_decode(curl_exec($ch), true);
curl_close($ch);
echo '<ul class="informasi-publik">';
foreach ($hasil['data'] ?? [] as $info) {
echo '<li><strong>' . htmlspecialchars($info['judul']) . '</strong>';
echo ' (' . htmlspecialchars($info['klasifikasi']['label']) . ', ' . $info['tahun'] . ')';
if (!empty($info['berkas'])) {
$unduh = $portal . $info['berkas']['url'];
echo ' <a href="' . htmlspecialchars($unduh) . '">Unduh PDF</a>';
}
echo '</li>';
}
echo '</ul>';// Node.js 18+ / Next.js (dijalankan di server, bukan di browser)
const portal = "https://ppid.nunukankab.go.id";
export async function ambilInformasi() {
const res = await fetch(portal + "/api/v1/informasi?per_halaman=10", {
headers: { "X-API-Key": process.env.PPID_API_KEY },
// Simpan sementara 10 menit agar hemat kuota.
next: { revalidate: 600 },
});
if (!res.ok) throw new Error("Gagal mengambil data PPID: " + res.status);
const { data } = await res.json();
return data.map((info) => ({
judul: info.judul,
tahun: info.tahun,
unduh: info.berkas ? portal + info.berkas.url : null,
}));
}Menerima permohonan informasi di website OPD
Website OPD dapat memasang formulir permohonan informasi sendiri. Isian dan dokumen pemohon diteruskan ke portal PPID lewat POST /api/v1/permohonan. Permohonan langsung masuk ke menu Permohonan OPD di panel Petugas OPD, dan pemohon menerima kode tiket serta email tanda terima.
- Batas waktu jawaban sama dengan PPID Utama: 10 hari kerja sejak diterima, dapat diperpanjang 7 hari kerja satu kali. Admin PPID memantau ketepatan waktunya.
- Pemohon dapat melacak di portal PPID (alamat ada di
lacakUrl), atau di website OPD memakaiGET /api/v1/permohonan/{kode}dengan email pemohon. - Ambil pilihan jenis pemohon dan dokumen wajibnya dari
/api/v1/referensi, lalu tampilkan unggahan dokumen yang sesuai. - Kirim dari server website, jangan langsung dari browser, dan hapus salinan dokumen pemohon di server website setelah terkirim.
<?php
// Dipanggil saat formulir permohonan di website OPD dikirim.
$portal = 'https://ppid.nunukankab.go.id';
$kunci = getenv('PPID_API_KEY');
$isian = [
'namaPemohon' => $_POST['namaPemohon'],
'nik' => $_POST['nik'],
'email' => $_POST['email'],
'telepon' => $_POST['telepon'],
'alamat' => $_POST['alamat'],
'rincianInformasi' => $_POST['rincianInformasi'],
'tujuanPenggunaan' => $_POST['tujuanPenggunaan'],
'jenisPemohon' => 'perorangan',
'caraMendapatkan' => 'email',
'caraMemperoleh' => 'softcopy',
// Dokumen wajib sesuai jenis pemohon (lihat /api/v1/referensi).
'dokumen_ktp' => new CURLFile(
$_FILES['ktp']['tmp_name'], $_FILES['ktp']['type'], $_FILES['ktp']['name']
),
];
$ch = curl_init($portal . '/api/v1/permohonan');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $isian, // otomatis multipart/form-data
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'X-API-Key: ' . $kunci,
// UUID per pengisian formulir: aman bila pengiriman diulang.
'Idempotency-Key: ' . $_POST['kunci_formulir'],
],
CURLOPT_TIMEOUT => 30,
]);
$hasil = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status === 201 || $status === 200) {
echo 'Permohonan terkirim. Kode tiket Anda: '
. htmlspecialchars($hasil['data']['kodeTiket']);
} else {
// 422: tampilkan pesan per isian dari $hasil['error']['details'].
foreach ($hasil['error']['details'] ?? [] as $galat) {
echo '<p>' . htmlspecialchars($galat['message']) . '</p>';
}
}curl -H "X-API-Key: KUNCI_OPD_ANDA" "https://ppid.nunukankab.go.id/api/v1/permohonan/PPID-2026-00042?email=pemohon@contoh.id"Isian formulir permohonan
- Idempotency-Key(opsional)
- UUID acak per pengisian formulir; mencegah permohonan ganda bila dikirim ulang.
- namaPemohon
- Nama lengkap, 3–160 karakter.
- nik
- NIK pemohon.
- Untuk tanda terima, kabar tahapan, dan melacak.
- telepon
- Nomor HP/telepon, mis. 081234567890.
- alamat
- 10–500 karakter.
- rincianInformasi
- Informasi yang diminta, 10–3000 karakter.
- tujuanPenggunaan
- 10–1000 karakter.
- jenisPemohon
- Kode jenis pemohon dari referensi (mis. perorangan); menentukan dokumen wajib.
- caraMendapatkan
- email atau langsung.
- caraMemperoleh
- hardcopy, melihat, atau softcopy.
- kategoriInformasi(opsional)
- Slug kategori informasi yang diminta (boleh kosong).
- dokumen_ktp, …
- Dokumen wajib sesuai jenis pemohon (lihat referensi): PDF/JPG/PNG, maks 5 MB per berkas.
Daftar alamat data
Alamat dasar: https://ppid.nunukankab.go.id/api/v1
| Alamat | Kegunaan | Kunci |
|---|---|---|
| GET /api/v1/informasi | Daftar informasi publik OPDInformasi terbit milik OPD pemilik kunci, terbaru lebih dulu. Informasi dikecualikan tampil tanpa berkas, dengan rincian pengecualian (jenis, dasar hukum, alasan, jangka waktu). | Perlu |
| GET /api/v1/informasi/{id} | Detail satu informasiSatu informasi terbit milik OPD pemilik kunci. Informasi OPD lain dijawab 404. | Perlu |
| GET /api/v1/informasi/{id}/berkas | Unduh dokumen PDFMengirim berkas PDF (application/pdf) tanpa kunci, agar pengunjung website OPD bisa langsung membukanya. Alamatnya ada di berkas.url (gabungkan dengan alamat portal). Tidak tersedia untuk informasi dikecualikan. | Tidak perlu |
| GET /api/v1/referensi | Kategori, klasifikasi & pilihan formulirDaftar kategori dan klasifikasi untuk menu atau saringan, serta pilihan formulir permohonan: jenis pemohon beserta dokumen wajibnya, cara mendapatkan, dan cara memperoleh informasi. | Perlu |
| POST /api/v1/permohonan | Kirim permohonan informasiMeneruskan permohonan informasi dari formulir di website OPD (multipart/form-data). Permohonan ditangani Petugas OPD di panel PPID dengan tenggat 10 hari kerja (dapat diperpanjang 7 hari kerja). Pemohon menerima kode tiket dan email tanda terima. Jawaban 201; pengiriman ulang dengan Idempotency-Key yang sama dijawab 200 dengan tanda terima yang sama. | Perlu |
| GET /api/v1/permohonan/{kode} | Status permohonanTahapan, batas waktu, dan dokumen hasil sebuah permohonan yang dikirim lewat website OPD Anda. Email pemohon wajib cocok. Tautan dokumen hasil berlaku 30 menit. | Perlu |
Menyaring daftar informasi
Tambahkan di belakang alamat daftar informasi, mis. /api/v1/informasi?kategori=keuangan&tahun=2026. Paling banyak 50 informasi per halaman.
- q
- Cari pada judul dan ringkasan.
- kategori
- Slug kategori, mis. keuangan.
- klasifikasi
- berkala, setiap_saat, serta_merta, atau dikecualikan.
- tahun
- Tahun informasi, mis. 2026.
- halaman
- Mulai dari 1 (bawaan 1).
- per_halaman
- 1–50 (bawaan 10).
Batas pemakaian dan pesan galat
Setiap kunci dapat meminta data paling banyak 1.000 kali per jam. Simpan hasil sementara 5–15 menit di website Anda agar hemat dan tetap cepat.
| Kode | Artinya | Yang perlu dilakukan |
|---|---|---|
| 401 KUNCI_TIDAK_ADA | Header X-API-Key tidak dikirim. | Pastikan header X-API-Key ikut dikirim pada setiap permintaan data. |
| 401 KUNCI_TIDAK_VALID | Kunci salah atau sudah dicabut/diganti. | Periksa kembali salinan kunci (tanpa spasi). Bila kunci diganti atau dicabut, minta kunci baru ke admin PPID. |
| 403 OPD_NONAKTIF | Akses OPD sedang dinonaktifkan admin PPID. | Hubungi admin PPID untuk mengaktifkan kembali akses OPD. |
| 404 NOT_FOUND | Informasi, berkas, atau permohonan tidak ada, belum terbit, atau milik OPD lain. | Periksa id informasi atau kode tiket dan email pemohon. Data yang belum terbit atau milik OPD lain tidak dapat diambil. |
| 409 IDEMPOTENCY_KEY_DIPAKAI | Idempotency-Key sudah dipakai permohonan lain. | Buat UUID baru untuk setiap pengisian formulir; jangan memakai nilai tetap. |
| 413 PAYLOAD_TOO_LARGE | Berkas permohonan terlalu besar (maks 5 MB per dokumen). | Perkecil berkas (mis. pindai ulang dengan resolusi lebih rendah) sampai di bawah 5 MB. |
| 415 UNSUPPORTED_MEDIA_TYPE | Permohonan harus dikirim sebagai multipart/form-data. | Kirim formulir sebagai multipart/form-data (di PHP: CURLOPT_POSTFIELDS berisi array dengan CURLFile). |
| 422 VALIDATION_ERROR | Parameter atau isian tidak valid; rinciannya ada di error.details. | Lihat error.details: setiap isian yang salah disebutkan beserta pesannya, mis. NIK harus 16 digit atau per_halaman harus 1–50. Tampilkan pesan itu ke pemohon. |
| 429 KUOTA_HABIS | Lebih dari 1.000 permintaan per jam; coba lagi setelah waktu di header Retry-After. | Tunggu sampai jam berikutnya. Simpan hasil sementara (cache) di website Anda agar tidak meminta data terus-menerus. |
Pertanyaan umum
Kapan dokumen baru muncul di website OPD?
Segera setelah admin PPID menerbitkannya. Bila website Anda menyimpan hasil sementara, dokumen muncul setelah waktu simpan itu habis.
Bagaimana jika kunci tersebar atau hilang?
Segera hubungi admin PPID. Admin membuat kunci baru dan kunci lama langsung tidak berlaku.
Apakah dokumen OPD juga tampil di portal PPID Kabupaten?
Tidak. Informasi milik OPD disalurkan ke website OPD masing-masing lewat API ini.
Siapa yang mengunggah dokumen OPD?
Petugas OPD yang akunnya dibuat admin PPID, melalui menu Informasi OPD di panel PPID.
Siapa yang menjawab permohonan dari website OPD?
Petugas OPD Anda, melalui menu Permohonan OPD di panel PPID. Email kabar tahapan dikirim atas nama PPID Pelaksana OPD Anda.
Butuh bantuan? Lihat kontak petugas PPID.
