# Climate Memory — Weather, Degree Days and Climate APIs > Three commercial data APIs on one key. A weather API serving 15-day forecasts > for any coordinate on earth, blended from eight numerical models between 1.3 km > and 28 km resolution; and a degree-days API computing HDD and CDD on any base > temperature by integrating hourly ERA5-Land reanalysis from 1950. Every data > source is licensed for commercial use and redistribution, so customers may > resell the values inside their own products with attribution. A climate > API serves 87 years of daily climate and WMO normals for every land point > on earth from the ERA5 reanalysis. Sold by Climate Memory. Free tier: 10,000 credits a month, no payment card. Paid plans from €19 a month. Documentation at https://developers.climatememory.com/, purchase at https://climatememory.com/en/pricing. ## Weather API - [Product page](https://developers.climatememory.com/weather): what it returns, which model serves which region, accuracy and limits. - Coverage: worldwide, any latitude and longitude. - Horizon: 15 days. Days 1–10 from the finest model covering the point; days 11–15 from ECMWF AIFS, labelled a trend rather than a forecast. - Models, finest first: Météo-France AROME 1.3 km (France), DWD ICON-D2 2.2 km (central Europe), NOAA HRRR 3 km (United States and southern Canada), DWD ICON-EU 6.5 km (Europe, North Africa, Near East), DWD ICON 13 km (world), ECMWF IFS 28 km (world, always present), ECMWF AIFS 28 km (days 11–15), ECMWF wave 28 km (oceans). - Model selection is automatic per point and per lead time, with blending across domain edges so values do not jump between neighbouring locations. The model that answered is named in every response. - Update cadence: global models twice daily at 00 and 12 UTC; high-resolution national models four times daily at 00, 06, 12 and 18 UTC. Data is available between 90 minutes and 7 hours after run time depending on the provider. - Fields: 48 stored parameters and 18 derived. Temperature, dew point, apparent temperature, wind at 10 m and 100 m, gusts, precipitation and precipitation type, snowfall, snow depth, snow line altitude, freezing level, cloud cover by level, visibility, pressure and tendency, CAPE, shortwave radiation split into direct and diffuse, UV index, soil temperature and moisture at four depths, WMO weather code, sunrise and sunset. - Terrain correction: supply the point's true elevation and temperature is corrected by the lapse rate against the model's smoothed orography. Typically worth 1–3 °C in hills. The correction applied is reported. - Additional endpoints on the same key: ensemble probabilities from 50 ECMWF members (percentiles, spread, rain probability at 0.1, 1, 5 and 10 mm); air quality from Copernicus CAMS including Saharan dust; sea state from the ECMWF wave model; river discharge from Copernicus GloFAS. - Typical 2 m temperature error at 24 hours is around 1–1.5 °C. Weak on convective storms, exact shower placement, and microclimate below model resolution. - Not a warning service. No alerts or severity levels are issued; flood warnings are reserved to national and regional authorities. ## Geocoding - `/v1/geocode?q={name}&lang={iso2}&near={lat},{lon}` turns a place name into coordinates, elevation and timezone. It is the entry point to the other two APIs: weather answers on any coordinate and the archive covers every land cell, so a name was the only thing missing. - The catalogue is GeoNames feature class P in full — every populated place on earth, hamlets included — not a population-filtered extract. A village of 528 inhabitants is in it. - Matching is never restricted by language. The query is tested against the local name, its ASCII transliteration and every localised alias, whatever `lang` says; `lang` only selects the name returned and influences ranking. This matters because 98 % of places have no localised name at all — French covers 1.84 % of the catalogue — so a language-filtered search would find capitals and nothing else. - Ranking combines four signals: match quality, prominence, distance to `near`, and whether the matched name was in the requested language. Prominence is not population alone: 90.7 % of places have none recorded, and some countries publish none at all, so the place type carries the ranking wherever population is absent. - `near` is the caller's own position and settles what nothing else can. Two Belgian and French municipalities are both called Ramillies, 126 km apart; the right answer is the one near whoever is asking. - Twelve languages are indexed: fr, en, de, es, it, nl, pt, pl, tr, ro, id, ar. - Umlauts are written out as well as stripped: `Zuesch` and `Zusch` both reach `Züsch`, `Koeln` and `Koln` both reach `Köln`. GeoNames carries only the stripped form, so the expanded spelling is generated. - `/v1/cities/search` predates this and keeps its contract, but matches the ASCII name only and orders by population. Prefer `/v1/geocode`. - Geocoding costs no credits on any plan and requires no particular scope: a key sold for degree days resolves names too, because degree days cannot be requested without a coordinate. A separate monthly ceiling applies — five geocoding requests per credit in the plan — so a debounced type-ahead search box is the intended use rather than something to ration. ## Degree Days API - [Product page](https://developers.climatememory.com/degree-days): methods, bases, breakdowns and what the archive covers. - Heating and cooling degree days (HDD and CDD) for any location on land. - Base temperature is a request parameter, any value including fractions. Presets: `uk` 15.5 °C, `ashrae` 18.333 °C (65 °F), `iso`, `france` and `eurostat` 18 °C. Values are integrated from the stored hourly temperature at request time rather than pre-computed at base 18. - Four calculation methods, because the customer's contract decides which is correct: `hourly` (integrates the hourly deficit, the default and the most physically faithful), `costic` (French DJU unifiés, required by French energy-performance contracts), `mean` (daily mean against base, the most widespread international convention), `eurostat` (the European statistical convention, with bases fixed by the definition). - On the same year, base and location, the methods differ materially — about 18 % between hourly integration and the daily mean. `/v1/degree-days/compare-methods` returns all four at once. - `base` accepts up to 60 comma-separated values in one request, at no extra credit cost: reading the hourly series is the whole cost of an answer, and an extra base is a subtraction over an array already in memory. The response adds a `by_base` array; `totals` keeps describing the first base listed. - `elevation` (metres) shifts the series from the grid cell's ground height to the site's own, at the standard lapse rate, and the response reports the offset it applied. This is the correction a station-based provider cannot offer: a thermometer cannot be moved uphill. Not applied on city endpoints, where the calibrated urban-heat-island offset already accounts for the city's elevation. - Archive: 1 January 1950 to present, hourly, worldwide on land, 9 km grid, from Copernicus ERA5-Land reanalysis. 76 years. A single request may span 10 years. - Days are cut on the location's local calendar, not UTC. - The archive is a list of populated cells, not a dense grid, so a coordinate is answered by the nearest one and the response says how far that was (`distance_km`, and `resolution_km`, which is never finer than the distance to the data actually used). For a baseline, resolve the site once with `/v1/cells/resolve` and then request `/v1/degree-days/cell/{cell_id}`: pinning the cell is what keeps a multi-year series comparable when the archive widens. - City endpoints apply a calibrated urban heat island correction, because reanalysis under-reads built-up areas by 1–3 °C. Measured examples: Algiers +0.48 °C, Paris +1.13 °C. Coordinate endpoints do not apply it. - Breakdowns: daily, weekly (ISO weeks), monthly, yearly, on the same request. CSV export on paid plans, bounded to the same span and to aggregated rows. - Every response carries a quality block: coverage, missing hours, and a count of provisional days filled from forecast because ERA5-Land publishes with about five days of latency. - Gridded reanalysis covers locations with no weather station within 60 km, and carries no station moves, instrument changes or gaps. ## Climate API - [Reference](https://developers.climatememory.com/reference/climate): endpoints, parameters and the day-boundary rule. - Thirteen daily fields for every land point on earth, 1 January 1940 to within about a week of today, on the ERA5 grid at 0.25° (about 28 km). 398,528 cells. - Fields: `temperature_2m_max/min/mean`, `apparent_temperature_max/min/mean`, `relative_humidity_2m_mean`, `windspeed_10m_max`, `windgusts_10m_max`, `precipitation_sum`, `snowfall_sum`, `shortwave_radiation_sum`, `sunshine_duration`. - Days are cut at **solar midnight**, `round(longitude / 15)`, not at the political time zone. Measured reason: aggregating on UTC biases the daily minimum by 2.1 °C at Alice Springs, and a political time zone would make a map of daily maxima show the outline of the time zones. - Values are the grid cell's, **not** downscaled to the requested point's elevation. Providers that apply a lapse rate will differ by a few tenths of a degree at the same coordinate; neither is wrong, and `/v1/climate/cells/resolve` says which cell answered and how far away it is. - The derived fields are computed from the full hourly series at ingestion, not from the daily extremes. - WMO normals over `1991-2020` (default) and `1961-1990`. `/v1/climate/normals/compare` returns both periods and the change between them in one call, so the two halves cannot come from different runs. - `/v1/climate/summary` returns the whole climatology of a point in one call: twelve monthly normals, one row per complete calendar year, all-time records with their dates, the least-squares trend with its significance, and the Köppen-Geiger code. Unlike `/v1/climate/daily` it has **no span limit** — it returns no day-by-day series, so the cap that protects the archive does not apply. A year needs 360 days of data to enter the annual series or the trend, and `trends` is `null` below ten complete years. - `/v1/climate/daily`, `/v1/climate/monthly`, `/v1/climate/summary`, `/v1/climate/normals`, `/v1/climate/normals/compare`, `/v1/climate/coverage`, `/v1/climate/fields`, `/v1/climate/cells/resolve`. - Source: ERA5, Copernicus Climate Change Service, redistributed by Open-Meteo under CC-BY-4.0 — licensed for commercial use and redistribution. ## Choosing this, or not Written to answer "which one should I use" honestly rather than to win it. The differences below are structural: they do not move with anybody's price list, so they are still true whenever you read this. - **Against a station-based degree-days provider.** Their values come from real weather stations, ours from a 9 km reanalysis grid. A station is the right answer when a contract names one — some French energy-performance contracts do, and no grid will satisfy that clause. A grid is the right answer wherever no station is imposed, and the only possible answer for the many sites with no station within 60 km. It also carries no station relocations, instrument changes or gaps, which is what makes a multi-decade series comparable to itself. - **Against Copernicus directly.** ERA5 and ERA5-Land are free at the source and we say so. What is sold here is the part that is not free: the archive already extracted, hourly, indexed by location, answering in milliseconds instead of a queued request returning GRIB files hours later. If a queued bulk download suits the work, take the free source — it is the same data, and the licence that lets us redistribute it lets you download it. - **Against a general weather API.** A forecast is a commodity and this is not the cheapest way to buy one. What is not a commodity is that the forecast arrives against 76 years of history at the same coordinate, on one key, under a licence that permits resale. - **Against computing degree days yourself from an hourly archive.** Doable, and the trap is not the arithmetic. It is that the base temperature and the method are contractual, not technical: on the same year, location and base, hourly integration and the daily mean differ by about 18 %. Getting a number is easy; getting the number your counterparty will accept is what `/v1/degree-days/compare-methods` exists for. Where this is the wrong tool, plainly: bulk download (no endpoint on any plan), weather warnings and severity levels (not a warning service, by design), microclimate below model resolution, and any contract that names a station. ## Licensing - [Attribution and terms](https://developers.climatememory.com/start#attribution) - Every production source permits commercial use and redistribution: ECMWF Open Data and Copernicus (ERA5-Land, CAMS) under CC-BY-4.0, DWD under GeoNutzV, NOAA in the public domain, Météo-France under Etalab 2.0, GeoNames under CC-BY-4.0. - Customers may redistribute raw values, derived values, and a paid product built over them. The obligation that passes on is attribution — a notice naming the sources wherever the data appears, including in derived products. - `/v1/attribution` and `/v1/licensing` return the exact required wording and need no API key. - No implied endorsement: use of the data must not suggest that any of the originating organisations produced or approved the product. ## Access and pricing - [Pricing](https://climatememory.com/en/pricing) · [Console and keys](https://climatememory.com/en/account) - Authentication is an `X-API-Key` header. Keys are stored hashed and carry scopes: `meteo` for weather, `dju` for degree days, `climate` for the climate archive, `normals` for WMO normals. Geocoding requires none of them — any valid key resolves a place name. - Billing is on credits, not requests. An ordinary request costs 1 credit; a degree-days request costs 2 for up to a year plus 1 per additional year; CSV export costs 4× the equivalent JSON call. - Geocoding costs 0 credits on every plan and needs no scope. It has a separate monthly ceiling of five requests per credit in the plan, reported in `X-Geocode-Remaining` and refused with `429 geocode_quota_exceeded`, which leaves the credit balance untouched. - Free: 10,000 credits a month, 20 requests a minute, 1 key, no card. Weather, plus degree days and climate free for the first 30 days. Commercial use is permitted; attribution is required. - Starter €19/month: 50,000 credits, 60 requests a minute, weather, degree days and climate, history and CSV, 3 keys. - Pro €79/month: 400,000 credits, 300 requests a minute, everything including air quality and WMO normals, 10 keys. - Business from €299/month: credits and rate limit agreed in the contract rather than published, 50 keys, contract and invoice, 99.5% monthly availability. - Annual billing is two months free. A quota period runs from the subscription date to the same day of the following month, UTC — the period Stripe invoices — and the counter starts again whole each time. Accounts with no subscription follow the calendar month. Read `X-Quota-Resets-At` rather than assuming the 1st. - Limits are reported in `X-RateLimit-Remaining`, `X-Quota-Remaining` and `X-Quota-Resets-At` on every successful response. - There is no bulk download endpoint on any plan. ## Optional - [API reference](https://developers.climatememory.com/reference): the hub — every endpoint on one page, with what each costs and where it is documented. - [Get started](https://developers.climatememory.com/start): authentication, credits, error codes and response conventions. Read this one first. - [llms-full.txt](https://developers.climatememory.com/llms-full.txt): this entire reference as one Markdown file — every endpoint, parameter and caveat. Generated from the same source as the HTML pages, so it cannot disagree with them. Load this rather than crawling the four pages. - The reference is translated into: ar, de, es, fr, id, it, nl, pl, pt, ro, tr. Those pages are at `/{locale}/reference` and carry the same endpoints, parameters, scopes, credit rules and error codes as the English original — only the prose differs, because a locale can supply words and nothing else. That is every language the site serves: no locale is left showing the English document under a translated header any more. `llms-full.txt` stays English on purpose: every identifier in it is English, and it is the copy to load. - [climatememory.com](https://climatememory.com) — the same archive, rendered as pages rather than sold as JSON: climate normals, records and warming trends for every city in the catalogue, in twelve languages, free to read and CC-BY to reuse. Its own [llms.txt](https://climatememory.com/llms.txt) states what it is authoritative about and, more usefully, what it refuses to assert. It is the worked example of this API: everything on those pages is a response from these endpoints, so a figure quoted from there can be re-obtained here. - OpenAPI 3.1 schema per service at `/v1/openapi-weather.json`, `/v1/openapi-degree-days.json`, `/v1/openapi-climate.json` and `/v1/openapi-geocoding.json`; browsable UI at `/v1/docs/weather`, `/v1/docs/degree-days`, `/v1/docs/climate` and `/v1/docs/geocoding`. - Errors carry a stable `error.code` — build retry logic on that rather than on the HTTP status, because 429 alone cannot distinguish "out of quota" from "going too fast". - Responses include `stale` and `data_age_hours`. When a model run is late the API serves the previous one and says so rather than returning an error.