Current Weather API
This API returns current conditions from sub-hourly reporting stations and atmospheric analyses. Each request returns the nearest and most recent data point.
This API returns current conditions from our network of sub-hourly reporting weather stations, as well as relevant atmospheric meso-analyses (For example, the RTMA). Every API request will return the nearest, and most recent observation.
Note: This API endpoint is designed specifically for retrieving current weather conditions only. It is not suitable for archiving data. If you attempt to archive data from this API, it may be incomplete, lack our data enrichment process, and be subject to potential inconsistencies. The data is only quality controlled with basic checks. Therefore, we do not provide any support or warranty for data archived locally using this endpoint. For the highest quality historical weather observations, please use our dedicated Historical Weather API.
Frequently Asked Questions
How frequently does current weather data update?
Current data updates as fast as it is reported, so timing depends on local coverage and source availability. In most areas updates are typically every 15 to 30 minutes, with radar and satellite refreshes often arriving every 10 to 15 minutes.
Read help articleWhen is data valid, and how are accumulated values computed?
Unless a field is documented otherwise, values are valid at the timestamp shown in the response. Accumulated fields such as precipitation and snowfall represent the aggregate for the interval from that timestamp, to the next timestamp. The same applies to averages, max/mins, etc.
Read help articleWhat does the `solar_rad` field represent?
The solar radiation field is an estimated surface solar flux value that accounts for cloud cover, surface albedo, and atmospheric effects. Alternatively, GHI/DNI/DHI values are clear-sky values which do not account for these.
Read help articleWhy is querying by station ID not recommended?
Some stations can move, stop reporting, or become unreliable while keeping the same identifier. For most integrations, we recommend more stable lookup methods such as lat/lon, postal code, or city ID.
Read help articleIs the Weatherbit API a geocoding or reverse geocoding service?
No. Geographic fields like city and state are returned for convenience, but the weather data represents the requested point and the place-name fields should not replace a dedicated geocoding service (ie. Google Maps, OpenStreetMap).
Read help articleWhere can I find city, postal codes, station IDs, and related lookup data?
We recommend lat/lon for the most accurate lookup, but alternate location methods are supported. The metadata resources are the place to find city codes, postal codes, and station IDs when you need them.
Read help articleWhere can I find weather condition icons and codes?
Condition codes are documented on the API codes page, and icon assets can be downloaded from the metadata resources. We also recommend hosting those icons locally rather than depending on the site asset path.
Read help articleAvailable Fields
| Field | Sources |
|---|---|
| Temperature | RTMA, stations, analysis |
| Apparent temperature | RTMA, stations, analysis |
| Sea level pressure | RTMA, stations, analysis |
| Station pressure | RTMA, stations, analysis |
| Dew point | RTMA, stations, analysis |
| Relative humidity | RTMA, stations, analysis |
| Wind speed | RTMA, stations, analysis |
| Wind direction | RTMA, stations, analysis |
| Wind gust | RTMA, stations, analysis |
| Visibility | RTMA, stations, analysis |
| Precipitation | stations, radar |
| Snowfall | stations, radar |
| Cloud cover | stations, satellite |
| Sunrise / sunset | |
| Solar radiation | RTMA, stations, analysis |
| GHI / DNI / DHI | RTMA, stations, analysis |
| UV index | RTMA, stations, analysis |
| Weather conditions | RTMA, stations, analysis |
| AQI | RTMA, stations, analysis |
Request Parameters
| Field | Optional/Required | Type | Data Type | Description |
|---|---|---|---|---|
lat
|
Optional | query | number | Latitude component of location. |
lon
|
Optional | query | number | Longitude component of location. |
city
|
Optional | query | string | City search.. Example - &city=Raleigh,NC or &city=Berlin,DE or city=Paris&country=FR |
postal_code
|
Optional | query | string | Postal Code. Example: 28546 |
country
|
Optional | query | string | Country Code (2 letter) - to be used with postal_code. |
station
|
Optional | query | string | Station Call ID. |
points
|
Optional | query | string | Comma separated list of points. Example: (35.5, -75.5),(45, 65),(45.12, -130.5) |
include
|
Optional | query | array<string> | Include optional current weather add-ons in the response. Accepts a comma separated list of minutely, lightning, and/or alerts. |
units
|
Optional | query | string | Convert to units. Default Metric. Options (I = Imperial, M = Metric, S = Scientific) |
lang
|
Optional | query | string | Language (Default: English) See language field description |
key
|
Required | query | string | Your registered API key. |
* One of the following location methods is required: lat/lon (recommended), city,ST + country, points, postal_code + country or station ID .
Example Requests
lat/lon (recommended)
https://api.weatherbit.io/v2.0/current?key=API_KEY&include=minutely&lat=35.7796&lon=-78.6382
curl -s "https://api.weatherbit.io/v2.0/current?key=API_KEY&include=minutely&lat=35.7796&lon=-78.6382"
require 'uri'
require 'net/http'
require 'json'
uri = URI("https://api.weatherbit.io/v2.0/current?key=API_KEY&include=minutely&lat=35.7796&lon=-78.6382")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = (uri.scheme == "https")
request = Net::HTTP::Get.new(uri)
response = http.request(request)
json = JSON.parse(response.body)
puts JSON.pretty_generate(json)
const https = require("https");
https.get("https://api.weatherbit.io/v2.0/current?key=API_KEY&include=minutely&lat=35.7796&lon=-78.6382", (res) => {
let raw = "";
res.on("data", (chunk) => { raw += chunk; });
res.on("end", () => {
const json = JSON.parse(raw);
console.log(JSON.stringify(json, null, 2));
});
}).on("error", (err) => {
console.error(err.message);
});
# pip install python-weatherbit
# https://pypi.org/project/pyweatherbit/
from weatherbit.api import Api
api = Api("YOUR_API_KEY")
response = api.get_current(lat='35.7796', lon='-78.6382').get()
print(response)
Example Response HTTP 200
{
"count": 1,
"data": [
{
"app_temp": 24.5,
"aqi": 34,
"city_name": "Raleigh",
"clouds": 25,
"country_code": "US",
"datetime": "2026-06-02:17",
"dewpt": 11.2,
"dhi": 124,
"dni": 931,
"elev_angle": 76.11,
"ghi": 1019,
"gust": 3.6,
"h_angle": 0,
"lat": 35.7796,
"lon": -78.6382,
"ob_time": "2026-06-02 16:50",
"pod": "d",
"precip": 0,
"pres": 1009.3,
"rh": 42,
"slp": 1023,
"snow": 0,
"solar_rad": 1011.7,
"sources": [
"1327W",
"radar",
"satellite"
],
"state_code": "NC",
"station": "1327W",
"sunrise": "09:58",
"sunset": "00:26",
"temp": 24.8,
"timezone": "America/New_York",
"ts": 1780419000,
"uv": 9,
"vis": 16,
"weather": {
"code": 801,
"description": "Few clouds",
"icon": "c02d"
},
"wind_cdir": "SSE",
"wind_cdir_full": "south-southeast",
"wind_dir": 148,
"wind_spd": 2.2
}
],
"minutely": [
{
"precip": 0,
"snow": 0,
"temp": 24.1,
"timestamp_local": "2026-06-02T13:19:00",
"timestamp_utc": "2026-06-02T17:19:00",
"ts": 1780420740
},
{
"precip": 0,
"snow": 0,
"temp": 24.1,
"timestamp_local": "2026-06-02T13:20:00",
"timestamp_utc": "2026-06-02T17:20:00",
"ts": 1780420800
},
{
"precip": 0,
"snow": 0,
"temp": 24.1,
"timestamp_local": "2026-06-02T13:21:00",
"timestamp_utc": "2026-06-02T17:21:00",
"ts": 1780420860
},
{
"precip": 0,
"snow": 0,
"temp": 24.1,
"timestamp_local": "2026-06-02T13:22:00",
"timestamp_utc": "2026-06-02T17:22:00",
"ts": 1780420920
},
{
"precip": 0,
"snow": 0,
"temp": 24.1,
"timestamp_local": "2026-06-02T13:23:00",
"timestamp_utc": "2026-06-02T17:23:00",
"ts": 1780420980
},
{
"precip": 0,
"snow": 0,
"temp": 24.1,
"timestamp_local": "2026-06-02T13:24:00",
"timestamp_utc": "2026-06-02T17:24:00",
"ts": 1780421040
},
{
"precip": 0,
"snow": 0,
"temp": 24.2,
"timestamp_local": "2026-06-02T13:25:00",
"timestamp_utc": "2026-06-02T17:25:00",
"ts": 1780421100
},
{
"precip": 0,
"snow": 0,
"temp": 24.2,
"timestamp_local": "2026-06-02T13:26:00",
"timestamp_utc": "2026-06-02T17:26:00",
"ts": 1780421160
},
{
"precip": 0,
"snow": 0,
"temp": 24.2,
"timestamp_local": "2026-06-02T13:27:00",
"timestamp_utc": "2026-06-02T17:27:00",
"ts": 1780421220
},
{
"precip": 0,
"snow": 0,
"temp": 24.2,
"timestamp_local": "2026-06-02T13:28:00",
"timestamp_utc": "2026-06-02T17:28:00",
"ts": 1780421280
},
{
"precip": 0,
"snow": 0,
"temp": 24.2,
"timestamp_local": "2026-06-02T13:29:00",
"timestamp_utc": "2026-06-02T17:29:00",
"ts": 1780421340
},
{
"precip": 0,
"snow": 0,
"temp": 24.2,
"timestamp_local": "2026-06-02T13:30:00",
"timestamp_utc": "2026-06-02T17:30:00",
"ts": 1780421400
},
{
"precip": 0,
"snow": 0,
"temp": 24.2,
"timestamp_local": "2026-06-02T13:31:00",
"timestamp_utc": "2026-06-02T17:31:00",
"ts": 1780421460
},
{
"precip": 0,
"snow": 0,
"temp": 24.3,
"timestamp_local": "2026-06-02T13:32:00",
"timestamp_utc": "2026-06-02T17:32:00",
"ts": 1780421520
},
{
"precip": 0,
"snow": 0,
"temp": 24.3,
"timestamp_local": "2026-06-02T13:33:00",
"timestamp_utc": "2026-06-02T17:33:00",
"ts": 1780421580
},
{
"precip": 0,
"snow": 0,
"temp": 24.3,
"timestamp_local": "2026-06-02T13:34:00",
"timestamp_utc": "2026-06-02T17:34:00",
"ts": 1780421640
},
{
"precip": 0,
"snow": 0,
"temp": 24.3,
"timestamp_local": "2026-06-02T13:35:00",
"timestamp_utc": "2026-06-02T17:35:00",
"ts": 1780421700
},
{
"precip": 0,
"snow": 0,
"temp": 24.3,
"timestamp_local": "2026-06-02T13:36:00",
"timestamp_utc": "2026-06-02T17:36:00",
"ts": 1780421760
},
{
"precip": 0,
"snow": 0,
"temp": 24.3,
"timestamp_local": "2026-06-02T13:37:00",
"timestamp_utc": "2026-06-02T17:37:00",
"ts": 1780421820
},
{
"precip": 0,
"snow": 0,
"temp": 24.3,
"timestamp_local": "2026-06-02T13:38:00",
"timestamp_utc": "2026-06-02T17:38:00",
"ts": 1780421880
},
{
"precip": 0,
"snow": 0,
"temp": 24.4,
"timestamp_local": "2026-06-02T13:39:00",
"timestamp_utc": "2026-06-02T17:39:00",
"ts": 1780421940
},
{
"precip": 0,
"snow": 0,
"temp": 24.4,
"timestamp_local": "2026-06-02T13:40:00",
"timestamp_utc": "2026-06-02T17:40:00",
"ts": 1780422000
},
{
"precip": 0,
"snow": 0,
"temp": 24.4,
"timestamp_local": "2026-06-02T13:41:00",
"timestamp_utc": "2026-06-02T17:41:00",
"ts": 1780422060
},
{
"precip": 0,
"snow": 0,
"temp": 24.4,
"timestamp_local": "2026-06-02T13:42:00",
"timestamp_utc": "2026-06-02T17:42:00",
"ts": 1780422120
},
{
"precip": 0,
"snow": 0,
"temp": 24.4,
"timestamp_local": "2026-06-02T13:43:00",
"timestamp_utc": "2026-06-02T17:43:00",
"ts": 1780422180
},
{
"precip": 0,
"snow": 0,
"temp": 24.4,
"timestamp_local": "2026-06-02T13:44:00",
"timestamp_utc": "2026-06-02T17:44:00",
"ts": 1780422240
},
{
"precip": 0,
"snow": 0,
"temp": 24.4,
"timestamp_local": "2026-06-02T13:45:00",
"timestamp_utc": "2026-06-02T17:45:00",
"ts": 1780422300
},
{
"precip": 0,
"snow": 0,
"temp": 24.4,
"timestamp_local": "2026-06-02T13:46:00",
"timestamp_utc": "2026-06-02T17:46:00",
"ts": 1780422360
},
{
"precip": 0,
"snow": 0,
"temp": 24.5,
"timestamp_local": "2026-06-02T13:47:00",
"timestamp_utc": "2026-06-02T17:47:00",
"ts": 1780422420
},
{
"precip": 0,
"snow": 0,
"temp": 24.5,
"timestamp_local": "2026-06-02T13:48:00",
"timestamp_utc": "2026-06-02T17:48:00",
"ts": 1780422480
},
{
"precip": 0,
"snow": 0,
"temp": 24.5,
"timestamp_local": "2026-06-02T13:49:00",
"timestamp_utc": "2026-06-02T17:49:00",
"ts": 1780422540
},
{
"precip": 0,
"snow": 0,
"temp": 24.5,
"timestamp_local": "2026-06-02T13:50:00",
"timestamp_utc": "2026-06-02T17:50:00",
"ts": 1780422600
},
{
"precip": 0,
"snow": 0,
"temp": 24.5,
"timestamp_local": "2026-06-02T13:51:00",
"timestamp_utc": "2026-06-02T17:51:00",
"ts": 1780422660
},
{
"precip": 0,
"snow": 0,
"temp": 24.5,
"timestamp_local": "2026-06-02T13:52:00",
"timestamp_utc": "2026-06-02T17:52:00",
"ts": 1780422720
},
{
"precip": 0,
"snow": 0,
"temp": 24.5,
"timestamp_local": "2026-06-02T13:53:00",
"timestamp_utc": "2026-06-02T17:53:00",
"ts": 1780422780
},
{
"precip": 0,
"snow": 0,
"temp": 24.6,
"timestamp_local": "2026-06-02T13:54:00",
"timestamp_utc": "2026-06-02T17:54:00",
"ts": 1780422840
},
{
"precip": 0,
"snow": 0,
"temp": 24.6,
"timestamp_local": "2026-06-02T13:55:00",
"timestamp_utc": "2026-06-02T17:55:00",
"ts": 1780422900
},
{
"precip": 0,
"snow": 0,
"temp": 24.6,
"timestamp_local": "2026-06-02T13:56:00",
"timestamp_utc": "2026-06-02T17:56:00",
"ts": 1780422960
},
{
"precip": 0,
"snow": 0,
"temp": 24.6,
"timestamp_local": "2026-06-02T13:57:00",
"timestamp_utc": "2026-06-02T17:57:00",
"ts": 1780423020
},
{
"precip": 0,
"snow": 0,
"temp": 24.6,
"timestamp_local": "2026-06-02T13:58:00",
"timestamp_utc": "2026-06-02T17:58:00",
"ts": 1780423080
},
{
"precip": 0,
"snow": 0,
"temp": 24.6,
"timestamp_local": "2026-06-02T13:59:00",
"timestamp_utc": "2026-06-02T17:59:00",
"ts": 1780423140
},
{
"precip": 0,
"snow": 0,
"temp": 24.6,
"timestamp_local": "2026-06-02T14:00:00",
"timestamp_utc": "2026-06-02T18:00:00",
"ts": 1780423200
},
{
"precip": 0,
"snow": 0,
"temp": 24.7,
"timestamp_local": "2026-06-02T14:01:00",
"timestamp_utc": "2026-06-02T18:01:00",
"ts": 1780423260
},
{
"precip": 0,
"snow": 0,
"temp": 24.7,
"timestamp_local": "2026-06-02T14:02:00",
"timestamp_utc": "2026-06-02T18:02:00",
"ts": 1780423320
},
{
"precip": 0,
"snow": 0,
"temp": 24.7,
"timestamp_local": "2026-06-02T14:03:00",
"timestamp_utc": "2026-06-02T18:03:00",
"ts": 1780423380
},
{
"precip": 0,
"snow": 0,
"temp": 24.7,
"timestamp_local": "2026-06-02T14:04:00",
"timestamp_utc": "2026-06-02T18:04:00",
"ts": 1780423440
},
{
"precip": 0,
"snow": 0,
"temp": 24.7,
"timestamp_local": "2026-06-02T14:05:00",
"timestamp_utc": "2026-06-02T18:05:00",
"ts": 1780423500
},
{
"precip": 0,
"snow": 0,
"temp": 24.7,
"timestamp_local": "2026-06-02T14:06:00",
"timestamp_utc": "2026-06-02T18:06:00",
"ts": 1780423560
},
{
"precip": 0,
"snow": 0,
"temp": 24.7,
"timestamp_local": "2026-06-02T14:07:00",
"timestamp_utc": "2026-06-02T18:07:00",
"ts": 1780423620
},
{
"precip": 0,
"snow": 0,
"temp": 24.7,
"timestamp_local": "2026-06-02T14:08:00",
"timestamp_utc": "2026-06-02T18:08:00",
"ts": 1780423680
},
{
"precip": 0,
"snow": 0,
"temp": 24.7,
"timestamp_local": "2026-06-02T14:09:00",
"timestamp_utc": "2026-06-02T18:09:00",
"ts": 1780423740
},
{
"precip": 0,
"snow": 0,
"temp": 24.7,
"timestamp_local": "2026-06-02T14:10:00",
"timestamp_utc": "2026-06-02T18:10:00",
"ts": 1780423800
},
{
"precip": 0,
"snow": 0,
"temp": 24.7,
"timestamp_local": "2026-06-02T14:11:00",
"timestamp_utc": "2026-06-02T18:11:00",
"ts": 1780423860
},
{
"precip": 0,
"snow": 0,
"temp": 24.8,
"timestamp_local": "2026-06-02T14:12:00",
"timestamp_utc": "2026-06-02T18:12:00",
"ts": 1780423920
},
{
"precip": 0,
"snow": 0,
"temp": 24.8,
"timestamp_local": "2026-06-02T14:13:00",
"timestamp_utc": "2026-06-02T18:13:00",
"ts": 1780423980
},
{
"precip": 0,
"snow": 0,
"temp": 24.8,
"timestamp_local": "2026-06-02T14:14:00",
"timestamp_utc": "2026-06-02T18:14:00",
"ts": 1780424040
},
{
"precip": 0,
"snow": 0,
"temp": 24.8,
"timestamp_local": "2026-06-02T14:15:00",
"timestamp_utc": "2026-06-02T18:15:00",
"ts": 1780424100
},
{
"precip": 0,
"snow": 0,
"temp": 24.8,
"timestamp_local": "2026-06-02T14:16:00",
"timestamp_utc": "2026-06-02T18:16:00",
"ts": 1780424160
},
{
"precip": 0,
"snow": 0,
"temp": 24.8,
"timestamp_local": "2026-06-02T14:17:00",
"timestamp_utc": "2026-06-02T18:17:00",
"ts": 1780424220
},
{
"precip": 0,
"snow": 0,
"temp": 24.8,
"timestamp_local": "2026-06-02T14:18:00",
"timestamp_utc": "2026-06-02T18:18:00",
"ts": 1780424280
}
]
}
HTTP Statuses
| Code | Description | Example |
|---|---|---|
| 200 | An Observation Group object. | - |
| 204 | No Data Found | - |
| 400 | Client Error |
|
| 403 | Unauthorized/No Access for current plan level |
|
| 429 | Daily or Velocity limit exceeded See rate limit guidance. |
|
| 500 | Internal Server Error |
|
Return Fields
| Field | Data Type | Description |
|---|---|---|
count
|
integer | Count of found observations |
data
|
array<CurrentObs> | |
data[].city_name
|
string | Nearest city name |
data[].state_code
|
string | State abbreviation |
data[].country_code
|
string | Country abbreviation |
data[].timezone
|
string | Local IANA time zone |
data[].lat
|
number | Latitude |
data[].lon
|
number | Longitude |
data[].station
|
string | [DEPRECATED] Deprecated - Deprecated - 'sources' |
data[].sources
|
array<string> | List of data sources used in response |
data[].vis
|
number | Visibility - default (KM) |
data[].rh
|
integer | Relative humidity (%) |
data[].dewpt
|
number | Dew point temperature - default (C) |
data[].wind_dir
|
integer | Wind direction (degrees) - Degrees clockwise from 0 = North |
data[].wind_cdir
|
string | Cardinal wind direction |
data[].wind_cdir_full
|
string | Cardinal wind direction (text) |
data[].wind_spd
|
number | 10m wind speed - Default (m/s) |
data[].gust
|
['number', 'null'] | Wind gust speed - Default (m/s) |
data[].temp
|
number | Temperature - Default (C) |
data[].app_temp
|
number | Apparent temperature- Same as Feels-Like or Heat + Wind Chill Indices - Default (C) |
data[].clouds
|
integer | Cloud cover (%) |
data[].weather
|
object | |
data[].weather.icon
|
string | Icon code for forecast image display |
data[].weather.code
|
integer | Weather Condition code |
data[].weather.description
|
string | Weather Condition description |
data[].datetime
|
string | [DEPRECATED] Deprecated - use 'ob_time' |
data[].ob_time
|
string | Full time (UTC) of observation (YYYY-MM-DD HH:MM) |
data[].ts
|
number | Unix Timestamp |
data[].sunrise
|
['string', 'null'] | Time (UTC) of Sunrise (HH:MM) |
data[].sunset
|
['string', 'null'] | Time (UTC) of Sunset (HH:MM) |
data[].slp
|
number | Mean sea level pressure in millibars (mb) |
data[].pres
|
number | Pressure (mb) |
data[].aqi
|
number | Air quality index (US EPA standard 0 to +500) |
data[].uv
|
number | UV Index (0-11+) |
data[].solar_rad
|
number | Estimated solar radiation (W/m^2) - Accounts for cloud cover, and other factors. |
data[].ghi
|
number | Global horizontal irradiance (W/m^2) |
data[].dni
|
number | Direct normal irradiance (W/m^2) |
data[].dhi
|
number | Diffuse horizontal irradiance (W/m^2) |
data[].elev_angle
|
number | Current solar elevation angle (Degrees) |
data[].hour_angle
|
['number', 'null'] | [DEPRECATED] Current solar hour angle (Degrees) |
data[].h_angle
|
['number', 'null'] | [DEPRECATED] Deprecated - use 'hour_angle' |
data[].pod
|
string | Part of the day (d = day, n = night) |
data[].precip
|
number | Precipitation rate - Default (mm/hr) |
data[].snow
|
number | Snowfall rate - Default (mm/hr) |
minutely
|
array<FCMinutelyOb> | Optional minutely precipitation and temperature series when include=minutely. |
minutely[].timestamp_utc
|
string | Full time (UTC) of forecast point (YYYY-MM-DD HH:MM) |
minutely[].timestamp_local
|
string | Full local time of forecast point (YYYY-MM-DD HH:MM) |
minutely[].ts
|
number | Unix Timestamp |
minutely[].precip
|
number | Precipitation rate - Default (mm/hr) |
minutely[].temp
|
number | Temperature - Default (C) |
minutely[].snow
|
number | Snowfall rate - Default (mm/hr) |
alerts
|
array<WeatherAlertGroup> | Optional severe weather alerts array when include=alerts. |
lightning
|
array<LightningObs> | Optional nearby lightning observations array when include=lightning. |