climatememory développeurs

Référence de l'API

API Degrés-jours

Degrés-jours de chauffage et de refroidissement depuis la réanalyse horaire ERA5-Land, jusqu'à 1950, partout sur les terres émergées — y compris là où aucune station météo ne se trouve à moins de 60 km. Un seul scope — dju — couvre toute cette page.

Degrés-jours#

GEThttps://api.climatememory.com/v1/degree-daysscope : dju2 crédits, +1 par période complète de 365,25 jours dans l'amplitude

Degrés-jours de chauffage et de refroidissement pour une coordonnée.

Paramètres

ParamètreTypeDéfautDescription
latfloatObligatoire.
lonfloatObligatoire.
basenumber | preset | csv18Toute température de base en °C, ou un préréglage : uk (15,5), ashrae (18,333), iso, france, eurostat. Jusqu'à 60 séparées par des virgules, sans surcoût — voir plus bas.
methodstringhourlyhourly, costic, mean ou eurostat. C'est votre contrat qui en décide, pas nous.
startISO date1er janvier de l'année de finMaximum 10 ans par requête.
endISO dateaujourd'hui
typestringbothHDD, CDD ou both.
breakdownstringmonthlydaily, weekly, monthly ou yearly.
elevationfloat (m)Altitude réelle de votre site. Décale la série de l'altitude de la maille vers la vôtre — voir plus bas.
formatstringjsonjson ou csv. Le CSV est réservé aux formules payantes.
{
  "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 } ]
}

Le bloc quality n'est pas décoratif. Un coverage inférieur à 1.0 signifie que des heures manquaient dans l'archive. provisional_days compte les journées comblées depuis la prévision plutôt que depuis la réanalyse définitive, car ERA5-Land publie avec environ cinq jours de latence.

Si vous réglez un contrat sur ces chiffres, vérifiez les deux. Un total calculé sur une couverture de 0,98 n'est pas faux, mais ce n'est pas la même affirmation qu'un total sur 1,0 — et l'écart est invisible dans totals.

Ce qu'est un degré-jour, en un paragraphe

Un degré-jour de chauffage mesure de combien l'air extérieur est resté sous une température de base, et pendant combien de temps. À base 18 °C, une heure à 16 °C apporte (18 − 16) / 24 = 0.083 DJU de chauffage. Sommez les heures et vous obtenez un nombre proportionnel à l'énergie dont un bâtiment a eu besoin. Les degrés-jours de refroidissement sont le miroir : de combien au-dessus de la base. C'est la façon normalisée de comparer une saison de chauffe à une autre une fois la météo retirée de la comparaison.

Plusieurs bases, une requête, un seul prix#

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

Jusqu'à 60 températures de base en un seul appel, au prix d'une.

Lire et décoder la série horaire constitue tout le coût d'une réponse de degrés-jours. Une fois ce tableau en mémoire, une base de plus n'est qu'une soustraction dessus : en demander soixante coûte donc ce que coûte en demander une.

La réponse gagne un tableau by_base qui porte chaque base dans l'ordre où vous les avez énumérées. totals et breakdown continuent de décrire la première, si bien que le code écrit avant l'existence de cette option fonctionne toujours à l'identique.

"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}
]

Utile quand vous ne savez pas encore quelle base reproduit les chiffres d'un contrat, ou quand le même bâtiment est réglé à des bases différentes par des parties différentes — un bailleur sur 15,5 et un fournisseur d'énergie sur 18 ont tous les deux raison, et ceci renvoie les deux en un seul appel.

Méthodes de calcul#

GEThttps://api.climatememory.com/v1/degree-days/compare-methodsscope : dju2 crédits, +1 par période complète de 365,25 jours dans l'amplitude

Les quatre méthodes sur la même période, côte à côte.

GEThttps://api.climatememory.com/v1/methodsaucune clé nécessaire0 crédits

Les définitions des méthodes et leurs préréglages. Aucune clé nécessaire.

La méthode est un paramètre parce que c'est votre contrat qui en décide, pas nous. Mêmes données, même base, même année, à Alger :

MéthodeHDD 18 °CCDD 18 °CQuand l'utiliser
hourly781.91331.6Par défaut. Intègre le déficit horaire — la plus fidèle physiquement.
costic741.71349.5DJU unifiés français. Exigée par les contrats de performance énergétique français.
mean659.91267.8Moyenne quotidienne contre la base. La convention internationale la plus répandue.
eurostat587.7656.6Statistiques européennes. Les bases sont fixées par la définition et ignorent base.

L'horaire et la moyenne quotidienne diffèrent de 18 % sur les mêmes données. Ce n'est pas un écart d'arrondi — c'est la différence entre gagner et perdre une discussion sur une facture d'énergie. Choisissez la méthode qui reproduit les chiffres de votre contrat avant de vous engager sur une formule ; c'est à cela que sert compare-methods, et cela coûte une requête.

eurostat ignore complètement base : la définition fixe ses propres seuils, et honorer votre paramètre produirait un nombre qui n'est pas un degré-jour Eurostat tout en prétendant l'être.

/v1/methods ne demande aucune clé. Servez-vous-en pour alimenter un sélecteur de méthode dans votre interface sans rien dépenser, et sans inscrire en dur une liste qui se périmera.

Degrés-jours par ville#

GEThttps://api.climatememory.com/v1/degree-days/city/{country}/{slug}scope : dju2 crédits, +1 par période complète de 365,25 jours dans l'amplitude

Les mêmes, avec le fuseau horaire de la ville et sa correction d'îlot de chaleur urbain.

Applique deux corrections qu'une coordonnée nue ne permet pas : le fuseau horaire de la ville, pour que les journées soient découpées localement, et son décalage d'îlot de chaleur urbain calibré.

La réanalyse sous-estime les zones bâties de 1 à 3 °C. Cela biaise les degrés-jours de refroidissement vers le bas — significatif si vous dimensionnez une climatisation, et invisible si vous ne savez pas qu'il faut le chercher.

elevation n'est pas appliqué sur ce chemin, et l'omission est délibérée. Le décalage de ville est déjà calculé contre des stations normalisées à l'altitude propre de la ville : une seconde correction de gradient compterait donc deux fois la même altitude — dans le même sens, et de façon assez plausible pour que personne ne le remarque. S'il vous faut l'altitude d'un bâtiment précis, utilisez l'endpoint par coordonnée avec elevation et renoncez à la correction d'îlot de chaleur.

Des degrés-jours pour votre bâtiment, pas pour la maille#

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

Correction de gradient adiabatique, de l'altitude de la maille à la vôtre.

Une station météo est à l'altitude où elle est, et personne ne peut la déplacer 600 m plus haut sur le versant pour vous. Notre source est un modèle : l'altitude du sol de la maille est donc un nombre dans l'archive, et l'écart relève de l'arithmétique — 0,65 °C par 100 m. Sur une saison de chauffe, ce n'est pas une erreur d'arrondi.

Sur demande explicite, et la réponse dit exactement ce qu'elle a fait :

"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."
}

La mise en garde voyage dans la réponse plutôt que sur cette seule page, parce que la personne qui lira ce JSON dans six mois n'est pas celle qui a lu la documentation.

Épingler une maille, pour qu'une base de référence reste comparable#

GEThttps://api.climatememory.com/v1/cells/resolvescope : dju1 crédit

Quelle maille répondrait pour un point, et à quelle distance elle se trouve.

GEThttps://api.climatememory.com/v1/degree-days/cell/{cell_id}scope : dju2 crédits, +1 par période complète de 365,25 jours dans l'amplitude

Degrés-jours pour une maille nommée — jamais de recherche de maille la plus proche.

Toutes les autres façons de désigner un lieu relancent la recherche de maille la plus proche à chaque requête : la réponse dépend donc de ce que l'archive contient aujourd'hui. C'est le bon comportement par défaut pour une consultation ponctuelle, et le mauvais pour une base de référence — une comparaison sur plusieurs années n'est une comparaison que si chaque année vient du même endroit.

À mesure que l'archive s'élargit, la maille la plus proche d'un site donné change — une amélioration de la couverture qui arriverait sinon dans vos données sous la forme d'une marche inexpliquée.

# une fois, à l'installation
GET /v1/cells/resolve?lat=45.19&lon=5.72
  → { "id": "era5l_45.20_5.70", "distance_km": 1.4, "resolution_km": 9 }

# à chaque fois ensuite
GET /v1/degree-days/cell/era5l_45.20_5.70?base=18&start=2015-01-01&end=2025-12-31

distance_km vaut 0 sur une requête épinglée, par construction : vous avez nommé la maille, rien ne lui a donc été substitué. Une maille qui n'existe plus renvoie 404 cell_not_found plutôt que de retomber en silence sur une voisine — ce qui réintroduirait exactement la substitution que l'épinglage sert à éviter.

/v1/cells/resolve est aussi le moyen économique de découvrir avant de payer la donnée que la maille la plus proche est à 60 km. Il ne décode rien et ne lit aucune série temporelle, et il est tarifé en conséquence à un crédit.

Périodes de ventilation#

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

Agréger la même requête à la période sur laquelle votre contrat se règle.

Chaque réponse de degrés-jours porte un tableau breakdown agrégé à la période que vous demandez. Les contrats se règlent sur des périodes différentes : les quatre sont donc disponibles sur la même requête au même prix.

PériodeChaque ligne porte
dailydate, DJU chaud, DJU froid, température min/max/moyenne
weeklyannée et semaine ISO, sa date de début, les totaux
monthlyannée, mois, totaux — le défaut
yearlyannée, totaux

Les semaines sont des semaines ISO : une semaine appartient donc à l'année qui contient son jeudi. Le 1er janvier 2023 tombe en semaine 52 de 2022, et nous le rapportons là — ce que fera aussi votre tableur, et être en désaccord avec le tableur, c'est ainsi que commence une réunion de rapprochement.

Chaque intervalle porte également days, si bien qu'un mois partiel au bord de votre plage est visible plutôt que silencieusement écourté. Un mois de février avec "days": 12 est un février que vous ne devriez pas comparer à un février complet.

Totaux mensuels pour une année#

GEThttps://api.climatememory.com/v1/degree-days/monthlyscope : dju2 crédits

Douze totaux mensuels pour une année civile, sans série quotidienne.

GEThttps://api.climatememory.com/v1/coverageaucune clé nécessaire0 crédits

Ce que contient l'archive : premier et dernier jour avec des données, et l'axe dans lequel elle va croître. Aucune clé nécessaire.

Un raccourci pour le cas courant : ?lat=&lon=&year=2025 et douze lignes reviennent. Mêmes données que /v1/degree-days?breakdown=monthly sur la même amplitude ; moins de paramètres à se tromper.

/v1/coverage rapporte le premier et le dernier jour de l'archive ainsi que sa résolution, ne demande aucune clé, et c'est ce qu'il faut vérifier avant de demander une période proche du bord présent — ERA5-Land accuse environ cinq jours de retard, et provisional_days dans votre réponse en est la conséquence.

{
  "start": "1950-01-01",
  "end": "2026-07-29",        // dernier jour qui CONTIENT des données
  "axis_end": "2026-12-31",   // là où ce run cessera de croître
  "hours": 671256, "axis_hours": 674976,
  "cells": 86274, "resolution_km": 9.0,
  "run": "world-1950-2026-p1000"
}

end et axis_end sont deux questions différentes, et seule la première porte sur les données. Un run est écrit contre tout le calendrier qu'il finira par remplir — l'archive 1950-2026 alloue chaque heure jusqu'au 31 décembre 2026 — et le complément le remplit à mesure que Copernicus publie.

Jusqu'au 03/08/2026, cet endpoint rapportait l'axe comme end : il créditait donc l'archive d'environ cinq mois d'heures qui étaient vides. end est ce que vous pouvez demander aujourd'hui ; une requête entièrement au-delà donne un 404 outside_archive plutôt qu'une réponse bien formée totalisant zéro.

Export CSV#

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

Les lignes de ventilation en fichier CSV. Formules payantes uniquement.

Ajoutez format=csv à n'importe quelle requête de degrés-jours. Vous obtenez les lignes de breakdown sous forme de fichier CSV, nommé d'après le lieu et les dates, de sorte qu'il reste identifiable six mois plus tard dans un dossier de téléchargements.

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

Formules payantes uniquement, et borné : la même amplitude maximale qu'une requête JSON, les lignes agrégées seulement — jamais la série horaire — et cela coûte quatre crédits pour chaque crédit que coûte l'appel JSON équivalent. Une clé gratuite obtient 402 export_not_in_plan.

C'est délibéré, et non concédé à contrecœur. C'est l'archive que vous payez, et un export sans borne est la façon dont un concurrent se la procure en une après-midi. Ce sont ces bornes qui permettent au format d'exister.

Historique horaire#

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

L'archive de réanalyse servie brute : météo horaire jusqu'à 1950.

Paramètres

ParamètreTypeDéfautDescription
latfloatObligatoire.
lonfloatObligatoire.
startISO dateL'amplitude d'une requête est plafonnée — voir Formules.
endISO date
variablescsvun sous-ensemble raisonnableDemandez à /v1/historical/variables ce que contient cette archive.
hourlybooltrueInclure la série heure par heure.
dailyboolfalsetrue pour les villesInclure les agrégats quotidiens, découpés sur des journées civiles locales.

L'archive même dont sont bâtis les degrés-jours, servie directement : horaire, jusqu'à 1950, sur une grille de 9 km, partout sur les terres émergées. Même hôte et même scope dju — si vous pouvez appeler les degrés-jours, vous pouvez appeler ceci.

Aujourd'hui cette archive ne contient que la température, et rien d'autre. Elle a été ingérée pour les degrés-jours, et les degrés-jours n'ont besoin que d'une variable. Cette page a promis « humidité, vent, précipitations et rayonnement solaire » jusqu'au 03/08/2026, et l'archive n'en a jamais contenu aucun.

/v1/historical/variables est la réponse toujours à jour — il lit le run promu plutôt que cette phrase, ne demande aucune clé et ne coûte rien. Appelez-le avant de bâtir quoi que ce soit sur un champ.

Ce qui justifie de payer pour cette archive, c'est sa cohérence. Le relevé d'une station météo porte chaque déménagement, chaque changement d'instrument et chaque lacune de son histoire : une tendance trentenaire calculée depuis une station est donc en partie une tendance de l'instrumentation. Une réanalyse n'a rien de tout cela — le modèle est le même pour chaque année du relevé.

Pour des valeurs quotidiennes sur une longue période, ou pour des normales et des tendances, utilisez plutôt l'API Climat — elle détient les champs quotidiens pré-dérivés, n'a pas de frontière à 9 km ni à 1950, et répond à toute une climatologie en un seul appel.

Historique par ville#

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

Identique, avec le fuseau horaire de la ville et sa correction d'îlot de chaleur.

Deux choses qu'une coordonnée ne peut pas porter : le fuseau horaire de la ville, pour que les journées soient découpées là où la ville les vit réellement, et sa correction calibrée d'îlot de chaleur urbain. daily vaut true par défaut ici, parce qu'une requête par ville est presque toujours une requête portant sur des journées.

Variables disponibles#

GEThttps://api.climatememory.com/v1/historical/variablesaucune clé nécessaire0 crédits

Ce que l'archive contient actuellement, avec les unités, et quels champs sont dérivés. Aucune clé nécessaire.

Énumère ce que l'archive contient en ce moment, avec les unités, et quels champs sont dérivés plutôt que stockés. Une archive ingérée pour les seuls degrés-jours ne contient que la température, et cet endpoint le dit franchement au lieu de renvoyer des colonnes de null.

Certains champs sont calculés plutôt que stockés : l'humidité depuis le point de rosée, la vitesse et la direction du vent depuis les composantes u et v. Stocker ce qui prend des microsecondes à calculer ajouterait un tiers à l'archive pour rien — mais un champ dérivé n'apparaît que lorsque ses sources sont dans le run, et c'est pourquoi cet endpoint, et non une liste écrite sur une page, dit la vérité sur ce que vous pouvez demander. Sur l'archive promue aujourd'hui, les sources sont absentes : la réponse est donc temperature_2m seul.