{"source_url":"https://ferns-eco-data.replit.app/api/v1/sources","found":true,"data":{"sources":[{"source_id":"bonap-napa","name":"BONAP North American Plant Atlas — Distribution Maps","knowledge_type":"source_wrapper","status":"live","description":"County- and state-level distribution maps for roughly 28,000 vascular plant species across North America, showing where each species has been recorded based on nearly four million verified herbarium specimens (physical plant samples held in scientific collections), with map colors indicating whether the species is native, rare, or introduced within each county or state. From the Biota of North America Program (BONAP), maintained by Dr. John T. Kartesz.","input_summary":"Genus name (required) + species epithet (required) + map type (county_species or state_species)","output_summary":"Map URL pointing to BONAP's PNG image on their server, color key metadata, color key image URL, data vintage, full attribution and copyright notice","dependencies":[],"update_frequency":"Static. NAPA maps last updated December 2014. Not updated since. No update notification mechanism exists.","known_limitations":"Data vintage 2014. No subspecies-level maps. Family-level maps exist at bonap.net but are not implemented. Color key hex codes are approximate. Written permission from BONAP is required before any public deployment.","metadata_url":"https://ferns-eco-data.replit.app/api/bonap/metadata","explorer_url":"https://ferns-eco-data.replit.app/source/bonap-napa","permission_granted":false,"permission_status":"REQUIRED — NOT YET REQUESTED. Written permission required from BONAP before any public deployment. Partnership letter drafted.","general_summary":"The Biota of North America Program (BONAP), maintained by Dr. John T. Kartesz at the North Carolina Botanical Garden, compiles vascular plant distribution data from nearly four million vouchered herbarium specimens (physical plant samples held in scientific collections) across North America north of Mexico. FERNS provides access to BONAP's North American Plant Atlas (NAPA) county- and state-level distribution maps, covering approximately 28,000 plant species. County presence is coded by native status and rarity: native and indigenous to the state; present and not rare; present and rare; adventive (native to North America but not indigenous to this specific state; naturalized without deliberate planting, originating elsewhere on the continent); exotic (not native to North America); extirpated (historically present, now gone from the county); waif (occasionally found but not established); or extinct. FERNS constructs the map image URL from genus, species, and map type, then verifies it resolves to an image; no image data is stored or proxied locally. A query returns the map URL, full color-key vocabulary with hex codes, data vintage, and the complete attribution and copyright notice required by BONAP. Maps were published as a batch in December 2014 and have not been updated since; no automated update mechanism exists. BONAP requires advance written permission for any public deployment of these maps.","technical_details":"Source: Kartesz, J.T., The Biota of North America Program (BONAP). 2015. North American Plant Atlas. (http://bonap.net/napa). Chapel Hill, N.C. [maps generated from Kartesz, J.T. 2015. Floristic Synthesis of North America, Version 1.0. Biota of North America Program (BONAP).] NAPA county-level distribution data is compiled from nearly four million vouchered herbarium specimens and covers approximately 28,000 accepted vascular plant taxa in North America north of Mexico. Records are vetted for taxonomic accuracy against BONAP's annually updated nomenclature. False reports (approximately 175,000 known erroneous occurrence records) are tracked and mapped separately. County-level presence/absence and status (native, adventive, exotic, rare, noxious, extirpated, waif, extinct) are determined from the compiled and vetted specimen record. NAPA maps were published as a batch in December 2014. Method: api_fetch (HTTP GET to BONAP MapGallery URL; image presence verified by Content-Type: image/png in HTTP response). Copyright: All materials copyrighted by BONAP; advance written permission required for reproduction. Permission not yet granted. DB table: bonap_maps (columns: cache_key unique, genus, species, map_type, species_stripped boolean, map_url, source_url, status, expires_at, fetched_at, method, upstream_url). Results are cached between requests."},{"source_id":"gbif","name":"GBIF — Taxonomic Backbone, Name Reconciliation, and Occurrence Records","knowledge_type":"source_wrapper","status":"live","description":"Plant scientific name lookup and verification — checks whether a name is currently accepted or has been replaced by a newer one — plus synonym lists, common names, and location-tagged sighting records across North America. From the Global Biodiversity Information Facility (GBIF), an intergovernmental organization aggregating biodiversity records from nearly 2,000 institutions worldwide.","input_summary":"Scientific name (for matching and reconciliation), GBIF usageKey (for synonyms, vernacular names, and occurrences), or common name string (for vernacular search)","output_summary":"Taxonomic name match with GBIF backbone key and classification; synonym list; vernacular (common) names; occurrence count and recent georeferenced records with configurable geography","dependencies":[],"update_frequency":"Live API. Backbone updated approximately annually. Occurrence index updated continuously.","known_limitations":"found: true means the name resolved to something in the GBIF backbone, but applications must check match_type to determine whether that match is at the species level or fell back to a higher rank (HIGHERRANK). A HIGHERRANK result should not be treated as a confirmed species identification. Vernacular names are uncontrolled and of variable quality. iNaturalist records are included in GBIF occurrence counts. usageKeys may change across annual backbone rebuilds.","metadata_url":"https://ferns-eco-data.replit.app/api/gbif/metadata","explorer_url":"https://ferns-eco-data.replit.app/source/gbif","permission_granted":true,"permission_status":"OPEN — CC BY 4.0. Attribution required. No permission letter needed.","general_summary":"Plant scientific name lookup, synonym resolution, common names, and occurrence records from the Global Biodiversity Information Facility (GBIF), an intergovernmental organization aggregating biodiversity records from nearly 2,000 institutions including museums, universities, and citizen science platforms worldwide. GBIF's Backbone Taxonomy (a master reference classification of all known organisms) covers all kingdoms; FERNS uses it here for vascular plants — specifically to verify whether a scientific name is currently accepted or has been replaced by a synonym, to find common names, and to retrieve location-tagged sighting records across North America. Geographic scope for occurrence queries is configurable by country, continent, or GBIF taxon key. All data is accessed through GBIF's public REST API; query results are cached locally and reused for subsequent queries. A name-match query returns the GBIF backbone key, match confidence, and whether the name is accepted or a synonym; occurrence queries return count and location-tagged records with coordinates, basis of record, and collection date. Backbone updated approximately annually; occurrence index updated continuously. Consumers must inspect match_type in every response: HIGHERRANK means the name resolved only to genus or family level and must not be treated as a species-level confirmation; DOUBTFUL status means the name exists in the backbone but its standing is uncertain.","technical_details":"Source: GBIF.org. Data licensed CC BY 4.0. Name matching uses the GBIF Backbone Taxonomy (DOI: https://doi.org/10.15468/39omei), a synthetic management classification assembled algorithmically from 105 source checklists in priority order, with the Catalogue of Life as the foundation layer. For vascular plants, the World Checklist of Vascular Plants (WCVP, 131,891 names) is the primary source through the Catalogue of Life. Backbone is rebuilt approximately annually; usageKeys may change across rebuilds. Name matching endpoint: GET /v1/species/match?name={name}&kingdom=Plantae. No-match is signaled by absence of usageKey field in response (HTTP 200 for all match calls). DOUBTFUL status means name exists but taxonomic standing is uncertain — treat as unusable. Synonym resolution uses a 3-call chain: /match → /species/{acceptedUsageKey} → /species/{acceptedUsageKey}/synonyms. Occurrence records filtered with hasCoordinate=true and hasGeospatialIssue=false. hasGeospatialIssue=false excludes: ZERO_COORDINATE, COORDINATE_OUT_OF_RANGE, COORDINATE_INVALID, COUNTRY_COORDINATE_MISMATCH. Does NOT exclude: high coordinate uncertainty, gridded datasets, centroid records (identifiable by coordinateUncertaintyInMeters values 301, 3036, 999, 9999). Method: api_fetch. Results are cached between requests. DB tables: gbif_name_matches (columns: cache_key unique, canonical_name, usage_key, accepted_usage_key, accepted_canonical_name, rank, status, confidence, match_type, kingdom through species hierarchy + corresponding keys, matched_input, expires_at); gbif_synonyms (columns: cache_key unique, usage_key, synonyms jsonb, synonym_count); gbif_vernacular_names (columns: cache_key unique, usage_key, vernacular_names jsonb, vernacular_name_primary, vernacular_name_count); gbif_occurrences (columns: cache_key unique, usage_key, geography_mode, geography_params, occurrence_count, occurrence_count_us, recent_occurrences jsonb, occurrence_last_fetched)."},{"source_id":"inaturalist","name":"iNaturalist — Observations, Phenology, and Species Appearance","knowledge_type":"source_wrapper","status":"live","description":"Species photos, Wikipedia summaries, common names, native or introduced status, conservation status, monthly sighting counts, and phenological stage annotations (flowering, budding, fruiting) for any searchable species worldwide; also constructs direct URLs for querying live observation records by taxon, place, or both. From iNaturalist, a global citizen science platform operated by the California Academy of Sciences and National Geographic Society with over 200 million user observations.","input_summary":"Place name (for place ID resolution); species name (for appearance and phenology); place IDs (for phenology filtering)","output_summary":"iNaturalist place ID and display name; species photo, Wikipedia description, common names, conservation status, native status, global observation count; monthly observation counts and phenological stage breakdown (flowering, fruiting, budding) by month; direct URLs for querying live iNaturalist observation records","dependencies":[],"update_frequency":"Live — iNaturalist data is continuously updated by the global community.","known_limitations":"Two API calls are always required for species appearance (search then full record). Phenological annotation coverage is uneven — many species have sparse or no annotations. iNaturalist maintains its own taxonomic backbone; names may differ from GBIF, BONAP, or Michigan Flora. Research Grade iNaturalist observations appear in GBIF — do not double-count when using both FERNS services. Observation timing data reflects observer effort and seasonal accessibility as much as actual species biology.","metadata_url":"https://ferns-eco-data.replit.app/api/inat/metadata","explorer_url":"https://ferns-eco-data.replit.app/source/inaturalist","permission_granted":true,"permission_status":"OPEN — No authentication required for read operations. Attribution required.","general_summary":"Observation and species data from iNaturalist (inaturalist.org), a citizen science platform operated jointly by the California Academy of Sciences and the National Geographic Society, with over 200 million observations contributed by millions of users worldwide. FERNS exposes three data types from iNaturalist: place ID lookup for geographic filtering; species appearance data (representative photos, Wikipedia summaries, common names, conservation status, and native/introduced status); and month-by-month phenology derived from community-added annotations showing what stage a species is typically in (flowering, budding, or fruiting). Geographic scope: global; taxonomic scope: all organisms (FERNS uses it for vascular plants). iNaturalist maintains its own taxonomic backbone — name divergence across external sources is expected. All data accessed through the iNaturalist v1 REST API and cached between requests. A species query returns photos, Wikipedia description, common names, conservation status, native status, global observation count, and month-by-month phenological stage breakdowns. Phenological annotation coverage is uneven — many species have sparse or no stage annotations.","technical_details":"Source: iNaturalist (https://api.inaturalist.org/v1). Place lookup: GET /places/autocomplete — returns iNaturalist place IDs from US Census TIGER and similar boundaries. Species appearance: two-step fetch via GET /taxa?q={name}&rank=species then GET /taxa/{id}. iNaturalist maintains its own taxonomic backbone. Name divergence across external sources is expected and should not be treated as error. Phenology: GET /observations/histogram (interval=month_of_year) for total counts by month, and GET /observations/popular_field_values (verifiable=true) for stage-stratified counts. Stage labels from popular_field_values: Flowers, Flower Buds, Fruits or Seeds, No Flowers or Fruits (for plants); Green Leaves, Colored Leaves, No Live Leaves, Breaking Leaf Buds (leaf phenology). Phenological annotations added voluntarily — coverage is uneven, often sparse or absent. Method: api_fetch. Results are cached between requests. DB tables: inat_places (columns: cache_key unique, query, results jsonb, found, expires_at, fetched_at, method, upstream_url); inat_species (columns: cache_key unique, inat_taxon_id, inat_name, match_type, preferred_common_name, common_names jsonb, wikipedia_summary, wikipedia_url, default_photo_url, conservation_status jsonb, native_status jsonb, observations_count, source_url, raw_response jsonb, found, expires_at); inat_histogram (columns: cache_key unique, taxon_id, place_ids integer[], raw_response jsonb, expires_at); inat_field_values (columns: cache_key unique, taxon_id, place_ids integer[], verifiable, raw_response jsonb, expires_at)."},{"source_id":"lcscg","name":"Lake County Seed Collection Guides — Native Seed Identification and Collection","knowledge_type":"source_wrapper","status":"live","description":"Seed identification photos, harvest instructions, and collection timing for 494 native plant species in Lake County, Illinois, organized by season and habitat type. From 12 illustrated field guides published by the Lake County Forest Preserve District Volunteer Stewardship Network.","input_summary":"Scientific name (partial or exact) or guide ID (1271–1282)","output_summary":"Species harvest description, seed dispersal categories, photo date, plant family, guide context (season, habitat), and Cloudinary image URLs","dependencies":[],"update_frequency":"Static — data imported once from version 2 (March 2021) PDF guides. No upstream API. Updates require a new import if guides are revised.","known_limitations":"Nomenclature follows Flora of the Chicago Region (Wilhelm & Rericha, 2017), which may differ from GBIF, iNaturalist, or USDA PLANTS taxonomy. 494 records extracted from 12 PDFs; printed book edition claims ~600 species. Non-native 'Do Not Collect' comparison species are included in the dataset. Photo dates are reference photograph dates, not guaranteed collection windows — actual timing varies by microclimate, proximity to Lake Michigan, slope, and sun/shade. Geographic scope is Lake County, Illinois only.","metadata_url":"https://ferns-eco-data.replit.app/api/lcscg/metadata","explorer_url":"https://ferns-eco-data.replit.app/source/lcscg","permission_granted":true,"permission_status":"GRANTED — Lake County Seed Collection Guides are published by the Lake County Forest Preserve District under a CC BY-NC 4.0 license. The guides are freely available on the Field Museum Field Guides platform. FERNS serves static data extracted from those publicly licensed PDF documents.","general_summary":"Illustrated field guide data for native seed collection in Lake County, northeastern Illinois, compiled by the Lake County Forest Preserve District Volunteer Stewardship Network and published as 12 illustrated guides by the Field Museum Field Guides platform (Guide IDs 1271–1282). Authors: Kelly Schultz (LCFPD Stewardship Ecologist) and Dale Shields. Covers 494 plant species organized by season (spring, summer, fall) and habitat (woodland, wetland, prairie, grasses and sedges, asters and goldenrods, woody plants). Geographic scope: Lake County, Illinois; taxonomic scope: native and introduced, non-native (adventive) vascular plants of that region. FERNS serves static data extracted from the PDF guides (no live upstream API); 2,093 guide photographs are served from Cloudinary CDN. A species query returns scientific name, common name, plant family, guide and habitat section, seed dispersal category, harvest technique description, photo date (timing proxy), and image URLs. Data is static with no update cycle; not all records are native — non-native comparison species marked 'Do Not Collect' are included. LCSCG species names follow Flora of the Chicago Region (Wilhelm & Rericha 2017).","technical_details":"Primary source: 12 PDF field guides (version 2, March 2021) authored by Kelly Schultz (LCFPD Stewardship Ecologist) and Dale Shields (volunteer); photography by Dale J. Shields. Published by Field Museum Field Guides. Field Museum Guide IDs: 1271 (Summer Woodland Forbs), 1272 (Woody Plants), 1273 (Summer Wetland Grasses and Kin), 1274 (Summer Wetland Forbs), 1275 (Summer Prairie Forbs), 1276 (Summer Grasses and Kin), 1277 (Spring Woodland Forbs), 1278 (Fall Woodland Forbs), 1279 (Fall Wetland Forbs), 1280 (Fall Grasses and Kin), 1281 (Asters and Goldenrods), 1282 (Fall Prairie Forbs). Scientific reviewer: Laurie Ryan, McHenry County Conservation District. Data extracted from PDFs into JSON files; stored in FERNS as static PostgreSQL records (no TTL, no cache, no refresh). Nomenclature follows Flora of the Chicago Region (Wilhelm & Rericha, 2017). Images (2,093 PNGs) hosted on Cloudinary (cloud: dqe2vv0fo), organized in per-guide folders. Fields per species: scientific_name, common_name, family, guide_id, guide_name, season, habitat_type, page_number, photo_date (M-D-YY format; date of reference photograph; approximate collection timing; varies by local weather, proximity to Lake Michigan, slope, sun/shade), description (authors' harvest notes), seed_group_names (string array), seed_group_details (array of {name, description, images}), image_urls (JSONB array of Cloudinary CDN URLs). 494 total records, all unique by scientific name. Non-native Do Not Collect species included: Daucus carota, Cirsium vulgare, Phleum pratense, Abutilon theophrasti, Dianthus armeria, others."},{"source_id":"michigan-flora","name":"Michigan Flora — Species Records, Botanical Descriptions, and County Occurrences","knowledge_type":"source_wrapper","status":"live","description":"Botanical descriptions, photographs, synonym lists, native or non-native status, and county-by-county occurrence records for every documented vascular plant species in Michigan, covering all 83 counties. From Michigan Flora Online, a published flora reference from the University of Michigan Herbarium (Reznicek, Voss, and Walters, 2011); content is static and reflects the state of knowledge at that time.","input_summary":"Scientific name (for both species lookup and county occurrence lookup)","output_summary":"Taxonomic details (genus, species, family, common name, native status, adventive indicator); descriptive text; plant images; synonyms; county-level occurrence records for all 83 Michigan counties","dependencies":[],"update_frequency":"Static. Michigan Flora Online (2011) is a published reference work. Content does not change.","known_limitations":"Coverage limited to Michigan only. Scientific name casing is inconsistent in the source API (adventive species names are ALL-CAPS). The st field uses the literal string 'NULL' for unknown or absent status — this is a source API quirk, not a JSON null. County occurrence codes require interpretation (see county endpoint). flora_search_sp may return multiple records (subspecies/varieties) for one query. Two API calls minimum for any species query; four for full species data.","metadata_url":"https://ferns-eco-data.replit.app/api/miflora/metadata","explorer_url":"https://ferns-eco-data.replit.app/source/michigan-flora","permission_granted":true,"permission_status":"OPEN — No authentication required for read operations. Attribution required.","general_summary":"Michigan Flora Online is published by the University of Michigan Herbarium and authored by Reznicek, Voss, and Walters (2011). It covers all documented native and introduced non-native (adventive) vascular plant species in Michigan across all 83 counties. FERNS queries this source via its public REST API and caches results between requests. A species query returns family, common name, native or adventive status, botanical description text, a primary plant image, synonyms, and county-level occurrence records. Each species record also carries three ecological metrics: a Coefficient of Conservatism (C-value, 0–10 for native species, '*' for adventive species), a Coefficient of Wetness (W-value, −5 to +5), and a Wetland Indicator Status code (OBL/FACW/FAC/FACU/UPL). The C-values come from the Reznicek et al. 2014 Michigan Floristic Quality Assessment Database. The content is static (published 2011, no update mechanism in the API); county coverage is comprehensive for all 83 Michigan counties. Notable source quirks: adventive species names are returned ALL-CAPS by the API, and the native/adventive status field uses the literal string 'NULL' (not a JSON null) for unknown or absent status.","technical_details":"Source: Michigan Flora REST API v1.0 (https://michiganflora.net/api/v1.0). Species lookup: GET /flora_search_sp?scientific_name={name} returns array of matching records; first record gives plant_id; then parallel fetches: GET /spec_text?id={id} (taxonomic details and description text), GET /synonyms?id={id} (synonym records), GET /pimage_info?id={id} (primary image). County presence (name-based, two-step): GET /flora_search_sp?scientific_name={name} to resolve plant_id, then GET /locs_sp?id={id} returns {locations:[...county names...]} for confirmed counties. Cache keys for all endpoints are normalized lowercase scientific names. DB tables: miflora_species_cache, miflora_counties_cache, miflora_images_cache (all share the same structure: serial PK, cache_key unique text, source_id, fetched_at, method, upstream_url, expires_at, plus response data columns). expires_at = null for all records (permanent cache — Michigan Flora data does not change). ?refresh=true on any endpoint forces a re-fetch of the cached record for that species. Response normalization: pimage_info records are enriched at serve time with constructed image_url and thumbnail_url fields. Formula (reverse-engineered from Michigan Flora frontend): full image = https://michiganflora.net/static/species_images/_pid_{plant_id}/{image_id}.jpg; thumbnail = ..._pid_{plant_id}/thumb_{image_id}.jpg. FIELD DEFINITIONS — c: Coefficient of Conservatism (C-value, Swink & Wilhelm 1994 methodology). Always a string. Per-species Michigan C-values sourced from: Reznicek, A.A., M.R. Penskar, B.S. Walters, and B.S. Slaughter. 2014. Michigan Floristic Quality Assessment Database. University of Michigan Herbarium and Michigan Natural Features Inventory. Values: '0' (cosmopolitan, weedy, highly tolerant of disturbance) through '10' (restricted to pristine habitats). '*' = non-native/adventive; no C-value assigned. Never parseInt. Distinct from: w (Coefficient of Wetness, -5 to +5 scale) and wet (WIS categorical code). w: Coefficient of Wetness (Swink & Wilhelm FQA). Numeric, -5 to +5. Fixed W values by WIS category: OBL = -5; FACW = -3; FAC = 0; FACU = +3; UPL = +5. Distinct from: c (Coefficient of Conservatism, 0–10 fidelity scale) and wet (categorical WIS string). wet: Wetland Indicator Status (WIS). String. Authority: USDA NRCS National Wetland Plant List (NWPL). OBL (Obligate Wetland, W=-5): >99% occurrence in wetlands; FACW (Facultative Wetland, W=-3): 67–99%; FAC (Facultative, W=0): 34–66%; FACU (Facultative Upland, W=+3): 1–33%; UPL (Upland, W=+5): <1%. Source may return compound values like 'FACU/UPL' for regionally variable species; pass through as-is. st: Status string. 'native' = indigenous to Michigan per Michigan Flora. 'adventive' = introduced non-native. Literal string 'NULL' (not JSON null) = absent from Michigan or status unknown; source API quirk, not a JSON null value. phys: Physiognomy (plant life form). Free-text string from source. Typical values: 'Tree', 'Shrub', 'Shrub-tree', 'Vine', 'Forb/Herb', 'Graminoid', 'Fern/Fern ally', 'Aquatic'. Pass through as-is; not a closed vocabulary. na: Native/adventive flag from source; string or boolean depending on record. Use st for authoritative native status. acronym: Source-assigned abbreviated code for the species. No fixed format; pass through as-is. Other quirks: scientific names are inconsistently cased — adventive species names returned ALL-CAPS by the API. synonyms endpoint returns {synonyms:[...]} when synonyms exist, or {message:'No synonyms found'} when none — both shapes passed through. flora_search_sp may return multiple records (subspecies, varieties) for one query — all records included in search_records. Method: api_fetch. Results are cached between requests."},{"source_id":"mnfi","name":"Michigan Natural Features Inventory — Natural Community Classification","knowledge_type":"source_wrapper","status":"live","description":"Natural community classifications, conservation ranks, ecological descriptions, characteristic plant lists, and county-level occurrence records for species and communities across all 83 Michigan counties — covering 77 community types spanning Michigan's major ecological zones. From the Michigan Natural Features Inventory (MNFI), a research program of Michigan State University Extension.","input_summary":"Community ID, slug, or name; or Michigan county name for county element lookups","output_summary":"Natural community classification data: name, class, group, global rank, state rank, description sections, characteristic plant list, MNFI URL, and county distribution map link. County element data: species/community occurrences per county with conservation status codes and last observation year.","dependencies":[],"update_frequency":"Community classification and descriptions: imported from MNFI website (April 2026 snapshot); re-import required for updates (POST /api/mnfi/import-descriptions). County element data: fetched from MNFI public JSON API for all 83 counties; refresh via POST /api/mnfi/import-county-elements.","known_limitations":"Community description text (overview, landscape context, soils, vegetation) requires a web scraping import step (POST /api/mnfi/import-descriptions) and may be null until run. Characteristic plant lists require POST /api/mnfi/import-plant-lists. Geographic scope: Michigan only. No national or multi-state coverage.","metadata_url":"https://ferns-eco-data.replit.app/api/mnfi/metadata","explorer_url":"https://ferns-eco-data.replit.app/source/mnfi","permission_granted":true,"permission_status":"Public access — MNFI natural community classification, descriptions, and county element data are published by Michigan State University Extension at mnfi.anr.msu.edu. FERNS imports community classification data at startup and imports county element data (species and community occurrences per Michigan county) via MNFI's public JSON API (countyQuery and countyCommunityQuery endpoints). No authentication is required for any MNFI data consumed by FERNS.","general_summary":"The Michigan Natural Features Inventory (MNFI), a research program of Michigan State University Extension, maintains Michigan's authoritative classification of natural communities — the 77 recurring plant community types (such as oak woodlands, sedge meadows, and bog forests) that define Michigan's ecological landscape. FERNS hosts the complete community classification: 77 types spanning 5 ecological classes and 18 community groups, each with a NatureServe global rank and Michigan state rank (measures of imperilment ranging from G1/S1 = critically imperiled to G5/S5 = secure), plus full ecological descriptions covering landscape context, soils, natural processes, vegetation, and management considerations, and characteristic plant lists by life form. County element data covers all 83 Michigan counties, with approximately 6,360 species records and 929 community records documenting which species and communities have been observed in each county, along with conservation status codes and last observation year. FERNS imports community classification data from MNFI's public website and API at startup; all data is available immediately on a correctly configured deployment. A community query returns name, class, group, conservation ranks, full description, characteristic plant list, MNFI URL, and county distribution map link; a county element query returns species and community occurrences with conservation status codes and last observation year. Community description and characteristic plant list data is imported at server startup; if a deployment has just been initialized, descriptions may take a short time to populate. Geographic scope is Michigan only.","technical_details":"Primary source: Michigan Natural Features Inventory Natural Community Classification (mnfi.anr.msu.edu/communities/classification), version accessed April 2026. Authors: Cohen, J.G., M.A. Kost, B.S. Slaughter, D.A. Albert, J.M. Lincoln, A.P. Kortenhoven, C.M. Wilton, H.D. Enander, M.E. Anderson, M.R. Parr, T.J. Bassett, and K.M. Korroch (2025). Community taxonomy extracted from mnfi.anr.msu.edu/communities/list (77 community types). Community descriptions scraped from mnfi.anr.msu.edu/communities/{id}/{slug} (77 pages). Characteristic plant lists scraped from mnfi.anr.msu.edu/communities/plant-list/{id}/{slug} (77 pages). County element data fetched from MNFI public JSON API: https://mnfi.anr.msu.edu/resources/countyQuery?county={id} (species elements, 16 columns: ELEMENT_ID, FORMATTED_SCIENTIFIC_NAME, FORMATTED_SYNONYM_NAME, SCIENTIFIC_NAME, COMMON_NAME, US_STATUS, STATE_STATUS, G_RANK, S_RANK, US_STATUS_DESCRIPTION, STATE_STATUS_DESCRIPTION, G_RANK_DESCRIPTION, S_RANK_DESCRIPTION, SPECIES_CATEGORY, COUNT, LAST_OBS_YEAR) and https://mnfi.anr.msu.edu/resources/countyCommunityQuery?county={id} (community elements, 8 columns: ELEMENT_ID, NAME, G_RANK, S_RANK, G_RANK_DESCRIPTION, S_RANK_DESCRIPTION, COUNT, LAST_OBS_DATE). County IDs 1–83 correspond to Michigan counties in alphabetical order. Each community record is keyed by MNFI community_id (integer, from URL path). Rank codes follow NatureServe methodology: G1=critically imperiled, G2=imperiled, G3=vulnerable, G4=apparently secure, G5=secure, GU=unrankable, GNR=not ranked, GX=presumed extinct; S-ranks parallel G-ranks for Michigan state level; SX=extirpated from state. Species categories in county data: Amphibians, Birds, Butterflies and Moths, Fishes, Flowering Plants, Mammals, Mussels, Reptiles, Snails, Vascular Plants, and others as returned by MNFI. Federal status codes: LE=listed endangered, LT=listed threatened, SC=species of concern. State status codes: E=endangered, T=threatened, SC=special concern. Fields stored per community: community_id, slug, name, community_class, community_group, global_rank, state_rank, overview, landscape_context, soils_description, natural_processes, vegetation, management_notes, similar_communities (jsonb), mnfi_url, county_map_url. Rank codes follow NatureServe methodology throughout (see methodology description above). Startup behavior: on first startup, the server automatically checks whether community descriptions are populated and, if not, runs the three import endpoints in sequence as a background task (non-blocking): POST /api/mnfi/import-descriptions, POST /api/mnfi/import-plant-lists, POST /api/mnfi/import-county-elements. Requires ADMIN_SECRET environment variable to be set. Subsequent startups skip the import if data is already present (idempotent check on description_fetched_at)."},{"source_id":"natureserve","name":"NatureServe Explorer — Species Conservation Status and Ecological Systems","knowledge_type":"source_wrapper","status":"live","description":"Conservation status ratings and ecological descriptions for plant and animal species across the Americas — how imperiled each species is globally, within the U.S., and within a specific state, plus federal and international protection statuses. From NatureServe, a nonprofit that coordinates conservation assessments across 80+ natural heritage programs throughout the Americas.","input_summary":"Scientific or common name string for species search; common name or ecosystem name for ecological systems search; optional US state code (default MI) for state rank","output_summary":"Species: scientific name, common name, global rank, US national rank, state rank, IUCN category, federal ESA status, CITES, COSEWIC, NatureServe Explorer URL. Ecosystems: system name, global rank, US national rank, concept description, NatureServe Explorer URL.","dependencies":[],"update_frequency":"Live API. Conservation ranks reviewed on conservation status review cycles (varies by taxon, typically every 1–10 years).","known_limitations":"State rank is only returned for the queried state (default MI). NatureServe quickSearch may return the most prominent matching taxon rather than an exact scientific name match — verify returned scientific name against query. Ecosystem conceptSentence may be null for some ecosystems with incomplete records. GNR (Not Ranked) and SNR (State Not Ranked) are common for ecosystem associations where status assessment is pending. NatureServe's Element Occurrence spatial data (precise localities) is restricted to member programs and is not available through this integration.","metadata_url":"https://ferns-eco-data.replit.app/api/natureserve/metadata","explorer_url":"https://ferns-eco-data.replit.app/source/natureserve","permission_granted":true,"permission_status":"OPEN — Free public API. Attribution required per NatureServe Terms of Use.","general_summary":"Conservation status and ecological systems data from NatureServe Explorer, the authoritative conservation status database for species and ecosystems across the Americas, maintained by NatureServe and its 80+ member programs including state Natural Heritage Programs. FERNS exposes two data types from NatureServe: species conservation status (global rank G1–G5, US national rank N1–N5, and state rank S1–S5, where 1 = critically imperiled and 5 = secure; plus IUCN Red List category, US federal Endangered Species Act listing status, CITES trade restriction status, and COSEWIC status for Canadian populations); and ecological systems (natural community types with global and national ranks and a concept description). Geographic scope: Americas-wide for global ranks; US for national ranks; configurable US state (default Michigan) for state ranks. Data accessed via NatureServe Explorer's public REST API; results are cached between requests. A species query returns scientific name, common name, all rank codes, IUCN category, federal listing status, and a direct link to the NatureServe Explorer species record. Conservation ranks are reviewed on species-specific cycles (typically 1–10 years). NatureServe's element-based G/N/S ranking system is independently assessed. Element Occurrence data (precise locality records showing exactly where a species has been documented) is restricted to member programs and is not available through this integration.","technical_details":"Source: NatureServe Explorer API (https://explorer.natureserve.org/api/data). Species search uses POST /api/data/speciesSearch with criteriaType:species and quickSearch text criteria (page 0-indexed). Ecosystem search uses POST /api/data/search with criteriaType:combined and quickSearch text criteria, filtering for ECOSYSTEM recordType results. Full taxon detail retrieved via GET /api/data/taxon/ELEMENT_GLOBAL.2.{elementGlobalId}. Global rank (grank): G1=Critically Imperiled, G2=Imperiled, G3=Vulnerable, G4=Apparently Secure, G5=Secure; GH=Possibly Extinct; GX=Presumed Extinct; GNR=Not Ranked; GU=Unrankable. National rank (nrank): N1–N5 follow same scale for US. State rank (srank): S1–S5 for queried state. IUCN categories: EX/EW/CR/EN/VU/NT/LC/DD/NE. Federal status (usesa): E=Endangered, T=Threatened, SC=Species of Concern. COSEWIC (Canada): E=Endangered, T=Threatened, SC=Special Concern, NAR=Not at Risk. State rank is extracted from elementNationals[nation=US].elementSubnationals[subnation={stateCode}].srank. Ecosystems: ecosystemGlobal.conceptSentence provides the ecosystem description. Method: api_fetch. Results are cached between requests. DB tables: natureserve_species_cache (columns: cache_key unique, scientific_name, common_name, global_rank, rounded_global_rank, national_rank, rounded_national_rank, state_code, state_rank, rounded_state_rank, iucn_category, iucn_description, federal_status, federal_status_description, state_status, cites_description, cosewic_code, cosewic_description, natureserve_url, element_global_id, raw_summary jsonb, expires_at); natureserve_ecosystems_cache (columns: cache_key unique, results jsonb, result_count, expires_at). Coverage: NatureServe maintains assessments for approximately 100,000+ species across the Americas; exact count is not published as a fixed total and is continuously updated as assessments are completed or revised."},{"source_id":"seeds-to-community-washtenaw","name":"Seeds to Community Washtenaw — Annual Native Plant Species Availability","knowledge_type":"source_wrapper","status":"live","description":"Annual lists of native plant botanical names offered at Washtenaw County, Michigan seed-growing workshops, covering program years 2023–2026, with optional suitability flags: 'Neat & Tidy' for formal garden settings and 'Sweet & Simple' for beginners (available from 2026 onward). From Seeds to Community Washtenaw, a community seed-growing program in Washtenaw County, Michigan.","input_summary":"Program year (2023–2026)","output_summary":"List of botanical names offered that year, with optional neat_and_tidy and sweet_and_simple metadata flags where tracked","dependencies":[],"update_frequency":"Updated annually after each program year's species list is finalized (typically late fall). Requires a FERNS service update to incorporate new program year data.","known_limitations":"2023 data sourced from PDF plant sheets — may not represent the complete program offering for that year. Botanical names reflect S2C program usage and are not formally reconciled to BONAP, GBIF, or Michigan Flora taxonomies. Neat & Tidy flag not tracked for 2023. Sweet & Simple flag only available from 2026 onward.","metadata_url":"https://ferns-eco-data.replit.app/api/s2c/metadata","explorer_url":"https://ferns-eco-data.replit.app/source/seeds-to-community-washtenaw","permission_granted":true,"permission_status":"GRANTED — Seeds to Community Washtenaw is operated by the data owner. Data is public-facing and published for community use. Permission to serve via FERNS explicitly granted by the program organizer.","general_summary":"Species availability records for Seeds to Community Washtenaw, a native plant seed-growing program run by a Washtenaw County, Michigan community organization; FERNS serves this data with the program organizer's permission. Data type: the list of botanical names offered for growing in each annual workshop series, extracted from program documents (PDFs and Google Sheets). Geographic scope: Washtenaw County, Michigan; taxonomic scope: native plants suitable for seed-growing workshops in the Upper Midwest. FERNS serves static in-memory data extracted from program documents; no live API is queried at runtime. A query by year returns the species list with optional metadata flags: neat_and_tidy (suitable for formal garden settings) and sweet_and_simple (beginner-friendly, 2026+). Data is updated annually when new program year documents are processed; the 2023 list is from workshop PDFs (24 species) and may be incomplete. Botanical names reflect S2C program usage and are not formally reconciled to any single taxonomic authority.","technical_details":"Source: Seeds to Community Washtenaw native plant program, Washtenaw County, Michigan. Data owner: program organizer. Permission: granted explicitly. Method: static_data. Species lists extracted from program documents per year: 2023 — plant-sheet PDF (202303-PlantSheets.pdf); 24 species; botanical names transcribed from PDF. 2024 — Google Sheets 'All Species For Growing Events' tab (file: 12DX2dQ96KUyEeNKREfpNoGHtTBxczan6uZNP3uQYyJk); 96 species; neat_and_tidy from Neat column. 2025 — Google Sheets 'Species' tab, filter Barn S3=TRUE (file: 121a1HIhNPJwyM1fr_OWgi4jMKRipF9EKDeT7_zo4mA8); 151 species; neat_and_tidy from Neat column. 2026 — Google Sheets 'Species' tab, filter Collected=TRUE (file: 1sVNi4MuqSI6tugCgDodiUJZMTMkDuK1FEXojexI5f-E); 166 species; neat_and_tidy and sweet_and_simple from S2C Lists column. Botanical names reflect S2C program usage; not formally reconciled to a single taxonomic authority. No upstream API. No cache TTL — data is in-memory static reference."},{"source_id":"universal-fqa","name":"Universal FQA — Regional C-Value Databases and Site Assessment Inventories","knowledge_type":"source_wrapper","status":"live","description":"Access to regional plant quality databases spanning US states, EPA ecoregions, and Canadian provinces — each rating native species on a 0-to-10 ecological sensitivity scale — plus thousands of ecologist-submitted field survey inventories, covering the US, Canada, and other regions. From the Universal FQA platform, developed and maintained at the University of Michigan.","input_summary":"Database selection: read region + citation fields to determine relevance. Species lookup: scientific name + database_id. Assessments: database_id (list) or assessment_id (detail).","output_summary":"Per-database: scientific name, family, acronym, nativity, C-value, W-value, physiognomy, duration, common name. Per-assessment: site name, date, location (city/county/state/country), practitioner, all FQI metrics, full species list with per-species values.","dependencies":[],"update_frequency":"Databases: static per publication year; new databases added periodically by contributing institutions. Assessments: live — new public assessments contributed by users continuously. Michigan 2014 (ID 50) has 4800+ assessments; Michigan 2024 (ID 267) has 400+.","known_limitations":"Some database IDs in the list return malformed/empty responses from the per-database endpoint. The assessment list endpoint returns no county field — county is only in the individual assessment detail. Assessment latitude/longitude fields are often blank. The API uses HTTP base URL with redirect to HTTPS. C-values are calibrated per database — the same species may have different C-values in different regional databases.","metadata_url":"https://ferns-eco-data.replit.app/api/universal-fqa/metadata","explorer_url":"https://ferns-eco-data.replit.app/source/universal-fqa","permission_granted":true,"permission_status":"OPEN — No authentication required. All endpoints are publicly accessible without registration. Attribution required.","general_summary":"Regional Floristic Quality Assessment (FQA) databases and public site assessments, hosted by Universal FQA (universalfqa.org), a platform developed and maintained at the University of Michigan. FQA is an ecological method (Swink & Wilhelm, 1979/1994) that evaluates plant community quality using Coefficient of Conservatism (C-value) scores — integers 0–10 assigned to native species by regional botanical authorities reflecting ecological fidelity to intact habitats. The platform hosts regional databases spanning US states, EPA ecoregions (geographically defined ecological zones used by the US Environmental Protection Agency), and Canadian provinces (1993–present), plus thousands of publicly shared site assessment inventories. Geographic and taxonomic scope varies by database; Michigan databases (IDs 50 and 267) cover all Michigan vascular plants. All data accessed via the universalfqa.org public REST API; species databases are cached locally after the first request and reused for subsequent queries; assessments are fetched live per request. A database query returns per-species: scientific name, family, native or non-native status, C-value, W-value, physiognomy, duration, and common name; an assessment query returns site metadata, all FQI metrics (total FQI, native FQI, adjusted FQI, mean C, mean W), and the full species list with per-species values. C-values must not be compared across databases from different regions or authorities. Michigan databases ID 50 (Reznicek et al. 2014, University of Michigan Herbarium) and ID 267 (Merjent Inc. 2024) share the same Michigan vascular flora.","technical_details":"Source: universalfqa.org public REST API. Developed and maintained by the University of Michigan. No authentication required. Base URL: http://universalfqa.org/get (HTTP; server redirects to HTTPS). All responses are JSON with envelope {status: 'success'|'error', data: unknown[][]}. FIELD DEFINITIONS — SPECIES RECORDS (returned by both database and assessment endpoints): scientific_name: Full scientific name as assigned in the regional database. String. Pass through as-is. family: Plant family. String. acronym: Source-assigned abbreviation, typically derived from genus and species initials (e.g., 'LOBCAR' for Lobelia cardinalis). String. No fixed length or format; pass through as-is. native: Nativity designation. String. Two observed values: 'native' (indigenous to the region per the database authority) or 'non-native' (introduced/adventive). Pass through as-is. c: Coefficient of Conservatism (C-value). String representation of an integer 0–10. 0 = cosmopolitan or highly tolerant of disturbance; 10 = restricted to high-quality, undisturbed habitats, per Swink & Wilhelm methodology. Assigned by regional botanists for each database; the same species may have different C-values in different regional databases. Some databases assign '*' (string) to non-native species instead of an integer. Never parse as integer without handling '*'. Distinct from: w (Coefficient of Wetness, a separate metric on a −5 to +5 numeric scale). w: Coefficient of Wetness (W-value). String representation of a numeric value, following Swink & Wilhelm fixed assignments by Wetland Indicator Status category: OBL (Obligate Wetland) = −5; FACW (Facultative Wetland) = −3; FAC (Facultative) = 0; FACU (Facultative Upland) = +3; UPL (Upland) = +5. Expresses wetland affinity numerically. Distinct from: c (Coefficient of Conservatism, a habitat-fidelity metric on a 0–10 scale). physiognomy: Plant life form. Lowercase string. Observed values: 'tree', 'shrub', 'vine', 'forb', 'grass', 'sedge', 'rush', 'fern', 'bryophyte'. Pass through as-is; vocabulary may vary by database. duration: Life cycle. Lowercase string. Observed values: 'annual', 'biennial', 'perennial'. Pass through as-is. common_name: Common name as listed in the regional database. String. FIELD DEFINITIONS — ASSESSMENT METRICS (assessment detail endpoint only): The Floristic Quality Index (FQI) is computed as the square root of species count multiplied by mean C-value. total_mean_c: Mean C-value across all recorded species (native and non-native). Numeric. native_mean_c: Mean C-value across native species only. Numeric. total_fqi: Total FQI = √(total species count) × total mean C. Numeric. native_fqi: Native FQI = √(native species count) × native mean C. Numeric. adjusted_fqi: Adjusted FQI = √(total species count) × native mean C. Uses total richness but native mean C, penalizing sites with high non-native presence while rewarding overall species richness. Numeric. pct_c0, pct_c1_3, pct_c4_6, pct_c7_10: Percentage of species in C-value bands 0, 1–3, 4–6, and 7–10. Numeric (0–100). native_tree_mean_c, native_shrub_mean_c, native_herbaceous_mean_c: Mean C-value by growth form, native species only. Numeric. total_species, native_species, non_native_species: Species richness counts. Numeric. native_species_pct, non_native_species_pct: Percentage of total species that are native or non-native. Numeric (0–100). mean_wetness, native_mean_wetness: Mean W-value across all species and native species respectively. Numeric. Physiognomy breakdown: {type}_count and {type}_pct for each of: tree, shrub, vine, forb, grass, sedge, rush, fern, bryophyte. Numeric. Duration breakdown: {type}_count and {type}_pct for each of: annual, perennial, biennial. Numeric. Native duration breakdown: native_{type}_count and native_{type}_pct for each of: annual, perennial, biennial. Numeric. ASSESSMENT LOCATION FIELDS: site_name, date (string, format varies), city, county, state, country, latitude (string or null), longitude (string or null), practitioner, weather_notes, duration_notes, community_type, other_notes, visibility (public/private status string from source). All string or null. API ENDPOINTS: GET /get/database/ — database list. Row-array; each row: [id (integer), region (string), year (string), citation (string)]. GET /get/database/{id} — full species list for one database. Row-indexed: rows 0–9 are header metadata (region, year, citation, summary counts); row 10 is column header ['Scientific Name','Family','Acronym','Native?','C','W','Physiognomy','Duration','Common Name']; rows 11+ are species data. Some database IDs return malformed or empty responses — treat species_count 0 as a known upstream limitation, not a FERNS error. GET /get/database/{id}/inventory — assessment list for one database. Row-array, no header row. Each row: [id, name, date, site, practitioner]. GET /get/inventory/{id} — full assessment detail. Row-indexed: rows 0–18 are site metadata; rows 21–41 are FQI metrics; rows 44–60 are physiognomy and duration breakdowns; rows 62+ are species rows in the same column order as the database species endpoint. CACHING: Species databases are persisted to PostgreSQL on first fetch and served from DB cache on subsequent requests. Assessments are fetched live per request — not cached. Database list is fetched live per request — not cached. DB tables: universal_fqa_databases (columns: database_id integer PK, region text, year text, citation text, species_count integer), universal_fqa_species (columns: id serial PK, database_id integer FK, scientific_name text, family text, acronym text, native text, c text, w text, physiognomy text, duration text, common_name text; unique on database_id + scientific_name). A species_count of 0 for a given database ID indicates a malformed upstream response — this is a known upstream limitation, not a FERNS error. KNOWN LIMITATIONS: Assessment list endpoint has no county or state fields — location is only available in individual assessment detail. Latitude and longitude fields are frequently blank. C-values must not be compared across regional databases without confirming that both databases use the same authority and geographic scope."},{"source_id":"ferns-registry","name":"FERNS Source Registry","knowledge_type":"system","status":"live","description":"The discovery layer for the FERNS Data Layer. Lists all registered FERNS Knowledge Services with enough detail to make a routing decision. This is the starting point for any developer, researcher, or application that wants to know what FERNS knows.","input_summary":"No input required — the index returns all registered services","output_summary":"Array of SourceSummary objects, one per registered service, each with identity, description, input/output summary, dependencies, and links to full metadata and Source Explorer","dependencies":[],"update_frequency":"Live — reflects registered services at time of request","known_limitations":"Reports what is registered; does not evaluate data quality, trust tier, or methodological soundness of registered services. Those are application-layer concerns.","metadata_url":"https://ferns-eco-data.replit.app/api/v1/sources/metadata","explorer_url":"https://ferns-eco-data.replit.app/","permission_granted":true,"permission_status":"OPEN — FERNS is a self-hosted internal system. The registry endpoint is unauthenticated and intended for use by FERNS consumers and agents.","general_summary":"FERNS Source Registry is a self-hosted system catalog maintained by the FERNS Data Layer deployment itself — not an external institution. Data type: a real-time index of all registered FERNS Knowledge Services, one entry per source, including identity, description, input/output shape, permission status, and links to full metadata and Source Explorer. Coverage: all registered FERNS sources across ecological, taxonomic, distribution, phenological, vocabulary, web-reference, and system knowledge types; no geographic or taxonomic restriction. FERNS reads directly from its internal source registry table at request time; no upstream API is called and no external data is fetched. A query returns an array of SourceSummary objects, one per registered service, each including all identity and description fields. The registry reflects the current registration state at the time of the request; entries are written at service startup by each source's seed function and are not cached separately from the database. Limitation: the registry reports what is registered, not what is reliable — it does not evaluate data quality, trust tier, accuracy, or methodological soundness of any registered source. Those are application-layer concerns. The registry does not overlap with any individual FERNS data source — it is the discovery catalog for all of them; use it as the first call in any FERNS integration to identify available sources and their capabilities.","technical_details":"FERNS Knowledge Registry. Source: internal ferns_sources table (PostgreSQL). DB table: ferns_sources (key columns: source_id text PK, name text, knowledge_type text, status text, description text, general_summary text, technical_details text, input_summary text, output_summary text, dependencies text[], update_frequency text, known_limitations text, metadata_url text, explorer_url text, permission_granted boolean, permission_status text, created_at timestamptz, updated_at timestamptz). Entries are written at service startup by each source's seed.ts via onConflictDoUpdate (upsert on source_id). The registry reads from this table without caching — every /api/v1/sources request queries the DB. Coverage: grows as new services are onboarded; source count reflects current deployment. It does not perform taxonomy reconciliation, trust tier assignment, cross-source synthesis, or data quality assessment — those are application-layer concerns. Overlap: not applicable — the registry is a system catalog for all FERNS sources, not a data source that overlaps with others. Method: system (internal DB read, no upstream HTTP call)."},{"source_id":"ferns-source-relationships","name":"FERNS Source Relationships","knowledge_type":"system","status":"live","description":"Cross-source relationship graph cataloging how FERNS data sources interact — their conflicts, overlaps, complementary coverage, and supersession relationships. Used to surface context-sensitive warnings when combining sources in a workflow.","input_summary":"No input required for the full graph; optional filter by source_id returns relationships for a specific source","output_summary":"Array of relationship records, each with source pair, relationship_type (conflict/overlap/complements/supersedes), scope, severity (blocking/cautionary/informational), description, and technical_note","dependencies":[],"update_frequency":"Static — seeded at server startup from the source-relationships metadata module. Updated when new FERNS sources are onboarded and their relationships are defined.","known_limitations":"Relationships are manually curated; coverage reflects known interactions between currently registered sources. New sources added to FERNS may not immediately have all relationships documented.","metadata_url":"https://ferns-eco-data.replit.app/api/v1/source-relationships","explorer_url":"https://ferns-eco-data.replit.app/source-relationships","permission_granted":true,"permission_status":"OPEN — FERNS is a self-hosted internal system. The source relationships endpoint is unauthenticated and intended for use by FERNS consumers and agents.","general_summary":"FERNS Source Relationships is a curated graph of cross-source interactions within the FERNS Data Layer. It documents how any two FERNS sources relate to each other — whether they conflict (return contradictory data for the same concept), overlap (index the same underlying data from different angles), complement (cover distinct aspects of the same query), or where one supersedes another (a newer or more authoritative source replaces an older one). Each relationship record carries a scope (the specific domain of interaction, e.g. taxonomy, occurrence_counts, c_values), a severity (blocking, cautionary, or informational), a plain-English description, and a technical note with field-level detail. Relationships are bidirectional — a single record covers both directions of a source pair. This graph is the machine-readable form of knowledge that previously lived as prose guidance inside individual source metadata fields. A query for all relationships returns the complete graph; a query filtered by source_id returns only the relationships involving that source. This source is maintained as static reference data by FERNS — no upstream API call is made at query time.","technical_details":"Source: internal FERNS source-relationships metadata module. DB table: ferns_source_relationships (columns: id serial PK, source_id_a text FK→ferns_sources.source_id, source_id_b text FK→ferns_sources.source_id, relationship_type text, scope text, severity text, description text, technical_note text, created_at timestamptz, updated_at timestamptz; unique on (source_id_a, source_id_b, scope) with source_id_a < source_id_b enforced by pair() helper). API endpoints: GET /api/v1/source-relationships (full graph), GET /api/v1/source-relationships?source_id={id} (filtered). Relationship types: conflict (sources return contradictory values for the same concept), overlap (sources index the same underlying data from different angles — combining counts double-counts), complements (sources cover distinct aspects — combining adds value), supersedes (source_id_a is the preferred source; source_id_b is older or less authoritative). Severity levels: blocking (combining these sources without handling the relationship will produce incorrect results), cautionary (combining is valid but requires awareness of the difference), informational (no action required; noted for completeness). Method: system (internal DB read, no upstream HTTP call). Seeded at startup via ensureSourceRelationships(); records upserted on (source_id_a, source_id_b, scope)."},{"source_id":"coefficient-of-conservatism","name":"Coefficient of Conservatism — Floristic Quality Assessment C-Value Reference","knowledge_type":"vocabulary_reference","status":"live","description":"Authoritative reference for the Coefficient of Conservatism (C-value) scale used in Floristic Quality Assessment (FQA). Defines all 12 possible values (0–10 and '*' for non-natives), their ecological meaning, and the Swink & Wilhelm methodology. Includes explicit disambiguation from the Coefficient of Wetness (W, -5 to +5), Wetland Indicator Status (OBL/FACW/FAC/FACU/UPL), and WUCOLS water use ratings (VL/L/M/H), which are frequently confused with C-values.","input_summary":"Numeric C-value (0–10) or '*' for non-native species","output_summary":"Full ecological definition: value, short label, ecological meaning, scientific description, authority, and disambiguation from related metrics","dependencies":[],"update_frequency":"Static. Swink & Wilhelm (1994) methodology; definitions do not change. Regional C-value calibrations may vary but are outside scope of this source.","known_limitations":"C-values are calibrated regionally. This source reflects the general Swink & Wilhelm methodology. Some states assign different C-values to the same species. Per-species C-value lookup is outside scope — species-level values are provided by individual flora sources (e.g., Michigan Flora).","metadata_url":"https://ferns-eco-data.replit.app/api/coefficient-of-conservatism/metadata","explorer_url":"https://ferns-eco-data.replit.app/vocabulary/coefficient","permission_granted":true,"permission_status":"OPEN — Static reference data. Methodology published by Swink & Wilhelm (1994). No authentication required.","general_summary":"Vocabulary reference for the Coefficient of Conservatism (C-value), an ecological fidelity score developed by Floyd Swink and Gerould Wilhelm in 'Plants of the Chicago Region' (1994) and used in Floristic Quality Assessment (FQA) to evaluate habitat quality. This source is maintained as static reference data by FERNS — no upstream institution or API. Scale: 0 (cosmopolitan, disturbance-tolerant) to 10 (restricted to pristine habitats); '*' = non-native/adventive species for which no C-value is assigned. Geographic and taxonomic scope: global methodology, but C-values are always calibrated regionally by local botanical authorities — the same species may have different values in different regions. This source serves as a static vocabulary reference within FERNS; results are returned from built-in reference data at query time. A query returns the full definition for a given C-value: short label, ecological meaning, scientific description, authority, and disambiguation from related metrics. Definitions do not change; this source is perpetually current. Per-species C-values are not stored here — this source defines the methodology and scale only.","technical_details":"Source: Static reference data. Methodology: Swink, F. and G. Wilhelm. 1994. Plants of the Chicago Region, 4th ed. Indiana Academy of Science. C-value assignment: integer 0–10, assigned by regional botanical authorities to native species based on ecological fidelity. Non-native (adventive) species receive '*' and are excluded from FQA calculations. Floristic Quality Index (FQI) = mean C-value × sqrt(species count); this source defines C-values only, not FQI. Values defined here reflect the general Swink & Wilhelm scale. Regional calibration: C-values are assigned independently by regional authorities; the same species may have different C-values in different state or regional FQA databases. Method: static_data. No upstream API. No cache TTL — data is in-memory reference."},{"source_id":"gobotany","name":"Go Botany — Native Plant Trust New England Flora Reference","knowledge_type":"web_reference","status":"live","description":"Identification guide and species profiles for native and naturalized vascular plants of New England (CT, MA, ME, NH, RI, VT), with identification keys, photos, and distribution maps. From Go Botany, a plant identification resource maintained by the Native Plant Trust in Framingham, Massachusetts.","input_summary":"Scientific name (binomial: genus + species epithet)","output_summary":"Direct URL to the Go Botany species profile page, validation method, and found/not-found status","dependencies":[],"update_frequency":"Live — URLs are validated at query time via HTTP. The Go Botany database is updated periodically by Native Plant Trust staff.","known_limitations":"Coverage is limited to New England (CT, MA, ME, NH, RI, VT). Subspecies, varieties, and hybrids are not individually profiled. Taxa present in southern or midwestern US but not New England return found: false. Taxonomic synonyms not recognized by Go Botany will return 404 even if the species occurs in New England.","metadata_url":"https://ferns-eco-data.replit.app/api/gobotany/metadata","explorer_url":"https://ferns-eco-data.replit.app/source/gobotany","permission_granted":true,"permission_status":"OPEN — Go Botany is a free public botanical reference maintained by the Native Plant Trust (formerly New England Wild Flower Society). No authentication required. URLs are constructed directly from scientific names without scraping.","general_summary":"Interactive botanical key and species reference for New England plants, maintained by the Native Plant Trust (nativeplanttrust.org), a conservation organization based in Framingham, MA. Data type: species profile pages with botanical description, distribution maps, photos, key characteristics, and links to related taxa; covers vascular plants native and naturalized in New England. Geographic scope: New England (CT, MA, ME, NH, RI, VT) only; taxonomic scope: vascular plants (mosses, lichens, and algae are not included; only binomials supported, not subspecies or varieties). FERNS constructs a URL from the plant scientific name and checks whether it exists on the Go Botany website; no data is stored locally. A query returns the direct species profile URL and found/not-found status; a 200 HTTP response confirms the species is in the Go Botany database. URLs are validated at query time; the Go Botany database is updated periodically by Native Plant Trust staff. Taxonomic synonyms not recognized by Go Botany will return 404 even if the species occurs in New England.","technical_details":"Source: gobotany.nativeplanttrust.org. Maintained by Native Plant Trust, Framingham, MA. URL construction: https://gobotany.nativeplanttrust.org/species/{genus}/{species}/ where {genus} and {species} are lowercase. Validation method: HTTP GET — 200 = species exists in Go Botany; 404 = not indexed. Geographic scope: New England (CT, MA, ME, NH, RI, VT). Covers vascular plants (native and naturalized); mosses, lichens, and algae are out of scope. Subspecies and varieties are not individually keyed — only binomials are supported. No DB table — URL is constructed at query time and validated via HTTP GET; no data is persisted. Coverage: New England vascular plants (native and naturalized) across the six states; Go Botany does not publish a fixed species count. Method: direct_construction with HTTP validation."},{"source_id":"google-images","name":"Google Images — Web Image Search for Plant Identification","knowledge_type":"web_reference","status":"live","description":"Image search results for any plant scientific name, drawing from Google's global index of publicly available photographs — useful for rapid visual identification of unfamiliar species. From Google Images, a service operated by Google LLC.","input_summary":"Scientific name (binomial or full trinomial)","output_summary":"Google Images search URL for the queried scientific name","dependencies":[],"update_frequency":"Live — URLs are constructed at query time. Google's index is continuously updated.","known_limitations":"Returns a search results page URL, not a species-specific image or structured data. Search results may include images of similar species, cultivars, or unrelated content. Google may change its URL format; this source should be periodically verified.","metadata_url":"https://ferns-eco-data.replit.app/api/google-images/metadata","explorer_url":"https://ferns-eco-data.replit.app/source/google-images","permission_granted":true,"permission_status":"OPEN — Google Images search URLs are publicly accessible without authentication. FERNS constructs a search URL from the scientific name; no Google API key is required. This source returns a search results page URL, not a direct image URL.","general_summary":"Web image search URL generator for any scientific name, using Google Images (images.google.com), a service operated by Google LLC. Data type: a constructed search URL that opens Google Images filtered to the queried scientific name; no structured species data, provenance, or metadata is returned. Geographic and taxonomic scope: unlimited — Google Images indexes the public web globally. FERNS constructs an image search link from the plant scientific name at query time; no HTTP validation is performed and no data is stored locally. A query returns only the image search URL; the URL is always valid. Live — URLs are constructed at query time; Google's index is continuously updated. No authentication, no rate limiting server-side; client browsers handle normal Google rate limits. Google Images provides no structured ecological data and should not be used as a data source — it is intended for rapid visual confirmation of an unfamiliar taxon when no other image is available.","technical_details":"Source: google.com/images. Operated by Google LLC. URL construction: https://www.google.com/search?tbm=isch&q={URL-encoded scientific name} where {scientific name} is the exact binomial as provided. Method: direct_construction (no HTTP validation — always valid). No rate limiting is applied server-side; client browsers handle rate limiting through normal browser usage. No DB table — URL is constructed at query time (direct_construction); no data is persisted. Coverage: unlimited — Google Images indexes the global public web. This source returns image search URLs only; no species data, provenance, or structured metadata is provided."},{"source_id":"illinois-wildflowers","name":"Illinois Wildflowers — Photographic Reference for Illinois Wild Plants","knowledge_type":"web_reference","status":"live","description":"Photographic species profiles for wild plants of Illinois, organized by habitat type across eight sections: prairie, savanna, woodland, wetland, weeds, grasses, trees, and mosses. From Illinois Wildflowers, a photographic botanical reference maintained by John Hilty.","input_summary":"Scientific name (binomial: genus + species epithet)","output_summary":"Direct URL(s) to Illinois Wildflowers species page(s), one per habitat section in which the species appears","dependencies":[],"update_frequency":"Manual re-import via admin endpoint. All eight section indexes are re-scraped when triggered.","known_limitations":"Coverage is limited to Illinois flora. A species not found in the indexes returns found: false even if present in Illinois. Species may appear in multiple sections (multiple URLs returned). Nomenclature follows the site's taxonomy, which may differ from current accepted names.","metadata_url":"https://ferns-eco-data.replit.app/api/illinois-wildflowers/metadata","explorer_url":"https://ferns-eco-data.replit.app/source/illinois-wildflowers","permission_granted":true,"permission_status":"OPEN — illinoiswildflowers.info is a public botanical reference site maintained by John Hilty. FERNS indexes species lists from eight publicly accessible habitat section index pages and stores species-to-URL mappings in its local database. No authentication or API key is required.","general_summary":"Photographic reference for wild plants of Illinois, maintained by John Hilty (illinoiswildflowers.info), a privately operated botanical website. Data type: species profile pages organized by habitat type across eight sections: prairie, savanna, woodland, wetland, weeds, grasses, trees, and mosses. Geographic scope: Illinois; taxonomic scope: wild vascular plants and mosses present in Illinois. FERNS imports all eight section index pages, aggregating them into a unified lookup table; no live scraping occurs at query time. A query returns the direct species profile URL(s) — a species appearing in multiple habitat sections returns multiple records, one per section; link text format is 'Scientific Name (Common Name)'. The index reflects the site at the time of the last admin-triggered import. Nomenclature follows the site's own taxonomy, which may differ from current accepted names.","technical_details":"Primary sources: eight habitat section indexes at https://www.illinoiswildflowers.info/{section}/{index}: prairie/plant_index.htm, savanna/savanna_index.htm, woodland/woodland_index.htm, wetland/wetland_index.htm, weeds/weed_index.htm, grasses/grass_index.htm, trees/tree_index.htm, mosses/moss_index.html. Maintained by John Hilty (illinoiswildflowers.info). Import method: HTML parse of each section index — extracts all relative <a href='...'>Scientific Name (Common Name)</a> links. Scientific name is parsed from link text by stripping the parenthesized common name. Absolute URLs are constructed by combining the section base URL with the relative href. A species appearing in multiple sections is stored as multiple rows (one per section). Lookup method: ILIKE match on scientific_name; may return multiple rows for different habitat sections. Method: species_list_scrape (multi-section) with DB lookup. DB table: botanical_species_lists (columns: id serial PK, site_id text, scientific_name text, url text, section text, imported_at; unique on (site_id, scientific_name, section)). Coverage: ~1,459 entries across 8 habitat sections; many species appear in multiple sections, yielding more DB rows than unique species. Illinois Wildflowers does not provide distribution data, conservation ranks, C-values, or nursery availability."},{"source_id":"lady-bird-johnson","name":"Lady Bird Johnson Wildflower Center — Native Plants of North America","knowledge_type":"web_reference","status":"live","description":"Native plant species profiles for North America, with habitat preferences, bloom time, growing conditions, regional suitability, wildlife value, and photographs, covering thousands of native species. From the Lady Bird Johnson Wildflower Center at The University of Texas at Austin.","input_summary":"Scientific name (genus + optional species epithet)","output_summary":"Lady Bird Johnson Wildflower Center plant search URL for the queried scientific name","dependencies":[],"update_frequency":"Live — URLs are constructed at query time. The Wildflower Center database is updated by staff periodically.","known_limitations":"Returns a search results URL, not a direct species profile URL (profile URLs require an internal plant ID code). Emphasis on North American natives; non-native species may not be indexed. The search page may return multiple results for ambiguous queries.","metadata_url":"https://ferns-eco-data.replit.app/api/lady-bird-johnson/metadata","explorer_url":"https://ferns-eco-data.replit.app/source/lady-bird-johnson","permission_granted":true,"permission_status":"OPEN — The Lady Bird Johnson Wildflower Center plant database (wildflower.org/plants) is a public reference maintained by the Lady Bird Johnson Wildflower Center at The University of Texas at Austin. No authentication or API key is required. FERNS constructs a plant search URL from the scientific name; no data is stored locally.","general_summary":"Comprehensive native plant database for North America, maintained by the Lady Bird Johnson Wildflower Center at The University of Texas at Austin (wildflower.org/plants). Data type: species profile pages for thousands of native North American species with habitat, bloom time, growing conditions, regional suitability, wildlife value, and photographs. Geographic scope: North America (emphasis on US natives; some naturalized non-natives included); taxonomic scope: vascular plants. FERNS constructs a plant search link from genus and species at query time; no data is stored locally and no HTTP validation is performed. A query returns a search results URL, not a direct species profile URL; profile URLs require knowing the Wildflower Center's internal plant ID code, which cannot be derived from the scientific name without a lookup. The search URL is always valid. Live — URLs are constructed at query time; the Wildflower Center database is updated by staff periodically. Lady Bird Johnson Wildflower Center covers all North American natives at broad geographic scope; it does not provide conservation ranks, C-values, or nursery availability.","technical_details":"Source: https://www.wildflower.org/plants/. Operated by Lady Bird Johnson Wildflower Center, The University of Texas at Austin. URL construction:   Binomial: https://www.wildflower.org/plants/search.php?search_field=genus&genus={Genus}&species={species}   Genus only: https://www.wildflower.org/plants/search.php?search_field=genus&genus={Genus} Method: direct_construction (no HTTP validation — search URL always valid). Note: The Wildflower Center uses its own plant ID codes for direct profile URLs (e.g., result.php?id_plant=ACRU2); these codes cannot be derived from the scientific name without a lookup, so search URLs are returned instead. Geographic scope: North American native plants (emphasis on US, including non-native naturalized species). No DB table — URL is constructed at query time (direct_construction); no data is persisted. Coverage: thousands of North American native and naturalized species; exact count not published; database is continuously updated by Wildflower Center staff. Lady Bird Johnson Wildflower Center does not provide conservation ranks, distribution maps, C-values, or nursery availability."},{"source_id":"minnesota-wildflowers","name":"Minnesota Wildflowers — Photographic Field Guide for Minnesota Plants","knowledge_type":"web_reference","status":"live","description":"Photographic field guide and species profiles for native and naturalized plants of Minnesota, covering roughly 1,861 taxa with photos, descriptions, and identification notes. From Minnesota Wildflowers, a photographic botanical reference maintained by Sue Dingwell.","input_summary":"Scientific name (binomial: genus + species epithet)","output_summary":"Direct URL to the Minnesota Wildflowers species page, or found: false if not indexed","dependencies":[],"update_frequency":"Manual re-import via admin endpoint. Species list re-scraped from the site when triggered.","known_limitations":"Coverage is limited to Minnesota flora (native and naturalized). URLs use common-name slugs not derivable from scientific names — the species list index is authoritative. Exact binomial match required (case-insensitive); subspecies and varieties follow site taxonomy.","metadata_url":"https://ferns-eco-data.replit.app/api/minnesota-wildflowers/metadata","explorer_url":"https://ferns-eco-data.replit.app/source/minnesota-wildflowers","permission_granted":true,"permission_status":"OPEN — minnesotawildflowers.info is a public botanical reference site maintained by Sue Dingwell. FERNS indexes the species list from the publicly accessible /page/plants-by-name page and stores species-to-URL mappings in its local database. No authentication or API key is required.","general_summary":"Photographic field guide for native and naturalized plants of Minnesota, maintained by Sue Dingwell (minnesotawildflowers.info), a privately operated botanical website. Data type: species profile pages with photos, descriptions, identification notes, and bloom time information; covers ~1,861 taxa organized by plant type (flower, tree, grass-sedge-rush, fern, shrub, vine, aquatic) with URLs using common-name slugs under category paths. Geographic scope: Minnesota; taxonomic scope: native and naturalized vascular plants of Minnesota. FERNS imports the authoritative species list from the site's plants-by-name index and stores species-to-URL mappings in its local database; no live scraping occurs at query time. A query returns the direct species profile URL or found: false; URLs use common-name slugs not derivable from scientific names — the species list index is authoritative. The index reflects the site at the time of the last admin-triggered import. Exact binomial match required (case-insensitive); subspecies and varieties follow site taxonomy.","technical_details":"Primary source: https://www.minnesotawildflowers.info/page/plants-by-name. Maintained by Sue Dingwell (minnesotawildflowers.info). Import method: HTML parse — extracts all <a href='/category/slug'>Scientific Name</a> links where the link text is the scientific name and the href is a category-qualified common-name slug. Species count: ~1,861 at time of last import. URL pattern: https://www.minnesotawildflowers.info/{category}/{common-name-slug} where category is flower, tree, grass-sedge-rush, fern, shrub, vine, or aquatic. Lookup method: ILIKE match on stored scientific_name (case-insensitive). Method: species_list_scrape with DB lookup. No HTTP validation at query time. DB table: botanical_species_lists (columns: id serial PK, site_id text, scientific_name text, url text, section text, imported_at; unique on (site_id, scientific_name, section)). Coverage: ~1,861 taxa at last import. Minnesota Wildflowers does not provide distribution data, conservation ranks, C-values, or nursery availability."},{"source_id":"missouri-plants","name":"Missouri Plants — Photographic Reference for Missouri Flora","knowledge_type":"web_reference","status":"live","description":"Photographic species profiles and ecological information for plants of Missouri, covering roughly 1,464 species including native and non-native taxa, with photographs, descriptions, taxonomy, and distribution. From Missouri Plants, a botanical reference maintained by Paul Wycoff.","input_summary":"Scientific name (binomial: genus + species epithet)","output_summary":"Direct URL to the Missouri Plants species page, or found: false if the species is not in the Missouri Plants database","dependencies":[],"update_frequency":"Manual re-import via admin endpoint. The species list is re-scraped and the database updated when triggered.","known_limitations":"Coverage is limited to Missouri flora. URL filenames may use historical synonym genera — lookup is by scientific_name as stored in the list, which may differ from current accepted taxonomy. Exact name match required (genus + species, case-insensitive); subspecies and varieties not individually listed.","metadata_url":"https://ferns-eco-data.replit.app/api/missouri-plants/metadata","explorer_url":"https://ferns-eco-data.replit.app/source/missouri-plants","permission_granted":true,"permission_status":"OPEN — missouriplants.com is a public botanical reference site. FERNS indexes the species list from the publicly accessible All_Species_list.html page and stores species-to-URL mappings in its local database. No authentication or API key is required.","general_summary":"Comprehensive photographic reference for plants of Missouri, maintained by Paul Wycoff (missouriplants.com), a privately operated botanical website. Data type: species profile pages with photographs, descriptions, taxonomy, ecology, and distribution; covers over 1,400 species of Missouri flora. Geographic scope: Missouri; taxonomic scope: vascular plants present in Missouri (native and non-native). FERNS imports the authoritative species list from the site's All_Species_list.html and stores species-to-URL mappings in its local database; no live scraping occurs at query time. A query returns the direct species profile URL or found: false; URL filenames may use historical synonym genera and are not derivable from scientific names alone — the species list is authoritative. The index reflects the site at the time of the last admin-triggered import; ~1,464 species at last import. Exact genus + species match required (case-insensitive); subspecies and varieties not individually listed.","technical_details":"Primary source: missouriplants.com/All_Species_list.html. Maintained by Paul Wycoff. Import method: HTML parse of All_Species_list.html — extracts all <a href='...'> links with scientific name as link text. URL construction: absolute URLs constructed from the href in the species list page. Important: URL filenames may use taxonomic synonyms (e.g., former genus names) — the list page href is authoritative and is stored verbatim. Species count: ~1,464 at time of last import. Lookup method: ILIKE match on stored scientific_name (case-insensitive exact match preferred). Method: species_list_scrape with DB lookup. No HTTP validation at query time. DB table: botanical_species_lists (columns: id serial PK, site_id text, scientific_name text, url text, section text, imported_at; unique on (site_id, scientific_name, section)). Coverage: ~1,464 species at last import."},{"source_id":"prairie-moon","name":"Prairie Moon Nursery — Native Plant Reference and Nursery Catalog","knowledge_type":"web_reference","status":"live","description":"Growing notes, ecological information, and nursery availability for roughly 970 native wildflowers, grasses, and sedges of the Midwest and Great Plains. From Prairie Moon Nursery, a leading native plant nursery and field reference resource for the region.","input_summary":"Scientific name (binomial or trinomial with subsp./var.)","output_summary":"Direct URL to the Prairie Moon Nursery plant page, or found: false if not in the Prairie Moon catalog","dependencies":[],"update_frequency":"Manual re-import via admin endpoint. Sitemap re-parsed and database updated when triggered.","known_limitations":"Coverage limited to species carried by Prairie Moon Nursery (primarily Midwest natives). Scientific names are inferred from URL slugs, which may reflect site-specific spelling or older taxonomy. Species not in the nursery catalog return found: false.","metadata_url":"https://ferns-eco-data.replit.app/api/prairie-moon/metadata","explorer_url":"https://ferns-eco-data.replit.app/source/prairie-moon","permission_granted":true,"permission_status":"OPEN — prairiemoon.com is a public e-commerce and reference site for native plants. FERNS indexes plant URLs from the publicly accessible sitemap.xml and stores species-to-URL mappings in its local database. No authentication or API key is required.","general_summary":"Prairie Moon Nursery (Winona, Minnesota) is a leading native plant supplier for the Upper Midwest and Great Plains. Their website lists roughly 970 native species — wildflowers, grasses, sedges, ferns, and woody plants — with growing notes, ecological context, and nursery availability. FERNS imports Prairie Moon's full plant catalog periodically and stores it locally; when you query by plant scientific name, FERNS looks it up in that local index and returns a direct link to the Prairie Moon plant page if a match exists. The data reflects the time of the last import, not live nursery stock. Prairie Moon covers nursery availability and growing information only — it is not a scientific taxonomic source and does not include distribution data, nativity status, or conservation rankings.","technical_details":"Primary source: https://www.prairiemoon.com/sitemap.xml. Operator: Prairie Moon Nursery, Winona, MN (prairiemoon.com). Access method: sitemap_scrape. Sitemap parsed at import time; plant URLs filtered from root-level paths matching {genus}-{species}-{common-name-slug}, excluding /category/, /cart/, and /info/ paths (~970 plant URLs at last import). Scientific name inference from URL slug: genus = parts[0] capitalized; species = parts[1] lowercase; trinomial recognized when parts[2] is 'subsp' or 'var' (infraspecific epithet = parts[3]). DB table: botanical_species_lists (columns: id serial PK, site_id text, scientific_name text, url text, section text, imported_at; unique on (site_id, scientific_name, section)). Caching: full import on demand via POST /api/prairie-moon/import (admin-protected); no TTL; data is permanent until re-imported. Auto-import on startup when the botanical_species_lists table has no Prairie Moon rows. FERNS returns: found (bool), species (inferred scientific name string), url (direct plant page URL string), validation_method = 'species_list_lookup', imported_at (timestamp). Lookup method: ILIKE match on scientific_name column — case-insensitive, no fuzzy matching, exact binomial required. Coverage: ~970 plant URLs across vascular plants (wildflowers, grasses, sedges, ferns, and woody plants) commercially available from Prairie Moon Nursery at time of last import. Geographic focus: Upper Midwest and Great Plains. Known limitation: URL slug spelling may not match current accepted taxonomy — synonyms and older names not yet updated on the Prairie Moon site will not match. Prairie Moon is a nursery catalog, not a scientific taxonomic authority. It does not provide distribution data, nativity status, conservation status, or C-values."},{"source_id":"usda-plants","name":"USDA PLANTS Database — Federal Plant Taxonomy and Occurrence Reference","knowledge_type":"web_reference","status":"live","description":"Plant taxonomy, synonyms, state-level occurrence data, Wetland Indicator Status, and legal status for vascular plants, mosses, liverworts, and lichens across the United States and territories. From the USDA PLANTS Database, maintained by the USDA Natural Resources Conservation Service (NRCS).","input_summary":"Scientific name (binomial or trinomial)","output_summary":"USDA PLANTS search results URL for the queried scientific name","dependencies":[],"update_frequency":"Live — URLs are constructed at query time. The USDA PLANTS database is updated continuously by NRCS.","known_limitations":"Returns a search results page URL, not a direct species profile URL (profile URLs require the USDA symbol). The search results page is JavaScript-rendered; requires a browser. Synonyms may produce multiple search results; accepted name preferred for best results.","metadata_url":"https://ferns-eco-data.replit.app/api/usda-plants/metadata","explorer_url":"https://ferns-eco-data.replit.app/source/usda-plants","permission_granted":true,"permission_status":"OPEN — USDA PLANTS Database (plants.usda.gov) is a public-domain government resource maintained by the USDA Natural Resources Conservation Service (NRCS). No authentication or API key is required. FERNS constructs a search URL from the scientific name; no USDA data is stored locally.","general_summary":"Authoritative federal plant taxonomy and occurrence database, maintained by the USDA Natural Resources Conservation Service (NRCS) at plants.usda.gov. Data type: species profile pages with taxonomy, synonyms, state-level occurrence data, Wetland Indicator Status, legal status, and related resources; covers vascular plants, mosses, liverworts, hornworts, and lichens in the United States and its territories. Geographic scope: US and territories; taxonomic scope: all land plants. FERNS constructs a plant search link from the scientific name at query time; no data is stored locally and no HTTP validation is performed. A query returns a search results URL; profile URLs require knowing the USDA symbol code (e.g., ACRU for Acer rubrum), which cannot be derived from the scientific name without a lookup. The search results page is JavaScript-rendered (React SPA) and requires a browser to display results. Live — URLs are constructed at query time; the USDA PLANTS database is updated continuously by NRCS. USDA PLANTS is the federal nomenclatural authority for US plant taxonomy, operated by NRCS.","technical_details":"Source: https://plants.usda.gov. Operated by USDA Natural Resources Conservation Service (NRCS). URL construction: https://plants.usda.gov/home/basicSearchResults?nameSearch={URL-encoded scientific name} where the scientific name is the exact binomial as provided. Note: USDA PLANTS uses symbol-based profile URLs (e.g., ?symbol=ACRU for Acer rubrum); the symbol cannot be derived from the scientific name without a lookup. FERNS therefore returns a search results URL rather than a direct profile URL. Method: direct_construction (no HTTP validation — search URL always valid). The search results page is JavaScript-rendered (React SPA); the returned URL requires a browser to display results. No DB table — URL is constructed at query time (direct_construction); no data is persisted. Coverage: US and territories; all land plants (vascular plants, mosses, liverworts, hornworts, lichens). Note: USDA PLANTS symbol-based profile URLs (e.g., ?symbol=ACRU) cannot be derived from the scientific name alone — FERNS therefore returns a search URL."},{"source_id":"wetland-indicator-status","name":"Wetland Indicator Status & Coefficient of Wetness — USDA NRCS NWPL Reference","knowledge_type":"vocabulary_reference","status":"live","description":"Authoritative reference for the Wetland Indicator Status (WIS) codes (OBL, FACW, FAC, FACU, UPL) and their companion Coefficient of Wetness (W) values (-5 to +5). Codes are defined by the USDA NRCS National Wetland Plant List (NWPL) under U.S. Army Corps of Engineers (USACE) authority. Includes explicit disambiguation from WUCOLS (a landscape irrigation system, not an ecological classifier) and from the Coefficient of Conservatism (a habitat quality metric, not a wetness measure).","input_summary":"WIS code (OBL, FACW, FAC, FACU, or UPL) or numeric W-value (-5, -3, 0, 3, or 5)","output_summary":"Full definition: code, W-value, wetland occurrence frequency range, ecological meaning, scientific description, and authority","dependencies":[],"update_frequency":"Static. USDA NRCS NWPL codes are periodically updated for specific species, but the five-category classification system itself is stable. This source defines the classification system, not per-species ratings.","known_limitations":"Defines the national WIS classification system only. Per-species ratings are provided by individual flora sources (e.g., Michigan Flora). Regional wetland indicator variations exist — some species have different ratings by region (e.g., 'FACU/UPL'); this source defines the national standard only.","metadata_url":"https://ferns-eco-data.replit.app/api/wetland-indicator/metadata","explorer_url":"https://ferns-eco-data.replit.app/vocabulary/wetland-indicator","permission_granted":true,"permission_status":"OPEN — Static reference data. Wetland indicator codes defined by USDA NRCS National Wetland Plant List and U.S. Army Corps of Engineers. No authentication required.","general_summary":"Vocabulary reference for the Wetland Indicator Status (WIS) classification system, defined by the USDA NRCS National Wetland Plant List (NWPL) under U.S. Army Corps of Engineers authority. This source is maintained as static reference data by FERNS — no upstream API call is made at query time. Five national codes describe how often a species occurs in wetlands: OBL (>99%), FACW (67–99%), FAC (34–66%), FACU (1–33%), UPL (<1%); each has a numeric Coefficient of Wetness (W-value) companion: OBL = -5, FACW = -3, FAC = 0, FACU = +3, UPL = +5. Scope: national (US) classification system; per-species ratings may vary regionally. A query returns the full definition for a WIS code or W-value: occurrence frequency range, ecological meaning, W-value companion, authority, and disambiguation from other metrics. Definitions do not change; this source is perpetually current.","technical_details":"Source: Static reference data. Authority: USDA NRCS National Wetland Plant List (NWPL), maintained under U.S. Army Corps of Engineers (USACE) regulatory authority. See: https://wetland-plants.usace.army.mil/ WIS codes — national standard: OBL (Obligate Wetland, W=-5): >99% occurrence in wetlands under natural conditions; almost never in uplands. FACW (Facultative Wetland, W=-3): 67–99% in wetlands; occasionally in uplands. FAC (Facultative, W=0): 34–66% in wetlands; equal probability in either habitat type. FACU (Facultative Upland, W=+3): 1–33% in wetlands; usually found in uplands. UPL (Upland, W=+5): <1% in wetlands under natural conditions; almost exclusively in uplands. W (Coefficient of Wetness): numeric, -5 to +5. Developed by Swink & Wilhelm (1994) for use in Floristic Quality Assessment (FQA). W values are fixed by WIS code; they are not independently assigned. Mean W-value for a plant community is calculated as the arithmetic mean of W-values of all species present. Regional variation: USDA NRCS assigns regional ratings for species with geographically variable wetland affinity; compound codes such as 'FACU/UPL' reflect regional disagreement and are valid WIS values. Method: static_data. No upstream API. No cache TTL — data is in-memory reference."},{"source_id":"wucols-water-use","name":"WUCOLS — Water Use Classifications of Landscape Species (UC Cooperative Extension)","knowledge_type":"vocabulary_reference","status":"live","description":"Authoritative reference for WUCOLS (Water Use Classifications of Landscape Species), the UC Cooperative Extension system for rating supplemental irrigation needs of landscape plants. Defines all four classification levels (VL, L, M, H) by percentage of reference evapotranspiration (ETo). Includes explicit disambiguation from Wetland Indicator Status (OBL/FACW/FAC/FACU/UPL), which is an ecological wetland classifier and not a watering guide.","input_summary":"WUCOLS water use code (VL, L, M, or H)","output_summary":"Full definition: code, full name, ETo percentage range, irrigation need description, scientific description, and authority","dependencies":[],"update_frequency":"Static. WUCOLS IV (2014) classification levels are stable. Species-level ratings are updated periodically in the WUCOLS database but are outside scope of this source.","known_limitations":"Defines the WUCOLS classification system only, not per-species ratings. WUCOLS is calibrated for California climate zones; applicability varies in other regions. The UC WUCOLS database contains species-level ratings but is not integrated into this source.","metadata_url":"https://ferns-eco-data.replit.app/api/wucols/metadata","explorer_url":"https://ferns-eco-data.replit.app/vocabulary/wucols","permission_granted":true,"permission_status":"OPEN — Static reference data. WUCOLS methodology published by the University of California Cooperative Extension. No authentication required.","general_summary":"Vocabulary reference for WUCOLS (Water Use Classifications of Landscape Species), a supplemental irrigation classification developed by the University of California Cooperative Extension (UC CES) and widely used by nursery professionals, landscape architects, and water agencies. This source is maintained as static reference data by FERNS — no upstream API call is made at query time. Four classification levels rate how much supplemental irrigation a plant needs beyond natural rainfall: VL (Very Low, <10% ETo), L (Low, 10–30% ETo), M (Medium, 40–60% ETo), H (High, 70–90% ETo). Scope: US, primarily calibrated for California climate zones; applicability varies elsewhere. A query returns the full definition for a WUCOLS code: ETo percentage range, irrigation frequency description, scientific rationale, and authority. Definitions do not change; this source is perpetually current. Per-species WUCOLS ratings are not stored here — this source defines only the four-level classification system (VL/L/M/H).","technical_details":"Source: Static reference data. Authority: University of California Cooperative Extension (UC CES). Reference: Costello, L.R. et al. WUCOLS IV: Water Use Classification of Landscape Species. UC Cooperative Extension, 2014. https://ucanr.edu/sites/WUCOLS/ Classification method: Supplemental irrigation need expressed as fraction of reference evapotranspiration (ETo). ETo is calculated from local climate data (temperature, humidity, wind, solar radiation) per ASCE Penman-Monteith method. WUCOLS levels: VL (Very Low, <10% ETo): minimal supplemental irrigation needed after establishment; drought-adapted species. L (Low, 10–30% ETo): infrequent deep irrigation; plants tolerate dry periods between watering events. M (Medium, 40–60% ETo): moderate regular irrigation; typical garden watering schedule. H (High, 70–90% ETo): frequent substantial irrigation; plants require near-continuous soil moisture. Regional note: WUCOLS ratings are calibrated for California climate zones. The same species may have different ratings in different California climate regions (e.g., coastal vs. inland vs. desert). This source defines the classification system; species-level ratings are outside scope. Method: static_data. No upstream API. No cache TTL — data is in-memory reference."}]},"provenance":{"source_id":"ferns-registry","fetched_at":"2026-04-22T10:44:35.921Z","method":"system","upstream_url":"internal:ferns_sources","general_summary":"FERNS Source Registry — live catalog of all registered FERNS Knowledge Services. Reflects current registration state at time of request. Populated at service startup.","technical_details":"FERNS Knowledge Registry. Source: internal ferns_sources table. Entries are written at service build time by each source's seed function. The registry reads from this table without caching. It does not perform taxonomy reconciliation, trust tier assignment, or cross-source synthesis — those are application-layer concerns. Method: system (internal DB read, no upstream HTTP call)."}}