climatememory programiści

Dokumentacja API

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.

ProduktHostOdpowiada naDokumentacja
Pogodahttps://api.climatememory.comCo zrobi pogoda — prognoza, warunki bieżące, ensemble, jakość powietrza, stan morza, rzekiAPI Pogoda
Stopniodnihttps://api.climatememory.comIle trzeba było ogrzać lub schłodzić budynek — od 1950 roku, wszędzieAPI Stopniodni
Klimathttps://api.climatememory.comCo jest tu normalne — 87 lat klimatu dobowego, normy WMO, trendyAPI 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.

ScopeOdblokowuje
meteoCałe API Pogoda, razem z dodatkami
djuStopniodni i historię godzinową
climateDobowe archiwum klimatu i jego agregaty
normalsNormy 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#

GEThttps://api.climatememory.com/v1/geocodedowolny klucz0 kredytów

Zamienia nazwę miejsca na współrzędne, wysokość i strefę czasową.

Parametry

ParametrTypDomyślnieOpis
qstringNazwa miejsca, w dowolnym języku. Znaki diakrytyczne opcjonalne. Wymagane.
langISO-639-1enTylko wyświetlanie i kolejność — nigdy to, co jest brane pod uwagę. Nieznany kod cofa się do nazw lokalnych zamiast zgłaszać błąd.
nearlat,lonPozycja wywołującego. Najsilniejsze kryterium rozstrzygające, jakie istnieje.
countryISO-3166-1 alpha-2Ogranicz do jednego kraju.
limitint101–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#

GEThttps://api.climatememory.com/v1/cities/searchdowolny klucz0 kredytów

Starsze wyszukiwanie nazw. Dopasowuje tylko nazwę ASCII i porządkuje według ludności.

GEThttps://api.climatememory.com/v1/cities/nearestdowolny klucz0 kredytów

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łówekZnaczenie
X-RateLimit-RemainingŻądania pozostałe w bieżącej przesuwnej minucie
X-Quota-RemainingKredyty pozostałe w tym miesiącu
X-Quota-Resets-AtZnacznik 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.

EndpointKredyty
/v1/forecast, /v1/current oraz warianty miejskie1
/v1/probability, /v1/air-quality, /v1/marine, /v1/hydrology1
/v1/cells/resolve, /v1/climate/cells/resolve1
/v1/climate/normals3
/v1/climate/normals/compare6 — odpowiada za dwa okresy
/v1/climate/daily, /v1/climate/monthly2, +1 za każdy pełny okres 365,25 dni w zakresie
/v1/climate/summary3, +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órkowe2, +1 za każdy pełny okres 365,25 dni w zakresie
/v1/degree-days/monthly2
/v1/historical(lata + 1) × (zmienne ÷ 2), zaokrąglone w dół, minimum 1
Dowolny z powyższych z format=csv4× koszt JSON-a
/v1/geocode, /v1/cities/search, /v1/cities/nearest0 — limitowane osobno
/v1/models, /v1/methods, /v1/coverage, /v1/climate/coverage, /v1/climate/fields, /v1/historical/variables, /v1/attribution, /v1/licensing1, 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

LimitOdpowiedźObsługa
Tempo (na minutę)429 rate_limited + Retry-AfterOdczekaj sekundy z Retry-After i ponów. Ten jest przejściowy z założenia.
Kredyty (na okres)429 quota_exceeded + X-Quota-Resets-AtPonawianie nie pomoże do czasu resetu. Podnieś plan albo ogranicz funkcję.
Pułap geokodowania429 geocode_quota_exceededTwoje 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ć.

StatusKodCo zrobić
400invalid_latitude, invalid_longitudePopraw współrzędne. Szerokość to −90…90, długość −180…180.
400range_too_longPodziel na kilka żądań. max_years podaje limit.
400bad_requestPostać ogólna, gdy kontrola nie ma własnego, bardziej szczegółowego kodu. Traktuj jako trwały — żądanie nie stanie się poprawne przez ponowienie.
400invalid_coordinatesPara jest poza zakresem albo nie jest punktem na Ziemi.
400invalid_method, invalid_baseZobacz metody obliczeń.
400invalid_breakdownNie jest to daily, weekly, monthly ani yearly.
400invalid_dateData niezgodna z ISO YYYY-MM-DD.
400invalid_rangeend wypada przed start.
400invalid_nearnear nie jest w postaci lat,lon.
400unknown_field, unknown_variableZapytaj /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ś.
400unknown_periodTo nie jest okres referencyjny WMO. Zobacz normy.
400period_not_coveredArchiwum nie obejmuje tego okresu referencyjnego w tym punkcie.
401missing_api_keyBrakowało nagłówka X-API-Key.
401invalid_api_keyKlucz jest nieznany albo został zrotowany.
401unauthorizedPostać ogólna, gdy nic bardziej szczegółowego nie pasuje.
402export_not_in_planEksport CSV to funkcja planów płatnych.
403scope_deniedTwój plan nie obejmuje tego API. Zobacz scope'y.
403key_inactiveKlucz istnieje, ale został unieważniony lub wyłączony. Rotacja klucza robi to staremu — sprawdź konsolę, zanim uznasz, że to awaria.
404city_not_foundOdpowiedź zawiera tablicę suggestions — pokaż ją.
404cell_not_foundPrzypięta komórka, która już nie istnieje. Zobacz przypinanie komórki.
404not_at_seaŻądanie morskie nad lądem. Model falowania nie ma tam wartości.
404not_foundPostać ogólna. Jak wyżej: trwała.
404no_city_nearbyNic skatalogowanego w promieniu max_km od tego punktu.
404outside_archiveDaty wykraczają poza to, co zawiera archiwum. /v1/climate/coverage mówi, co ono zawiera, i nie wymaga klucza.
429rate_limitedOdczekaj sekundy z Retry-After.
429quota_exceededPoczekaj na reset albo podnieś plan. Wcześniejsze ponowienie nie może się udać.
429geocode_quota_exceededTylko pułap geokodowania. Twoje kredyty są nietknięte; dodaj debounce w polu wyszukiwania.
503data_unavailablePrzejściowe. Ponów z wykładniczym wycofaniem.
503load_shedCelowa 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.
503catalogue_unavailableKatalog 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#

PlanCenaKredyty / miesiącTempoKluczeScope'y
Darmowy0 €10 00020 / min1pogoda, plus stopniodni i klimat przez 30 dni
Starter19 € / miesiąc50 00060 / min3pogoda + stopniodni + klimat
Pro79 € / miesiąc400 000300 / min10pogoda + stopniodni + klimat + normy
Businessod 299 € / miesiącUstalane w umowieUstalane w umowie50pogoda + 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#

GEThttps://api.climatememory.com/v1/attributionklucz niepotrzebny0 kredytów

Dokładnie wymagane brzmienie, czytelne maszynowo. Klucz niepotrzebny.

GEThttps://api.climatememory.com/v1/licensingklucz niepotrzebny0 kredytów

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.