Hidrologi Data API

# Ringkasan

  • Base URL https://api.hidrologi.id
  • Format JSON — method GET saja, 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
}