climatememory pengembang

Referensi API

API Derajat-Hari

Derajat-hari pemanasan dan pendinginan dari reanalisis per jam ERA5-Land, mundur sampai 1950, di mana saja di daratan — termasuk tempat yang tidak punya stasiun cuaca dalam radius 60 km. Satu scope — dju — mencakup seluruh halaman ini.

Derajat-hari#

GEThttps://api.climatememory.com/v1/degree-daysscope: dju2 kredit, +1 untuk setiap periode penuh 365,25 hari dalam rentang

Derajat-hari pemanasan dan pendinginan untuk sebuah koordinat.

Parameter

ParameterTipeBawaanDeskripsi
latfloatWajib.
lonfloatWajib.
basenumber | preset | csv18Suhu basis berapa pun dalam °C, atau sebuah praatur: uk (15,5), ashrae (18,333), iso, france, eurostat. Sampai 60 nilai dipisah koma, tanpa biaya tambahan — lihat di bawah.
methodstringhourlyhourly, costic, mean, atau eurostat. Kontrak Andalah yang menentukan ini, bukan kami.
startISO date1 Januari tahun akhirMaksimum 10 tahun per permintaan.
endISO datehari ini
typestringbothHDD, CDD, atau both.
breakdownstringmonthlydaily, weekly, monthly, atau yearly.
elevationfloat (m)Ketinggian tanah sebenarnya dari lokasi Anda. Menggeser deret dari ketinggian sel ke ketinggian Anda — lihat di bawah.
formatstringjsonjson atau csv. CSV adalah fitur paket berbayar.
{
  "location": {
    "latitude": 36.75, "longitude": 3.06,
    "grid_cell": { "latitude": 36.7, "longitude": 3.1,
                   "distance_km": 6.61, "resolution_km": 9 }
  },
  "parameters": {
    "base_temperature_c": 18.0, "method": "hourly",
    "start": "2025-07-01", "end": "2026-06-30"
  },
  "totals": { "hdd": 781.86, "cdd": 1331.61 },
  "quality": {
    "days": 365, "coverage": 1.0,
    "missing_hours": 0, "provisional_days": 0
  },
  "breakdown": [ { "year": 2025, "month": 7, "hdd": 0.0, "cdd": 289.4, "days": 31 } ]
}

Blok quality bukan hiasan. coverage di bawah 1,0 berarti ada jam yang hilang dari arsip. provisional_days menghitung hari yang diisi dari prakiraan alih-alih dari reanalisis final, karena ERA5-Land terbit dengan jeda sekitar lima hari.

Jika Anda menyelesaikan sebuah kontrak berdasarkan angka-angka ini, periksa keduanya. Total yang dihitung atas cakupan 0,98 tidak salah, tetapi ia bukan klaim yang sama dengan total atas 1,0 — dan selisihnya tidak terlihat di totals.

Apa itu derajat-hari, dalam satu paragraf

Satu derajat-hari pemanasan mengukur seberapa jauh udara luar berada di bawah suhu basis, dan selama berapa lama. Pada basis 18 °C, satu jam pada 16 °C menyumbang (18 − 16) / 24 = 0.083 HDD. Jumlahkan jam-jamnya dan Anda mendapat angka yang sebanding dengan energi yang dibutuhkan sebuah bangunan. Derajat-hari pendinginan adalah cerminannya: seberapa jauh di atas basis. Inilah cara baku membandingkan satu musim pemanasan dengan musim lainnya setelah faktor cuaca dikeluarkan dari perbandingan.

Banyak basis, satu permintaan, satu harga#

GEThttps://api.climatememory.com/v1/degree-days?base=15,15.5,18,18.5,20scope: djusame as one base

Sampai 60 suhu basis dalam satu panggilan, dengan harga satu.

Membaca dan mendekode deret per jam adalah seluruh biaya sebuah jawaban derajat-hari. Begitu larik itu ada di memori, basis tambahan hanyalah pengurangan di atasnya, jadi meminta enam puluh basis berbiaya sama dengan meminta satu.

Respons mendapat tambahan larik by_base yang membawa semua basis sesuai urutan yang Anda sebutkan. totals dan breakdown tetap menggambarkan basis pertama, sehingga kode yang ditulis sebelum fitur ini ada tetap berjalan tanpa perubahan.

"by_base": [
  {"base": 15.0,  "hdd": 402.11, "cdd": 1731.4},
  {"base": 15.5,  "hdd": 431.02, "cdd": 1706.3},
  {"base": 18.0,  "hdd": 781.86, "cdd": 1331.6}
]

Berguna ketika Anda belum tahu basis mana yang mereproduksi angka sebuah kontrak, atau ketika bangunan yang sama diselesaikan pada basis berbeda oleh pihak berbeda — pemilik gedung memakai 15,5 dan pemasok energi memakai 18, keduanya benar, dan ini mengembalikan keduanya dalam satu panggilan.

Metode perhitungan#

GEThttps://api.climatememory.com/v1/degree-days/compare-methodsscope: dju2 kredit, +1 untuk setiap periode penuh 365,25 hari dalam rentang

Keempat metode atas periode yang sama, berdampingan.

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

Definisi metode beserta praaturnya. Tanpa kunci.

Metode dijadikan parameter karena kontrak Andalah yang menentukannya, bukan kami. Data sama, basis sama, tahun sama, di Aljir:

MetodeHDD 18 °CCDD 18 °CKapan dipakai
hourly781.91331.6Bawaan. Mengintegralkan defisit per jam — paling setia secara fisis.
costic741.71349.5DJU unifiés Prancis. Diwajibkan oleh kontrak kinerja energi di Prancis.
mean659.91267.8Rata-rata harian terhadap basis. Konvensi internasional yang paling umum.
eurostat587.7656.6Statistik Eropa. Ambangnya sudah ditetapkan definisi dan mengabaikan base.

Metode per jam dan rata-rata harian berbeda 18 % pada data yang sama. Itu bukan selisih pembulatan — itu selisih antara memenangkan dan kalah dalam perdebatan tentang tagihan energi. Pilih metode yang mereproduksi angka di kontrak Anda sebelum Anda terikat pada sebuah paket; untuk itulah compare-methods ada, dan biayanya satu permintaan.

eurostat mengabaikan base sepenuhnya: definisinya menetapkan ambangnya sendiri, dan menuruti parameter Anda akan menghasilkan angka yang bukan derajat-hari Eurostat padahal mengaku demikian.

/v1/methods tidak butuh kunci. Pakai untuk mengisi pemilih metode di antarmuka Anda tanpa mengeluarkan biaya apa pun, dan tanpa menanam daftar yang akan basi.

Derajat-hari per kota#

GEThttps://api.climatememory.com/v1/degree-days/city/{country}/{slug}scope: dju2 kredit, +1 untuk setiap periode penuh 365,25 hari dalam rentang

Sama, dengan zona waktu kota dan koreksi pulau bahang perkotaannya.

Menerapkan dua koreksi yang tidak bisa dilakukan koordinat telanjang: zona waktu kota, agar hari dipotong secara lokal, dan offset pulau bahang perkotaan yang sudah dikalibrasi.

Reanalisis membaca kawasan terbangun terlalu rendah sebesar 1–3 °C. Itu membuat derajat-hari pendinginan bias ke bawah — berarti besar jika Anda sedang menghitung kapasitas pendingin udara, dan tak terlihat jika Anda tidak tahu harus mencarinya.

elevation tidak diterapkan pada jalur ini, dan kelalaian itu disengaja. Offset kota sudah dihitung terhadap stasiun yang dinormalkan ke ketinggian kota itu sendiri, jadi koreksi lapse rate kedua akan menghitung ketinggian yang sama dua kali — ke arah yang sama, dan cukup masuk akal sehingga tak seorang pun menyadarinya. Jika Anda butuh ketinggian sebuah bangunan tertentu, pakai endpoint koordinat dengan elevation dan lepaskan koreksi pulau bahangnya.

Derajat-hari untuk bangunan Anda, bukan untuk sel grid#

GEThttps://api.climatememory.com/v1/degree-days?elevation={metres}scope: djusame

Koreksi lapse rate dari ketinggian tanah sel ke ketinggian Anda.

Sebuah stasiun cuaca berada pada ketinggian tempatnya berdiri, dan tak seorang pun bisa memindahkannya 600 m ke atas lereng lembah demi Anda. Sumber kami adalah model, jadi ketinggian tanah sel itu adalah sebuah angka di dalam arsip dan selisihnya tinggal aritmetika: 0,65 °C per 100 m. Sepanjang satu musim pemanasan, itu bukan galat pembulatan.

Bersifat opsional, dan responsnya menyebutkan persis apa yang dilakukan:

"elevation": {
  "applied": true,
  "model_elevation_m": 42.0,
  "location_elevation_m": 1200,
  "temperature_offset_c": -7.53,
  "caveat": "Lapse-rate correction. It assumes temperature falls smoothly with
             height, which a valley floor under a winter inversion does not."
}

Peringatannya ikut di dalam respons, bukan hanya di halaman ini, karena orang yang membaca JSON itu enam bulan lagi bukanlah orang yang membaca dokumentasinya.

Menyematkan sel, agar sebuah baseline tetap bisa dibandingkan#

GEThttps://api.climatememory.com/v1/cells/resolvescope: dju1 kredit

Sel mana yang akan menjawab untuk sebuah titik, dan seberapa jauh letaknya.

GEThttps://api.climatememory.com/v1/degree-days/cell/{cell_id}scope: dju2 kredit, +1 untuk setiap periode penuh 365,25 hari dalam rentang

Derajat-hari untuk sel bernama — tanpa pencarian sel terdekat, sama sekali.

Semua bentuk lokasi lain menjalankan ulang pencarian sel terdekat pada setiap permintaan, jadi jawabannya bergantung pada isi arsip hari ini. Itu perilaku bawaan yang tepat untuk pencarian sekali jalan, dan keliru untuk sebuah baseline: perbandingan lintas tahun baru menjadi perbandingan jika setiap tahun berasal dari tempat yang sama.

Seiring meluasnya arsip, sel terdekat dari sebuah lokasi bisa berubah — perbaikan cakupan yang jika tidak disematkan akan masuk ke data Anda sebagai lompatan tanpa penjelasan.

# sekali, saat penyiapan
GET /v1/cells/resolve?lat=45.19&lon=5.72
  → { "id": "era5l_45.20_5.70", "distance_km": 1.4, "resolution_km": 9 }

# setiap kali sesudahnya
GET /v1/degree-days/cell/era5l_45.20_5.70?base=18&start=2015-01-01&end=2025-12-31

distance_km bernilai 0 pada permintaan tersemat sejak awal: Anda menyebut selnya, jadi tidak ada yang digantikan. Sel yang sudah tidak ada mengembalikan 404 cell_not_found alih-alih diam-diam jatuh ke sel tetangga — yang justru akan menghadirkan kembali penggantian yang ingin Anda hindari dengan menyematkannya.

/v1/cells/resolve juga cara murah untuk mengetahui sebelum Anda membayar data bahwa sel terdekat ternyata 60 km jauhnya. Ia tidak mendekode apa pun dan tidak membaca deret waktu, dan harganya pun sepadan: satu kredit.

Periode rincian#

GEThttps://api.climatememory.com/v1/degree-days?breakdown={daily|weekly|monthly|yearly}scope: djusame

Agregasikan permintaan yang sama ke periode tempat kontrak Anda diselesaikan.

Setiap respons derajat-hari membawa larik breakdown yang diagregasi ke periode yang Anda minta. Kontrak diselesaikan pada periode yang berbeda-beda, jadi keempatnya tersedia pada permintaan yang sama dengan harga yang sama.

PeriodeSetiap baris membawa
dailytanggal, HDD, CDD, suhu min/maks/rata-rata
weeklytahun dan pekan ISO, tanggal mulainya, total
monthlytahun, bulan, total — bawaan
yearlytahun, total

Pekan memakai pekan ISO, jadi sebuah pekan menjadi milik tahun yang memuat hari Kamisnya. 1 Januari 2023 jatuh pada pekan 52 tahun 2022, dan di situlah kami melaporkannya — sama seperti yang akan dilakukan lembar sebar Anda, dan berbeda pendapat dengan lembar sebar adalah awal dari sebuah rapat rekonsiliasi.

Setiap keranjang juga membawa days, sehingga bulan yang tidak utuh di tepi rentang Anda terlihat alih-alih diam-diam lebih pendek. Bulan Februari dengan "days": 12 adalah Februari yang tidak boleh Anda bandingkan dengan Februari yang utuh.

Total bulanan untuk satu tahun#

GEThttps://api.climatememory.com/v1/degree-days/monthlyscope: dju2 kredit

Dua belas total bulanan untuk satu tahun kalender, tanpa deret harian.

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

Apa isi arsip: hari pertama dan terakhir yang berisi data, dan sumbu tempat ia akan tumbuh. Tanpa kunci.

Jalan pintas untuk kasus umum: ?lat=&lon=&year=2025 dan dua belas baris kembali. Data yang sama dengan /v1/degree-days?breakdown=monthly pada rentang yang sama; lebih sedikit parameter yang bisa salah.

/v1/coverage melaporkan hari pertama dan terakhir arsip beserta resolusinya, tidak butuh kunci, dan merupakan hal yang tepat diperiksa sebelum Anda meminta periode dekat batas kekinian — ERA5-Land tertinggal sekitar lima hari, dan provisional_days di respons Anda adalah konsekuensinya.

{
  "start": "1950-01-01",
  "end": "2026-07-29",        // hari terakhir yang MEMUAT data
  "axis_end": "2026-12-31",   // tempat run ini akan berhenti tumbuh
  "hours": 671256, "axis_hours": 674976,
  "cells": 86274, "resolution_km": 9.0,
  "run": "world-1950-2026-p1000"
}

end dan axis_end adalah dua pertanyaan berbeda, dan hanya yang pertama berbicara tentang data. Sebuah run ditulis terhadap seluruh kalender yang pada akhirnya akan diisinya — arsip 1950-2026 mengalokasikan setiap jam sampai 31 Desember 2026 — dan pengisian susulan melengkapinya seiring terbitnya data Copernicus.

Sampai 2026-08-03 endpoint ini melaporkan sumbu itu sebagai end, sehingga arsipnya dianggap punya sekitar lima bulan jam yang sebenarnya kosong. end adalah yang bisa Anda minta hari ini; permintaan yang seluruhnya melewatinya menghasilkan 404 outside_archive, bukan jawaban rapi bertotal nol.

Ekspor CSV#

GEThttps://api.climatememory.com/v1/degree-days?format=csvscope: dju4× the JSON call

Baris rincian sebagai berkas CSV. Hanya paket berbayar.

Tambahkan format=csv ke permintaan derajat-hari mana pun. Anda mendapat baris breakdown sebagai berkas CSV, dinamai menurut lokasi dan tanggalnya sehingga enam bulan kemudian masih bisa dikenali di folder unduhan.

year,month,hdd,cdd,days,t_mean,coverage,provisional
2024,1,205.03,2.88,31,11.48,1.0,false
2024,2,168.44,4.10,29,12.31,1.0,false

Hanya paket berbayar, dan dibatasi: rentang maksimum yang sama dengan permintaan JSON, hanya baris teragregasi — tidak pernah deret per jam — dan biayanya empat kredit untuk setiap satu kredit yang dikenakan panggilan JSON setara. Kunci gratis mendapat 402 export_not_in_plan.

Itu disengaja, bukan setengah hati. Arsip inilah yang Anda bayar, dan ekspor tanpa batas adalah cara pesaing memilikinya dalam satu sore. Batas-batas itulah yang membuat format ini bisa ada sama sekali.

Riwayat per jam#

GEThttps://api.climatememory.com/v1/historicalscope: dju(years + 1) × (variables ÷ 2), rounded down, min 1

Arsip reanalisis yang dilayani mentah: cuaca per jam mundur sampai 1950.

Parameter

ParameterTipeBawaanDeskripsi
latfloatWajib.
lonfloatWajib.
startISO dateRentang satu permintaan dibatasi — lihat Paket.
endISO date
variablescsvsebagian yang masuk akalTanyakan ke /v1/historical/variables apa isi arsip ini.
hourlybooltrueSertakan deret jam demi jam.
dailyboolfalsetrue untuk kotaSertakan agregat harian, dipotong pada hari kalender lokal.

Arsip yang sama yang menjadi dasar derajat-hari, dilayani langsung: per jam, mundur sampai 1950, pada grid 9 km, di seluruh daratan. Host yang sama dan scope dju yang sama — jika Anda bisa memanggil derajat-hari, Anda bisa memanggil ini.

Hari ini arsip ini memuat suhu dan tidak ada yang lain. Ia dicerna untuk keperluan derajat-hari, dan derajat-hari hanya butuh satu variabel. Halaman ini menjanjikan "kelembapan, angin, curah hujan, dan radiasi matahari" sampai 2026-08-03 padahal arsipnya tidak pernah memuat satu pun dari itu.

/v1/historical/variables adalah jawaban yang selalu mutakhir — ia membaca run yang dipromosikan, bukan kalimat ini, tidak butuh kunci, dan tidak berbiaya. Panggil itu sebelum Anda membangun sesuatu di atas sebuah field.

Yang membuatnya layak dibayar adalah konsistensinya. Rekaman stasiun cuaca membawa setiap pemindahan, setiap penggantian instrumen, dan setiap lubang dalam sejarahnya, sehingga tren tiga puluh tahun yang dihitung darinya sebagian merupakan tren instrumentasi. Reanalisis tidak punya persoalan itu: modelnya adalah model yang sama untuk setiap tahun dalam rekaman.

Untuk nilai harian sepanjang periode panjang, atau untuk normal dan tren, gunakan API Iklim — ia menyimpan field harian yang sudah diturunkan, tidak punya batas 9 km/1950, dan menjawab satu klimatologi utuh dalam satu panggilan.

Riwayat per kota#

GEThttps://api.climatememory.com/v1/historical/city/{country}/{slug}scope: dju(years + 1) × (variables ÷ 2), rounded down, min 1

Identik, dengan zona waktu kota dan koreksi pulau bahangnya.

Dua hal yang tidak bisa dibawa koordinat: zona waktu kota, agar hari dipotong sesuai yang benar-benar dialami kota itu, dan koreksi pulau bahang perkotaannya yang sudah dikalibrasi. Di sini daily bernilai true secara bawaan, karena permintaan per kota hampir selalu merupakan permintaan tentang hari.

Variabel yang tersedia#

GEThttps://api.climatememory.com/v1/historical/variablestanpa kunci0 kredit

Apa yang dimuat arsip saat ini, dengan satuan, dan field mana yang diturunkan. Tanpa kunci.

Menampilkan apa yang dimuat arsip saat ini, lengkap dengan satuannya, dan field mana yang diturunkan alih-alih disimpan. Arsip yang dicerna hanya untuk derajat-hari hanya memuat suhu, dan endpoint ini mengatakannya terang-terangan alih-alih mengembalikan kolom berisi null.

Sebagian field dihitung, bukan disimpan: kelembapan dari titik embun, kecepatan dan arah angin dari komponen u dan v. Menyimpan sesuatu yang bisa dihitung dalam mikrodetik akan menambah sepertiga ukuran arsip tanpa guna — tetapi field turunan baru muncul ketika sumbernya ada di dalam run, dan karena itulah kebenaran tentang apa yang bisa Anda minta adalah endpoint ini, bukan daftar yang ditulis di sebuah halaman. Pada arsip yang dipromosikan hari ini sumber-sumber itu tidak ada, jadi jawabannya hanya temperature_2m.