Open-Meteo is a free weather API: pass a latitude and longitude, list the variables you want, and get JSON back. No key and no signup for non-commercial use. Every example below runs as-is.
None for non-commercial use (roughly 10,000 calls/day). Commercial use needs a paid plan and an apikey parameter on the customer- hosts.
Full reference: https://open-meteo.com/en/docs
Pick variables with current=. Here, New York in °F. weather_code is a WMO code (3 = overcast).
curl "https://api.open-meteo.com/v1/forecast?latitude=40.71&longitude=-74.01¤t=temperature_2m,wind_speed_10m,weather_code&temperature_unit=fahrenheit"
{
"latitude": 40.710335,
"longitude": -73.99308,
"generationtime_ms": 0.1779794692993164,
"utc_offset_seconds": 0,
"timezone": "GMT",
"timezone_abbreviation": "GMT",
"elevation": 27,
"current_units": {
"time": "iso8601",
"interval": "seconds",
"temperature_2m": "°F",
"wind_speed_10m": "km/h",
"weather_code": "wmo code"
},
"current": {
"time": "2026-09-23T20:15",
"interval": 900,
"temperature_2m": 68.4,
"wind_speed_10m": 26.5,
"weather_code": 3
}
}
Highs, lows, and rain chance for London over three days. Set timezone so days start at local midnight.
curl "https://api.open-meteo.com/v1/forecast?latitude=51.51&longitude=-0.13&daily=temperature_2m_max,temperature_2m_min,precipitation_probability_max&timezone=Europe/London&forecast_days=3"
{
"latitude": 51.51147,
"longitude": -0.13078308,
"generationtime_ms": 0.10848045349121094,
"utc_offset_seconds": 3600,
"timezone": "Europe/London",
"timezone_abbreviation": "GMT+1",
"elevation": 29,
"daily_units": {
"time": "iso8601",
"temperature_2m_max": "°C",
"temperature_2m_min": "°C",
"precipitation_probability_max": "%"
},
"daily": {
"time": [
"2026-09-23",
"2026-09-24",
"2026-09-25"
],
"temperature_2m_max": [
23.1,
22.4,
24.1
],
"temperature_2m_min": [
16.3,
13.7,
15.2
],
"precipitation_probability_max": [
0,
0,
0
]
}
}
The forecast endpoints need lat/long; the geocoding API turns a place name into them.
curl "https://geocoding-api.open-meteo.com/v1/search?name=Boulder&count=2&language=en&format=json"
{
"results": [
{
"id": 5574991,
"name": "Boulder",
"latitude": 40.01499,
"longitude": -105.27055,
"elevation": 1624,
"feature_code": "PPLA2",
"country_code": "US",
"timezone": "America/Denver",
"population": 106803,
"country": "United States",
"admin1": "Colorado",
"admin2": "Boulder"
},
{
"id": 5641473,
"name": "Boulder",
"latitude": 46.23659,
"longitude": -112.12083,
"elevation": 1496,
"feature_code": "PPLA2",
"country_code": "US",
"timezone": "America/Denver",
"population": 1207,
"country": "United States",
"admin1": "Montana",
"admin2": "Jefferson"
}
],
"generationtime_ms": 0.45394897
}
Past weather back to 1940 from the archive API — same parameters, plus start_date and end_date.
curl "https://archive-api.open-meteo.com/v1/archive?latitude=35.68&longitude=139.69&start_date=2025-01-01&end_date=2025-01-03&daily=temperature_2m_max,temperature_2m_min&timezone=Asia/Tokyo"
{
"latitude": 35.676624,
"longitude": 139.69112,
"generationtime_ms": 0.16248226165771484,
"utc_offset_seconds": 32400,
"timezone": "Asia/Tokyo",
"timezone_abbreviation": "GMT+9",
"elevation": 38,
"daily_units": {
"time": "iso8601",
"temperature_2m_max": "°C",
"temperature_2m_min": "°C"
},
"daily": {
"time": [
"2025-01-01",
"2025-01-02",
"2025-01-03"
],
"temperature_2m_max": [
11.2,
13.1,
6.2
],
"temperature_2m_min": [
4.2,
1.8,
2.5
]
}
}
US AQI and PM2.5 for Los Angeles from the air-quality API.
curl "https://air-quality-api.open-meteo.com/v1/air-quality?latitude=34.05&longitude=-118.24¤t=us_aqi,pm2_5"
{
"latitude": 34.1,
"longitude": -118.2,
"generationtime_ms": 0.44548511505126953,
"utc_offset_seconds": 0,
"timezone": "GMT",
"timezone_abbreviation": "GMT",
"elevation": 87,
"current_units": {
"time": "iso8601",
"interval": "seconds",
"us_aqi": "USAQI",
"pm2_5": "μg/m³"
},
"current": {
"time": "2026-09-23T20:00",
"interval": 3600,
"us_aqi": 73,
"pm2_5": 20.9
}
}