Hidrologi Data API
# Ringkasan
-
Base URL
https://api.hidrologi.id -
Format
JSON — method
GETsaja, tanpa body request.
# Daftar Endpoint
| # | Method | URI | Keterangan |
|---|---|---|---|
| 1 | GET | /pos-pengamat | Daftar pos (titik pantau) curah-hujan, duga-air, & iklim |
| 2 | GET | /curah-hujan | Data curah hujan H-1, dikelompokkan per Wilayah Sungai (WS) |
| 3 | GET | /curah-hujan/{id} | Data curah hujan H-1 untuk satu pos |
| 4 | GET | /curah-hujan/tertinggi | Peringkat curah hujan dari bacaan terbaru dalam 10 hari terakhir, tertinggi ke terendah (array datar) |
| 5 | GET | /duga-air | Data duga air (tinggi muka air) H-1, dikelompokkan per WS |
| 6 | GET | /duga-air/{id} | Data duga air H-1 untuk satu pos |
| 7 | GET | /duga-air/tertinggi | Peringkat duga air dari TMA harian terbaru dalam 10 hari terakhir (array datar) |
| 8 | GET | /klimatologi | Data iklim H-1 (field turunan), dikelompokkan per WS |
| 9 | GET | /klimatologi/{id} | Data iklim H-1 untuk satu pos |
| 10 | GET | /kualitas-air | Data kualitas air tahun terbaru (IP & Storet) + label mutu, dikelompokkan per WS |
| 11 | GET | /kualitas-air/{id} | Data kualitas air tahun terbaru untuk satu pos |
# Pos Pengamat
GET
/pos-pengamat
Daftar pos bertipe curah hujan, duga air, dan iklim, diurutkan berdasarkan nama.
Parameter: tidak ada.
Contoh Request
GET /pos-pengamat
Host: api.hidrologi.id
Contoh Response — 200
[
{ "id": 1, "type": "curah-hujan", "nama": "Pos Curah Hujan A", "thumbnailUrl": false },
{ "id": 2, "type": "duga-air", "nama": "Pos Duga Air B", "thumbnailUrl": false },
{ "id": 3, "type": "iklim", "nama": "Pos Iklim C", "thumbnailUrl": false }
]
Field
| Field | Tipe | Keterangan |
|---|---|---|
| id | int | titik_pantau.id |
| type | string | curah-hujan / duga-air / iklim |
| nama | string | Nama pos |
| thumbnailUrl | bool/string | URL thumbnail, atau false bila kosong |
# Curah Hujan
GET
/curah-hujan
Data curah hujan untuk tanggal H-1, dikelompokkan per Wilayah Sungai (ws).
Parameter: tidak ada.
Contoh Request
GET /curah-hujan
Host: api.hidrologi.id
Contoh Response — 200
Objek dengan key nama Wilayah Sungai (ws), value array pos.
{
"WS MAHAKAM": [
{
"id": 1,
"tanggal": "2026-09-09 00:00:00",
"tipe": "curah-hujan",
"nama": "Pos Curah Hujan A",
"wilayah_sungai": "WS MAHAKAM",
"daerah_aliran_sungai": "DAS TELAKE",
"sub_daerah_aliran_sungai": "SUB TELAKE",
"induk": "INDUK TELAKE",
"sungai": "SUNGAI TELAKE",
"desa": "LONG KALI",
"kecamatan": "LONG KALI",
"kabupaten": "KAB. PASER",
"provinsi": "KALIMANTAN TIMUR",
"tinggi_hujan": 12.5,
"thumbnailUrl": false
}
]
}
Field
| Field | Tipe | Sumber |
|---|---|---|
| id | int | titik_pantau.id |
| tanggal | string | hasil_pemantauan.recorded_at |
| tipe | string | titik_pantau.type |
| nama | string | titik_pantau.nama |
| wilayah_sungai | string/null | titik_pantau.ws |
| daerah_aliran_sungai | string/null | titik_pantau.das |
| sub_daerah_aliran_sungai | string/null | titik_pantau.subdas |
| induk | string/null | titik_pantau.induk |
| sungai | string/null | titik_pantau.sungai |
| desa | string/null | titik_pantau.desa |
| kecamatan | string/null | titik_pantau.kecamatan |
| kabupaten | string/null | titik_pantau.kabupaten |
| provinsi | string/null | titik_pantau.provinsi |
| tinggi_hujan | float/null | curah_hujan.tinggi_hujan |
| thumbnailUrl | bool/string | Accessor thumbnailUrl |
# Curah Hujan per Pos
GET
/curah-hujan/{id}
Data curah hujan H-1 untuk satu pos (tanpa grouping).
Parameter: {id} (path) — titik_pantau.id.
Contoh Request
GET /curah-hujan/1
Host: api.hidrologi.id
Contoh Response — 200
Satu objek dengan field yang sama seperti Curah Hujan,
atau JSON null bila tidak ditemukan.
{
"id": 1,
"tanggal": "2026-09-09 00:00:00",
"tipe": "curah-hujan",
"nama": "Pos Curah Hujan A",
"wilayah_sungai": "WS MAHAKAM",
"daerah_aliran_sungai": "DAS TELAKE",
"sub_daerah_aliran_sungai": "SUB TELAKE",
"induk": "INDUK TELAKE",
"sungai": "SUNGAI TELAKE",
"desa": "LONG KALI",
"kecamatan": "LONG KALI",
"kabupaten": "KAB. PASER",
"provinsi": "KALIMANTAN TIMUR",
"tinggi_hujan": 12.5,
"thumbnailUrl": false
}
# Curah Hujan Tertinggi
GET
/curah-hujan/tertinggi
Parameter: tidak ada.
Contoh Request
GET /curah-hujan/tertinggi
Host: api.hidrologi.id
Contoh Response — 200
[
{
"id": 1,
"tanggal": "2026-09-09 00:00:00",
"tipe": "curah-hujan",
"nama": "Pos Curah Hujan A",
"wilayah_sungai": "WS MAHAKAM",
"daerah_aliran_sungai": "DAS TELAKE",
"sub_daerah_aliran_sungai": "SUB TELAKE",
"induk": "INDUK TELAKE",
"sungai": "SUNGAI TELAKE",
"desa": "LONG KALI",
"kecamatan": "LONG KALI",
"kabupaten": "KAB. PASER",
"provinsi": "KALIMANTAN TIMUR",
"tinggi_hujan": 25.0,
"thumbnailUrl": false
}
]
# Duga Air
GET
/duga-air
Data duga air (tinggi muka air) untuk tanggal H-1, dikelompokkan per Wilayah Sungai (ws).
Parameter: tidak ada.
Contoh Request
GET /duga-air
Host: api.hidrologi.id
Contoh Response — 200
Objek keyed by ws (sama seperti curah hujan), dengan field nilai tma_07, tma_12, tma_17.
{
"WS MAHAKAM": [
{
"id": 2,
"tanggal": "2026-09-09 00:00:00",
"tipe": "duga-air",
"nama": "Pos Duga Air B",
"wilayah_sungai": "WS MAHAKAM",
"daerah_aliran_sungai": "TELAKE",
"sub_daerah_aliran_sungai": "SUB TELAKE",
"induk": "TELAKE",
"sungai": "TELAKE",
"desa": "LONG KALI",
"kecamatan": "LONG KALI",
"kabupaten": "KAB. PASER",
"provinsi": "KALIMANTAN TIMUR",
"tma_07": 0.76,
"tma_12": 1.1,
"tma_17": 0.65,
"thumbnailUrl": false
}
]
}
Field
| Field | Tipe | Sumber |
|---|---|---|
| id | int | titik_pantau.id |
| tanggal | string | hasil_pemantauan.recorded_at |
| tipe | string | titik_pantau.type |
| nama | string | titik_pantau.nama |
| wilayah_sungai | string/null | titik_pantau.ws |
| daerah_aliran_sungai | string/null | titik_pantau.das |
| sub_daerah_aliran_sungai | string/null | titik_pantau.subdas |
| induk | string/null | titik_pantau.induk |
| sungai | string/null | titik_pantau.sungai |
| desa | string/null | titik_pantau.desa |
| kecamatan | string/null | titik_pantau.kecamatan |
| kabupaten | string/null | titik_pantau.kabupaten |
| provinsi | string/null | titik_pantau.provinsi |
| tma_07 | float/null | duga_air.tma_07 |
| tma_12 | float/null | duga_air.tma_12 |
| tma_17 | float/null | duga_air.tma_17 |
| thumbnailUrl | bool/string | Accessor thumbnailUrl |
# Duga Air per Pos
GET
/duga-air/{id}
Data duga air H-1 untuk satu pos (tanpa grouping).
Parameter: {id} (path) — titik_pantau.id.
Contoh Request
GET /duga-air/2
Host: api.hidrologi.id
Contoh Response — 200
Satu objek dengan field yang sama seperti Duga Air,
atau JSON null bila tidak ditemukan.
{
"id": 2,
"tanggal": "2026-09-09 00:00:00",
"tipe": "duga-air",
"nama": "Pos Duga Air B",
"wilayah_sungai": "WS MAHAKAM",
"daerah_aliran_sungai": "TELAKE",
"sub_daerah_aliran_sungai": "SUB TELAKE",
"induk": "TELAKE",
"sungai": "TELAKE",
"desa": "LONG KALI",
"kecamatan": "LONG KALI",
"kabupaten": "KAB. PASER",
"provinsi": "KALIMANTAN TIMUR",
"tma_07": 0.76,
"tma_12": 1.1,
"tma_17": 0.65,
"thumbnailUrl": false
}
# Duga Air Tertinggi
GET
/duga-air/tertinggi
Parameter: tidak ada.
Contoh Request
GET /duga-air/tertinggi
Host: api.hidrologi.id
Contoh Response — 200
[
{
"id": 2,
"tanggal": "2026-09-09 00:00:00",
"tipe": "duga-air",
"nama": "Pos Duga Air B",
"wilayah_sungai": "WS MAHAKAM",
"daerah_aliran_sungai": "TELAKE",
"sub_daerah_aliran_sungai": "SUB TELAKE",
"induk": "TELAKE",
"sungai": "TELAKE",
"desa": "LONG KALI",
"kecamatan": "LONG KALI",
"kabupaten": "KAB. PASER",
"provinsi": "KALIMANTAN TIMUR",
"tma_07": 0.76,
"tma_12": 1.1,
"tma_17": 0.65,
"tma": null,
"thumbnailUrl": false
}
]
# Klimatologi
GET
/klimatologi
Data iklim untuk tanggal H-1, dikelompokkan per Wilayah Sungai (ws).
Parameter: tidak ada.
Contoh Request
GET /klimatologi
Host: api.hidrologi.id
Contoh Response — 200
Objek dengan key nama Wilayah Sungai (ws), value array pos.
{
"WS MAHAKAM": [
{
"id": 3,
"tanggal": "2026-09-09 00:00:00",
"tipe": "iklim",
"nama": "Pos Iklim C",
"wilayah_sungai": "WS MAHAKAM",
"daerah_aliran_sungai": "DAS TELAKE",
"sub_daerah_aliran_sungai": "SUB TELAKE",
"induk": "TELAKE",
"sungai": "TELAKE",
"desa": "LONG KALI",
"kecamatan": "LONG KALI",
"kabupaten": "KAB. PASER",
"provinsi": "KALIMANTAN TIMUR",
"rh": 70.5,
"termometer_max": 32.5,
"termometer_min": 23.5,
"termometer_rerata": 28.0,
"apung_rerata": 29.0,
"anemo_kec": 1.0,
"evaporasi": 10.0,
"sinar_matahari": 18.1,
"radiasi": 308.22,
"curah_hujan": 5.0,
"thumbnailUrl": false
}
]
}
Field
| Field | Tipe | Keterangan / Sumber |
|---|---|---|
| id | int | titik_pantau.id |
| tanggal | string | hasil_pemantauan.recorded_at |
| tipe | string | titik_pantau.type (iklim) |
| nama | string | titik_pantau.nama |
| wilayah_sungai | string/null | titik_pantau.ws |
| daerah_aliran_sungai | string/null | titik_pantau.das |
| sub_daerah_aliran_sungai | string/null | titik_pantau.subdas |
| induk | string/null | titik_pantau.induk |
| sungai | string/null | titik_pantau.sungai |
| desa | string/null | titik_pantau.desa |
| kecamatan | string/null | titik_pantau.kecamatan |
| kabupaten | string/null | titik_pantau.kabupaten |
| provinsi | string/null | titik_pantau.provinsi |
| rh | float/null | RH lookup rh_klimatologi |
| termometer_max | float/null | iklim.termometer_max |
| termometer_min | float/null | iklim.termometer_min |
| termometer_rerata | float/null | (termometer_max + termometer_min) / 2 |
| apung_rerata | float/null | (termometer_apung_max + termometer_apung_min) / 2 |
| anemo_kec | float/null | (anemometer − bacaan H-2) / 24 |
| evaporasi | float/null | max(0, curah_hujan + 60 − hook_gauge) |
| sinar_matahari | float/null | sum(sunshine_06..18) / 60 / 12 × 100 (%) |
| radiasi | float/null | Angstrom-Prescott Ra × (0.25 + 0.50 × n/12) × 23.884 |
| curah_hujan | float/null | iklim.curah_hujan |
| thumbnailUrl | bool/string | Accessor thumbnailUrl |
# Klimatologi per Pos
GET
/klimatologi/{id}
Data iklim H-1 untuk satu pos (tanpa grouping).
Parameter: {id} (path) — titik_pantau.id.
Contoh Request
GET /klimatologi/3
Host: api.hidrologi.id
Contoh Response — 200
Satu objek dengan field yang sama seperti Klimatologi,
atau JSON null bila tidak ditemukan.
{
"id": 3,
"tanggal": "2026-09-09 00:00:00",
"tipe": "iklim",
"nama": "Pos Iklim C",
"wilayah_sungai": "WS MAHAKAM",
"daerah_aliran_sungai": "DAS TELAKE",
"sub_daerah_aliran_sungai": "SUB TELAKE",
"induk": "TELAKE",
"sungai": "TELAKE",
"desa": "LONG KALI",
"kecamatan": "LONG KALI",
"kabupaten": "KAB. PASER",
"provinsi": "KALIMANTAN TIMUR",
"rh": 70.5,
"termometer_max": 32.5,
"termometer_min": 23.5,
"termometer_rerata": 28.0,
"apung_rerata": 29.0,
"anemo_kec": 1.0,
"evaporasi": 10.0,
"sinar_matahari": 18.1,
"radiasi": 308.22,
"curah_hujan": 5.0,
"thumbnailUrl": false
}
# Kualitas Air
GET
/kualitas-air
Data kualitas air untuk tahun terbaru, dikelompokkan per Wilayah Sungai (ws).
Parameter: tidak ada.
Hanya pos dengan portal_tampil = 1 yang disertakan. Label mutu diturunkan dari nilainya:
-
Indeks Pencemaran / IP (KepMen LH No. 115/2003):
≤ 1.0→ Memenuhi Mutu,≤ 5.0→ Cemar Ringan,≤ 10.0→ Cemar Sedang, selain itu Cemar Berat. -
Storet (Kep-BAPEDAL No. 110/2003):
≥ 0→ Memenuhi BM,≥ −10→ Cemar Ringan,≥ −30→ Cemar Sedang, selain itu Cemar Berat.
Contoh Request
GET /kualitas-air
Host: api.hidrologi.id
Contoh Response — 200
Objek dengan key nama Wilayah Sungai (ws), value array pos.
{
"WS MAHAKAM": [
{
"id": 56,
"tahun": "2024",
"tipe": "duga-air",
"nama": "POS DUGA AIR MAHAKAM LONG IRAM",
"wilayah_sungai": "WS MAHAKAM",
"daerah_aliran_sungai": "MAHAKAM",
"sub_daerah_aliran_sungai": "-",
"induk": "MAHAKAM",
"sungai": "MAHAKAM",
"desa": "LONG IRAM",
"kecamatan": "LONG IRAM",
"kabupaten": "KAB. KUTAI BARAT",
"provinsi": "KALIMANTAN TIMUR",
"ip_kelas_1": 2.63,
"ip_kelas_2": 1.25,
"ip_kelas_3": 0.62,
"ip_kelas_4": 0.31,
"mutu_kelas_1": "Cemar Ringan",
"mutu_kelas_2": "Cemar Ringan",
"mutu_kelas_3": "Memenuhi Mutu",
"mutu_kelas_4": "Memenuhi Mutu",
"storet_kelas_1": null,
"storet_kelas_2": null,
"storet_kelas_3": null,
"storet_kelas_4": null,
"status_mutu_kelas_1": null,
"status_mutu_kelas_2": null,
"status_mutu_kelas_3": null,
"status_mutu_kelas_4": null,
"thumbnailUrl": false
}
]
}
Field
| Field | Tipe | Keterangan / Sumber |
|---|---|---|
| id | int | titik_pantau.id |
| tahun | string | kualitas_air.tahun (tahun terbaru) |
| tipe | string | titik_pantau.type (duga-air) |
| nama | string | titik_pantau.nama |
| wilayah_sungai | string/null | titik_pantau.ws |
| daerah_aliran_sungai | string/null | titik_pantau.das |
| sub_daerah_aliran_sungai | string/null | titik_pantau.subdas |
| induk | string/null | titik_pantau.induk |
| sungai | string/null | titik_pantau.sungai |
| desa | string/null | titik_pantau.desa |
| kecamatan | string/null | titik_pantau.kecamatan |
| kabupaten | string/null | titik_pantau.kabupaten |
| provinsi | string/null | titik_pantau.provinsi |
| ip_kelas_1 | float/null | kualitas_air.ip_kelas_1 (2 desimal) |
| ip_kelas_2 | float/null | kualitas_air.ip_kelas_2 (2 desimal) |
| ip_kelas_3 | float/null | kualitas_air.ip_kelas_3 (2 desimal) |
| ip_kelas_4 | float/null | kualitas_air.ip_kelas_4 (2 desimal) |
| mutu_kelas_1 | string/null | Label mutu IP turunan |
| mutu_kelas_2 | string/null | Label mutu IP turunan |
| mutu_kelas_3 | string/null | Label mutu IP turunan |
| mutu_kelas_4 | string/null | Label mutu IP turunan |
| storet_kelas_1 | int/null | kualitas_air.storet_kelas_1 |
| storet_kelas_2 | int/null | kualitas_air.storet_kelas_2 |
| storet_kelas_3 | int/null | kualitas_air.storet_kelas_3 |
| storet_kelas_4 | int/null | kualitas_air.storet_kelas_4 |
| status_mutu_kelas_1 | string/null | Label status mutu Storet turunan |
| status_mutu_kelas_2 | string/null | Label status mutu Storet turunan |
| status_mutu_kelas_3 | string/null | Label status mutu Storet turunan |
| status_mutu_kelas_4 | string/null | Label status mutu Storet turunan |
| thumbnailUrl | bool/string | Accessor thumbnailUrl |
# Kualitas Air per Pos
GET
/kualitas-air/{id}
Data kualitas air tahun terbaru untuk satu pos (tanpa grouping).
Parameter: {id} (path) — titik_pantau.id.
Contoh Request
GET /kualitas-air/56
Host: api.hidrologi.id
Contoh Response — 200
Satu objek dengan field yang sama seperti Kualitas Air,
atau JSON null bila tidak ditemukan (termasuk pos tanpa data kualitas air di tahun terbaru).
{
"id": 56,
"tahun": "2024",
"tipe": "duga-air",
"nama": "POS DUGA AIR MAHAKAM LONG IRAM",
"wilayah_sungai": "WS MAHAKAM",
"daerah_aliran_sungai": "MAHAKAM",
"sub_daerah_aliran_sungai": "-",
"induk": "MAHAKAM",
"sungai": "MAHAKAM",
"desa": "LONG IRAM",
"kecamatan": "LONG IRAM",
"kabupaten": "KAB. KUTAI BARAT",
"provinsi": "KALIMANTAN TIMUR",
"ip_kelas_1": 2.63,
"ip_kelas_2": 1.25,
"ip_kelas_3": 0.62,
"ip_kelas_4": 0.31,
"mutu_kelas_1": "Cemar Ringan",
"mutu_kelas_2": "Cemar Ringan",
"mutu_kelas_3": "Memenuhi Mutu",
"mutu_kelas_4": "Memenuhi Mutu",
"storet_kelas_1": null,
"storet_kelas_2": null,
"storet_kelas_3": null,
"storet_kelas_4": null,
"status_mutu_kelas_1": null,
"status_mutu_kelas_2": null,
"status_mutu_kelas_3": null,
"status_mutu_kelas_4": null,
"thumbnailUrl": false
}