Integrasi data fasilitas

Dokumentasi API Fasilitas simPORA

Halaman ini dapat dibagikan ke dinas, aplikasi, atau mitra yang membutuhkan daftar fasilitas publik UPTD PPO dalam format JSON.

Mulai Integrasi
Endpoint utama GET /api/public/facilities
Keamanan X-API-Key
Limit harian 1.000 request / 24 jam
Total fasilitas publik 30
Jenis fasilitas 7
Kawasan GOR 2
Quick start

Alur penggunaan untuk dinas lain

API ini disiapkan untuk integrasi read-only. Pengguna hanya menerima data fasilitas yang memang ditandai publik di simPORA.

1

Minta API key

Pengelola simPORA membuat satu API key untuk tiap dinas atau aplikasi agar pemakaian mudah dipantau.

2

Kirim lewat header

Setiap request wajib menyertakan header X-API-Key atau Authorization: Bearer.

3

Gunakan data JSON

Ambil daftar fasilitas, simpan seperlunya di sistem pemakai, dan tampilkan link detail atau pemesanan.

Endpoint

Endpoint fasilitas publik

Semua endpoint memakai format JSON dan hanya menerima metode GET.

GET

https://simpora.co.id/api/public/facilities

Menampilkan daftar fasilitas publik dengan pagination dan filter ringan.

GET

https://simpora.co.id/api/public/facilities/{uuid}

Menampilkan satu fasilitas berdasarkan UUID dari hasil endpoint daftar.

Parameter Contoh Keterangan
q stadion Cari nama, jenis, lokasi, atau GOR.
jenis Lapangan Filter berdasarkan jenis fasilitas.
gor_id 1 Filter berdasarkan ID GOR yang dikirim pada objek gor.
page 2 Nomor halaman hasil.
per_page 20 Maksimal 50 data per request.
Keamanan

Aturan keamanan API

  • API key dibuat per dinas atau aplikasi, bukan satu key bersama untuk semua pemakai.
  • Endpoint eksternal ini read-only dan hanya membuka data fasilitas dengan status publik = 1.
  • Data teknis internal seperti operator, pemilik kontak, dan endpoint perubahan data tidak dikirim.
  • Jangan menaruh API key di source code frontend publik. Pakai backend/proxy milik dinas pemakai bila integrasi tampil di website.
  • Gunakan HTTPS di domain produksi agar API key tidak terkirim sebagai teks terbuka.
Limit harian

1.000 request per 24 jam

Limit dihitung per API key. Saat limit habis, API mengembalikan HTTP 429. Response juga membawa header rate limit agar aplikasi pemakai bisa menampilkan sisa kuota.

X-RateLimit-Limit jumlah kuota X-RateLimit-Remaining sisa kuota Retry-After waktu tunggu saat terkena 429
Contoh request

Siap ditempel ke aplikasi pemakai

Ganti API_KEY_DINAS_ANDA dengan API key yang diberikan pengelola simPORA.

cURL
curl -H "Accept: application/json" \
  -H "X-API-Key: API_KEY_DINAS_ANDA" \
  "https://simpora.co.id/api/public/facilities?per_page=10"
JavaScript
const response = await fetch('https://simpora.co.id/api/public/facilities?q=stadion', {
  headers: {
    Accept: 'application/json',
    'X-API-Key': 'API_KEY_DINAS_ANDA'
  }
});

const result = await response.json();
console.log(result.data);
PHP
$client = new \GuzzleHttp\Client();

$response = $client->get('https://simpora.co.id/api/public/facilities', [
    'headers' => [
        'Accept' => 'application/json',
        'X-API-Key' => 'API_KEY_DINAS_ANDA',
    ],
    'query' => [
        'per_page' => 10,
    ],
]);

$facilities = json_decode($response->getBody(), true);
Response

Format data yang diterima

Struktur response dibuat stabil agar mudah dipakai oleh website, dashboard, atau aplikasi mobile.

JSON
{
  "data": [
    {
      "uuid": "018f7b5d-3f78-7f7b-9c12-6f0d7756f102",
      "nama": "Stadion Utama",
      "jenis": "Stadion",
      "status": "Aktif",
      "kapasitas": 30000,
      "satuan": "orang",
      "luas_m2": 12000,
      "jumlah": 1,
      "lokasi": "Komplek Stadion Utama",
      "foto_url": "https://simpora.example/storage/facilities/stadion.jpg",
      "detail_api_url": "https://simpora.co.id/api/public/facilities/{uuid}",
      "booking_url": "https://pwa.simpora.co.id/facility/018f7b5d-3f78-7f7b-9c12-6f0d7756f102",
      "gor": {
        "id": 1,
        "nama": "Gelora Kadrie Oening",
        "singkatan": "GKO"
      },
      "updated_at": "2026-05-16T08:00:00+08:00"
    }
  ],
  "meta": {
    "current_page": 1,
    "per_page": 10,
    "total": 25,
    "last_page": 3,
    "daily_limit": 1000
  },
  "links": {
    "first": "https://simpora.co.id/api/public/facilities?page=1",
    "last": "https://simpora.co.id/api/public/facilities?page=3",
    "prev": null,
    "next": "https://simpora.co.id/api/public/facilities?page=2"
  }
}
Cara menyebarkan

Panduan untuk diberikan ke dinas pemakai

  1. Bagikan link halaman ini: https://simpora.co.id/dokumentasi-api.
  2. Buat API key khusus untuk dinas tersebut, lalu kirim lewat kanal resmi.
  3. Sampaikan limit harian, kontak pengelola, dan larangan membagikan API key ke pihak lain.
  4. Minta pemakai menguji endpoint daftar lebih dulu sebelum mengambil endpoint detail.
  5. Rotasi API key bila dinas mengganti vendor, perangkat, atau ada indikasi key tersebar.
Konfigurasi server

Contoh konfigurasi .env

PUBLIC_API_KEYS=dinas-a-token,dinas-b-token
PUBLIC_API_DAILY_LIMIT=1000
PUBLIC_API_PER_PAGE=20
PUBLIC_API_MAX_PER_PAGE=50

Setelah mengubah konfigurasi produksi, jalankan php artisan config:clear atau ulangi proses deploy agar konfigurasi baru terbaca.

Error response

Kode status yang perlu ditangani

401 API key kosong atau tidak valid.
404 UUID fasilitas tidak ditemukan atau tidak publik.
429 Limit harian atau limit menit terlampaui.
503 API key belum dikonfigurasi di server.
Tersalin