{"schema_version":"1.0.0","method_version":"wxscore-1.0.0","method_fingerprint":"8eda153decbd","generated_at":"2026-08-06T16:19:41Z","cache_generated_at":"2026-08-06T16:05:03.278850Z","license":{"name":"CC BY 4.0","url":"https://creativecommons.org/licenses/by/4.0/","attribution_required":true,"attribution":"Sunny Days Travel (https://sunnydays.thedigitalcarpenter.com)"},"definitions":{"genuinely_clear":"WMO weathercode 0 (clear) or 1 (mainly clear). Code 2 (partly cloudy) is NOT counted as clear.","bright":"clear + partly cloudy","dull":"cloudy + wet + storm","good_window_rule":"A window is never described as good when dull >= bright, or when clear_days <= 1, regardless of score.","worst_number_rule":"Window-level temperature and rain figures report the worst day, not the best (max precipitation probability).","missing_data":"null in JSON, empty cell in CSV. Never estimated."},"rubric":{"scale":"0-10, one decimal place","weights":{"temperature":0.4,"sky":0.3,"precipitation":0.3},"dayFormula":"dayScore = 10 * (0.40*T + 0.30*S + 0.30*D)","windowFormula":"windowScore = 0.55*trimmedMean + 0.25*worstDay + 0.20*(10*goodRunCoverage)","temperature":{"ideal":"T = 1.00 inside [idealMin, idealMax] (default 72-88F)","hot":"T = max(0.10, 1 - 0.040*(t - idealMax)) - MILD by design (anchor A2)","cold":"T = max(0.00, 1 - 0.030*(idealMin - t))"},"precipitation":"D = 1.00 at <=10%, then D = max(0, 1 - ((p-10)/70)^1.15); 0 at ~80%+","safetyCaps":["A day whose CONDITION CODE is precipitation is hard-capped regardless of probability: fog 7.0, light drizzle 7.0, drizzle 6.2, showers 6.6/5.6/4.0, light rain 6.0, rain 5.0, heavy rain 3.8, snow 5.6/4.6/3.4","Overcast (code 3) is deliberately NOT capped - that is anchor A1","high >= 115F or high <= 45F caps the DAY at 5.5","thunderstorm codes 95/96/99 cap the DAY at 4.0 regardless of temperature"],"tiers":[{"min":9.0,"tier":"Perfect","meaning":"Clear, dry and right in your temperature band."},{"min":8.0,"tier":"Excellent","meaning":"Reliably dry and comfortable. May be cloudy - that is fine."},{"min":6.5,"tier":"Good","meaning":"Worth booking, with a real caveat (heat, cloud or a wet day)."},{"min":5.0,"tier":"Mixed","meaning":"A couple of usable days buried in mediocre ones."},{"min":3.0,"tier":"Poor","meaning":"Wet, stormy or uncomfortable more often than not."},{"min":0.0,"tier":"Avoid","meaning":"Genuinely bad weather. Never surface this as a top choice."}],"anchors":["A1  warm + dry + overcast = 8.5 (shown by default, labelled honestly as cloudy)","A2  108F clear+dry = 6.8 (Good) - below a clear 82F day (10.0) but respectable","A3  idealMin/idealMax are user-settable and re-rank results","A4  rain / storms / fog / drizzle are penalised meaningfully; clouds are not"]},"sources":[{"id":"open-meteo-forecast","name":"Open-Meteo Forecast API","url":"https://api.open-meteo.com/v1/forecast","license":"CC BY 4.0","provides":"daily temp_max_f, temp_min_f, precipitation_probability, WMO weathercode"},{"id":"liteapi-hotels","name":"LiteAPI","url":"https://www.liteapi.travel/","license":"Commercial API terms","provides":"hotel names, star ratings, guest ratings, nightly and total rates in USD"},{"id":"pexels-photos","name":"Pexels","url":"https://www.pexels.com/","license":"Pexels License","provides":"destination photography and photographer attribution"}],"csv":{"url":"https://sunnydays.thedigitalcarpenter.com/api/destinations.csv","header_row":true,"delimiter":",","columns":[{"name":"slug","description":"URL slug, derived from name. Stable join key."},{"name":"name","description":"Destination name as published."},{"name":"region","description":"US state/territory code from the cache."},{"name":"region_name","description":"Expanded state name. Empty if the code is unknown."},{"name":"latitude","description":"Decimal degrees, destination centre (the Open-Meteo query point)."},{"name":"longitude","description":"Decimal degrees."},{"name":"airport_iata","description":"Nearest commercial gateway, IATA code."},{"name":"weather_score","description":"0-10 wxscore for the forecast window, one decimal."},{"name":"published_tier","description":"Tier word the cache assigns to that score."},{"name":"honest_tier","description":"Tier derived from the SKY counts. Differs from published_tier whenever a warm dry week is also a sunless one."},{"name":"published_tier_is_defensible","description":"true only when clear_days>=2 AND bright>dull."},{"name":"clear_days","description":"Days with WMO code 0 or 1. EXCLUDES partly cloudy."},{"name":"partly_cloudy_days","description":"Days with WMO code 2."},{"name":"cloudy_days","description":"Days with WMO code 3 (overcast)."},{"name":"wet_days","description":"Days with fog/drizzle/rain/snow/shower codes."},{"name":"storm_days","description":"Days with WMO 95/96/99."},{"name":"bright_days","description":"clear_days + partly_cloudy_days."},{"name":"dull_days","description":"cloudy_days + wet_days + storm_days."},{"name":"forecast_days","description":"Number of daily rows the score was computed over."},{"name":"temp_max_f_high","description":"Highest daily high in the window, degF."},{"name":"temp_min_f_low","description":"Lowest daily low in the window, degF."},{"name":"precip_prob_max","description":"WORST (max) daily precipitation probability, percent."},{"name":"window_start","description":"First date of the advertised window, ISO 8601."},{"name":"window_end","description":"Last date of the advertised window, ISO 8601."},{"name":"flight_minutes_from_nyc","description":"Estimated flight time from the NYC metro, minutes."},{"name":"hotel_count","description":"Hotels priced for this destination in the cache."},{"name":"cheapest_nightly_usd","description":"Lowest nightly rate found, USD. Empty if none priced."},{"name":"verdict","description":"One quotable sentence. Always literally true of the counts."},{"name":"url","description":"Canonical destination page."}]},"endpoints":[{"path":"/llms.txt","media_type":"text/plain","purpose":"llmstxt.org site map for models, generated from live data"},{"path":"/.well-known/ai.txt","media_type":"text/plain","purpose":"AI crawler terms and citation requirement"},{"path":"/ai","media_type":"text/html","purpose":"human-readable hub; carries Dataset/DataCatalog JSON-LD"},{"path":"/api/destinations.csv","media_type":"text/csv","purpose":"one row per destination"},{"path":"/api/schema.json","media_type":"application/json","purpose":"field dictionary, definitions, rubric, sources"},{"path":"/data/scores.json","media_type":"application/json","purpose":"versioned score records with per-record source"},{"path":"/data/provenance.json","media_type":"application/json","purpose":"every score traced to its inputs"},{"path":"/data/dataset.jsonld","media_type":"application/ld+json","purpose":"Dataset + DataCatalog + ClaimReview graph"},{"path":"/api/answers","media_type":"application/json","purpose":"index of direct-answer endpoints"},{"path":"/api/answers/most-clear-days","media_type":"application/json","purpose":"where has the most genuinely clear days this week"},{"path":"/api/answers/is-it-sunny","media_type":"application/json","purpose":"is <destination> sunny right now"},{"path":"/api/answers/warm-in-month","media_type":"application/json","purpose":"where is warm in <month> (refuses outside the forecast window)"},{"path":"/api/answers/avoid-now","media_type":"application/json","purpose":"which destinations to avoid right now"},{"path":"/feed.xml","media_type":"application/rss+xml","purpose":"destinations that just became worth visiting (real change detection)"}]}