kywx
Kentucky AI Weather Engine

Kentucky AI Forecasting Beta

Free & Open API

Access Kentucky Weather Data

Fetch AI-synthesized weather forecasts, model analyses, and weekly outlooks as JSON. No authentication required—just make requests and get data.

Free & No Rate Limits

This API is completely free to use with no authentication tokens or rate limits. We ask that you use it responsibly and don't hammer the endpoints. If you're building something cool with it, let us know!

Base URL

Endpoint
https://kywx.report/api

Endpoints

GET
/api/models

Returns a list of weather models and their attributes—which models we analyze, their strengths, weaknesses, and typical use cases.

Response Schema

[ { "name": "string", "fullName": "string", "description": "string", "attributes": { "resolution": "string", "domain": "string", "updateFrequency": "string", "forecastLength": "string", "physics": "string", "dataAssimilation": "string" } } ]

Example Request

curl https://kywx.report/api/models

Example Response

[ { "name": "NAM-HIRES", "fullName": "North American Mesoscale - High Resolution Nest", "description": "The high-resolution 'nest' of the NAM system operating on a 3km grid...", "attributes": { "resolution": "3km horizontal, 60 vertical levels", "domain": "Continental United States (CONUS)", "updateFrequency": "Every 6 hours (00Z, 06Z, 12Z, 18Z)", "forecastLength": "60 hours (2.5 days)", "physics": "Explicit Convection (No parameterization), Ferrier-Aligo microphysics, MYJ boundary layer", "dataAssimilation": "Hybrid 3DEnVar (Initializing from parent NAM)" } }, { "name": "GEM", "fullName": "Global Environmental Multiscale Model (CMC)", "description": "The primary global weather prediction model operated by the Canadian Meteorological Centre (CMC)...", "attributes": { "resolution": "15km horizontal, 80 vertical levels", "domain": "Global coverage", "updateFrequency": "Twice daily (00, 12 UTC)", "forecastLength": "240 hours", "physics": "Global Environmental Multiscale (GEM) dynamic core", "dataAssimilation": "Hybrid 4D-EnVar" } } ]
GET
/api/regions

Returns the list of geographic regions in Kentucky that we provide detailed forecasts for, including their bounding boxes and climate signatures.

Response Schema

[ { "id": "string", "name": "string", "cities": [ "string" ], "primary_anchor": "string", "anchor_coords": { "lat": 0, "lon": 0 }, "bbox": { "minLon": 0, "minLat": 0, "maxLon": 0, "maxLat": 0 }, "climate_signature": "string" } ]

Example Request

curl https://kywx.report/api/regions
GET
/api/forecast/:date

Returns the complete AI-synthesized forecast for a specific date, including regional breakdowns, model battles, scenario analysis, and confidence scores.

URL Parameters

date Date in YYYY-MM-DD format (e.g., 2025-12-09)

Response Schema

{ "id": "string", "targetDate": "string", "createdAt": "string", "headline": "string", "synopsis": "string", "synopticDeepDive": "string", "scenarioCeiling": "string", "scenarioFloor": "string", "confidenceScore": 0, "confidenceDrivers": "string", "battles": [ { "id": "string", "parentId": "string", "title": "string", "description": "string", "contenders": "string", "winningModel": "string", "winningReason": "string", "severity": "string", "affectedRegions": "string" } ], "regionals": [ { "parentId": "string", "region": "string", "headline": "string", "description": "string", "technicalDescription": "string", "condition": "string", "iconId": "string", "severity": "string", "pop": 0, "maxTempF": 0, "minTempF": 0, "windSpeedMph": 0, "windGustMph": 0, "windChillF": 0, "accumType": "string", "accumMin": 0, "accumMax": 0, "accumConsensus": 0, "hourlies": [ { "id": "string", "parentId": "string", "region": "string", "hourOffset": 0, "temp": 0, "feelsLike": 0, "dewPoint": 0, "humidity": 0, "precipRate": 0, "precipChance": 0, "windSpeed": 0, "windGust": 0, "windDir": 0, "cloudCover": 0, "precipType": "string", "sourceWeighting": "string" } ] } ] }

Example Request

curl https://kywx.report/api/forecast/2025-12-09
GET
/api/forecast/region/:id

Returns a vertical 7-day forecast specifically for a single region. This endpoint is optimized for dashboards and extensions, bundling the latest statewide outlook with a week of regional specifics.

URL Parameters

id The region ID (e.g., purchase, bluegrass_core). Use the /api/regions endpoint to see all valid IDs.

Response Schema

{ "regionId": "string", "outlook": { "headline": "string", "needToKnow": "string", "overview": "string" }, "forecasts": [ { "targetDate": "string", "headline": "string", "confidenceScore": 0, "regional": { "condition": "string", "iconId": "string", "maxTempF": 0, "minTempF": 0, "description": "string", "pop": 0, "accumType": "string", "accumConsensus": 0, "windSpeedMph": 0 } } ] }

Example Request

curl https://kywx.report/api/forecast/region/purchase
GET
/api/outlook/:date

Returns the weekly outlook starting from a specific date—the synthesized 3-5 day pattern summary shown on the homepage. Use latest to get the current outlook.

URL Parameters

date Date in YYYY-MM-DD format, or "latest" for most recent outlook

Response Schema

{ "id": "string", "createdAt": "string", "headline": "string", "dominantPattern": "string", "overview": "string", "synopticSummary": "string", "needToKnow": "string", "impacts": [ "string" ], "keyDates": [ { "date": "string", "event": "string", "description": "string" } ] }

Example Request

curl https://kywx.report/api/outlook/latest
GET
/api/current/stations

Returns the list of Kentucky Mesonet stations, including their locations, metadata, and sponsoring information.

Response Schema

[ { "name": "string", "abbr": "string", "lat": 0, "lon": 0, "elevation": 0, "county": "string", "region_id": "string", "timezone": "string", "dateEstablished": "string", "isSponsored": true, "isDiscontinued": false } ]

Example Request

curl https://kywx.report/api/current/stations
GET
/api/current/current

Returns the absolute latest snapshot of readings for ALL Mesonet stations. This is optimal for mapping applications or dashboards.

Response Schema

{ "meta": { "day": "string", "hour": 0, "timestamp": "string" }, "stations": { "FARM": { "TAIR": { "min": 0, "max": 0, "mean": 0 }, "WSPD": { "min": 0, "max": 0, "mean": 0 } } } }

Example Request

curl https://kywx.report/api/current/current
GET
/api/current/:station/:date

Returns the hourly aggregated readings for a specific Mesonet station on a given date.

URL Parameters

station The 4-letter station ID (e.g., FARM, MRHD)
date Date in YYYY-MM-DD format, or "latest"

Response Schema

{ "station": "string", "date": "string", "readings": [ { "day": "string", "hour": 0, "key": "string", "station": "string", "min": 0, "max": 0, "mean": 0, "values": [ 0, 0 ] } ] }

Example Request

curl https://kywx.report/api/current/MRHD/latest

Error Responses

All endpoints return standard HTTP status codes and JSON error messages when something goes wrong.

404 Not Found – Forecast or outlook doesn't exist for that date
{ "error": "Forecast not found", "message": "No forecast available for 2025-12-09" }
400 Bad Request – Invalid date format
{ "error": "Invalid date format", "message": "Date must be in YYYY-MM-DD format" }
500 Internal Server Error – Something went wrong on our end
{ "error": "Internal server error", "message": "An unexpected error occurred" }

Use Cases

🤖

Build Weather Bots

Create Discord/Slack bots that post daily forecasts, or build Alexa skills that read the outlook aloud.

📱

Mobile Apps

Build iOS/Android apps that pull Kentucky Weather forecasts without scraping HTML.

📊

Data Analysis

Archive forecasts over time and analyze AI confidence scores, model battle patterns, or regional variance.

🔔

Custom Alerts

Poll the API and send yourself SMS/email alerts when confidence drops below 70% or when severe impact is forecasted.

Questions or Issues?

This API is provided as-is with no SLA or uptime guarantees. If you encounter issues or have questions, feel free to reach out.