Documentation Index
Fetch the complete documentation index at: https://docs.signa.so/llms.txt
Use this file to discover all available pages before exploring further.
Choosing a watch type
The five watch types correspond to the five monitoring jobs we hear trademark teams talk about. Pick the type whose required filter is the narrowest fit for what you actually want.| You want to… | watch_type | Required field |
|---|---|---|
| Track one specific mark you own (renewals, status drift). | mark | filters.trademarkIds (single ID) |
| Watch an entire portfolio of marks at once. | portfolio | filters.trademarkIds (1+ IDs) |
| Track a competitor by owner. | owner | filters.ownerId |
| Watch new filings in a Nice class (or class set), optionally by jurisdiction. | class | filters.niceClasses |
| Detect confusingly-similar new filings (phonetic / fuzzy / combined). | similarity | q (text) |
query body is the same shape as a GET /v1/trademarks
search body — if you can build the search, you can save it as a watch.
The watch_type is the predicate; the filters carry the scoping.
The query DSL (v1)
Every watch carries aquery object:
filters uses the canonical search vocabulary: trademarkIds,
ownerId, niceClasses, jurisdictions, offices, statusPrimary,
etc. See the trademark search reference
for the full set.
q keyword constraints
- Whitespace-separated. Max 20 keywords. Each ≥3 chars.
- Stop words (
the,and,or, …) are rejected with400to keep watches from matching too broadly.
trigger_events
Subset of trademark.created, trademark.updated,
trademark.status_changed. Default: all three. Narrow this down to
silence noisy update events that don’t matter to you.
score_threshold (similarity only)
For watch_type: "similarity", this gates which match scores fire
alerts. Only matches with _score >= score_threshold produce alerts.
0.7 is a reasonable starting point; tighten to 0.85 for production
opposition workflows. Use Preview
to estimate volume before going live.
Per-jurisdiction watches
Build separate watches per jurisdiction when you want jurisdiction-specific delivery cadence, or when your in-house legal team is sliced by region. Otherwise passfilters.jurisdictions: ["US", "EU", "GB"] once and let
one watch cover the set.
Worked examples
Mark watch (one trademark)
Portfolio watch (many trademarks)
Class watch
Similarity watch (with threshold)
Forbidden DSL keys
The validator rejectsfunction_score, script_score, script, sort,
cursor, aggregations, aggs, highlight anywhere in the query
(VAL-API-005). These are presentation/scripting concerns that don’t
belong in a saved monitor. The validator also rejects query.match as
an object — earlier versions of these docs showed
match: { owner_id, trademark_id, nice_classes }, which was never
honored by the evaluator. Use filters.ownerId, filters.trademarkIds,
and filters.niceClasses instead.
Replay
If you create a watch retroactively (or the data backfills late), usePOST /v1/watches/{id}/replay
to bump evaluation_epoch. Requires the watches:admin scope.
Bulk
Create up to 100 watches in one call viaPOST /v1/watches/bulk.
The whole batch validates upfront — partial failures don’t insert.
Pre-flight with Preview
Before creating a watch, dry-run the query:score_threshold before going live.