Skip to main content

Changelog

July 25, 2026: Jurisdiction protection scope

A precision fix to what jurisdictions means, plus honest screening verdicts when register coverage is incomplete. This is a behavior change: the same request can now return more results and, for screening, a new verdict value. Because it changes result sets during beta, read this before upgrading. jurisdictions now selects rights that protect, or seek protection, in a territory, not just literal territory legs. Previously jurisdictions=FR matched only French national filings and Madrid designations of France. It now also matches regional rights whose membership covers France, so a EU trade mark (which protects France) is included. See Search Trademarks and the glossary.
  • Result counts grow. A country-scoped filter picks up the regional rights that protect it. On production data, jurisdictions=FR roughly doubles once EU trade marks are counted. Countries with no live national office but active EU coverage (for example DE) go from a handful of Madrid hits to full EUTM coverage.
  • territory_match=direct restores the old behavior. Pass it to match only literal territory legs, byte-for-byte the pre-July-2026 result set. The default is territory_match=protection. Requesting a regional code (EU) stays strict on search: it matches EUTMs and IRs designating the EUIPO, not member-state national marks.
  • Why results grew is now explained. Under the default protection mode, each hit returned with a jurisdictions filter carries territory_matches[], mapping the requested code to the territory it matched on and the basis (direct leg or regional_membership). The field is absent under territory_match=direct. search_meta.territory_match echoes the mode that ran.
  • Suggest and image search grow too. GET /v1/trademarks/suggest and POST /v1/trademarks/search/image apply the same protection-scope expansion and accept territory_match. Suggest now also matches Madrid designations of a requested territory (an international registration designating France is suggested under jurisdictions=FR), and image search echoes the applied mode as search_meta.territory_match.
  • Member-country codes are newly accepted. Benelux member states (BE, LU, NL) and OAPI member states (for example SN) had no jurisdiction row of their own and previously returned 400. They are now valid jurisdictions values, so jurisdictions=BE selects Benelux and EU rights that protect Belgium.
  • Saved searches replay under the new semantics automatically. A stored search with jurisdictions=FR is re-executed against the current matcher, so it now returns EU trade marks it did not before, with no change on your side. If you need a saved search to keep the old literal-leg behavior, re-save it with territory_match=direct.
  • Breaking for pagination. Because the query shape of a jurisdiction-filtered search changed, pagination cursors minted before this release on such a query now return 400 cursor_invalid. Clients holding a stale cursor must restart pagination from the first page.
  • During the rolling deploy, expect a brief mixed window. While the release rolls out, requests may land on either old or new instances, so a jurisdiction-filtered query can alternate between the old and new result sets, and territory_match may return 400 from a not-yet-updated instance. Stale jurisdiction-filtered cursors invalidate as above. The window closes once every instance is on the new release; retry the request if you hit it.
Screening can now return needs_review when register coverage is incomplete. A clearance verdict is only trustworthy if Signa can actually see the marks that protect a requested territory. When the register that would carry a conflict is not connected live, a zero-conflict screen must not read as clear.
  • New verdict value. GET /v1/screening verdicts are now high_risk / caution / needs_review / clear. needs_review is a would-be clear that could not be confirmed because a requested territory’s register is dark or stale. Handle it as “we could not rule this out”, not as a weaker clear. Found conflicts still band high or medium exactly as before, observed risk is never suppressed.
  • Why this is deliberate. Before this change, screening a common brand in a class scoped to a territory whose national register was not yet connected could return clear with zero conflicts, even though real national marks existed and were simply invisible to us. Returning clear there is a false negative on a clearance product. We would rather tell you the corpus was incomplete than imply a name is safe.
  • A new coverage block on the screening response reports which registers gated the verdict (offices axis in ST.3 codes, territories axis in jurisdiction codes) and a complete_for_clear boolean. See Screen a Name.
  • Check a Listing gets the same protection-scope expansion, and an incomplete requested register forces a would-be clear to caution (the listing verdict enum is unchanged).
  • Screening responses are no longer client-cacheable. They are served Cache-Control: private, no-store. Re-run a screen rather than replaying a stored response.
  • screening_id values changed at this epoch. The identifier now folds the coverage inputs that can flip a verdict, so ids minted before this release do not correspond to ids minted after. Do not treat a pre-release screening_id as stable across this boundary.
  • Watches are unchanged. Monitoring keeps office-based scoping and does not apply the protection-scope expansion, so a watch scoped to a country still watches that country’s office only (a DE watch does not surface EU trade marks). See Create Watch.

July 14, 2026

  • Compare (beta): POST /v1/compare, its TypeScript SDK resource, and its developer guide complete the public-facing Intelligence surface alongside Screening. Compare scores one candidate against up to 10 selected conflicts.