Basics
- Base URL:
https://www.wxdial.com/api/v1(HTTPS only). - Method: every endpoint is a read-only
GET. Responses are JSON (UTF-8). - Times are ISO 8601 with the offset of the response's time zone, e.g.
2026-10-22T14:40:00-07:00. Dates areyyyy-MM-dd. - Coordinates are decimal degrees (WGS 84): latitude −90…90, longitude −180…180.
- Missing values are
null: a station that doesn't measure something (many airports have no sun sensor) returnsnullfor it. - CORS: responses allow any origin, so you can call the API from a browser. Keep in mind that a key in browser code is visible to anyone; use a server where you can.
- Versioning: fields may be added to responses at any time; build your parser to ignore fields it doesn't know. Fields are not removed or renamed within v1.
Authentication
Every request needs an API key. Create keys on your account page (up to 5; a key is shown once, when you create it). Send it in a header:
X-API-Key: wxd_your_key
or, where you can't set headers, as a query parameter: ?key=wxd_your_key (less safe: URLs end up in logs and browser history).
A missing, wrong or revoked key gets 401. Revoke a key from your account page and it stops working immediately.
Units
Every weather endpoint accepts units:
| Value | Temperature | Wind | Pressure | Rain | Distance |
|---|---|---|---|---|---|
imperial (or us) | °F | mph | inHg (2 decimals) | inches (2 decimals) | miles |
metric (or si) | °C | km/h | hPa (1 decimal) | millimetres (1 decimal) | kilometres |
Without units, you get your account's default (set on your account page), which is imperial unless you change it.
Temperatures and wind are rounded to 1 decimal. Field names are the same in both systems, and responses include a units object saying which were used:
"units": { "system": "metric", "temperature": "°C", "wind": "km/h", "pressure": "hPa", "rain": "mm", "distance": "km", "timeZone": "America/Los_Angeles" }
Humidity is always %, wind direction degrees (0 = from the north, 90 = from the east), solar radiation W/m², and UV index the standard index.
Time zones
Every endpoint accepts tz, an IANA time zone name
such as America/New_York, Europe/London or Asia/Tokyo, or UTC. It decides:
- How times are written. Every time in the response is given in that zone, with its offset, including daylight saving time:
tz=America/Los_Angelesgives2026-10-22T14:40:00-07:00, andtz=UTCgives the same moment as2026-10-22T21:40:00+00:00. It's the same instant either way; only how it's written changes. - What "today" means in /observations: the
todayhigh and low cover the current calendar day in that zone. For a station's own local highs and lows, pass the station's zone (it's in each observation'stimeZonewhen known).
Without tz, you get your account's default time zone (set on your account page), which is UTC unless you change it.
The zone used is named in the response's units.timeZone. An unknown name gets 400.
A few things always follow the station's own day, whatever tz says: today in /home and the date of each
/home/history row (both are Venice Beach days), and today in /groups (each group's local day).
Their times are still written in your zone.
Station types and ids
A station is named by its type and id, joined with a vertical bar: Type|Id, e.g. Nws|KLAX.
That's the station value /stations returns, and what /observations takes. Types are case-insensitive.
You can also filter station searches by type with type=, or to government and airport stations only with official=true.
| Type | What it is | Official? | Id format | Example | Updates |
|---|---|---|---|---|---|
Nws | US airports and NWS stations, read through the National Weather Service (api.weather.gov). Includes today's high/low and readings since midnight. | Yes | 3–6 letters/digits (ICAO or NWS id) | Nws|KLAX | Hourly, plus special reports |
Metar | Airports outside the US, from their METAR reports (Aviation Weather Center). | Yes | 4-letter ICAO code | Metar|EGLL | Usually every 30–60 min |
EcSwob | Environment and Climate Change Canada surface weather stations. | Yes | 4–10 letters/digits (MSC id) | EcSwob|1108395 | Hourly or more often |
Dwd | Deutscher Wetterdienst stations in Germany (via Bright Sky). | Yes | 5 characters (DWD station id) | Dwd|01766 | 10–60 min |
Jma | Japan Meteorological Agency AMeDAS stations. | Yes | 5 digits | Jma|44132 | Every 10 min |
MetOffice | UK Met Office sites. These are identified by a geohash of their location. | Yes | 5–9 character geohash | MetOffice|gcpsvg | Hourly |
WeatherLinkPublic | Private Davis WeatherLink stations whose owners publish them. | No | UUID | WeatherLinkPublic|af6d41aa-1311-4e80-ac19-3392b726a06e | About every minute |
AmbientPublic | Private Ambient Weather stations whose owners publish them. | No | 32 hex characters | AmbientPublic|a29f0278cdfa90d2797a1ba2dd9657b3 | About every minute |
Aprs | Citizen Weather Observer Program (CWOP) stations heard over APRS-IS in the last 3 hours. | No | Callsign or CW number, optional SSID | Aprs|EW1234 | 5–15 min |
Self | WxDial's own solar-corrected Venice Beach station. The same data as /home, in observation form. | No | always self | Self|self | Every minute |
AmbientFeed | A private station WxDial follows by arrangement (shown on the WxDial home page). | No | as returned by /stations | About every 2 min |
Don't build ids by hand: find stations with /stations and use the station value it returns.
GET /stations
Finds stations. Give one of: q (a name or id), lat + lon (nearest first), or bbox (everything in a box).
| Parameter | Type | Default | Description |
|---|---|---|---|
q | text | Station name or id to match, e.g. KLAX or santa monica. At least 2 characters. | |
lat, lon | number | A point; returns the closest stations with their distance, nearest first. | |
bbox | text | west,south,east,north in decimal degrees, e.g. -119,33.5,-117.5,34.5. In very large boxes, private stations are thinned out. | |
type | text | all types | Only these station types, comma-separated: type=Nws,Metar. An unknown type gets 400. |
official | true/false | false | true: only government and airport stations (Nws, Metar, EcSwob, Dwd, Jma, MetOffice). |
limit | integer | 25 (bbox: 500) | Most results to return: up to 100 for q, 50 for lat/lon, 2,000 for bbox. |
units | text | account default | Unit of distance: miles (imperial) or km (metric). |
GET https://www.wxdial.com/api/v1/stations?lat=33.99&lon=-118.47&official=true&limit=2
[
{ "station": "Nws|KSMO", "type": "Nws", "id": "KSMO", "name": "Santa Monica Airport",
"latitude": 34.016, "longitude": -118.451, "distance": 2.3, "distanceUnit": "mi" },
{ "station": "Nws|KLAX", "type": "Nws", "id": "KLAX", "name": "Los Angeles Intl, CA",
"latitude": 33.938, "longitude": -118.387, "distance": 5.8, "distanceUnit": "mi" }
]
| Field | Description |
|---|---|
station | The value to pass to /observations. |
type, id | The two halves of station. |
name | Station name as its source publishes it (may be empty for some private stations). |
latitude, longitude | Station position. |
distance, distanceUnit | Distance from lat/lon; null for q and bbox searches. |
GET /observations
The latest observation from up to 10 stations in one request.
| Parameter | Type | Default | Description |
|---|---|---|---|
station | Type|Id | required | A station from /stations. Repeat for more: station=Nws|KLAX&station=Self|self. The | may be sent as %7C. |
tz | IANA time zone | account default (UTC) | The zone for all times, and which calendar day "today" means for the today high and low, e.g. America/Los_Angeles. See Time zones. |
units | text | account default | See Units. |
GET https://www.wxdial.com/api/v1/observations?station=Nws|KLAX&station=Self|self&tz=America/Los_Angeles
{
"units": { "system": "imperial", "temperature": "°F", "wind": "mph", "pressure": "inHg", "rain": "in", "distance": "mi", "timeZone": "America/Los_Angeles" },
"stations": [
{
"station": "Nws|KLAX",
"observation": {
"name": "Los Angeles International Airport", "source": "NWS", "id": "KLAX",
"latitude": 33.938, "longitude": -118.387, "timeZone": "America/Los_Angeles",
"updated": "2026-10-22T21:53:00-07:00", "sky": "PTCLDY",
"temperature": 66.0, "humidity": 70, "dewPoint": 55.9, "pressure": 29.96,
"windDirection": 250, "wind": 12.7, "windGust": null, "solarWm2": null, "uvIndex": null,
"rainRate": null, "rainToday": 0,
"today": { "high": 74.0, "highAt": "2026-10-22T14:53:00-07:00", "low": 61.0, "lowAt": "2026-10-22T06:53:00-07:00", "partialSince": null },
"climate": null, "error": null
},
"error": null
},
{ "station": "Self|self", "observation": { "name": "Venice Beach", "source": "WxDial", … }, "error": null }
]
}
Stations come back in the order you asked. Each has observation (see the observation object) or null with an
error: "Not an available station" (unknown type or bad id), "Station not found", "Source not responding" or
"Source is busy, retrying". One failing station doesn't fail the request; the call still counts as one request.
GET /places
Cities and towns with WxDial weather pages (14,000+): every place of 30,000+ people worldwide, and of 5,000+ in the US, Canada, the UK, Ireland, Australia and New Zealand.
Give q, or lat + lon, or country (optionally with region).
| Parameter | Type | Default | Description |
|---|---|---|---|
q | text | Name to match, e.g. elmira. Names starting with it come first, then by population. | |
lat, lon | number | Nearest places first (within 500 km), with distance. | |
country | text | Two-letter country code, e.g. US. | |
region | text | State or province: NY, ON, NSW (US, Canada, Australia). | |
limit | integer | 25 | Up to 200. |
GET https://www.wxdial.com/api/v1/places?q=elmira&country=US&limit=1
[ { "place": "elmira-ny-us", "name": "Elmira", "display": "Elmira, NY", "country": "US", "region": "NY",
"latitude": 42.0898, "longitude": -76.8077, "population": 28213, "timeZone": "America/New_York",
"url": "https://www.wxdial.com/weather/elmira-ny-us", "distance": null, "distanceUnit": null } ]
GET /forecast
The forecast and today's outlook for one location. Give one of place (from /places), station
(an official station: Nws|KELM, or just KELM) or lat + lon. Forecasts come from the National Weather Service in the US
and MET Norway elsewhere (credit "MET Norway" if you show them; CC BY 4.0).
| Parameter | Type | Default | Description |
|---|---|---|---|
place / station / lat+lon | one required | Where. | |
units, tz | account defaults | See Units and Time zones. |
GET https://www.wxdial.com/api/v1/forecast?place=elmira-ny-us&tz=America/New_York
{
"units": { "system": "imperial", "temperature": "°F", … },
"location": { "name": "Elmira, NY", "place": "elmira-ny-us", "station": null, "latitude": 42.0898, "longitude": -76.8077, "timeZone": "America/New_York",
"page": "https://www.wxdial.com/weather/elmira-ny-us" },
"source": "National Weather Service", "sourceUrl": "https://www.weather.gov",
"detailsUrl": "https://forecast.weather.gov/MapClick.php?lat=42.0898&lon=-76.8077", "radarUrl": "https://radar.weather.gov/station/kbgm/standard",
"alerts": [ { "event": "Frost Advisory", "headline": "Frost Advisory issued …", "severity": "Minor", "ends": "2026-10-27T09:00:00-04:00" } ],
"periods": [ { "name": "Today", "start": "2026-10-26T06:00:00-04:00", "isDaytime": true, "temperature": 64, "text": "Sunny",
"precipitationChance": null, "wind": "NW 5 to 10 mph", "detail": "Sunny, with a high near 64. …" }, … ],
"hourly": [ { "time": "2026-10-26T13:00:00-04:00", "temperature": 63, "precipitationChance": 0, "text": "Sunny" }, … ],
"sun": { "sunrise": "2026-10-26T07:32:00-04:00", "sunset": "2026-10-26T18:09:00-04:00", "daylightMinutes": 637 },
"today": { "station": "Elmira-Corning Rgnl, NY", "normalLow": 38, "normalHigh": 58, "recordLow": 20, "recordLowYears": [1976], "recordHigh": 82, "recordHighYears": [1963] },
"last24Hours": { "station": "Elmira-Corning Rgnl, NY", "readings": [ { "time": "…", "temperature": 52.0 }, … ] }
}
| Field | Description |
|---|---|
periods | Up to 14 day and night periods (7 days). temperature is the high (daytime) or low (night). detail is the NWS's own wording (US only).
precipitationChance in % (US only; null when not given). |
hourly | Up to 48 hours ahead. |
alerts | Active NWS watches, warnings and advisories (US; empty elsewhere), most severe first. |
sun | Today's sunrise and sunset (calculated; null during polar day or night). |
today | Normal and record low and high for today's date at the nearest US station with climate records; null elsewhere. |
last24Hours | Temperatures measured at the nearest NWS station (US); null elsewhere. |
GET /climate
Daily climate for a station: the 1991–2020 normal high and low and the record high and low (with every year it happened) for every day of the year, plus a summary
for each month. Available for US airport stations with 20+ years of daily records (see /climate/stations). With place or
lat+lon, the nearest such station within 150 km is used. Data: NOAA Regional Climate Centers (ACIS), refreshed monthly.
| Parameter | Type | Default | Description |
|---|---|---|---|
station / place / lat+lon | one required | Where (station=KELM or Nws|KELM). | |
month | 1–12 | all | Only this month (its summary and its days). |
day | 1–31 | all | Only this day of the month (with month: one date; the month summaries are left out). |
units | text | account default | °F or °C. |
GET https://www.wxdial.com/api/v1/climate?station=KELM&month=10&day=26
{
"units": { "system": "imperial", "temperature": "°F", … },
"station": { "station": "Nws|KELM", "id": "KELM", "name": "Elmira-Corning Rgnl, NY", "latitude": 42.16, "longitude": -76.89,
"url": "https://www.wxdial.com/station/nws/kelm/climate" },
"firstYear": 1948, "lastYear": 2026, "normalsPeriod": "1991-2020", "updated": "2026-10-26T…",
"source": "NOAA Regional Climate Centers, Applied Climate Information System (ACIS)",
"months": null,
"days": [ { "date": "10-26", "month": 10, "day": 26, "normalLow": 37, "normalHigh": 56,
"recordLow": 19, "recordLowYears": [1976, 1962], "recordHigh": 79, "recordHighYears": [1963] } ]
}
Without day, months lists each month: normalLow, normalHigh (averages of the daily normals), recordLow with
recordLowDate (MM-dd) and recordLowYears, and the same for recordHigh. Record years are newest first; ties list every year.
404: no station with records nearby; 503: the station's records are still being prepared.
GET /climate/stations
The stations that /climate covers: all of them (by id), or the nearest first with lat + lon (limit, default 25).
Each has station, id, name, position, firstYear, lastYear, hasNormals and the url of its climate page.
GET /regional
The closest official (government and airport) stations to a location that are reporting right now, nearest first, each with its latest
observation: what the live page's "Official regional weather" table shows. Give one of place, station
(that station is left out of the list) or lat + lon. Stations with nothing to report are skipped.
| Parameter | Type | Default | Description |
|---|---|---|---|
place / station / lat+lon | one required | Where. | |
limit | 1–20 | 20 | How many stations. |
units, tz | account defaults | See Units and Time zones. |
GET https://www.wxdial.com/api/v1/regional?station=KMDT&limit=3
{
"units": { "system": "imperial", … },
"location": { "name": "Harrisburg Intl, PA", "place": null, "station": "Nws|KMDT", "latitude": 40.1962, "longitude": -76.7725 },
"stations": [
{ "station": "Nws|KCXY", "name": "Harrisburg/Capital City Arpt, PA", "latitude": 40.2184, "longitude": -76.8552, "distance": 4.6,
"page": "https://www.wxdial.com/station/nws/kcxy", "observation": { "temperature": 47.0, "humidity": 71, … } }, …
]
}
Each call counts as one request, however many stations it returns. distance is in km or miles (see Units).
GET /radar
What's falling at a location right now, from WxDial's own radar with the precipitation type: the lower 48 US states every 4 minutes from NOAA's
Multi-Radar Multi-Sensor (MRMS) system, southern Canada every 6 minutes from Environment and Climate Change Canada's surface precipitation type, and
most of Europe every 10 minutes from EUMETNET OPERA's composite (CC BY 4.0). Give one of place, station or lat + lon. Also lists the frames of
the last two hours, for /radar/image.
GET https://www.wxdial.com/api/v1/radar?place=elmira-ny-us
{
"location": { "name": "Elmira, NY", "place": "elmira-ny-us", "station": null, "latitude": 42.0898, "longitude": -76.8077 },
"time": "2026-10-27T07:12:00-04:00",
"precipitation": { "type": "ice/mix", "intensity": "moderate", "dbz": "15–25", "estimated": true },
"note": "Ice/mix (freezing rain or sleet) is estimated from airport reports and NOAA model temperatures.",
"frames": [ { "time": "2026-10-27T06:16:00-04:00", "id": 1793096160000 }, …, { "time": "2026-10-27T07:12:00-04:00", "id": 1793099520000 } ],
"image": "https://www.wxdial.com/api/v1/radar/image?frame={id}&bbox={west},{south},{east},{north}&size={width},{height}",
"source": "NOAA Multi-Radar Multi-Sensor (MRMS) SeamlessHSR and PrecipFlag; colors and ice/mix estimate by WxDial"
}
| Field | Description |
|---|---|
precipitation.type | none, rain, snow, ice/mix (freezing rain or sleet) or hail.
Rain, snow and hail come from NOAA's PrecipFlag; ice/mix is WxDial's estimate (estimated: true): rain where NOAA's model surface wet-bulb
temperature is at or below freezing, or near airports reporting freezing rain or drizzle, ice pellets or a rain–snow mix. In Canada, all types are
Environment Canada's own classes (its ice/mix is freezing rain or a rain–snow mix). In Europe the composite has strength only: the type is what the nearest
airport reports, else snow, ice/mix or rain by the nearest airport's wet-bulb temperature (snow at or below 0.5 °C, ice/mix to 1.5 °C). |
intensity, dbz | Echo strength band (radar reflectivity, dBZ). Rain: very light (5–20), light, moderate, heavy, very heavy, extreme (60+).
Snow and ice/mix: light (5–15), moderate, heavy, very heavy (35+). null for none and hail. In Canada, intensity is
Environment Canada's light, moderate or heavy and dbz is null. |
frames | About two hours of frames, oldest first (lower 48: up to 30, 4 minutes apart; Canada: 20, 6 minutes apart; Europe: 12, 10 minutes apart); id is the frame's time in milliseconds since 1970 (UTC). |
404: the location is outside WxDial's radar (NOAA's strength-only radar for Alaska, Hawaii, Puerto Rico and Guam isn't part of this API).
503: the radar is briefly unavailable.
GET /radar/image
One radar frame as a transparent PNG covering a box, in the same colors as WxDial's maps: rain green → yellow → red, snow light → dark blue, ice/mix pink, hail purple. The image is in plain latitude/longitude (EPSG:4326, equirectangular): stretch it over the box on your map. Every region is drawn in each image (the other regions' frames nearest the frame's time). Each image counts as one request. Images of Europe include EUMETNET OPERA data: credit "EUMETNET OPERA, CC BY 4.0" where you show them.
| Parameter | Type | Default | Description |
|---|---|---|---|
bbox | west,south,east,north | required | Decimal degrees; at most 120° × 80°. |
size | width,height | 800,600 | Pixels, each 10–1400. |
frame | number | newest | A frame id from /radar. |
GET https://www.wxdial.com/api/v1/radar/image?bbox=-80.5,39.5,-73.5,44.5&size=700,500
For an <img> tag, the key can go in the address as &key= (keep such pages private: the key is visible).
GET /home
Current conditions at WxDial's own station in Venice Beach, California, a block from the ocean. Its temperature is solar-corrected: the
sun-driven warm bias of the sensor is removed minute by minute (sensorTemperature is the uncorrected value). Updated every minute.
| Parameter | Description |
|---|---|
units | See Units. |
tz | Zone for the times in the response; see Time zones. today is always the Venice Beach day. |
{
"units": { "system": "imperial", … },
"station": "Venice Beach", "latitude": 33.985905, "longitude": -118.471176, "timeZone": "America/Los_Angeles",
"observed": "2026-10-22T21:33:04-07:00", "updated": "2026-10-22T21:33:04-07:00",
"temperature": 70.1, "sensorTemperature": 70.4, "solarCorrection": 0.3,
"humidity": 78.6, "dewPoint": 63.1, "heatIndex": 70.1,
"wind": 2.2, "windAvg10": 2.2, "windGust10": 5.5, "windDirection": 297,
"pressure": 29.96, "pressureTrend3h": 0.01,
"solarWm2": 0, "uvIndex": 0, "sky": "CLEAR",
"rain": { "today": 0, "rate": 0, "month": 0.6, "rainYear": 0.6 },
"storm": { "inProgress": false, "total": 0.54, "start": "2026-10-19T…", "end": "2026-10-20T…" },
"today": { "high": 77.4, "highAt": "2026-10-22T14:40:00-07:00", "low": 69.8, "lowAt": "2026-10-22T03:50:00-07:00" }
}
(Shown with tz=America/Los_Angeles.)
| Field | Description |
|---|---|
observed | When the station took the reading. |
updated | When WxDial last refreshed it. |
temperature | Solar-corrected air temperature. |
sensorTemperature | The sensor's own reading. |
solarCorrection | How much was taken off (°F or °C, 0 at night). |
dewPoint, heatIndex | Computed from the corrected temperature and humidity. |
wind | Latest wind speed. |
windAvg10, windGust10 | The 10-minute average and the highest gust in the last 10 minutes. |
pressureTrend3h | Change in sea-level pressure over the last 3 hours (positive = rising). |
sky | Sky estimated from the sun sensor and nearby reports; see codes. May be null. |
rain.today, rain.rate | Since local midnight, and the current rate per hour. |
rain.month, rain.rainYear | This calendar month, and the rain season (WeatherLink's rain year for the station). |
storm | The storm in progress (inProgress: true), or the last one. null if none is known. |
today | Today's (local day) corrected high and low, with times. |
GET /home/history
One row per completed day at Venice Beach, oldest first. Records start on August 15, 2026.
| Parameter | Type | Description |
|---|---|---|
from, to | date | Optional inclusive range, yyyy-MM-dd. |
units | text | See Units. |
tz | IANA time zone | Zone for lowAt/highAt; see Time zones. Each row is still one Venice Beach calendar day. |
{ "units": { … }, "days": [
{ "date": "2026-10-21", "low": 63.3, "lowAt": "…", "high": 77.4, "highAt": "…", "sensorLow": 63.3, "sensorHigh": 78.9, "rain": 0.6 }
] }
low/high are solar-corrected; sensorLow/sensorHigh are the sensor's own. rain is the day's total; null if unknown.
GET /groups
The station groups shown on the WxDial home page (for example "Around the area"), each with its stations' latest observations, including normals and records for the day where available.
Parameters: units, tz (for the times; each group's today is its own local day).
{ "units": { … }, "groups": [ { "title": "Around the area", "timeZone": "America/Los_Angeles", "stations": [ { observation… }, … ] } ] }
GET /usage
Your plan, limits and usage. Free: this call doesn't count toward your limits.
{ "plan": "developer", "name": "API for Developers", "perMinute": 60, "perDay": 10000, "perMonth": 100000,
"overageBilled": true, "today": 1532, "thisMonth": 48210, "overagePending": 0,
"defaults": { "units": "imperial", "timeZone": "America/Chicago" } }
plan is personal, developer, business or custom. overagePending is requests over your allowance
not yet billed (paid plans). defaults are the units and time zone your account uses when a request doesn't give units or tz.
The observation object
| Field | Type | Description |
|---|---|---|
name | text | Station name. |
source | text | Where the data came from: NWS, METAR, Environment Canada, DWD, JMA, Met Office, WeatherLink, Ambient, APRS or WxDial. |
id | text | The station's id at its source. |
latitude, longitude | number | Station position, where known. |
timeZone | text | The station's IANA time zone, where known. |
updated | time | When the station made this observation. Check it: some sources go quiet for hours. |
sky | text | Sky or present weather, as a code; null if not reported. |
temperature | number | Air temperature. |
humidity | number | Relative humidity, %. |
dewPoint | number | Dew point. |
pressure | number | Sea-level pressure (altimeter setting at airports). |
windDirection | number | Direction the wind blows from, degrees. |
wind | number | Sustained wind speed. |
windGust | number | Gust speed, where reported. |
solarWm2 | number | Solar radiation, W/m². |
uvIndex | number | UV index. |
rainRate | number | Rain rate per hour. |
rainToday | number | Rain since local midnight (some sources: last hour or since the last report). |
today.high, today.low | number | Today's high and low, with highAt/lowAt. |
today.partialSince | time | Set when the high/low only covers part of the day: WxDial has been tracking the station only since this time. |
climate | object | US stations on the home page: normalLow, normalHigh, recordLow, recordHigh, and recordLowYears/recordHighYears (most recent first). Otherwise null. |
error | text | A note when the reading is incomplete. |
Sky and weather codes
sky uses short codes; new ones may appear, so show unknown codes as they are.
| Code | Meaning | Code | Meaning |
|---|---|---|---|
SUNNY | Sunny | LGT RAIN / RAIN / HVY RAIN | Light / moderate / heavy rain |
CLEAR | Clear (night) | LGT SHWR / SHOWERS / HVY SHWR | Showers |
FAIR | Fair | LGT DRZL / DRIZZLE / HVY DRZL | Drizzle |
MOSUNNY / MOCLEAR | Mostly sunny / mostly clear | TSTM / HVY TSTM; LGT TSTM RAIN / TSTM RAIN / HVY TSTM RAIN, TSTM SNOW, TSTM HAIL | Thunderstorm with nothing falling / severe; thunderstorm with light / moderate / heavy rain, with snow (thundersnow), with hail |
PTSUNNY / PTCLDY | Partly sunny / partly cloudy | LGT SNOW / SNOW / HVY SNOW | Snow |
MOCLDY | Mostly cloudy | FRZ RAIN / LGT FRZ RN | Freezing rain |
CLOUDY | Cloudy / overcast | SLEET, HAIL | Sleet, hail |
OBSCURED | Sky obscured | FOG, PATCHY FOG, FRZ FOG, MIST | Fog and mist |
WINDY | Windy | HAZE, SMOKE, DUST | Haze, smoke, dust |
Attribution
On the Personal (free) plan, wherever you show the data, show "Weather data: WxDial" near it, linked to https://www.wxdial.com or to
the matching WxDial page (location.page in /forecast, page in /regional). Without a
place for a link (print, screens, voice), the words alone are enough; you may qualify the link (rel="nofollow" is fine). Paid plans need no WxDial credit.
Every free-plan response includes X-Attribution: Weather data: WxDial (https://www.wxdial.com) as a reminder. Credit the original sources on every plan
(see API Terms).
<a href="https://www.wxdial.com/weather/elmira-ny-us">Weather data: WxDial</a>
Limits and headers
| Plan | Per minute | Per day | Per month | Over the daily or monthly allowance |
|---|---|---|---|---|
| Personal (free) | 30 | 300 | 3,000 | Refused with 429 |
| Developers | 60 | 10,000 | 100,000 | Allowed; $9 per 1,000 extra |
| Businesses | 120 | 100,000 | 1,000,000 | Allowed; $9 per 1,000 extra |
Every request counts as one, including requests refused for bad parameters, except /usage and requests refused with 429. Days and months are UTC.
The per-minute limit is a hard limit on every plan. Each response carries:
| Header | Meaning |
|---|---|
X-Plan | Your plan: personal, developer, business or custom. |
X-RateLimit-Limit | Requests allowed per minute. |
X-RateLimit-Remaining | Left in the current minute. |
X-Usage-Day, X-Usage-Month | used/allowance, e.g. 1532/10000. |
X-Usage-Overage | true when this request is over your allowance and will be billed. |
Retry-After | On 429: seconds to wait. |
Errors
Errors return JSON with an error message:
{ "error": "Unknown station type 'Bogus'. Types: Nws, Metar, EcSwob, Dwd, Jma, MetOffice, WeatherLinkPublic, AmbientPublic, Aprs, Self, AmbientFeed" }
| Status | When |
|---|---|
400 | A missing or invalid parameter (the message says which), e.g. an unknown tz or station type. |
401 | No API key, or the key is wrong or revoked. |
429 | Over the per-minute rate, or (Personal plan) the daily or monthly limit. Wait for Retry-After. |
503 | No data yet (for example, right after WxDial restarts). Try again in a minute. |
5xx | Something went wrong on our side. Retry with a pause; tell us if it continues. |
Freshness and good practice
- WxDial caches each station for roughly its source's update interval (one minute for private stations, five minutes for airports outside the US, up to an hour for the Met Office). Polling faster than that returns the same data and uses up requests.
- Always check
updated: a station that has stopped reporting keeps returning its last observation. - Ask for several stations in one
/observationscall rather than one call each. - Station lists change slowly: cache
/stationsresults for a day or more. - If you show the data publicly, credit its sources: National Weather Service, Aviation Weather Center, Environment and Climate Change Canada, Deutscher Wetterdienst, Japan Meteorological Agency, Met Office, WeatherLink, Ambient Weather or CWOP, plus WxDial.
- Data is provided as is, without warranty. See the API Terms.
Questions or something missing here? Contact us.