Open-Meteo API
Free weather forecast API with no API key and no signup. Hourly and daily forecasts worldwide, free for commercial use. Working curl example and live response.
Endpoint tested and returned HTTP 200 on 2026-08-19
What is the Open-Meteo API?
Open-Meteo is a free weather forecast API that requires no API key and no registration. It returns current conditions plus hourly and daily forecasts for any latitude and longitude worldwide, and is free for commercial use under 10,000 requests per day.
Open-Meteo is the rare weather API that asks for nothing up front. There is no signup, no key to rotate and no credit card, yet it still serves high-resolution forecast data drawn from national weather services including NOAA, DWD and Meteo-France. For most side projects and a good number of production apps, it is the only weather API you need.
The API is built around explicit opt-in: you list exactly which variables you want via the `current`, `hourly` or `daily` parameters, and you get back only those. That keeps responses small and makes the URL self-documenting — anyone reading your code can see precisely what data the app depends on.
Quick facts
- Base URL
https://api.open-meteo.com/v1- Authentication
- No API key. Non-commercial and commercial use are both allowed below roughly 10,000 requests per day; above that Open-Meteo asks you to buy an API plan.
- Rate limit
- Approximately 10,000 requests per day per IP on the free tier.
- Pricing
- Free, including commercial use, under the daily limit. Paid plans lift the cap.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the Open-Meteo API
Every request below was executed against the live API on 2026-08-19, and the response shown is the real body it returned — not an illustration.
1. Current temperature and wind speed for Berlin
GET https://api.open-meteo.com/v1/forecast?latitude=52.52&longitude=13.41¤t=temperature_2m,wind_speed_10m
curl 'https://api.open-meteo.com/v1/forecast?latitude=52.52&longitude=13.41¤t=temperature_2m,wind_speed_10m'const res = await fetch("https://api.open-meteo.com/v1/forecast?latitude=52.52&longitude=13.41¤t=temperature_2m,wind_speed_10m");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://api.open-meteo.com/v1/forecast?latitude=52.52&longitude=13.41¤t=temperature_2m,wind_speed_10m", timeout=20)
res.raise_for_status()
print(res.json()){
"latitude": 52.52,
"longitude": 13.419998,
"generationtime_ms": 0.07152557373046875,
"utc_offset_seconds": 0,
"timezone": "GMT",
"timezone_abbreviation": "GMT",
"elevation": 38.0,
"current_units": {
"time": "iso8601",
"interval": "seconds",
"temperature_2m": "°C",
"wind_speed_10m": "km/h"
},
"current": {
"time": "2026-08-19T13:00",
"interval": 900,
"temperature_2m": 19.0,
"wind_speed_10m": 8.8
}
}Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
latitude | float | Required | Latitude in WGS84 decimal degrees. Required. 52.52 |
longitude | float | Required | Longitude in WGS84 decimal degrees. Required. 13.41 |
current | string | Optional | Comma-separated list of variables to return for right now. temperature_2m,wind_speed_10m |
hourly | string | Optional | Comma-separated hourly variables, returned for 7 days by default. temperature_2m,precipitation |
daily | string | Optional | Comma-separated daily aggregates. Needs a timezone to be meaningful. temperature_2m_max,sunrise |
timezone | string | Optional | IANA timezone, or `auto` to infer it from the coordinates. auto |
forecast_days | integer | Optional | How many days ahead to forecast, 1 to 16. Defaults to 7. 3 |
Response fields
latitude / longitudefloat- The grid point actually used, which is snapped to the model grid and so differs slightly from what you requested.
timezonestring- Resolved timezone name for the returned timestamps.
currentobject- Object holding one key per variable you requested, plus a `time` stamp.
current_unitsobject- The unit string for each variable in `current` — read this rather than assuming Celsius.
elevationfloat- Elevation in metres of the model grid cell, useful for sanity-checking mountain forecasts.
What you can build with the Open-Meteo API
- Show a live weather widget on a dashboard or homepage without managing an API key
- Build a 7-day forecast screen in a mobile or web app
- Trigger automations from weather conditions, such as irrigation or delivery scheduling
- Backfill weather context into analytics using the companion historical archive API
- Teach HTTP and JSON parsing in a classroom, where handing out API keys is impractical
Common errors and how to fix them
400
A required parameter is missing or malformed — usually `latitude`/`longitude` absent or non-numeric.
Fix: Check both coordinates are present and sent as plain decimals, not strings with degree symbols.
400 + `Cannot initialize ... from invalid String value`
A variable name in `hourly`/`daily`/`current` is misspelled.
Fix: Compare the variable name against the docs; names are snake_case such as `temperature_2m`.
429
Daily request allowance for your IP is exhausted.
Fix: Cache responses — forecasts update hourly at best, so caching for 15-60 minutes is safe and removes most traffic.
Open-Meteo API — frequently asked questions
Is the Open-Meteo API really free with no API key?
Yes. Open-Meteo requires no registration or key for its forecast endpoints, and permits commercial use below roughly 10,000 requests per day. Above that you are expected to move to a paid plan.
How accurate is Open-Meteo?
It aggregates output from national weather models such as NOAA GFS, DWD ICON and Meteo-France ARPEGE, selecting the highest-resolution model available for each location. Accuracy is comparable to paid consumer weather APIs because the underlying models are the same.
Can I call Open-Meteo directly from browser JavaScript?
Yes. The API sends permissive CORS headers, so a plain fetch() from front-end code works without a proxy. Because there is no key, there is also no secret to leak by doing so.
How far ahead can Open-Meteo forecast?
Up to 16 days with the `forecast_days` parameter, though skill drops sharply after about 7 days. A separate historical archive API covers dates back to 1940.
Tools that pair with this API
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
Unit Converter
Convert between units of length, weight, temperature, area, volume, speed, time and data storage instantly, with a swap button and common conversion tables.
Timestamp Converter
Convert timestamps to human-readable dates and dates back to timestamps. Auto-detects seconds vs milliseconds, shows local, UTC and ISO 8601 formats.
Open-Meteo is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-19; always check the official documentation before relying on this API in production, as terms and limits can change.