{"id":"releases/2026-11-13/schemas/region-1.json","kind":"schema","format":"schema/1.0","provenance":{"release":"2026-11-13","sources":["inaturalist-observations-v2","gbif-occurrence-v2","species-names","inaturalist-photos","usgs-gap-ranges-conus-2001v1","noaa-nclimgrid-daily","us-riis-l48-v2","oh-oda-invasive-plants","oh-odnr-aquatic-invasive","inaturalist-checklist","government-species-lists","census-tiger-2026","census-cartographic-boundaries-2025","resolve-ecoregions-2017","usgs-wbd","census-urban-areas-2020","natural-earth-countries","usgs-annual-nlcd-c1v2-2025","usgs-3dep-1as","usgs-padus-4-1","odnr-lands","census-zcta-county-2020","census-places-2020"],"licences":["CC-BY-4.0","CC-BY-NC-4.0","CC0-1.0"],"gbif_download_dois":["10.15468/dl.8m7c3d","10.15468/dl.y2jkt8"],"method":"seasonal-5","taxonomy":"col-xr-2026-06-19/match-2026-10-20","boundaries":"tiger-2026; census-cb-2025-500k; census-zcta-county-2020; census-places-2020; resolve-ecoregions-2017; usgs-annual-nlcd-c1v2-2025; usgs-3dep-1as; PAD-US 4.1 073747bf4d9b, ODNR Lands 8f5985bbd476, parks list 1.2; WBD HU8 04 1a78c5142bde, 05 d59adb45cc28; census-uac20 dbd0e5786258","ranges":["gap/conus-2001v1"],"protection":{"usfws":"2026-11-03T15:25:11.428Z","ohio":"2026-10"},"code":"414181dce188c3b7397c29608556900ed4e75a41","run":"43333827288"},"data":{"$schema":"https://json-schema.org/draft/2020-12/schema","title":"OpenPhenology region/1","description":"A state, its counties, their species and effort.","type":"object","required":["id","kind","format","provenance","data"],"properties":{"id":{"description":"The file's path from the API root.","type":"string","pattern":"^releases/\\d{4}-\\d{2}-\\d{2}/regions/[a-z]{2}-[a-z0-9]{1,3}(/\\d+)?\\.json$"},"kind":{"description":"The format's name, such as `county-weekly`.","const":"region"},"format":{"description":"Format name and version, for example `county-weekly/1.0`.","type":"string","pattern":"^region/1\\.\\d+$"},"provenance":{"description":"Where the content came from.","type":"object","required":["release","sources","licences","gbif_download_dois","method","taxonomy","boundaries","ranges","protection","code","run"],"properties":{"release":{"description":"The release the file belongs to, such as `2026-10-19`.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"sources":{"description":"Source IDs, as listed in `sources.json`.","type":"array","items":{"type":"string"}},"licences":{"description":"The licences of those sources.","type":"array","items":{"type":"string"}},"gbif_download_dois":{"description":"The GBIF downloads the records came from, as DOIs.","type":"array","items":{"type":"string"}},"method":{"description":"The method version, such as `seasonal-3`.","anyOf":[{"type":"string"},{"type":"null"}]},"taxonomy":{"description":"The taxonomy version species keys come from.","anyOf":[{"type":"string"},{"type":"null"}]},"boundaries":{"description":"The boundary version areas come from.","anyOf":[{"type":"string"},{"type":"null"}]},"ranges":{"description":"Each mapped range edition used.","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"protection":{"description":"The version of each sensitive-species list applied, by list.","anyOf":[{"type":"object","additionalProperties":{"type":"string"}},{"type":"null"}]},"code":{"description":"The commit of the code that produced the file.","anyOf":[{"type":"string"},{"type":"null"}]},"run":{"description":"The run that produced the file.","anyOf":[{"type":"string"},{"type":"null"}]}}},"data":{"description":"The content, as the format sets out.","type":"object","required":["state","name","slug","areas"],"properties":{"state":{"description":"The state code.","type":"string","pattern":"^[a-z]{2}-[a-z0-9]{1,3}$"},"name":{"description":"The state's name.","type":"string","minLength":1},"slug":{"description":"The state's page slug.","type":"string","pattern":"^[a-z0-9]+(-[a-z0-9]+)*$"},"areas":{"description":"The state, then each of its counties.","type":"array","items":{"type":"object","required":["area","level","name","slug","species_keys","range_species_keys","effort"],"properties":{"area":{"description":"The area code.","anyOf":[{"type":"string","pattern":"^[a-z]{2}-[a-z0-9]{1,3}$"},{"type":"string","pattern":"^\\d{5}$"},{"type":"string","pattern":"^(huc8-\\d{8}|eco-\\d+|parks?-[a-z0-9]+(-[a-z0-9]+)*|ua-\\d{5})$"}]},"level":{"description":"Whether it is a state or a county.","enum":["state","county"]},"name":{"description":"Its name, such as `Franklin`.","type":"string","minLength":1},"full_name":{"description":"Its name as pages show it: a county's Census legal name with its kind,\nsuch as `Franklin County`, `Orleans Parish` or `Richmond city`; a\nstate's name. Added in `region/1.7`, so absent from earlier files.","type":"string","minLength":1},"slug":{"description":"Its page slug.","type":"string","pattern":"^[a-z0-9]+(-[a-z0-9]+)*$"},"species_keys":{"description":"Species with a result there.","type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9._-]+$"}},"range_species_keys":{"description":"Species whose mapped range covers it.","type":"array","items":{"type":"string","pattern":"^[A-Za-z0-9._-]+$"}},"effort":{"description":"Records of all species counted in the area, weeks 1 to 53.","type":"array","items":{"type":"integer","minimum":0},"minItems":53,"maxItems":53},"ecoregions":{"description":"The ecoregions the area lies in (RESOLVE Ecoregions 2017), largest share\nfirst. They label the place only, never the species recorded there.\nAdded in `region/1.1`, so absent from earlier files.","type":"array","items":{"type":"object","required":["ecoregion","name","biome","share"],"properties":{"ecoregion":{"description":"RESOLVE's ecoregion number (`ECO_ID`), the same in every state.","type":"integer","minimum":1},"name":{"description":"Its name, such as `Southern Great Lakes forests`.","type":"string","minLength":1},"biome":{"description":"Its biome, such as `Temperate Broadleaf & Mixed Forests`.","type":"string","minLength":1},"share":{"description":"Its share of the area's land, 0.05 to 1, to 2 decimal places.","type":"number","minimum":0.05,"maximum":1}}}},"daylight":{"description":"Sunrise, sunset and hours of daylight each week at the area's centre,\nweeks 1 to 53, for each week's middle day in the release's year; `null`\nfor a week with no sunrise or sunset. They describe the place only.\nAdded in `region/1.2`, so absent from earlier files.","type":"array","items":{"anyOf":[{"type":"array","prefixItems":[{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},{"type":"number","minimum":0,"maximum":24}],"items":false,"minItems":3},{"type":"null"}]},"minItems":53,"maxItems":53},"temperature":{"description":"The typical daily low and high each week across the area, weeks 1 to\n53, in °C (ODR-2026-031); `null` for a week without values. They\ndescribe the place only. Added in `region/1.3`, so absent from earlier\nfiles.","type":"array","items":{"anyOf":[{"type":"array","prefixItems":[{"type":"number"},{"type":"number"}],"items":false,"minItems":2},{"type":"null"}]},"minItems":53,"maxItems":53},"precipitation":{"description":"The typical precipitation each week across the area, weeks 1 to 53, in\nmillimetres to one decimal: the average over the pooled years of each\nyear's weekly total (ODR-2026-033); `null` for a week without values.\nIt describes the place only. Added in `region/1.4`, so absent from\nearlier files.","type":"array","items":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"minItems":53,"maxItems":53},"land_cover":{"description":"The area's land cover from USGS Annual NLCD (ODR-2026-033), or `null`\nwhere the map does not cover it. It describes the place only. Added in\n`region/1.4`, so absent from earlier files.","anyOf":[{"type":"object","required":["year","groups","classes","water"],"properties":{"year":{"description":"The NLCD year used, such as `2025`.","type":"integer","minimum":1985},"groups":{"description":"Each group's share of the area's land in %, to one decimal, largest first.","type":"array","items":{"type":"object","required":["group","share"],"properties":{"group":{"description":"The group: `forest`, `farmland`, `developed`, `wetland`, `grassland-shrub` or `barren`.","enum":["forest","farmland","developed","wetland","grassland-shrub","barren"]},"share":{"description":"Its share of the area's land in %, to one decimal.","type":"number","minimum":0,"maximum":100}}}},"classes":{"description":"Each NLCD class's share of the area's land in %, to one decimal, largest first.","type":"array","items":{"type":"object","required":["class","share"],"properties":{"class":{"description":"The NLCD class code, such as `41` for deciduous forest.","type":"integer","minimum":11,"maximum":95},"share":{"description":"Its share of the area's land in %, to one decimal.","type":"number","minimum":0,"maximum":100}}}},"water":{"description":"Open water as a share of the whole area in %, to one decimal.","type":"number","minimum":0,"maximum":100}}},{"type":"null"}]},"elevation":{"description":"The area's lowest, median and highest elevation over its land, in whole\nmetres, from USGS 3DEP (ODR-2026-033), or `null` without tiles. Added in\n`region/1.4`, so absent from earlier files.","anyOf":[{"type":"object","required":["min","median","max"],"properties":{"min":{"description":"The lowest elevation over the area's land, in whole metres.","type":"integer"},"median":{"description":"The median elevation over the area's land, in whole metres.","type":"integer"},"max":{"description":"The highest elevation over the area's land, in whole metres.","type":"integer"}}},{"type":"null"}]},"warmth":{"description":"The area's growing degree days so far this year against the 1991–2020\nnormal (ODR-2026-035), or `null` until the normal is read or without\nvalues. It describes the place's weather only. Added in `region/1.5`,\nso absent from earlier files.","anyOf":[{"type":"object","required":["through","degree_days","normal","days_ahead","provisional"],"properties":{"through":{"description":"The last day counted, `YYYY-MM-DD`.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"degree_days":{"description":"Degree days (base 50°F, simple average, in °F days) accumulated from 1\nJanuary through `through`, rounded to a whole number.","type":"integer","minimum":0},"normal":{"description":"The 1991–2020 average of degree days accumulated from 1 January through\nthe same calendar day, rounded to a whole number.","type":"integer","minimum":0},"days_ahead":{"description":"Days from `through` to the first calendar day on which the normal\nreaches `degree_days`: positive ahead of normal, negative behind;\n`null` while `normal` is below 50 or when `past_typical_year` is `true`.","anyOf":[{"type":"integer"},{"type":"null"}]},"past_typical_year":{"description":"True when `normal` is 50 or more and the normal through 31 December is\nbelow `degree_days`, so no calendar day reaches it; otherwise false.\nAdded in `region/1.10`, so absent from earlier files.","type":"boolean"},"provisional":{"description":"True when any day counted comes from a preliminary NOAA file.","type":"boolean"}}},{"type":"null"}]},"frost":{"description":"The area's typical last spring and first fall frost, 1991–2020\n(ODR-2026-035), or `null` until the normal is read or without values.\nIt describes the place's weather only. Added in `region/1.5`, so absent\nfrom earlier files.","anyOf":[{"type":"object","required":["last_spring","first_fall"],"properties":{"last_spring":{"description":"The median of each year's last day from 1 January to 31 July with a low\nof 32°F (0°C) or below, `MM-DD`, or `null` when a year has none.","anyOf":[{"type":"string","pattern":"^(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$"},{"type":"null"}]},"first_fall":{"description":"The median of each year's first day from 1 August to 31 December with a\nlow of 32°F (0°C) or below, `MM-DD`, or `null` when a year has none.","anyOf":[{"type":"string","pattern":"^(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$"},{"type":"null"}]}}},{"type":"null"}]},"green_up":{"description":"The area's typical spring green-up and latest year, from NASA MODIS\nMCD12Q2 over its natural vegetation (ODR-2026-036), or `null`. It\ndescribes the place only. Added in `region/1.6`, so absent from earlier\nfiles.","anyOf":[{"type":"object","required":["typical","years","latest_year","latest","days_later"],"properties":{"typical":{"description":"The median of each year's green-up date, `MM-DD`.","type":"string","pattern":"^(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$"},"years":{"description":"The first and last year read.","type":"array","items":{"type":"integer","minimum":2000},"minItems":2,"maxItems":2},"latest_year":{"description":"The most recent year with a date.","type":"integer","minimum":2000},"latest":{"description":"That year's green-up date, `MM-DD`.","type":"string","pattern":"^(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$"},"days_later":{"description":"`latest` minus `typical` in days: positive later, negative earlier.","type":"integer"}}},{"type":"null"}]},"watersheds":{"description":"The area codes of the watersheds it touches, possibly none. Added in\n`region/1.8`, so absent from earlier files.","type":"array","items":{"type":"string","pattern":"^huc8-\\d{8}$"}},"parks":{"description":"The area codes of the parks and metro park systems with a page that it\ntouches, possibly none. Added in `region/1.8`, so absent from earlier\nfiles.","type":"array","items":{"anyOf":[{"type":"string","pattern":"^park-[a-z0-9]+(-[a-z0-9]+)*$"},{"type":"string","pattern":"^parks-[a-z0-9]+(-[a-z0-9]+)*$"}]}},"urban_areas":{"description":"The area codes of the cities with a page that it touches, possibly none\n(ODR-2026-073). Added in `region/1.11`, so absent from earlier files.","type":"array","items":{"type":"string","pattern":"^ua-\\d{5}$"}},"record_land_cover":{"description":"State only: the land cover of all the state's counted records within\n100 m that are not obscured, leaving out species sensitive in the state,\nin the same form as a species' `land_cover`; `null` for a county or\nbelow the method's minimum. It says where people record, never what the\nstate's land is (ODR-2026-047). Added in `region/1.9`, so absent from\nearlier files.","anyOf":[{"type":"object","required":["records","groups"],"properties":{"records":{"description":"The records counted.","type":"integer","minimum":0},"groups":{"description":"Largest first: the group and its share of the records counted, in %.","type":"array","items":{"type":"object","required":["group","share"],"properties":{"group":{"description":"A land-cover group, as in region `land_cover`, or `water`.","enum":["forest","farmland","developed","wetland","grassland-shrub","barren","water"]},"share":{"description":"Its share of the records counted, in %, to one decimal.","type":"number","minimum":0,"maximum":100}}}}}},{"type":"null"}]},"record_hours":{"description":"State only: all the state's counted records that give a time, leaving\nout species sensitive in the state, by hour of local time, 24 counts for\nhours 0 to 23, as a species' `hours`; `null` for a county or below the\nmethod's minimum (ODR-2026-048). Added in `region/1.9`, so absent from\nearlier files.","anyOf":[{"type":"array","items":{"type":"integer","minimum":0},"minItems":24,"maxItems":24},{"type":"null"}]}},"allOf":[{"anyOf":[{"type":"object","properties":{"level":{"const":"state"},"area":{"type":"string","pattern":"^[a-z]{2}-[a-z0-9]{1,3}$"}}},{"type":"object","properties":{"level":{"const":"county"},"area":{"type":"string","pattern":"^\\d{5}$"}}},{"type":"object","properties":{"level":{"const":"watershed"},"area":{"type":"string","pattern":"^huc8-\\d{8}$"}}},{"type":"object","properties":{"level":{"const":"ecoregion"},"area":{"type":"string","pattern":"^eco-\\d+$"}}},{"type":"object","properties":{"level":{"const":"park"},"area":{"type":"string","pattern":"^park-[a-z0-9]+(-[a-z0-9]+)*$"}}},{"type":"object","properties":{"level":{"const":"park-system"},"area":{"type":"string","pattern":"^parks-[a-z0-9]+(-[a-z0-9]+)*$"}}},{"type":"object","properties":{"level":{"const":"urban-area"},"area":{"type":"string","pattern":"^ua-\\d{5}$"}}}]},{"if":{"type":"object","required":["level"],"properties":{"level":{"const":"county"}}},"then":{"type":"object","properties":{"record_land_cover":{"type":"null"},"record_hours":{"type":"null"}}}}]}}}}},"allOf":[{"if":{"type":"object","properties":{"format":{"enum":["region/1.0","region/1.1","region/1.2","region/1.3","region/1.4","region/1.5","region/1.6","region/1.7"]}}},"else":{"type":"object","properties":{"data":{"type":"object","properties":{"areas":{"type":"array","items":{"type":"object","properties":{"watersheds":true,"parks":true},"required":["watersheds","parks"]}}}}}}},{"if":{"type":"object","properties":{"format":{"enum":["region/1.0","region/1.1","region/1.2","region/1.3","region/1.4","region/1.5","region/1.6","region/1.7","region/1.8"]}}},"else":{"type":"object","properties":{"data":{"type":"object","properties":{"areas":{"type":"array","items":{"type":"object","properties":{"record_land_cover":true,"record_hours":true},"required":["record_land_cover","record_hours"]}}}}}}},{"if":{"type":"object","properties":{"format":{"enum":["region/1.0","region/1.1","region/1.2","region/1.3","region/1.4","region/1.5","region/1.6","region/1.7","region/1.8","region/1.9","region/1.10"]}}},"else":{"type":"object","properties":{"data":{"type":"object","properties":{"areas":{"type":"array","items":{"type":"object","properties":{"urban_areas":true},"required":["urban_areas"]}}}}}}}]}}