Analyze & annotate

Make your data tell you something. Label moments that matter, pair sensors against reference instruments, and let scheduled jobs surface patterns automatically.

Annotations: labels on your data

An AnnotationClass defines a kind of label — its fields, and which scopes it applies to (a site, device, component, or sensor). An Annotation is an applied label: a point in time or a time range, with structured values. Annotations can come from people (MANUAL) or from the system (a fired rule, a reference sensor, an external feed, or an ML inference), so a labelled history builds up as you operate.

Because annotation forms are generated from the class schema, the same UI captures very different labels — no custom form per use case.

Reference pairs and analytics jobs

A ReferencePair links a primary component to a reference component over a time span — for example a field sensor paired with a lab instrument. A JobDefinition is a declarative, scheduled computation: it names a function (such as a Pearson correlation), an input selector, a window, thresholds, and the annotation class it emits. Jobs run on a schedule and write their findings back as annotations, so analytics shows up in the same timeline as everything else.

Analytics-emitted annotations surface as auto-events — a read-only feed filtered to system sources — so operators can review what the platform noticed.

In the app

Explore labels under Annotations (/{slug}/annotations), review machine-generated findings under Auto-events (/{slug}/admin/auto-events), and manage Reference pairs (/{slug}/admin/reference-pairs).

In the API

  • GET|POST|PUT|DELETE /api/v1/annotations — apply and query labels; GET …/by-source filters by origin
  • GET|POST|PUT|DELETE /api/v1/annotation-classes — define labelable categories
  • GET|POST|PUT|DELETE /api/v1/reference-pairs — pair primary and reference components

Was this page helpful?