Historical weather

GET https://api.api.sh/weather/v1/history
1 credit / call public data try it in the playground →

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

nametypedescription
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"

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).

The fastest way to see the full response is the playground: it runs this endpoint with your account and shows the exact JSON.