climatememory pengembang

Referensi API

Mulai

Tiga API, satu kunci: prakiraan cuaca dari ECMWF dan model nasional beresolusi tinggi, derajat-hari pemanasan dan pendinginan, serta 87 tahun data iklim harian. Halaman ini berisi semua yang Anda perlukan sebelum panggilan pertama. Endpointnya sendiri ada di tiga halaman referensi.

Apa ini#

Climate Memory melayani tiga produk dari dua host, dengan satu kunci API.

ProdukHostMenjawabReferensi
Cuacahttps://api.climatememory.comApa yang akan dilakukan cuaca — prakiraan, kondisi terkini, ensemble, kualitas udara, kondisi laut, sungaiAPI Cuaca
Derajat-harihttps://api.climatememory.comSeberapa banyak sebuah bangunan perlu dipanaskan atau didinginkan — sejak 1950, di mana sajaAPI Derajat-Hari
Iklimhttps://api.climatememory.comApa yang normal di sini — 87 tahun iklim harian, normal WMO, trenAPI Iklim

Dua host, bukan satu, karena derajat-hari membaca arsip berbeda dengan profil biaya berbeda, dan memisahkannya membuat yang satu bisa lambat tanpa memperlambat yang lain. Anda tidak perlu memikirkannya lebih jauh selain menyalin URL dasar yang tepat.

Semua endpoint adalah GET. Tidak ada request body di mana pun dalam API ini, tidak ada kursor paginasi, dan tidak ada sesi. Satu panggilan berarti satu URL ditambah satu header, sehingga Anda bisa mengujinya di bilah alamat peramban dengan kunci pada perkakas tanpa query string seperti curl, dan menyimpannya di cache di depan kami tanpa penanganan khusus.

Panggilan pertama Anda#

Tiga langkah. Semuanya memakan waktu sekitar satu menit.

1. Dapatkan kunci

Buat akun di developers.climatememory.com/signin. Paket gratis tidak meminta kartu, memberi Anda 10 000 kredit per bulan, dan kunci Anda langsung tampil di layar. Simpan di variabel lingkungan — semua contoh di bawah membaca $API_KEY.

export API_KEY="wd_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

2. Lakukan panggilan

curl -sH "X-API-Key: $API_KEY" \
  "https://api.climatememory.com/v1/forecast?lat=48.85&lon=2.35&days=3"
import os, httpx

r = httpx.get(
    "https://api.climatememory.com/v1/forecast",
    params={"lat": 48.85, "lon": 2.35, "days": 3},
    headers={"X-API-Key": os.environ["API_KEY"]},
    timeout=30,
)
r.raise_for_status()
data = r.json()
print(data["daily"]["temperature_2m_max"])
const res = await fetch(
  "https://api.climatememory.com/v1/forecast?lat=48.85&lon=2.35&days=3",
  { headers: { "X-API-Key": process.env.API_KEY } },
);
if (!res.ok) {
  const { error } = await res.json();
  throw new Error(`${error.code}: ${error.message}`);
}
const data = await res.json();
console.log(data.daily.temperature_2m_max);
req, _ := http.NewRequest("GET",
    "https://api.climatememory.com/v1/forecast?lat=48.85&lon=2.35&days=3", nil)
req.Header.Set("X-API-Key", os.Getenv("API_KEY"))

res, err := http.DefaultClient.Do(req)
if err != nil { return err }
defer res.Body.Close()

var out struct {
    Daily struct {
        TemperatureMax []float64 `json:"temperature_2m_max"`
    } `json:"daily"`
}
json.NewDecoder(res.Body).Decode(&out)

3. Baca jawabannya

Semua deret kembali berorientasi kolom — larik paralel yang berbagi satu indeks time, bukan daftar objek. Lihat konvensi respons untuk alasannya dan cara membacanya.

Selanjutnya: panggilan yang sama memakai nama kota biasanya lebih baik — https://api.climatememory.com/v1/forecast/city/fr/paris membawa ketinggian sebenarnya kota itu dan zona waktunya, dua hal yang tidak bisa dibawa oleh koordinat telanjang. Lihat prakiraan per kota.

Autentikasi#

Kirim kunci Anda pada header X-API-Key di setiap permintaan. Tidak ada alur OAuth, tidak ada bearer token yang perlu disegarkan, dan tidak ada tanda tangan yang perlu dihitung.

X-API-Key: wd_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Kunci disimpan dalam bentuk hash. Jika Anda kehilangan satu, kunci itu dirotasi, bukan dipulihkan — kami tidak bisa menampilkannya lagi, karena kami memang tidak memilikinya. Rotasi ada di konsol dan langsung menerbitkan kunci baru.

Scope

Sebuah kunci membawa scope, dan paketlah yang menentukan scope mana. Memanggil endpoint di luar scope Anda mengembalikan 403 scope_denied — itu masalah paket, bukan masalah kunci, dan pesannya mengatakan demikian.

ScopeMembuka akses ke
meteoSeluruh API Cuaca, termasuk fitur tambahannya
djuDerajat-hari dan riwayat per jam
climateArsip iklim harian dan agregatnya
normalsNormal WMO dan pembandingan normal

Endpoint geocoding tidak memerlukan satu pun dari scope itu. Kunci valid mana pun bisa menyelesaikan nama tempat, di paket mana pun, karena setiap produk di sini butuh koordinat sebelum bisa menjawab apa pun. Lihat geocoding.

Jangan pernah menaruh kunci Anda di peramban. Panggil API dari server Anda dan teruskan hasilnya ke klien. Kunci di JavaScript front-end adalah kunci yang bisa dibaca siapa saja dari tab jaringan dan dihabiskan dari kuota Anda — dan karena itu kunci Anda, pemakaiannya tidak bisa dibedakan dari pemakaian Anda sendiri.

Jika Anda butuh cuaca di aplikasi seluler, endpoint seluler ada persis untuk itu: mereka menerbitkan token per pemasangan alih-alih menanamkan kunci Anda.

Geocoding#

GEThttps://api.climatememory.com/v1/geocodekunci apa saja0 kredit

Mengubah nama tempat menjadi koordinat, ketinggian, dan zona waktu.

Parameter

ParameterTipeBawaanDeskripsi
qstringNama tempat, dalam bahasa apa pun. Tanda diakritik opsional. Wajib.
langISO-639-1enHanya untuk tampilan dan peringkat — tidak pernah menentukan apa yang layak muncul. Kode yang tidak dikenal jatuh kembali ke nama lokal, bukan gagal.
nearlat,lonPosisi pemanggil. Pemecah seri terkuat yang ada.
countryISO-3166-1 alpha-2Batasi ke satu negara.
limitint101–50.

Katalognya adalah kelas fitur P dari GeoNames secara utuh — setiap tempat berpenduduk di bumi, sampai dusun berisi beberapa puluh orang, bukan cuplikan yang disaring berdasarkan jumlah penduduk. Desa berpenduduk 528 jiwa pun ada di dalamnya.

Tidak memakan kredit, di paket mana pun, dan tidak butuh scope. Kunci yang dijual untuk derajat-hari juga bisa menyelesaikan nama, karena derajat-hari tidak bisa diminta tanpa koordinat. Sebagai gantinya ada plafon tersendiri — lima permintaan geocoding untuk setiap kredit di paket Anda — yang sengaja dibuat cukup longgar sehingga kotak pencarian dengan saran ketik dan debounce memang menjadi penggunaan yang dimaksudkan. Lihat batas laju dan kuota.

Pencocokan tidak pernah dibatasi bahasa

Kueri diuji terhadap nama lokal, transliterasi ASCII-nya, dan semua alias terlokalkan, apa pun isi lang. Itu lebih penting daripada kedengarannya: 98 % tempat sama sekali tidak punya nama terlokalkan — bahasa Prancis mencakup 1,84 % katalog — sehingga pencarian yang disaring per bahasa hanya akan menemukan ibu kota dan tidak lebih. lang memilih nama mana yang dikembalikan dan memengaruhi peringkat; ia tidak pernah menentukan apa yang layak muncul.

GET /v1/geocode?q=ramillies&lang=fr
GET /v1/geocode?q=ramillies&lang=fr&near=50.63,3.06   # dari Lille
GET /v1/geocode?q=bruxelles&lang=fr                     # eksonim, lewat indeks alias
GET /v1/geocode?q=zuesch&lang=de                        # umlaut ditulis panjang

Bagaimana hasil diperingkat

Setiap hasil membawa score dan, jika near diberikan, distance_km. Peringkat menggabungkan empat sinyal: seberapa cocok namanya, seberapa penting tempatnya, seberapa dekat ke near, dan apakah nama yang cocok berada dalam bahasa yang diminta.

Mengapa near ada. Ada dua Ramillies — 5 749 penduduk di Brabant Wallonia, 528 di Hauts-de-France, terpisah 126 km. Tidak ada yang benar secara abstrak. Tanpa near yang dikembalikan adalah yang lebih besar; dari Lille, yang dikembalikan adalah yang di Prancis.

Ketermukaan bukan sekadar jumlah penduduk. 90,7 % katalog tidak punya catatan penduduk — GeoNames sama sekali tidak menerbitkannya untuk sebagian negara — sehingga jenis tempat (ibu kota negara, pusat pemerintahan wilayah, tempat biasa, permukiman) yang memikul peringkat di mana pun data penduduk tidak ada.

Umlaut ditulis panjang, bukan dibuang. Papan ketik Jerman atau Denmark tanpa tanda diakritik menulis Zuesch untuk Züsch dan Koeln untuk Köln. GeoNames tidak membawa ejaan itu — bentuk ASCII-nya adalah Zusch, dengan umlaut dihapus alih-alih dipanjangkan — jadi ejaan itu dibuat di sini. Kedua ejaan sampai ke tempat yang benar, dan hasilnya tetap menampilkan nama sebenarnya.

Pencarian kota#

GEThttps://api.climatememory.com/v1/cities/searchkunci apa saja0 kredit

Pencarian nama versi lama. Hanya mencocokkan nama ASCII, mengurutkan berdasarkan jumlah penduduk.

GEThttps://api.climatememory.com/v1/cities/nearestkunci apa saja0 kredit

Kota terkatalog yang paling dekat dengan sebuah koordinat.

/v1/cities/search lebih tua daripada /v1/geocode dan mempertahankan kontraknya untuk pemanggil yang sudah membangun di atasnya: ia hanya mencocokkan nama ASCII dan mengurutkan berdasarkan jumlah penduduk.

Untuk apa pun yang dilihat pengguna, pilih /v1/geocode. Rute lama tidak bisa mencocokkan eksonim — Bruxelles tidak akan menemukan Brussel — dan urutannya tidak terdefinisi bagi sembilan dari sepuluh tempat yang tidak punya catatan penduduk.

/v1/cities/nearest adalah arah sebaliknya, dan itulah yang mengubah posisi GPS menjadi slug kota yang lalu bisa Anda berikan ke endpoint per kota. Ia menerima lat, lon, dan max_km opsional.

Keduanya dihitung ke plafon geocoding yang sama dengan /v1/geocode, dan tidak satu pun memakan kredit.

Konvensi respons#

Enam aturan berlaku di semua endpoint. Pelajari sekali, dan sisa dokumentasi ini hanyalah nama-nama field.

1. Deret berupa kolom, bukan baris

Setiap deret waktu adalah sekumpulan larik paralel yang berbagi satu indeks time, bukan larik objek:

"hourly": {
  "time":           ["2026-08-01T00:00:00+00:00", "2026-08-01T01:00:00+00:00"],
  "temperature_2m": [18.4, 18.1],
  "precipitation":  [0.0, 0.2]
}

Indeks i pada setiap larik menggambarkan momen yang sama. Bentuk ini tiga sampai lima kali lebih kecil di jaringan dibanding bentuk baris, langsung terurai menjadi dataframe atau pustaka grafik tanpa transformasi, dan inilah yang sudah diharapkan klien bergaya Open-Meteo. Untuk menelusurinya sebagai baris:

rows = zip(h["time"], h["temperature_2m"], h["precipitation"])

2. Waktu memakai ISO 8601 dengan offset eksplisit

Selalu. 2026-08-01T00:00:00+00:00, bukan string lokal telanjang dan bukan bilangan bulat Unix. Saat Anda mengirim timezone, offset pada respons adalah offset zona tersebut — sehingga string itu sendiri sudah tidak ambigu dan Anda tidak perlu tahu apa yang kami asumsikan.

3. Satuan memakai SI, tetap, dan tidak dinegosiasikan

°C, mm, m/s, hPa, W/m², meter. Tidak ada parameter units=imperial, dan itu disengaja: sakelar satuan adalah field yang maknanya bergantung pada field lain, dan begitulah seorang pemanggil berakhir menggambar Fahrenheit pada sumbu Celsius setelah perubahan konfigurasi yang tak ditinjau siapa pun. Konversikan di sisi Anda, tempat pembacanya berada.

Endpoint dengan satuan tak lazim mengirimkan blok units pada respons yang menyebutkannya secara eksplisit, alih-alih mengandalkan ingatan Anda.

4. null berarti "tidak diketahui", tidak pernah "nol"

Jam yang hilang menjadi null di dalam larik, tetap menempati posisinya agar indeks tetap sejajar. Ia tidak pernah diam-diam diisi 0 — untuk curah hujan keduanya adalah klaim yang berlawanan, dan salah satunya adalah kebohongan tentang kekeringan.

5. Setiap respons menyebut asalnya

Blok source (cuaca) atau blok quality (arsip) menyertai data: model atau run mana yang menjawab, seberapa lama usianya, seberapa lengkap periodenya. Anda tidak perlu menyimpulkan kesegaran dari jam.

6. Basi lebih baik daripada tidak ada

Jika run model terbaru kami lebih tua daripada seharusnya, kami tetap menjawab — dengan "stale": true dan data_age_hours di blok source — alih-alih mengembalikan 503. Prakiraan berumur delapan jam lebih berguna daripada sebuah kesalahan. Periksa penandanya jika kesegaran itu penting bagi Anda; abaikan jika tidak.

Tidak ada paginasi di mana pun. Sebuah permintaan mengembalikan seluruh jawabannya atau gagal dengan kesalahan rentang yang memberi tahu batas maksimumnya. Sebagai gantinya rentang dibatasi per endpoint — artinya logika ulang-coba Anda tidak pernah harus menangani kumpulan hasil yang terbaca separuh.

Batas laju, kredit, dan kuota#

Tiga batas independen berlaku, dan ketiganya sengaja gagal dengan cara berbeda. Setiap respons yang berhasil melaporkan posisi Anda:

HeaderArtinya
X-RateLimit-RemainingSisa permintaan pada menit bergulir saat ini
X-Quota-RemainingSisa kredit bulan ini
X-Quota-Resets-AtStempel waktu ISO untuk reset bulanan berikutnya
X-Geocode-RemainingSisa permintaan geocoding bulan ini. Hanya pada endpoint katalog, satu-satunya yang dibatasinya.

Kredit, bukan permintaan

Prakiraan kota dari cache adalah pembacaan 3 md. Sepuluh tahun derajat-hari per jam untuk lima ratus lokasi bukan. Menagih per permintaan akan membuat pemanggil tetap berada dalam kuotanya namun memakan biaya lebih besar daripada yang ia bayar, sepenuhnya secara sah — jadi biaya sebuah panggilan bergantung pada seberapa banyak arsip yang digerakkannya.

EndpointKredit
/v1/forecast, /v1/current, dan bentuk per kota1
/v1/probability, /v1/air-quality, /v1/marine, /v1/hydrology1
/v1/cells/resolve, /v1/climate/cells/resolve1
/v1/climate/normals3
/v1/climate/normals/compare6 — menjawab dua periode sekaligus
/v1/climate/daily, /v1/climate/monthly2, +1 untuk setiap periode penuh 365,25 hari dalam rentang
/v1/climate/summary3, +1 untuk setiap periode penuh 365,25 hari dalam rentang — sekitar 89 untuk seluruh arsip
/v1/degree-days beserta bentuk per kota dan per selnya2, +1 untuk setiap periode penuh 365,25 hari dalam rentang
/v1/degree-days/monthly2
/v1/historical(tahun + 1) × (variabel ÷ 2), dibulatkan ke bawah, minimum 1
Semua yang di atas dengan format=csv4× biaya JSON
/v1/geocode, /v1/cities/search, /v1/cities/nearest0 — dibatasi terpisah
/v1/models, /v1/methods, /v1/coverage, /v1/climate/coverage, /v1/climate/fields, /v1/historical/variables, /v1/attribution, /v1/licensing1, dan tanpa perlu kunci

Geocoding tidak memakan kredit. Setiap produk di sini butuh koordinat sebelum bisa menjawab, jadi menyelesaikan nama itu termasuk, bukan dijual. Kotak pencarian dengan saran ketik memang penggunaan yang dimaksudkan: beri debounce dan biarkan berjalan.

Meski begitu ia dibatasi, dan oleh plafonnya sendiri, bukan oleh kredit Anda: lima permintaan geocoding untuk setiap kredit di paket Anda. Pada paket 50 000 kredit itu berarti 250 000 pencarian per bulan, dan kotak pencarian ber-debounce menghabiskan sekitar enam per tempat yang ditemukan. Menghabiskannya mengembalikan 429 geocode_quota_exceeded dan membiarkan kredit Anda utuh — itu pula sebabnya keduanya memakai kode terpisah.

Apa yang harus dilakukan saat menabrak masing-masing

BatasResponsPenanganan
Laju (per menit)429 rate_limited + Retry-AfterTidur selama Retry-After detik lalu ulangi. Yang ini bersifat sementara sejak awal.
Kredit (per periode)429 quota_exceeded + X-Quota-Resets-AtMengulang tidak akan membantu sampai reset. Naikkan paket, atau turunkan fiturnya.
Plafon geocoding429 geocode_quota_exceededKredit Anda utuh dan semua endpoint lain tetap jalan. Perkuat debounce-nya.

Periode kuota Anda berjalan dari tanggal langganan sampai tanggal yang sama pada bulan berikutnya — periode yang ditagih Stripe — dan penghitungnya dimulai penuh lagi setiap kali. X-Quota-Resets-At membawa tanggal itu di setiap respons, jadi bacalah alih-alih menganggapnya tanggal 1. Akun tanpa langganan mengikuti bulan kalender.

Gunakan cache sebanyak mungkin — kami tidak keberatan, dan itu kuota gratis. Satu run prakiraan berubah 2 sampai 4 kali sehari; total derajat-hari untuk bulan yang sudah lewat sama sekali tidak berubah. Tidak ada apa pun di sini yang khusus per pengguna, jadi cache HTTP biasa di depan kami aman. Endpoint arsip khususnya layak disimpan selamanya untuk bagian di bawah lima hari terakhir.

Kesalahan#

Setiap kesalahan berbentuk sama, di kedua host:

{
  "error": {
    "code": "range_too_long",
    "message": "Requested span is 14.0 years; the maximum per request is 10.",
    "max_years": 10
  }
}

Bangun logika ulang-coba Anda di atas error.code, bukan di atas status HTTP. Tiga kondisi berbeda mengembalikan 429 dan ketiganya butuh reaksi berbeda: satu ingin tidur sebentar, satu ingin perubahan paket, dan satu lagi sama sekali tidak boleh menghentikan aplikasi Anda. Status saja tidak bisa membedakannya. Kunci tambahan — max_years di atas — membawa batas yang Anda lewati, agar klien Anda bisa menyesuaikan diri alih-alih menebak.

StatusKodeApa yang harus dilakukan
400invalid_latitude, invalid_longitudePerbaiki koordinatnya. Lintang −90…90, bujur −180…180.
400range_too_longPecah menjadi beberapa permintaan. max_years menyebut batasnya.
400bad_requestBentuk umum, ketika sebuah pemeriksaan tidak punya kode yang lebih spesifik. Anggap permanen — permintaan tidak akan menjadi sah hanya karena diulang.
400invalid_coordinatesPasangannya di luar rentang atau bukan titik di Bumi.
400invalid_method, invalid_baseLihat metode perhitungan.
400invalid_breakdownBukan salah satu dari daily, weekly, monthly, yearly.
400invalid_dateTanggal yang bukan ISO YYYY-MM-DD.
400invalid_rangeend mendahului start.
400invalid_nearnear bukan lat,lon.
400unknown_field, unknown_variableTanyakan ke /v1/fields, /v1/climate/fields, atau /v1/historical/variables apa yang dimiliki produk itu — ketiganya tidak butuh kunci. Pada /v1/forecast pesannya menyebut kecocokan terdekat dengan yang Anda minta.
400unknown_periodBukan periode acuan WMO. Lihat normal.
400period_not_coveredArsip tidak mencakup periode acuan itu pada titik ini.
401missing_api_keyHeader X-API-Key tidak ada.
401invalid_api_keyKunci tidak dikenal atau sudah dirotasi.
401unauthorizedBentuk umum, ketika tidak ada yang lebih spesifik yang berlaku.
402export_not_in_planEkspor CSV adalah fitur paket berbayar.
403scope_deniedPaket Anda tidak mencakup API ini. Lihat scope.
403key_inactiveKunci itu ada tetapi telah dicabut atau dinonaktifkan. Merotasi kunci membuat kunci lama menjadi seperti ini — periksa konsol sebelum menyimpulkan ada gangguan.
404city_not_foundRespons menyertakan larik suggestions — tampilkan.
404cell_not_foundSel tersemat yang sudah tidak ada. Lihat menyematkan sel.
404not_at_seaPermintaan kelautan di atas daratan. Model gelombang tidak punya nilai di sana.
404not_foundBentuk umum. Seperti di atas: permanen.
404no_city_nearbyTidak ada yang terkatalog dalam max_km dari titik itu.
404outside_archiveTanggalnya di luar isi arsip. /v1/climate/coverage menyebut apa isinya, dan tidak butuh kunci.
429rate_limitedMundur selama Retry-After detik.
429quota_exceededTunggu reset atau naikkan paket. Mengulang lebih cepat tidak mungkin berhasil.
429geocode_quota_exceededHanya plafon geocoding. Kredit Anda utuh; beri debounce pada kotak pencarian.
503data_unavailableSementara. Ulangi dengan backoff eksponensial.
503load_shedSengaja ditolak untuk melindungi layanan saat beban tinggi. Tingkat kritis paket Anda menentukan siapa yang dilepas lebih dulu. Ulangi dengan backoff; biasanya pulih dalam hitungan detik.
503catalogue_unavailableKatalog kota sesaat tidak terjangkau. Koordinat masih berfungsi — pakai itu alih-alih menggagalkan permintaan.

Itulah seluruh daftarnya, dan ia diperiksa terhadap kode sumber pada setiap build: kode yang diterbitkan di sini tetapi tidak dilempar handler mana pun akan menggagalkan rangkaian uji, begitu pula handler yang melempar kode yang tidak ada di tabel ini. Jika Anda menemui kode yang tidak tercantum di atas, itu bug halaman ini, bukan nilai yang perlu Anda tangani khusus.

Kebijakan ulang-coba yang berhasil

RETRY = {"rate_limited", "data_unavailable"}

def should_retry(status, code, attempt):
    if code == "quota_exceeded":
        return False              # tidak ada yang berubah sampai reset
    if code == "geocode_quota_exceeded":
        return False              # dan jangan berhenti: kredit masih jalan
    if code in RETRY:
        return attempt < 5
    return status >= 500

Akurasi — apa yang bisa diharapkan#

Kami lebih suka menetapkan harapan dengan benar daripada membiarkan Anda menemukan batasnya di produksi.

Di mana prakiraan ini kuat

Suhu, tekanan, angin sinoptik, kelembapan, lama penyinaran matahari. Kesalahan khas suhu 2 m pada 24 jam sekitar 1–1,5 °C. ECMWF adalah model deterministik global terbaik di dunia dan itulah yang Anda dapatkan.

Di mana ia lebih lemah

Badai konvektif — sel 28 km tidak bisa memisahkan satu badai petir, dan 3 km pun hanya mengisyaratkannya. Letak dan waktu persis hujan lokal. Iklim mikro pesisir dan pegunungan di bawah resolusi model. Angin laut dan kantong udara dingin lembah, yang tidak dimodelkan oleh koreksi medan.

Kejujuran geografis

Di Prancis, Jerman, AS, dan Kanada kami melayani model nasional 1,3–3 km, dan sebuah desa kecil benar-benar mendapat sel gridnya sendiri. Di bagian Eropa lainnya Anda mendapat 6,5 km. Di Afrika, Timur Tengah, dan sebagian besar Asia, model publik terbaik yang tersedia adalah 13–28 km, jadi Anda mendapat cuaca kawasan, bukan cuaca jalan Anda. Koreksi medan mempersempit selisih itu tetapi tidak menutupnya.

Derajat-hari

Reanalisis bergrid mencakup semua tempat, termasuk lokasi tanpa stasiun cuaca dalam radius 60 km — itulah kelebihannya dibanding penyedia berbasis stasiun. Kelemahannya adalah pusat kota, yang dibaca terlalu rendah oleh reanalisis; endpoint per kota menerapkan koreksi terkalibrasi, endpoint koordinat tidak.

Dua field adalah perkiraan, dan kami lebih suka mengatakannya

uv_index diturunkan dari elevasi matahari dan radiasi pita lebar, bukan dari kolom ozon — akurat kira-kira ±1 satuan. precipitation_probability_proxy adalah perkiraan, bukan probabilitas; yang sungguhan ada di /v1/probability. Keduanya dijelaskan lengkap di referensi field.

Paket#

PaketHargaKredit / bulanLajuKunciScope
Gratis€010 00020 / mnt1cuaca, ditambah derajat-hari dan iklim selama 30 hari
Starter€19 / bulan50 00060 / mnt3cuaca + derajat-hari + iklim
Pro€79 / bulan400 000300 / mnt10cuaca + derajat-hari + iklim + normal
Businessmulai €299 / bulanDisepakati dalam kontrakDisepakati dalam kontrak50cuaca + derajat-hari + iklim + normal

Geocoding berada di luar tabel ini: tidak memakan kredit di paket mana pun, dan punya plafonnya sendiri sebesar lima permintaan per kredit. Lihat batas laju dan kuota.

Penagihan tahunan berarti dua bulan gratis. Katalog terkini ada di developers.climatememory.com/pricing — halaman itu membaca sistem penagihan secara langsung, jadi jika keduanya pernah berbeda, halaman itulah yang benar.

Tidak ada endpoint ekspor massal di paket mana pun. Ekspor CSV tersedia pada arsip derajat-hari dan iklim, dibatasi pada rentang yang sama dengan panggilan JSON setara, dan hanya mengembalikan baris teragregasi — tidak pernah deret per jam.

Atribusi dan lisensi#

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

Redaksi persis yang diwajibkan, terbaca mesin. Tanpa kunci.

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

Tabel lisensi di balik setiap kumpulan data. Tanpa kunci.

Atribusi adalah syarat penggunaan, bukan basa-basi. Data dasarnya dilisensikan kepada kami dengan ketentuan yang mensyaratkannya, dan ketentuan itu berlanjut kepada Anda. Tampilkan pemberitahuan di mana pun datanya muncul, termasuk pada produk turunan. Satu baris di footer sudah cukup:

Weather data: ECMWF, DWD, NOAA, Météo-France · Climate data: Copernicus/ERA5-Land · Places: GeoNames

Kedua endpoint di atas tidak butuh kunci, jadi Anda bisa merender pemberitahuannya dari API alih-alih menanam string yang akan basi ketika sebuah sumber berubah. Atribusi untuk run tertentu yang menjawab juga menyertai setiap respons data, di source.attribution dan di header X-Data-Attribution.

Anda boleh menyatakan bahwa Anda memakai data ini. Anda tidak boleh menyiratkan bahwa salah satu organisasi tersebut membuat, menyetujui, atau mendukung produk Anda.

Penafian

Prakiraan disediakan tanpa jaminan. Baik Komisi Eropa, ECMWF, DWD, NOAA, maupun Météo-France tidak bertanggung jawab atas penggunaan informasi ini. Jangan menjadikannya satu-satunya dasar keputusan ketika nyawa, keselamatan, atau harta benda dipertaruhkan.

Satu pembatasan bukan milik kami untuk dilepaskan: lisensi Copernicus menyerahkan peringatan banjir kepada otoritas nasional dan regional. Lihat sungai.