{"openapi":"3.1.0","info":{"title":"Texas Fishing Reports public lake data","version":"1.0.0","description":"Read-only dated weather forecasts and measured water observations. Resolve lake names with the directory first. All calendar dates use America/Chicago. Never interpret a measured water level as a prediction for the requested date. Check availability, updated_at and freshness before answering."},"servers":[{"url":"https://www.txfishingreports.com"}],"paths":{"/api/v1/lakes":{"get":{"operationId":"findTexasLakes","summary":"Resolve a lake name to its canonical slug and data URL","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":100},"description":"Lake name or slug keywords, e.g. ray roberts. Omit for all lakes."}],"responses":{"200":{"description":"Matching lakes","content":{"application/json":{"schema":{"type":"object","required":["lakes","count"],"properties":{"count":{"type":"integer"},"documentation":{"type":"string","format":"uri"},"lakes":{"type":"array","items":{"type":"object","required":["name","slug","url","conditions_url"],"properties":{"name":{"type":"string"},"slug":{"type":"string"},"region":{"type":["string","null"]},"url":{"type":"string","format":"uri"},"conditions_url":{"type":"string","format":"uri"}}}}}}}}},"400":{"description":"Request or upstream error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Request or upstream error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error"]}}}}}}},"/api/v1/lakes/{slug}":{"get":{"operationId":"getTexasLakeConditions","summary":"Get forecasts for a date and the latest measured water level","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","maxLength":100},"example":"ray-roberts"},{"name":"date","in":"query","schema":{"type":"string"},"example":"this-friday","description":"YYYY-MM-DD, today, tomorrow, or a weekday such as friday / this-friday. Weekdays resolve to the next occurrence INCLUDING today in America/Chicago. Prefer an explicit date for unambiguous requests. Outside the five-day window returns not_available; no extrapolation."},{"name":"format","in":"query","schema":{"type":"string","enum":["json","markdown"],"default":"json"}}],"responses":{"200":{"description":"Dated lake data; availability may be not_available for the requested date","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LakeConditions"}},"text/markdown":{"schema":{"type":"string"}}}},"400":{"description":"Request or upstream error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error"]}}}},"404":{"description":"Request or upstream error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error"]}}}},"503":{"description":"Request or upstream error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}},"required":["error"]}}}}}}}},"components":{"schemas":{"Forecast":{"type":"object","required":["date","updated_at","freshness","citation_url","kind"],"properties":{"date":{"type":"string","format":"date"},"updated_at":{"type":["string","null"],"format":"date-time","description":"Application collection/write time if known; neither upstream model issuance nor response generation time."},"kind":{"type":"string","const":"weather_forecast"},"freshness":{"type":"string","enum":["fresh","stale","unknown"],"description":"stale means source update older than 48 hours; unknown means no trustworthy timestamp."},"conditions":{"type":"string"},"high_temp":{"type":["number","null"],"description":"Fahrenheit"},"low_temp":{"type":["number","null"],"description":"Fahrenheit"},"wind_speed":{"type":["number","null"],"description":"Daily maximum wind speed in mph"},"wind_direction":{"type":["string","null"]},"precipitation":{"type":["number","null"],"description":"Daily total inches"},"pressure":{"type":["number","null"],"description":"hPa"},"fishing_rating":{"type":["string","null"],"description":"Weather-based estimate, not a catch report."},"pressure_trend":{"type":["string","null"]},"humidity":{"type":["number","null"],"description":"Percent"},"cloud_cover":{"type":["number","null"],"description":"Percent"},"uv_index":{"type":["number","null"]},"sunrise":{"type":["string","null"],"description":"Local timestamp in America/Chicago, without UTC offset."},"sunset":{"type":["string","null"],"description":"Local timestamp in America/Chicago, without UTC offset."},"moon_phase":{"type":["string","null"]},"moon_illumination":{"type":["number","null"],"description":"Percent"},"moonrise":{"type":["string","null"],"description":"Clock time in America/Chicago (e.g. 06:40 PM). Calculated solunar periods may cross midnight; null means unavailable."},"moonset":{"type":["string","null"],"description":"Clock time in America/Chicago (e.g. 06:40 PM). Calculated solunar periods may cross midnight; null means unavailable."},"moon_transit":{"type":["string","null"],"description":"Clock time in America/Chicago (e.g. 06:40 PM). Calculated solunar periods may cross midnight; null means unavailable."},"moon_under":{"type":["string","null"],"description":"Clock time in America/Chicago (e.g. 06:40 PM). Calculated solunar periods may cross midnight; null means unavailable."},"major1_start":{"type":["string","null"],"description":"Clock time in America/Chicago (e.g. 06:40 PM). Calculated solunar periods may cross midnight; null means unavailable."},"major1_stop":{"type":["string","null"],"description":"Clock time in America/Chicago (e.g. 06:40 PM). Calculated solunar periods may cross midnight; null means unavailable."},"major2_start":{"type":["string","null"],"description":"Clock time in America/Chicago (e.g. 06:40 PM). Calculated solunar periods may cross midnight; null means unavailable."},"major2_stop":{"type":["string","null"],"description":"Clock time in America/Chicago (e.g. 06:40 PM). Calculated solunar periods may cross midnight; null means unavailable."},"minor1_start":{"type":["string","null"],"description":"Clock time in America/Chicago (e.g. 06:40 PM). Calculated solunar periods may cross midnight; null means unavailable."},"minor1_stop":{"type":["string","null"],"description":"Clock time in America/Chicago (e.g. 06:40 PM). Calculated solunar periods may cross midnight; null means unavailable."},"minor2_start":{"type":["string","null"],"description":"Clock time in America/Chicago (e.g. 06:40 PM). Calculated solunar periods may cross midnight; null means unavailable."},"minor2_stop":{"type":["string","null"],"description":"Clock time in America/Chicago (e.g. 06:40 PM). Calculated solunar periods may cross midnight; null means unavailable."},"solunar_day_rating":{"type":["number","null"],"minimum":1,"maximum":5,"description":"Calculated solunar estimate, not a guarantee of catches."},"citation_url":{"type":"string","format":"uri"}}},"LakeConditions":{"type":"object","required":["schema_version","generated_at","timezone","local_today","lake","requested_date","availability","available_dates","forecasts","latest_water_observation","warnings","sources"],"properties":{"schema_version":{"type":"string"},"generated_at":{"type":"string","format":"date-time","description":"Response assembly time, NOT source freshness."},"generated_at_note":{"type":"string"},"timezone":{"type":"string","const":"America/Chicago"},"local_today":{"type":"string","format":"date"},"lake":{"type":"object","properties":{"name":{"type":"string"},"slug":{"type":"string"},"region":{"type":["string","null"]},"latitude":{"type":["number","null"]},"longitude":{"type":["number","null"]},"url":{"type":"string","format":"uri"}}},"requested_date":{"type":["string","null"],"format":"date"},"availability":{"type":"string","enum":["available","not_available"]},"available_dates":{"type":"array","items":{"type":"string","format":"date"}},"forecasts":{"type":"array","items":{"$ref":"#/components/schemas/Forecast"}},"latest_water_observation":{"type":["object","null"],"description":"Dated measured water level. NOT a forecast for the requested day.","properties":{"measurement_date":{"type":"string","description":"Provider record date, which can be collection date rather than sensor observation time."},"date_basis":{"type":"string"},"kind":{"type":"string","const":"observation"},"is_forecast":{"type":"boolean","const":false},"water_level_ft":{"type":["number","null"]},"percent_full":{"type":["number","null"]},"inflow_cfs":{"type":["number","null"]},"outflow_cfs":{"type":["number","null"]},"data_source":{"type":["string","null"]},"freshness":{"type":"string","enum":["recent","stale","unknown"]}}},"units":{"type":"object","additionalProperties":{"type":"string"}},"fishing_reports":{"type":"object","properties":{"status":{"type":"string"},"source_url":{"type":"string","format":"uri"}}},"sources":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string","format":"uri"},"supplies":{"type":"string"}}}},"warnings":{"type":"array","items":{"type":"string"}},"links":{"type":"object","additionalProperties":{"type":"string","format":"uri"}}}}}}}