Zacznij tutaj
Trzy API, jeden klucz: prognozy pogody z ECMWF i krajowych modeli wysokiej rozdzielczości, stopniodni grzania i chłodzenia oraz 87 lat klimatu dobowego. Ta strona to wszystko, czego potrzebujesz przed pierwszym wywołaniem. Same endpointy są na trzech stronach dokumentacji.
Czym to jest#
Climate Memory serwuje trzy produkty z dwóch hostów, na jednym kluczu API.
| Produkt | Host | Odpowiada na | Dokumentacja |
|---|---|---|---|
| Pogoda | https://api.climatememory.com | Co zrobi pogoda — prognoza, warunki bieżące, ensemble, jakość powietrza, stan morza, rzeki | API Pogoda |
| Stopniodni | https://api.climatememory.com | Ile trzeba było ogrzać lub schłodzić budynek — od 1950 roku, wszędzie | API Stopniodni |
| Klimat | https://api.climatememory.com | Co jest tu normalne — 87 lat klimatu dobowego, normy WMO, trendy | API Klimat |
Dwa hosty zamiast jednego, bo stopniodni czytają inne archiwum o innym profilu kosztów, a rozdzielenie ich pozwala jednemu być wolnym bez spowalniania drugiego. Poza skopiowaniem właściwego adresu bazowego nie musi cię to obchodzić.
Każdy endpoint to GET. W tym API nigdzie nie ma
ciała żądania, nie ma kursora paginacji ani sesji. Wywołanie to adres URL plus
nagłówek, co oznacza, że każde z nich przetestujesz w pasku adresu przeglądarki
— z kluczem w narzędziu bez query stringa, takim jak curl — i każde
zbuforujesz przed nami bez specjalnej obsługi.
Twoje pierwsze wywołanie#
Trzy kroki. Całość zajmuje jakąś minutę.
1. Odbierz klucz
Załóż konto na developers.climatememory.com/signin. Plan
darmowy nie wymaga karty, daje 10 000 kredytów miesięcznie, a klucz pojawia się
na ekranie od razu. Trzymaj go w zmiennej środowiskowej — wszystkie poniższe
przykłady czytają $API_KEY.
export API_KEY="wd_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
2. Wykonaj wywołanie
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. Przeczytaj odpowiedź
Każdy szereg wraca zorientowany kolumnowo — jako równoległe
tablice dzielące jeden indeks time, a nie lista obiektów. Zobacz
konwencje odpowiedzi, żeby dowiedzieć się dlaczego i
jak to czytać.
Dalej: to samo wywołanie po nazwie miasta jest zwykle lepsze
— https://api.climatememory.com/v1/forecast/city/fr/paris niesie prawdziwą wysokość miasta
i jego strefę czasową, czego goła współrzędna nie potrafi. Zobacz
prognoza dla miasta.
Uwierzytelnianie#
Wysyłaj klucz w nagłówku X-API-Key przy każdym żądaniu. Nie ma
przepływu OAuth, nie ma tokenu bearer do odświeżania ani podpisu do
policzenia.
X-API-Key: wd_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Klucze są przechowywane w postaci skrótu. Jeśli któryś zgubisz, zostanie zrotowany, a nie odzyskany — nie możemy ci go pokazać ponownie, bo go nie mamy. Rotacja jest w konsoli i natychmiast wydaje nowy klucz.
Scope'y
Klucz niesie scope'y, a o tym, które, decyduje plan. Wywołanie endpointu
spoza twoich scope'ów zwraca 403 scope_denied — to problem planu, a
nie klucza, i komunikat to mówi.
| Scope | Odblokowuje |
|---|---|
meteo | Całe API Pogoda, razem z dodatkami |
dju | Stopniodni i historię godzinową |
climate | Dobowe archiwum klimatu i jego agregaty |
normals | Normy WMO i porównanie norm |
Endpointy geokodowania nie wymagają żadnego z nich. Dowolny ważny klucz rozwiązuje nazwę miejsca, w każdym planie, bo każdy produkt tutaj potrzebuje współrzędnej, zanim cokolwiek odpowie. Zobacz geokodowanie.
Nigdy nie umieszczaj klucza w przeglądarce. Wywołuj API ze swojego serwera i przekazuj wynik klientowi. Klucz w JavaScripcie frontendowym to klucz, który każdy odczyta z zakładki sieci i wyda na twój limit — a ponieważ jest twój, takie użycie jest nie do odróżnienia od twojego.
Jeśli potrzebujesz pogody w aplikacji mobilnej, endpointy mobilne istnieją dokładnie po to: wydają token na instalację zamiast osadzać twój klucz.
Geokodowanie#
Zamienia nazwę miejsca na współrzędne, wysokość i strefę czasową.
Parametry
| Parametr | Typ | Domyślnie | Opis |
|---|---|---|---|
q | string | — | Nazwa miejsca, w dowolnym języku. Znaki diakrytyczne opcjonalne. Wymagane. |
lang | ISO-639-1 | en | Tylko wyświetlanie i kolejność — nigdy to, co jest brane pod uwagę. Nieznany kod cofa się do nazw lokalnych zamiast zgłaszać błąd. |
near | lat,lon | — | Pozycja wywołującego. Najsilniejsze kryterium rozstrzygające, jakie istnieje. |
country | ISO-3166-1 alpha-2 | — | Ogranicz do jednego kraju. |
limit | int | 10 | 1–50. |
Katalog to klasa obiektów P z GeoNames w całości — każde zamieszkane miejsce na Ziemi, aż po przysiółki liczące kilkadziesiąt osób, a nie wyciąg przefiltrowany po liczbie ludności. Wieś licząca 528 mieszkańców w nim jest.
Nie kosztuje kredytów w żadnym planie i nie wymaga scope'u. Klucz sprzedany na stopniodni też rozwiązuje nazwy, bo stopniodni nie da się poprosić bez współrzędnej. Ma za to własny pułap — pięć żądań geokodowania na każdy kredyt twojego planu — celowo na tyle hojny, że pole wyszukiwania z podpowiedziami i debounce'em jest przewidzianym zastosowaniem. Zobacz limity tempa i przydział.
Dopasowanie nigdy nie jest ograniczane językiem
Zapytanie jest sprawdzane względem nazwy lokalnej, jej transliteracji ASCII i
każdego zlokalizowanego aliasu, cokolwiek mówi lang. To
znaczy więcej, niż brzmi: 98 % miejsc nie ma żadnej nazwy zlokalizowanej —
francuski pokrywa 1,84 % katalogu — więc wyszukiwanie filtrowane językiem
znajduje stolice i nic więcej. lang wybiera, która nazwa wraca, i
wpływa na kolejność; nigdy nie decyduje, co jest brane pod uwagę.
GET /v1/geocode?q=ramillies&lang=fr
GET /v1/geocode?q=ramillies&lang=fr&near=50.63,3.06 # z Lille
GET /v1/geocode?q=bruxelles&lang=fr # egzonim, przez indeks aliasów
GET /v1/geocode?q=zuesch&lang=de # umlaut zapisany rozwinięciem
Jak wyniki są układane
Każdy wynik niesie score, a gdy podano near — także
distance_km. Kolejność łączy cztery sygnały: jak dobrze nazwa
pasowała, jak znaczące jest miejsce, jak blisko jest near i czy
dopasowana nazwa była w żądanym języku.
Po co istnieje near. Są dwie miejscowości
Ramillies — 5 749 mieszkańców w Brabancji Walońskiej, 528 w regionie
Hauts-de-France, 126 km od siebie. Żadna nie jest właściwą odpowiedzią w
oderwaniu od kontekstu. Bez near wraca ta większa; z Lille — ta
francuska.
Znaczenie to nie sama liczba ludności. 90,7 % katalogu nie ma zapisanej ludności — dla części krajów GeoNames nie publikuje jej wcale — więc tam, gdzie ludności brak, kolejność niesie typ miejsca (stolica kraju, siedziba jednostki administracyjnej, zwykła miejscowość, dzielnica).
Umlauty są rozwijane, a nie porzucane. Niemiecka albo duńska
klawiatura bez znaków diakrytycznych pisze Zuesch zamiast
Züsch i Koeln zamiast Köln. GeoNames nie
ma tego zapisu — jego forma ASCII to Zusch, z umlautem usuniętym, a
nie rozwiniętym — więc jest generowany tutaj. Oba zapisy docierają do miejsca, a
wynik i tak pokazuje prawdziwą nazwę.
Wyszukiwanie miast#
Starsze wyszukiwanie nazw. Dopasowuje tylko nazwę ASCII i porządkuje według ludności.
Najbliższe skatalogowane miasto dla współrzędnej.
/v1/cities/search jest starszy niż /v1/geocode i
zachowuje swój kontrakt dla tych, którzy już na nim zbudowali: dopasowuje
wyłącznie nazwę ASCII i porządkuje według liczby ludności.
Do wszystkiego, co widzi użytkownik, wybieraj
/v1/geocode. Starsza trasa nie
dopasuje egzonimu — Bruxelles nie znajdzie Brussel — a jej
kolejność jest nieokreślona dla dziewięciu na dziesięć miejsc, które nie mają
zapisanej ludności.
/v1/cities/nearest to kierunek odwrotny i to on zamienia
pozycję GPS w slug miasta, który można potem podać endpointom miejskim.
Przyjmuje lat, lon i opcjonalne
max_km.
Oba liczą się do tego samego pułapu geokodowania co
/v1/geocode i żaden nie kosztuje kredytów.
Konwencje odpowiedzi#
Sześć reguł obowiązuje w każdym endpoincie. Naucz się ich raz, a reszta tej dokumentacji to już tylko nazwy pól.
1. Szeregi to kolumny, nie wiersze
Każdy szereg czasowy to zestaw równoległych tablic dzielących jeden indeks
time, a nie tablica obiektów:
"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 każdej tablicy opisuje ten sam moment. To trzy do
pięciu razy mniej danych na łączu niż postać wierszowa, dekoduje się wprost do
ramki danych albo biblioteki wykresów bez przekształcania i jest tym, czego
klienci pisani pod Open-Meteo już oczekują. Aby przejść po tym wierszami:
rows = zip(h["time"], h["temperature_2m"], h["precipitation"])
2. Czasy są w ISO 8601 z jawnym przesunięciem
Zawsze. 2026-08-01T00:00:00+00:00, nigdy goły łańcuch lokalny
ani liczba uniksowa. Gdy podasz timezone, przesunięcie w odpowiedzi
jest przesunięciem tej strefy — więc sam łańcuch jest jednoznaczny i nigdy nie
musisz wiedzieć, co założyliśmy.
3. Jednostki są w SI, stałe i nie podlegają negocjacji
°C, mm, m/s, hPa, W/m², metry. Nie ma parametru
units=imperial, i to celowo: przełącznik jednostek to pole, którego
znaczenie zależy od innego pola, i tak właśnie wywołujący kończy z Fahrenheitem
na osi w stopniach Celsjusza po zmianie konfiguracji, której nikt nie
przejrzał. Przeliczaj na swojej krawędzi, tam gdzie jest czytelnik.
Endpointy o nietypowych jednostkach dołączają do odpowiedzi blok
units, który nazywa je wprost, zamiast liczyć na twoją pamięć.
4. null znaczy „nie wiadomo”, nigdy „zero”
Brakująca godzina to null w tablicy, trzymający swoją pozycję,
żeby indeksy pozostały zgodne. Nigdy nie jest po cichu wypełniana zerem — dla
opadu to dwa przeciwne twierdzenia, a jedno z nich to kłamstwo o suszy.
5. Każda odpowiedź mówi, skąd pochodzi
Wraz z danymi podróżuje blok source (pogoda) albo blok
quality (archiwa): który model lub przebieg odpowiedział, jak stary
jest, jak kompletny był okres. Nigdy nie musisz wnioskować świeżości z
zegara.
6. Nieświeże jest lepsze niż nic
Jeśli nasz najnowszy przebieg modelu jest starszy, niż powinien, i tak
odpowiadamy — z "stale": true i data_age_hours w bloku
source — zamiast zwracać 503. Prognoza sprzed ośmiu godzin jest
użyteczniejsza niż błąd. Sprawdź flagę, jeśli świeżość jest dla ciebie nośna;
zignoruj ją, jeśli nie.
Nigdzie nie ma paginacji. Żądanie zwraca całą swoją odpowiedź albo kończy się błędem zakresu, który podaje maksimum. Zamiast tego zakresy są ograniczone per endpoint — co oznacza, że logika ponawiania nigdy nie musi obsługiwać w połowie odczytanego zbioru wyników.
Limity tempa, kredyty i przydział#
Obowiązują trzy niezależne limity i celowo zawodzą w różny sposób. Każda udana odpowiedź mówi, gdzie stoisz:
| Nagłówek | Znaczenie |
|---|---|
X-RateLimit-Remaining | Żądania pozostałe w bieżącej przesuwnej minucie |
X-Quota-Remaining | Kredyty pozostałe w tym miesiącu |
X-Quota-Resets-At | Znacznik ISO najbliższego miesięcznego resetu |
X-Geocode-Remaining | Żądania geokodowania pozostałe w tym miesiącu. Tylko na endpointach katalogu, bo tylko je ogranicza. |
Kredyty, nie żądania
Zbuforowana prognoza dla miasta to odczyt trwający 3 ms. Dziesięć lat godzinowych stopniodni dla pięciuset lokalizacji już nie. Wycena za żądania pozwoliłaby wywołującemu zmieścić się w przydziale i kosztować więcej, niż płaci, całkowicie legalnie — więc koszt wywołania zależy od tego, ile archiwum przenosi.
| Endpoint | Kredyty |
|---|---|
/v1/forecast, /v1/current oraz warianty miejskie | 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 — odpowiada za dwa okresy |
/v1/climate/daily, /v1/climate/monthly | 2, +1 za każdy pełny okres 365,25 dni w zakresie |
/v1/climate/summary | 3, +1 za każdy pełny okres 365,25 dni w zakresie — około 89 dla całego archiwum |
/v1/degree-days oraz warianty miejskie i komórkowe | 2, +1 za każdy pełny okres 365,25 dni w zakresie |
/v1/degree-days/monthly | 2 |
/v1/historical | (lata + 1) × (zmienne ÷ 2), zaokrąglone w dół, minimum 1 |
Dowolny z powyższych z format=csv | 4× koszt JSON-a |
/v1/geocode, /v1/cities/search, /v1/cities/nearest | 0 — limitowane osobno |
/v1/models, /v1/methods, /v1/coverage, /v1/climate/coverage, /v1/climate/fields, /v1/historical/variables, /v1/attribution, /v1/licensing | 1, i klucz niepotrzebny |
Geokodowanie nie kosztuje kredytów. Każdy produkt tutaj potrzebuje współrzędnej, zanim odpowie, więc rozwiązanie nazwy jest wliczone, a nie sprzedawane. Pole wyszukiwania z podpowiedziami jest przewidzianym zastosowaniem: dodaj debounce i pozwól mu działać.
Jest jednak ograniczone, i to własnym pułapem, a nie twoimi kredytami:
pięć żądań geokodowania na każdy kredyt twojego planu. W planie
z 50 000 kredytów to 250 000 wyszukiwań miesięcznie, a pole z debounce'em wydaje
ich około sześciu na każde znalezione miejsce. Wyczerpanie zwraca
429 geocode_quota_exceeded i zostawia kredyty nietknięte — i to
także dlatego są to dwa osobne kody.
Co robić, gdy trafisz w każdy z nich
| Limit | Odpowiedź | Obsługa |
|---|---|---|
| Tempo (na minutę) | 429 rate_limited + Retry-After | Odczekaj sekundy z Retry-After i ponów. Ten jest przejściowy z założenia. |
| Kredyty (na okres) | 429 quota_exceeded + X-Quota-Resets-At | Ponawianie nie pomoże do czasu resetu. Podnieś plan albo ogranicz funkcję. |
| Pułap geokodowania | 429 geocode_quota_exceeded | Twoje kredyty są nietknięte, a wszystkie inne endpointy działają. Mocniej wytłum zapytania. |
Twój okres rozliczeniowy biegnie od daty subskrypcji do tego samego dnia następnego miesiąca — to okres, który fakturuje Stripe — a licznik za każdym razem zaczyna od pełna. X-Quota-Resets-At niesie tę datę w każdej odpowiedzi, więc odczytuj ją, zamiast zakładać pierwszy dzień miesiąca. Konta bez subskrypcji idą według miesiąca kalendarzowego.
Buforuj agresywnie — nie mamy nic przeciwko, a to darmowy przydział. Przebieg prognozy zmienia się 2 do 4 razy dziennie; suma stopniodni za miniony miesiąc nie zmienia się nigdy. Nic tutaj nie jest związane z konkretnym użytkownikiem, więc zwykły cache HTTP przed nami jest bezpieczny. Zwłaszcza endpointy archiwalne warto trzymać wiecznie poniżej ostatnich pięciu dni.
Błędy#
Każdy błąd ma ten sam kształt, na obu hostach:
{
"error": {
"code": "range_too_long",
"message": "Requested span is 14.0 years; the maximum per request is 10.",
"max_years": 10
}
}
Buduj logikę ponawiania na error.code, a nie na statusie
HTTP. Trzy różne sytuacje zwracają 429 i wymagają trzech
różnych reakcji: jedna chce krótkiego snu, druga zmiany planu, a trzecia w ogóle
nie powinna zatrzymywać twojej aplikacji. Sam status ich nie odróżni. Dodatkowe
klucze — powyżej max_years — niosą limit, który przekroczyłeś, żeby
twój klient mógł się dostosować, a nie zgadywać.
| Status | Kod | Co zrobić |
|---|---|---|
| 400 | invalid_latitude, invalid_longitude | Popraw współrzędne. Szerokość to −90…90, długość −180…180. |
| 400 | range_too_long | Podziel na kilka żądań. max_years podaje limit. |
| 400 | bad_request | Postać ogólna, gdy kontrola nie ma własnego, bardziej szczegółowego kodu. Traktuj jako trwały — żądanie nie stanie się poprawne przez ponowienie. |
| 400 | invalid_coordinates | Para jest poza zakresem albo nie jest punktem na Ziemi. |
| 400 | invalid_method, invalid_base | Zobacz metody obliczeń. |
| 400 | invalid_breakdown | Nie jest to daily, weekly, monthly ani yearly. |
| 400 | invalid_date | Data niezgodna z ISO YYYY-MM-DD. |
| 400 | invalid_range | end wypada przed start. |
| 400 | invalid_near | near nie jest w postaci lat,lon. |
| 400 | unknown_field, unknown_variable | Zapytaj /v1/fields, /v1/climate/fields albo /v1/historical/variables, co dany produkt zawiera — żaden z tych trzech nie wymaga klucza. W /v1/forecast komunikat podaje najbliższe dopasowanie do tego, o co poprosiłeś. |
| 400 | unknown_period | To nie jest okres referencyjny WMO. Zobacz normy. |
| 400 | period_not_covered | Archiwum nie obejmuje tego okresu referencyjnego w tym punkcie. |
| 401 | missing_api_key | Brakowało nagłówka X-API-Key. |
| 401 | invalid_api_key | Klucz jest nieznany albo został zrotowany. |
| 401 | unauthorized | Postać ogólna, gdy nic bardziej szczegółowego nie pasuje. |
| 402 | export_not_in_plan | Eksport CSV to funkcja planów płatnych. |
| 403 | scope_denied | Twój plan nie obejmuje tego API. Zobacz scope'y. |
| 403 | key_inactive | Klucz istnieje, ale został unieważniony lub wyłączony. Rotacja klucza robi to staremu — sprawdź konsolę, zanim uznasz, że to awaria. |
| 404 | city_not_found | Odpowiedź zawiera tablicę suggestions — pokaż ją. |
| 404 | cell_not_found | Przypięta komórka, która już nie istnieje. Zobacz przypinanie komórki. |
| 404 | not_at_sea | Żądanie morskie nad lądem. Model falowania nie ma tam wartości. |
| 404 | not_found | Postać ogólna. Jak wyżej: trwała. |
| 404 | no_city_nearby | Nic skatalogowanego w promieniu max_km od tego punktu. |
| 404 | outside_archive | Daty wykraczają poza to, co zawiera archiwum. /v1/climate/coverage mówi, co ono zawiera, i nie wymaga klucza. |
| 429 | rate_limited | Odczekaj sekundy z Retry-After. |
| 429 | quota_exceeded | Poczekaj na reset albo podnieś plan. Wcześniejsze ponowienie nie może się udać. |
| 429 | geocode_quota_exceeded | Tylko pułap geokodowania. Twoje kredyty są nietknięte; dodaj debounce w polu wyszukiwania. |
| 503 | data_unavailable | Przejściowe. Ponów z wykładniczym wycofaniem. |
| 503 | load_shed | Celowa odmowa, żeby chronić usługę pod obciążeniem. O tym, kogo odrzuca się pierwszego, decyduje krytyczność twojego planu. Ponów z wycofaniem; mija w sekundach. |
| 503 | catalogue_unavailable | Katalog miast jest przez chwilę nieosiągalny. Współrzędne nadal działają — sięgnij po nie, zamiast przerywać żądanie. |
To cała lista i przy każdym budowaniu jest zestawiana ze źródłem: kod opublikowany tutaj, którego żaden handler nie zgłasza, wywraca testy — tak samo jak handler zgłaszający kod, którego nie ma w tej tabeli. Jeśli natrafisz na kod spoza powyższej listy, to błąd tej strony, a nie wartość, którą należy obsłużyć osobno.
Polityka ponawiania, która działa
RETRY = {"rate_limited", "data_unavailable"}
def should_retry(status, code, attempt):
if code == "quota_exceeded":
return False # nic się nie zmieni do resetu
if code == "geocode_quota_exceeded":
return False # i nie przerywaj: kredyty nadal działają
if code in RETRY:
return attempt < 5
return status >= 500
Dokładność — czego się spodziewać#
Wolimy właściwie ustawić oczekiwania, niż pozwolić ci odkryć ograniczenia na produkcji.
Gdzie prognoza jest mocna
Temperatura, ciśnienie, wiatr synoptyczny, wilgotność, usłonecznienie. Typowy błąd temperatury na 2 m po 24 godzinach to około 1–1,5 °C. ECMWF jest najlepszym globalnym modelem deterministycznym na świecie i to właśnie dostajesz.
Gdzie jest słabsza
Burze konwekcyjne — komórka 28 km nie rozdzieli burzy, a nawet 3 km ledwie ją zasugeruje. Dokładne miejsce i czas przelotnych opadów. Mikroklimat wybrzeży i gór poniżej rozdzielczości modelu. Bryzy morskie i zastoiska zimnego powietrza w dolinach, których korekta terenu nie modeluje.
Uczciwość geograficzna
We Francji, Niemczech, USA i Kanadzie serwujemy modele krajowe o rozdzielczości 1,3–3 km i mała wieś naprawdę dostaje własną komórkę siatki. W pozostałej części Europy dostajesz 6,5 km. W Afryce, na Bliskim Wschodzie i w większości Azji najlepszy dostępny model publiczny ma 13–28 km, więc dostajesz pogodę okolicy, a nie ulicy. Korekta terenu zawęża tę lukę, ale jej nie zamyka.
Stopniodni
Reanaliza siatkowa pokrywa wszystko, także miejsca bez stacji meteorologicznej w promieniu 60 km — to jej przewaga nad dostawcami opartymi na stacjach. Jej słabością są centra miast, które reanaliza zaniża; endpointy miejskie stosują skalibrowaną korektę, endpointy współrzędnych nie.
Dwa pola są szacunkami i wolimy to powiedzieć
uv_index wywodzi się z wysokości Słońca i promieniowania
szerokopasmowego, a nie z kolumny ozonu — z dokładnością mniej więcej ±1
jednostki. precipitation_probability_proxy to oszacowanie, a nie
prawdopodobieństwo; prawdziwe jest pod
/v1/probability. Oba są w całości wyjaśnione w
dokumentacji pól.
Plany#
| Plan | Cena | Kredyty / miesiąc | Tempo | Klucze | Scope'y |
|---|---|---|---|---|---|
| Darmowy | 0 € | 10 000 | 20 / min | 1 | pogoda, plus stopniodni i klimat przez 30 dni |
| Starter | 19 € / miesiąc | 50 000 | 60 / min | 3 | pogoda + stopniodni + klimat |
| Pro | 79 € / miesiąc | 400 000 | 300 / min | 10 | pogoda + stopniodni + klimat + normy |
| Business | od 299 € / miesiąc | Ustalane w umowie | Ustalane w umowie | 50 | pogoda + stopniodni + klimat + normy |
Geokodowanie stoi poza tą tabelą: nie kosztuje kredytów w żadnym planie i ma własny pułap pięciu żądań na kredyt. Zobacz limity tempa i przydział.
Rozliczenie roczne to dwa miesiące gratis. Aktualny cennik jest na developers.climatememory.com/pricing — ta strona czyta wprost system rozliczeniowy, więc jeśli obie kiedykolwiek się nie zgodzą, wygrywa ona.
W żadnym planie nie ma endpointu masowego eksportu. Eksport CSV istnieje w archiwach stopniodni i klimatu, jest ograniczony do tego samego zakresu co równoważne wywołanie JSON i zwraca wyłącznie wiersze zagregowane — nigdy szeregu godzinowego.
Atrybucja i licencje#
Dokładnie wymagane brzmienie, czytelne maszynowo. Klucz niepotrzebny.
Tabela licencji stojących za każdym zbiorem danych. Klucz niepotrzebny.
Atrybucja jest warunkiem korzystania, a nie uprzejmością. Dane źródłowe są nam licencjonowane na warunkach, które tego wymagają, a te warunki przechodzą na ciebie. Wyświetl informację wszędzie tam, gdzie dane się pojawiają, także w produktach pochodnych. Wystarczy linijka w stopce:
Weather data: ECMWF, DWD, NOAA, Météo-France · Climate data: Copernicus/ERA5-Land · Places: GeoNames
Oba powyższe endpointy nie wymagają klucza, więc możesz wyrenderować tę
informację z API, zamiast zaszywać w kodzie łańcuch, który zdezaktualizuje się
przy zmianie źródła. Atrybucja konkretnego przebiegu, który odpowiedział,
podróżuje też w każdej odpowiedzi z danymi, w source.attribution i
w nagłówku X-Data-Attribution.
Możesz podać, że korzystasz z tych danych. Nie możesz sugerować, że którakolwiek z tych organizacji stworzyła, zatwierdziła lub popiera twój produkt.
Zastrzeżenie
Prognozy są udostępniane bez gwarancji. Ani Komisja Europejska, ani ECMWF, DWD, NOAA czy Météo-France nie odpowiadają za jakiekolwiek wykorzystanie tych informacji. Nie używaj ich jako jedynej podstawy decyzji, w których zagrożone jest życie, bezpieczeństwo lub mienie.
Jednego ograniczenia nie możemy znieść: licencja Copernicus zastrzega ostrzeżenia powodziowe dla władz krajowych i regionalnych. Zobacz rzeki.