BYTETOOLS

Open-Meteo Climate API

Free climate projection API with no key: downscaled CMIP6 model data from 1950 to 2050 at 10 km resolution for any coordinates. Tested example and live response.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the Open-Meteo Climate API?

The Open-Meteo Climate API is a free, key-free API serving CMIP6 climate model projections from 1950 to 2050. It returns daily temperature, precipitation, wind and humidity variables for any coordinates worldwide, downscaled to roughly 10 km resolution across seven high-resolution climate models.

Climate projections normally live in multi-gigabyte NetCDF files on research portals, behind registration and a steep learning curve. This API turns them into ordinary JSON for a single point: pick coordinates, a date range and a model, and get a daily series back. That is a substantial reduction in effort for anyone building climate risk tooling, agricultural planning or a data journalism piece.

The crucial thing to understand is that this is not a forecast. CMIP6 models simulate a plausible climate under a given emissions scenario — the daily values are statistically realistic, but the value for a specific future date is not a prediction of that date's weather. Use these series for trends, averages and distributions over years, never for what the temperature will be next Tuesday. Comparing several models via the `models` parameter is the standard way to see the spread of that uncertainty.

Quick facts

Base URL
https://climate-api.open-meteo.com/v1
Authentication
No API key. Same fair-use terms as the rest of the Open-Meteo family, including commercial use below the daily limit.
Rate limit
Roughly 10,000 requests per day per IP on the free tier.
Pricing
Free, commercial use included, under the daily cap.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the Open-Meteo Climate API

Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.

1. Daily maximum temperature for Berlin, first week of 2026

GET https://climate-api.open-meteo.com/v1/climate?latitude=52.52&longitude=13.41&start_date=2026-01-01&end_date=2026-01-05&models=EC_Earth3P_HR&daily=temperature_2m_max

curl
curl 'https://climate-api.open-meteo.com/v1/climate?latitude=52.52&longitude=13.41&start_date=2026-01-01&end_date=2026-01-05&models=EC_Earth3P_HR&daily=temperature_2m_max'
JavaScript (fetch)
const res = await fetch("https://climate-api.open-meteo.com/v1/climate?latitude=52.52&longitude=13.41&start_date=2026-01-01&end_date=2026-01-05&models=EC_Earth3P_HR&daily=temperature_2m_max");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://climate-api.open-meteo.com/v1/climate?latitude=52.52&longitude=13.41&start_date=2026-01-01&end_date=2026-01-05&models=EC_Earth3P_HR&daily=temperature_2m_max", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200
{
  "latitude": 52.5,
  "longitude": 13.400009,
  "generationtime_ms": 5.676746368408203,
  "utc_offset_seconds": 0,
  "timezone": "GMT",
  "timezone_abbreviation": "GMT",
  "elevation": 38.0,
  "daily_units": {
    "time": "iso8601",
    "temperature_2m_max": "°C"
  },
  "daily": {
    "time": [
      "2026-01-01",
      "2026-01-02",
      "2026-01-03",
      "2026-01-04",
      "2026-01-05"
    ],
    "temperature_2m_max": [
      0.5,
      2.7,
      3.9,
      2.8,
      1.5
    ]
  }
}

Parameters

ParameterTypeRequiredDescription
latitudefloatRequiredLatitude in decimal degrees. Snapped to the model grid, so the response echoes back the point actually used. Pairs with `longitude`. 52.52
start_datestringRequiredISO start date. The valid range is 1950-01-01 to 2050-12-31. Pairs with `end_date`. 2026-01-01
modelsstringOptionalComma-separated climate models: `EC_Earth3P_HR`, `MRI_AGCM3_2_S`, `CMCC_CM2_VHR4`, `FGOALS_f3_H`, `HiRAM_SIT_HR`, `MPI_ESM1_2_XR`, `NICAM16_8S`. EC_Earth3P_HR
dailystringOptionalComma-separated daily variables such as `temperature_2m_max`, `precipitation_sum`, `windspeed_10m_max`, `relative_humidity_2m_mean`. temperature_2m_max
temperature_unitstringOptional`celsius` or `fahrenheit`. A matching `precipitation_unit` accepts `mm` or `inch`. celsius

Response fields

latitude / longitudefloat
The model grid point actually used, which differs slightly from your request because the data is gridded at about 10 km.
elevationfloat
Grid cell elevation in metres — relevant, since temperature projections are altitude-sensitive.
daily.timearray
ISO dates, one per value in every other daily array. The arrays are parallel and index-aligned.
daily variablesarray
Each requested variable's daily values, in the same order as `daily.time`.
daily_unitsobject
Unit string for each returned variable, so charts can be labelled from the response itself.
generationtime_msfloat
Server-side generation time. Long date ranges across several models are noticeably slower.

What you can build with the Open-Meteo Climate API

  • Model climate risk exposure for a property or infrastructure portfolio
  • Project growing-season temperature and rainfall for agricultural planning
  • Chart warming trends for a specific location in a data journalism piece
  • Compare model spread by requesting several CMIP6 models for the same point

Common errors and how to fix them

400

Date outside the 1950-2050 range, or an unknown model or variable name.

Fix: The error body names the offending parameter. Model ids are case-sensitive and use underscores, as in `EC_Earth3P_HR`.

429

Daily request limit exceeded.

Fix: Long series are expensive — fetch a wide date range once and cache it rather than requesting year by year.

Nulls in a daily array

A variable is unavailable for the selected model.

Fix: Not every model provides every variable. Check the docs' support matrix, or request a different model.

Open-Meteo Climate API — frequently asked questions

Is the Open-Meteo Climate API free?

Yes, free with no API key and no signup, including commercial use below roughly 10,000 requests per day — the same terms as the rest of the Open-Meteo family.

What is CMIP6 data?

The Coupled Model Intercomparison Project Phase 6 is the coordinated set of climate model runs underpinning the IPCC assessment reports. This API serves seven high-resolution CMIP6 models statistically downscaled to about 10 km.

Can I use this to forecast weather in 2050?

No, and the distinction matters. Climate models produce statistically plausible daily values under an emissions scenario, not predictions of specific dates. The output is meaningful as trends, averages and distributions over years — never as a forecast for a given day.

Why do different models give different answers?

Because each makes different assumptions about atmospheric physics and resolution, and that spread is the honest representation of uncertainty. Requesting several models via the `models` parameter and showing the range is more truthful than presenting one model's line as fact.

Tools that pair with this API

Open-Meteo Climate is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.