Erste Schritte
Drei APIs, ein Schlüssel: Wettervorhersagen vom EZMW und den nationalen hochauflösenden Modellen, Heiz- und Kühlgradtage sowie 87 Jahre Tagesklima. Diese Seite enthält alles, was Sie vor dem ersten Aufruf brauchen. Die Endpunkte selbst stehen auf den drei Referenzseiten.
Worum es geht#
Climate Memory liefert drei Produkte von zwei Hosts, mit einem einzigen API-Schlüssel.
| Produkt | Host | Beantwortet | Referenz |
|---|---|---|---|
| Wetter | https://api.climatememory.com | Was das Wetter tun wird — Vorhersage, aktuelle Lage, Ensembles, Luftqualität, Seegang, Flüsse | Wetter-API |
| Gradtage | https://api.climatememory.com | Wie viel ein Gebäude geheizt oder gekühlt werden musste — ab 1950, überall | Gradtag-API |
| Klima | https://api.climatememory.com | Was hier normal ist — 87 Jahre Tagesklima, WMO-Normalwerte, Trends | Klima-API |
Zwei Hosts statt einem, weil Gradtage ein anderes Archiv mit einem anderen Kostenprofil lesen, und die Trennung erlaubt es dem einen, langsam zu sein, ohne das andere zu bremsen. Sie müssen sich darum nicht kümmern, außer die richtige Basis-URL zu kopieren.
Jeder Endpunkt ist ein GET. In dieser API gibt
es nirgends einen Anfragekörper, keinen Paginierungs-Cursor und keine Sitzung.
Ein Aufruf ist eine URL plus ein Header, Sie können also jeden davon in der
Adresszeile eines Browsers oder mit einem Werkzeug wie curl testen
und jeden davon ohne Sonderbehandlung vor uns zwischenspeichern.
Ihr erster Aufruf#
Drei Schritte. Das Ganze dauert etwa eine Minute.
1. Einen Schlüssel holen
Legen Sie ein Konto auf developers.climatememory.com/signin an.
Der kostenlose Tarif verlangt keine Karte, gibt Ihnen 10 000 Credits im Monat,
und Ihr Schlüssel steht sofort auf dem Bildschirm. Bewahren Sie ihn in einer
Umgebungsvariablen auf — die Beispiele unten lesen alle
$API_KEY.
export API_KEY="wd_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
2. Den Aufruf machen
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. Die Antwort lesen
Jede Reihe kommt spaltenorientiert zurück — parallele
Felder, die einen gemeinsamen time-Index teilen, und keine Liste
von Objekten. Unter Antwortkonventionen steht, warum,
und wie man sie liest.
Als Nächstes: derselbe Aufruf über den Städtenamen ist
meistens besser — https://api.climatememory.com/v1/forecast/city/fr/paris trägt die echte
Höhe und die Zeitzone der Stadt, was eine nackte Koordinate nicht kann. Siehe
Vorhersage nach Stadt.
Authentifizierung#
Senden Sie Ihren Schlüssel bei jeder Anfrage im
X-API-Key-Header. Es gibt keinen OAuth-Ablauf, kein Bearer-Token
zum Erneuern und keine Signatur zu berechnen.
X-API-Key: wd_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Schlüssel werden gehasht gespeichert. Wenn Sie einen verlieren, wird er erneuert, nicht wiederhergestellt — wir können ihn Ihnen nicht noch einmal zeigen, weil wir ihn nicht haben. Die Erneuerung erfolgt in der Konsole und gibt sofort einen neuen Schlüssel aus.
Scopes
Ein Schlüssel trägt Scopes, und der Tarif entscheidet, welche. Ein Endpunkt
außerhalb Ihrer Scopes gibt 403 scope_denied zurück — das ist ein
Tarifproblem, kein Schlüsselproblem, und die Meldung sagt das auch.
| Scope | Schaltet frei |
|---|---|
meteo | Die gesamte Wetter-API, samt Ergänzungen |
dju | Gradtage und die stündliche Historie |
climate | Das Klima-Tagesarchiv und seine Aggregate |
normals | WMO-Normalwerte und deren Vergleich |
Die Geocoding-Endpunkte verlangen keinen davon. Jeder gültige Schlüssel löst einen Ortsnamen auf, in jedem Tarif, denn jedes Produkt hier braucht eine Koordinate, bevor es überhaupt antworten kann. Siehe Geocoding.
Bringen Sie Ihren Schlüssel niemals in einen Browser. Rufen Sie die API von Ihrem Server aus auf und reichen Sie das Ergebnis an den Client weiter. Ein Schlüssel im Frontend-JavaScript ist ein Schlüssel, den jeder im Netzwerk-Tab lesen und gegen Ihr Kontingent ausgeben kann — und weil es Ihr Schlüssel ist, ist die Nutzung von Ihrer nicht zu unterscheiden.
Wenn Sie Wetter in einer mobilen App brauchen, gibt es die mobilen Endpunkte genau dafür: sie geben ein Token je Installation aus, statt Ihren Schlüssel einzubetten.
Geocoding#
Einen Ortsnamen zu Koordinaten, Höhe und Zeitzone auflösen.
Parameter
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
q | string | — | Ortsname, in beliebiger Sprache. Akzente optional. Erforderlich. |
lang | ISO-639-1 | en | Nur Anzeige und Reihenfolge — nie, was infrage kommt. Ein unbekannter Code fällt auf lokale Namen zurück, statt zu scheitern. |
near | lat,lon | — | Die Position des Aufrufers. Das stärkste Entscheidungskriterium überhaupt. |
country | ISO-3166-1 alpha-2 | — | Auf ein Land einschränken. |
limit | int | 10 | 1 bis 50. |
Der Katalog ist die GeoNames-Feature-Klasse P vollständig — jeder bewohnte Ort der Erde, bis hinunter zu Weilern mit ein paar Dutzend Menschen, und kein nach Einwohnerzahl gefilterter Auszug. Ein Dorf mit 528 Einwohnern ist darin.
Es kostet keine Credits, in keinem Tarif, und verlangt keinen Scope. Ein für Gradtage verkaufter Schlüssel löst auch Namen auf, denn Gradtage lassen sich ohne Koordinate nicht anfragen. Stattdessen trägt Geocoding eine eigene Obergrenze — fünf Geocoding-Anfragen je Credit Ihres Tarifs — die bewusst so großzügig ist, dass ein entprelltes Suchfeld mit Vorschlägen die vorgesehene Nutzung ist. Siehe Ratenlimits und Kontingent.
Die Treffersuche ist nie durch die Sprache eingeschränkt
Die Anfrage wird gegen den lokalen Namen, seine ASCII-Transliteration und
jeden lokalisierten Alias geprüft, ganz gleich was lang
sagt. Das zählt mehr, als es klingt: 98 % der Orte haben überhaupt keinen
lokalisierten Namen — Deutsch deckt einen kleinen Bruchteil des Katalogs ab —
sodass eine sprachgefilterte Suche Hauptstädte fände und sonst nichts.
lang wählt, welcher Name zurückkommt, und beeinflusst die
Reihenfolge; es entscheidet nie, was infrage kommt.
GET /v1/geocode?q=ramillies&lang=fr
GET /v1/geocode?q=ramillies&lang=fr&near=50.63,3.06 # von Lille aus
GET /v1/geocode?q=bruxelles&lang=fr # Exonym, über den Alias-Index
GET /v1/geocode?q=zuesch&lang=de # Umlaut ausgeschrieben
Wie Treffer sortiert werden
Jeder Treffer trägt einen score und, wenn near
angegeben war, eine distance_km. Die Reihenfolge verbindet vier
Signale: wie gut der Name passte, wie bedeutend der Ort ist, wie nah er an
near liegt, und ob der gefundene Name in der angefragten Sprache
stand.
Warum es near gibt. Es gibt zwei Ramillies —
5 749 Einwohner in Wallonisch-Brabant, 528 in Hauts-de-France, 126 km
auseinander. Keines ist abstrakt die richtige Antwort. Ohne near
kommt das größere zurück; von Lille aus das französische.
Bedeutung ist nicht nur Einwohnerzahl. Für 90,7 % des Katalogs ist keine Einwohnerzahl hinterlegt — für manche Länder veröffentlicht GeoNames überhaupt keine — sodass überall dort, wo die Einwohnerzahl fehlt, die Ortsart (Landeshauptstadt, Sitz einer Verwaltungseinheit, gewöhnlicher Ort, Stadtteil) die Reihenfolge trägt.
Umlaute werden ausgeschrieben, nicht weggelassen. Eine
deutsche oder dänische Tastatur ohne Diakritika schreibt Zuesch für
Züsch und Koeln für Köln. GeoNames führt
diese Schreibweise nicht — seine ASCII-Form ist Zusch, mit
entferntem statt aufgelöstem Umlaut — sie wird deshalb hier erzeugt. Beide
Schreibweisen erreichen den Ort, und das Ergebnis zeigt in beiden Fällen den
echten Namen.
Städtesuche#
Ältere Namenssuche. Prüft nur den ASCII-Namen, sortiert nach Einwohnerzahl.
Die nächstgelegene katalogisierte Stadt zu einer Koordinate.
/v1/cities/search ist älter als /v1/geocode und
behält seinen Vertrag für die Aufrufer, die bereits darauf aufbauen: es prüft
nur den ASCII-Namen und sortiert nach Einwohnerzahl.
Ziehen Sie /v1/geocode für alles
vor, was Nutzer zu sehen bekommen. Die ältere Route kann kein Exonym
erkennen — Bruxelles findet Brussel nicht — und ihre
Sortierung ist für die neun von zehn Orten ohne hinterlegte Einwohnerzahl nicht
definiert.
/v1/cities/nearest ist die Gegenrichtung und macht aus einer
GPS-Position einen Städte-Slug, den Sie dann an die Stadt-Endpunkte übergeben
können. Es nimmt lat, lon und ein optionales
max_km.
Beide zählen gegen dieselbe Geocoding-Obergrenze wie
/v1/geocode, und keines kostet Credits.
Antwortkonventionen#
Sechs Regeln gelten für jeden Endpunkt. Lernen Sie sie einmal, und der Rest dieser Dokumentation besteht nur noch aus Feldnamen.
1. Reihen sind Spalten, keine Zeilen
Jede Zeitreihe ist ein Satz paralleler Felder, die einen gemeinsamen
time-Index teilen, und kein Feld von Objekten:
"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]
}
Der Index i jedes Feldes beschreibt denselben Zeitpunkt. Das ist
auf der Leitung drei- bis fünfmal kleiner als die Zeilenform, es dekodiert ohne
Umformung direkt in einen Dataframe oder eine Plot-Bibliothek, und es ist das,
was Clients im Open-Meteo-Zuschnitt ohnehin erwarten. Um es zeilenweise zu
durchlaufen:
rows = zip(h["time"], h["temperature_2m"], h["precipitation"])
2. Zeiten sind ISO 8601 mit explizitem Versatz
Immer. 2026-08-01T00:00:00+00:00, nie eine nackte lokale
Zeichenkette und nie eine Unix-Ganzzahl. Wo Sie eine timezone
übergeben, ist der Versatz in der Antwort der dieser Zone — die Zeichenkette
allein ist damit eindeutig, und Sie müssen nie wissen, was wir angenommen
haben.
3. Einheiten sind SI, fest und nicht verhandelbar
°C, mm, m/s, hPa, W/m², Meter. Es gibt absichtlich keinen Parameter
units=imperial: ein Einheitenschalter ist ein Feld, dessen
Bedeutung von einem anderen Feld abhängt, und so landet ein Aufrufer nach einer
ungeprüften Konfigurationsänderung dabei, Fahrenheit auf einer Celsius-Achse
darzustellen. Rechnen Sie an Ihrem Rand um, dort wo der Leser ist.
Endpunkte mit ungewöhnlichen Einheiten liefern in der Antwort einen
units-Block mit, der sie ausdrücklich benennt, statt zu erwarten,
dass Sie sich erinnern.
4. null heißt „unbekannt“, nie „null“
Eine fehlende Stunde ist null im Feld und behält ihren Platz,
damit die Indizes ausgerichtet bleiben. Sie wird nie stillschweigend mit 0
gefüllt — beim Niederschlag sind das zwei gegenteilige Aussagen, und eine davon
ist eine Lüge über eine Dürre.
5. Jede Antwort sagt, woher sie kommt
Ein source-Block (Wetter) oder ein quality-Block
(Archive) reist mit den Daten mit: welches Modell oder welcher Lauf geantwortet
hat, wie alt er ist, wie vollständig der Zeitraum war. Sie müssen die Frische
nie aus der Uhr erschließen.
6. Veraltet schlägt fehlend
Wenn unser jüngster Modelllauf älter als erwartet ist, antworten wir
trotzdem — mit "stale": true und data_age_hours im
source-Block — statt 503 zurückzugeben. Eine acht Stunden alte
Vorhersage ist nützlicher als ein Fehler. Prüfen Sie das Flag, wenn Frische für
Sie tragend ist; ignorieren Sie es sonst.
Es gibt nirgends Paginierung. Eine Anfrage gibt ihre ganze Antwort zurück oder scheitert mit einem Bereichsfehler, der Ihnen das Maximum nennt. Stattdessen sind die Spannen je Endpunkt begrenzt — was bedeutet, dass eine Wiederholungslogik nie eine halb gelesene Ergebnismenge behandeln muss.
Ratenlimits, Credits und Kontingent#
Drei voneinander unabhängige Grenzen gelten, und sie scheitern absichtlich unterschiedlich. Jede erfolgreiche Antwort meldet, wo Sie stehen:
| Header | Bedeutung |
|---|---|
X-RateLimit-Remaining | Verbleibende Anfragen in der laufenden gleitenden Minute |
X-Quota-Remaining | Verbleibende Credits in diesem Monat |
X-Quota-Resets-At | ISO-Zeitstempel der nächsten monatlichen Zurücksetzung |
X-Geocode-Remaining | Verbleibende Geocoding-Anfragen in diesem Monat. Nur auf den Katalog-Endpunkten, den einzigen, die es begrenzt. |
Credits, keine Anfragen
Eine zwischengespeicherte Stadtvorhersage ist ein Lesevorgang von 3 ms. Zehn Jahre stündlicher Gradtage über fünfhundert Standorte nicht. Nach Anfragen zu bepreisen ließe einen Aufrufer innerhalb seines Kontingents bleiben und dabei völlig legitim mehr kosten, als er zahlt — was ein Aufruf kostet, hängt deshalb davon ab, wie viel Archiv er bewegt.
| Endpunkt | Credits |
|---|---|
/v1/forecast, /v1/current und die Stadt-Varianten | 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 — es beantwortet zwei Zeiträume |
/v1/climate/daily, /v1/climate/monthly | 2, +1 je vollständigem Zeitraum von 365,25 Tagen in der Spanne |
/v1/climate/summary | 3, +1 je vollständigem Zeitraum von 365,25 Tagen in der Spanne — etwa 89 über das gesamte Archiv |
/v1/degree-days sowie die Stadt- und Zellen-Varianten | 2, +1 je vollständigem Zeitraum von 365,25 Tagen in der Spanne |
/v1/degree-days/monthly | 2 |
/v1/historical | (Jahre + 1) × (Variablen ÷ 2), abgerundet, mindestens 1 |
Jedes der obigen mit format=csv | 4× die JSON-Kosten |
/v1/geocode, /v1/cities/search, /v1/cities/nearest | 0 — separat begrenzt |
/v1/models, /v1/methods, /v1/coverage, /v1/climate/coverage, /v1/climate/fields, /v1/historical/variables, /v1/attribution, /v1/licensing | 1, und kein Schlüssel nötig |
Geocoding kostet keine Credits. Jedes Produkt hier braucht eine Koordinate, bevor es antworten kann; einen Namen aufzulösen ist deshalb enthalten und wird nicht verkauft. Ein Suchfeld mit Vorschlägen ist die vorgesehene Nutzung: entprellen Sie es und lassen Sie es laufen.
Begrenzt ist es dennoch, und zwar durch eine eigene Obergrenze statt durch
Ihre Credits: fünf Geocoding-Anfragen je Credit Ihres Tarifs.
Im Tarif mit 50 000 Credits sind das 250 000 Suchen im Monat, und ein
entprelltes Suchfeld verbraucht etwa sechs davon je gefundenem Ort. Ist sie
erschöpft, kommt 429 geocode_quota_exceeded, und Ihre Credits
bleiben unangetastet — auch deshalb sind es zwei getrennte Codes.
Was zu tun ist, wenn Sie an eine stoßen
| Grenze | Antwort | Behandlung |
|---|---|---|
| Rate (je Minute) | 429 rate_limited + Retry-After | Warten Sie Retry-After Sekunden und wiederholen Sie. Diese ist konstruktionsbedingt vorübergehend. |
| Credits (je Zeitraum) | 429 quota_exceeded + X-Quota-Resets-At | Wiederholen hilft bis zur Zurücksetzung nicht. Wechseln Sie den Tarif oder schränken Sie Ihre Funktion ein. |
| Geocoding-Obergrenze | 429 geocode_quota_exceeded | Ihre Credits sind unversehrt und alle anderen Endpunkte laufen weiter. Entprellen Sie stärker. |
Ihr Kontingentzeitraum läuft von Ihrem Abodatum bis zum gleichen Tag des
Folgemonats — dem Zeitraum, den Stripe abrechnet — und der Zähler beginnt jedes
Mal wieder von vorn. X-Quota-Resets-At trägt dieses Datum in jeder
Antwort: lesen Sie es, statt den Monatsersten anzunehmen. Konten ohne Abo folgen
dem Kalendermonat.
Cachen Sie beherzt — es stört uns nicht, und es ist kostenloses Kontingent. Ein Vorhersagelauf ändert sich 2- bis 4-mal am Tag; eine Gradtagsumme für einen vergangenen Monat ändert sich nie. Nichts hier ist nutzerspezifisch, ein gewöhnlicher HTTP-Cache vor uns ist also unbedenklich. Besonders die Archiv-Endpunkte lohnen es, unterhalb der letzten fünf Tage für immer zwischengespeichert zu werden.
Fehler#
Jeder Fehler hat dieselbe Form, auf beiden Hosts:
{
"error": {
"code": "range_too_long",
"message": "Requested span is 14.0 years; the maximum per request is 10.",
"max_years": 10
}
}
Bauen Sie Ihre Wiederholungslogik auf error.code auf,
nicht auf dem HTTP-Status. Drei verschiedene Zustände geben
429 zurück und verlangen drei verschiedene Reaktionen: einer will
eine kurze Wartezeit, einer einen Tarifwechsel, und einer sollte Ihre Anwendung
überhaupt nicht anhalten. Der Status allein kann sie nicht unterscheiden.
Zusätzliche Schlüssel — max_years oben — tragen die überschrittene
Grenze, sodass Ihr Client sich anpassen kann, statt zu raten.
| Status | Code | Was zu tun ist |
|---|---|---|
| 400 | invalid_latitude, invalid_longitude | Koordinaten korrigieren. Breite ist −90…90, Länge −180…180. |
| 400 | range_too_long | Auf mehrere Anfragen aufteilen. max_years nennt die Grenze. |
| 400 | bad_request | Die allgemeine Form, wenn eine Prüfung keinen eigenen genaueren Code hat. Behandeln Sie ihn als dauerhaft — die Anfrage wird durch Wiederholen nicht gültig. |
| 400 | invalid_coordinates | Das Paar liegt außerhalb des Bereichs oder ist kein Punkt auf der Erde. |
| 400 | invalid_method, invalid_base | Siehe Berechnungsmethoden. |
| 400 | invalid_breakdown | Weder daily noch weekly, monthly oder yearly. |
| 400 | invalid_date | Ein Datum, das nicht ISO YYYY-MM-DD ist. |
| 400 | invalid_range | end liegt vor start. |
| 400 | invalid_near | near hat nicht die Form lat,lon. |
| 400 | unknown_field, unknown_variable | Fragen Sie /v1/fields, /v1/climate/fields oder /v1/historical/variables, was dieses Produkt enthält — keiner der drei braucht einen Schlüssel. Bei /v1/forecast nennt die Meldung die nächstliegende Entsprechung. |
| 400 | unknown_period | Kein WMO-Referenzzeitraum. Siehe Normalwerte. |
| 400 | period_not_covered | Das Archiv deckt diesen Referenzzeitraum an dieser Stelle nicht ab. |
| 401 | missing_api_key | Der X-API-Key-Header fehlte. |
| 401 | invalid_api_key | Der Schlüssel ist unbekannt oder erneuert worden. |
| 401 | unauthorized | Die allgemeine Form, wenn nichts Genaueres zutrifft. |
| 402 | export_not_in_plan | CSV-Export ist den bezahlten Tarifen vorbehalten. |
| 403 | scope_denied | Ihr Tarif enthält diese API nicht. Siehe Scopes. |
| 403 | key_inactive | Der Schlüssel existiert, wurde aber widerrufen oder deaktiviert. Das Erneuern eines Schlüssels bewirkt genau das beim alten — prüfen Sie die Konsole, bevor Sie eine Störung annehmen. |
| 404 | city_not_found | Die Antwort enthält ein suggestions-Array — zeigen Sie es an. |
| 404 | cell_not_found | Eine fixierte Zelle, die es nicht mehr gibt. Siehe eine Zelle fixieren. |
| 404 | not_at_sea | Eine Seegang-Anfrage über Land. Das Wellenmodell hat dort keinen Wert. |
| 404 | not_found | Die allgemeine Form. Wie oben: dauerhaft. |
| 404 | no_city_nearby | Nichts Katalogisiertes innerhalb von max_km um diesen Punkt. |
| 404 | outside_archive | Die Daten liegen außerhalb dessen, was das Archiv enthält. /v1/climate/coverage sagt, was es enthält, und braucht keinen Schlüssel. |
| 429 | rate_limited | Warten Sie Retry-After Sekunden. |
| 429 | quota_exceeded | Warten Sie auf die Zurücksetzung oder wechseln Sie den Tarif. Früheres Wiederholen kann nicht gelingen. |
| 429 | geocode_quota_exceeded | Nur die Geocoding-Obergrenze. Ihre Credits sind unversehrt; entprellen Sie Ihr Suchfeld. |
| 503 | data_unavailable | Vorübergehend. Mit exponentiellem Rückzug wiederholen. |
| 503 | load_shed | Bewusst abgelehnt, um den Dienst unter Last zu schützen. Die Kritikalität Ihres Tarifs entscheidet, wer zuerst abgeworfen wird. Mit Rückzug wiederholen; es löst sich in Sekunden. |
| 503 | catalogue_unavailable | Der Städtekatalog ist kurz nicht erreichbar. Koordinaten funktionieren weiterhin — weichen Sie darauf aus, statt die Anfrage scheitern zu lassen. |
Das ist die vollständige Liste, und sie wird bei jedem Build gegen den Quelltext geprüft: ein hier veröffentlichter Code, den kein Handler auslöst, lässt die Testsuite scheitern, und ein Handler, der einen auslöst, den diese Tabelle nicht führt, ebenso. Wenn Ihnen ein Code begegnet, der oben fehlt, ist das ein Fehler dieser Seite und kein Wert, den Sie gesondert behandeln sollten.
Eine Wiederholungsstrategie, die funktioniert
RETRY = {"rate_limited", "data_unavailable"}
def should_retry(status, code, attempt):
if code == "quota_exceeded":
return False # bis zur Zurücksetzung ändert sich nichts
if code == "geocode_quota_exceeded":
return False # und nicht anhalten: Credits gehen weiter
if code in RETRY:
return attempt < 5
return status >= 500
Genauigkeit — was zu erwarten ist#
Wir setzen die Erwartungen lieber richtig, als dass Sie die Grenzen im Produktivbetrieb entdecken.
Wo die Vorhersage stark ist
Temperatur, Druck, synoptischer Wind, Luftfeuchte, Sonnenschein. Der typische Fehler der 2-m-Temperatur nach 24 Stunden liegt bei etwa 1 bis 1,5 °C. Das EZMW ist das weltweit beste globale deterministische Modell, und genau das bekommen Sie.
Wo sie schwächer ist
Konvektive Gewitter — eine 28-km-Zelle kann kein Gewitter auflösen, und selbst 3 km deuten es nur an. Genaue Lage und Zeit von Schauern. Küsten- und Bergmikroklima unterhalb der Modellauflösung. Seewind und Kaltluftseen in Tälern, die die Geländekorrektur nicht abbildet.
Geografische Ehrlichkeit
In Frankreich, Deutschland, den USA und Kanada liefern wir nationale Modelle mit 1,3 bis 3 km aus, und ein kleines Dorf bekommt tatsächlich seine eigene Gitterzelle. Sonst in Europa bekommen Sie 6,5 km. In Afrika, im Nahen Osten und im größten Teil Asiens ist das beste verfügbare öffentliche Modell 13 bis 28 km grob: Sie bekommen dort also das Wetter der Gegend statt das der Straße. Die Geländekorrektur verkleinert diese Lücke, schließt sie aber nicht.
Gradtage
Eine Gitter-Reanalyse deckt alles ab, auch Orte ohne Wetterstation im Umkreis von 60 km — das ist ihr Vorteil gegenüber stationsbasierten Anbietern. Ihre Schwäche sind Innenstädte, die die Reanalyse zu niedrig liest; die Stadt-Endpunkte wenden eine kalibrierte Korrektur an, die Koordinaten-Endpunkte nicht.
Zwei Felder sind Schätzungen, und wir sagen das lieber
uv_index wird aus Sonnenhöhe und Breitbandstrahlung abgeleitet,
nicht aus einer Ozonsäule — genau auf etwa ±1 Einheit.
precipitation_probability_proxy ist eine Schätzung, keine
Wahrscheinlichkeit; die echte steht unter
/v1/probability. Beide sind in der
Feldreferenz vollständig erklärt.
Tarife#
| Tarif | Preis | Credits / Monat | Rate | Schlüssel | Scopes |
|---|---|---|---|---|---|
| Kostenlos | 0 € | 10 000 | 20 / Min. | 1 | Wetter, dazu Gradtage und Klima für 30 Tage |
| Starter | 19 € / Monat | 50 000 | 60 / Min. | 3 | Wetter + Gradtage + Klima |
| Pro | 79 € / Monat | 400 000 | 300 / Min. | 10 | Wetter + Gradtage + Klima + Normalwerte |
| Business | ab 299 € / Monat | Vertraglich vereinbart | Vertraglich vereinbart | 50 | Wetter + Gradtage + Klima + Normalwerte |
Geocoding steht außerhalb dieser Tabelle: es kostet in keinem Tarif Credits und trägt seine eigene Obergrenze von fünf Anfragen je Credit. Siehe Ratenlimits und Kontingent.
Bei jährlicher Zahlung sind zwei Monate frei. Der aktuelle Katalog steht auf developers.climatememory.com/pricing — diese Seite liest das Abrechnungssystem direkt, wenn beide je voneinander abweichen, gilt sie.
Es gibt in keinem Tarif einen Endpunkt für Massenexporte. Den CSV-Export gibt es für die Gradtag- und Klimaarchive, er ist auf dieselbe Spanne wie der entsprechende JSON-Aufruf begrenzt und gibt nur aggregierte Zeilen zurück — niemals die Stundenreihe.
Namensnennung und Lizenzen#
Der exakt erforderliche Wortlaut, maschinenlesbar. Kein Schlüssel nötig.
Die Lizenztabelle hinter jedem Datensatz. Kein Schlüssel nötig.
Die Namensnennung ist eine Nutzungsbedingung, keine Höflichkeit. Die zugrunde liegenden Daten sind uns unter Bedingungen lizenziert, die sie verlangen, und diese Bedingungen gehen auf Sie über. Zeigen Sie einen Hinweis überall dort, wo die Daten erscheinen, auch in abgeleiteten Produkten. Eine Fußzeile genügt:
Weather data: ECMWF, DWD, NOAA, Météo-France · Climate data: Copernicus/ERA5-Land · Places: GeoNames
Beide oben genannten Endpunkte brauchen keinen Schlüssel, Sie können den
Hinweis also aus der API rendern, statt eine Zeichenkette fest einzuschreiben,
die veraltet, sobald sich eine Quelle ändert. Die Namensnennung des konkreten
Laufs, der geantwortet hat, reist außerdem in jeder Datenantwort mit, in
source.attribution und im Header
X-Data-Attribution.
Sie dürfen angeben, dass Sie diese Daten verwenden. Sie dürfen nicht den Eindruck erwecken, eine dieser Organisationen habe Ihr Produkt erstellt, geprüft oder empfohlen.
Haftungsausschluss
Vorhersagen werden ohne Gewähr bereitgestellt. Weder die Europäische Kommission noch EZMW, DWD, NOAA oder Météo-France haften für eine Verwendung dieser Informationen. Nutzen Sie sie nicht als alleinige Grundlage für Entscheidungen, bei denen Leben, Sicherheit oder Sachwerte auf dem Spiel stehen.
Eine Einschränkung steht uns nicht zu aufzuheben: die Copernicus-Lizenz behält Hochwasserwarnungen den nationalen und regionalen Behörden vor. Siehe Flüsse.