Prerequisites
- A Signa API key with
trademarks:readscope - Your target brand name, jurisdictions, and Nice classes
1
Run a knockout search
Start with a fast knockout. It runs An
q through the identical, fuzzy, and embedded channels, which is what Presets.knockout holds in the SDK. It catches the same name after folding case and punctuation, spelling edits like “Vintra”, and marks that contain the term, like “VYNTRA CLOUD”.identical or near_identical hit on a live mark in your classes is often enough to drop the name. If the knockout is clean, run the full search.2
Run a full similarity search across jurisdictions
The full search adds the Expected output:
phonetic and lookalike channels, which is what Presets.clearance holds. Phonetic matching catches sound-alikes that spelling edits miss, for example “Wyntra”. Lookalike matching catches character substitutions, such as a zero for an O or a Cyrillic letter that looks Latin.Use
jurisdictions (where a right protects), not offices (which register a record came from), for clearance. jurisdictions=EU covers EU trade marks and IRs designating the EU, and jurisdictions=CA covers IRs designating Canada as well as CIPO filings. Requesting aggregations serves the search one row per record (expanded), so the counts above count records, not marks, and search_meta.warnings[] says so. Without aggregations, jurisdictions with nice_classes returns one row per mark. See Filters and grouped results.relevance_score (0 to 100) orders the results. It is not a likelihood of confusion. Use match.tier, the classes, and the status to judge risk. See Response.3
Exclude your client's own marks
When you clear a name for a client that already holds marks, remove them from the results.
entity_id_not drops every mark whose owner is linked to that entity. Exclusions narrow the results and never change the ranking.owner_id_not excludes single owner records, entity_group_not excludes a whole corporate family, and trademark_ids_not excludes specific marks. On POST, send them under exclude ("exclude": { "entity_id": ["ent_4mRt8vQa"] }). See Exclusions.4
Check the spelling variants you plan to file
If the brand team has shortlisted variants, check each one’s exact text with the Text filters are deterministic and do not score. Without
mark_text_is filter. On GET, repeat the key once per value. Values are never split on commas, because commas are legal in marks. mark_text_is ignores case, accents, punctuation, spacing, and trademark notices, so VYNTRA also matches “Vyntra™”.q, the results come in text order and relevance_score is null. match.terms lists the values each mark satisfied. Combined with q, text filters narrow the ranked results instead. See Text filters.5
Triage results by risk level
Use
match.tier, match.via, the classes, and the status to categorize matches:Filter the full search results to isolate high-risk conflicts:
TypeScript
6
Pull full details on each conflict
For every high-risk match, fetch the detail tier to see classifications, owners, attorneys, and prosecution history.Expected output (per mark):
Pay close attention to the
goods_services_text in each classification. Two marks in the same Nice class can coexist if their goods and services descriptions do not overlap. “Payment processing software” and “cybersecurity software” are both Class 9 but serve different markets.7
Review the owner's full portfolio
Understanding the conflicting owner’s portfolio reveals how aggressively they protect their brand and whether they operate in adjacent spaces.Expected output:
8
Check for proceedings history
See whether the conflicting mark has been involved in oppositions or cancellations. This tells you how actively the owner enforces their rights.Expected output:
An owner who has successfully opposed similar marks in the past poses a higher risk. In this example, Cubic already won an opposition against another “Ventra”-variant mark, strong evidence they would oppose “Vyntra” too.
9
Compile a clearance summary
Bring together all findings into a structured report. Repeat the opposition lookup from the previous step for each distinct conflict owner, then fold the count into the risk assessment:
Watch for new conflicts
Rather than re-running this search on a schedule, create a watch scoped to the same query and register a webhook. Signa then evaluates every data update against the watch and pushes an alert the moment a conflicting mark is filed, instead of you polling for one. If you would rather pull results yourself, keep thePOST /v1/trademarks body in version control and re-run it on your own schedule, narrowing to filing_date so each call only returns conflicts filed since the last run. filing_date is a leg-level filter, so combined with the other filters it serves the search one row per record (expanded):
TypeScript
What’s next
Opposition Tracking
Monitor TTAB proceedings if a conflict owner files an opposition against your application.
Competitor Intelligence
Track competing owners to catch new filings in your space before they publish.