{"id":"releases/2026-11-13/schemas/manifest-2.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 manifest/2","description":"Every file in a release, with its SHA-256, size and format. A large manifest is split on `files`: its first part is always `manifest.json`, then `manifest/1.json` and so on.","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}/manifest(/\\d+)?\\.json$"},"kind":{"description":"The format's name, such as `county-weekly`.","const":"manifest"},"format":{"description":"Format name and version, for example `county-weekly/1.0`.","type":"string","pattern":"^manifest/2\\.\\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":["release","published_at","parts","files","counts"],"properties":{"release":{"description":"The release ID.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"published_at":{"description":"When it was published, `YYYY-MM-DDTHH:MM:SSZ`.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z$"},"parts":{"description":"How many parts the published manifest has, `1` when it is not split;\nabsent before `manifest/2.0`.","type":"integer","minimum":1},"files":{"description":"Every file in the release.","type":"array","items":{"type":"object","required":["path","format","sha256","bytes"],"properties":{"path":{"description":"Path relative to the release folder, for example `catalogue/0.json`.","type":"string","minLength":1},"format":{"description":"Its format and version, such as `catalogue/1.0`; `null` for\n`archive.tar.gz`, the release's one file that is not JSON.","anyOf":[{"type":"string","pattern":"^[a-z]+(-[a-z]+)*/\\d+\\.\\d+$"},{"type":"null"}]},"sha256":{"description":"Its lowercase hex SHA-256.","type":"string","pattern":"^[0-9a-f]{64}$"},"bytes":{"description":"Its size in bytes, uncompressed.","type":"integer","minimum":0}},"allOf":[{"anyOf":[{"type":"object","properties":{"path":{"const":"archive.tar.gz"},"format":{"type":"null"}}},{"type":"object","properties":{"path":{"not":{"const":"archive.tar.gz"}},"format":{"type":"string"}}}]}]}},"counts":{"description":"How much the release holds.","type":"object","required":["species","state_results","county_results","records"],"properties":{"species":{"description":"Species in the release.","type":"integer","minimum":0},"state_results":{"description":"State results.","type":"integer","minimum":0},"county_results":{"description":"County results.","type":"integer","minimum":0},"place_results":{"description":"Place results: watersheds, ecoregions, parks and metro park\nsystems. Added in `manifest/2.1`, so absent from earlier files.","type":"integer","minimum":0},"records":{"description":"Records counted.","type":"integer","minimum":0}}}}}},"allOf":[{"if":{"type":"object","properties":{"format":{"const":"manifest/2.0"}}},"else":{"type":"object","properties":{"data":{"type":"object","properties":{"counts":{"type":"object","properties":{"place_results":true},"required":["place_results"]}}}}}}]}}