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#
dju2 crédits, +1 par période complète de 365,25 jours dans l'amplitudeDegrés-jours de chauffage et de refroidissement pour une coordonnée.
Paramètres
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
lat | float | — | Obligatoire. |
lon | float | — | Obligatoire. |
base | number | preset | csv | 18 | Toute 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. |
method | string | hourly | hourly, costic, mean ou eurostat. C'est votre contrat qui en décide, pas nous. |
start | ISO date | 1er janvier de l'année de fin | Maximum 10 ans par requête. |
end | ISO date | aujourd'hui | |
type | string | both | HDD, CDD ou both. |
breakdown | string | monthly | daily, weekly, monthly ou yearly. |
elevation | float (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. |
format | string | json | json 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#
djusame as one baseJusqu'à 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#
dju2 crédits, +1 par période complète de 365,25 jours dans l'amplitudeLes quatre méthodes sur la même période, côte à côte.
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éthode | HDD 18 °C | CDD 18 °C | Quand l'utiliser |
|---|---|---|---|
hourly | 781.9 | 1331.6 | Par défaut. Intègre le déficit horaire — la plus fidèle physiquement. |
costic | 741.7 | 1349.5 | DJU unifiés français. Exigée par les contrats de performance énergétique français. |
mean | 659.9 | 1267.8 | Moyenne quotidienne contre la base. La convention internationale la plus répandue. |
eurostat | 587.7 | 656.6 | Statistiques 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#
dju2 crédits, +1 par période complète de 365,25 jours dans l'amplitudeLes 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#
djusameCorrection 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#
dju1 créditQuelle maille répondrait pour un point, et à quelle distance elle se trouve.
dju2 crédits, +1 par période complète de 365,25 jours dans l'amplitudeDegré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#
djusameAgré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ériode | Chaque ligne porte |
|---|---|
daily | date, DJU chaud, DJU froid, température min/max/moyenne |
weekly | année et semaine ISO, sa date de début, les totaux |
monthly | année, mois, totaux — le défaut |
yearly | anné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#
dju2 créditsDouze totaux mensuels pour une année civile, sans série quotidienne.
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#
dju4× the JSON callLes 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#
dju(years + 1) × (variables ÷ 2), rounded down, min 1L'archive de réanalyse servie brute : météo horaire jusqu'à 1950.
Paramètres
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
lat | float | — | Obligatoire. |
lon | float | — | Obligatoire. |
start | ISO date | — | L'amplitude d'une requête est plafonnée — voir Formules. |
end | ISO date | — | |
variables | csv | un sous-ensemble raisonnable | Demandez à /v1/historical/variables ce que contient cette archive. |
hourly | bool | true | Inclure la série heure par heure. |
daily | bool | false — true pour les villes | Inclure 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#
dju(years + 1) × (variables ÷ 2), rounded down, min 1Identique, 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#
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.