Create a discovery watch
Creates a discovery watch: a saved search filter that re-runs on an interval and delivers the records that newly match it.
The filter uses the same syntax and the same field names as the dataset’s own search endpoint,
so there is no second filter language. A leaf is { "field", "type", "value" } and groups
combine leaves with { "op": "and" | "or", "conditions": [...] }. Groups nest.
The first run starts within seconds and is a free baseline capped at 5 records, so you can
confirm the delivery path and the payload shape before any credit is spent. Later runs deliver
up to config.max_results_per_run records each and are charged per record delivered.
A watch whose filter matches more than 500,000 records is rejected at creation: narrow the
filter. A filter that names a field from another dataset is a valid cross-dataset condition
rather than a typo, but row-level negation (!=, not_in, (!), geo_exclude) is rejected
there because it matches subjects with some other matching row rather than subjects with
none.
Authorizations
API key passed as a Bearer token in the Authorization header.
Headers
API version to use. 2025-11-01 is the only accepted value. Send it on every call: it is
enforced today on POST /watch/{dataset}/search, where a missing or unrecognized value returns
400, and the other watch routes accept a request without it rather than relying on that.
2025-11-01 "2025-11-01"
Path Parameters
The dataset the watch is built on.
person, company, job "person"
Body
Body for creating a discovery watch. The dataset comes from the path, and the API version from the x-api-version header.
The search filter to re-run each interval. A single leaf or a nested AND/OR group.
- Option 1
- Option 2
Schedule and per-run caps for a discovery watch.
Delivery order within a run, for example newest first. Sorting does not change which records are new, only the order they arrive in when a run is capped.
Field groups or field paths to include in each delivered record. Defaults to the
dataset's standard projection. Every requested field is checked against the key's
entitlements at creation, and fields does not affect what a record costs.
Which membership transitions notify you. Only added, records that newly match, is
supported today, and it is the default.
added Delivery channels. May be empty for a pull-only watch, which pushes nothing and whose results you read from the run-history endpoints instead.
One delivery channel. Every channel on a watch receives every notification.
- Option 1
- Option 2
- Option 3
- Option 4
What happens to new records beyond max_results_per_run. redeliver leaves the
overflow unseen so it comes back in a later run. drop marks every new record seen so
the overflow never returns.
redeliver, drop "redeliver"
Response
The watch was created and its baseline run was scheduled.
A discovery watch, as returned by create, get, list, and update.
The watch's id. Use it on every management and run-history path.
47609
discovery "discovery"
person, company, job "job"
"2025-11-01"
Version of the stored config shape.
"2025-11-01"
Lifecycle state. suspended is set by the system, most often for an insufficient
balance, and blocks status changes until it is resolved.
active, paused, suspended, expired, cancelled "active"
The saved filter, as sent at creation.
- Option 1
- Option 2
Schedule and per-run caps for a discovery watch.
The configured channels. A stored channel secret is never returned.
One delivery channel. Every channel on a watch receives every notification.
- Option 1
- Option 2
- Option 3
- Option 4
"2026-07-16T03:16:38.351849Z"
When the watch last ran. null until the baseline run completes.
"2026-08-04T05:32:47.000000Z"
All-time count of records this watch has delivered.
128
All-time credits this watch has spent.
64
When this watch last delivered anything.
"2026-08-04T05:32:47.000000Z"
Related topics
Update a discovery watchList discovery watchesCancel a discovery watchGet a discovery watchCompany Discovery Watcher
