Open Hive Data Standard
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 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_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.
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.
| Field | Type | Source | Req? | Description |
|---|---|---|---|---|
vods_version | string | VODS | req | VODS version this document conforms to. Must be "1.0" for documents conforming to VODS v1.0. |
export_id | string (UUID) | VODS | req | Random UUID v4, generated fresh per export. Never reused. |
export_date | string (ISO 8601) | VODS | req | Full datetime with timezone. Example: "2026-03-09T14:22:00Z". |
export_mode | enum | VODS | req | "anonymous" — randomized refs per export. "tracked" — stable per-program pseudonymous refs. See VODS §3. |
ohds_version | string | OHDS | req | OHDS specification version. Currently "1.0". Consumers MUST accept any version with a matching major number. |
extensions | object | VODS | opt | Namespaced org-specific fields. Consumers ignore unrecognized namespaces. See VODS §4. |
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.
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.
| Field | Type | Req? | Description |
|---|---|---|---|
inspection_date | string (ISO 8601 date) | req | Date of inspection. "2026-03-01". |
apiary_ref | string | req | Pseudonymous apiary identifier. Groups hives by apiary. Links to apiary_summary records. |
hive_ref | string | req | Pseudonymous hive identifier. Generated per the active export_mode. Never the internal database ID. |
colony_status | enum | req | alive · dead · absconded · lost_queen · split · merged |
hive_type | enum | opt | langstroth · top_bar · warre · flow · long · skep · other |
bee_race | enum | opt | italian · carniolan · russian · buckfast · caucasian · local_mutt · africanized · unknown · other |
brood_pattern | enum | opt | solid · spotty · none |
queen_seen | boolean | opt | Whether the queen was directly observed. |
queen_status | enum | opt | present · missing · replaced · supercedure · unknown |
frames_of_bees | number | opt | Estimated population in standard frames of bees. |
frames_of_brood | number | opt | Number of frames containing brood. |
frames_of_honey | number | opt | Number of frames of capped honey stores. |
varroa_count | number | opt | Mite count per 100 bees (or per the method below). |
varroa_method | enum | opt | alcohol_wash · sugar_roll · sticky_board · drone_uncapping |
treatments | array | opt | Treatments applied during or since last inspection. See §3.1. |
feeding | object | opt | Feed provided. See §3.2. |
weight_kg | number | opt | Hive weight in kilograms (scale hives). |
temperature_c | number | opt | Ambient temperature in Celsius at time of inspection. |
weather | enum | opt | sunny · partly_cloudy · overcast · rain · wind |
notes | string | opt | Free-text notes. Omitted in anonymous exports if the app strips notes as a privacy measure. |
coordinates | object | opt | Opt-in only. {"lat": 30.2, "lon": -97.7} WGS 84. MUST be coarsened to ±0.1° minimum in anonymous mode. See §9. |
| Field | Type | Req? | Description |
|---|---|---|---|
product | string | req | Product or compound name (e.g., "oxalic acid", "ApiVar"). |
method | enum | req | vaporization · strip · drizzle · drench · dusting · fogger · feed_additive · other |
date_start | string (date) | opt | Treatment start date. |
date_end | string (date) | opt | Treatment end date. |
| Field | Type | Req? | Description |
|---|---|---|---|
type | enum | req | sugar_syrup_1:1 · sugar_syrup_2:1 · dry_sugar · candy · pollen_sub · other |
quantity_kg | number | req | Amount fed in kilograms. |
One record per apiary per season. Used for loss surveys (BIP, COLOSS). The apiary_summary array contains these records.
| Field | Type | Req? | Description |
|---|---|---|---|
apiary_ref | string | req | Pseudonymous apiary identifier. Same value as used in inspection records for this apiary. |
season | enum | req | winter · spring · summer · fall · annual |
year | string | req | Reporting year or range. "2025" or "2025-2026" for winter seasons. |
season_start | string (date) | opt | Start date of the reporting season. Programs define their own boundaries; include when known. |
season_end | string (date) | opt | End date of the reporting season. |
colonies_start | integer | req | Colonies at the start of the season. |
colonies_end | integer | req | Colonies surviving at the end of the season. |
lost_dead | integer | opt | Colonies lost — colony died. |
lost_queen | integer | opt | Colonies lost — queen failure. |
lost_disaster | integer | opt | Colonies lost — external event (weather, vandalism, etc.). |
new_purchased | integer | opt | New colonies acquired by purchase. |
new_splits | integer | opt | New colonies created by split. |
colonies_sold | integer | opt | Colonies sold or given away during the season. |
perceived_loss_causes | string[] | opt | Beekeeper's attributed causes. MUST use values from: varroa · nosema · pesticides · starvation · weather · ccd · weak_fall · queen_failure · other · unknown |
operation_size | enum | opt | backyard (1–24) · sideline (25–299) · commercial (300+) |
migratory | boolean | opt | Whether hives were moved for pollination or honey production. |
region | string | opt | ISO 3166-2 region code. Example: "US-TX", "DE-BY". |
total_lost / colonies_at_risk, where at-risk = colonies_start + new_purchased + new_splits. Include these fields when targeting BIP format.
One record per harvest event. The harvests array contains these records. Tracks honey, wax, propolis, pollen, and other hive products.
| Field | Type | Req? | Description |
|---|---|---|---|
harvest_date | string (ISO 8601 date) | req | Date of harvest. |
apiary_ref | string | req | Pseudonymous apiary identifier. Same value as used in inspection records. |
hive_ref | string | opt | Pseudonymous hive identifier. Omit if harvest is from the entire apiary (bulk extraction). |
product | enum | req | honey · wax · propolis · pollen · royal_jelly · other |
quantity | number | req | Amount harvested in the unit specified by unit. |
unit | enum | req | kg · lb · g · oz · litre · gallon · frame |
honey_type | string | opt | Varietal or source description (e.g., "wildflower", "clover", "manuka"). |
moisture_pct | number | opt | Moisture content as percentage (refractometer reading). Relevant for honey quality. |
notes | string | opt | Free-text notes. Omitted in anonymous exports if stripped for privacy. |
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).
| Field | Type | Req? | Description |
|---|---|---|---|
observation_date | string (ISO 8601 date) | req | Date of observation. |
species | string | req | Common or scientific name of the pollinator observed. Free text — use the most specific identification possible. |
species_group | enum | opt | honey_bee · bumble_bee · solitary_bee · wasp · butterfly · moth · hoverfly · beetle · bird · bat · other |
count | integer | opt | Number of individuals observed. Omit if not counted. |
behavior | enum | opt | foraging · nesting · resting · mating · transiting · other |
plant_observed_on | string | opt | Plant species the pollinator was observed visiting. Links conceptually to forage_observations. |
photo_ref | string | opt | Reference identifier for an attached photo. Format is implementation-defined (filename, URI, or hash). |
coordinates | object | opt | Opt-in. {"lat": 30.2, "lon": -97.7} WGS 84. MUST be coarsened to ±0.1° in anonymous mode. |
region | string | opt | ISO 3166-2 region code. |
notes | string | opt | Free-text notes. Privacy-strip in anonymous mode. |
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.
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.
| Field | Type | Req? | Description |
|---|---|---|---|
observation_date | string (ISO 8601 date) | req | Date of observation. |
plant_name | string | req | Common or scientific name of the plant. |
bloom_stage | enum | opt | budding · early_bloom · peak_bloom · late_bloom · done |
nectar_flow | enum | opt | none · light · moderate · heavy |
pollen_available | boolean | opt | Whether pollen was visibly available on the plant. |
abundance | enum | opt | rare · scattered · common · dominant |
photo_ref | string | opt | Reference identifier for an attached photo. |
coordinates | object | opt | Opt-in. {"lat": 30.2, "lon": -97.7} WGS 84. MUST be coarsened to ±0.1° in anonymous mode. |
region | string | opt | ISO 3166-2 region code. |
notes | string | opt | Free-text notes. Privacy-strip in anonymous mode. |
{
// 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.
These snippets transform an OHDS document into the format expected by major citizen science programs. They are reference implementations — not the only valid approach.
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
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
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.
"ohds_version": "1.0".inspections, apiary_summary, harvests, pollinator_observations, or forage_observations.inspection_date, apiary_ref, hive_ref, and colony_status. Each apiary summary includes apiary_ref, season, year, colonies_start, and colonies_end. Each harvest record includes harvest_date, apiary_ref, product, quantity, and unit. Each pollinator observation includes observation_date and species. Each forage observation includes observation_date and plant_name.null.apiary_ref and hive_ref values are generated per the active export_mode. In anonymous mode all refs are randomized per export. In tracked mode refs are stable per-program pseudonyms derived without exposing internal IDs.Beekeeping terminology used in this specification. Implementers who are not beekeepers should reference this section when mapping field names to user interfaces or documentation.
| Term | Definition |
|---|---|
| Absconded | A colony that abandoned its hive entirely, leaving behind comb and stores. |
| Alcohol wash | Varroa mite sampling method: a measured scoop of ~300 bees is washed in alcohol to dislodge and count mites. |
| BIP | Bee Informed Partnership — US-based citizen science program that conducts annual colony loss surveys. |
| Brood pattern | The layout of developing bee larvae on a frame. A solid pattern indicates a healthy queen; a spotty pattern may indicate disease or queen problems. |
| CCD | Colony Collapse Disorder — phenomenon where worker bees abandon a hive, leaving the queen and brood behind. |
| COLOSS | Prevention of honey bee COlony LOSSes — international research association coordinating standardized colony loss monitoring across 90+ countries. |
| Drone uncapping | Varroa monitoring method: drone brood cells are uncapped and inspected for mites, which preferentially infest drone brood. |
| Flow hive | Hive design with mechanical frames that allow honey extraction without opening the hive. |
| Frames of bees | Population estimate measured by counting standard Langstroth frames covered with bees. One frame ≈ 2,000–3,000 bees. |
| HoneyBeeNet | NASA-affiliated monitoring network tracking honey bee colony health and nectar flow data. |
| Langstroth | Most common hive design worldwide, using removable frames in stacked boxes. |
| Nosema | Microsporidian gut parasite (Nosema ceranae or N. apis) affecting honey bees. A common contributor to colony decline. |
| Skep | Traditional dome-shaped woven hive with no removable frames. Still used in some regions. |
| Sticky board | Varroa monitoring method: a greased board placed below the hive catches mites that naturally fall. Counted after 24–72 hours. |
| Sugar roll | Varroa sampling method: bees are rolled in powdered sugar, which dislodges mites for counting without killing the bees. |
| Supercedure | When a colony replaces its queen by raising a new one, usually because the existing queen is failing or injured. |
| Top bar hive | Horizontal hive design where bees build comb hanging from bars rather than within frames. |
| Varroa | Varroa destructor — parasitic mite that feeds on honey bees. The most significant pest of managed colonies worldwide. |
| Warré hive | Vertical top-bar hive designed for minimal intervention beekeeping. Boxes are added below rather than above. |
| Forage | Plants that provide nectar or pollen to pollinators. Forage quality and availability directly impact colony health and honey production. |
| Nectar flow | A period when plants are actively secreting nectar, making it available for collection by pollinators. Heavy nectar flows drive honey production. |
| Pollinator | Any animal that transfers pollen between plants. Includes honey bees, bumble bees, solitary bees, butterflies, moths, hoverflies, beetles, birds, and bats. |
| Species group | A broad taxonomic category for pollinator identification when species-level ID is not possible. Enables useful data even from non-expert observers. |
| Bloom stage | The developmental stage of a plant's flowering period, from budding through peak bloom to completion. Affects nectar and pollen availability. |
OHDS inherits the security considerations defined in VODS §8. The following are specific to beekeeping data.
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.
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.
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.
OHDS is designed to grow. New fields and record types can be added through two mechanisms:
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).
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.
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.
OHDS inherits all normative references from VODS §9. The following additional references apply to OHDS domain fields.
| Reference | Title | Relevance |
|---|---|---|
| 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. |
| Version | Date | Changes |
|---|---|---|
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. |