Referensi API
Base URL https://api.apihub.co.id/v1. Semua request wajib menyertakan header Authorization: Bearer YOUR_API_KEY.
Mulai
- Daftar di dashboard, lalu konfirmasi email verifikasi yang kami kirim.
- Buat API key di menu API Keys dan salin segera, key hanya ditampilkan sekali. Key baru hanya bisa dibuat setelah email terverifikasi.
- Kirim request dengan header
Authorization: Bearer YOUR_API_KEY. Batas request berlaku per akun untuk semua key sekaligus, sesuai paket: Free 2, Starter 10, Pro 30, Business 60 request/detik. Paket Free juga dibatasi 1.000 request/hari untuk endpoint gratis (reset 00:00 WIB). Respons429menyertakan headerRetry-After.
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.apihub.co.id/v1/regions/provinces"Semua endpoint memakai amplop respons yang sama:
{
"success": true,
"data": [ ... ],
"meta": { "request_id": "...", "credits_used": 0 }
}
{
"success": false,
"error": { "code": "INVALID_API_KEY", "message": "..." },
"meta": { "request_id": "..." }
}Wilayah administratif
Kode wilayah sesuai Kepmendagri No 300.2.2-2138 Tahun 2025. Semua endpoint mendukung page dan limit; info halaman ada di meta.pagination.
/v1/regions/provinces?page=&limit=GratisDaftar provinsi.
/v1/regions/regencies?province_id=11GratisDaftar kabupaten/kota dalam satu provinsi.
/v1/regions/districts?regency_id=11.01GratisDaftar kecamatan dalam satu kabupaten/kota.
/v1/regions/villages?district_id=11.01.01GratisDaftar desa/kelurahan dalam satu kecamatan.
Hari libur & cuti bersama
/v1/holidays?year=2027&month=1GratisHari libur nasional dan cuti bersama. Data tersedia untuk 2025–2027.
Jadwal sholat
Dihitung dengan kriteria Kemenag (Subuh 20°, Isya 18°).
/v1/prayer-times?city_id=11.01&date=2026-10-17GratisJadwal sholat harian per kota/kabupaten.
/v1/prayer-times/cities?query=bandung&province_id=32GratisCari atau daftar kota untuk jadwal sholat.
Akun
Endpoint baca berikut menerima API key (tanpa biaya kredit), jadi saldo dan pemakaian bisa dicek dari kode Anda. Selebihnya di bawah /account (profil, API key, ganti paket, top-up) hanya tersedia dari dashboard.
/v1/account/meRingkasan akun dan langganan. Hanya sesi dashboard.
/v1/account/creditsSaldo kredit.
/v1/account/usageRingkasan pemakaian bulanan.
/v1/account/plansDaftar paket langganan.
/v1/account/subscribeHanya sesi dashboard. Body { "plan": "starter" | "pro" | "business" }. Mengembalikan checkout_url ke halaman pembayaran DOKU (Virtual Account bank, e-wallet, dan metode lain yang didukung DOKU); paket aktif setelah pembayaran terkonfirmasi. Upgrade, perpanjangan, downgrade, atau pemulihan ditentukan otomatis (lihat Penagihan). Pindah ke Free tidak perlu: paket berbayar berakhir sendiri di akhir periode. Selama pembayaran online belum aktif, mengembalikan PAYMENT_UNAVAILABLE (503).
/v1/account/topupHanya sesi dashboard. Body { "amount_idr": 50000 }. Mengembalikan checkout_url ke halaman pembayaran DOKU; kredit prabayar masuk setelah pembayaran terkonfirmasi. Selama pembayaran online belum aktif, mengembalikan PAYMENT_UNAVAILABLE (503).
Penagihan & retry
- Kredit hanya dipotong untuk respons sukses (2xx). Respons 4xx dan 5xx tidak dikenai biaya.
- Paket berjalan per periode 30 hari dan dibayar manual tiap periode, tanpa tagihan otomatis.
- Perpanjangan paket yang sama bisa dibayar mulai 7 hari sebelum periode berakhir. Sisa kredit langganan ikut terbawa ke periode baru, maksimal 2× kuota, sehingga saldo langganan paling banyak 3× kuota.
- Upgrade berlaku langsung dengan periode baru; sisa kredit langganan ditambahkan ke kuota paket baru.
- Downgrade ke paket berbayar yang lebih rendah dibayar di jendela perpanjangan dan berlaku di akhir periode; sisa kredit langganan hangus.
- Jika tidak diperpanjang, akun kembali ke paket Free dan sisa kredit langganan hangus. Bayar paket yang sama dalam 3 hari setelahnya untuk memulihkan paket beserta kreditnya.
- Paket Free diperbarui otomatis tiap periode dengan kuota penuh; sisa kreditnya tidak terbawa.
- Kredit prabayar (top-up mulai Rp 50.000) tidak pernah hangus dan tidak terkena batas rollover.
- Kredit langganan dipakai sebelum kredit prabayar. Kredit yang di-refund kembali ke sumber asalnya.
- Kirim header
Idempotency-Key: <uuid>untuk retry yang aman. Pengulangan request yang sudah selesai dilayani kembali dengan 0 kredit dan headerIdempotent-Replayed: true. Pengulangan saat request pertama masih berjalan mengembalikanDUPLICATE_REQUEST(409). Jika request gagal, key boleh dipakai ulang.
Kode error umum
| Kode | HTTP |
|---|---|
| INVALID_PARAMETER | 400 |
| INVALID_API_KEY | 401 |
| UNAUTHORIZED | 401 |
| INSUFFICIENT_CREDITS | 402 |
| EMAIL_NOT_VERIFIED | 403 |
| PLAN_LIMIT_REACHED | 403 |
| NOT_FOUND | 404 |
| DUPLICATE_REQUEST | 409 |
| RATE_LIMITED | 429 |
| DAILY_LIMIT_REACHED | 429 |
| INTERNAL_ERROR | 500 |
| UPSTREAM_UNAVAILABLE | 502 |
| ENDPOINT_UNAVAILABLE | 503 |
| PAYMENT_UNAVAILABLE | 503 |
| UPSTREAM_TIMEOUT | 504 |
SDK TypeScript
npm install @apihub/sdk
import { ApiHubClient } from "@apihub/sdk";
const client = new ApiHubClient({ apiKey: "YOUR_API_KEY" });
const holidays = await client.listHolidays({ year: 2027 });