> ## 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.

# Changelog

> API and developer-tool updates

# 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](/api-reference/trademarks/list-trademarks) and the
[glossary](/guides/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](/api-reference/screening/screen#coverage).
* **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](/api-reference/monitoring/watches/create).

## 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.
