WeatherRecall API
Free JSON endpoint for querying historical weather data for any location and date worldwide.
Overview
The WeatherRecall API lets you fetch historical weather probability data for any date and geographic location. Data is sourced from the Open-Meteo Archive API (ERA5 reanalysis) and processed into probability distributions and yearly breakdowns.
The API is currently free to use without authentication. Please keep usage reasonable — heavy automated crawling may be rate-limited.
https://weatherrecall.org/api/v1/weather
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
lat | number | Yes | Latitude (-90 to 90). E.g. 52.37 |
lng | number | Yes | Longitude (-180 to 180). E.g. 4.89 |
date | string | Yes | Month and day in MM-DD format. E.g. 06-15 for June 15th. |
years | integer | No | How many years back to query. Default: 5. Max: 20. |
Example request
GET /api/v1/weather?lat=52.37&lng=4.89&date=06-15&years=10
Try it live
Example response
{
"location": { "lat": 52.37, "lng": 4.89 },
"date": "06-15",
"years_queried": 10,
"years_found": 10,
"averages": {
"temp_max_c": 20.4,
"temp_min_c": 12.1,
"precipitation_mm": 2.3
},
"probabilities": [
{ "weather": "Partly cloudy", "count": 4, "percentage": 40 },
{ "weather": "Clear sky", "count": 3, "percentage": 30 },
{ "weather": "Light rain", "count": 2, "percentage": 20 },
{ "weather": "Overcast", "count": 1, "percentage": 10 }
],
"yearly_results": [
{ "year": 2024, "wmo_code": 2, "weather": "Partly cloudy", "temp_max": 21.3, "temp_min": 12.8, "precipitation_mm": 0 },
{ "year": 2023, "wmo_code": 0, "weather": "Clear sky", "temp_max": 22.1, "temp_min": 11.6, "precipitation_mm": 0 }
]
}
Response fields
| Field | Description |
|---|---|
location | The requested coordinates |
date | The queried date (MM-DD) |
years_queried | Number of years requested |
years_found | Number of years where data was available |
averages.temp_max_c | Average maximum temperature in °C across all years |
averages.temp_min_c | Average minimum temperature in °C across all years |
averages.precipitation_mm | Average precipitation in mm |
probabilities | Array of weather types with count and percentage |
yearly_results | Per-year breakdown with WMO code, label, temperature and precipitation |
WMO weather codes
The wmo_code field uses the standard WMO weather interpretation codes as defined by Open-Meteo. Common values:
| Code | Weather |
|---|---|
| 0 | Clear sky |
| 1–2 | Partly cloudy |
| 3 | Overcast |
| 45–48 | Fog |
| 51–55 | Drizzle |
| 61–65 | Rain (light to heavy) |
| 71–75 | Snow (light to heavy) |
| 80–82 | Rain showers |
| 95 | Thunderstorm |
| 96–99 | Thunderstorm with hail |
Data source
Weather data is provided by Open-Meteo using ERA5 reanalysis data from the European Centre for Medium-Range Weather Forecasts (ECMWF). Data coverage spans from 1940 to present (with a few days delay).
Open-Meteo is open-source and free for non-commercial use. WeatherRecall's API layer adds the date-based probability aggregation, yearly breakdown, and label mapping on top of the raw data.
Usage example (JavaScript)
const response = await fetch(
'https://weatherrecall.org/api/v1/weather?lat=48.85&lng=2.35&date=07-14&years=10'
);
const data = await response.json();
console.log('Most likely weather:', data.probabilities[0].weather);
console.log('Average max temp:', data.averages.temp_max_c + '°C');
Usage example (Python)
import requests
r = requests.get('https://weatherrecall.org/api/v1/weather', params={
'lat': 48.85, 'lng': 2.35, 'date': '07-14', 'years': 10
})
data = r.json()
for item in data['probabilities']:
print(f"{item['weather']}: {item['percentage']}%")
The WeatherRecall API is free to use for personal projects, research, and non-commercial applications. Please do not make more than 60 requests per minute. For high-volume use cases, consider using the Open-Meteo API directly. Attribution to WeatherRecall and Open-Meteo is appreciated.