climatememory entwickler

API-Referenz

Gradtag-API

Heiz- und Kühlgradtage aus der stündlichen ERA5-Land-Reanalyse, zurück bis 1950, überall an Land — auch dort, wo im Umkreis von 60 km keine Wetterstation steht. Ein Scope — dju — deckt diese ganze Seite ab.

Gradtage#

GEThttps://api.climatememory.com/v1/degree-daysScope: dju2 Credits, +1 je vollständigem Zeitraum von 365,25 Tagen in der Spanne

Heiz- und Kühlgradtage für eine Koordinate.

Parameter

ParameterTypStandardBeschreibung
latfloatErforderlich.
lonfloatErforderlich.
basenumber | preset | csv18Jede Basistemperatur in °C oder eine Voreinstellung: uk (15,5), ashrae (18,333), iso, france, eurostat. Bis zu 60, durch Kommas getrennt, ohne Aufpreis — siehe unten.
methodstringhourlyhourly, costic, mean oder eurostat. Das entscheidet Ihr Vertrag, nicht wir.
startISO date1. Januar des EndjahresHöchstens 10 Jahre je Anfrage.
endISO dateheute
typestringbothHDD, CDD oder both.
breakdownstringmonthlydaily, weekly, monthly oder yearly.
elevationfloat (m)Tatsächliche Geländehöhe Ihres Standorts. Verschiebt die Reihe von der Höhe der Zelle auf Ihre — siehe unten.
formatstringjsonjson oder csv. CSV ist den bezahlten Tarifen vorbehalten.
{
  "location": {
    "latitude": 36.75, "longitude": 3.06,
    "grid_cell": { "latitude": 36.7, "longitude": 3.1,
                   "distance_km": 6.61, "resolution_km": 9 }
  },
  "parameters": {
    "base_temperature_c": 18.0, "method": "hourly",
    "start": "2025-07-01", "end": "2026-06-30"
  },
  "totals": { "hdd": 781.86, "cdd": 1331.61 },
  "quality": {
    "days": 365, "coverage": 1.0,
    "missing_hours": 0, "provisional_days": 0
  },
  "breakdown": [ { "year": 2025, "month": 7, "hdd": 0.0, "cdd": 289.4, "days": 31 } ]
}

Der quality-Block ist keine Zierde. Ein coverage unter 1.0 heißt, dass im Archiv Stunden fehlten. provisional_days zählt Tage, die aus der Vorhersage statt aus der endgültigen Reanalyse gefüllt wurden, denn ERA5-Land veröffentlicht mit etwa fünf Tagen Verzögerung.

Wenn Sie einen Vertrag nach diesen Zahlen abrechnen, prüfen Sie beide. Eine über eine Abdeckung von 0,98 berechnete Summe ist nicht falsch, aber sie ist nicht dieselbe Aussage wie eine über 1,0 — und der Unterschied ist in totals unsichtbar.

Was ein Gradtag ist, in einem Absatz

Ein Heizgradtag misst, wie weit unter einer Basistemperatur die Außenluft lag und wie lange. Bei Basis 18 °C trägt eine Stunde bei 16 °C (18 − 16) / 24 = 0.083 Heizgradtage bei. Summieren Sie die Stunden, und Sie haben eine Zahl, die zur Energie proportional ist, die ein Gebäude brauchte. Kühlgradtage sind das Spiegelbild: wie weit über der Basis. Es ist die übliche Art, eine Heizperiode mit einer anderen zu vergleichen, nachdem das Wetter aus dem Vergleich herausgerechnet wurde.

Viele Basiswerte, eine Anfrage, ein Preis#

GEThttps://api.climatememory.com/v1/degree-days?base=15,15.5,18,18.5,20Scope: djusame as one base

Bis zu 60 Basistemperaturen in einem Aufruf, zum Preis von einer.

Die Stundenreihe zu lesen und zu dekodieren macht die gesamten Kosten einer Gradtag-Antwort aus. Sobald dieses Feld im Speicher liegt, ist ein weiterer Basiswert nur noch eine Subtraktion darüber: sechzig anzufragen kostet also so viel wie einen.

Die Antwort erhält ein by_base-Feld, das jeden Basiswert in der von Ihnen genannten Reihenfolge trägt. totals und breakdown beschreiben weiterhin den ersten, sodass Code, der vor dieser Möglichkeit geschrieben wurde, unverändert funktioniert.

"by_base": [
  {"base": 15.0,  "hdd": 402.11, "cdd": 1731.4},
  {"base": 15.5,  "hdd": 431.02, "cdd": 1706.3},
  {"base": 18.0,  "hdd": 781.86, "cdd": 1331.6}
]

Nützlich, wenn Sie noch nicht wissen, welcher Basiswert die Zahlen eines Vertrags reproduziert, oder wenn dasselbe Gebäude von verschiedenen Parteien mit verschiedenen Basiswerten abgerechnet wird — ein Vermieter mit 15,5 und ein Energieversorger mit 18 haben beide recht, und dies liefert beides in einem Aufruf.

Berechnungsmethoden#

GEThttps://api.climatememory.com/v1/degree-days/compare-methodsScope: dju2 Credits, +1 je vollständigem Zeitraum von 365,25 Tagen in der Spanne

Alle vier Methoden über denselben Zeitraum, nebeneinander.

GEThttps://api.climatememory.com/v1/methodskein Schlüssel nötig0 Credits

Die Methodendefinitionen und ihre Voreinstellungen. Kein Schlüssel nötig.

Die Methode ist ein Parameter, weil Ihr Vertrag sie bestimmt, nicht wir. Dieselben Daten, derselbe Basiswert, dasselbe Jahr, in Algier:

MethodeHDD 18 °CCDD 18 °CWann sie zu verwenden ist
hourly781.91331.6Standard. Integriert das stündliche Defizit — physikalisch am treuesten.
costic741.71349.5Französische DJU unifiés. Für französische Energieleistungsverträge vorgeschrieben.
mean659.91267.8Tagesmittel gegen die Basis. Die international verbreitetste Konvention.
eurostat587.7656.6Europäische Statistik. Die Schwellen sind durch die Definition festgelegt und ignorieren base.

Stündlich und Tagesmittel unterscheiden sich bei denselben Daten um 18 %. Das ist kein Rundungsunterschied — das ist der Unterschied zwischen gewonnenem und verlorenem Streit über eine Energierechnung. Wählen Sie die Methode, die die Zahlen Ihres Vertrags reproduziert, bevor Sie sich auf einen Tarif festlegen; dafür ist compare-methods da, und es kostet eine Anfrage.

eurostat ignoriert base vollständig: die Definition legt ihre eigenen Schwellen fest, und Ihren Parameter zu beachten ergäbe eine Zahl, die kein Eurostat-Gradtag ist, sich aber als einer ausgibt.

/v1/methods braucht keinen Schlüssel. Nutzen Sie es, um in Ihrer Oberfläche eine Methodenauswahl zu füllen, ohne etwas auszugeben und ohne eine Liste fest einzuschreiben, die veraltet.

Gradtage nach Stadt#

GEThttps://api.climatememory.com/v1/degree-days/city/{country}/{slug}Scope: dju2 Credits, +1 je vollständigem Zeitraum von 365,25 Tagen in der Spanne

Dasselbe, mit der Zeitzone der Stadt und ihrer Wärmeinselkorrektur.

Wendet zwei Korrekturen an, die eine nackte Koordinate nicht erlaubt: die Zeitzone der Stadt, damit die Tage lokal geschnitten werden, und ihren kalibrierten Wärmeinsel-Versatz.

Die Reanalyse liest bebaute Flächen um 1 bis 3 °C zu niedrig. Das verzerrt Kühlgradtage nach unten — erheblich, wenn Sie eine Klimaanlage auslegen, und unsichtbar, wenn Sie nicht wissen, dass Sie danach suchen müssen.

elevation wird auf diesem Pfad nicht angewandt, und die Auslassung ist beabsichtigt. Der Stadtversatz ist bereits gegen Stationen berechnet, die auf die Höhe der Stadt selbst normiert sind: eine zweite Gradientenkorrektur würde dieselbe Höhe also doppelt zählen — in dieselbe Richtung und plausibel genug, dass es niemandem auffiele. Wenn Sie die Höhe eines bestimmten Gebäudes brauchen, nehmen Sie den Koordinaten-Endpunkt mit elevation und verzichten auf die Wärmeinselkorrektur.

Gradtage für Ihr Gebäude, nicht für die Gitterzelle#

GEThttps://api.climatememory.com/v1/degree-days?elevation={metres}Scope: djusame

Gradientenkorrektur von der Geländehöhe der Zelle auf Ihre.

Eine Wetterstation steht auf der Höhe, auf der sie steht, und niemand kann sie für Sie 600 m den Hang hinauf versetzen. Unsere Quelle ist ein Modell: die Geländehöhe der Zelle ist also eine Zahl im Archiv, und die Differenz ist Arithmetik — 0,65 °C je 100 m. Über eine Heizperiode ist das kein Rundungsfehler.

Nur auf ausdrücklichen Wunsch, und die Antwort sagt genau, was sie getan hat:

"elevation": {
  "applied": true,
  "model_elevation_m": 42.0,
  "location_elevation_m": 1200,
  "temperature_offset_c": -7.53,
  "caveat": "Lapse-rate correction. It assumes temperature falls smoothly with
             height, which a valley floor under a winter inversion does not."
}

Der Vorbehalt reist in der Antwort mit statt nur auf dieser Seite zu stehen, weil die Person, die dieses JSON in sechs Monaten liest, nicht die ist, die die Dokumentation gelesen hat.

Eine Zelle fixieren, damit eine Basislinie vergleichbar bleibt#

GEThttps://api.climatememory.com/v1/cells/resolveScope: dju1 Credit

Welche Zelle für einen Punkt antworten würde und wie weit sie entfernt ist.

GEThttps://api.climatememory.com/v1/degree-days/cell/{cell_id}Scope: dju2 Credits, +1 je vollständigem Zeitraum von 365,25 Tagen in der Spanne

Gradtage für eine benannte Zelle — nie eine Suche nach der nächsten Zelle.

Jede andere Ortsangabe startet die Suche nach der nächsten Zelle bei jeder Anfrage neu: die Antwort hängt also davon ab, was das Archiv heute enthält. Für eine einmalige Abfrage ist das die richtige Voreinstellung, für eine Basislinie die falsche — ein Vergleich über mehrere Jahre ist nur dann ein Vergleich, wenn jedes Jahr vom selben Ort stammt.

Mit wachsendem Archiv ändert sich die nächstgelegene Zelle zu einem bestimmten Standort — eine Verbesserung der Abdeckung, die sonst als unerklärlicher Sprung in Ihren Daten ankäme.

# einmalig, bei der Einrichtung
GET /v1/cells/resolve?lat=45.19&lon=5.72
  → { "id": "era5l_45.20_5.70", "distance_km": 1.4, "resolution_km": 9 }

# jedes Mal danach
GET /v1/degree-days/cell/era5l_45.20_5.70?base=18&start=2015-01-01&end=2025-12-31

distance_km ist bei einer fixierten Anfrage konstruktionsbedingt 0: Sie haben die Zelle benannt, es wurde also nichts für sie eingesetzt. Eine Zelle, die es nicht mehr gibt, liefert 404 cell_not_found, statt stillschweigend auf eine Nachbarzelle auszuweichen — was genau die Ersetzung wieder einführte, zu deren Vermeidung Sie fixiert haben.

/v1/cells/resolve ist außerdem der günstige Weg, vor dem Bezahlen von Daten herauszufinden, dass die nächste Zelle 60 km entfernt ist. Es dekodiert nichts und liest keine Zeitreihe und ist deshalb mit einem Credit bepreist.

Aufschlüsselungszeiträume#

GEThttps://api.climatememory.com/v1/degree-days?breakdown={daily|weekly|monthly|yearly}Scope: djusame

Dieselbe Anfrage auf den Zeitraum aggregieren, auf dem Ihr Vertrag abrechnet.

Jede Gradtag-Antwort trägt ein breakdown-Feld, das auf den von Ihnen gewünschten Zeitraum aggregiert ist. Verträge rechnen auf verschiedenen ab, alle vier stehen deshalb bei derselben Anfrage zum selben Preis zur Verfügung.

ZeitraumJede Zeile trägt
dailyDatum, HGT, KGT, Min./Max./Mitteltemperatur
weeklyISO-Jahr und -Woche, das Startdatum, die Summen
monthlyJahr, Monat, Summen — die Voreinstellung
yearlyJahr, Summen

Wochen sind ISO-Wochen, eine Woche gehört also zu dem Jahr, das ihren Donnerstag enthält. Der 1. Januar 2023 fällt in die Woche 52 des Jahres 2022, und dort weisen wir ihn aus — was Ihre Tabellenkalkulation ebenso tun wird, und mit der Tabellenkalkulation uneins zu sein ist der Anfang einer Abstimmungsrunde.

Jeder Eimer trägt außerdem days, sodass ein angebrochener Monat am Rand Ihres Bereichs sichtbar ist statt stillschweigend zu kurz. Ein Februar mit "days": 12 ist ein Februar, den Sie nicht mit einem vollständigen vergleichen sollten.

Monatssummen für ein Jahr#

GEThttps://api.climatememory.com/v1/degree-days/monthlyScope: dju2 Credits

Zwölf Monatssummen für ein Kalenderjahr, ohne Tagesreihe.

GEThttps://api.climatememory.com/v1/coveragekein Schlüssel nötig0 Credits

Was das Archiv enthält: erster und letzter Tag mit Daten und die Achse, in die es hineinwachsen wird. Kein Schlüssel nötig.

Eine Kurzform für den häufigen Fall: ?lat=&lon=&year=2025, und zwölf Zeilen kommen zurück. Dieselben Daten wie /v1/degree-days?breakdown=monthly über dieselbe Spanne; weniger Parameter, bei denen man sich vertun kann.

/v1/coverage meldet den ersten und letzten Tag des Archivs sowie seine Auflösung, braucht keinen Schlüssel und ist das Richtige, um es zu prüfen, bevor Sie einen Zeitraum nahe der Gegenwart anfragen — ERA5-Land hinkt etwa fünf Tage hinterher, und provisional_days in Ihrer Antwort ist die Folge.

{
  "start": "1950-01-01",
  "end": "2026-07-29",        // letzter Tag, der Daten ENTHÄLT
  "axis_end": "2026-12-31",   // wo dieser Lauf aufhören wird zu wachsen
  "hours": 671256, "axis_hours": 674976,
  "cells": 86274, "resolution_km": 9.0,
  "run": "world-1950-2026-p1000"
}

end und axis_end sind zwei verschiedene Fragen, und nur die erste handelt von Daten. Ein Lauf wird gegen den gesamten Kalender geschrieben, den er einmal füllen wird — das Archiv 1950–2026 reserviert jede Stunde bis zum 31. Dezember 2026 — und die Nachfüllung besetzt ihn, sobald Copernicus veröffentlicht.

Bis zum 03.08.2026 meldete dieser Endpunkt die Achse als end und schrieb dem Archiv damit rund fünf Monate an Stunden gut, die leer waren. end ist das, was Sie heute anfragen können; eine Anfrage, die vollständig darüber hinausgeht, ergibt ein 404 outside_archive statt einer wohlgeformten Antwort mit der Summe null.

CSV-Export#

GEThttps://api.climatememory.com/v1/degree-days?format=csvScope: dju4× the JSON call

Die Aufschlüsselungszeilen als CSV-Datei. Nur bezahlte Tarife.

Hängen Sie format=csv an eine beliebige Gradtag-Anfrage an. Sie erhalten die breakdown-Zeilen als CSV-Datei, benannt nach Ort und Daten, sodass sie sechs Monate später in einem Download-Ordner noch erkennbar ist.

year,month,hdd,cdd,days,t_mean,coverage,provisional
2024,1,205.03,2.88,31,11.48,1.0,false
2024,2,168.44,4.10,29,12.31,1.0,false

Nur bezahlte Tarife, und begrenzt: dieselbe Höchstspanne wie bei einer JSON-Anfrage, nur aggregierte Zeilen — niemals die Stundenreihe — und es kostet vier Credits für jeden, den der entsprechende JSON-Aufruf kostet. Ein kostenloser Schlüssel bekommt 402 export_not_in_plan.

Das ist bewusst so und nicht widerwillig. Bezahlt wird für das Archiv, und ein unbegrenzter Export ist der Weg, auf dem ein Wettbewerber es sich an einem Nachmittag beschafft. Erst diese Grenzen erlauben es, das Format überhaupt anzubieten.

Stündliche Historie#

GEThttps://api.climatememory.com/v1/historicalScope: dju(years + 1) × (variables ÷ 2), rounded down, min 1

Das Reanalyse-Archiv roh ausgeliefert: stündliches Wetter zurück bis 1950.

Parameter

ParameterTypStandardBeschreibung
latfloatErforderlich.
lonfloatErforderlich.
startISO dateDie Spanne einer Anfrage ist begrenzt — siehe Tarife.
endISO date
variablescsveine sinnvolle TeilmengeFragen Sie /v1/historical/variables, was dieses Archiv enthält.
hourlybooltrueDie Reihe Stunde für Stunde mitliefern.
dailyboolfalsetrue für StädteTagesaggregate mitliefern, geschnitten auf lokale Kalendertage.

Dasselbe Archiv, aus dem die Gradtage gebaut sind, direkt ausgeliefert: stündlich, zurück bis 1950, auf einem 9-km-Gitter, überall an Land. Gleicher Host und gleicher dju-Scope — wer Gradtage aufrufen kann, kann auch dies aufrufen.

Heute enthält dieses Archiv die Temperatur und sonst nichts. Es wurde für Gradtage aufgenommen, und Gradtage brauchen eine Größe. Diese Seite versprach bis zum 03.08.2026 „Luftfeuchte, Wind, Niederschlag und Sonnenstrahlung“, und das Archiv hat nie eines davon enthalten.

/v1/historical/variables ist die Antwort, die immer aktuell ist — sie liest den freigegebenen Lauf und nicht diesen Satz, braucht keinen Schlüssel und kostet nichts. Rufen Sie sie auf, bevor Sie auf einem Feld aufbauen.

Was das Bezahlen wert macht, ist die Konsistenz. Die Aufzeichnung einer Wetterstation trägt jeden Umzug, jeden Gerätewechsel und jede Lücke ihrer Geschichte in sich: ein daraus berechneter Dreißigjahrestrend ist also zum Teil ein Trend der Messtechnik. Eine Reanalyse hat nichts davon — das Modell ist für jedes Jahr der Aufzeichnung dasselbe Modell.

Für Tageswerte über einen langen Zeitraum oder für Normalwerte und Trends nehmen Sie stattdessen die Klima-API — sie hält die Tagesfelder bereits abgeleitet vor, hat keine 9-km-/1950-Grenze und beantwortet eine ganze Klimatologie in einem Aufruf.

Historie nach Stadt#

GEThttps://api.climatememory.com/v1/historical/city/{country}/{slug}Scope: dju(years + 1) × (variables ÷ 2), rounded down, min 1

Identisch, mit der Zeitzone der Stadt und ihrer Wärmeinselkorrektur.

Zwei Dinge, die eine Koordinate nicht tragen kann: die Zeitzone der Stadt, damit die Tage dort geschnitten werden, wo die Stadt sie tatsächlich erlebt, und ihre kalibrierte Wärmeinselkorrektur. daily steht hier standardmäßig auf true, weil eine Stadt-Anfrage fast immer eine Anfrage über Tage ist.

Verfügbare Variablen#

GEThttps://api.climatememory.com/v1/historical/variableskein Schlüssel nötig0 Credits

Was das Archiv derzeit enthält, mit Einheiten, und welche Felder abgeleitet sind. Kein Schlüssel nötig.

Listet auf, was das Archiv gerade jetzt enthält, mit Einheiten, und welche Felder abgeleitet statt gespeichert sind. Ein allein für Gradtage aufgenommenes Archiv enthält nur die Temperatur, und dieser Endpunkt sagt das geradeheraus, statt Spalten voller null zurückzugeben.

Manche Felder werden berechnet statt gespeichert: die Luftfeuchte aus dem Taupunkt, Windgeschwindigkeit und -richtung aus den u- und v-Komponenten. Zu speichern, was in Mikrosekunden zu berechnen ist, würde das Archiv um ein Drittel vergrößern, für nichts — aber ein abgeleitetes Feld erscheint nur, wenn seine Quellen im Lauf enthalten sind, und deshalb ist dieser Endpunkt und nicht eine auf eine Seite geschriebene Liste die Wahrheit darüber, was Sie anfragen können. Im heute freigegebenen Archiv fehlen die Quellen, die Antwort lautet also allein temperature_2m.