WatchObservationRecordedPayload watch.observation.recorded@1
Generated at from
openvibe-contracts v0.107.0 and
openvibe-sdk v0.26.0.
- Version
- 1.0.0
- Owner
- watch
- Visibility
- first-party
- Status
- planned
- Compatibility
- backward
- Schema
https://openvibe.network/contracts/events/payloads/watch.observation.recorded.v1.json
watch.observation.recorded v1 (OpenVibe.Watch, plan T18): a check recorded an observation for a watch. It carries the extracted value as the source stated it and its hash, never the raw body. Envelope: subject { type: watch, id: <watch_id> }, visibility internal, priority low, actor service:watch. Watch's own records are the full observation (watch.observation@1); this event is the notification that one exists.
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
watch_id | string | yes |
| |
owner | string | yes | The watch owner's subject id: who this observation is for. |
|
observed_at | string | yes |
| |
value | any | yes | The extracted value as the source stated it; null when it stated none. | |
value_hash | string | yes | SHA-256 hex of the canonical value. |
|
changed | boolean | yes | ||
condition_met | boolean | yes |
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: price-changed
{
"watch_id": "wch_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"owner": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR",
"observed_at": "2026-10-05T09:00:00.000Z",
"value": 189.99,
"value_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"changed": true,
"condition_met": true
}Rejected: missing-owner
{
"watch_id": "wch_01JAB2C3D4E5F6G7H8J9K0MNPQ",
"observed_at": "2026-10-05T09:00:00.000Z",
"value": 189.99,
"value_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"changed": true,
"condition_met": true
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('watch.observation.recorded@1', value); // { valid, errors: [{ path, message }] }