Historical weather
Observed weather for past dates at the weather station nearest the location (within ~150 km) that has records for those dates. Daily (up to 366 days per call, records back to the 1800s at long-running stations): max/min/average temperature, precipitation, snowfall, snow depth, average and max wind, gusts, sunshine and weather types (fog, thunder, hail...). Hourly (up to 7 days): temperature, dew point, humidity, pressure, wind, gust, visibility, cloud ceiling, precipitation and the raw report. Returns the station (id, name, position, distance). Recent days arrive with a few days' delay. Source: NOAA NCEI (public domain).
Every response includes credits_used: the credits this call cost.
Parameters
| name | type | description |
|---|---|---|
lat | number | Latitude (-90 to 90). Pass with lon; or use q, postal_code or geonameid instead. |
lon | number | Longitude (-180 to 180). |
q | string | Place name in any language, optionally with region and country: Paris, Springfield, IL, US, München. The most populous match wins (towns of 1,000+ people). Example: Chicago |
postal_code | string | Postal code, with country (default US): 10001, SW1A 1AA + country=GB. |
country | string | Country for q or postal_code: ISO code (US, GB, DE) or English name. |
geonameid | integer | GeoNames id of a place (from /geo/v1/cities). |
start_date | string | First date (YYYY-MM-DD). Example: 2024-07-01 |
end_date | string | Last date (YYYY-MM-DD, default start_date). Example: 2024-07-07 |
date | string | One date (instead of start_date/end_date). |
granularity | daily | hourly | daily (default, up to 366 days) or hourly (up to 7 days). |
units | metric | imperial | si | metric (°C, km/h, mm, hPa, km; default), imperial (°F, mph, in, inHg, mi) or si (°C, m/s, mm, hPa, m). |
Every endpoint also takes fresh, raw, fields (see lean responses and caching).
Example
curl "https://api.api.sh/weather/v1/history" \
-H "x-api-key: $APISH_KEY" import os, requests
res = requests.get(
"https://api.api.sh/weather/v1/history",
params={},
headers={"x-api-key": os.environ["APISH_KEY"]},
timeout=120,
)
res.raise_for_status()
data = res.json() const url = new URL("https://api.api.sh/weather/v1/history");
const res = await fetch(url, { headers: { "x-api-key": process.env.APISH_KEY } });
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json(); Response
A JSON object with the fields described above, plus raw (the source's own data), cached, fetched_at and credits_used. Errors return {"success": false, "error": "…"} with the HTTP status (see errors). A lookup that ran but found nothing (404) costs the price above; refused calls and errors on our side are free (what's charged).