API waktu matahari terbit dan terbenam v2
API gratis kami memberi tahu Anda kapan matahari terbit dan terbenam di mana saja di Bumi, ditambah data senja, golden hour, posisi matahari, dan bulan. Anda hanya perlu lintang dan bujur: Anda membuat permintaan GET sederhana dan mendapatkan jawabannya sebagai JSON.
Waktu diberikan dalam zona waktu lokal tempat tersebut, dan Anda dapat meminta satu hari atau hingga satu tahun penuh dalam satu permintaan.
API ini gratis digunakan: tidak perlu pendaftaran atau kunci API. Namun kami mewajibkan atribusi: tampilkan tautan yang terlihat ke sunrise-sunset.org di aplikasi atau halaman tempat Anda menampilkan data.
/json) telah dipindahkan ke dokumentasi v1. API itu sendiri tidak berubah dan didukung selamanya. Dokumentasi API
Buat permintaan GET ke https://api.sunrise-sunset.org/v2. Coba sekarang juga, tautan ini berfungsi di peramban Anda:
https://api.sunrise-sunset.org/v2?lat=36.7201600&lng=-4.4203400
HTTP biasa juga didukung: berguna untuk IoT dan perangkat tertanam (Arduino, ESP8266, mikrokontroler) yang tidak dapat membuat koneksi TLS.
Contoh lain: tanggal tertentu, dan satu tahun penuh dalam satu permintaan:
https://api.sunrise-sunset.org/v2?lat=36.7201600&lng=-4.4203400&date=2026-07-16 https://api.sunrise-sunset.org/v2?lat=36.7201600&lng=-4.4203400&date_start=2026-01-01&date_end=2026-12-31
Parameter permintaan
- lat (float): Lintang dalam derajat desimal, -90 hingga 90. Wajib
- lng (float): Bujur dalam derajat desimal, -180 hingga 180. Wajib
- date (string):
YYYY-MM-DD,todayatautomorrow. Bawaannya hari ini dalam zona waktu lokal koordinat. Opsional - date_start, date_end (string): Rentang tanggal dalam format
YYYY-MM-DD, hingga 366 hari dalam satu permintaan. Respons menjadi objek dengan arraydays. Jika Anda memerlukan lokasi yang sama setiap hari, minta satu tahun penuh sekaligus alih-alih satu permintaan per hari. Opsional - tz (string): Anda biasanya tidak memerlukan ini: secara bawaan waktu sudah dalam zona waktu tempat itu sendiri. Setel hanya jika Anda ingin waktu dinyatakan dalam zona lain, menggunakan nama zona waktu standar seperti
Europe/MadridatauAmerica/Los_Angeles(singkatan sepertiPSTditolak). Koordinat di perairan internasional diselesaikan ke zona nautikaEtc/GMT±N(hati-hati, tandanya terbalik:Etc/GMT+8berarti UTC−8). Opsional - time_format (string):
iso8601(bawaan) atauunix. Denganunix, semua waktu peristiwa adalah detik Unix epoch (UTC menurut definisi, praktis untuk klien tertanam);tzid/utc_offsettetap disertakan sebagai konteks, dandate/tztetap menentukan hari kalender lokal mana yang dihitung. Peristiwa yang tidak terjadi tetapnull. Opsional
Respons
Semua waktu menggunakan format ISO 8601: 2026-01-15T08:27:43+01:00 berarti 15 Januari pukul 08:27:43 pagi, waktu setempat (1 jam di depan UTC). Setiap bahasa pemrograman memahaminya langsung; di JavaScript, new Date(data.sunrise) langsung berfungsi. Contoh respons:
{
"date": "2026-01-15",
"tzid": "Europe/Madrid",
"utc_offset": "+01:00",
"lat": 36.7202,
"lng": -4.4203,
"sunrise": "2026-01-15T08:27:43+01:00",
"sunset": "2026-01-15T18:26:27+01:00",
"solar_noon": "2026-01-15T13:27:05+01:00",
"day_length": 35924,
"sun_status": "normal",
"civil_twilight_begin": "2026-01-15T08:01:01+01:00",
"civil_twilight_end": "2026-01-15T18:53:09+01:00",
"nautical_twilight_begin": "2026-01-15T07:29:13+01:00",
"nautical_twilight_end": "2026-01-15T19:24:57+01:00",
"astronomical_twilight_begin": "2026-01-15T06:58:10+01:00",
"astronomical_twilight_end": "2026-01-15T19:56:00+01:00",
"dawn": "2026-01-15T08:01:01+01:00",
"dusk": "2026-01-15T18:53:09+01:00",
"first_light": "2026-01-15T07:29:13+01:00",
"last_light": "2026-01-15T19:24:57+01:00",
"golden_hour": {
"morning": { "begin": "2026-01-15T08:11:54+01:00", "end": "2026-01-15T09:08:17+01:00" },
"evening": { "begin": "2026-01-15T17:46:10+01:00", "end": "2026-01-15T18:42:33+01:00" }
},
"blue_hour": {
"morning": { "begin": "2026-01-15T08:01:01+01:00", "end": "2026-01-15T08:11:54+01:00" },
"evening": { "begin": "2026-01-15T18:42:33+01:00", "end": "2026-01-15T18:53:09+01:00" }
},
"solar_position": {
"sunrise_azimuth": 118.31,
"sunset_azimuth": 241.82,
"solar_noon_azimuth": 180.09,
"solar_noon_altitude": 32.06
},
"moonrise": "2026-01-15T06:01:54+01:00",
"moonset": "2026-01-15T15:14:23+01:00",
"moon_phase": "Waning Crescent",
"moon_illumination": 10.62
}
Dengan date_start/date_end, responsnya adalah {"tzid", "lat", "lng", "days": […]} di mana setiap elemen days memiliki bidang di atas (tanpa tzid/lat/lng).
Definisi bidang
Apa arti setiap bidang, dengan kata-kata sederhana, dengan definisi tepat dalam tanda kurung (permintaan yang sama selalu mengembalikan waktu yang persis sama):
- sunrise / sunset: saat tepi atas matahari melintasi cakrawala (pusat matahari pada −0,833°, dengan memperhitungkan refraksi atmosfer).
- dawn / dusk: saat cukup terang untuk berada di luar tanpa cahaya buatan (senja sipil, matahari pada −6°). Nilai sama dengan
civil_twilight_begin/end. - first_light / last_light: petunjuk cahaya paling awal dan paling akhir di langit: sebelum first_light dan setelah last_light malam benar-benar gelap (senja astronomi, matahari pada −18°). Nilai sama dengan
astronomical_twilight_begin/end. - nautical twilight: cakrawala masih terlihat di laut (matahari pada −12°).
- golden_hour: cahaya hangat dan lembut tepat setelah matahari terbit dan sebelum matahari terbenam, favorit para fotografer (matahari antara −4° dan +6°, pagi dan sore).
- blue_hour: langit biru pekat tepat sebelum fajar dan tepat setelah senja (matahari antara −6° dan −4°, pagi dan sore).
- day_length: detik antara matahari terbit dan terbenam.
- solar_position: di mana matahari berada di langit: azimut adalah arah kompas (derajat dari utara, searah jarum jam: 90 adalah timur, 270 adalah barat) saat matahari terbit, terbenam, dan tengah hari matahari; ketinggian adalah seberapa tinggi di atas cakrawala saat tengah hari matahari.
- moonrise / moonset: saat bulan muncul dan menghilang di atas cakrawala, dalam hari kalender lokal tersebut. Kira-kira satu hari dalam sebulan setiap peristiwa memang tidak terjadi; maka nilainya
null. (Teknis: topocentris, tepi atas, refraksi standar; di lintang tinggi bulan dapat melintasi cakrawala lebih dari dua kali sehari; terbit pertama dan terbenam terakhir dilaporkan.) - moon_phase / moon_illumination: nama fase (Bulan Baru, Bulan Sabit Muda, Kuartal Pertama, Bulan Cembung Muda, Bulan Purnama, Bulan Cembung Tua, Kuartal Terakhir, Bulan Sabit Tua) dan berapa banyak bulan yang tampak menyala, dalam persen. Keduanya dievaluasi pada tengah hari lokal.
Lihat glosarium definisi astronomi kami untuk mempelajari lebih lanjut tentang setiap peristiwa.
Hari kutub dan nilai null
sun_status adalah normal, midnight_sun (matahari tidak pernah terbenam: day_length adalah 86400) atau polar_night (matahari tidak pernah terbit: day_length adalah 0). Peristiwa yang tidak terjadi adalah null. Semua peristiwa dapat bernilai null secara independen: dekat lingkaran kutub ada hari transisi di mana matahari terbit tetapi tidak terbenam dalam hari kalender; maka sunrise memiliki nilai, sunset adalah null, sun_status adalah normal dan day_length adalah null. Jangan pernah menyimpulkan satu peristiwa dari peristiwa lain.
Kesalahan
Jika ada yang salah dalam permintaan Anda, API memberi tahu Anda apa yang terjadi dan cara memperbaikinya, dengan kata-kata sederhana:
{
"error": "invalid_tz",
"message": "Unknown tz 'PST'. Use IANA identifiers like 'America/Los_Angeles'.",
"docs": "https://sunrise-sunset.org/api#tz"
}
Untuk yang berorientasi teknis: kode status HTTP standar digunakan: 400 untuk input tidak valid, 404 untuk rute tidak dikenal, 429 saat Anda mengirim terlalu banyak permintaan terlalu cepat.
Batas penggunaan dan atribusi
API ini gratis untuk volume permintaan yang wajar. Kami mewajibkan Anda menampilkan atribusi kepada kami dengan tautan ke situs kami.
Jika Anda mengirim terlalu banyak permintaan terlalu cepat, API menjawab 429 ("pelan-pelan") dengan header Retry-After yang memberi tahu berapa detik harus menunggu sebelum mencoba lagi. Rentang tanggal dihitung sebagai satu permintaan, jadi jika Anda menampilkan data untuk tempat yang sama setiap hari, minta satu tahun penuh sekaligus dengan date_start/date_end: lebih cepat untuk Anda, lebih ringan untuk semua orang.
Tips lain agar tetap jauh di bawah batas: waktu untuk tanggal tertentu tidak pernah berubah, jadi simpan respons dan gunakan kembali alih-alih meminta lagi (peramban bahkan melakukannya secara otomatis dengan respons kami). (Detail teknis: tanggal eksplisit disajikan dengan Cache-Control: immutable, today/tomorrow dengan max-age hingga tengah malam lokal, dan ETag didukung.)
Menggunakan API dari halaman web (JavaScript)
Anda dapat memanggil API langsung dari halaman web Anda, tanpa server atau backend: permintaan dari situs mana pun diizinkan:
fetch('https://api.sunrise-sunset.org/v2?lat=36.72&lng=-4.42')
.then(response => response.json())
.then(data => {
console.log('Sunrise:', data.sunrise);
console.log('Sunset:', data.sunset);
});
Bermigrasi dari v1
| v1 (/json) | v2 (/v2) |
|---|---|
formatted=0 (ISO 8601) | selalu ISO 8601, tidak perlu parameter |
formatted=1 (12h AM/PM) | dihapus |
tzid=X (nilai tidak valid diam-diam kembali ke UTC) | tz=X (nilai tidak valid mengembalikan HTTP 400 invalid_tz) |
| waktu bawaannya UTC | waktu bawaannya zona waktu lokal koordinat |
callback (JSONP) | dihapus (gunakan CORS) |
kesalahan sebagai status: INVALID_* | kesalahan sebagai {error, message, docs} |
| hari kutub: stempel waktu epoch-1970 | null + sun_status |
lat=abc dihitung sebagai 0 | HTTP 400 invalid_lat |
| satu permintaan per hari | date_start/date_end (hingga 366 hari) |
| n/a | golden hour dan blue hour, azimut, ketinggian matahari |
Pengumuman
Berlangganan buletin API kami untuk mendapatkan informasi terbaru tentang perubahan dan pengumuman layanan:
Catatan perubahan
- 8 Juli 2026: data bulan (moonrise, moonset, phase, illumination) dan
time_format=unixditambahkan ke v2. - 5 April 2026: API v2 dirilis.
- Pembaruan lama di changelog v1.
Kontak
Silakan hubungi kami untuk semua pertanyaan API Anda.
Jika Anda senang menggunakan API kami, silakan pertimbangkan untuk mendukung proyek ini dengan membelikan kami kopi!