Hourly weather forecast
Hourly forecast for any place: time (UTC and local), condition (code, text, day or night), temperature, feels-like, dew point, humidity, sea-level pressure, wind speed, gust and direction, cloud cover (total, low, mid, high), fog, UV index, precipitation amount (with min/max) and its probability, thunder probability. 1-hour steps for about the next 2.5 days, then 6-hour steps up to 10 days (period_hours says which). Also includes the current hour. Data: MET Norway (CC BY 4.0).
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. Example: 40.7128 |
lon | number | Longitude (-180 to 180). Example: -74.006 |
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). |
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). |
hours | integer | Hours from now, 1-240 (default 48). Example: 48 |
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). |
lang | en | de | fr | es | it | pt | nl | Language of the condition texts: en (default), de, fr, es, it, pt, nl. |
Every endpoint also takes fresh, raw, fields (see lean responses and caching).
Example
curl "https://api.api.sh/weather/v1/hourly?lat=40.7128" \
-H "x-api-key: $APISH_KEY" import os, requests
res = requests.get(
"https://api.api.sh/weather/v1/hourly",
params={"lat": "40.7128"},
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/hourly");
url.searchParams.set("lat", "40.7128");
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).