climatememory pengembang

Referensi API

API Cuaca

Prakiraan global sampai 15 hari dari ECMWF dan model nasional beresolusi tinggi, dikoreksi terhadap ketinggian tanah Anda yang sebenarnya. Satu scope — meteo — mencakup seluruh halaman ini.

Prakiraan#

GEThttps://api.climatememory.com/v1/forecastscope: meteo1 kredit

Prakiraan per jam dan harian untuk koordinat mana pun.

Parameter

ParameterTipeBawaanDeskripsi
latfloatLintang, −90 sampai 90. Wajib.
lonfloatBujur, −180 sampai 180. Wajib.
daysint71–16 diterima, tetapi horizon yang dilayani adalah 15 hari, jadi 16 mengembalikan 15. Hari ke-11–15 adalah tren, bukan prakiraan — lihat di bawah.
elevationfloat (m)Ketinggian tanah sebenarnya dari titik Anda. Berikan nilainya dan suhu akan dikoreksi terhadap selisih dengan medan model yang dihaluskan. Di daerah berbukit biasanya bernilai 1–3 °C.
timezoneIANA zoneUTCZona tempat agregat harian dipotong, dan offset yang dibawa kembali oleh setiap stempel waktu.
hourlycsvallSebagian field per jam, untuk memperkecil muatan. Namanya sesuai referensi field.
include_dailybooltrueSertakan blok harian.

Respons

{
  "latitude": 48.85,
  "longitude": 2.35,
  "timezone": "Europe/Paris",
  "grid": {
    "latitude": 48.85, "longitude": 2.35,
    "distance_km": 0.42, "resolution_km": 1.3
  },
  "elevation": {
    "applied": true,
    "model_elevation_m": 91.0,
    "location_elevation_m": 113,
    "temperature_offset_c": -0.14
  },
  "source": {
    "model": "mf_arome",
    "model_run": "20260801T00Z",
    "reference_time": "2026-08-01T00:00:00+00:00",
    "data_age_hours": 3.95,
    "stale": false,
    "attribution": "Data: Météo-France (etalab-2.0)"
  },
  "hourly": {
    "time": ["2026-08-01T00:00:00+02:00", "..."],
    "temperature_2m": [18.1, 17.9, 17.6, "..."],
    "apparent_temperature": [17.4, "..."],
    "weather_code": [0, 1, 2, "..."]
  },
  "daily": {
    "date": ["2026-08-01", "..."],
    "temperature_2m_max": [26.6, "..."],
    "temperature_2m_min": [16.2, "..."],
    "precipitation_sum": [0.0, "..."],
    "uv_index_max": [7.6, "..."],
    "sunrise": ["2026-08-01T06:24:00+02:00", "..."],
    "sunset": ["2026-08-01T21:24:00+02:00", "..."],
    "daylight_hours": [15.0, "..."]
  }
}

Blok grid layak dibaca. distance_km memberi tahu seberapa jauh pusat sel model dari titik yang Anda minta, dan resolution_km seberapa kasar sel itu. Bersama-sama keduanya memberi tahu seberapa harfiah angka-angka itu boleh dibaca: 0,4 km dari sel 1,3 km berarti jalan Anda; 12 km dari sel 28 km berarti wilayah Anda.

Blok elevation menyebut apa yang dilakukan, bukan apa yang diminta. applied: false berarti tidak ada koreksi yang terjadi — entah Anda tidak mengirim elevation, entah medan model memang sudah cocok. Jangan pernah menganggap koreksi berjalan hanya karena Anda memintanya.

Memperkecil muatan

Blok per jam yang lengkap untuk 15 hari kira-kira 32 field × 360 jam. Jika Anda hanya menggambar tiga di antaranya, mintalah tiga:

GET /v1/forecast?lat=48.85&lon=2.35&days=3
    &hourly=temperature_2m,precipitation,weather_code
    &include_daily=false

Harganya sama — biayanya ada pada pembacaan arsip, bukan penyerialan — tetapi byte-nya sepersepuluh dan terasa lebih cepat diurai di ponsel.

Prakiraan per kota#

GEThttps://api.climatememory.com/v1/forecast/city/{country}/{slug}scope: meteo1 kredit

Respons yang sama, diselesaikan lewat katalog kota.

Pilih ini ketimbang koordinat mentah bila memungkinkan. Katalog menyediakan dua hal yang tidak bisa diberikan koordinat: ketinggian sebenarnya kota itu, sehingga koreksi medan berjalan tanpa Anda memasoknya, dan zona waktunya, sehingga agregat harian dipotong pada hari lokal yang benar.

GET /v1/forecast/city/dz/alger      # slug Prancis
GET /v1/forecast/city/dz/algiers    # slug Inggris — kota yang sama
GET /v1/forecast/city/fr/paris

country adalah kode ISO-3166-1 alpha-2 dalam huruf kecil. slug mengabaikan tanda diakritik: bejaia menemukan Béjaïa. Slug yang tidak dikenal mengembalikan 404 city_not_found beserta larik suggestions — tampilkan itu alih-alih jalan buntu.

Semua parameter kueri /v1/forecast tetap berlaku kecuali lat, lon, dan elevation, yang disediakan katalog. Mengirim timezone menimpa zona milik kota itu, yang hampir tidak pernah Anda inginkan.

Jangan menanam slug hasil tebakan di kode. Selesaikan namanya sekali lewat /v1/geocode, simpan negara dan slug yang dikembalikannya, lalu pakai itu. Geocoding tidak memakan kredit, jadi melakukannya dengan benar itu gratis.

Kondisi terkini#

GEThttps://api.climatememory.com/v1/currentscope: meteo1 kredit

Kondisi saat ini untuk sebuah koordinat, diinterpolasi antara langkah model.

GEThttps://api.climatememory.com/v1/current/city/{country}/{slug}scope: meteo1 kredit

Hal yang sama, lewat katalog kota.

Suhu, kelembapan, angin, dan tekanan diinterpolasi linear ke saat ini, di antara dua langkah model yang mengapitnya.

Curah hujan tidak diinterpolasi, dan itu disengaja. Nilai curah hujan per jam adalah total selama satu interval, bukan pembacaan pada satu saat. Menginterpolasinya berarti mengarang hujan pada menit yang oleh model ditempatkan di jam lain. Sebagai gantinya Anda mendapat nilai langkah yang memuatnya — angka nyata tentang interval nyata.

Gunakan ini untuk tampilan "saat ini". Untuk apa pun yang akan Anda bandingkan lintas waktu, pakai /v1/forecast lalu baca jam yang Anda inginkan: deretnya stabil, sedangkan sekarang bergeser di bawah Anda di antara dua panggilan.

Referensi field#

GEThttps://api.climatememory.com/v1/fieldstanpa kunci0 kredit

Tabel yang sama dalam JSON, dengan satuan dan penanda field bawaan. Tanpa kunci.

Field per jam

21 di antaranya kembali secara bawaan. Sisanya milik Anda jika diminta — sebutkan di hourly=, dipisah koma — dan ditahan karena biaya, bukan karena ragu: setiap field tersimpan adalah pembacaan terkompresi tersendiri, jadi respons bawaan yang membawa seluruh 45 field akan membuat semua orang membayar demi segelintir yang menginginkan ketebalan salju.

GET /v1/forecast?lat=45.19&lon=5.72&hourly=temperature_2m,snow_line_altitude,soil_temperature_8cm

Field yang tidak diterbitkan sebuah model kembali sebagai null pada bagian prakiraan milik model itu, alih-alih lenyap dari respons — sehingga rantai yang dimulai di AROME dan berlanjut di ICON-EU tetap mengembalikan visibility sepanjang deret, kosong pada 51 jam pertama. Nama field yang tidak dikenal menghasilkan 400 unknown_field, dengan saran kecocokan terdekat; dulu ia diabaikan diam-diam.

FieldSatuanCatatan
temperature_2m°CDikoreksi medan bila ketinggian diketahui
apparent_temperature°CRumusan Steadman; berlaku di seluruh rentang
relative_humidity_2m%
dewpoint_2m°C
precipitationmmTotal selama langkah, sudah didekumulasi
precipitation_probability_proxy%Heuristik, bukan probabilitas ensemble. Lihat di bawah.
weather_codeWMOKode ikon, diambangkan pada mm/jam, bukan pada total langkah
cloud_cover%
wind_speed_10mm/s
wind_direction_10m°Arah dari mana angin bertiup
wind_gust_10mm/sMaksimum selama langkah
pressure_mslhPaDireduksi ke permukaan laut
surface_pressurehPaPada ketinggian lokasi
shortwave_radiationW/m²Rata-rata selama langkah
uv_index0–11+Perkiraan. Lihat di bawah.
capeJ/kgPotensi badai petir
is_day0/1
visibilitymHanya ICON-EU dan ICON-D2
cloud_cover_low%Hanya model ICON
cloud_cover_mid%Hanya model ICON
cloud_cover_high%Hanya model ICON
precipitation_typeWMOHanya ECMWF Minta di hourly=
snow_depthmYang menumpuk, bukan yang turun. Hanya ICON Minta di hourly=
snow_water_equivalentmmAir yang dihasilkan tumpukan salju saat meleleh. Hanya ICON Minta di hourly=
snow_line_altitudemLihat salju. ICON-EU dan ICON-D2 Minta di hourly=
freezing_level_altitudemIsoterm 0 °C. Hanya ICON Minta di hourly=
soil_temperature_0cm°CPermukaan. Hanya ICON global dan ICON-EU Minta di hourly=
soil_temperature_8cm°CZona akar, lapisan 7–28 cm. Hanya ICON global dan ICON-EU Minta di hourly=
shortwave_radiation_directW/m²Komponen langsung. Hanya ICON Minta di hourly=
shortwave_radiation_diffuseW/m²Komponen baur. Hanya ICON Minta di hourly=
solar_elevation°Dihitung dari stempel waktu dan koordinat Minta di hourly=
solar_azimuth°Dihitung dari stempel waktu dan koordinat Minta di hourly=
temperature_2m_max°CSelama langkah, bila model menerbitkannya Minta di hourly=
temperature_2m_min°CSelama langkah, bila model menerbitkannya Minta di hourly=
skin_temperature°CPermukaan tanah, bukan udara Minta di hourly=
heat_index°CNWS Amerika Serikat. Di bawah 27 °C mengembalikan suhu biasa Minta di hourly=
wind_chill°CEnvironment Canada. Di atas 10 °C mengembalikan suhu biasa Minta di hourly=
wind_speed_100mm/sUntuk penerapan energi angin Minta di hourly=
wind_direction_100m°Minta di hourly=
wind_beaufort0–12Minta di hourly=
cloud_cover_octas0–8Minta di hourly=
snowfallmmSetara air, bukan ketebalan salju segar Minta di hourly=
total_column_water_vapourkg/m²Minta di hourly=
pressure_tendencyhPaMinta di hourly=
weather_descriptionteksMinta di hourly=

Field harian

date, temperature_2m_max, temperature_2m_min, temperature_2m_mean, precipitation_sum, wind_speed_max, wind_gust_max, shortwave_radiation_sum (MJ/m²), uv_index_max, sunrise, sunset, daylight_hours, weather_code.

Diagregasi pada hari kalender lokal, bukan UTC. Hari yang tidak utuh di salah satu ujung rentang dihilangkan alih-alih dilaporkan dengan maksimum yang menyesatkan — jadi permintaan 7 hari sah saja mengembalikan 6 baris harian.

Dua field adalah perkiraan, dan kami lebih suka mengatakannya daripada membiarkan Anda menemukannya sendiri.

uv_index diturunkan dari elevasi matahari dan radiasi pita lebar, bukan dari kolom ozon. Akurat kira-kira ±1 satuan — cukup untuk "pakai topi", tidak cukup untuk klaim medis.

precipitation_probability_proxy adalah perkiraan, bukan probabilitas. Model deterministik tidak punya sebaran untuk menurunkannya. Namanya diberi akhiran _proxy agar tak seorang pun mengiranya produk ensemble yang dilayani /v1/probability, yang merupakan frekuensi sungguhan atas 51 anggota.

Ia menggabungkan dua suku. Suku pertama menanyakan apakah hujan di sel itu mencapai titik Anda: laju yang tersimpan adalah rata-rata seluruh sel grid, jadi pada 28 km — 780 km² — rata-rata yang kecil bisa jadi hujan nyata di sebagian kecil sel itu. Dengan menganggap sebaran laju di dalam sel sebagai Weibull, yang bentuknya ditentukan ukuran sel dan rata-rata model itu sendiri, peluang sebuah titik di dalam sel melampaui 0,1 mm/jam bisa diperoleh dalam bentuk tertutup. Suku kedua membatasi klaim langit mendung yang nyaris jenuh di tempat yang oleh model sama sekali tidak diberi hujan. Keduanya lalu diskalakan menurut seberapa layak sebuah run dipercaya pada tenggat itu, sebab itulah curah hujan yang sama terbaca lebih rendah pada hari ke-9 daripada hari ke-1.

Akibatnya tempat yang sama bisa terbaca berbeda dari dua model, dan memang seharusnya begitu: sel 2,2 km dan sel 28 km benar-benar berbeda pendapat tentang arti sebuah rata-rata kecil. Aplikasi konsumen yang menyebut satu angka menyembunyikan hal ini.

Model dan resolusi#

GEThttps://api.climatememory.com/v1/modelstanpa kunci0 kredit

Model mana yang aktif, apa yang dicakup masing-masing, dan seberapa segar. Tanpa kunci.

Kami melayani model terhalus yang mencakup titik Anda dan tenggat Anda. Anda tidak pernah memilihnya; pilihannya dilaporkan di source.model sehingga Anda selalu tahu mana yang menjawab.

Model beresolusi tinggi semuanya berjangkau pendek — pada 1 km atmosfer menjadi kacau dalam dua hari, sehingga memprakirakan lebih jauh tidak bermakna — karena itu resolusinya menurun bertahap seiring majunya prakiraan:

hari 0 ────── hari 2 ────── hari 5 ─────────────── hari 15
  AROME 1,3 km (Prancis)
  ICON-D2 2,2 km (Jerman, Alpen, Benelux)
  HRRR 3 km (AS dan Kanada selatan)
              ICON-EU 6,5 km (Eropa)
                          ICON 13 km · ECMWF 28 km (global)
                                              AIFS (hanya tren)
source.modelModelResolusiRunHorizon
mf_aromeMétéo-France AROME1.3 km8/hari51 jam
dwd_icon_d2DWD ICON-D22.2 km4/hari48 jam
noaa_hrrrNOAA HRRR3 km4/hari48 jam
dwd_icon_euDWD ICON-EU6.5 km2/hari120 jam
dwd_iconDWD ICON13 km2/hari180 jam
ecmwf_ifsECMWF IFS28 km2/hari240 jam
ecmwf_aifsECMWF AIFS28 km2/hari360 jam
ecmwf_waveECMWF wave28 km2/hari240 jam

Peralihan di tepi domain sebuah model disilangsamarkan, sehingga dua kota di kedua sisi batas tidak pernah berbeda secara melompat.

Hari ke-11–15 adalah tren, bukan prakiraan. Pada jangkauan itu keterampilan model mendekati klimatologi. Kami menerbitkannya karena diminta; perlakukan sebagai arah kecenderungan, dan jika Anda menampilkannya, katakanlah.

/v1/models tidak butuh kunci, sehingga cocok untuk dipanggil dari halaman status atau diperiksa sebelum Anda membeli: ia melaporkan run terbaru setiap model beserta usianya, jadi "apakah datanya segar" bisa dijawab tanpa menghabiskan satu kredit pun.

Probabilitas ensemble#

GEThttps://api.climatememory.com/v1/probabilityscope: meteo1 kredit

Persentil dan peluang hujan dari ensemble ECMWF beranggota 51.

Satu prakiraan tunggal berkata 22 °C pada hari Kamis. Itu tebakan yang disajikan sebagai fakta. Endpoint ini menjawab pertanyaan yang sebenarnya Anda pakai untuk memutuskan: seberapa yakin, dan berapa peluang hujan yang layak diperhitungkan.

Ia dihitung dari ensemble ECMWF — model yang sama dijalankan 50 kali dari kondisi awal yang sedikit berbeda. Di tempat run-run itu sepakat, prakiraannya yakin. Di tempat mereka menyebar, atmosfernya sendirilah yang tidak pasti, dan tidak ada model, sebaik apa pun, yang bisa memberi tahu lebih banyak.

{
  "members": 50,
  "hourly": {
    "time": ["2026-08-01T00:00:00+00:00"],
    "temperature_2m_p10": [26.4],
    "temperature_2m_p50": [26.78],
    "temperature_2m_p90": [27.3],
    "temperature_2m_spread": [0.4],
    "precipitation_probability_0_1mm": [10.0],
    "precipitation_probability_1_0mm": [0.0],
    "precipitation_probability_5_0mm": [0.0],
    "precipitation_probability_10_0mm": [0.0],
    "precipitation_p90": [0.1]
  }
}

Cara membacanya

p10 dan p90 mengapit 80 % anggota di tengah: satu dari sepuluh memperkirakan lebih dingin daripada p10, satu dari sepuluh lebih hangat daripada p90. spread sebesar 0,4 °C berarti situasi mapan yang bisa Anda percaya; 3 °C berarti model-model berbeda pendapat dan Anda sebaiknya mengatakan itu kepada pengguna alih-alih memilih salah satu.

Ambang hujan adalah keputusan, bukan angka bulat — 0,1 mm berarti basah sama sekali, 1 mm berarti bawa jaket, 5 dan 10 mm berarti ini masalah. precipitation_p90 adalah kasus buruknya: hanya satu anggota dari sepuluh yang lebih basah.

Hanya dua variabel, suhu dan curah hujan. Menambah awan, angin, dan tekanan akan melipatgandakan lebar pita seluruh platform demi angka yang tidak dipakai siapa pun untuk memutuskan apa pun.

Kualitas udara#

GEThttps://api.climatememory.com/v1/air-qualityscope: meteo1 kredit

Partikulat, ozon, NO₂, SO₂, CO, dan debu Sahara, dari Copernicus CAMS.

Inilah endpoint yang paling penting di Afrika Utara dan kawasan Mediterania. Satu episode debu mendorong PM10 melewati seribu mikrogram per meter kubik selama berhari-hari, yang merupakan keputusan kesehatan alih-alih sekadar angka, dan cakupannya buruk pada layanan konsumen gratis.

{
  "current": {
    "pm2_5": 38.7,
    "band": "poor",
    "who_guidelines_ug_m3": {"pm2_5": 15.0, "pm10": 45.0,
                             "nitrogen_dioxide": 25.0, "ozone": 100.0}
  },
  "hourly": {
    "time": ["2026-08-01T00:00:00+00:00"],
    "pm2_5": [38.7], "pm10": [85.8], "ozone": [43.4],
    "nitrogen_dioxide": [19.0], "dust_aod_550nm": [0.24]
  },
  "units": {"pm2_5": "ug/m3", "pm10": "ug/m3", "dust_aod_550nm": "1"}
}

Semua konsentrasi dinyatakan dalam µg/m³, satuan yang dipakai di mana-mana untuk kualitas udara. dust_aod_550nm adalah kedalaman optis dan tidak bersatuan: di atas sekitar 0,5 langit tampak berkabut, di atas 1,0 matahari meredup.

Nilai panduan jangka pendek WHO ikut serta di setiap respons agar sebuah angka bisa ditempatkan tanpa perlu dicari. band mengikuti indeks kualitas udara Eropa untuk PM2,5: baik, cukup, sedang, buruk, sangat buruk, amat sangat buruk.

Salju dan batas salju#

Empat field, dan masing-masing menjawab pertanyaan berbeda. snowfall adalah berapa banyak yang turun; sisanya menggambarkan apa yang menumpuk di tanah dan di mana.

Mintalah dengan menyebut namanya — semuanya tidak ada di respons bawaan:

GET /v1/forecast?lat=45.19&lon=5.72&hourly=snowfall,snow_depth,snow_water_equivalent,snow_line_altitude,freezing_level_altitude
FieldSatuanApa yang diberitahukan
snow_depthmYang menumpuk. Dua puluh sentimeter bisa turun lalu meleleh, atau mendarat di atas delapan puluh yang sudah ada.
snow_water_equivalentmmAir yang dihasilkan saat meleleh. Setengah meter salju gembur dan setengah meter salju padat sangat berbeda.
snow_line_altitudemKetinggian di atasnya presipitasi turun sebagai salju.
freezing_level_altitudemTinggi isoterm 0 °C, biasanya beberapa ratus meter di atas batas salju.

Batas saljulah yang layak dibaca. "Di 800 m hujan dan di 1200 m salju" adalah keputusan yang bisa ditindaklanjuti resor ski, otoritas jalan, atau pengemudi; "3 mm presipitasi" bukan. Ini juga penting di Afrika Utara — Pegunungan Atlas punya area ski di Chréa dan Tikjda, dan dataran tinggi di Sétif, Batna, serta Djelfa berada di atas 1000 m.

Gletser melaporkan ketebalan salju berpuluh meter, karena begitulah model merepresentasikan es abadi, bukan karena kesalahan pengukuran. Salju musiman terdalam di bumi sekitar 11 m — anggap apa pun yang melebihi itu sebagai es, bukan cuaca.

Data ini berasal dari ICON milik DWD, yang mencakup dunia pada 13 km. Data terbuka ECMWF menerbitkan ketebalan salju tetapi tidak batas salju, jadi ini salah satu tempat model yang lebih kasar justru lebih berguna. snow_line_altitude adalah produk regional: ICON-EU dan ICON-D2 menerbitkannya, ICON global tidak, sehingga di luar Eropa Anda mendapat ketinggian titik beku dan ketebalannya, tetapi bukan batasnya.

Laut — kondisi laut#

GEThttps://api.climatememory.com/v1/marinescope: meteo1 kredit

Tinggi, arah, dan periode gelombang dari model gelombang ECMWF, di seluruh dunia, sampai 10 hari.

{
  "hourly": {
    "time": ["2026-08-01T00:00:00+00:00"],
    "wave_height": [0.32],
    "wave_direction": [264.3],
    "wave_period": [3.79],
    "wave_peak_period": [4.21]
  }
}

Tinggi gelombang adalah tinggi signifikan — rata-rata sepertiga gelombang tertinggi, kira-kira sama dengan yang dilaporkan pengamat di laut. Gelombang tunggal bisa mencapai sekitar dua kali lipatnya, dan angka itulah yang penting bila Anda memutuskan melaut atau tidak. Arahnya adalah arah dari mana gelombang datang, seperti arah angin.

Titik di daratan mengembalikan 404 not_at_sea, bukan daftar nilai kosong. Model gelombang memang tidak bernilai di atas daratan, dan mengatakannya lebih berguna daripada respons yang terbaca seperti kegagalan layanan. Jika Anda membiarkan pengguna menjatuhkan pin, tangani kode ini secara eksplisit.

Sungai#

GEThttps://api.climatememory.com/v1/hydrologyscope: meteo1 kredit

Debit sungai dari Copernicus GloFAS pada jaringan sungai 0,05°, sampai 10 hari.

Ia menjawab apa yang tidak bisa dijawab model cuaca mana pun: bukan berapa banyak hujan yang turun di hulu, melainkan berapa banyak air yang tiba di sini — angka yang berbeda, dipisahkan dari hujan oleh sebuah daerah aliran, oleh kondisi kelembapan tanah, dan oleh satu-dua hari waktu tempuh.

{
  "disclaimer": "Information only. Only national and regional authorities
                 are authorised to issue flood warnings.",
  "daily": {
    "time": ["2026-08-01T00:00:00+00:00"],
    "river_discharge": [4.953],
    "soil_wetness_index": [0.448]
  }
}
FieldArtinya
river_dischargeDebit rata-rata dalam m³/s selama 24 jam yang berakhir pada saat itu. Nol berarti model tidak punya sungai di sel tersebut, bukan berarti ada sungai yang mengering.
soil_wetness_indexKejenuhan daerah aliran, 0 kering sampai 1 jenuh. Nilai tinggi berarti hujan berikutnya mengalir di permukaan alih-alih meresap.

Ini bukan peringatan banjir dan tidak boleh disajikan sebagai peringatan banjir. Lisensi Copernicus menyerahkan peringatan banjir kepada otoritas nasional dan regional di wilayah tanggung jawab masing-masing, dan itu memang pengaturan yang benar — pihak yang berwenang memperingatkan juga pihak yang bisa menutup jalan dan mengevakuasi sebuah desa.

Debit dalam m³/s, boleh. Peringatan, warna tingkat bahaya, atau instruksi bertindak, tidak, bagaimanapun rupa angkanya hari itu. Penafiannya ikut serta di badan setiap respons, bukan hanya di sini, dan ada di sana agar sampai ke pengguna Anda sekalipun halaman ini tidak sampai.