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.
| Produk | Host | Menjawab | Referensi |
|---|---|---|---|
| Cuaca | https://api.climatememory.com | Apa yang akan dilakukan cuaca — prakiraan, kondisi terkini, ensemble, kualitas udara, kondisi laut, sungai | API Cuaca |
| Derajat-hari | https://api.climatememory.com | Seberapa banyak sebuah bangunan perlu dipanaskan atau didinginkan — sejak 1950, di mana saja | API Derajat-Hari |
| Iklim | https://api.climatememory.com | Apa yang normal di sini — 87 tahun iklim harian, normal WMO, tren | API 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.
| Scope | Membuka akses ke |
|---|---|
meteo | Seluruh API Cuaca, termasuk fitur tambahannya |
dju | Derajat-hari dan riwayat per jam |
climate | Arsip iklim harian dan agregatnya |
normals | Normal 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#
Mengubah nama tempat menjadi koordinat, ketinggian, dan zona waktu.
Parameter
| Parameter | Tipe | Bawaan | Deskripsi |
|---|---|---|---|
q | string | — | Nama tempat, dalam bahasa apa pun. Tanda diakritik opsional. Wajib. |
lang | ISO-639-1 | en | Hanya untuk tampilan dan peringkat — tidak pernah menentukan apa yang layak muncul. Kode yang tidak dikenal jatuh kembali ke nama lokal, bukan gagal. |
near | lat,lon | — | Posisi pemanggil. Pemecah seri terkuat yang ada. |
country | ISO-3166-1 alpha-2 | — | Batasi ke satu negara. |
limit | int | 10 | 1–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#
Pencarian nama versi lama. Hanya mencocokkan nama ASCII, mengurutkan berdasarkan jumlah penduduk.
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:
| Header | Artinya |
|---|---|
X-RateLimit-Remaining | Sisa permintaan pada menit bergulir saat ini |
X-Quota-Remaining | Sisa kredit bulan ini |
X-Quota-Resets-At | Stempel waktu ISO untuk reset bulanan berikutnya |
X-Geocode-Remaining | Sisa 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.
| Endpoint | Kredit |
|---|---|
/v1/forecast, /v1/current, dan bentuk per kota | 1 |
/v1/probability, /v1/air-quality, /v1/marine, /v1/hydrology | 1 |
/v1/cells/resolve, /v1/climate/cells/resolve | 1 |
/v1/climate/normals | 3 |
/v1/climate/normals/compare | 6 — menjawab dua periode sekaligus |
/v1/climate/daily, /v1/climate/monthly | 2, +1 untuk setiap periode penuh 365,25 hari dalam rentang |
/v1/climate/summary | 3, +1 untuk setiap periode penuh 365,25 hari dalam rentang — sekitar 89 untuk seluruh arsip |
/v1/degree-days beserta bentuk per kota dan per selnya | 2, +1 untuk setiap periode penuh 365,25 hari dalam rentang |
/v1/degree-days/monthly | 2 |
/v1/historical | (tahun + 1) × (variabel ÷ 2), dibulatkan ke bawah, minimum 1 |
Semua yang di atas dengan format=csv | 4× biaya JSON |
/v1/geocode, /v1/cities/search, /v1/cities/nearest | 0 — dibatasi terpisah |
/v1/models, /v1/methods, /v1/coverage, /v1/climate/coverage, /v1/climate/fields, /v1/historical/variables, /v1/attribution, /v1/licensing | 1, 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
| Batas | Respons | Penanganan |
|---|---|---|
| Laju (per menit) | 429 rate_limited + Retry-After | Tidur selama Retry-After detik lalu ulangi. Yang ini bersifat sementara sejak awal. |
| Kredit (per periode) | 429 quota_exceeded + X-Quota-Resets-At | Mengulang tidak akan membantu sampai reset. Naikkan paket, atau turunkan fiturnya. |
| Plafon geocoding | 429 geocode_quota_exceeded | Kredit 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.
| Status | Kode | Apa yang harus dilakukan |
|---|---|---|
| 400 | invalid_latitude, invalid_longitude | Perbaiki koordinatnya. Lintang −90…90, bujur −180…180. |
| 400 | range_too_long | Pecah menjadi beberapa permintaan. max_years menyebut batasnya. |
| 400 | bad_request | Bentuk umum, ketika sebuah pemeriksaan tidak punya kode yang lebih spesifik. Anggap permanen — permintaan tidak akan menjadi sah hanya karena diulang. |
| 400 | invalid_coordinates | Pasangannya di luar rentang atau bukan titik di Bumi. |
| 400 | invalid_method, invalid_base | Lihat metode perhitungan. |
| 400 | invalid_breakdown | Bukan salah satu dari daily, weekly, monthly, yearly. |
| 400 | invalid_date | Tanggal yang bukan ISO YYYY-MM-DD. |
| 400 | invalid_range | end mendahului start. |
| 400 | invalid_near | near bukan lat,lon. |
| 400 | unknown_field, unknown_variable | Tanyakan 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. |
| 400 | unknown_period | Bukan periode acuan WMO. Lihat normal. |
| 400 | period_not_covered | Arsip tidak mencakup periode acuan itu pada titik ini. |
| 401 | missing_api_key | Header X-API-Key tidak ada. |
| 401 | invalid_api_key | Kunci tidak dikenal atau sudah dirotasi. |
| 401 | unauthorized | Bentuk umum, ketika tidak ada yang lebih spesifik yang berlaku. |
| 402 | export_not_in_plan | Ekspor CSV adalah fitur paket berbayar. |
| 403 | scope_denied | Paket Anda tidak mencakup API ini. Lihat scope. |
| 403 | key_inactive | Kunci itu ada tetapi telah dicabut atau dinonaktifkan. Merotasi kunci membuat kunci lama menjadi seperti ini — periksa konsol sebelum menyimpulkan ada gangguan. |
| 404 | city_not_found | Respons menyertakan larik suggestions — tampilkan. |
| 404 | cell_not_found | Sel tersemat yang sudah tidak ada. Lihat menyematkan sel. |
| 404 | not_at_sea | Permintaan kelautan di atas daratan. Model gelombang tidak punya nilai di sana. |
| 404 | not_found | Bentuk umum. Seperti di atas: permanen. |
| 404 | no_city_nearby | Tidak ada yang terkatalog dalam max_km dari titik itu. |
| 404 | outside_archive | Tanggalnya di luar isi arsip. /v1/climate/coverage menyebut apa isinya, dan tidak butuh kunci. |
| 429 | rate_limited | Mundur selama Retry-After detik. |
| 429 | quota_exceeded | Tunggu reset atau naikkan paket. Mengulang lebih cepat tidak mungkin berhasil. |
| 429 | geocode_quota_exceeded | Hanya plafon geocoding. Kredit Anda utuh; beri debounce pada kotak pencarian. |
| 503 | data_unavailable | Sementara. Ulangi dengan backoff eksponensial. |
| 503 | load_shed | Sengaja 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. |
| 503 | catalogue_unavailable | Katalog 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#
| Paket | Harga | Kredit / bulan | Laju | Kunci | Scope |
|---|---|---|---|---|---|
| Gratis | €0 | 10 000 | 20 / mnt | 1 | cuaca, ditambah derajat-hari dan iklim selama 30 hari |
| Starter | €19 / bulan | 50 000 | 60 / mnt | 3 | cuaca + derajat-hari + iklim |
| Pro | €79 / bulan | 400 000 | 300 / mnt | 10 | cuaca + derajat-hari + iklim + normal |
| Business | mulai €299 / bulan | Disepakati dalam kontrak | Disepakati dalam kontrak | 50 | cuaca + 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#
Redaksi persis yang diwajibkan, terbaca mesin. Tanpa kunci.
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.