{"openapi":"3.1.0","info":{"title":"Weatherbit Hazards (BYOK) API","version":"0.1.0","description":"Weatherbit Hazards (BYOK) lets an AI assistant read your own Weatherbit Hazards data through the Weatherbit Hazards API with a key you supply (API key). Read-only: 7 tools (get_weather_alerts, get_current_lightning, get_historical_lightning, get_climate_normals, get_minutely_forecast, get_subhourly_history, get_api_usage). The BYOK key travels with each request, is used for that one call only and...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-weatherbit-hazards.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-weatherbit-hazards/docs"},"termsOfService":"https://connectorbay.com/byok-weatherbit-hazards/terms"},"servers":[{"url":"https://byok-weatherbit-hazards.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-weatherbit-hazards/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_weather_alerts":{"post":{"operationId":"get_weather_alerts","summary":"Get active severe weather alerts for a place (NOAA in the USA, Meteoalarm in Europe, the UK and Israel, Environment Cana","description":"Get active severe weather alerts for a place (NOAA in the USA, Meteoalarm in Europe, the UK and Israel, Environment Canada, China): title, severity, validity times and regions. Text is often in the local language. Use for \"Are there any severe weather alerts at latitude 40.09, longitude -108.80\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"anyOf":[{"maximum":90,"minimum":-90,"type":"number"},{"type":"null"}],"default":null,"description":"Latitude in decimal degrees (recommended; use with lon). One location method is required: lat and lon, city, postal_code with country, or station.","title":"Lat"},"lon":{"anyOf":[{"maximum":180,"minimum":-180,"type":"number"},{"type":"null"}],"default":null,"description":"Longitude in decimal degrees (use with lat).","title":"Lon"},"city":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"City search such as 'Raleigh,NC' or 'Berlin,DE'.","title":"City"},"postal_code":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Postal code such as 28546 (use with country).","title":"Postal Code"},"country":{"anyOf":[{"maxLength":2,"type":"string"},{"type":"null"}],"default":null,"description":"Two letter country code, to use with postal_code.","title":"Country"},"station":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Weather station call id.","title":"Station"}},"title":"get_weather_alertsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_current_lightning":{"post":{"operationId":"get_current_lightning","summary":"List the most recent lightning flashes near a point (satellite based between 180 W and 80 E, radar estimates elsewhere),","description":"List the most recent lightning flashes near a point (satellite based between 180 W and 80 E, radar estimates elsewhere), with distance, bearing and age in minutes. Use for \"Has there been lightning within 50 km of latitude 28.54, longitude -81.38 in the last 30 minutes\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"description":"Latitude in decimal degrees, -90 to 90.","maximum":90,"minimum":-90,"title":"Lat","type":"number"},"lon":{"description":"Longitude in decimal degrees, -180 to 180.","maximum":180,"minimum":-180,"title":"Lon","type":"number"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Maximum number of flashes to return (default 20).","title":"Limit"},"skip":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of flashes to skip, for paging.","title":"Skip"},"search_distance_km":{"anyOf":[{"maximum":75,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Search radius in km (default 20, maximum 75).","title":"Search Distance Km"},"search_mins":{"anyOf":[{"maximum":45,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How far back to search in minutes (default 30, maximum 45).","title":"Search Mins"},"sort":{"anyOf":[{"enum":["distance","time"],"type":"string"},{"type":"null"}],"default":"distance","description":"Order by distance (default) or time.","title":"Sort"}},"required":["lat","lon"],"title":"get_current_lightningArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_historical_lightning":{"post":{"operationId":"get_historical_lightning","summary":"List the lightning flashes recorded near a point on one past date, with distance, bearing and time. Use for \"How much li","description":"List the lightning flashes recorded near a point on one past date, with distance, bearing and time. Use for \"How much lightning was there near latitude 33.75, longitude -84.39 on 2025-08-20\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"description":"Latitude in decimal degrees, -90 to 90.","maximum":90,"minimum":-90,"title":"Lat","type":"number"},"lon":{"description":"Longitude in decimal degrees, -180 to 180.","maximum":180,"minimum":-180,"title":"Lon","type":"number"},"date":{"description":"Date to read, as YYYY-MM-DD.","maxLength":10,"title":"Date","type":"string"},"limit":{"anyOf":[{"maximum":2500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Maximum number of flashes to return (default 1500, maximum 2500).","title":"Limit"},"skip":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of flashes to skip, for paging.","title":"Skip"},"search_distance_km":{"anyOf":[{"maximum":75,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Search radius in km (default 20, maximum 75).","title":"Search Distance Km"},"sort":{"anyOf":[{"enum":["distance","time"],"type":"string"},{"type":"null"}],"default":"distance","description":"Order by distance (default) or time.","title":"Sort"},"tz":{"anyOf":[{"enum":["local","utc"],"type":"string"},{"type":"null"}],"default":"local","description":"Time zone assumed for the date: local (default) or utc.","title":"Tz"}},"required":["lat","lon","date"],"title":"get_historical_lightningArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_climate_normals":{"post":{"operationId":"get_climate_normals","summary":"Get 30-year climate normals (1991-2020 or 1981-2010) for a point and a date range: average, minimum and maximum temperat","description":"Get 30-year climate normals (1991-2020 or 1981-2010) for a point and a date range: average, minimum and maximum temperature, dew point, wind, precipitation and snow. Use for \"What are the typical January temperatures at latitude 35.78, longitude -78.64\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"description":"Latitude in decimal degrees, -90 to 90.","maximum":90,"minimum":-90,"title":"Lat","type":"number"},"lon":{"description":"Longitude in decimal degrees, -180 to 180.","maximum":180,"minimum":-180,"title":"Lon","type":"number"},"start_day":{"description":"First day of the range as MM-DD.","maxLength":5,"title":"Start Day","type":"string"},"end_day":{"description":"Last day of the range as MM-DD.","maxLength":5,"title":"End Day","type":"string"},"period":{"anyOf":[{"enum":["daily","hourly","monthly"],"type":"string"},{"type":"null"}],"default":"daily","description":"Interval of the averages: daily (default), hourly or monthly.","title":"Period"},"units":{"anyOf":[{"enum":["M","I","S"],"type":"string"},{"type":"null"}],"default":"M","description":"Unit system: M metric, I imperial or S scientific.","title":"Units"},"series_year":{"anyOf":[{"enum":["2020","2010"],"type":"string"},{"type":"null"}],"default":"2020","description":"2020 for the 1991-2020 series (default) or 2010 for 1981-2010.","title":"Series Year"}},"required":["lat","lon","start_day","end_day"],"title":"get_climate_normalsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_minutely_forecast":{"post":{"operationId":"get_minutely_forecast","summary":"Get the next 60 minutes of precipitation and snowfall rate, minute by minute, with temperature, for a place. Use for \"Wi","description":"Get the next 60 minutes of precipitation and snowfall rate, minute by minute, with temperature, for a place. Use for \"Will it rain in the next hour at latitude 35.78, longitude -78.64\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lat":{"anyOf":[{"maximum":90,"minimum":-90,"type":"number"},{"type":"null"}],"default":null,"description":"Latitude in decimal degrees (recommended; use with lon). One location method is required: lat and lon, city, postal_code with country, or station.","title":"Lat"},"lon":{"anyOf":[{"maximum":180,"minimum":-180,"type":"number"},{"type":"null"}],"default":null,"description":"Longitude in decimal degrees (use with lat).","title":"Lon"},"city":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"City search such as 'Raleigh,NC' or 'Berlin,DE'.","title":"City"},"postal_code":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Postal code such as 28546 (use with country).","title":"Postal Code"},"country":{"anyOf":[{"maxLength":2,"type":"string"},{"type":"null"}],"default":null,"description":"Two letter country code, to use with postal_code.","title":"Country"},"station":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Weather station call id.","title":"Station"},"units":{"anyOf":[{"enum":["M","I","S"],"type":"string"},{"type":"null"}],"default":"M","description":"Unit system: M metric, I imperial or S scientific.","title":"Units"}},"title":"get_minutely_forecastArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_subhourly_history":{"post":{"operationId":"get_subhourly_history","summary":"Get observed or re-analysed weather at 15 minute intervals for a place over a date range (needs a Plus, Business or Ente","description":"Get observed or re-analysed weather at 15 minute intervals for a place over a date range (needs a Plus, Business or Enterprise plan; up to 5 days per request). Use for \"What was the weather every 15 minutes at latitude 35.78, longitude -78.64 on 2026-05-26\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_date":{"description":"Start as YYYY-MM-DD or YYYY-MM-DD:HH.","maxLength":13,"title":"Start Date","type":"string"},"end_date":{"description":"End as YYYY-MM-DD or YYYY-MM-DD:HH.","maxLength":13,"title":"End Date","type":"string"},"lat":{"anyOf":[{"maximum":90,"minimum":-90,"type":"number"},{"type":"null"}],"default":null,"description":"Latitude in decimal degrees (recommended; use with lon). One location method is required: lat and lon, city, postal_code with country, or station.","title":"Lat"},"lon":{"anyOf":[{"maximum":180,"minimum":-180,"type":"number"},{"type":"null"}],"default":null,"description":"Longitude in decimal degrees (use with lat).","title":"Lon"},"city":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"City search such as 'Raleigh,NC' or 'Berlin,DE'.","title":"City"},"postal_code":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Postal code such as 28546 (use with country).","title":"Postal Code"},"country":{"anyOf":[{"maxLength":2,"type":"string"},{"type":"null"}],"default":null,"description":"Two letter country code, to use with postal_code.","title":"Country"},"station":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Weather station call id.","title":"Station"},"units":{"anyOf":[{"enum":["M","I","S"],"type":"string"},{"type":"null"}],"default":"M","description":"Unit system: M metric, I imperial or S scientific.","title":"Units"},"tz":{"anyOf":[{"enum":["local","utc"],"type":"string"},{"type":"null"}],"default":"utc","description":"Time zone of the dates: utc (default) or local.","title":"Tz"}},"required":["start_date","end_date"],"title":"get_subhourly_historyArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_api_usage":{"post":{"operationId":"get_api_usage","summary":"Show how many Weatherbit calls and historical calls the key has used and has left before the next reset. Use for \"How ma","description":"Show how many Weatherbit calls and historical calls the key has used and has left before the next reset. Use for \"How many Weatherbit calls do I have left\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_api_usageArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}