breezeweather

Docs

Every endpoint is a GET with query parameters, except batch and webhooks. Responses are JSON. The base URL is https://api.breezeweather.com; the same reference, interactive, lives at https://api.breezeweather.com/docs.

Authentication

Send your key as X-API-Key or Authorization: Bearer. Keys never go in the query string.

curl "https://api.breezeweather.com/current?lat=40.7128&lon=-74.006" -H "X-API-Key: bw_..."

Locations

Pass lat and lon, a locationId from an earlier response, or a place name with location= or city=&state=&country=. US points come from the National Weather Service, Canadian points from Environment Canada, and everywhere else from MET Norway. History comes from NOAA NCEI stations worldwide, Environment Canada's climate archive in Canada, and Open-Meteo's ERA5 reanalysis where no station is near. Alerts come from the National Weather Service, Environment Canada and, across Europe, Meteoalarm. Every response names its source.

Parameters every weather endpoint accepts

units=metric|imperial|standard|si picks the unit system; every response carries a units object saying what you got. timezone=local returns timestamps in the location's zone. fields= and excludeFields= trim the payload.

ParameterTypeDefault
locationIdstringA locationId from a previous response
latnumberLatitude
lonnumberLongitude
locationstringFree-text place name, e.g. 'Toronto, ON'
citystringCity name, with state and country
statestringState or province code
countrystringISO 3166-1 alpha-2
unitsmetric | imperial | standard | simetricUnit system for measurements
timezonestringUTCUTC or the location's local time
fieldsstringComma-separated fields to include
excludeFieldsstringComma-separated fields to omit
langstringenLanguage for text (only en is available)

Weather

GET/currentCurrent conditions
Response fields
astronomyAstronomyOut
cloudCoverinteger
dewPointnumber
feelsLikenumber
humidityinteger
locationLocationInfo
observationTimedate-time
precipitationnumber
precipitationProbabilityinteger
pressurenumber
pressureSeaLevelnumber
rainnumber
snownumber
sourceSourceOut
stationIdstring
temperaturenumber
temperatureMaxnumber
temperatureMinnumber
unitsUnits
uvIndexnumber
visibilitynumber
weatherCodeinteger
weatherDescriptionstring
weatherIconstring
weatherMainstring
windDirectionnumber
windDirectionCompassstring
windGustnumber
windSpeednumber
GET/forecast/dailyDaily forecast
ParameterTypeDefault
daysinteger7Days to return, 1 to 14
Response fields
forecastDailyForecastOut[]
locationLocationInfo
sourceSourceOut
unitsUnits
GET/forecast/hourlyHourly forecast
ParameterTypeDefault
hoursinteger48Hours to return, 1 to 168
Response fields
forecastHourlyForecastOut[]
locationLocationInfo
sourceSourceOut
unitsUnits
GET/alerts/activeActive alerts
ParameterTypeDefault
severitystring[]Keep only these severities: extreme, severe, moderate, minor
urgencystring[]Keep only these urgencies: immediate, expected, future, past
Response fields
alertsWeatherAlert[]
locationLocationInfo
sourceSourceOut
GET/historical/dailyPast days, aggregated from station observations
ParameterTypeDefault
date*stringFirst day, YYYY-MM-DD
endDatestringYYYY-MM-DD, inclusive
pageinteger1Page number
pageSizeinteger50Rows per page
Response fields
dataHistoricalDaily[]
locationLocationInfo
paginationPagination
sourceSourceOut
unitsUnits
GET/historical/hourlyPast hourly station observations
ParameterTypeDefault
startDateTime*stringISO 8601 date-time
endDateTime*stringISO 8601 date-time; at most 7 days after the start
pageinteger1Page number
pageSizeinteger50Rows per page
Response fields
dataHistoricalHourly[]
locationLocationInfo
paginationPagination
sourceSourceOut
unitsUnits
POST/batchSeveral locations in one call
Response fields
resultsBatchResult[]
GET/airqualityAir quality (not offered yet)
GET/forecast/minutelyMinutely precipitation (not offered)

Locations

GET/locations/searchFind places by name
ParameterTypeDefault
q*stringPlace name to search for
limitinteger10Maximum results
countrystringRestrict to a country, ISO 3166-1 alpha-2
Response fields
locationsLocationOut[]
GET/locations/geocodeDescribe a coordinate
ParameterTypeDefault
lat*numberLatitude
lon*numberLongitude
Response fields
countrystring
countryNamestring
elevationnumberMetres above sea level
idstring
latitudenumber
localNamestring
longitudenumber
namestring
populationinteger
statestring
stateNamestring
timezonestring
GET/locations/{location_id}Look up a locationId
ParameterTypeDefault
location_id*string
Response fields
countrystring
countryNamestring
elevationnumberMetres above sea level
idstring
latitudenumber
localNamestring
longitudenumber
namestring
populationinteger
statestring
stateNamestring
timezonestring

Alert webhooks

GET/webhooks/subscriptionsList subscriptions
POST/webhooks/subscriptionsSubscribe to alerts
Response fields
createdAtdate-time
eventsstring[]
idstring
locationsLocationInfo[]
statusstring
thresholdsThresholds
updatedAtdate-time
urlstring
DELETE/webhooks/subscriptions/{subscription_id}Delete a subscription
ParameterTypeDefault
subscription_id*string
GET/webhooks/subscriptions/{subscription_id}Get a subscription
ParameterTypeDefault
subscription_id*string
Response fields
createdAtdate-time
eventsstring[]
idstring
locationsLocationInfo[]
statusstring
thresholdsThresholds
updatedAtdate-time
urlstring

Rate limits and errors

Every response includes X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset. Past the limit you get 429 with Retry-After. Errors always have one shape:

{ "error": { "code": "location_not_found", "message": "no location matched the query", "details": {} } }
codestring
detailsDetails
messagestring

Caching and freshness

Current conditions refresh every 10 minutes, forecasts hourly, alerts every 5 minutes. Responses carry Cache-Control, Last-Modified and ETag; send If-None-Match to get a 304 when nothing changed. If an upstream service fails you get the last good data with source.stale: true. Please credit the source named in each response: NOAA/NWS, Environment and Climate Change Canada, or MET Norway (CC BY 4.0).