Identity travels
with the data.
Each organization gets its own publisher identity and scoped API key. The server binds that identity to every accepted observation so clients cannot impersonate another publisher by editing JSON.
Publisher → Key → Record
Stable slug, name, website, active state, and optional contact metadata.
Hashed at rest, labeled, revocable, scoped, and associated with exactly one publisher.
POST /observations authenticates the key before accepting the record.
The server overwrites publisher provenance with the authenticated organization identity.
Simple command-line provisioning.
python publisher_admin.py create-publisher \
--slug example-university \
--name "Example University"
python publisher_admin.py create-key \
--publisher example-university \
--label "field-research-2026"
The plaintext API key is shown once. Only its SHA-256 hash is stored.
Start narrow.
Version 0.3.0 supports the observations:write scope. The model is intentionally ready for narrower future scopes such as dataset administration, publisher metadata, moderation, or read access to restricted records.
Public map/explorer endpoints still hide records marked private.
See the publisher model in practice.
Hive telemetry + crop visitation
SYNTHETIC DEMOOrchard Sensing CollaborativeComputer vision + pollen transfer
SYNTHETIC DEMOPrairie Pollination NetworkSunflower visitation + weather context
SYNTHETIC DEMOPollinationTech DemonstrationSchema examples + interoperability