Începeți aici
Trei API-uri, o singură cheie: prognoze meteo de la ECMWF și de la modelele naționale de înaltă rezoluție, grade-zile de încălzire și de răcire și 87 de ani de climă zilnică. Pagina aceasta e tot ce vă trebuie înainte de primul apel. Endpointurile propriu-zise sunt pe cele trei pagini de referință.
Ce este#
Climate Memory servește trei produse de pe două gazde, cu o singură cheie de API.
| Produs | Gazdă | La ce răspunde | Referință |
|---|---|---|---|
| Meteo | https://api.climatememory.com | Ce va face vremea — prognoză, condiții curente, ansambluri, calitatea aerului, starea mării, râuri | API Meteo |
| Grade-zile | https://api.climatememory.com | Cât a trebuit încălzită sau răcită o clădire — din 1950, oriunde | API Grade-zile |
| Climă | https://api.climatememory.com | Ce este normal aici — 87 de ani de climă zilnică, normale OMM, tendințe | API Climă |
Două gazde în loc de una pentru că gradele-zile citesc o altă arhivă, cu alt profil de cost, iar separarea lor permite ca una să fie lentă fără să o încetinească pe cealaltă. Dincolo de a copia URL-ul de bază potrivit, nu trebuie să vă intereseze.
Toate endpointurile sunt GET. Nu există corp de
cerere nicăieri în acest API, nici cursor de paginare, nici sesiune. Un apel
înseamnă un URL plus un antet, ceea ce înseamnă că puteți testa oricare dintre
ele în bara de adrese a unui browser, cu o cheie într-un instrument fără șir de
interogare precum curl, și puteți pune oricare în cache în fața
noastră fără tratamente speciale.
Primul dumneavoastră apel#
Trei pași. Totul durează cam un minut.
1. Obțineți o cheie
Creați-vă cont la developers.climatememory.com/signin. Planul
gratuit nu cere card, vă dă 10 000 de credite pe lună, iar cheia apare imediat
pe ecran. Păstrați-o într-o variabilă de mediu — toate exemplele de mai jos
citesc $API_KEY.
export API_KEY="wd_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
2. Faceți apelul
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. Citiți răspunsul
Toate seriile se întorc orientate pe coloane — vectori
paraleli care împart un singur index time, nu o listă de obiecte.
Vedeți convențiile de răspuns pentru de ce și pentru
cum se citesc.
Mai departe: același apel după numele orașului e de obicei
mai bun — https://api.climatememory.com/v1/forecast/city/fr/paris poartă altitudinea reală
a orașului și fusul lui orar, lucruri pe care o coordonată simplă nu le poate
purta. Vedeți prognoză pe oraș.
Autentificare#
Trimiteți cheia în antetul X-API-Key la fiecare cerere. Nu
există flux OAuth, niciun bearer token de reînnoit și nicio semnătură de
calculat.
X-API-Key: wd_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Cheile sunt stocate ca hash. Dacă pierdeți una, ea este rotită, nu recuperată — nu v-o putem arăta din nou, pentru că nu o avem. Rotirea se face din consolă și emite imediat o cheie nouă.
Scope-uri
O cheie poartă scope-uri, iar planul decide care. Apelarea unui endpoint din
afara scope-urilor dumneavoastră întoarce 403 scope_denied — asta e
o problemă de plan, nu de cheie, iar mesajul o spune.
| Scope | Deblochează |
|---|---|
meteo | Tot API-ul Meteo, inclusiv extrele |
dju | Gradele-zile și istoricul orar |
climate | Arhiva climatică zilnică și agregatele ei |
normals | Normalele OMM și compararea normalelor |
Endpointurile de geocodare nu cer niciunul dintre ele. Orice cheie validă rezolvă un nume de loc, pe orice plan, pentru că fiecare produs de aici are nevoie de o coordonată înainte să poată răspunde ceva. Vedeți geocodare.
Nu puneți niciodată cheia într-un browser. Apelați API-ul de pe serverul dumneavoastră și trimiteți rezultatul clientului. O cheie în JavaScript de front-end e o cheie pe care oricine o poate citi din fila de rețea și o poate cheltui din cota dumneavoastră — și, fiind cheia dumneavoastră, folosirea ei nu se distinge de a dumneavoastră.
Dacă vă trebuie meteo într-o aplicație mobilă, endpointurile mobile există exact pentru asta: emit un token per instalare în loc să vă înglobeze cheia.
Geocodare#
Transformă un nume de loc în coordonate, altitudine și fus orar.
Parametri
| Parametru | Tip | Implicit | Descriere |
|---|---|---|---|
q | string | — | Numele locului, în orice limbă. Diacriticele sunt opționale. Obligatoriu. |
lang | ISO-639-1 | en | Doar afișare și ordonare — niciodată ce este eligibil. Un cod necunoscut cade înapoi pe numele locale în loc să eșueze. |
near | lat,lon | — | Poziția apelantului. Cel mai puternic criteriu de departajare care există. |
country | ISO-3166-1 alpha-2 | — | Restrânge la o singură țară. |
limit | int | 10 | 1–50. |
Catalogul este clasa de entități P din GeoNames în întregime — fiecare localitate de pe Pământ, până la cătune de câteva zeci de oameni, nu un extras filtrat după populație. Un sat de 528 de locuitori este acolo.
Nu costă credite, pe niciun plan, și nu cere scope. O cheie vândută pentru grade-zile rezolvă și nume, pentru că gradele-zile nu pot fi cerute fără coordonată. În schimb are un plafon propriu — cinci cereri de geocodare pentru fiecare credit din planul dumneavoastră — dinadins destul de generos încât o casetă de căutare cu sugestii și debounce să fie utilizarea avută în vedere. Vedeți limite de ritm și cotă.
Potrivirea nu este niciodată restrânsă de limbă
Interogarea este testată pe numele local, pe transliterarea lui ASCII și pe
toate aliasurile localizate, orice ar spune lang. Asta
contează mai mult decât pare: 98 % dintre locuri nu au niciun nume localizat —
franceza acoperă 1,84 % din catalog — deci o căutare filtrată după limbă
găsește capitale și nimic altceva. lang alege ce nume se întoarce
și influențează ordonarea; nu decide niciodată ce este eligibil.
GET /v1/geocode?q=ramillies&lang=fr
GET /v1/geocode?q=ramillies&lang=fr&near=50.63,3.06 # din Lille
GET /v1/geocode?q=bruxelles&lang=fr # exonim, prin indexul de aliasuri
GET /v1/geocode?q=zuesch&lang=de # umlaut scris desfășurat
Cum sunt ordonate rezultatele
Fiecare rezultat poartă un score și, când s-a dat
near, un distance_km. Ordonarea combină patru semnale:
cât de bine s-a potrivit numele, cât de important e locul, cât de aproape e de
near și dacă numele potrivit era în limba cerută.
De ce există near. Sunt două localități
Ramillies — 5 749 de locuitori în Brabantul Valon, 528 în Hauts-de-France, la
126 km una de alta. Niciuna nu e răspunsul corect în abstract. Fără
near se întoarce cea mai mare; din Lille, se întoarce cea
franceză.
Importanța nu înseamnă doar populație. 90,7 % din catalog nu are populația înregistrată — GeoNames nu publică niciuna pentru unele țări — așa că, acolo unde populația lipsește, ordonarea e purtată de tipul locului (capitală națională, reședință de unitate administrativă, localitate obișnuită, cartier).
Umlauturile se scriu desfășurat, nu se aruncă. O tastatură
germană sau daneză fără diacritice scrie Zuesch pentru
Züsch și Koeln pentru Köln. GeoNames nu
are grafia asta — forma lui ASCII este Zusch, cu umlautul eliminat
în loc de desfășurat — așa că este generată aici. Ambele grafii ajung la loc,
iar rezultatul arată numele adevărat în ambele cazuri.
Căutare de orașe#
Căutarea veche după nume. Potrivește doar numele ASCII, ordonează după populație.
Cel mai apropiat oraș din catalog față de o coordonată.
/v1/cities/search este anterior lui /v1/geocode și
își păstrează contractul pentru cei care au construit deja pe el: potrivește
doar numele ASCII și ordonează după populație.
Preferați /v1/geocode pentru
orice vede utilizatorul. Ruta veche nu poate potrivi un exonim —
Bruxelles nu va găsi Brussel — iar ordonarea ei este
nedefinită pentru cele nouă locuri din zece care nu au populația
înregistrată.
/v1/cities/nearest este sensul invers și este cel care
transformă o poziție GPS într-un slug de oraș pe care îl puteți da apoi
endpointurilor pe oraș. Primește lat, lon și un
max_km opțional.
Amândouă se scad din același plafon de geocodare ca
/v1/geocode și niciunul nu costă credite.
Convenții de răspuns#
Șase reguli sunt valabile pentru toate endpointurile. Învățați-le o dată și restul acestei documentații înseamnă doar nume de câmpuri.
1. Seriile sunt coloane, nu rânduri
Fiecare serie de timp este un set de vectori paraleli care împart un singur
index time, în loc de un vector de obiecte:
"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]
}
Indexul i al fiecărui vector descrie același moment. Asta e de
trei până la cinci ori mai mic pe rețea decât forma pe rânduri, se decodează
direct într-un dataframe sau într-o bibliotecă de grafice fără transformare și
este ceea ce clienții scriși pentru Open-Meteo se așteaptă deja să
primească. Ca să-l parcurgeți pe rânduri:
rows = zip(h["time"], h["temperature_2m"], h["precipitation"])
2. Timpii sunt ISO 8601 cu decalaj explicit
Întotdeauna. 2026-08-01T00:00:00+00:00, niciodată un șir local
simplu și niciodată un întreg Unix. Când transmiteți un timezone,
decalajul din răspuns este al acelei zone — deci șirul singur este lipsit de
ambiguitate și nu trebuie să știți niciodată ce am presupus noi.
3. Unitățile sunt SI, fixe și nenegociabile
°C, mm, m/s, hPa, W/m², metri. Nu există un parametru
units=imperial, și asta e intenționat: un comutator de unități e un
câmp al cărui înțeles depinde de alt câmp, și așa ajunge un apelant să
deseneze Fahrenheit pe o axă în Celsius după o schimbare de configurație pe care
n-a verificat-o nimeni. Convertiți la marginea dumneavoastră, acolo unde e
cititorul.
Endpointurile cu unități neobișnuite trimit în răspuns un bloc
units care le numește explicit, în loc să se aștepte să vă
amintiți.
4. null înseamnă „nu se știe”, niciodată „zero”
O oră lipsă este null în vector, păstrându-și poziția pentru ca
indicii să rămână aliniați. Nu este completată tăcut cu 0 — pentru precipitații
cele două sunt afirmații opuse, iar una dintre ele e o minciună despre o
secetă.
5. Fiecare răspuns spune de unde vine
Un bloc source (meteo) sau un bloc quality
(arhive) călătorește cu datele: ce model sau ce rulare a răspuns, ce vechime
are, cât de completă era perioada. Nu trebuie niciodată să deduceți prospețimea
uitându-vă la ceas.
6. Mai bine învechit decât absent
Dacă cea mai nouă rulare a modelului nostru e mai veche decât ne așteptam,
tot răspundem — cu "stale": true și data_age_hours în
blocul source — în loc să întoarcem 503. O prognoză veche de opt
ore e mai utilă decât o eroare. Verificați indicatorul dacă prospețimea e
esențială pentru dumneavoastră; ignorați-l dacă nu e.
Nu există paginare nicăieri. O cerere își întoarce răspunsul întreg sau eșuează cu o eroare de interval care vă spune maximul. În schimb, intervalele sunt limitate per endpoint — ceea ce înseamnă că logica de reîncercare nu trebuie niciodată să trateze un set de rezultate citit pe jumătate.
Limite de ritm, credite și cotă#
Se aplică trei limite independente, iar ele cedează diferit dinadins. Fiecare răspuns reușit spune unde vă aflați:
| Antet | Înțeles |
|---|---|
X-RateLimit-Remaining | Cereri rămase în minutul glisant curent |
X-Quota-Remaining | Credite rămase luna aceasta |
X-Quota-Resets-At | Marcaj ISO al următoarei resetări lunare |
X-Geocode-Remaining | Cereri de geocodare rămase luna aceasta. Doar pe endpointurile de catalog, singurele pe care le limitează. |
Credite, nu cereri
O prognoză de oraș din cache este o citire de 3 ms. Zece ani de grade-zile orare pentru cinci sute de situri nu este. Tarifarea pe cereri ar lăsa un apelant să stea în cota lui și să coste mai mult decât plătește, absolut legitim — deci cât costă un apel depinde de cât de multă arhivă mișcă.
| Endpoint | Credite |
|---|---|
/v1/forecast, /v1/current și formele pe oraș | 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 — răspunde pentru două perioade |
/v1/climate/daily, /v1/climate/monthly | 2, +1 pentru fiecare perioadă completă de 365,25 zile din interval |
/v1/climate/summary | 3, +1 pentru fiecare perioadă completă de 365,25 zile din interval — circa 89 pentru arhiva completă |
/v1/degree-days și formele sale pe oraș și pe celulă | 2, +1 pentru fiecare perioadă completă de 365,25 zile din interval |
/v1/degree-days/monthly | 2 |
/v1/historical | (ani + 1) × (variabile ÷ 2), rotunjit în jos, minimum 1 |
Oricare dintre cele de mai sus cu format=csv | de 4× costul JSON |
/v1/geocode, /v1/cities/search, /v1/cities/nearest | 0 — limitat separat |
/v1/models, /v1/methods, /v1/coverage, /v1/climate/coverage, /v1/climate/fields, /v1/historical/variables, /v1/attribution, /v1/licensing | 1, și fără cheie |
Geocodarea nu costă credite. Fiecare produs de aici are nevoie de o coordonată înainte să poată răspunde, așa că rezolvarea unui nume este inclusă, nu vândută. O casetă de căutare cu sugestii este utilizarea avută în vedere: puneți-i debounce și lăsați-o să meargă.
Este totuși limitată, și de un plafon propriu, nu de creditele dumneavoastră:
cinci cereri de geocodare pentru fiecare credit din plan. Pe
planul de 50 000 de credite asta înseamnă 250 000 de căutări pe lună, iar o
casetă cu debounce cheltuie în jur de șase pentru fiecare loc găsit. Epuizarea
lui întoarce 429 geocode_quota_exceeded și vă lasă creditele
neatinse — de aceea sunt și două coduri separate.
Ce faceți când dați de fiecare
| Limită | Răspuns | Tratare |
|---|---|---|
| Ritm (pe minut) | 429 rate_limited + Retry-After | Așteptați secundele din Retry-After și reîncercați. Aceasta e tranzitorie prin construcție. |
| Credite (pe perioadă) | 429 quota_exceeded + X-Quota-Resets-At | Reîncercarea nu ajută până la resetare. Treceți la un plan superior sau reduceți funcționalitatea. |
| Plafon de geocodare | 429 geocode_quota_exceeded | Creditele vă sunt intacte și toate celelalte endpointuri merg. Puneți un debounce mai lung. |
Perioada de cotă merge de la data abonării până în aceeași zi a lunii următoare — perioada pe care o facturează Stripe — iar contorul o ia de la capăt, întreg, de fiecare dată. X-Quota-Resets-At poartă data aceea în fiecare răspuns, deci citiți-o în loc să presupuneți întâi de lună. Conturile fără abonament urmează luna calendaristică.
Puneți în cache fără reținere — nu ne deranjează și e cotă gratuită. O rulare de prognoză se schimbă de 2 până la 4 ori pe zi; un total de grade-zile pentru o lună trecută nu se schimbă niciodată. Nimic de aici nu e specific unui utilizator, deci un cache HTTP obișnuit în fața noastră e sigur. Mai ales endpointurile de arhivă merită păstrate la nesfârșit sub ultimele cinci zile.
Erori#
Toate erorile au aceeași formă, pe ambele gazde:
{
"error": {
"code": "range_too_long",
"message": "Requested span is 14.0 years; the maximum per request is 10.",
"max_years": 10
}
}
Construiți logica de reîncercare pe error.code, nu pe
statusul HTTP. Trei situații diferite întorc 429 și cer
trei reacții diferite: una vrea o pauză scurtă, alta vrea o schimbare de plan,
iar a treia n-ar trebui să vă oprească deloc aplicația. Statusul singur nu le
poate deosebi. Cheile suplimentare — max_years mai sus — poartă
limita pe care ați depășit-o, ca să se poată adapta clientul, nu să
ghicească.
| Status | Cod | Ce faceți |
|---|---|---|
| 400 | invalid_latitude, invalid_longitude | Corectați coordonatele. Latitudinea e −90…90, longitudinea −180…180. |
| 400 | range_too_long | Împărțiți în mai multe cereri. max_years spune plafonul. |
| 400 | bad_request | Forma generică, când o verificare nu are un cod propriu mai specific. Tratați-o ca permanentă — cererea nu devine validă prin reîncercare. |
| 400 | invalid_coordinates | Perechea e în afara intervalului sau nu e un punct de pe Pământ. |
| 400 | invalid_method, invalid_base | Vedeți metodele de calcul. |
| 400 | invalid_breakdown | Nu e daily, weekly, monthly sau yearly. |
| 400 | invalid_date | O dată care nu e ISO YYYY-MM-DD. |
| 400 | invalid_range | end e înaintea lui start. |
| 400 | invalid_near | near nu e lat,lon. |
| 400 | unknown_field, unknown_variable | Întrebați /v1/fields, /v1/climate/fields sau /v1/historical/variables ce conține produsul acela — niciunul dintre cele trei nu cere cheie. Pe /v1/forecast mesajul numește cea mai apropiată potrivire de ce ați cerut. |
| 400 | unknown_period | Nu e o perioadă de referință OMM. Vedeți normale. |
| 400 | period_not_covered | Arhiva nu acoperă acea perioadă de referință în punctul respectiv. |
| 401 | missing_api_key | Antetul X-API-Key lipsea. |
| 401 | invalid_api_key | Cheia e necunoscută sau a fost rotită. |
| 401 | unauthorized | Forma generică, când nimic mai specific nu se potrivește. |
| 402 | export_not_in_plan | Exportul CSV este o funcție a planurilor plătite. |
| 403 | scope_denied | Planul dumneavoastră nu include acest API. Vedeți scope-uri. |
| 403 | key_inactive | Cheia există, dar a fost revocată sau dezactivată. Rotirea unei chei face asta celei vechi — verificați consola înainte să presupuneți o pană. |
| 404 | city_not_found | Răspunsul include un vector suggestions — arătați-l. |
| 404 | cell_not_found | O celulă fixată care nu mai există. Vedeți fixarea unei celule. |
| 404 | not_at_sea | O cerere marină pe uscat. Modelul de valuri nu are valoare acolo. |
| 404 | not_found | Forma generică. Ca mai sus: permanentă. |
| 404 | no_city_nearby | Nimic în catalog la mai puțin de max_km de acel punct. |
| 404 | outside_archive | Datele sunt în afara a ceea ce conține arhiva. /v1/climate/coverage spune ce conține și nu cere cheie. |
| 429 | rate_limited | Retrageți-vă pentru secundele din Retry-After. |
| 429 | quota_exceeded | Așteptați resetarea sau treceți la alt plan. Reîncercarea mai devreme nu poate reuși. |
| 429 | geocode_quota_exceeded | Doar plafonul de geocodare. Creditele vă sunt intacte; puneți debounce pe caseta de căutare. |
| 503 | data_unavailable | Tranzitoriu. Reîncercați cu retragere exponențială. |
| 503 | load_shed | Refuzat dinadins pentru a proteja serviciul sub sarcină. Criticitatea planului dumneavoastră decide cine e lăsat deoparte primul. Reîncercați cu retragere; trece în câteva secunde. |
| 503 | catalogue_unavailable | Catalogul de orașe e pentru scurt timp inaccesibil. Coordonatele funcționează în continuare — folosiți-le în loc să lăsați cererea să eșueze. |
Aceasta e toată lista, și e verificată față de sursă la fiecare construire: un cod publicat aici pe care niciun handler nu îl ridică pică suita de teste, la fel și un handler care ridică unul pe care tabelul acesta nu îl conține. Dacă dați de un cod care nu e mai sus, e o eroare a acestei pagini și nu o valoare pe care s-o tratați special.
O politică de reîncercare care funcționează
RETRY = {"rate_limited", "data_unavailable"}
def should_retry(status, code, attempt):
if code == "quota_exceeded":
return False # nimic nu se schimbă până la resetare
if code == "geocode_quota_exceeded":
return False # și nu vă opriți: creditele merg în continuare
if code in RETRY:
return attempt < 5
return status >= 500
Acuratețe — la ce să vă așteptați#
Preferăm să setăm corect așteptările decât să descoperiți limitele în producție.
Unde prognoza e puternică
Temperatură, presiune, vânt sinoptic, umiditate, durata de strălucire a soarelui. Eroarea tipică a temperaturii la 2 m la 24 de ore e în jur de 1–1,5 °C. ECMWF e cel mai bun model global determinist din lume și el este cel pe care îl primiți.
Unde e mai slabă
Furtunile convective — o celulă de 28 km nu poate rezolva o furtună, iar nici măcar 3 km nu fac mai mult decât s-o sugereze. Locul și momentul exact al averselor. Microclimatul de coastă și de munte sub rezoluția modelului. Brizele marine și lacurile de aer rece din văi, pe care corecția de relief nu le modelează.
Onestitate geografică
În Franța, Germania, SUA și Canada servim modele naționale de 1,3–3 km, iar un sat mic chiar primește propria celulă de grilă. În restul Europei primiți 6,5 km. În Africa, Orientul Mijlociu și cea mai mare parte a Asiei, cel mai bun model public disponibil e de 13–28 km, deci primiți vremea zonei, nu a străzii. Corecția de relief îngustează diferența, dar nu o închide.
Grade-zile
Reanaliza pe grilă acoperă peste tot, inclusiv locuri fără nicio stație meteo pe o rază de 60 km — acesta e avantajul ei față de furnizorii bazați pe stații. Slăbiciunea ei sunt centrele orașelor, pe care reanaliza le subestimează; endpointurile pe oraș aplică o corecție calibrată, cele pe coordonate nu.
Două câmpuri sunt estimări și preferăm s-o spunem
uv_index e derivat din înălțimea soarelui și din radiația de
bandă largă, nu dintr-o coloană de ozon — cu o acuratețe de circa ±1 unitate.
precipitation_probability_proxy e o estimare, nu o probabilitate;
cea adevărată e la /v1/probability. Amândouă sunt
explicate pe larg în referința câmpurilor.
Planuri#
| Plan | Preț | Credite / lună | Ritm | Chei | Scope-uri |
|---|---|---|---|---|---|
| Gratuit | 0 € | 10 000 | 20 / min | 1 | meteo, plus grade-zile și climă timp de 30 de zile |
| Starter | 19 € / lună | 50 000 | 60 / min | 3 | meteo + grade-zile + climă |
| Pro | 79 € / lună | 400 000 | 300 / min | 10 | meteo + grade-zile + climă + normale |
| Business | de la 299 € / lună | Stabilit prin contract | Stabilit prin contract | 50 | meteo + grade-zile + climă + normale |
Geocodarea stă în afara acestui tabel: nu costă credite pe niciun plan și are plafonul ei de cinci cereri per credit. Vedeți limite de ritm și cotă.
Facturarea anuală înseamnă două luni gratuite. Catalogul viu este la developers.climatememory.com/pricing — pagina aceea citește direct sistemul de facturare, deci dacă vreodată cele două nu se potrivesc, ea are dreptate.
Nu există endpoint de export în masă pe niciun plan. Exportul CSV există pe arhivele de grade-zile și de climă, este limitat la același interval ca apelul JSON echivalent și întoarce doar rânduri agregate — niciodată seria orară.
Atribuire și licențiere#
Formularea exactă cerută, citibilă de mașină. Fără cheie.
Tabelul licențelor din spatele fiecărui set de date. Fără cheie.
Atribuirea e o condiție de utilizare, nu o amabilitate. Datele de bază ne sunt licențiate în termeni care o cer, iar acei termeni trec la dumneavoastră. Afișați o mențiune oriunde apar datele, inclusiv în produse derivate. O linie în subsol e de ajuns:
Weather data: ECMWF, DWD, NOAA, Météo-France · Climate data: Copernicus/ERA5-Land · Places: GeoNames
Ambele endpointuri de mai sus nu cer cheie, deci puteți afișa mențiunea
direct din API în loc să fixați în cod un șir care se învechește când se schimbă
o sursă. Atribuirea pentru rularea concretă care a răspuns călătorește și ea în
fiecare răspuns cu date, în source.attribution și în antetul
X-Data-Attribution.
Puteți declara că folosiți aceste date. Nu puteți sugera că vreuna dintre aceste organizații v-a produs, aprobat sau susținut produsul.
Declinarea răspunderii
Prognozele sunt furnizate fără garanție. Nici Comisia Europeană, nici ECMWF, DWD, NOAA sau Météo-France nu răspund pentru vreo utilizare a acestor informații. Nu le folosiți ca unic temei pentru decizii în care viața, siguranța sau bunurile sunt în joc.
O restricție nu e a noastră ca s-o ridicăm: licența Copernicus rezervă avertizările de inundații autorităților naționale și regionale. Vedeți râuri.