Private beta · Pilot access only. Live polling is not enabled yet. Paid checkout is not enabled.

Triggers and comparison semantics

A watch selects one JSON value using an RFC 6901 JSON Pointer. Empty string selects the root. /items/0/id selects the first item’s ID. Escape a key’s ~ as ~0 and / as ~1. A missing path is a failed observation. A present null is a valid value.

Change

The first successful observation sets a baseline without an event. A, A, B, B, A produces two watch.changed events: A→B and B→A. JSON is canonicalized using JCS before hashing: object key order is ignored; array order and JSON types matter. The string "1" differs from the number 1. No field exclusion or array record matching is performed.

Condition

Supported operators: eq, neq, gt, gte, lt, lte. Equality compares canonical JSON values; ordering requires numbers. Emit watch.matched only on a successful false→true transition. Repeated true values do not repeatedly emit events. fire_on_initial_match=true also emits if the first observation matches. stop_after_match=true atomically emits and completes the watch. Use both for a job that might already be completed when monitoring starts.

Failed checks and edits

Network, parse and selection failures never overwrite the last successful baseline or condition state. A valid 304 preserves it. Source, credential, selector or trigger edits create a new generation and establish a fresh baseline. Metadata/name/schedule-only API edits retain the baseline. A completed or expired watch requires restart, which clears its baseline. Pause/resume retains it.

Lifecycle and health

Lifecycle: active, paused, completed, expired, quota_paused, disabled, deleted. Health: initializing, healthy, degraded after one failure, failing after three consecutive failures. Recovery emits watch.recovered. Twenty consecutive failures disable the watch; unsafe targets and HTTP 401/403 disable it immediately. Operational events also include watch.failing, watch.disabled, watch.expired and watch.quota_paused. Operational webhook delivery can be switched off; events remain in the inbox.