Open Hive Data Standard

OHDS v1.1

A universal interchange format for apiary, pollinator, and forage citizen science data. One privacy-first export format covering hive management, pollinator observations, plant monitoring, and harvest records.

OHDS v1.1 Builds on VODS v1.0 CC-BY-4.0 STABLE
§ 1

Overview

OHDS is a domain specialization of VODS (Veydrin Open Data Standard). Every OHDS document is also a valid VODS document. OHDS adds the ohds_version field and the domain payload arrays on top of the VODS envelope. Five payload types are defined: inspections (hive management), apiary_summary (seasonal colony counts), harvests (honey, wax, propolis, pollen), pollinator_observations (species sightings), and forage_observations (plant bloom and nectar flow). Refer to the VODS v1.0 specification for the full definition of envelope fields, the anonymization model, the extensions system, and the versioning contract. This document specifies only what OHDS adds.

VODS dependency. OHDS v1.0 requires VODS v1.0. The four VODS envelope fields (vods_version, export_id, export_date, export_mode) are required in every OHDS document by virtue of the VODS dependency. They are described here for reference; their authoritative definition is in the VODS spec.

An OHDS file is a single .ohds.json file. Applications export it; converters transform it into program-specific formats. No SDK or library is required. Any developer who can write JSON can implement the standard in an afternoon.

Conventions. The key words "MUST", "MUST NOT", "SHOULD", and "MAY" in this document follow RFC 2119 and RFC 8174, consistent with VODS v1.0.
Known implementations. The Veydrin Order's Ojarim pollinator atlas implements OHDS for hive observation and apiary data exports. If you ship an OHDS-conforming export, open an issue on the protocols repository and we will list it here.
§ 2

Document Envelope

Every OHDS document begins with the VODS envelope (inherited) followed by the OHDS domain version field. Together these five fields identify the document and its conformance claims.

FieldTypeSourceReq?Description
vods_versionstringVODSreq VODS version this document conforms to. Must be "1.0" for documents conforming to VODS v1.0.
export_idstring (UUID)VODSreq Random UUID v4, generated fresh per export. Never reused.
export_datestring (ISO 8601)VODSreq Full datetime with timezone. Example: "2026-03-09T14:22:00Z".
export_modeenumVODSreq "anonymous" — randomized refs per export. "tracked" — stable per-program pseudonymous refs. See VODS §3.
ohds_versionstringOHDSreq OHDS specification version. Currently "1.0". Consumers MUST accept any version with a matching major number.
extensionsobjectVODSopt Namespaced org-specific fields. Consumers ignore unrecognized namespaces. See VODS §4.

Minimum content rule

An OHDS document MUST contain at least one of inspections or apiary_summary, and whichever arrays are present MUST be non-empty. A document with neither array, or with both arrays empty, is not valid OHDS.

§ 3

Inspection Record

One record per hive visit. The inspections array contains these records. Fields marked optional MAY be omitted entirely — producers MUST NOT include a field with a null value.

FieldTypeReq?Description
inspection_datestring (ISO 8601 date)reqDate of inspection. "2026-03-01".
apiary_refstringreqPseudonymous apiary identifier. Groups hives by apiary. Links to apiary_summary records.
hive_refstringreqPseudonymous hive identifier. Generated per the active export_mode. Never the internal database ID.
colony_statusenumreqalive · dead · absconded · lost_queen · split · merged
hive_typeenumoptlangstroth · top_bar · warre · flow · long · skep · other
bee_raceenumoptitalian · carniolan · russian · buckfast · caucasian · local_mutt · africanized · unknown · other
brood_patternenumoptsolid · spotty · none
queen_seenbooleanoptWhether the queen was directly observed.
queen_statusenumoptpresent · missing · replaced · supercedure · unknown
frames_of_beesnumberoptEstimated population in standard frames of bees.
frames_of_broodnumberoptNumber of frames containing brood.
frames_of_honeynumberoptNumber of frames of capped honey stores.
varroa_countnumberoptMite count per 100 bees (or per the method below).
varroa_methodenumoptalcohol_wash · sugar_roll · sticky_board · drone_uncapping
treatmentsarrayoptTreatments applied during or since last inspection. See §3.1.
feedingobjectoptFeed provided. See §3.2.
weight_kgnumberoptHive weight in kilograms (scale hives).
temperature_cnumberoptAmbient temperature in Celsius at time of inspection.
weatherenumoptsunny · partly_cloudy · overcast · rain · wind
notesstringoptFree-text notes. Omitted in anonymous exports if the app strips notes as a privacy measure.
coordinatesobjectoptOpt-in only. {"lat": 30.2, "lon": -97.7} WGS 84. MUST be coarsened to ±0.1° minimum in anonymous mode. See §9.

3.1 Treatment record

FieldTypeReq?Description
productstringreqProduct or compound name (e.g., "oxalic acid", "ApiVar").
methodenumreqvaporization · strip · drizzle · drench · dusting · fogger · feed_additive · other
date_startstring (date)optTreatment start date.
date_endstring (date)optTreatment end date.

3.2 Feeding record

FieldTypeReq?Description
typeenumreqsugar_syrup_1:1 · sugar_syrup_2:1 · dry_sugar · candy · pollen_sub · other
quantity_kgnumberreqAmount fed in kilograms.
§ 4

Apiary Summary Record

One record per apiary per season. Used for loss surveys (BIP, COLOSS). The apiary_summary array contains these records.

FieldTypeReq?Description
apiary_refstringreqPseudonymous apiary identifier. Same value as used in inspection records for this apiary.
seasonenumreqwinter · spring · summer · fall · annual
yearstringreqReporting year or range. "2025" or "2025-2026" for winter seasons.
season_startstring (date)optStart date of the reporting season. Programs define their own boundaries; include when known.
season_endstring (date)optEnd date of the reporting season.
colonies_startintegerreqColonies at the start of the season.
colonies_endintegerreqColonies surviving at the end of the season.
lost_deadintegeroptColonies lost — colony died.
lost_queenintegeroptColonies lost — queen failure.
lost_disasterintegeroptColonies lost — external event (weather, vandalism, etc.).
new_purchasedintegeroptNew colonies acquired by purchase.
new_splitsintegeroptNew colonies created by split.
colonies_soldintegeroptColonies sold or given away during the season.
perceived_loss_causesstring[]optBeekeeper's attributed causes. MUST use values from: varroa · nosema · pesticides · starvation · weather · ccd · weak_fall · queen_failure · other · unknown
operation_sizeenumoptbackyard (1–24) · sideline (25–299) · commercial (300+)
migratorybooleanoptWhether hives were moved for pollination or honey production.
regionstringoptISO 3166-2 region code. Example: "US-TX", "DE-BY".
BIP loss rate. BIP calculates loss rate as total_lost / colonies_at_risk, where at-risk = colonies_start + new_purchased + new_splits. Include these fields when targeting BIP format.
§ 5

Harvest Record

One record per harvest event. The harvests array contains these records. Tracks honey, wax, propolis, pollen, and other hive products.

FieldTypeReq?Description
harvest_datestring (ISO 8601 date)reqDate of harvest.
apiary_refstringreqPseudonymous apiary identifier. Same value as used in inspection records.
hive_refstringoptPseudonymous hive identifier. Omit if harvest is from the entire apiary (bulk extraction).
productenumreqhoney · wax · propolis · pollen · royal_jelly · other
quantitynumberreqAmount harvested in the unit specified by unit.
unitenumreqkg · lb · g · oz · litre · gallon · frame
honey_typestringoptVarietal or source description (e.g., "wildflower", "clover", "manuka").
moisture_pctnumberoptMoisture content as percentage (refractometer reading). Relevant for honey quality.
notesstringoptFree-text notes. Omitted in anonymous exports if stripped for privacy.
§ 6

Pollinator Observation

One record per sighting event. The pollinator_observations array contains these records. Records any pollinator species including honey bees observed as pollinators (distinct from hive management data in inspections).

FieldTypeReq?Description
observation_datestring (ISO 8601 date)reqDate of observation.
speciesstringreqCommon or scientific name of the pollinator observed. Free text — use the most specific identification possible.
species_groupenumopthoney_bee · bumble_bee · solitary_bee · wasp · butterfly · moth · hoverfly · beetle · bird · bat · other
countintegeroptNumber of individuals observed. Omit if not counted.
behaviorenumoptforaging · nesting · resting · mating · transiting · other
plant_observed_onstringoptPlant species the pollinator was observed visiting. Links conceptually to forage_observations.
photo_refstringoptReference identifier for an attached photo. Format is implementation-defined (filename, URI, or hash).
coordinatesobjectoptOpt-in. {"lat": 30.2, "lon": -97.7} WGS 84. MUST be coarsened to ±0.1° in anonymous mode.
regionstringoptISO 3166-2 region code.
notesstringoptFree-text notes. Privacy-strip in anonymous mode.
Honey bees as pollinators. Honey bee sightings as pollinators go in pollinator_observations with species_group: "honey_bee". This is distinct from inspections, which tracks colony management. A beekeeper inspecting hive health records an inspection. A beekeeper observing honey bees foraging on clover records a pollinator_observation. Both are valuable; they serve different research questions.
§ 7

Forage Observation

One record per plant bloom observation. The forage_observations array contains these records. Tracks what plants are blooming, their nectar flow quality, and bloom timing — critical data for forage mapping and pollinator habitat assessment.

FieldTypeReq?Description
observation_datestring (ISO 8601 date)reqDate of observation.
plant_namestringreqCommon or scientific name of the plant.
bloom_stageenumoptbudding · early_bloom · peak_bloom · late_bloom · done
nectar_flowenumoptnone · light · moderate · heavy
pollen_availablebooleanoptWhether pollen was visibly available on the plant.
abundanceenumoptrare · scattered · common · dominant
photo_refstringoptReference identifier for an attached photo.
coordinatesobjectoptOpt-in. {"lat": 30.2, "lon": -97.7} WGS 84. MUST be coarsened to ±0.1° in anonymous mode.
regionstringoptISO 3166-2 region code.
notesstringoptFree-text notes. Privacy-strip in anonymous mode.
§ 8

Full Example

Anonymous export
Tracked export
{
  // VODS envelope
  "vods_version":  "1.0",
  "export_id":    "a3f8c2e1-04b7-4d9e-b221-7f3a09cc1d82",
  "export_date":  "2026-03-09T14:22:00Z",
  "export_mode":  "anonymous",

  // OHDS domain fields
  "ohds_version":  "1.0",

  "inspections": [
    {
      "inspection_date": "2026-03-01",
      "apiary_ref":      "A-9f4c",   // randomized this export
      "hive_ref":        "H-2a71",   // randomized this export
      "colony_status":   "alive",
      "hive_type":       "langstroth",
      "bee_race":        "italian",
      "frames_of_bees":  8,
      "varroa_count":    1.4,
      "varroa_method":   "alcohol_wash",
      "treatments": [
        {
          "product":    "oxalic acid",
          "method":     "vaporization",
          "date_start": "2026-02-15"
        }
      ]
    }
  ],

  "apiary_summary": [
    {
      "apiary_ref":      "A-9f4c",
      "season":          "winter",
      "year":            "2025-2026",
      "season_start":    "2025-10-01",
      "season_end":      "2026-04-01",
      "colonies_start":  12,
      "colonies_end":    10,
      "lost_dead":       1,
      "lost_queen":      1,
      "new_splits":      2,
      "operation_size":  "backyard",
      "region":          "US-TX"
    }
  ]
}
{
  // VODS envelope — tracked mode for longitudinal program
  "vods_version":  "1.0",
  "export_id":    "d91cc3f4-88ab-4e02-a301-0f2b17dc5e41",
  "export_date":  "2026-03-09T14:22:00Z",
  "export_mode":  "tracked",

  "ohds_version":  "1.0",

  "inspections": [
    {
      "inspection_date": "2026-03-01",
      "apiary_ref":      "A-bip-7c3d",  // stable for BIP program
      "hive_ref":        "H-bip-4f19",  // stable for BIP program
      "colony_status":   "alive",
      "frames_of_bees":  9,
      "varroa_count":    0.8,
      "varroa_method":   "alcohol_wash"
    }
  ],

  "extensions": {
    "hfh": {
      "program_cohort": "Spring 2026",
      "mentor_id":      "M-42"
    }
  }
}

Annotations (//) are shown for readability. Valid JSON does not permit comments — omit them in production output.

§ 9

Reference Converters

These snippets transform an OHDS document into the format expected by major citizen science programs. They are reference implementations — not the only valid approach.

BIP format (Python)

def ohds_to_bip(ohds: dict) -> list[dict]:
    """Convert OHDS apiary_summary records to BIP loss survey rows."""
    rows = []
    for s in ohds.get("apiary_summary", []):
        start     = s["colonies_start"]
        purchased = s.get("new_purchased", 0)
        splits    = s.get("new_splits", 0)
        at_risk   = start + purchased + splits
        lost      = start - s["colonies_end"]

        rows.append({
            "apiary_id":      s["apiary_ref"],
            "season":         s["season"],
            "year":           s["year"],
            "colonies_oct1":  start,
            "colonies_april": s["colonies_end"],
            "total_lost":     lost,
            "loss_rate":      round(lost / at_risk, 4) if at_risk else None,
            "operation_size": s.get("operation_size"),
            "region":         s.get("region"),
        })
    return rows

COLOSS format (Python)

def ohds_to_coloss(ohds: dict) -> list[dict]:
    """Convert OHDS apiary_summary to COLOSS questionnaire rows."""
    rows = []
    for s in ohds.get("apiary_summary", []):
        rows.append({
            "apiary_ref":         s["apiary_ref"],
            "country_region":     s.get("region", ""),
            "season":             s.get("season"),
            "year":               s["year"],
            "season_start":       s.get("season_start"),
            "season_end":         s.get("season_end"),
            "colonies_managed":   s["colonies_start"],
            "colonies_lost":      s["colonies_start"] - s["colonies_end"],
            "colonies_survived":  s["colonies_end"],
            "loss_causes":        ",".join(s.get("perceived_loss_causes", [])),
            "operation_type":     s.get("operation_size"),
            "migratory":          s.get("migratory"),
        })
    return rows
§ 10

Conformance Rules

An application claims OHDS v1.0 conformance by satisfying all VODS v1.0 conformance rules (see VODS spec §6) and the following OHDS-specific rules. A machine-readable schema for automated validation is available at ohds-v1.0.schema.json.

§ 11

Glossary

Beekeeping terminology used in this specification. Implementers who are not beekeepers should reference this section when mapping field names to user interfaces or documentation.

TermDefinition
AbscondedA colony that abandoned its hive entirely, leaving behind comb and stores.
Alcohol washVarroa mite sampling method: a measured scoop of ~300 bees is washed in alcohol to dislodge and count mites.
BIPBee Informed Partnership — US-based citizen science program that conducts annual colony loss surveys.
Brood patternThe layout of developing bee larvae on a frame. A solid pattern indicates a healthy queen; a spotty pattern may indicate disease or queen problems.
CCDColony Collapse Disorder — phenomenon where worker bees abandon a hive, leaving the queen and brood behind.
COLOSSPrevention of honey bee COlony LOSSes — international research association coordinating standardized colony loss monitoring across 90+ countries.
Drone uncappingVarroa monitoring method: drone brood cells are uncapped and inspected for mites, which preferentially infest drone brood.
Flow hiveHive design with mechanical frames that allow honey extraction without opening the hive.
Frames of beesPopulation estimate measured by counting standard Langstroth frames covered with bees. One frame ≈ 2,000–3,000 bees.
HoneyBeeNetNASA-affiliated monitoring network tracking honey bee colony health and nectar flow data.
LangstrothMost common hive design worldwide, using removable frames in stacked boxes.
NosemaMicrosporidian gut parasite (Nosema ceranae or N. apis) affecting honey bees. A common contributor to colony decline.
SkepTraditional dome-shaped woven hive with no removable frames. Still used in some regions.
Sticky boardVarroa monitoring method: a greased board placed below the hive catches mites that naturally fall. Counted after 24–72 hours.
Sugar rollVarroa sampling method: bees are rolled in powdered sugar, which dislodges mites for counting without killing the bees.
SupercedureWhen a colony replaces its queen by raising a new one, usually because the existing queen is failing or injured.
Top bar hiveHorizontal hive design where bees build comb hanging from bars rather than within frames.
VarroaVarroa destructor — parasitic mite that feeds on honey bees. The most significant pest of managed colonies worldwide.
Warré hiveVertical top-bar hive designed for minimal intervention beekeeping. Boxes are added below rather than above.
ForagePlants that provide nectar or pollen to pollinators. Forage quality and availability directly impact colony health and honey production.
Nectar flowA period when plants are actively secreting nectar, making it available for collection by pollinators. Heavy nectar flows drive honey production.
PollinatorAny animal that transfers pollen between plants. Includes honey bees, bumble bees, solitary bees, butterflies, moths, hoverflies, beetles, birds, and bats.
Species groupA broad taxonomic category for pollinator identification when species-level ID is not possible. Enables useful data even from non-expert observers.
Bloom stageThe developmental stage of a plant's flowering period, from budding through peak bloom to completion. Affects nectar and pollen availability.
§ 12

Security and Privacy Considerations

OHDS inherits the security considerations defined in VODS §8. The following are specific to beekeeping data.

Location data and hive theft

GPS coordinates in OHDS documents can reveal the physical location of apiaries. Hive theft is a documented and growing problem worldwide — stolen colonies, equipment, and honey represent real financial loss for beekeepers. Coordinates MUST only be included with explicit user consent (O6). In anonymous mode, coordinates MUST be coarsened to ±0.1° minimum (roughly 11 km at the equator). Even in tracked mode, applications SHOULD warn users that sharing precise coordinates with external programs carries risk. Applications SHOULD default to omitting coordinates entirely.

Re-identification through pseudonyms

In tracked mode, stable apiary_ref and hive_ref pseudonyms allow longitudinal tracking across exports to the same program. Correlating pseudonyms with external datasets (public loss reports, regional survey results, operation size) could narrow down a beekeeper's identity. Implementers SHOULD default to anonymous mode when longitudinal tracking is not required for the destination program.

Free-text field sanitization

The notes and product fields accept arbitrary text. Consumers MUST sanitize these values before rendering them in web interfaces or passing them to other systems. In anonymous exports, applications SHOULD strip or redact notes fields that may contain identifying information such as names, addresses, or phone numbers.

§ 13

Extending OHDS

OHDS is designed to grow. New fields and record types can be added through two mechanisms:

Adding fields to existing record types

New optional fields MAY be added to any existing record type (inspection, apiary summary, harvest, pollinator observation, forage observation) in a MINOR version bump. New fields MUST be optional — existing valid documents MUST remain valid under the new version. Consumers MUST ignore fields they do not recognize (must-ignore semantics).

Adding new record types

New top-level arrays MAY be added in a MINOR version bump. The minimum content rule is updated to include the new array. Existing documents that do not contain the new array remain valid — the rule requires at least one non-empty array, not all of them.

Proposing changes

Anyone may propose additions to OHDS by opening an issue on the protocols repository. Proposals SHOULD include: the field name, type, whether required or optional, a description, and a rationale explaining what research question or use case the field serves. Fields that serve a single organization's needs belong in the extensions namespace (see VODS §4), not in the core spec.

Versioning rule. OHDS follows semantic versioning. MINOR versions (1.1, 1.2, ...) add optional fields and new record types. MAJOR versions (2.0) may change required fields or remove deprecated ones. Deprecated fields are marked in at least one MINOR release before removal in the next MAJOR.
§ 14

Normative References

OHDS inherits all normative references from VODS §9. The following additional references apply to OHDS domain fields.

ReferenceTitleRelevance
ISO 3166-2 Codes for the representation of names of countries and their subdivisions The region field uses ISO 3166-2 subdivision codes (e.g., US-TX, DE-BY).
WGS 84 (EPSG:4326) World Geodetic System 1984 The coordinates object uses WGS 84 latitude and longitude in decimal degrees.
BIP Bee Informed Partnership Target program for the BIP reference converter in §6. Loss rate formula referenced in §4.
COLOSS Prevention of honey bee COlony LOSSes Target program for the COLOSS reference converter in §6.
§ 15

Changelog

VersionDateChanges
1.1 2026-04-01 Added three new record types: harvests (honey, wax, propolis, pollen), pollinator_observations (species sightings with photos and coordinates), forage_observations (plant bloom and nectar flow monitoring). Updated minimum content rule to accept any of the five array types. Added §13 Extending OHDS with guidance for proposing new fields and record types. Added glossary terms for forage, nectar flow, pollinator, species group, bloom stage. Updated conformance rule O2 and O3.
1.0 2026-03-09 Initial release — inspection records, apiary summary, BIP/COLOSS converters, conformance rules.