Jadwal sholat dan hari libur gratis selamanya — tanpa API key. Bangun aplikasi lengkap tanpa mengeluarkan satu rupiah pun untuk API.
Dua endpoint di API.MY.ID gratis sepenuhnya dan tidak butuh API key: jadwal sholat dan hari libur nasional. Tidak ada kuota, tidak ada poin, tidak ada pendaftaran. Artikel ini membangun aplikasi pengingat sholat sederhana di atasnya.
Panggilan pertama
Tanpa header, tanpa autentikasi — cukup satu GET:
curl "https://v1.api.my.id/sholat?city=jakarta"
{
"status": "success",
"data": {
"city": { "slug": "jakarta", "name": "Jakarta" },
"date": "2026-07-09",
"timezone": "WIB",
"jadwal": {
"imsak": "04:31", "subuh": "04:41", "terbit": "06:04", "dhuha": "06:28",
"dzuhur": "12:00", "ashar": "15:20", "maghrib": "17:53", "isya": "19:06"
}
}
}Bagaimana waktunya dihitung
Waktu sholat bukan data yang disimpan di tabel — ia dihitung dari posisi matahari untuk koordinat dan tanggal yang diminta. Kami memakai konvensi sudut yang lazim dipakai Kemenag: Subuh pada −20°, Isya pada −18°, terbit dan maghrib pada −0,833° (memperhitungkan refraksi atmosfer dan radius matahari), dan Ashar dengan metode Syafi'i. Ihtiyat +2 menit ditambahkan pada Dzuhur dan Maghrib sebagai margin kehati-hatian.
Konsekuensi praktisnya: 54 kota didukung dengan zona waktu yang benar (WIB, WITA, WIT), dan Anda bisa meminta tanggal berapa pun — kemarin, hari ini, atau Ramadhan tahun depan.
Menjadwalkan notifikasi
Pola yang benar: ambil jadwal sekali sehari, lalu jadwalkan notifikasi lokal. Jangan polling API setiap menit — jadwalnya tidak berubah.
const WAKTU = ['subuh', 'dzuhur', 'ashar', 'maghrib', 'isya'];
async function jadwalkanHariIni(kota = 'jakarta') {
const res = await fetch(`https://v1.api.my.id/sholat?city=${kota}`);
const { data } = await res.json();
for (const nama of WAKTU) {
const [jam, menit] = data.jadwal[nama].split(':').map(Number);
const waktu = new Date();
waktu.setHours(jam, menit, 0, 0);
const selisih = waktu - Date.now();
if (selisih <= 0) continue; // sudah lewat hari ini
setTimeout(() => {
new Notification(`Waktu ${nama}`, {
body: `${data.jadwal[nama]} ${data.timezone} — ${data.city.name}`,
});
}, selisih);
}
}
// jalankan saat aplikasi dibuka, dan setiap tengah malam
jadwalkanHariIni();setTimeout di atas hanya untuk menunjukkan idenya.Ramadhan: imsak dan buka puasa
Untuk timer sahur dan berbuka, dua field yang Anda butuhkan sudah ada di respons yang sama: imsak dan maghrib. Karena Anda bisa meminta tanggal berapa pun, seluruh kalender Ramadhan bisa diambil sekali dan disimpan lokal:
async function kalenderRamadhan(kota, mulai, hari = 30) {
const jadwal = [];
for (let i = 0; i < hari; i++) {
const t = new Date(mulai);
t.setDate(t.getDate() + i);
const tgl = t.toISOString().slice(0, 10);
const res = await fetch(`https://v1.api.my.id/sholat?city=${kota}&date=${tgl}`);
const { data } = await res.json();
jadwal.push({ tanggal: tgl, imsak: data.jadwal.imsak, buka: data.jadwal.maghrib });
}
return jadwal; // simpan di localStorage / SQLite
}Bonus: kalender hari libur
Endpoint gratis kedua melengkapi aplikasi kalender apa pun. Ia mengembalikan libur nasional dan cuti bersama sesuai SKB 3 Menteri, dengan flag yang membedakan keduanya:
curl "https://v1.api.my.id/holidays/upcoming?limit=3"
Karena keduanya gratis dan tanpa key, seluruh aplikasi ini bisa berjalan tanpa backend sama sekali — panggil langsung dari klien. Ini satu-satunya kasus di mana kami menyarankan itu, justru karena tidak ada key yang bisa bocor.
Siap mencoba?
Buat akun gratis dan dapatkan API key — 5.000 hits gratis per bulan, dan dua endpoint yang tak butuh key sama sekali.