Skip to main content
GET
Watch Diagnostics
Credits: 1 per mark per day (free during beta). Management requests cost 0 credits; the daily monitoring meter is separate.

Overview

Answers the question every monitoring customer eventually asks: “I expected an alert for this trademark. Why didn’t I get one?” Given a watch and a trademark, this endpoint walks through evaluation step by step and reports where it stopped, or confirms that an alert fired. It’s read-only: calling it never changes anything. Requires the portfolios:manage scope.

Path Parameters

string
required
Watch ID (wat_*).

Query Parameters

string
required
Trademark ID (tm_*) to check against this watch. A trademark ID from another org returns 404, and so does an ID that names no trademark (its error names the trademark, not the watch).

Response

string
Echoed watch ID (wat_*).
string
Echoed trademark ID (tm_*).
string
Uppercase ST.3 code of the office that issued the trademark (e.g. US, EM).
boolean
true if Signa evaluated this trademark against the watch within the current data window. false means either the change wasn’t recorded in time, or it has aged past the window. See reason.
boolean
true if this watch’s filters include the trademark’s office.
boolean
true if a change record for this trademark exists within the data window. A recorded change is a prerequisite for a match.
string | null
The lifecycle event associated with the match: trademark.created, trademark.updated, trademark.status_changed, trademark.retracted, or trademark.corrected.
boolean
true if trigger_event_type is included in the watch’s query.trigger_events filter. false explains a match that was silently dropped.
number | null
The engine score stored on the most recent alert for this (watch, trademark), the alert’s match.score. It scores the watch query and is not comparable to the 0 to 100 search relevance_score. null when no alert exists or the watch has no q. Informational only.
number | null
The watch’s stored query.score_threshold, surfaced only for legacy watches that still carry one. Inert: it no longer gates matching and is rejected on new writes. null when unset.
string[] | null
The similarity channels the watch query runs. null when the watch has no q, and for a watch created before 2026-09-29 that still uses the legacy query form.
'identical' | 'near_identical' | 'similar' | 'related' | null
The weakest match tier that can fire an alert. null for a legacy watch, which reports min_match_tier instead. See min_tier.
'exact' | 'normalized' | 'fuzzy' | 'phonetic' | null
Legacy watches only: the stored query.min_match_tier gate. null when the watch doesn’t gate by it (every legacy tier can fire) and for a v3 watch. See Watches created before 2026-09-29.
boolean
true if an alert exists for this (watch, trademark) pair.
string | null
Alert ID (alt_*) when one fired, otherwise null. Retrieve it with Get Alert, or cross-reference it against List webhook deliveries to confirm your endpoint received it.
string
Human-readable explanation for the outcome.
'per_alert' | 'digest' | null
The delivery mode that applied. Today this is per_alert or null, since always_per_alert is the only mode a watch can be created with.
object | null
Computed opposition-window state for this trademark. null whenever no window can be cited: the trademark has no publication date, no opposition rule is modeled for its office and filing route, or the window could not be computed and there is no alert row to fall back on.
object
Retention horizons for the data behind this response. See retention windows for how they interact with alerts and webhook deliveries.
string
Request identifier.
These fields appear in the response but describe internal evaluation state. Safe to ignore when debugging alert delivery.
  • lease_state: internal evaluation state; safe to ignore.
  • evaluation_epoch: internal evaluation state; safe to ignore.
  • replay_epoch_origin: internal evaluation state; safe to ignore.
  • last_relevant_sync_run: internal evaluation state; safe to ignore.

Code Examples