@signa-so/sdk 0.16.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -384,7 +384,7 @@ export interface paths {
384
384
  path?: never;
385
385
  cookie?: never;
386
386
  };
387
- /** @description List the office event codes Signa has catalogued and the canonical `event_type` each maps to. The catalogue covers IP Australia (`AU`) and WIPO (`WO`) today; any other office returns an empty list, and its trademark events still carry their own `raw` code and label. `raw` is the office's verbatim code and label, as on a trademark event's `raw` (label null when we hold no verbatim office label for the code; every WIPO label is null because the catalogue's WIPO wording is Signa's). */
387
+ /** @description List the office event codes Signa has catalogued and the canonical `event_type` each maps to. The catalogue covers the USPTO (`US`), IP Australia (`AU`) and WIPO (`WO`) today; any other office returns an empty list, and its trademark events still carry their own `raw` code and label. `raw` is the office's verbatim code and label, as on a trademark event's `raw` (label null when we hold no verbatim office label for the code; every WIPO label is null because the catalogue's WIPO wording is Signa's). */
388
388
  get: operations["listEventTypes"];
389
389
  put?: never;
390
390
  post?: never;
@@ -541,14 +541,14 @@ export interface paths {
541
541
  cookie?: never;
542
542
  };
543
543
  /**
544
- * @description GET variant of trademark search/list. Same multi-strategy search as POST, with flat query params.
544
+ * @description GET variant of trademark search/list. Same search as POST, with flat query params.
545
545
  *
546
546
  * Credits: 10 per page.
547
547
  */
548
548
  get: operations["listTrademarks"];
549
549
  put?: never;
550
550
  /**
551
- * @description Multi-strategy text and phonetic search with faceted aggregations and relevance scoring. When query is omitted, acts as a filtered list (requires at least one filter). When sort is specified with query, relevance_score is null and rescore is disabled.
551
+ * @description Trademark search: q ranks marks through the similarity channels, filters (filters.mark_text included) decide which marks qualify, exclude removes marks, with faceted aggregations. Without q, acts as a filtered list (requires a filter or a mark_text operator). relevance_score is present on every hit whenever there is a q, whatever the sort.
552
552
  *
553
553
  * Credits: 10 per page.
554
554
  */
@@ -891,7 +891,7 @@ export interface paths {
891
891
  cookie?: never;
892
892
  };
893
893
  /**
894
- * @description List related owners via GLEIF corporate hierarchy (parent/child relationships).
894
+ * @description List related owners via the GLEIF corporate hierarchy (parent/child relationships) of the `lei` GET /v1/owners/{id} shows: the owner's own first GLEIF LEI, else its entity's.
895
895
  *
896
896
  * Credits: 1 per page.
897
897
  */
@@ -1122,7 +1122,7 @@ export interface paths {
1122
1122
  cookie?: never;
1123
1123
  };
1124
1124
  /**
1125
- * @description List an entity's trademarks (summary tier) across ALL member owners, with full Appendix A filter support. Identical to GET /v1/owners/{id}/trademarks per-member, fanned across the entity's members. Rate class: search.
1125
+ * @description List an entity's trademarks (summary tier): every mark whose owner is linked to the entity, with full Appendix A filter support. Scoped exactly like GET /v1/trademarks?entity_id= (the same resolved entity ids, no member-owner cap), so both return the same set for the same entity; the difference is that a missing entity is a 404 here and an empty page there. Rate class: search.
1126
1126
  *
1127
1127
  * Credits: 10 per page.
1128
1128
  */
@@ -1164,7 +1164,7 @@ export interface paths {
1164
1164
  cookie?: never;
1165
1165
  };
1166
1166
  /**
1167
- * @description List proceedings across all trademarks. At least one filter is required.
1167
+ * @description List proceedings across all trademarks. At least one filter is required. Proceedings are served only for offices whose `capabilities.proceedings` on `GET /v1/offices` is `available`; an `office_code` naming any other live office returns 422 `capability_not_available` without running a query or charging credits.
1168
1168
  *
1169
1169
  * Credits: 1 per page.
1170
1170
  */
@@ -1185,7 +1185,7 @@ export interface paths {
1185
1185
  cookie?: never;
1186
1186
  };
1187
1187
  /**
1188
- * @description Retrieve a single proceeding by ID, including parent trademark summary.
1188
+ * @description Retrieve a single proceeding by ID, including parent trademark summary. A proceeding on a mark of an office whose `capabilities.proceedings` is not `available` is not served (404).
1189
1189
  *
1190
1190
  * Credits: 1 per record.
1191
1191
  */
@@ -1924,7 +1924,7 @@ export interface paths {
1924
1924
  get: operations["listWebhookEndpoints"];
1925
1925
  put?: never;
1926
1926
  /**
1927
- * @description Create a webhook endpoint. The signing secret is returned ONCE in the response — store it securely and verify HMAC signatures against it. Subsequent GET responses redact the secret. trademark.status_changed and office_action.issued are emitted only for marks in an organization portfolio; alert.created follows watch scope. An organization that monitors a mark only through watches receives alert.created, but no direct trademark event.
1927
+ * @description Create a webhook endpoint. The signing secret is returned ONCE in the response. Store it securely and verify HMAC signatures against it. Subsequent GET responses redact the secret. trademark.status_changed, trademark.corrected and office_action.issued are emitted only for marks in an organization portfolio; alert.created follows watch scope. An organization that monitors a mark only through watches receives alert.created, but no direct trademark event. An endpoint subscribed to trademark.status_changed also receives trademark.corrected, a correction of a status Signa published earlier.
1928
1928
  *
1929
1929
  * This operation requires an `Idempotency-Key` header (see parameter description for 24h replay and 409-conflict semantics).
1930
1930
  *
@@ -1957,7 +1957,7 @@ export interface paths {
1957
1957
  options?: never;
1958
1958
  head?: never;
1959
1959
  /**
1960
- * @description Update a webhook endpoint. trademark.status_changed and office_action.issued are emitted only for marks in an organization portfolio; alert.created follows watch scope. An organization that monitors a mark only through watches receives alert.created, but no direct trademark event.
1960
+ * @description Update a webhook endpoint. trademark.status_changed, trademark.corrected and office_action.issued are emitted only for marks in an organization portfolio; alert.created follows watch scope. An organization that monitors a mark only through watches receives alert.created, but no direct trademark event. An endpoint subscribed to trademark.status_changed also receives trademark.corrected, a correction of a status Signa published earlier.
1961
1961
  *
1962
1962
  * This operation requires an `Idempotency-Key` header (see parameter description for 24h replay and 409-conflict semantics).
1963
1963
  *
@@ -2422,7 +2422,7 @@ export interface paths {
2422
2422
  get?: never;
2423
2423
  put?: never;
2424
2424
  /**
2425
- * @description Change the organization's live subscription to another plan or billing interval. Internal (dashboard BFF); requires organization:manage. An upgrade (or a longer interval) is invoiced now with proration and applied only once that invoice is paid — a declined payment leaves the current plan in place and returns the invoice to pay (`pending_payment`). A downgrade (or a shorter interval) is scheduled for the end of the current period (`scheduled`). Organizations without a live subscription subscribe through POST /v1/organization/billing/checkout instead.
2425
+ * @description Change the organization's live subscription to another plan or billing interval. Internal (dashboard BFF); requires organization:manage. An upgrade (or a longer interval) is invoiced now with proration and applied only once that invoice is paid — a declined payment leaves the current plan in place and returns the invoice to pay (`pending_payment`). A downgrade (or a shorter interval) is scheduled for the end of the current period (`scheduled`). While a change made here is scheduled, requesting the current plan and interval undoes it (`applied`, nothing is charged), another period-end change replaces it, an upgrade is refused until it is undone, and repeating it answers the same `scheduled`. With `undo_scheduled_change`, the request only ever undoes that change and is refused once it is no longer pending. Organizations without a live subscription subscribe through POST /v1/organization/billing/checkout instead.
2426
2426
  *
2427
2427
  * This operation requires an `Idempotency-Key` header (see parameter description for 24h replay and 409-conflict semantics).
2428
2428
  */
@@ -2557,6 +2557,12 @@ export interface components {
2557
2557
  */
2558
2558
  stage: string;
2559
2559
  reason: string | null;
2560
+ /**
2561
+ * @description Pending challenges against the record. On an IR family row, the de-duplicated union across its designations.
2562
+ * @example [
2563
+ * "opposition_pending"
2564
+ * ]
2565
+ */
2560
2566
  challenges: string[];
2561
2567
  /**
2562
2568
  * @description Office-reported date when the current status took effect, when available.
@@ -2630,6 +2636,29 @@ export interface components {
2630
2636
  */
2631
2637
  formatted: string | null;
2632
2638
  } | null;
2639
+ DerivedTerm: {
2640
+ /**
2641
+ * @description Where the term on record stands at `as_of_date`. `in_term`: the term runs to `derived.expiry_date`, and its renewal is not past due (the due date itself, moved off a weekend or holiday, is still on time). `in_grace`: the term ended and the renewal can still be filed late, until `grace_expiry_date`. `in_restoration`: the grace period passed and the jurisdiction's restoration window is open, until `restoration_expiry_date`. `renewal_not_on_record`: the term end the office stated, its grace period and any restoration window have passed with no renewal of that term on record, so no later term is computed. The mark may have lapsed, or a renewal may not have reached the office record or Signa yet; `status` stays what the office reports. `not_applicable`: no registered term to assess: an application or another status that is not registered (`unknown` included), a dead mark, a record with no renewal rule (a US designation under the Madrid Protocol, renewed at WIPO), or no schedule computed. An `expired` mark is assessed only while it can still be renewed or restored, a `cancelled` one only while it can be restored. Treat the vocabulary as open.
2642
+ * @example in_term
2643
+ * @enum {string}
2644
+ */
2645
+ state: "in_term" | "in_grace" | "in_restoration" | "renewal_not_on_record" | "not_applicable";
2646
+ /**
2647
+ * @description The last day of the grace period of the term ending at `derived.expiry_date`, as its renewal row serves it. Null when `state` is `not_applicable`.
2648
+ * @example 2035-07-20
2649
+ */
2650
+ grace_expiry_date: string | null;
2651
+ /**
2652
+ * @description The last day of the restoration window after that grace period, once the term has ended (`state` is `in_grace` or later), where the jurisdiction provides one (for example GB, EU, SG, JP, IN, IS). Null otherwise.
2653
+ * @example null
2654
+ */
2655
+ restoration_expiry_date: string | null;
2656
+ /**
2657
+ * @description Whether a renewal on record began the term ending at `derived.expiry_date`, that is, renewed the term before it: the office states a term end past the first term, the office recorded that renewal (for the USPTO, accepted the renewal filing), or, for a Madrid designation, WIPO published an expiry for the international registration in a later term. False for the first term after registration, for a term computed on the statutory ladder with no renewal of the term before it on record (a renewal of an earlier term does not count), and when `state` is `not_applicable`.
2658
+ * @example true
2659
+ */
2660
+ renewed: boolean;
2661
+ };
2633
2662
  UnsupportedDeadlineRule: {
2634
2663
  /**
2635
2664
  * @description Slug of the declined rule. Same identity as `rule_id` on a computed row: join it to `GET /v1/deadline-rules` for the rule and its sources.
@@ -2655,7 +2684,7 @@ export interface components {
2655
2684
  };
2656
2685
  DeadlineRow: {
2657
2686
  /**
2658
- * @description Stable identity of this occurrence of the rule, unique within one trademark: `rule_id:cycle` (the statutory cycle, e.g. `us_renewal_s9:5`), or `rule_id:t<term>-<n>` (a cell on a fixed term grid) when the record has no statutory anchor date or the row is anchored on an office-stated expiry; `rule_id:1` for a rule that occurs once. A renewal or a date correction of a few days keeps the key.
2687
+ * @description Stable identity of this occurrence of the rule, unique within one trademark: `rule_id:cycle` (the statutory cycle, e.g. `us_renewal_s9:5`), or `rule_id:t<term>-<n>` (a cell on a fixed term grid) when the record has no statutory anchor date or the row is anchored on an office-stated expiry; `rule_id:1` for a rule that occurs once; `rule_id:<action date>:<action code>` for a `post_registration_oa_response` row (one per office action, e.g. `uspto_post_registration_oa_response:2026-04-19:PRA8`). A renewal or a date correction of a few days keeps the key.
2659
2688
  * @example us_renewal_s9:5
2660
2689
  */
2661
2690
  occurrence_key: string;
@@ -2664,7 +2693,10 @@ export interface components {
2664
2693
  * @example us_renewal_s9
2665
2694
  */
2666
2695
  rule_id: string;
2667
- /** @example combined_renewal_and_use */
2696
+ /**
2697
+ * @description Deadline type: `renewal`, `declaration_of_use`, `combined_renewal_and_use`, `declaration_of_incontestability`, `restoration`, `international_renewal`, or `post_registration_oa_response` (USPTO: the response to a post-registration office action on a §8, §71 or §8+§9 filing, due six months from the action or at the end of the filing period, whichever is later; 37 CFR 2.163(b), 2.184(b)(1), 7.39(a)). New values may be added.
2698
+ * @example combined_renewal_and_use
2699
+ */
2668
2700
  type: string;
2669
2701
  /**
2670
2702
  * @description Rule jurisdiction (`WO` for the Madrid international renewal).
@@ -2674,7 +2706,7 @@ export interface components {
2674
2706
  /** @example 2025-01-20 */
2675
2707
  trigger_date: string;
2676
2708
  /**
2677
- * @description Which record date anchored the computation (filing_date, registration_date, grant_date, protection_grant_date, intl_registration_date), or reported_expiry / reported_renewal_due when the ladder is anchored on an office-stated date.
2709
+ * @description Which record date anchored the computation (filing_date, registration_date, grant_date, protection_grant_date, intl_registration_date), reported_expiry / reported_renewal_due when the ladder is anchored on an office-stated date, or post_registration_action on a `post_registration_oa_response` row (the office action's date).
2678
2710
  * @example registration_date
2679
2711
  */
2680
2712
  trigger_field: string;
@@ -2706,6 +2738,11 @@ export interface components {
2706
2738
  is_optional: boolean;
2707
2739
  /** @example cancellation_and_expiration */
2708
2740
  consequence_if_missed: string;
2741
+ /**
2742
+ * @description Present only when the office record adds something the dates do not say. On a `post_registration_oa_response` row: the office action it answers (code and date), and any incomplete-response notice or missing filing history; when the record cannot settle the date, the row is served on the earliest defensible date and the note says to check TSDR. A post-registration action marked "no response required" with no response row to carry it is said on every row of the record while its petition period can run. When the office prosecution history could not be read, every row of the record says so here instead of reading as checked.
2743
+ * @example PRA8 2026-04-19
2744
+ */
2745
+ note?: string;
2709
2746
  };
2710
2747
  DerivedOppositionWindow: {
2711
2748
  /** @enum {boolean} */
@@ -2765,10 +2802,11 @@ export interface components {
2765
2802
  */
2766
2803
  as_of_date: string;
2767
2804
  /**
2768
- * @description The rulebook's term end (the office-stated expiry when the office publishes one).
2805
+ * @description The end of the term on record, before any weekend or holiday roll. Where the office publishes the expiry it is that date, moved forward only by a renewal on record: one the office recorded, or for a Madrid designation an expiry WIPO published for the international registration in a later term. Where the office publishes none (the USPTO) it is the statutory term end. Once an office-stated term has ended it stays here; `term.state` says whether it can still be renewed or restored, or that no renewal of it is on record. Null when no term applies (a dead mark once it can no longer be saved, a record with no renewal rule, or no schedule).
2769
2806
  * @example 2035-01-20
2770
2807
  */
2771
2808
  expiry_date: string | null;
2809
+ term: components["schemas"]["DerivedTerm"];
2772
2810
  deadlines: {
2773
2811
  /** @description False when no schedule could be computed; see `reason`. Mirrors POST /v1/deadlines/compute. */
2774
2812
  supported: boolean;
@@ -2825,6 +2863,21 @@ export interface components {
2825
2863
  /** @example /v1/trademarks/tm_7d4e1f2a-3b8c-4d0e-9f1a-2b3c4d5e6f70 */
2826
2864
  href: string;
2827
2865
  } | null;
2866
+ /**
2867
+ * @description WIPO ST.3 code of the office that holds the designation record shown for this territory (the national office when Signa has its record, else WO).
2868
+ * @example US
2869
+ */
2870
+ office_code: string | null;
2871
+ /**
2872
+ * @description That record's own application number at its office (for a US designation, the 79-series serial); null when the office states none.
2873
+ * @example 79415041
2874
+ */
2875
+ application_number: string | null;
2876
+ /**
2877
+ * @description That record's own registration number at its office; null until registered or when the office states none.
2878
+ * @example 7000001
2879
+ */
2880
+ registration_number: string | null;
2828
2881
  };
2829
2882
  DetailCoverageTerritory: components["schemas"]["CoverageTerritory"] & {
2830
2883
  /** @example United States of America */
@@ -3108,7 +3161,7 @@ export interface components {
3108
3161
  }[];
3109
3162
  has_media: boolean;
3110
3163
  /**
3111
- * @description Media-proxy URL for the primary mark image. Null when the mark has no media.
3164
+ * @description Media-proxy URL for the primary mark image: the office-flagged image, else the first image. Always an image file, never a document, audio or video file. Null when the mark has no image.
3112
3165
  * @example https://api.signa.so/v1/trademarks/tm_abc/media/01234567-89ab-cdef-0123-456789abcdef
3113
3166
  */
3114
3167
  primary_image_url: string | null;
@@ -3150,6 +3203,14 @@ export interface components {
3150
3203
  /** @example representative */
3151
3204
  role: string;
3152
3205
  address: components["schemas"]["Address"];
3206
+ /**
3207
+ * @description On a Madrid international registration row: the designated territories whose record names this attorney, sorted. Empty when only the international registration itself names the attorney. Absent on other rows.
3208
+ * @example [
3209
+ * "EU",
3210
+ * "US"
3211
+ * ]
3212
+ */
3213
+ territory_codes?: string[];
3153
3214
  }[];
3154
3215
  text_variants: {
3155
3216
  /** @example translation */
@@ -3176,7 +3237,23 @@ export interface components {
3176
3237
  /** @example image/jpeg */
3177
3238
  mime_type: string | null;
3178
3239
  url: string;
3240
+ /** @description Exactly one item is primary when `primary_image_url` is set: the item that URL points at. */
3179
3241
  is_primary: boolean;
3242
+ /**
3243
+ * @description Signa's classification of the office's document type for a document item (office_action, certificate, correspondence, filed_form, other), the same value `GET /v1/trademarks/{id}/documents` serves; null for images.
3244
+ * @example office_action
3245
+ */
3246
+ document_kind: string | null;
3247
+ /**
3248
+ * @description The office's date on the document (mailing or issue date), as published; null when none.
3249
+ * @example 2025-02-03
3250
+ */
3251
+ official_date: string | null;
3252
+ /**
3253
+ * @description Page count of a document item, as published by the office; null when none.
3254
+ * @example 4
3255
+ */
3256
+ page_count: number | null;
3180
3257
  }[];
3181
3258
  priority_claims: {
3182
3259
  /** @example paris */
@@ -3386,7 +3463,62 @@ export interface components {
3386
3463
  */
3387
3464
  matched_via_kind: "direct" | "regional_membership";
3388
3465
  };
3389
- /** @description Shape-identical to a /v1/trademarks summary row, minus relevance_score / match_explanation. */
3466
+ /** @description Why the hit is in the result set. Search responses only; on a metadata-only listing (no q, no positive mark_text operator) tier is null and via and terms are empty. */
3467
+ TrademarkMatch: {
3468
+ /**
3469
+ * @description The strongest similarity tier of the lanes this hit matched: identical, near_identical, similar or related. Tiers are retrieval categories, not measured edit distances. Null for rows matched only by a trademark number in q, and for rows of a request without q.
3470
+ * @example near_identical
3471
+ * @enum {string|null}
3472
+ */
3473
+ tier: "identical" | "near_identical" | "similar" | "related" | null;
3474
+ /**
3475
+ * @description The similarity channels that matched this hit, plus `identifier` when q was read as a trademark number. Empty without q.
3476
+ * @example [
3477
+ * "fuzzy"
3478
+ * ]
3479
+ */
3480
+ via: ("identifier" | "identical" | "fuzzy" | "embedded" | "phonetic" | "lookalike")[];
3481
+ /**
3482
+ * @description With a q list: the q terms that reached this hit, in list order, as the caller spelled them. Otherwise the mark_text operator values this hit satisfied (operator order: is, word, starts_with, ends_with, contains, pattern). Empty when the request has neither.
3483
+ * @example []
3484
+ */
3485
+ terms: string[];
3486
+ /** @description Only with include=match_details. */
3487
+ details?: {
3488
+ /**
3489
+ * @description Internal retrieval lane names that matched.
3490
+ * @example [
3491
+ * "fuzzy_1",
3492
+ * "phonetic_strong"
3493
+ * ]
3494
+ */
3495
+ lanes: string[];
3496
+ /** @description The ranking factors applied to this hit's score. Under an explicit sort, a trademark-number q or a q list the length factor does not apply. */
3497
+ factors: {
3498
+ /** @example live_status */
3499
+ factor: string;
3500
+ /** @example 1.3 */
3501
+ weight: number;
3502
+ }[];
3503
+ /** @description With a q list: each term that reached this hit, with its own tier and channels. */
3504
+ terms?: {
3505
+ /** @example onyx */
3506
+ term: string;
3507
+ /**
3508
+ * @example identical
3509
+ * @enum {string|null}
3510
+ */
3511
+ tier: "identical" | "near_identical" | "similar" | "related" | null;
3512
+ /**
3513
+ * @example [
3514
+ * "lookalike"
3515
+ * ]
3516
+ */
3517
+ via: ("identifier" | "identical" | "fuzzy" | "embedded" | "phonetic" | "lookalike")[];
3518
+ }[];
3519
+ };
3520
+ };
3521
+ /** @description Shape-identical to a /v1/trademarks summary row, minus relevance_score. */
3390
3522
  TrademarkSummaryV1: {
3391
3523
  /** @example tm_7d4e1f2a3b8c9d0e */
3392
3524
  id: string;
@@ -3548,7 +3680,7 @@ export interface components {
3548
3680
  }[];
3549
3681
  has_media: boolean;
3550
3682
  /**
3551
- * @description Media-proxy URL for the primary mark image. Null when the mark has no media.
3683
+ * @description Media-proxy URL for the primary mark image: the office-flagged image, else the first image. Always an image file, never a document, audio or video file. Null when the mark has no image.
3552
3684
  * @example https://api.signa.so/v1/trademarks/tm_abc/media/01234567-89ab-cdef-0123-456789abcdef
3553
3685
  */
3554
3686
  primary_image_url: string | null;
@@ -3563,39 +3695,11 @@ export interface components {
3563
3695
  /** @description Search responses only, when a jurisdictions filter is active under the default protection mode: why this hit satisfied it. */
3564
3696
  territory_matches?: components["schemas"]["TerritoryMatch"][];
3565
3697
  /**
3566
- * @description Search responses only: relevance (0–100) for the ranked `similar` mode. Null when ranking is bypassed (explicit sort or a deterministic match mode); absent without a text query.
3698
+ * @description Search responses only: how well the hit matches q (0–100), for ordering only, not a likelihood of confusion. Present on every hit when q is present, whatever the sort (under a sort the length factor does not apply). Null for rows matched only by a trademark number, for mark_text-only requests, and on metadata-only listings.
3567
3699
  * @example 87
3568
3700
  */
3569
3701
  relevance_score?: number | null;
3570
- /** @description Search responses only. Null when ranking is bypassed; absent without a text query. */
3571
- match_explanation?: {
3572
- /**
3573
- * @example [
3574
- * "exact",
3575
- * "fuzzy",
3576
- * "phonetic"
3577
- * ]
3578
- */
3579
- strategies_matched: string[];
3580
- /**
3581
- * @example [
3582
- * {
3583
- * "factor": "exact_match",
3584
- * "weight": 50
3585
- * },
3586
- * {
3587
- * "factor": "live_status",
3588
- * "weight": 1.3
3589
- * }
3590
- * ]
3591
- */
3592
- boost_factors: {
3593
- /** @example live_status */
3594
- factor: string;
3595
- /** @example 1.3 */
3596
- weight: number;
3597
- }[];
3598
- } | null;
3702
+ match?: components["schemas"]["TrademarkMatch"];
3599
3703
  /**
3600
3704
  * @description Search responses only: highlight fragments keyed by field name. Null when none were returned.
3601
3705
  * @example {
@@ -3607,13 +3711,6 @@ export interface components {
3607
3711
  highlights?: {
3608
3712
  [key: string]: string[];
3609
3713
  } | null;
3610
- /**
3611
- * @description List searches only (q sent as a list): the terms (as the caller spelled them) this hit is an exact match for.
3612
- * @example [
3613
- * "limber"
3614
- * ]
3615
- */
3616
- matched_terms?: string[];
3617
3714
  };
3618
3715
  ScreeningHit: {
3619
3716
  /** @enum {string} */
@@ -4407,6 +4504,12 @@ export interface components {
4407
4504
  * @enum {string}
4408
4505
  */
4409
4506
  citations: "available" | "in_progress" | "not_available" | "not_applicable";
4507
+ /**
4508
+ * @description Proceedings (oppositions, cancellations, appeals) availability. `available` = Signa ingests and serves this office's proceedings; `in_progress` = pipeline being built; `not_available` = Signa serves no proceedings for this office. `GET /v1/proceedings` returns proceedings only from `available` offices, and a request scoped by `office_code` to a live office that is not `available` returns 422 `capability_not_available` without running a query or charging credits.
4509
+ * @example available
4510
+ * @enum {string}
4511
+ */
4512
+ proceedings: "available" | "in_progress" | "not_available" | "not_applicable";
4410
4513
  };
4411
4514
  Office: {
4412
4515
  /** @example US */
@@ -4586,15 +4689,18 @@ export interface components {
4586
4689
  jurisdiction_code: string;
4587
4690
  /** @example Section 8 — Declaration of Use */
4588
4691
  name: string;
4589
- /** @example declaration_of_use */
4692
+ /**
4693
+ * @description Deadline type, the same vocabulary as `type` on computed rows. `post_registration_oa_response` is the USPTO response to a post-registration office action on a §8, §71 or §8+§9 filing.
4694
+ * @example declaration_of_use
4695
+ */
4590
4696
  type: string;
4591
4697
  /**
4592
- * @description Record date the rule is anchored on. For a `restoration` rule this is the parent renewal rule’s trigger — restoration is anchored off the renewal chain.
4698
+ * @description Record date the rule is anchored on. For a `restoration` rule this is the parent renewal rule’s trigger — restoration is anchored off the renewal chain. For `post_registration_oa_response` it is `post_registration_action`, the date of the office action.
4593
4699
  * @example registration_date
4594
4700
  */
4595
4701
  trigger: string;
4596
4702
  /**
4597
- * @description Year of the term the rule falls due in. For a `restoration` rule this identifies the RENEWAL CYCLE the restoration attaches to (the cycle it rescues), not a restoration due date — the restoration window itself is given by `window_months` + `starts_from`.
4703
+ * @description Year of the term the rule falls due in. For a `restoration` rule this identifies the RENEWAL CYCLE the restoration attaches to (the cycle it rescues), not a restoration due date — the restoration window itself is given by `window_months` + `starts_from`. 0 for `post_registration_oa_response`, which runs from an office action rather than a term year.
4598
4704
  * @example 6
4599
4705
  */
4600
4706
  due_year: number;
@@ -4620,7 +4726,7 @@ export interface components {
4620
4726
  /** @example 10 */
4621
4727
  renewal_period_years: number;
4622
4728
  /**
4623
- * @description Length of the restoration window in months. Non-null only on `type: "restoration"` rules.
4729
+ * @description Length of the restoration window in months, or of the response period on a `post_registration_oa_response` rule (six months from the action, or to the end of the pre-grace filing period when that is later: 37 CFR 2.163(b), 2.184(b)(1), 7.39(a)). Null on every other rule.
4624
4730
  * @example null
4625
4731
  */
4626
4732
  window_months: number | null;
@@ -4734,7 +4840,7 @@ export interface components {
4734
4840
  */
4735
4841
  first_renewal_after_cutoff_opens_at_period_start: string | null;
4736
4842
  /**
4737
- * @description What a month- or year-counted period does when its end day does not exist in the target month (31 August + 6 months; 29 February + 1 year). `last_day` clamps to that month’s last day, the default and the behaviour of every office but Mexico. `first_business_day_of_following_month` runs the period into the next calendar month (MX, Reglamento LPI art. 4o, párrafo segundo). Applied to the due date and the grace expiry, never to `window_opens`. Like `holiday_calendar` and `grace_expiry_rolls_only`, this is resolved PER RULE: art. 4o is the designated office’s own convention, so a rule whose period belongs to the International Bureau reports `last_day` whatever its jurisdiction configures (Madrid Regulations Rule 4(1) and (2) clamp such a period to the month’s last day).
4843
+ * @description What a month- or year-counted period does when its end day does not exist in the target month (31 August + 6 months; 29 February + 1 year). `last_day` clamps to that month’s last day, the default and the behaviour of every office but Mexico. `first_business_day_of_following_month` runs the period into the next calendar month (MX, Reglamento LFPPI art. 7, párrafo segundo). Applied to the due date and the grace expiry, never to `window_opens`. Like `holiday_calendar` and `grace_expiry_rolls_only`, this is resolved PER RULE: art. 7 is the designated office’s own convention, so a rule whose period belongs to the International Bureau reports `last_day` whatever its jurisdiction configures (Madrid Regulations Rule 4(1) and (2) clamp such a period to the month’s last day).
4738
4844
  * @example last_day
4739
4845
  * @enum {string}
4740
4846
  */
@@ -4801,6 +4907,12 @@ export interface components {
4801
4907
  * @enum {string}
4802
4908
  */
4803
4909
  window_starts_on: "date_of_publication" | "day_after" | "first_of_following_month";
4910
+ /**
4911
+ * @description When non-null, the CURRENT era’s window does not OPEN until the first day of the month after the publication month, although its close is still counted per `window_starts_on` (from the publication). Null for every rule but `cn_opposition_madrid`, whose window for a WIPO Gazette date on or after 2027-01-01 is provisional on CNIPA’s draft transitional measures: it opens on the later of two readings (the 1st of the following month) and closes on the earlier (two months from the publication).
4912
+ * @example null
4913
+ * @enum {string|null}
4914
+ */
4915
+ window_opens_on: "first_of_following_month" | null;
4804
4916
  /**
4805
4917
  * @description How the close is counted for the CURRENT era when it opens on the first of the following month with a month-based window. Null for every other rule AND for a rule that only opens that way in its earlier era — see `window_ends_on_before`.
4806
4918
  * @example null
@@ -4841,7 +4953,7 @@ export interface components {
4841
4953
  */
4842
4954
  window_ends_on_before: "corresponding_day_of_start" | "day_before_corresponding_day_of_start" | null;
4843
4955
  /**
4844
- * @description What a month-counted close date does when the publication's day number does not exist in the target month. `last_day` clamps to that month's last day, which is the default and what every office except Mexico does. `first_business_day_of_following_month` runs the period into the next calendar month and ends it on that month's first business day (Mexico, Reglamento LPI art. 4o, párrafo segundo). Never applies to a day-counted window.
4956
+ * @description What a month-counted close date does when the publication's day number does not exist in the target month. `last_day` clamps to that month's last day, which is the default and what every office except Mexico does. `first_business_day_of_following_month` runs the period into the next calendar month and ends it on that month's first business day (Mexico, Reglamento LFPPI art. 7, párrafo segundo). Never applies to a day-counted window.
4845
4957
  * @example last_day
4846
4958
  * @enum {string}
4847
4959
  */
@@ -5244,28 +5356,73 @@ export interface components {
5244
5356
  /** @example srch_abc123 */
5245
5357
  search_id: string;
5246
5358
  /**
5247
- * @description Echo of the text query, or null for filter-only searches.
5359
+ * @description Echo of the text query, or null for filter-only searches and for a q list.
5248
5360
  * @example SIGNA
5249
5361
  */
5250
5362
  query: string | null;
5251
5363
  /**
5252
- * @description Public search strategies used for the served result set. Empty for deterministic match modes.
5364
+ * @description The similarity channels q ran on (identical is always included). Empty without q.
5253
5365
  * @example [
5254
- * "exact",
5255
- * "phonetic",
5366
+ * "identical",
5256
5367
  * "fuzzy",
5257
- * "prefix"
5368
+ * "embedded",
5369
+ * "lookalike"
5258
5370
  * ]
5259
5371
  */
5260
- strategies_used: ("exact" | "phonetic" | "fuzzy" | "prefix")[];
5372
+ similarity_applied: ("identical" | "fuzzy" | "embedded" | "phonetic" | "lookalike")[];
5373
+ /**
5374
+ * @description Version of the ranking that ordered this response. Cursors are bound to it: a new version restarts pagination (400 `cursor_invalid`).
5375
+ * @example v12
5376
+ */
5377
+ ranking_version: string;
5261
5378
  /**
5262
- * @description How the query matched the mark text. 'similar' runs the ranked ladder; exact/starts_with/ends_with/contains are deterministic (relevance_score is null on every row).
5263
- * @example similar
5379
+ * @description The order applied: `relevance` (q present), `mark_text_fit` (text order for a mark_text-only request), `filing_date` (newest filing first), or the explicit `sort` string.
5380
+ * @example relevance
5381
+ */
5382
+ order: string;
5383
+ /**
5384
+ * @description False only when the search hit its time limit or lost a shard and the request set allow_partial; the page may then be missing matches. Without allow_partial such a search returns 503.
5385
+ * @example true
5386
+ */
5387
+ complete: boolean;
5388
+ /**
5389
+ * @description Why `complete` is false. Omitted when complete.
5390
+ * @example timeout
5264
5391
  * @enum {string}
5265
5392
  */
5266
- match: "similar" | "exact" | "starts_with" | "ends_with" | "contains";
5393
+ incomplete_reason?: "timeout" | "shard_failure";
5394
+ /** @description Present when q was read as a trademark number: those records are looked up besides the ranked text match and listed first. */
5395
+ identifier?: {
5396
+ /**
5397
+ * @description WIPO ST.3 code when q names or implies one office; null for a bare number.
5398
+ * @example US
5399
+ */
5400
+ office: string | null;
5401
+ /**
5402
+ * @example number
5403
+ * @enum {string}
5404
+ */
5405
+ kind: "application" | "registration" | "ir" | "signa_id" | "number";
5406
+ /**
5407
+ * @description The number in the office's stored form (a tm_ id for signa_id).
5408
+ * @example 1939139
5409
+ */
5410
+ number: string;
5411
+ };
5412
+ /** @description The deprecated parameters this request used, each with its replacement. Omitted when none. */
5413
+ deprecations?: {
5414
+ /** @example strategies */
5415
+ param: string;
5416
+ /** @example similarity */
5417
+ replacement: string;
5418
+ /**
5419
+ * @description Date (UTC) from which the deprecated parameter is rejected.
5420
+ * @example 2026-12-28
5421
+ */
5422
+ sunset: string;
5423
+ }[];
5267
5424
  /**
5268
- * @description International registration presentation actually served. grouped = one row per mark/IR, coverage block present on IR rows; expanded = one row per Madrid designation.
5425
+ * @description International registration presentation actually served. grouped = one row per mark/IR, coverage block present on IR rows; expanded = one row per Madrid designation. A trademark number in q is served expanded: one row per record it names.
5269
5426
  * @example grouped
5270
5427
  * @enum {string}
5271
5428
  */
@@ -5281,24 +5438,24 @@ export interface components {
5281
5438
  * @enum {string}
5282
5439
  */
5283
5440
  territory_match: "protection" | "direct";
5284
- /** @description Coded search warnings: per-strategy skip warnings (a REQUESTED strategy produced zero clauses for the query shape — e.g. strategies=[phonetic] on a query too short/high-collision), filter-coverage warnings (an applied filter, e.g. opposition_status or seniority_claims, has partial index coverage), `expanded_fallback` (a grouped request was served one row per record), and `result_window_reached` (the 10,000-row result window, not the data, ends this walk). Omitted when there is nothing to warn about. */
5441
+ /** @description Coded search warnings: per-channel skip warnings (a REQUESTED similarity channel produced zero clauses for the query shape — e.g. similarity=phonetic on a query too short/high-collision), filter-coverage warnings (an applied filter, e.g. opposition_status or seniority_claims, has partial index coverage), `expanded_fallback` (a grouped request was served one row per record), `identifier_lookup` (q is a trademark number, served one row per record it names), and `result_window_reached` (the 10,000-row result window, not the data, ends this walk). Omitted when there is nothing to warn about. */
5285
5442
  warnings?: {
5286
5443
  /**
5287
- * @description Stable warning code for client handling: `<strategy>_skipped` (a requested strategy produced no clauses), `partial_opposition_coverage` / `partial_seniority_coverage` (filter coverage), `partial_results` (the search hit its time limit or lost a shard; the page may be missing matches), `strategies_reduced` (OpenSearch rejected the full query and it was retried with fewer strategies; see `dropped_strategies`), `expanded_fallback` (a grouped request was served one row per record because the grouped view cannot serve a filter, sort or option; see `affected_filters` / `affected_option`), `result_window_reached` (more than 10,000 rows match and this page is the last one the 10,000-row result window lets a relevance or sorted walk reach), `mixed_script` (a `q` term, or a term of a `q` list, under a deterministic `match` mode mixes Latin with Greek or Cyrillic letters, which that mode compares as written; see `affected_filter`).
5444
+ * @description Stable warning code for client handling: `<channel>_skipped` (a requested similarity channel produced no clauses for this query; see `channel`), `partial_opposition_coverage` / `partial_seniority_coverage` (filter coverage), `expanded_fallback` (a grouped request was served one row per record because the grouped view cannot serve a filter, sort or option; see `affected_filters` / `affected_option`), `identifier_lookup` (`q` is a trademark number, so the response lists the records it names, one row per record), `result_window_reached` (more than 10,000 rows match and this page is the last one the 10,000-row result window lets a relevance or sorted walk reach), `mixed_script` (a mark_text operator value mixes Latin with Greek or Cyrillic letters, which the operators compare as written; see `affected_filter`).
5288
5445
  * @example phonetic_skipped
5289
5446
  */
5290
5447
  code: string;
5291
5448
  /**
5292
5449
  * @description Human-readable explanation of the warning.
5293
- * @example phonetic_skipped: the phonetic strategy produced no clauses for this query.
5450
+ * @example phonetic_skipped: the phonetic similarity channel produced no clauses for this query.
5294
5451
  */
5295
5452
  message: string;
5296
5453
  /**
5297
- * @description For strategy-skip warnings, the requested strategy that produced no clauses.
5454
+ * @description For `<channel>_skipped` warnings, the requested similarity channel that produced no clauses.
5298
5455
  * @example phonetic
5299
5456
  * @enum {string}
5300
5457
  */
5301
- strategy?: "exact" | "phonetic" | "fuzzy" | "prefix";
5458
+ channel?: "identical" | "fuzzy" | "embedded" | "phonetic" | "lookalike";
5302
5459
  /**
5303
5460
  * @description Warning severity (filter-coverage warnings).
5304
5461
  * @example warning
@@ -5317,13 +5474,6 @@ export interface components {
5317
5474
  * ]
5318
5475
  */
5319
5476
  affected_offices?: string[];
5320
- /**
5321
- * @description For `strategies_reduced` warnings, the requested strategies the retry dropped.
5322
- * @example [
5323
- * "fuzzy"
5324
- * ]
5325
- */
5326
- dropped_strategies?: ("exact" | "phonetic" | "fuzzy" | "prefix")[];
5327
5477
  /**
5328
5478
  * @description For `expanded_fallback` warnings, the filter(s) the grouped view could not serve. Two entries mean the pair could hold on different designations of one mark.
5329
5479
  * @example [
@@ -5356,6 +5506,33 @@ export interface components {
5356
5506
  aggregation_metadata?: components["schemas"]["AggregationMetadata"];
5357
5507
  request_id: string;
5358
5508
  };
5509
+ /** @description Mark text operators. Values within one operator are OR; operators are AND. Up to 100 values of 200 characters each. */
5510
+ MarkTextFilters: {
5511
+ /** @description Whole-mark equality (case, accents, punctuation, spacing and trademark notices ignored). */
5512
+ is?: string[];
5513
+ /** @description The value appears as a whole word, or consecutive words, of the mark. */
5514
+ word?: string[];
5515
+ /** @description The folded mark begins with the value. */
5516
+ starts_with?: string[];
5517
+ /** @description The folded mark ends with the value. At least 3 characters. */
5518
+ ends_with?: string[];
5519
+ /** @description The value appears anywhere in the folded mark. At least 3 characters. */
5520
+ contains?: string[];
5521
+ /** @description `*` any run, `?` one character, `\` escapes the next character; everything else literal. */
5522
+ pattern?: string[];
5523
+ };
5524
+ /** @description Exclusions: rows matching any value are removed. Never affects ranking. */
5525
+ SearchExclude: {
5526
+ mark_text?: components["schemas"]["MarkTextFilters"];
5527
+ /** @description Exclude marks whose owners are linked to these entities (ent_...). */
5528
+ entity_id?: string[];
5529
+ /** @description Exclude marks linked to any entity in these entities' corporate families (ent_...). */
5530
+ entity_group?: string[];
5531
+ /** @description Exclude marks held by these owners (own_...). */
5532
+ owner_id?: string[];
5533
+ /** @description Exclude these trademarks (tm_...); on the grouped view, the family row containing them. */
5534
+ trademark_ids?: string[];
5535
+ };
5359
5536
  TrademarkEvent: {
5360
5537
  /** @example hst_7d4e1f2a-3b8c-4d0e-9f1a-2b3c4d5e6f70 */
5361
5538
  id: string;
@@ -5949,30 +6126,33 @@ export interface components {
5949
6126
  * @example ent_a1b2c3d4
5950
6127
  */
5951
6128
  entity_id: string | null;
5952
- /** @description Whether the (possibly entity-inherited) company set includes an active SEC company with a ticker. */
6129
+ /** @description Whether the owner's company links include an active SEC company with a ticker. For an owner linked to an entity, the entity's `publicly_traded`: any active SEC company with a ticker across members, or the entity itself is listed or a subsidiary of a listed company. */
5953
6130
  publicly_traded: boolean;
5954
6131
  /**
5955
- * @description First SEC ticker across the (possibly inherited) company set. null when none.
6132
+ * @description The owner's own first SEC ticker. When it has none and is linked to an entity, the entity's `ticker`, which can be a ticker inherited from a listed ancestor. null when none.
5956
6133
  * @example AAPL
5957
6134
  */
5958
6135
  ticker: string | null;
5959
6136
  /**
5960
- * @description First GLEIF LEI across the (possibly inherited) company set. null when none.
6137
+ * @description The owner's own first GLEIF LEI, uppercased. When it has none and is linked to an entity, the entity's `lei`: its own LEI when set, else the first GLEIF LEI across members. null when none.
5961
6138
  * @example HWUPKR0MPOU8FGXBT394
5962
6139
  */
5963
6140
  lei: string | null;
5964
- /** @description Whether any GLEIF LEI is present across the (possibly inherited) company set. */
6141
+ /** @description Whether the owner's company links include a GLEIF LEI. For an owner linked to an entity, the entity's `has_lei`: its own LEI, or any GLEIF LEI across members. */
5965
6142
  has_lei: boolean;
5966
6143
  /**
5967
- * @description `entity` when company facts are inherited across entity members; `direct` for an unlinked singleton.
6144
+ * @description `entity` when company facts are inherited across entity members; `direct` when the owner is not linked, or its entity is no longer served (GET /v1/entities/{id} returns 404), and the facts are its own links only.
5968
6145
  * @example entity
5969
6146
  * @enum {string}
5970
6147
  */
5971
6148
  companies_source: "entity" | "direct";
5972
- /** @example 1024 */
6149
+ /**
6150
+ * @description Distinct marks (mark grain): a Madrid IR and its designations count once, matching the default grouped trademark listings. 0 when stats are not yet computed.
6151
+ * @example 1024
6152
+ */
5973
6153
  trademark_count: number;
5974
6154
  /**
5975
- * @description Count of ACTIVE trademarks (registered + pending). Always present; 0 when stats are not yet computed. Same mark grain as trademark_count.
6155
+ * @description Distinct marks (mark grain) that are registered or still in prosecution. Always present; 0 when stats are not yet computed.
5976
6156
  * @example 640
5977
6157
  */
5978
6158
  active_count: number;
@@ -5988,7 +6168,7 @@ export interface components {
5988
6168
  identifier: string;
5989
6169
  identifier_type: string;
5990
6170
  }[];
5991
- /** @description Omitted entirely when empty. When the owner is linked to an entity this is the union of all members' company links (served through the entity); the owner's own links are included. */
6171
+ /** @description Omitted entirely when empty. When the owner is linked to an entity this is the union of all members' company links (served through the entity), the owner's own links first. */
5992
6172
  companies?: {
5993
6173
  /** @example sec */
5994
6174
  source: string;
@@ -6015,23 +6195,34 @@ export interface components {
6015
6195
  verified_by?: string | null;
6016
6196
  }[];
6017
6197
  stats: {
6198
+ /** @description Distinct marks (mark grain): a Madrid IR and its designations count once, matching the default grouped trademark listings. 0 when stats are not yet computed. */
6018
6199
  trademark_count: number;
6200
+ /** @description Office records (record grain) at this status stage. A Madrid IR counts once per designation record, so the status counts can sum to more than trademark_count. Records at a stage outside the five buckets (for example unknown or opposition_period) are counted in none. */
6019
6201
  registered_count: number;
6202
+ /** @description Office records (record grain) at this status stage. A Madrid IR counts once per designation record, so the status counts can sum to more than trademark_count. Records at a stage outside the five buckets (for example unknown or opposition_period) are counted in none. */
6020
6203
  pending_count: number;
6204
+ /** @description Office records (record grain) at this status stage. A Madrid IR counts once per designation record, so the status counts can sum to more than trademark_count. Records at a stage outside the five buckets (for example unknown or opposition_period) are counted in none. */
6021
6205
  expired_count: number;
6206
+ /** @description Office records (record grain) at this status stage. A Madrid IR counts once per designation record, so the status counts can sum to more than trademark_count. Records at a stage outside the five buckets (for example unknown or opposition_period) are counted in none. Includes surrendered and invalidated records. */
6022
6207
  cancelled_count: number;
6208
+ /** @description Office records (record grain) at this status stage. A Madrid IR counts once per designation record, so the status counts can sum to more than trademark_count. Records at a stage outside the five buckets (for example unknown or opposition_period) are counted in none. Includes withdrawn and refused records. */
6023
6209
  abandoned_count: number;
6024
6210
  /**
6025
6211
  * @deprecated
6026
- * @description Deprecated: use grant_rate — same value; registration_rate is a misnomer (it is the share of concluded prosecutions that were ever granted, not the share currently registered).
6212
+ * @description Deprecated: use grant_rate. Same value; registration_rate is a misnomer (it is the share of concluded prosecutions that were ever granted, not the share currently registered).
6027
6213
  */
6028
6214
  registration_rate: number | null;
6029
- /** @description Share of concluded prosecutions (registered + expired + cancelled) that were ever granted. Same value as the deprecated registration_rate. */
6215
+ /** @description Share of concluded prosecutions (registered + expired + cancelled) that were ever granted, over office records (record grain). Same value as the deprecated registration_rate. */
6030
6216
  grant_rate: number | null;
6217
+ /** @description Share of concluded prosecutions (record grain) that ended abandoned, withdrawn or refused: abandoned / (registered + expired + cancelled + abandoned). */
6031
6218
  abandonment_rate: number | null;
6219
+ /** @description Distinct offices among the records. A Madrid IR's designations recorded by WIPO count as one office. */
6032
6220
  jurisdiction_count: number;
6221
+ /** @description Earliest filing_date over the records (YYYY-MM-DD). */
6033
6222
  earliest_filing_date: string | null;
6223
+ /** @description Latest filing_date over the records (YYYY-MM-DD). */
6034
6224
  latest_filing_date: string | null;
6225
+ /** @description When this stats row was last recomputed. The row only changes when a value changes, so an unchanged portfolio keeps its earlier stamp. */
6035
6226
  computed_at: string | null;
6036
6227
  } | null;
6037
6228
  created_at: string;
@@ -6052,8 +6243,9 @@ export interface components {
6052
6243
  * @example corporation
6053
6244
  */
6054
6245
  legal_form: string | null;
6246
+ /** @description Distinct marks (mark grain): a Madrid IR and its designations count once, matching the default grouped trademark listings. 0 when stats are not yet computed. */
6055
6247
  trademark_count: number;
6056
- /** @description Count of ACTIVE trademarks (registered + pending). Always present; 0 when stats not yet computed. */
6248
+ /** @description Distinct marks (mark grain) that are registered or still in prosecution. Always present; 0 when stats are not yet computed. */
6057
6249
  active_count: number;
6058
6250
  /**
6059
6251
  * @description The resolved entity this owner is linked into. null when the owner is not linked to an entity.
@@ -6087,28 +6279,73 @@ export interface components {
6087
6279
  /** @example srch_abc123 */
6088
6280
  search_id: string;
6089
6281
  /**
6090
- * @description Echo of the text query, or null for filter-only searches.
6282
+ * @description Echo of the text query, or null for filter-only searches and for a q list.
6091
6283
  * @example SIGNA
6092
6284
  */
6093
6285
  query: string | null;
6094
6286
  /**
6095
- * @description Public search strategies used for the served result set. Empty for deterministic match modes.
6287
+ * @description The similarity channels q ran on (identical is always included). Empty without q.
6096
6288
  * @example [
6097
- * "exact",
6098
- * "phonetic",
6289
+ * "identical",
6099
6290
  * "fuzzy",
6100
- * "prefix"
6291
+ * "embedded",
6292
+ * "lookalike"
6101
6293
  * ]
6102
6294
  */
6103
- strategies_used: ("exact" | "phonetic" | "fuzzy" | "prefix")[];
6295
+ similarity_applied: ("identical" | "fuzzy" | "embedded" | "phonetic" | "lookalike")[];
6296
+ /**
6297
+ * @description Version of the ranking that ordered this response. Cursors are bound to it: a new version restarts pagination (400 `cursor_invalid`).
6298
+ * @example v12
6299
+ */
6300
+ ranking_version: string;
6301
+ /**
6302
+ * @description The order applied: `relevance` (q present), `mark_text_fit` (text order for a mark_text-only request), `filing_date` (newest filing first), or the explicit `sort` string.
6303
+ * @example relevance
6304
+ */
6305
+ order: string;
6306
+ /**
6307
+ * @description False only when the search hit its time limit or lost a shard and the request set allow_partial; the page may then be missing matches. Without allow_partial such a search returns 503.
6308
+ * @example true
6309
+ */
6310
+ complete: boolean;
6104
6311
  /**
6105
- * @description How the query matched the mark text. 'similar' runs the ranked ladder; exact/starts_with/ends_with/contains are deterministic (relevance_score is null on every row).
6106
- * @example similar
6312
+ * @description Why `complete` is false. Omitted when complete.
6313
+ * @example timeout
6107
6314
  * @enum {string}
6108
6315
  */
6109
- match: "similar" | "exact" | "starts_with" | "ends_with" | "contains";
6316
+ incomplete_reason?: "timeout" | "shard_failure";
6317
+ /** @description Present when q was read as a trademark number: those records are looked up besides the ranked text match and listed first. */
6318
+ identifier?: {
6319
+ /**
6320
+ * @description WIPO ST.3 code when q names or implies one office; null for a bare number.
6321
+ * @example US
6322
+ */
6323
+ office: string | null;
6324
+ /**
6325
+ * @example number
6326
+ * @enum {string}
6327
+ */
6328
+ kind: "application" | "registration" | "ir" | "signa_id" | "number";
6329
+ /**
6330
+ * @description The number in the office's stored form (a tm_ id for signa_id).
6331
+ * @example 1939139
6332
+ */
6333
+ number: string;
6334
+ };
6335
+ /** @description The deprecated parameters this request used, each with its replacement. Omitted when none. */
6336
+ deprecations?: {
6337
+ /** @example strategies */
6338
+ param: string;
6339
+ /** @example similarity */
6340
+ replacement: string;
6341
+ /**
6342
+ * @description Date (UTC) from which the deprecated parameter is rejected.
6343
+ * @example 2026-12-28
6344
+ */
6345
+ sunset: string;
6346
+ }[];
6110
6347
  /**
6111
- * @description International registration presentation actually served. grouped = one row per mark/IR, coverage block present on IR rows; expanded = one row per Madrid designation.
6348
+ * @description International registration presentation actually served. grouped = one row per mark/IR, coverage block present on IR rows; expanded = one row per Madrid designation. A trademark number in q is served expanded: one row per record it names.
6112
6349
  * @example grouped
6113
6350
  * @enum {string}
6114
6351
  */
@@ -6124,24 +6361,24 @@ export interface components {
6124
6361
  * @enum {string}
6125
6362
  */
6126
6363
  territory_match: "protection" | "direct";
6127
- /** @description Coded search warnings: per-strategy skip warnings (a REQUESTED strategy produced zero clauses for the query shape — e.g. strategies=[phonetic] on a query too short/high-collision), filter-coverage warnings (an applied filter, e.g. opposition_status or seniority_claims, has partial index coverage), `expanded_fallback` (a grouped request was served one row per record), and `result_window_reached` (the 10,000-row result window, not the data, ends this walk). Omitted when there is nothing to warn about. */
6364
+ /** @description Coded search warnings: per-channel skip warnings (a REQUESTED similarity channel produced zero clauses for the query shape — e.g. similarity=phonetic on a query too short/high-collision), filter-coverage warnings (an applied filter, e.g. opposition_status or seniority_claims, has partial index coverage), `expanded_fallback` (a grouped request was served one row per record), `identifier_lookup` (q is a trademark number, served one row per record it names), and `result_window_reached` (the 10,000-row result window, not the data, ends this walk). Omitted when there is nothing to warn about. */
6128
6365
  warnings?: {
6129
6366
  /**
6130
- * @description Stable warning code for client handling: `<strategy>_skipped` (a requested strategy produced no clauses), `partial_opposition_coverage` / `partial_seniority_coverage` (filter coverage), `partial_results` (the search hit its time limit or lost a shard; the page may be missing matches), `strategies_reduced` (OpenSearch rejected the full query and it was retried with fewer strategies; see `dropped_strategies`), `expanded_fallback` (a grouped request was served one row per record because the grouped view cannot serve a filter, sort or option; see `affected_filters` / `affected_option`), `result_window_reached` (more than 10,000 rows match and this page is the last one the 10,000-row result window lets a relevance or sorted walk reach), `mixed_script` (a `q` term, or a term of a `q` list, under a deterministic `match` mode mixes Latin with Greek or Cyrillic letters, which that mode compares as written; see `affected_filter`).
6367
+ * @description Stable warning code for client handling: `<channel>_skipped` (a requested similarity channel produced no clauses for this query; see `channel`), `partial_opposition_coverage` / `partial_seniority_coverage` (filter coverage), `expanded_fallback` (a grouped request was served one row per record because the grouped view cannot serve a filter, sort or option; see `affected_filters` / `affected_option`), `identifier_lookup` (`q` is a trademark number, so the response lists the records it names, one row per record), `result_window_reached` (more than 10,000 rows match and this page is the last one the 10,000-row result window lets a relevance or sorted walk reach), `mixed_script` (a mark_text operator value mixes Latin with Greek or Cyrillic letters, which the operators compare as written; see `affected_filter`).
6131
6368
  * @example phonetic_skipped
6132
6369
  */
6133
6370
  code: string;
6134
6371
  /**
6135
6372
  * @description Human-readable explanation of the warning.
6136
- * @example phonetic_skipped: the phonetic strategy produced no clauses for this query.
6373
+ * @example phonetic_skipped: the phonetic similarity channel produced no clauses for this query.
6137
6374
  */
6138
6375
  message: string;
6139
6376
  /**
6140
- * @description For strategy-skip warnings, the requested strategy that produced no clauses.
6377
+ * @description For `<channel>_skipped` warnings, the requested similarity channel that produced no clauses.
6141
6378
  * @example phonetic
6142
6379
  * @enum {string}
6143
6380
  */
6144
- strategy?: "exact" | "phonetic" | "fuzzy" | "prefix";
6381
+ channel?: "identical" | "fuzzy" | "embedded" | "phonetic" | "lookalike";
6145
6382
  /**
6146
6383
  * @description Warning severity (filter-coverage warnings).
6147
6384
  * @example warning
@@ -6160,13 +6397,6 @@ export interface components {
6160
6397
  * ]
6161
6398
  */
6162
6399
  affected_offices?: string[];
6163
- /**
6164
- * @description For `strategies_reduced` warnings, the requested strategies the retry dropped.
6165
- * @example [
6166
- * "fuzzy"
6167
- * ]
6168
- */
6169
- dropped_strategies?: ("exact" | "phonetic" | "fuzzy" | "prefix")[];
6170
6400
  /**
6171
6401
  * @description For `expanded_fallback` warnings, the filter(s) the grouped view could not serve. Two entries mean the pair could hold on different designations of one mark.
6172
6402
  * @example [
@@ -6256,12 +6486,17 @@ export interface components {
6256
6486
  /** @example US */
6257
6487
  country_code: string | null;
6258
6488
  /**
6259
- * @description Total trademarks where this attorney is representative (mark grain). 0 when stats not yet computed.
6489
+ * @description WIPO ST.3 code of the office whose records this attorney row comes from. Attorney records are per office: the same person appears once per office they file at.
6490
+ * @example US
6491
+ */
6492
+ source_office_code: string | null;
6493
+ /**
6494
+ * @description Distinct marks (mark grain): a Madrid IR and its designations count once, matching the default grouped trademark listings. 0 when stats are not yet computed.
6260
6495
  * @example 512
6261
6496
  */
6262
6497
  trademark_count: number;
6263
6498
  /**
6264
- * @description Count of ACTIVE trademarks (registered + pending). Always present; 0 when stats not yet computed.
6499
+ * @description Distinct marks (mark grain) that are registered or still in prosecution. Always present; 0 when stats are not yet computed.
6265
6500
  * @example 300
6266
6501
  */
6267
6502
  active_count: number;
@@ -6279,24 +6514,36 @@ export interface components {
6279
6514
  identifier_type: string;
6280
6515
  }[];
6281
6516
  stats: {
6517
+ /** @description Distinct marks (mark grain): a Madrid IR and its designations count once, matching the default grouped trademark listings. 0 when stats are not yet computed. */
6282
6518
  trademark_count: number;
6519
+ /** @description Office records (record grain) at this status stage. A Madrid IR counts once per designation record, so the status counts can sum to more than trademark_count. Records at a stage outside the five buckets (for example unknown or opposition_period) are counted in none. */
6283
6520
  registered_count: number;
6521
+ /** @description Office records (record grain) at this status stage. A Madrid IR counts once per designation record, so the status counts can sum to more than trademark_count. Records at a stage outside the five buckets (for example unknown or opposition_period) are counted in none. */
6284
6522
  pending_count: number;
6523
+ /** @description Office records (record grain) at this status stage. A Madrid IR counts once per designation record, so the status counts can sum to more than trademark_count. Records at a stage outside the five buckets (for example unknown or opposition_period) are counted in none. */
6285
6524
  expired_count: number;
6525
+ /** @description Office records (record grain) at this status stage. A Madrid IR counts once per designation record, so the status counts can sum to more than trademark_count. Records at a stage outside the five buckets (for example unknown or opposition_period) are counted in none. Includes surrendered and invalidated records. */
6286
6526
  cancelled_count: number;
6527
+ /** @description Office records (record grain) at this status stage. A Madrid IR counts once per designation record, so the status counts can sum to more than trademark_count. Records at a stage outside the five buckets (for example unknown or opposition_period) are counted in none. Includes withdrawn and refused records. */
6287
6528
  abandoned_count: number;
6288
6529
  /**
6289
6530
  * @deprecated
6290
- * @description Deprecated: use grant_rate — same value; registration_rate is a misnomer (it is the share of concluded prosecutions that were ever granted, not the share currently registered).
6531
+ * @description Deprecated: use grant_rate. Same value; registration_rate is a misnomer (it is the share of concluded prosecutions that were ever granted, not the share currently registered).
6291
6532
  */
6292
6533
  registration_rate: number | null;
6293
- /** @description Share of concluded prosecutions (registered + expired + cancelled) that were ever granted. Same value as the deprecated registration_rate. */
6534
+ /** @description Share of concluded prosecutions (registered + expired + cancelled) that were ever granted, over office records (record grain). Same value as the deprecated registration_rate. */
6294
6535
  grant_rate: number | null;
6536
+ /** @description Share of concluded prosecutions (record grain) that ended abandoned, withdrawn or refused: abandoned / (registered + expired + cancelled + abandoned). */
6295
6537
  abandonment_rate: number | null;
6538
+ /** @description Distinct offices among the records. A Madrid IR's designations recorded by WIPO count as one office. */
6296
6539
  jurisdiction_count: number;
6540
+ /** @description Earliest filing_date over the records (YYYY-MM-DD). */
6297
6541
  earliest_filing_date: string | null;
6542
+ /** @description Latest filing_date over the records (YYYY-MM-DD). */
6298
6543
  latest_filing_date: string | null;
6544
+ /** @description Mean days from filing_date to registration_date over records with both dates (record grain). null when no record has both. */
6299
6545
  avg_prosecution_days: number | null;
6546
+ /** @description When this stats row was last recomputed. The row only changes when a value changes, so an unchanged portfolio keeps its earlier stamp. */
6300
6547
  computed_at: string | null;
6301
6548
  } | null;
6302
6549
  created_at: string;
@@ -6313,8 +6560,14 @@ export interface components {
6313
6560
  canonical_name: string;
6314
6561
  firm_name: string | null;
6315
6562
  country_code: string | null;
6563
+ /**
6564
+ * @description WIPO ST.3 code of the office whose records this attorney row comes from. Attorney records are per office: the same person appears once per office they file at.
6565
+ * @example US
6566
+ */
6567
+ source_office_code: string | null;
6568
+ /** @description Distinct marks (mark grain): a Madrid IR and its designations count once, matching the default grouped trademark listings. 0 when stats are not yet computed. */
6316
6569
  trademark_count: number;
6317
- /** @description Count of ACTIVE trademarks (registered + pending). Always present; 0 when stats not yet computed. */
6570
+ /** @description Distinct marks (mark grain) that are registered or still in prosecution. Always present; 0 when stats are not yet computed. */
6318
6571
  active_count: number;
6319
6572
  };
6320
6573
  AttorneyListResponse: {
@@ -6343,28 +6596,73 @@ export interface components {
6343
6596
  /** @example srch_abc123 */
6344
6597
  search_id: string;
6345
6598
  /**
6346
- * @description Echo of the text query, or null for filter-only searches.
6599
+ * @description Echo of the text query, or null for filter-only searches and for a q list.
6347
6600
  * @example SIGNA
6348
6601
  */
6349
6602
  query: string | null;
6350
6603
  /**
6351
- * @description Public search strategies used for the served result set. Empty for deterministic match modes.
6604
+ * @description The similarity channels q ran on (identical is always included). Empty without q.
6352
6605
  * @example [
6353
- * "exact",
6354
- * "phonetic",
6606
+ * "identical",
6355
6607
  * "fuzzy",
6356
- * "prefix"
6608
+ * "embedded",
6609
+ * "lookalike"
6357
6610
  * ]
6358
6611
  */
6359
- strategies_used: ("exact" | "phonetic" | "fuzzy" | "prefix")[];
6612
+ similarity_applied: ("identical" | "fuzzy" | "embedded" | "phonetic" | "lookalike")[];
6613
+ /**
6614
+ * @description Version of the ranking that ordered this response. Cursors are bound to it: a new version restarts pagination (400 `cursor_invalid`).
6615
+ * @example v12
6616
+ */
6617
+ ranking_version: string;
6618
+ /**
6619
+ * @description The order applied: `relevance` (q present), `mark_text_fit` (text order for a mark_text-only request), `filing_date` (newest filing first), or the explicit `sort` string.
6620
+ * @example relevance
6621
+ */
6622
+ order: string;
6623
+ /**
6624
+ * @description False only when the search hit its time limit or lost a shard and the request set allow_partial; the page may then be missing matches. Without allow_partial such a search returns 503.
6625
+ * @example true
6626
+ */
6627
+ complete: boolean;
6360
6628
  /**
6361
- * @description How the query matched the mark text. 'similar' runs the ranked ladder; exact/starts_with/ends_with/contains are deterministic (relevance_score is null on every row).
6362
- * @example similar
6629
+ * @description Why `complete` is false. Omitted when complete.
6630
+ * @example timeout
6363
6631
  * @enum {string}
6364
6632
  */
6365
- match: "similar" | "exact" | "starts_with" | "ends_with" | "contains";
6633
+ incomplete_reason?: "timeout" | "shard_failure";
6634
+ /** @description Present when q was read as a trademark number: those records are looked up besides the ranked text match and listed first. */
6635
+ identifier?: {
6636
+ /**
6637
+ * @description WIPO ST.3 code when q names or implies one office; null for a bare number.
6638
+ * @example US
6639
+ */
6640
+ office: string | null;
6641
+ /**
6642
+ * @example number
6643
+ * @enum {string}
6644
+ */
6645
+ kind: "application" | "registration" | "ir" | "signa_id" | "number";
6646
+ /**
6647
+ * @description The number in the office's stored form (a tm_ id for signa_id).
6648
+ * @example 1939139
6649
+ */
6650
+ number: string;
6651
+ };
6652
+ /** @description The deprecated parameters this request used, each with its replacement. Omitted when none. */
6653
+ deprecations?: {
6654
+ /** @example strategies */
6655
+ param: string;
6656
+ /** @example similarity */
6657
+ replacement: string;
6658
+ /**
6659
+ * @description Date (UTC) from which the deprecated parameter is rejected.
6660
+ * @example 2026-12-28
6661
+ */
6662
+ sunset: string;
6663
+ }[];
6366
6664
  /**
6367
- * @description International registration presentation actually served. grouped = one row per mark/IR, coverage block present on IR rows; expanded = one row per Madrid designation.
6665
+ * @description International registration presentation actually served. grouped = one row per mark/IR, coverage block present on IR rows; expanded = one row per Madrid designation. A trademark number in q is served expanded: one row per record it names.
6368
6666
  * @example grouped
6369
6667
  * @enum {string}
6370
6668
  */
@@ -6380,24 +6678,24 @@ export interface components {
6380
6678
  * @enum {string}
6381
6679
  */
6382
6680
  territory_match: "protection" | "direct";
6383
- /** @description Coded search warnings: per-strategy skip warnings (a REQUESTED strategy produced zero clauses for the query shape — e.g. strategies=[phonetic] on a query too short/high-collision), filter-coverage warnings (an applied filter, e.g. opposition_status or seniority_claims, has partial index coverage), `expanded_fallback` (a grouped request was served one row per record), and `result_window_reached` (the 10,000-row result window, not the data, ends this walk). Omitted when there is nothing to warn about. */
6681
+ /** @description Coded search warnings: per-channel skip warnings (a REQUESTED similarity channel produced zero clauses for the query shape — e.g. similarity=phonetic on a query too short/high-collision), filter-coverage warnings (an applied filter, e.g. opposition_status or seniority_claims, has partial index coverage), `expanded_fallback` (a grouped request was served one row per record), `identifier_lookup` (q is a trademark number, served one row per record it names), and `result_window_reached` (the 10,000-row result window, not the data, ends this walk). Omitted when there is nothing to warn about. */
6384
6682
  warnings?: {
6385
6683
  /**
6386
- * @description Stable warning code for client handling: `<strategy>_skipped` (a requested strategy produced no clauses), `partial_opposition_coverage` / `partial_seniority_coverage` (filter coverage), `partial_results` (the search hit its time limit or lost a shard; the page may be missing matches), `strategies_reduced` (OpenSearch rejected the full query and it was retried with fewer strategies; see `dropped_strategies`), `expanded_fallback` (a grouped request was served one row per record because the grouped view cannot serve a filter, sort or option; see `affected_filters` / `affected_option`), `result_window_reached` (more than 10,000 rows match and this page is the last one the 10,000-row result window lets a relevance or sorted walk reach), `mixed_script` (a `q` term, or a term of a `q` list, under a deterministic `match` mode mixes Latin with Greek or Cyrillic letters, which that mode compares as written; see `affected_filter`).
6684
+ * @description Stable warning code for client handling: `<channel>_skipped` (a requested similarity channel produced no clauses for this query; see `channel`), `partial_opposition_coverage` / `partial_seniority_coverage` (filter coverage), `expanded_fallback` (a grouped request was served one row per record because the grouped view cannot serve a filter, sort or option; see `affected_filters` / `affected_option`), `identifier_lookup` (`q` is a trademark number, so the response lists the records it names, one row per record), `result_window_reached` (more than 10,000 rows match and this page is the last one the 10,000-row result window lets a relevance or sorted walk reach), `mixed_script` (a mark_text operator value mixes Latin with Greek or Cyrillic letters, which the operators compare as written; see `affected_filter`).
6387
6685
  * @example phonetic_skipped
6388
6686
  */
6389
6687
  code: string;
6390
6688
  /**
6391
6689
  * @description Human-readable explanation of the warning.
6392
- * @example phonetic_skipped: the phonetic strategy produced no clauses for this query.
6690
+ * @example phonetic_skipped: the phonetic similarity channel produced no clauses for this query.
6393
6691
  */
6394
6692
  message: string;
6395
6693
  /**
6396
- * @description For strategy-skip warnings, the requested strategy that produced no clauses.
6694
+ * @description For `<channel>_skipped` warnings, the requested similarity channel that produced no clauses.
6397
6695
  * @example phonetic
6398
6696
  * @enum {string}
6399
6697
  */
6400
- strategy?: "exact" | "phonetic" | "fuzzy" | "prefix";
6698
+ channel?: "identical" | "fuzzy" | "embedded" | "phonetic" | "lookalike";
6401
6699
  /**
6402
6700
  * @description Warning severity (filter-coverage warnings).
6403
6701
  * @example warning
@@ -6416,13 +6714,6 @@ export interface components {
6416
6714
  * ]
6417
6715
  */
6418
6716
  affected_offices?: string[];
6419
- /**
6420
- * @description For `strategies_reduced` warnings, the requested strategies the retry dropped.
6421
- * @example [
6422
- * "fuzzy"
6423
- * ]
6424
- */
6425
- dropped_strategies?: ("exact" | "phonetic" | "fuzzy" | "prefix")[];
6426
6717
  /**
6427
6718
  * @description For `expanded_fallback` warnings, the filter(s) the grouped view could not serve. Two entries mean the pair could hold on different designations of one mark.
6428
6719
  * @example [
@@ -6501,9 +6792,10 @@ export interface components {
6501
6792
  canonical_name: string;
6502
6793
  country_code: string | null;
6503
6794
  attorney_count: number;
6795
+ /** @description Distinct marks (mark grain): a Madrid IR and its designations count once, matching the default grouped trademark listings. 0 when stats are not yet computed. */
6504
6796
  trademark_count: number;
6505
6797
  /**
6506
- * @description Count of ACTIVE trademarks (registered + pending). Always present; 0 when stats not yet computed.
6798
+ * @description Distinct marks (mark grain) that are registered or still in prosecution. Always present; 0 when stats are not yet computed.
6507
6799
  * @example 300
6508
6800
  */
6509
6801
  active_count: number;
@@ -6537,8 +6829,9 @@ export interface components {
6537
6829
  canonical_name: string;
6538
6830
  country_code: string | null;
6539
6831
  attorney_count: number;
6832
+ /** @description Distinct marks (mark grain): a Madrid IR and its designations count once, matching the default grouped trademark listings. 0 when stats are not yet computed. */
6540
6833
  trademark_count: number;
6541
- /** @description Count of ACTIVE trademarks (registered + pending). Always present; 0 when stats not yet computed. */
6834
+ /** @description Distinct marks (mark grain) that are registered or still in prosecution. Always present; 0 when stats are not yet computed. */
6542
6835
  active_count: number;
6543
6836
  /**
6544
6837
  * @deprecated
@@ -6570,6 +6863,7 @@ export interface components {
6570
6863
  canonical_name: string;
6571
6864
  firm_name: string | null;
6572
6865
  country_code: string | null;
6866
+ /** @description Distinct marks (mark grain): a Madrid IR and its designations count once, matching the default grouped trademark listings. 0 when stats are not yet computed. */
6573
6867
  trademark_count: number;
6574
6868
  /**
6575
6869
  * @deprecated
@@ -6608,28 +6902,73 @@ export interface components {
6608
6902
  /** @example srch_abc123 */
6609
6903
  search_id: string;
6610
6904
  /**
6611
- * @description Echo of the text query, or null for filter-only searches.
6905
+ * @description Echo of the text query, or null for filter-only searches and for a q list.
6612
6906
  * @example SIGNA
6613
6907
  */
6614
6908
  query: string | null;
6615
6909
  /**
6616
- * @description Public search strategies used for the served result set. Empty for deterministic match modes.
6910
+ * @description The similarity channels q ran on (identical is always included). Empty without q.
6617
6911
  * @example [
6618
- * "exact",
6619
- * "phonetic",
6912
+ * "identical",
6620
6913
  * "fuzzy",
6621
- * "prefix"
6914
+ * "embedded",
6915
+ * "lookalike"
6622
6916
  * ]
6623
6917
  */
6624
- strategies_used: ("exact" | "phonetic" | "fuzzy" | "prefix")[];
6918
+ similarity_applied: ("identical" | "fuzzy" | "embedded" | "phonetic" | "lookalike")[];
6919
+ /**
6920
+ * @description Version of the ranking that ordered this response. Cursors are bound to it: a new version restarts pagination (400 `cursor_invalid`).
6921
+ * @example v12
6922
+ */
6923
+ ranking_version: string;
6924
+ /**
6925
+ * @description The order applied: `relevance` (q present), `mark_text_fit` (text order for a mark_text-only request), `filing_date` (newest filing first), or the explicit `sort` string.
6926
+ * @example relevance
6927
+ */
6928
+ order: string;
6929
+ /**
6930
+ * @description False only when the search hit its time limit or lost a shard and the request set allow_partial; the page may then be missing matches. Without allow_partial such a search returns 503.
6931
+ * @example true
6932
+ */
6933
+ complete: boolean;
6625
6934
  /**
6626
- * @description How the query matched the mark text. 'similar' runs the ranked ladder; exact/starts_with/ends_with/contains are deterministic (relevance_score is null on every row).
6627
- * @example similar
6935
+ * @description Why `complete` is false. Omitted when complete.
6936
+ * @example timeout
6628
6937
  * @enum {string}
6629
6938
  */
6630
- match: "similar" | "exact" | "starts_with" | "ends_with" | "contains";
6939
+ incomplete_reason?: "timeout" | "shard_failure";
6940
+ /** @description Present when q was read as a trademark number: those records are looked up besides the ranked text match and listed first. */
6941
+ identifier?: {
6942
+ /**
6943
+ * @description WIPO ST.3 code when q names or implies one office; null for a bare number.
6944
+ * @example US
6945
+ */
6946
+ office: string | null;
6947
+ /**
6948
+ * @example number
6949
+ * @enum {string}
6950
+ */
6951
+ kind: "application" | "registration" | "ir" | "signa_id" | "number";
6952
+ /**
6953
+ * @description The number in the office's stored form (a tm_ id for signa_id).
6954
+ * @example 1939139
6955
+ */
6956
+ number: string;
6957
+ };
6958
+ /** @description The deprecated parameters this request used, each with its replacement. Omitted when none. */
6959
+ deprecations?: {
6960
+ /** @example strategies */
6961
+ param: string;
6962
+ /** @example similarity */
6963
+ replacement: string;
6964
+ /**
6965
+ * @description Date (UTC) from which the deprecated parameter is rejected.
6966
+ * @example 2026-12-28
6967
+ */
6968
+ sunset: string;
6969
+ }[];
6631
6970
  /**
6632
- * @description International registration presentation actually served. grouped = one row per mark/IR, coverage block present on IR rows; expanded = one row per Madrid designation.
6971
+ * @description International registration presentation actually served. grouped = one row per mark/IR, coverage block present on IR rows; expanded = one row per Madrid designation. A trademark number in q is served expanded: one row per record it names.
6633
6972
  * @example grouped
6634
6973
  * @enum {string}
6635
6974
  */
@@ -6645,24 +6984,24 @@ export interface components {
6645
6984
  * @enum {string}
6646
6985
  */
6647
6986
  territory_match: "protection" | "direct";
6648
- /** @description Coded search warnings: per-strategy skip warnings (a REQUESTED strategy produced zero clauses for the query shape — e.g. strategies=[phonetic] on a query too short/high-collision), filter-coverage warnings (an applied filter, e.g. opposition_status or seniority_claims, has partial index coverage), `expanded_fallback` (a grouped request was served one row per record), and `result_window_reached` (the 10,000-row result window, not the data, ends this walk). Omitted when there is nothing to warn about. */
6987
+ /** @description Coded search warnings: per-channel skip warnings (a REQUESTED similarity channel produced zero clauses for the query shape — e.g. similarity=phonetic on a query too short/high-collision), filter-coverage warnings (an applied filter, e.g. opposition_status or seniority_claims, has partial index coverage), `expanded_fallback` (a grouped request was served one row per record), `identifier_lookup` (q is a trademark number, served one row per record it names), and `result_window_reached` (the 10,000-row result window, not the data, ends this walk). Omitted when there is nothing to warn about. */
6649
6988
  warnings?: {
6650
6989
  /**
6651
- * @description Stable warning code for client handling: `<strategy>_skipped` (a requested strategy produced no clauses), `partial_opposition_coverage` / `partial_seniority_coverage` (filter coverage), `partial_results` (the search hit its time limit or lost a shard; the page may be missing matches), `strategies_reduced` (OpenSearch rejected the full query and it was retried with fewer strategies; see `dropped_strategies`), `expanded_fallback` (a grouped request was served one row per record because the grouped view cannot serve a filter, sort or option; see `affected_filters` / `affected_option`), `result_window_reached` (more than 10,000 rows match and this page is the last one the 10,000-row result window lets a relevance or sorted walk reach), `mixed_script` (a `q` term, or a term of a `q` list, under a deterministic `match` mode mixes Latin with Greek or Cyrillic letters, which that mode compares as written; see `affected_filter`).
6990
+ * @description Stable warning code for client handling: `<channel>_skipped` (a requested similarity channel produced no clauses for this query; see `channel`), `partial_opposition_coverage` / `partial_seniority_coverage` (filter coverage), `expanded_fallback` (a grouped request was served one row per record because the grouped view cannot serve a filter, sort or option; see `affected_filters` / `affected_option`), `identifier_lookup` (`q` is a trademark number, so the response lists the records it names, one row per record), `result_window_reached` (more than 10,000 rows match and this page is the last one the 10,000-row result window lets a relevance or sorted walk reach), `mixed_script` (a mark_text operator value mixes Latin with Greek or Cyrillic letters, which the operators compare as written; see `affected_filter`).
6652
6991
  * @example phonetic_skipped
6653
6992
  */
6654
6993
  code: string;
6655
6994
  /**
6656
6995
  * @description Human-readable explanation of the warning.
6657
- * @example phonetic_skipped: the phonetic strategy produced no clauses for this query.
6996
+ * @example phonetic_skipped: the phonetic similarity channel produced no clauses for this query.
6658
6997
  */
6659
6998
  message: string;
6660
6999
  /**
6661
- * @description For strategy-skip warnings, the requested strategy that produced no clauses.
7000
+ * @description For `<channel>_skipped` warnings, the requested similarity channel that produced no clauses.
6662
7001
  * @example phonetic
6663
7002
  * @enum {string}
6664
7003
  */
6665
- strategy?: "exact" | "phonetic" | "fuzzy" | "prefix";
7004
+ channel?: "identical" | "fuzzy" | "embedded" | "phonetic" | "lookalike";
6666
7005
  /**
6667
7006
  * @description Warning severity (filter-coverage warnings).
6668
7007
  * @example warning
@@ -6681,13 +7020,6 @@ export interface components {
6681
7020
  * ]
6682
7021
  */
6683
7022
  affected_offices?: string[];
6684
- /**
6685
- * @description For `strategies_reduced` warnings, the requested strategies the retry dropped.
6686
- * @example [
6687
- * "fuzzy"
6688
- * ]
6689
- */
6690
- dropped_strategies?: ("exact" | "phonetic" | "fuzzy" | "prefix")[];
6691
7023
  /**
6692
7024
  * @description For `expanded_fallback` warnings, the filter(s) the grouped view could not serve. Two entries mean the pair could hold on different designations of one mark.
6693
7025
  * @example [
@@ -6851,11 +7183,11 @@ export interface components {
6851
7183
  */
6852
7184
  tickers: string[];
6853
7185
  /**
6854
- * @description Survivorship LEI (first aggregated GLEIF LEI, else the entity row LEI).
7186
+ * @description Survivorship LEI, uppercased: the entity's own LEI when set, else the first GLEIF LEI across member companies. null when none.
6855
7187
  * @example HWUPKR0MPOU8FGXBT394
6856
7188
  */
6857
7189
  lei: string | null;
6858
- /** @description Whether any GLEIF LEI is present across member companies. */
7190
+ /** @description Whether the entity has an LEI: its own, or any GLEIF LEI across member companies. */
6859
7191
  has_lei: boolean;
6860
7192
  /** @description COUNT(DISTINCT trademark) across all member owners (co-owned marks counted once). `null` when the count could not be computed within the read-path timeout for a very large entity (fail-open — the rest of the detail is still served). */
6861
7193
  trademark_count: number | null;
@@ -6924,28 +7256,73 @@ export interface components {
6924
7256
  /** @example srch_abc123 */
6925
7257
  search_id: string;
6926
7258
  /**
6927
- * @description Echo of the text query, or null for filter-only searches.
7259
+ * @description Echo of the text query, or null for filter-only searches and for a q list.
6928
7260
  * @example SIGNA
6929
7261
  */
6930
7262
  query: string | null;
6931
7263
  /**
6932
- * @description Public search strategies used for the served result set. Empty for deterministic match modes.
7264
+ * @description The similarity channels q ran on (identical is always included). Empty without q.
6933
7265
  * @example [
6934
- * "exact",
6935
- * "phonetic",
7266
+ * "identical",
6936
7267
  * "fuzzy",
6937
- * "prefix"
7268
+ * "embedded",
7269
+ * "lookalike"
6938
7270
  * ]
6939
7271
  */
6940
- strategies_used: ("exact" | "phonetic" | "fuzzy" | "prefix")[];
7272
+ similarity_applied: ("identical" | "fuzzy" | "embedded" | "phonetic" | "lookalike")[];
7273
+ /**
7274
+ * @description Version of the ranking that ordered this response. Cursors are bound to it: a new version restarts pagination (400 `cursor_invalid`).
7275
+ * @example v12
7276
+ */
7277
+ ranking_version: string;
7278
+ /**
7279
+ * @description The order applied: `relevance` (q present), `mark_text_fit` (text order for a mark_text-only request), `filing_date` (newest filing first), or the explicit `sort` string.
7280
+ * @example relevance
7281
+ */
7282
+ order: string;
7283
+ /**
7284
+ * @description False only when the search hit its time limit or lost a shard and the request set allow_partial; the page may then be missing matches. Without allow_partial such a search returns 503.
7285
+ * @example true
7286
+ */
7287
+ complete: boolean;
6941
7288
  /**
6942
- * @description How the query matched the mark text. 'similar' runs the ranked ladder; exact/starts_with/ends_with/contains are deterministic (relevance_score is null on every row).
6943
- * @example similar
7289
+ * @description Why `complete` is false. Omitted when complete.
7290
+ * @example timeout
6944
7291
  * @enum {string}
6945
7292
  */
6946
- match: "similar" | "exact" | "starts_with" | "ends_with" | "contains";
7293
+ incomplete_reason?: "timeout" | "shard_failure";
7294
+ /** @description Present when q was read as a trademark number: those records are looked up besides the ranked text match and listed first. */
7295
+ identifier?: {
7296
+ /**
7297
+ * @description WIPO ST.3 code when q names or implies one office; null for a bare number.
7298
+ * @example US
7299
+ */
7300
+ office: string | null;
7301
+ /**
7302
+ * @example number
7303
+ * @enum {string}
7304
+ */
7305
+ kind: "application" | "registration" | "ir" | "signa_id" | "number";
7306
+ /**
7307
+ * @description The number in the office's stored form (a tm_ id for signa_id).
7308
+ * @example 1939139
7309
+ */
7310
+ number: string;
7311
+ };
7312
+ /** @description The deprecated parameters this request used, each with its replacement. Omitted when none. */
7313
+ deprecations?: {
7314
+ /** @example strategies */
7315
+ param: string;
7316
+ /** @example similarity */
7317
+ replacement: string;
7318
+ /**
7319
+ * @description Date (UTC) from which the deprecated parameter is rejected.
7320
+ * @example 2026-12-28
7321
+ */
7322
+ sunset: string;
7323
+ }[];
6947
7324
  /**
6948
- * @description International registration presentation actually served. grouped = one row per mark/IR, coverage block present on IR rows; expanded = one row per Madrid designation.
7325
+ * @description International registration presentation actually served. grouped = one row per mark/IR, coverage block present on IR rows; expanded = one row per Madrid designation. A trademark number in q is served expanded: one row per record it names.
6949
7326
  * @example grouped
6950
7327
  * @enum {string}
6951
7328
  */
@@ -6961,24 +7338,24 @@ export interface components {
6961
7338
  * @enum {string}
6962
7339
  */
6963
7340
  territory_match: "protection" | "direct";
6964
- /** @description Coded search warnings: per-strategy skip warnings (a REQUESTED strategy produced zero clauses for the query shape — e.g. strategies=[phonetic] on a query too short/high-collision), filter-coverage warnings (an applied filter, e.g. opposition_status or seniority_claims, has partial index coverage), `expanded_fallback` (a grouped request was served one row per record), and `result_window_reached` (the 10,000-row result window, not the data, ends this walk). Omitted when there is nothing to warn about. */
7341
+ /** @description Coded search warnings: per-channel skip warnings (a REQUESTED similarity channel produced zero clauses for the query shape — e.g. similarity=phonetic on a query too short/high-collision), filter-coverage warnings (an applied filter, e.g. opposition_status or seniority_claims, has partial index coverage), `expanded_fallback` (a grouped request was served one row per record), `identifier_lookup` (q is a trademark number, served one row per record it names), and `result_window_reached` (the 10,000-row result window, not the data, ends this walk). Omitted when there is nothing to warn about. */
6965
7342
  warnings?: {
6966
7343
  /**
6967
- * @description Stable warning code for client handling: `<strategy>_skipped` (a requested strategy produced no clauses), `partial_opposition_coverage` / `partial_seniority_coverage` (filter coverage), `partial_results` (the search hit its time limit or lost a shard; the page may be missing matches), `strategies_reduced` (OpenSearch rejected the full query and it was retried with fewer strategies; see `dropped_strategies`), `expanded_fallback` (a grouped request was served one row per record because the grouped view cannot serve a filter, sort or option; see `affected_filters` / `affected_option`), `result_window_reached` (more than 10,000 rows match and this page is the last one the 10,000-row result window lets a relevance or sorted walk reach), `mixed_script` (a `q` term, or a term of a `q` list, under a deterministic `match` mode mixes Latin with Greek or Cyrillic letters, which that mode compares as written; see `affected_filter`).
7344
+ * @description Stable warning code for client handling: `<channel>_skipped` (a requested similarity channel produced no clauses for this query; see `channel`), `partial_opposition_coverage` / `partial_seniority_coverage` (filter coverage), `expanded_fallback` (a grouped request was served one row per record because the grouped view cannot serve a filter, sort or option; see `affected_filters` / `affected_option`), `identifier_lookup` (`q` is a trademark number, so the response lists the records it names, one row per record), `result_window_reached` (more than 10,000 rows match and this page is the last one the 10,000-row result window lets a relevance or sorted walk reach), `mixed_script` (a mark_text operator value mixes Latin with Greek or Cyrillic letters, which the operators compare as written; see `affected_filter`).
6968
7345
  * @example phonetic_skipped
6969
7346
  */
6970
7347
  code: string;
6971
7348
  /**
6972
7349
  * @description Human-readable explanation of the warning.
6973
- * @example phonetic_skipped: the phonetic strategy produced no clauses for this query.
7350
+ * @example phonetic_skipped: the phonetic similarity channel produced no clauses for this query.
6974
7351
  */
6975
7352
  message: string;
6976
7353
  /**
6977
- * @description For strategy-skip warnings, the requested strategy that produced no clauses.
7354
+ * @description For `<channel>_skipped` warnings, the requested similarity channel that produced no clauses.
6978
7355
  * @example phonetic
6979
7356
  * @enum {string}
6980
7357
  */
6981
- strategy?: "exact" | "phonetic" | "fuzzy" | "prefix";
7358
+ channel?: "identical" | "fuzzy" | "embedded" | "phonetic" | "lookalike";
6982
7359
  /**
6983
7360
  * @description Warning severity (filter-coverage warnings).
6984
7361
  * @example warning
@@ -6997,13 +7374,6 @@ export interface components {
6997
7374
  * ]
6998
7375
  */
6999
7376
  affected_offices?: string[];
7000
- /**
7001
- * @description For `strategies_reduced` warnings, the requested strategies the retry dropped.
7002
- * @example [
7003
- * "fuzzy"
7004
- * ]
7005
- */
7006
- dropped_strategies?: ("exact" | "phonetic" | "fuzzy" | "prefix")[];
7007
7377
  /**
7008
7378
  * @description For `expanded_fallback` warnings, the filter(s) the grouped view could not serve. Two entries mean the pair could hold on different designations of one mark.
7009
7379
  * @example [
@@ -7071,7 +7441,10 @@ export interface components {
7071
7441
  object: "proceeding";
7072
7442
  /** @example opposition */
7073
7443
  proceeding_type: string;
7074
- /** @example 91234567 */
7444
+ /**
7445
+ * @description The office's identifier for the proceeding, when it issues one. For CIPO, proceeding_number is the office's per-record sequence identifier (1, 2, …), not a Board docket number.
7446
+ * @example 91234567
7447
+ */
7075
7448
  proceeding_number: string | null;
7076
7449
  /** @example decided_rejected */
7077
7450
  status: string | null;
@@ -7316,9 +7689,13 @@ export interface components {
7316
7689
  base_source: "rule_period" | "stated_deadline" | "rule_absolute_cap" | null;
7317
7690
  /** @description A stated due date the engine REJECTED for exceeding the rule's absolute cap, kept as structured provenance. */
7318
7691
  rejected_stated_due_date: string | null;
7692
+ /** @description The fact that retired this deadline. Null when nothing retired it, and on a closed `post_registration_oa_response` row, whose closing entry (named in `notes`) is not one of the record's facts. */
7319
7693
  closed_by_fact_id: string | null;
7320
- /** @enum {string|null} */
7321
- closed_by: "response" | "abandonment" | "sou" | null;
7694
+ /**
7695
+ * @description What retired this deadline. `acceptance` (only on `post_registration_oa_response`): the office accepted the filing the post-registration action examined, so no response is due.
7696
+ * @enum {string|null}
7697
+ */
7698
+ closed_by: "response" | "abandonment" | "sou" | "acceptance" | null;
7322
7699
  /** @description For `outcome: "stated"`: the `stated_deadline` fact that carried the date. */
7323
7700
  stated_by_fact_id: string | null;
7324
7701
  /**
@@ -7342,12 +7719,12 @@ export interface components {
7342
7719
  filing_route: "national" | "regional" | "madrid";
7343
7720
  supported: boolean;
7344
7721
  /**
7345
- * @description Why no MAINTENANCE schedule was computed; null when `supported` is true. `unsupported_jurisdiction`: no rules are modeled for the jurisdiction. `requires_office_date`: the record does not carry the input the statute needs (Australian direct marks filed before 1996-01-01, Singapore direct marks filed before 1999-01-15, a Madrid designation with no international-registration date, or a Swedish, Icelandic, Norwegian or Finnish direct filing made before the renewal-anchor reform of its office (SE 2019-01-01, IS 2020-09-01, NO 2010-07-01, FI 2019-05-01) with no `registration_date`, since the old-regime term runs from registration, or a record where every rule it owes lacks the date it runs from (for example a registered mark with no registration date where the rules run from registration, or a Swedish mark registered on or after 2019-01-01 with no filing date)) and no `expiry_date` was supplied to anchor on; supply the office-stated `expiry_date` and the schedule is computed from it. The engine declines to guess.
7722
+ * @description Why no MAINTENANCE schedule was computed; null when `supported` is true. `unsupported_jurisdiction`: no rules are modeled for the jurisdiction. `requires_office_date`: the record does not carry the input the statute needs (Australian direct marks filed before 1996-01-01, Singapore direct marks filed before 1999-01-15, a Madrid designation with no international-registration date, or a Swedish, Icelandic, Norwegian or Finnish direct filing made before the renewal-anchor reform of its office (SE 2019-01-01, IS 2020-09-01, NO 2010-07-01, FI 2019-05-01) with no `registration_date`, since the old-regime term runs from registration, or a record where every rule it owes lacks the date it runs from (for example a registered or expired mark with no registration date where the rules run from registration, or a Swedish mark registered on or after 2019-01-01 with no filing date; a cancelled mark owes only a renewal that opens a modelled restoration window, as in Japan, so elsewhere it is supported with no deadlines, unless `include_missed` asks for its missed rows too, which it then owes)) and no `expiry_date` was supplied to anchor on; supply the office-stated `expiry_date` and the schedule is computed from it. The engine declines to guess. In a jurisdiction with modeled rules, never `requires_office_date` for a mark whose status ends every obligation (abandoned, withdrawn, surrendered, invalidated, or refused other than a WIPO international registration record, which keeps its renewal): it is supported with no deadlines.
7346
7723
  * @enum {string|null}
7347
7724
  */
7348
7725
  reason: "unsupported_jurisdiction" | "requires_office_date" | null;
7349
7726
  deadlines: components["schemas"]["ComputedDeadline"][];
7350
- /** @description Rules that apply to this mark but were declined because it lacks the date the statute anchors them on. `deadlines` has no row for them, so without this list the obligation would be silently absent. Always present: `[]` when nothing was declined, and `[]` when `supported` is false (`reason` already covers every rule). A rule is declined when the date it runs from is owed but absent: a filing date, an international registration date, the Philippine statement of grant (`protection_grant_date`, for the fifth-year declaration of use of a Madrid designation), or, once the mark is registered, its registration or grant date. A registration-anchored rule on an application not yet registered is not declined: nothing is due yet. Supply the missing field to get the row. */
7727
+ /** @description Rules that apply to this mark but were declined because it lacks the date the statute anchors them on. `deadlines` has no row for them, so without this list the obligation would be silently absent. Always present: `[]` when nothing was declined, and `[]` when `supported` is false (`reason` already covers every rule). A rule is declined when the date it runs from is owed but absent: a filing date, an international registration date, the Philippine statement of grant (`protection_grant_date`, for the fifth-year declaration of use of a Madrid designation), or, once the mark is registered (an expired or cancelled mark was), its registration or grant date. The Mexican third-year declaration covers grants from 10 August 2018 only, so a national mark registered before then is not asked for its grant date; a Madrid designation is, since its statement of grant can come years after its international registration. A registration-anchored rule on an application not yet registered is not declined: nothing is due yet. An expired mark names every rule whose miss costs something (its status serves a rule while the window of that rule is open), except, without `include_missed`, a one-off rule of a national mark (a declaration due once, such as US Section 8, the Philippine third- and fifth-year declarations or the Mexican third-year declaration): its window closed before the term ended, so the date would compute nothing to act on; a Madrid designation granted late in the term of its international registration still names it. A cancelled mark names only a renewal that opens a modelled restoration window: its status serves nothing else. With `include_missed`, both name every rule they owe that would return a row, missed or current, as of the computation date for some date the mark could carry, since its missed row would be returned too: a mark cancelled three years after filing is not asked for a registration date, because no Section 8 or 9 window can have closed yet. Supply the missing field and the rule is computed; whether a row is returned then depends on its window, `horizon_years` and `include_missed`, and for an expired mark on that window being open, as for any computed rule. */
7351
7728
  unsupported_rules: components["schemas"]["UnsupportedDeadlineRule"][];
7352
7729
  /**
7353
7730
  * @description Statutory sources of the jurisdiction configuration this computation used. Provenance is per jurisdiction configuration, not per rule: every rule in a jurisdiction shares this one source list, so it is carried once per item rather than on each row. For per-rule detail, join a row's `rule_id` to `GET /v1/deadline-rules`. Empty only when no configuration exists for the jurisdiction.
@@ -7755,7 +8132,7 @@ export interface components {
7755
8132
  */
7756
8133
  grant_date?: string | null;
7757
8134
  /**
7758
- * @description Office-stated end of the current term. When provided, renewal deadlines anchor on it (trigger_field "reported_expiry") unless the statutory ladder from the trigger date already passes through it. An office-stated renewal-due date (renewal_due_date_basis "reported") anchors the same way when no expiry is stored (trigger_field "reported_renewal_due").
8135
+ * @description Office-stated end of the current term. When provided, renewal deadlines anchor on it (trigger_field "reported_expiry") unless the statutory ladder from the trigger date already passes through it. An office-stated renewal-due date (renewal_due_date_basis "reported") anchors the same way when no expiry is stored (trigger_field "reported_renewal_due"). When it (or the renewal-due date anchoring in its place) has passed, together with its grace period and any restoration window, and no supplied `last_renewal_date` renewed that cycle, the term ended there and no row of a later cycle (renewal, declaration or restoration) is returned.
7759
8136
  * @example null
7760
8137
  */
7761
8138
  expiry_date?: string | null;
@@ -7851,7 +8228,7 @@ export interface components {
7851
8228
  * @enum {string|null}
7852
8229
  */
7853
8230
  reason: "unsupported_jurisdiction" | "requires_office_date" | null;
7854
- /** @description Rules declined for want of their statutory anchor, as on POST /v1/deadlines/compute. `[]` when `supported` is false. */
8231
+ /** @description Rules declined for want of their statutory anchor, as on POST /v1/deadlines/compute: without `include_missed`, or with it when the list is filtered to `urgency=missed` (the only filter that serves missed rows). `[]` when `supported` is false. */
7855
8232
  unsupported_rules: components["schemas"]["UnsupportedDeadlineRule"][];
7856
8233
  };
7857
8234
  DeadlineListResponse: {
@@ -7864,7 +8241,7 @@ export interface components {
7864
8241
  total_count?: number;
7865
8242
  total_count_approximate?: boolean;
7866
8243
  };
7867
- /** @description Marks in the requested scope whose deadlines could not be computed (they have no rows) or were computed only in part (some rules declined), sorted by `trademark_id`. A mark whose status ends every obligation (`abandoned`, `withdrawn`, `surrendered`, `invalidated`, or `refused` other than a WIPO international registration) is never listed: it is owed no deadlines in any jurisdiction. Covers the whole portfolio or trademark, not just this page, and ignores the `type`, `urgency` and `due_before` filters. Reported on the first page (a request without `cursor`); `null` on every continuation page, because the cursor pins the computation date and the first page already answered for the whole chain. `[]` on a first page means every mark in scope that is owed deadlines was fully computed. */
8244
+ /** @description Marks in the requested scope whose deadlines could not be computed (they have no rows) or were computed only in part (some rules declined), sorted by `trademark_id`. A mark whose status ends every obligation (`abandoned`, `withdrawn`, `surrendered`, `invalidated`, or `refused` other than a WIPO international registration) is never listed: it is owed no deadlines in any jurisdiction. Covers the whole portfolio or trademark, not just this page, and ignores the `type` and `due_before` filters and every `urgency` value but `missed`, which also names the rules declined for missed rows. Reported on the first page (a request without `cursor`); `null` on every continuation page, because the cursor pins the computation date and the first page already answered for the whole chain. `[]` on a first page means every mark in scope that is owed deadlines was fully computed. */
7868
8245
  unsupported_marks: components["schemas"]["DeadlineUnsupportedMark"][] | null;
7869
8246
  request_id: string;
7870
8247
  };
@@ -8095,7 +8472,7 @@ export interface components {
8095
8472
  common_extension: components["schemas"]["OppositionCommonExtension"];
8096
8473
  source: components["schemas"]["OppositionWindowSource"];
8097
8474
  /**
8098
- * @description Why the window is unsupported or degraded, as a snake_case code; null on every normal window. With `supported: false`: `unsupported_office` (no rule reaches this office, route and publication date) or `window_not_computable` (a rule resolved but no window could be produced). With `supported: true`, a degraded window: `publication_date_kind_mismatch`, meaning the `publication_date_kind` you sent is not the publication the matched Madrid rule runs from, including the explicit `unknown`. A plain missing `publication_date` stays reason-less: `status: "unknown"` with a null `publication_date` already says that. Treat the vocabulary as open — new codes may be added, so branch on the codes you know and fall through on the rest.
8475
+ * @description Why the window is unsupported or degraded, as a snake_case code; null on every normal window. With `supported: false`: `unsupported_office` (no rule exists for this office and route), `before_commencement` (a rule exists, but the publication date, or a sent `filing_date`, falls before the date it applies from; `rule_id` names it and `effective_from` the boundary) or `window_not_computable` (a rule resolved but no window could be produced). With `supported: true`, a degraded window: `publication_date_kind_mismatch`, meaning the `publication_date_kind` you sent is not the publication the matched Madrid rule runs from, including the explicit `unknown`. A plain missing `publication_date` stays reason-less: `status: "unknown"` with a null `publication_date` already says that. Treat the vocabulary as open — new codes may be added, so branch on the codes you know and fall through on the rest.
8099
8476
  * @example null
8100
8477
  */
8101
8478
  reason: string | null;
@@ -8130,7 +8507,7 @@ export interface components {
8130
8507
  */
8131
8508
  publication_date?: string;
8132
8509
  /**
8133
- * @description Application filing calendar date. Read only by rules whose era pivot is keyed on the filing date (TR: SMK geçici m. 1/1 gives applications filed before 2017-01-10 the former 3-month window even when published later). Omit it and such a rule falls back to the publication date, which yields the shorter modern window; every other rule ignores it.
8510
+ * @description Application filing calendar date. Read only by rules whose era pivot is keyed on the filing date (TR: SMK geçici m. 1/1 gives applications filed before 2017-01-10 the former 3-month window even when published later). Omit it and such a rule falls back to the publication date, which yields the shorter modern window. Also read by a rule that excludes marks already filed when its opposition procedure commenced (CH: filed before 1993-04-01; PL: filed before 2016-04-15), which then has no window; omit it and only the publication date is tested against the commencement. Every other rule ignores it.
8134
8511
  * @example 2026-01-15
8135
8512
  */
8136
8513
  filing_date?: string;
@@ -8186,7 +8563,7 @@ export interface components {
8186
8563
  filing_route: "national" | "regional" | "madrid";
8187
8564
  supported: boolean;
8188
8565
  /**
8189
- * @description Why no maintenance schedule was computed; null when `supported` is true. Same vocabulary as POST /v1/deadlines/compute.
8566
+ * @description Why no maintenance schedule was computed; null when `supported` is true. Same vocabulary and verdict as POST /v1/deadlines/compute with `include_missed: true`: reconcile reads missed cycles too.
8190
8567
  * @enum {string|null}
8191
8568
  */
8192
8569
  reason: "unsupported_jurisdiction" | "requires_office_date" | null;
@@ -8204,6 +8581,8 @@ export interface components {
8204
8581
  computed_at: string;
8205
8582
  /** @example 10 */
8206
8583
  horizon_years: number;
8584
+ /** @description Rules that apply to the record but were declined because it lacks the date the statute anchors them on, as on POST /v1/deadlines/compute with `include_missed: true` (an expired or cancelled record also names the rules whose missed cycles it cannot date), so a docketed deadline of such a rule has no computed value. `[]` when none, and `[]` when `supported` is false. */
8585
+ unsupported_rules: components["schemas"]["UnsupportedDeadlineRule"][];
8207
8586
  };
8208
8587
  ReconcileComputedProvenance: {
8209
8588
  /** @example us_renewal_s9 */
@@ -9140,11 +9519,16 @@ export interface components {
9140
9519
  /** @description Present and `true` when the change diff was bounded (entries dropped past the max count, or an over-long from/to value replaced with a sentinel, or a byte-budget cap hit). Absent when the diff is complete. */
9141
9520
  diff_truncated?: boolean;
9142
9521
  };
9143
- /** @description Match metadata (why/how the mark matched the watch). Null for pure-filter / pre-v2 alerts that carry no match scoring. */
9522
+ /** @description Match metadata (why/how the mark matched the watch). Null for pure-filter / pre-v2 alerts that carry no match scoring. `score` is the engine score for the watch query, not the 0-100 search `relevance_score`. */
9144
9523
  match: {
9145
9524
  reason: string | null;
9146
9525
  score: number | null;
9147
9526
  score_basis: string | null;
9527
+ /**
9528
+ * @description Similarity tier of the matched mark, the same label a search hit carries as `match.tier` (identical, near_identical, similar, related). A retrieval category, not a measured edit distance. Null for filter-only watches, marks found only by their number, and alerts emitted before the field existed.
9529
+ * @enum {string|null}
9530
+ */
9531
+ tier: "identical" | "near_identical" | "similar" | "related" | null;
9148
9532
  } | null;
9149
9533
  trademark: components["schemas"]["AlertTrademark"];
9150
9534
  deadline: {
@@ -9219,11 +9603,16 @@ export interface components {
9219
9603
  /** @description Present and `true` when the change diff was bounded (entries dropped past the max count, or an over-long from/to value replaced with a sentinel, or a byte-budget cap hit). Absent when the diff is complete. */
9220
9604
  diff_truncated?: boolean;
9221
9605
  };
9222
- /** @description Match metadata (why/how the mark matched the watch). Null for pure-filter / pre-v2 alerts that carry no match scoring. */
9606
+ /** @description Match metadata (why/how the mark matched the watch). Null for pure-filter / pre-v2 alerts that carry no match scoring. `score` is the engine score for the watch query, not the 0-100 search `relevance_score`. */
9223
9607
  match: {
9224
9608
  reason: string | null;
9225
9609
  score: number | null;
9226
9610
  score_basis: string | null;
9611
+ /**
9612
+ * @description Similarity tier of the matched mark, the same label a search hit carries as `match.tier` (identical, near_identical, similar, related). A retrieval category, not a measured edit distance. Null for filter-only watches, marks found only by their number, and alerts emitted before the field existed.
9613
+ * @enum {string|null}
9614
+ */
9615
+ tier: "identical" | "near_identical" | "similar" | "related" | null;
9227
9616
  } | null;
9228
9617
  trademark: components["schemas"]["AlertTrademark"];
9229
9618
  deadline: {
@@ -9268,6 +9657,17 @@ export interface components {
9268
9657
  };
9269
9658
  request_id: string;
9270
9659
  };
9660
+ WatchDeprecation: {
9661
+ /** @example query.strategies */
9662
+ param: string;
9663
+ /** @example query.similarity */
9664
+ replacement: string;
9665
+ /**
9666
+ * @description Date the deprecated key stops being accepted (YYYY-MM-DD).
9667
+ * @example 2026-12-28
9668
+ */
9669
+ sunset: string;
9670
+ };
9271
9671
  Watch: {
9272
9672
  /** @example wat_01HK... */
9273
9673
  id: string;
@@ -9334,6 +9734,8 @@ export interface components {
9334
9734
  };
9335
9735
  created_at: string;
9336
9736
  updated_at: string;
9737
+ /** @description Present on create, update and bulk responses when the written query used a deprecated key: `strategies` (replaced by `similarity`) or `min_match_tier` (replaced by `min_tier`). The watch is kept as a legacy watch with its original matching until it is re-saved without them. Each entry names the key, its replacement and the date the old key stops being accepted. */
9738
+ deprecations?: components["schemas"]["WatchDeprecation"][];
9337
9739
  request_id: string;
9338
9740
  };
9339
9741
  WatchList: {
@@ -9405,6 +9807,8 @@ export interface components {
9405
9807
  };
9406
9808
  created_at: string;
9407
9809
  updated_at: string;
9810
+ /** @description Present on create, update and bulk responses when the written query used a deprecated key: `strategies` (replaced by `similarity`) or `min_match_tier` (replaced by `min_tier`). The watch is kept as a legacy watch with its original matching until it is re-saved without them. Each entry names the key, its replacement and the date the old key stops being accepted. */
9811
+ deprecations?: components["schemas"]["WatchDeprecation"][];
9408
9812
  }[];
9409
9813
  has_more: boolean;
9410
9814
  pagination: {
@@ -9427,6 +9831,13 @@ export interface components {
9427
9831
  score_threshold: number | null;
9428
9832
  /** @enum {string|null} */
9429
9833
  min_match_tier: "exact" | "normalized" | "fuzzy" | "phonetic" | null;
9834
+ /** @description The similarity channels the watch query runs. Null without q, and for a legacy watch (stored with the deprecated keys, or before v3 and not re-saved since). */
9835
+ similarity_applied: ("identical" | "fuzzy" | "embedded" | "phonetic" | "lookalike")[] | null;
9836
+ /**
9837
+ * @description The weakest similarity tier that alerts. Null for a legacy watch (stored with the deprecated keys, or before v3 and not re-saved since), which reports min_match_tier.
9838
+ * @enum {string|null}
9839
+ */
9840
+ min_tier: "identical" | "near_identical" | "similar" | "related" | null;
9430
9841
  alert_fired: boolean;
9431
9842
  reason: string;
9432
9843
  /** @enum {string|null} */
@@ -9818,9 +10229,17 @@ export interface components {
9818
10229
  * @example 2026-08-14
9819
10230
  */
9820
10231
  source_date?: string | null;
9821
- /** @description Portfolios this mark belonged to when the event was recorded, with the external_ref you set on the membership. Frozen at record time, so later membership or reference edits never rewrite an event you already received; null external_ref means unknown or unset. Empty when the mark was in no portfolio. Absent on alert.created. */
9822
- portfolios?: {
9823
- /** @example ptf_9aB2xY */
10232
+ /** @description trademark.corrected only: why this status change is a correction of a status Signa published earlier. The rest of the body is the trademark.status_changed shape. */
10233
+ correction?: {
10234
+ /**
10235
+ * @description status: Signa published a wrong status and this event reverses it. late_office_record: office records reached Signa late and show the mark lapsing or a dead mark returning.
10236
+ * @enum {string}
10237
+ */
10238
+ kind: "status" | "late_office_record";
10239
+ };
10240
+ /** @description Portfolios this mark belonged to when the event was recorded, with the external_ref you set on the membership. Frozen at record time, so later membership or reference edits never rewrite an event you already received; null external_ref means unknown or unset. Empty when the mark was in no portfolio. Absent on alert.created. */
10241
+ portfolios?: {
10242
+ /** @example ptf_9aB2xY */
9824
10243
  id: string;
9825
10244
  /** @example MATTER-4471 */
9826
10245
  external_ref: string | null;
@@ -9831,7 +10250,7 @@ export interface components {
9831
10250
  created_at: string;
9832
10251
  request_id: string;
9833
10252
  };
9834
- /** @description The organization's subscription as Signa mirrors it (status, scheduled cancellation, open dunning record of the live subscription). Present only when the API key holds billing:read (or admin); absent otherwise. */
10253
+ /** @description The organization's subscription as Signa mirrors it (status, scheduled cancellation, open dunning record of the live subscription, plan change scheduled for the period end). Present only when the API key holds billing:read (or admin); absent otherwise. */
9835
10254
  SubscriptionSummary: {
9836
10255
  /**
9837
10256
  * @description The organization's Stripe subscription status as mirrored (`active`, `trialing`, `past_due`, `unpaid`, `paused`, `canceled`, ...). Null when the organization has no subscription.
@@ -9849,6 +10268,25 @@ export interface components {
9849
10268
  /** @description Stripe-hosted page to pay the open invoice or update the payment method. */
9850
10269
  invoice_url: string | null;
9851
10270
  } | null;
10271
+ /** @description A downgrade or a switch to monthly billing made through POST /v1/organization/billing/plan-change that waits for the end of the current period; null when none is pending. Requesting the current plan and interval from that endpoint undoes it. Null once it takes effect, and once the subscription is cancelled or the change is released in Stripe. */
10272
+ scheduled_change?: {
10273
+ /**
10274
+ * @description The plan the subscription changes to (canonical name).
10275
+ * @example starter
10276
+ */
10277
+ plan: string;
10278
+ /**
10279
+ * @description The billing interval it changes to.
10280
+ * @example monthly
10281
+ * @enum {string}
10282
+ */
10283
+ interval: "monthly" | "annual";
10284
+ /**
10285
+ * @description When the change takes effect: the end of the current billing period (ISO 8601).
10286
+ * @example 2026-11-02T00:00:00.000Z
10287
+ */
10288
+ effective_at: string;
10289
+ } | null;
9852
10290
  };
9853
10291
  Identity: {
9854
10292
  /** @enum {string} */
@@ -10332,7 +10770,7 @@ export interface components {
10332
10770
  };
10333
10771
  StripePlanChangeResponse: {
10334
10772
  /**
10335
- * @description applied: Stripe applied the change (the proration invoice was paid, or nothing was owed); the plan and credits follow through the webhooks within seconds. pending_payment: the proration payment failed or needs authentication, so nothing changed yet — the customer pays hosted_invoice_url; paying applies the change, and after about 23 hours unpaid Stripe voids the invoice and drops it. scheduled: a downgrade or a shorter interval takes effect at the current period end (effective_at); nothing is charged now.
10773
+ * @description applied: Stripe applied the change (the proration invoice was paid, or nothing was owed); the plan and credits follow through the webhooks within seconds. Also the answer when the request undid a change scheduled here (the current plan and interval were requested): the schedule is released and nothing is charged. pending_payment: the proration payment failed or needs authentication, so nothing changed yet — the customer pays hosted_invoice_url; paying applies the change, and after about 23 hours unpaid Stripe voids the invoice and drops it. scheduled: a downgrade or a shorter interval takes effect at the current period end (effective_at); nothing is charged now.
10336
10774
  * @enum {string}
10337
10775
  */
10338
10776
  outcome: "applied" | "pending_payment" | "scheduled";
@@ -11944,9 +12382,24 @@ export interface operations {
11944
12382
  query?: {
11945
12383
  q?: string;
11946
12384
  sort?: string;
11947
- strategies?: ("exact" | "phonetic" | "fuzzy" | "prefix")[] | null;
11948
- match?: "similar" | "exact" | "starts_with" | "ends_with" | "contains";
11949
- mark_text_not_contains?: string;
12385
+ similarity?: ("identical" | "fuzzy" | "embedded" | "phonetic" | "lookalike")[] | null;
12386
+ mark_text_is?: string[] | null;
12387
+ mark_text_word?: string[] | null;
12388
+ mark_text_starts_with?: string[] | null;
12389
+ mark_text_ends_with?: string[] | null;
12390
+ mark_text_contains?: string[] | null;
12391
+ mark_text_pattern?: string[] | null;
12392
+ mark_text_not_is?: string[] | null;
12393
+ mark_text_not_word?: string[] | null;
12394
+ mark_text_not_starts_with?: string[] | null;
12395
+ mark_text_not_ends_with?: string[] | null;
12396
+ mark_text_not_contains?: string[] | null;
12397
+ mark_text_not_pattern?: string[] | null;
12398
+ entity_id_not?: string[] | null;
12399
+ entity_group_not?: string[] | null;
12400
+ owner_id_not?: string[] | null;
12401
+ trademark_ids_not?: string[] | null;
12402
+ allow_partial?: boolean | null;
11950
12403
  status_primary?: ("pending" | "active" | "inactive" | "unknown" | "mixed")[] | null;
11951
12404
  status_stage?: ("filed" | "examining" | "pending_publication" | "published" | "opposition_period" | "pending_opposition" | "pending_cancellation" | "pending_issuance" | "registered" | "allowed" | "abandoned" | "withdrawn" | "surrendered" | "refused" | "cancelled" | "invalidated" | "expired" | "unknown" | "mixed")[] | null;
11952
12405
  status_reason?: ("refused" | "withdrawn" | "abandoned" | "cancelled" | "invalidated" | "expired" | "surrendered" | "revoked" | "other")[] | null;
@@ -12032,7 +12485,7 @@ export interface operations {
12032
12485
  is_retracted?: boolean | null;
12033
12486
  is_series_mark?: boolean | null;
12034
12487
  international_registrations?: "grouped" | "expanded";
12035
- include?: "full_goods_services"[] | null;
12488
+ include?: ("full_goods_services" | "match_details")[] | null;
12036
12489
  fields?: string[] | null;
12037
12490
  owner_publicly_traded?: boolean | null;
12038
12491
  owner_has_lei?: boolean | null;
@@ -12111,23 +12564,15 @@ export interface operations {
12111
12564
  content: {
12112
12565
  "application/json": {
12113
12566
  /**
12114
- * @description Search query: one term as a string, or a list of exact terms. A list returns every mark that is an exact match under match=exact rules (case, accents, punctuation and spacing) for ANY of its terms, and each hit carries matched_terms[]. A list takes 1-100 terms of up to 200 characters; terms that differ only in case or accents are sent once under the first spelling, and matched_terms lists the kept spellings a hit matches. A list runs match=exact (the default for a list; any other match, or strategies, is a 400). One page costs the same as any search page regardless of term count. A string needs 2 characters for match=similar and 1 for the deterministic match modes. Optional for filtered listing.
12567
+ * @description Search text, ranked through the similarity channels: 1-500 characters, at least 2 after case and accent folding (one CJK character is enough). Always literal; filter on the mark text with the mark_text operators. A trademark number in q (1939139, US 5123456, tm_...) is also looked up and its records lead the page. Optional for a filtered listing. A list of 1-100 terms (each up to 200 characters, e.g. spelling variants) runs every term through the same similarity channels in one search: a hit ranks by its best term and match.terms names the terms that reached it. A list over 10 terms needs similarity limited to identical and lookalike; with fuzzy, embedded or phonetic a list takes 10 terms and 30 words in total. A list is never read as a trademark number.
12115
12568
  * @example SIGNA
12116
12569
  */
12117
- query?: string | string[];
12118
- /** @description Alias for `query` (parity with GET /v1/trademarks). Pass one or the other, not both. */
12119
12570
  q?: string | string[];
12120
- /** @description Sort field(s), comma-separated, - prefix for desc. Valid: filing_date, registration_date, expiry_date, renewal_due_date, updated_at, publication_date, termination_date, office_code, jurisdiction_code, mark_text, owner_name. Max 3. Default: -filing_date when no query. Note: sort=office_code orders by the stored office identifier, which can differ from the alphabetical order of the ST.3 codes shown in office_code. */
12571
+ /** @description Similarity channels for q: identical, fuzzy, embedded, phonetic, lookalike. Default identical, fuzzy, embedded, lookalike; identical is always on. Requires q. */
12572
+ similarity?: ("identical" | "fuzzy" | "embedded" | "phonetic" | "lookalike")[];
12573
+ exclude?: components["schemas"]["SearchExclude"];
12574
+ /** @description Sort field(s), comma-separated, - prefix for desc. Default: relevance with q, mark text order with a mark_text filter and no q, otherwise -filing_date. relevance_score stays on every hit under any sort when q is present. sort=office_code orders by the ST.3 code shown in office_code. Valid: filing_date, registration_date, expiry_date, renewal_due_date, updated_at, publication_date, termination_date, office_code, jurisdiction_code, mark_text, owner_name. Max 3. */
12121
12575
  sort?: string;
12122
- /** @description Search strategies (match=similar only). Defaults to exact + fuzzy for text queries. Only the strategies passed run: exact = whole-mark match (plus serial/registration numbers); synonym and phrase matching are part of fuzzy. */
12123
- strategies?: ("exact" | "phonetic" | "fuzzy" | "prefix")[];
12124
- /**
12125
- * @description How the query matches the mark text: similar (default, ranked) | exact | starts_with | ends_with | contains. Deterministic modes require a query and disallow strategies.
12126
- * @enum {string}
12127
- */
12128
- match?: "similar" | "exact" | "starts_with" | "ends_with" | "contains";
12129
- /** @description Exclude marks whose text contains this substring (case/accent-insensitive). Composable with any match mode. */
12130
- mark_text_not_contains?: string;
12131
12576
  /**
12132
12577
  * @description How filters.jurisdictions matches: protection (default — includes regional rights whose membership covers the requested territory, e.g. a EUTM for jurisdictions=[FR]) or direct (literal territory legs only).
12133
12578
  * @enum {string}
@@ -12258,6 +12703,7 @@ export interface operations {
12258
12703
  /** @description Filter by exact LEI (uppercased server-side). */
12259
12704
  owner_lei?: string;
12260
12705
  trademark_ids?: string[];
12706
+ mark_text?: components["schemas"]["MarkTextFilters"];
12261
12707
  };
12262
12708
  options?: {
12263
12709
  aggregations?: ("status_stage" | "office_code" | "jurisdiction_code" | "nice_classes" | "filing_year" | "mark_feature_type" | "mark_legal_category" | "filing_route" | "right_kind" | "scope_kind" | "firm_id" | "attorney_id" | "owner_country" | "owner_id" | "entity_id" | "owner_count" | "entity_count")[];
@@ -12268,26 +12714,28 @@ export interface operations {
12268
12714
  aggregation_mode?: "filtered" | "exclude_own_filter";
12269
12715
  aggregations_only?: boolean;
12270
12716
  include_total?: boolean;
12271
- /** @description If true, includes highlight snippets under the default similar match mode. In deterministic match modes, highlights is inert. */
12717
+ /** @description If true, includes highlight snippets for a ranked q. */
12272
12718
  highlights?: boolean;
12273
12719
  include_timing?: boolean;
12720
+ /** @description Return 200 with search_meta.complete=false when the engine times out or a shard fails, instead of 503. Default false. */
12721
+ allow_partial?: boolean;
12274
12722
  };
12275
12723
  /** @default 20 */
12276
12724
  limit?: number;
12277
12725
  cursor?: string;
12278
12726
  /**
12279
- * @description International registration presentation. Default grouped → one row per mark/IR, with coverage on IR rows. Use expanded for one row per Madrid designation.
12727
+ * @description International registration presentation. Default grouped → one row per mark/IR, with coverage on IR rows; a trademark number in q returns one row per record it names. Use expanded for one row per Madrid designation.
12280
12728
  * @example grouped
12281
12729
  * @enum {string}
12282
12730
  */
12283
12731
  international_registrations?: "grouped" | "expanded";
12284
12732
  /**
12285
- * @description Optional row projections. `full_goods_services` returns full classifications[].goods_services_text; default rows truncate long G&S text to about 280 characters.
12733
+ * @description Optional row projections. `full_goods_services` returns full classifications[].goods_services_text; default rows truncate long G&S text to about 280 characters. `match_details` adds match.details (the matched lanes and the ranking factors applied) to each hit.
12286
12734
  * @example [
12287
12735
  * "full_goods_services"
12288
12736
  * ]
12289
12737
  */
12290
- include?: "full_goods_services"[];
12738
+ include?: ("full_goods_services" | "match_details")[];
12291
12739
  /**
12292
12740
  * @description Sparse top-level field projection. id and object are always retained.
12293
12741
  * @example [
@@ -13308,7 +13756,24 @@ export interface operations {
13308
13756
  parameters: {
13309
13757
  query?: {
13310
13758
  q?: string;
13311
- strategies?: ("exact" | "phonetic" | "fuzzy" | "prefix")[] | null;
13759
+ similarity?: ("identical" | "fuzzy" | "embedded" | "phonetic" | "lookalike")[] | null;
13760
+ mark_text_is?: string[] | null;
13761
+ mark_text_word?: string[] | null;
13762
+ mark_text_starts_with?: string[] | null;
13763
+ mark_text_ends_with?: string[] | null;
13764
+ mark_text_contains?: string[] | null;
13765
+ mark_text_pattern?: string[] | null;
13766
+ mark_text_not_is?: string[] | null;
13767
+ mark_text_not_word?: string[] | null;
13768
+ mark_text_not_starts_with?: string[] | null;
13769
+ mark_text_not_ends_with?: string[] | null;
13770
+ mark_text_not_contains?: string[] | null;
13771
+ mark_text_not_pattern?: string[] | null;
13772
+ entity_id_not?: string[] | null;
13773
+ entity_group_not?: string[] | null;
13774
+ owner_id_not?: string[] | null;
13775
+ trademark_ids_not?: string[] | null;
13776
+ allow_partial?: boolean | null;
13312
13777
  sort?: string;
13313
13778
  status_primary?: ("pending" | "active" | "inactive" | "unknown" | "mixed")[] | null;
13314
13779
  status_stage?: ("filed" | "examining" | "pending_publication" | "published" | "opposition_period" | "pending_opposition" | "pending_cancellation" | "pending_issuance" | "registered" | "allowed" | "abandoned" | "withdrawn" | "surrendered" | "refused" | "cancelled" | "invalidated" | "expired" | "unknown" | "mixed")[] | null;
@@ -13392,10 +13857,8 @@ export interface operations {
13392
13857
  is_retracted?: boolean | null;
13393
13858
  is_series_mark?: boolean | null;
13394
13859
  international_registrations?: "grouped" | "expanded";
13395
- include?: "full_goods_services"[] | null;
13860
+ include?: ("full_goods_services" | "match_details")[] | null;
13396
13861
  fields?: string[] | null;
13397
- match?: "similar" | "exact" | "starts_with" | "ends_with" | "contains";
13398
- mark_text_not_contains?: string;
13399
13862
  owner_publicly_traded?: boolean | null;
13400
13863
  owner_has_lei?: boolean | null;
13401
13864
  owner_ticker?: string;
@@ -13683,7 +14146,24 @@ export interface operations {
13683
14146
  parameters: {
13684
14147
  query?: {
13685
14148
  q?: string;
13686
- strategies?: ("exact" | "phonetic" | "fuzzy" | "prefix")[] | null;
14149
+ similarity?: ("identical" | "fuzzy" | "embedded" | "phonetic" | "lookalike")[] | null;
14150
+ mark_text_is?: string[] | null;
14151
+ mark_text_word?: string[] | null;
14152
+ mark_text_starts_with?: string[] | null;
14153
+ mark_text_ends_with?: string[] | null;
14154
+ mark_text_contains?: string[] | null;
14155
+ mark_text_pattern?: string[] | null;
14156
+ mark_text_not_is?: string[] | null;
14157
+ mark_text_not_word?: string[] | null;
14158
+ mark_text_not_starts_with?: string[] | null;
14159
+ mark_text_not_ends_with?: string[] | null;
14160
+ mark_text_not_contains?: string[] | null;
14161
+ mark_text_not_pattern?: string[] | null;
14162
+ entity_id_not?: string[] | null;
14163
+ entity_group_not?: string[] | null;
14164
+ owner_id_not?: string[] | null;
14165
+ trademark_ids_not?: string[] | null;
14166
+ allow_partial?: boolean | null;
13687
14167
  sort?: string;
13688
14168
  status_primary?: ("pending" | "active" | "inactive" | "unknown" | "mixed")[] | null;
13689
14169
  status_stage?: ("filed" | "examining" | "pending_publication" | "published" | "opposition_period" | "pending_opposition" | "pending_cancellation" | "pending_issuance" | "registered" | "allowed" | "abandoned" | "withdrawn" | "surrendered" | "refused" | "cancelled" | "invalidated" | "expired" | "unknown" | "mixed")[] | null;
@@ -13767,10 +14247,8 @@ export interface operations {
13767
14247
  is_retracted?: boolean | null;
13768
14248
  is_series_mark?: boolean | null;
13769
14249
  international_registrations?: "grouped" | "expanded";
13770
- include?: "full_goods_services"[] | null;
14250
+ include?: ("full_goods_services" | "match_details")[] | null;
13771
14251
  fields?: string[] | null;
13772
- match?: "similar" | "exact" | "starts_with" | "ends_with" | "contains";
13773
- mark_text_not_contains?: string;
13774
14252
  owner_publicly_traded?: boolean | null;
13775
14253
  owner_has_lei?: boolean | null;
13776
14254
  owner_ticker?: string;
@@ -14130,7 +14608,24 @@ export interface operations {
14130
14608
  parameters: {
14131
14609
  query?: {
14132
14610
  q?: string;
14133
- strategies?: ("exact" | "phonetic" | "fuzzy" | "prefix")[] | null;
14611
+ similarity?: ("identical" | "fuzzy" | "embedded" | "phonetic" | "lookalike")[] | null;
14612
+ mark_text_is?: string[] | null;
14613
+ mark_text_word?: string[] | null;
14614
+ mark_text_starts_with?: string[] | null;
14615
+ mark_text_ends_with?: string[] | null;
14616
+ mark_text_contains?: string[] | null;
14617
+ mark_text_pattern?: string[] | null;
14618
+ mark_text_not_is?: string[] | null;
14619
+ mark_text_not_word?: string[] | null;
14620
+ mark_text_not_starts_with?: string[] | null;
14621
+ mark_text_not_ends_with?: string[] | null;
14622
+ mark_text_not_contains?: string[] | null;
14623
+ mark_text_not_pattern?: string[] | null;
14624
+ entity_id_not?: string[] | null;
14625
+ entity_group_not?: string[] | null;
14626
+ owner_id_not?: string[] | null;
14627
+ trademark_ids_not?: string[] | null;
14628
+ allow_partial?: boolean | null;
14134
14629
  sort?: string;
14135
14630
  status_primary?: ("pending" | "active" | "inactive" | "unknown" | "mixed")[] | null;
14136
14631
  status_stage?: ("filed" | "examining" | "pending_publication" | "published" | "opposition_period" | "pending_opposition" | "pending_cancellation" | "pending_issuance" | "registered" | "allowed" | "abandoned" | "withdrawn" | "surrendered" | "refused" | "cancelled" | "invalidated" | "expired" | "unknown" | "mixed")[] | null;
@@ -14214,10 +14709,8 @@ export interface operations {
14214
14709
  is_retracted?: boolean | null;
14215
14710
  is_series_mark?: boolean | null;
14216
14711
  international_registrations?: "grouped" | "expanded";
14217
- include?: "full_goods_services"[] | null;
14712
+ include?: ("full_goods_services" | "match_details")[] | null;
14218
14713
  fields?: string[] | null;
14219
- match?: "similar" | "exact" | "starts_with" | "ends_with" | "contains";
14220
- mark_text_not_contains?: string;
14221
14714
  owner_publicly_traded?: boolean | null;
14222
14715
  owner_has_lei?: boolean | null;
14223
14716
  owner_ticker?: string;
@@ -14438,7 +14931,24 @@ export interface operations {
14438
14931
  parameters: {
14439
14932
  query?: {
14440
14933
  q?: string;
14441
- strategies?: ("exact" | "phonetic" | "fuzzy" | "prefix")[] | null;
14934
+ similarity?: ("identical" | "fuzzy" | "embedded" | "phonetic" | "lookalike")[] | null;
14935
+ mark_text_is?: string[] | null;
14936
+ mark_text_word?: string[] | null;
14937
+ mark_text_starts_with?: string[] | null;
14938
+ mark_text_ends_with?: string[] | null;
14939
+ mark_text_contains?: string[] | null;
14940
+ mark_text_pattern?: string[] | null;
14941
+ mark_text_not_is?: string[] | null;
14942
+ mark_text_not_word?: string[] | null;
14943
+ mark_text_not_starts_with?: string[] | null;
14944
+ mark_text_not_ends_with?: string[] | null;
14945
+ mark_text_not_contains?: string[] | null;
14946
+ mark_text_not_pattern?: string[] | null;
14947
+ entity_id_not?: string[] | null;
14948
+ entity_group_not?: string[] | null;
14949
+ owner_id_not?: string[] | null;
14950
+ trademark_ids_not?: string[] | null;
14951
+ allow_partial?: boolean | null;
14442
14952
  sort?: string;
14443
14953
  status_primary?: ("pending" | "active" | "inactive" | "unknown" | "mixed")[] | null;
14444
14954
  status_stage?: ("filed" | "examining" | "pending_publication" | "published" | "opposition_period" | "pending_opposition" | "pending_cancellation" | "pending_issuance" | "registered" | "allowed" | "abandoned" | "withdrawn" | "surrendered" | "refused" | "cancelled" | "invalidated" | "expired" | "unknown" | "mixed")[] | null;
@@ -14522,10 +15032,8 @@ export interface operations {
14522
15032
  is_retracted?: boolean | null;
14523
15033
  is_series_mark?: boolean | null;
14524
15034
  international_registrations?: "grouped" | "expanded";
14525
- include?: "full_goods_services"[] | null;
15035
+ include?: ("full_goods_services" | "match_details")[] | null;
14526
15036
  fields?: string[] | null;
14527
- match?: "similar" | "exact" | "starts_with" | "ends_with" | "contains";
14528
- mark_text_not_contains?: string;
14529
15037
  owner_publicly_traded?: boolean | null;
14530
15038
  owner_has_lei?: boolean | null;
14531
15039
  owner_ticker?: string;
@@ -14599,7 +15107,7 @@ export interface operations {
14599
15107
  "application/json": components["schemas"]["Error"];
14600
15108
  };
14601
15109
  };
14602
- /** @description Entity too large. `error.reason` discriminates: `member_owners_too_large` (the entity resolved to more member owners than the cap; carries `member_count`/`member_count_limit`) or `family_graph_too_large` (the GLEIF family-graph walk exceeded its bound, fired by `?include_family=true`; carries `related_entity_limit`/`depth_limit`). */
15110
+ /** @description Family graph too large: `?include_family=true` walked a family-tree larger than the bound (`error.reason` `family_graph_too_large`; carries `related_entity_limit`/`depth_limit`). There is no member-owner cap: an entity of any size lists without `include_family`. */
14603
15111
  422: {
14604
15112
  headers: {
14605
15113
  [name: string]: unknown;
@@ -14715,7 +15223,7 @@ export interface operations {
14715
15223
  "application/json": components["schemas"]["ProceedingListResponse"];
14716
15224
  };
14717
15225
  };
14718
- /** @description Missing filter or invalid params */
15226
+ /** @description Missing filter or invalid params, including an unknown or planned (not live) `office_code` */
14719
15227
  400: {
14720
15228
  headers: {
14721
15229
  [name: string]: unknown;
@@ -14742,7 +15250,7 @@ export interface operations {
14742
15250
  "application/json": components["schemas"]["Error"];
14743
15251
  };
14744
15252
  };
14745
- /** @description Entity too large. `error.reason` is `member_owners_too_large` (`?party_entity_id=`/`?entity_id=` resolved to more member owners than the cap; carries `member_count`/`member_count_limit`). */
15253
+ /** @description Two cases, told apart by `error.type`. `capability_not_available`: `office_code` names a live office whose proceedings Signa does not serve (`capabilities.proceedings` on `GET /v1/offices` is not `available`); the error carries `capability`, `capability_state` and `office_code`, no query is run and no credits are charged. `entity_too_large`: `error.reason` is `member_owners_too_large` (`?party_entity_id=`/`?entity_id=` resolved to more member owners than the cap; carries `member_count`/`member_count_limit`). */
14746
15254
  422: {
14747
15255
  headers: {
14748
15256
  [name: string]: unknown;
@@ -15074,7 +15582,7 @@ export interface operations {
15074
15582
  listDeadlines: {
15075
15583
  parameters: {
15076
15584
  query?: {
15077
- type?: ("renewal" | "declaration_of_use" | "combined_renewal_and_use" | "declaration_of_incontestability" | "restoration" | "international_renewal")[] | null;
15585
+ type?: ("renewal" | "declaration_of_use" | "combined_renewal_and_use" | "declaration_of_incontestability" | "restoration" | "international_renewal" | "post_registration_oa_response")[] | null;
15078
15586
  due_before?: string;
15079
15587
  urgency?: "critical" | "upcoming" | "routine" | "in_grace" | "missed";
15080
15588
  limit?: number;
@@ -16338,7 +16846,7 @@ export interface operations {
16338
16846
  listPortfolioDeadlines: {
16339
16847
  parameters: {
16340
16848
  query?: {
16341
- type?: ("renewal" | "declaration_of_use" | "combined_renewal_and_use" | "declaration_of_incontestability" | "restoration" | "international_renewal")[] | null;
16849
+ type?: ("renewal" | "declaration_of_use" | "combined_renewal_and_use" | "declaration_of_incontestability" | "restoration" | "international_renewal" | "post_registration_oa_response")[] | null;
16342
16850
  due_before?: string;
16343
16851
  urgency?: "critical" | "upcoming" | "routine" | "in_grace" | "missed";
16344
16852
  limit?: number;
@@ -16511,6 +17019,15 @@ export interface operations {
16511
17019
  "application/json": components["schemas"]["Error"];
16512
17020
  };
16513
17021
  };
17022
+ /** @description Missing or invalid API key */
17023
+ 401: {
17024
+ headers: {
17025
+ [name: string]: unknown;
17026
+ };
17027
+ content: {
17028
+ "application/json": components["schemas"]["Error"];
17029
+ };
17030
+ };
16514
17031
  };
16515
17032
  };
16516
17033
  retrieveAlert: {
@@ -16533,6 +17050,15 @@ export interface operations {
16533
17050
  "application/json": components["schemas"]["Alert"];
16534
17051
  };
16535
17052
  };
17053
+ /** @description Missing or invalid API key */
17054
+ 401: {
17055
+ headers: {
17056
+ [name: string]: unknown;
17057
+ };
17058
+ content: {
17059
+ "application/json": components["schemas"]["Error"];
17060
+ };
17061
+ };
16536
17062
  /** @description Not found */
16537
17063
  404: {
16538
17064
  headers: {
@@ -16577,6 +17103,15 @@ export interface operations {
16577
17103
  "application/json": components["schemas"]["Error"];
16578
17104
  };
16579
17105
  };
17106
+ /** @description Missing or invalid API key */
17107
+ 401: {
17108
+ headers: {
17109
+ [name: string]: unknown;
17110
+ };
17111
+ content: {
17112
+ "application/json": components["schemas"]["Error"];
17113
+ };
17114
+ };
16580
17115
  /** @description Not found */
16581
17116
  404: {
16582
17117
  headers: {
@@ -16637,11 +17172,16 @@ export interface operations {
16637
17172
  /** @description Present and `true` when the change diff was bounded (entries dropped past the max count, or an over-long from/to value replaced with a sentinel, or a byte-budget cap hit). Absent when the diff is complete. */
16638
17173
  diff_truncated?: boolean;
16639
17174
  };
16640
- /** @description Match metadata (why/how the mark matched the watch). Null for pure-filter / pre-v2 alerts that carry no match scoring. */
17175
+ /** @description Match metadata (why/how the mark matched the watch). Null for pure-filter / pre-v2 alerts that carry no match scoring. `score` is the engine score for the watch query, not the 0-100 search `relevance_score`. */
16641
17176
  match: {
16642
17177
  reason: string | null;
16643
17178
  score: number | null;
16644
17179
  score_basis: string | null;
17180
+ /**
17181
+ * @description Similarity tier of the matched mark, the same label a search hit carries as `match.tier` (identical, near_identical, similar, related). A retrieval category, not a measured edit distance. Null for filter-only watches, marks found only by their number, and alerts emitted before the field existed.
17182
+ * @enum {string|null}
17183
+ */
17184
+ tier: "identical" | "near_identical" | "similar" | "related" | null;
16645
17185
  } | null;
16646
17186
  trademark: components["schemas"]["AlertTrademark"];
16647
17187
  deadline: {
@@ -16698,6 +17238,15 @@ export interface operations {
16698
17238
  "application/json": components["schemas"]["Error"];
16699
17239
  };
16700
17240
  };
17241
+ /** @description Missing or invalid API key */
17242
+ 401: {
17243
+ headers: {
17244
+ [name: string]: unknown;
17245
+ };
17246
+ content: {
17247
+ "application/json": components["schemas"]["Error"];
17248
+ };
17249
+ };
16701
17250
  };
16702
17251
  };
16703
17252
  listWatches: {
@@ -16722,6 +17271,15 @@ export interface operations {
16722
17271
  "application/json": components["schemas"]["WatchList"];
16723
17272
  };
16724
17273
  };
17274
+ /** @description Missing or invalid API key */
17275
+ 401: {
17276
+ headers: {
17277
+ [name: string]: unknown;
17278
+ };
17279
+ content: {
17280
+ "application/json": components["schemas"]["Error"];
17281
+ };
17282
+ };
16725
17283
  };
16726
17284
  };
16727
17285
  createWatch: {
@@ -16741,15 +17299,16 @@ export interface operations {
16741
17299
  /** @enum {string} */
16742
17300
  watch_type: "mark" | "portfolio" | "owner" | "class" | "similarity";
16743
17301
  /**
16744
- * @description Watch query JSON (max 50,000 bytes serialized, depth 5 — larger bodies are 400 `validation_error`). Similarity watches use `version: "v2"`, `q` (string), optional public-search `strategies` (`exact`, `phonetic`, `fuzzy`, `prefix`), optional `min_match_tier` (`exact`, `normalized`, `fuzzy`, `phonetic`), `filters`, and optional `trigger_events` (default: `trademark.created`, `trademark.updated`, `trademark.status_changed`; `trademark.retracted` / `trademark.corrected` are opt-in). `filters.offices` takes WIPO ST.3 codes (`US`, `EM`, …; legacy `uspto`/`euipo`/`EU` accepted); `filters.jurisdictions` without `filters.offices` is auto-translated to the live offices for those jurisdictions and is rejected with 400 `no_live_office` when none resolves. `score_threshold` is NOT accepted on write (400) — match scores are informational via `match_score` on alerts — and is never echoed on read.
17302
+ * @description Watch query JSON (max 50,000 bytes serialized, depth 5; larger bodies are 400 `validation_error`). `version` is required: `v1`, `v2` and `v3` are accepted, and a new or changed query is stored as a v3 similarity watch whatever `version` it sends (`version` is set to `v3`) unless it uses the deprecated keys below: `q` (string), optional `similarity` (the search channels: `identical`, `fuzzy`, `embedded`, `phonetic`, `lookalike`; default `identical,fuzzy,embedded,lookalike`, `identical` always on), optional `min_tier` (the weakest similarity tier that alerts: `identical`, `near_identical`, `similar`, `related`; default `related`, everything through), `filters`, and optional `trigger_events` (default: `trademark.created`, `trademark.updated`, `trademark.status_changed`; `trademark.retracted` / `trademark.corrected` are opt-in; `trademark.corrected` also covers a status Signa corrected, including a lapse or a reversal shown by office records that reached Signa late, which then never arrives as `trademark.status_changed` / `trademark.updated`). The search text filters (`mark_text_*`) and exclusions (`exclude`, `*_not`) are not accepted on watches. Deprecated until 2026-12-28: `strategies` (replaced by `similarity`) and `min_match_tier` (replaced by `min_tier`). A write that uses them is kept as a legacy watch with its original matching until it is re-saved without them, and each is reported in the response `deprecations`; sending old and new keys together is 400 `conflicting_params`. Stored watches keep the matching they were saved with; a PATCH whose query equals the stored one changes nothing, one that differs only where a write normalises it (such as offices added from jurisdictions, or code and ID casing) is saved in that form and not migrated (a legacy watch stays legacy), though the saved form can change what it matches (a jurisdictions-only watch is evaluated once offices are added), and a PATCH that changes it re-saves it under these rules. `filters.offices` takes WIPO ST.3 codes (`US`, `EM`, …; legacy `uspto`/`euipo`/`EU` accepted); `filters.jurisdictions` without `filters.offices` is auto-translated to the live offices for those jurisdictions and is rejected with 400 `no_live_office` when none resolves. `score_threshold` is NOT accepted on write (400), since match scores are informational via `match.score` on alerts, and is never echoed on read.
16745
17303
  * @example {
16746
- * "version": "v2",
17304
+ * "version": "v3",
16747
17305
  * "q": "acme",
16748
- * "strategies": [
16749
- * "exact",
16750
- * "fuzzy"
17306
+ * "similarity": [
17307
+ * "identical",
17308
+ * "fuzzy",
17309
+ * "phonetic"
16751
17310
  * ],
16752
- * "min_match_tier": "fuzzy",
17311
+ * "min_tier": "similar",
16753
17312
  * "filters": {
16754
17313
  * "offices": [
16755
17314
  * "US"
@@ -16795,6 +17354,15 @@ export interface operations {
16795
17354
  "application/json": components["schemas"]["Error"];
16796
17355
  };
16797
17356
  };
17357
+ /** @description Missing or invalid API key */
17358
+ 401: {
17359
+ headers: {
17360
+ [name: string]: unknown;
17361
+ };
17362
+ content: {
17363
+ "application/json": components["schemas"]["Error"];
17364
+ };
17365
+ };
16798
17366
  /** @description Insufficient credits — `insufficient_credits_for_watch`: the pooled credit balance cannot fund the minimum monitoring window for a new watch (charged plans only). Extensions carry `credit_balance`, `credit_required`, `monitoring_daily_cost`, `required_days`. */
16799
17367
  402: {
16800
17368
  headers: {
@@ -16862,6 +17430,15 @@ export interface operations {
16862
17430
  "application/json": components["schemas"]["Watch"];
16863
17431
  };
16864
17432
  };
17433
+ /** @description Missing or invalid API key */
17434
+ 401: {
17435
+ headers: {
17436
+ [name: string]: unknown;
17437
+ };
17438
+ content: {
17439
+ "application/json": components["schemas"]["Error"];
17440
+ };
17441
+ };
16865
17442
  /** @description Not found */
16866
17443
  404: {
16867
17444
  headers: {
@@ -16903,6 +17480,15 @@ export interface operations {
16903
17480
  };
16904
17481
  };
16905
17482
  };
17483
+ /** @description Missing or invalid API key */
17484
+ 401: {
17485
+ headers: {
17486
+ [name: string]: unknown;
17487
+ };
17488
+ content: {
17489
+ "application/json": components["schemas"]["Error"];
17490
+ };
17491
+ };
16906
17492
  /** @description Not found */
16907
17493
  404: {
16908
17494
  headers: {
@@ -16967,6 +17553,15 @@ export interface operations {
16967
17553
  "application/json": components["schemas"]["Error"];
16968
17554
  };
16969
17555
  };
17556
+ /** @description Missing or invalid API key */
17557
+ 401: {
17558
+ headers: {
17559
+ [name: string]: unknown;
17560
+ };
17561
+ content: {
17562
+ "application/json": components["schemas"]["Error"];
17563
+ };
17564
+ };
16970
17565
  /** @description Insufficient credits to fund the minimum monitoring window for newly added distinct trademarks. */
16971
17566
  402: {
16972
17567
  headers: {
@@ -17036,6 +17631,15 @@ export interface operations {
17036
17631
  "application/json": components["schemas"]["Error"];
17037
17632
  };
17038
17633
  };
17634
+ /** @description Missing or invalid API key */
17635
+ 401: {
17636
+ headers: {
17637
+ [name: string]: unknown;
17638
+ };
17639
+ content: {
17640
+ "application/json": components["schemas"]["Error"];
17641
+ };
17642
+ };
17039
17643
  /** @description Not found */
17040
17644
  404: {
17041
17645
  headers: {
@@ -17072,6 +17676,15 @@ export interface operations {
17072
17676
  "application/pdf": string;
17073
17677
  };
17074
17678
  };
17679
+ /** @description Missing or invalid API key */
17680
+ 401: {
17681
+ headers: {
17682
+ [name: string]: unknown;
17683
+ };
17684
+ content: {
17685
+ "application/json": components["schemas"]["Error"];
17686
+ };
17687
+ };
17075
17688
  /** @description Not found */
17076
17689
  404: {
17077
17690
  headers: {
@@ -17124,6 +17737,15 @@ export interface operations {
17124
17737
  "application/json": components["schemas"]["Watch"];
17125
17738
  };
17126
17739
  };
17740
+ /** @description Missing or invalid API key */
17741
+ 401: {
17742
+ headers: {
17743
+ [name: string]: unknown;
17744
+ };
17745
+ content: {
17746
+ "application/json": components["schemas"]["Error"];
17747
+ };
17748
+ };
17127
17749
  /** @description Not found */
17128
17750
  404: {
17129
17751
  headers: {
@@ -17158,6 +17780,15 @@ export interface operations {
17158
17780
  "application/json": components["schemas"]["Watch"];
17159
17781
  };
17160
17782
  };
17783
+ /** @description Missing or invalid API key */
17784
+ 401: {
17785
+ headers: {
17786
+ [name: string]: unknown;
17787
+ };
17788
+ content: {
17789
+ "application/json": components["schemas"]["Error"];
17790
+ };
17791
+ };
17161
17792
  /** @description Not found */
17162
17793
  404: {
17163
17794
  headers: {
@@ -17200,6 +17831,15 @@ export interface operations {
17200
17831
  object: "watch_preview";
17201
17832
  estimated_match_count: number;
17202
17833
  trial_window_days: number;
17834
+ /** @description The similarity channels the text query ran (identical always included). Null when the query has no q, and for a query that uses the deprecated keys (previewed as the legacy watch a create would keep). */
17835
+ similarity_applied: ("identical" | "fuzzy" | "embedded" | "phonetic" | "lookalike")[] | null;
17836
+ /**
17837
+ * @description The weakest similarity tier that alerts (`related` admits everything). Null for a query that uses the deprecated keys, which keeps its `min_match_tier`.
17838
+ * @enum {string|null}
17839
+ */
17840
+ min_tier: "identical" | "near_identical" | "similar" | "related" | null;
17841
+ /** @description Present when the previewed query used a deprecated key (`strategies`, `min_match_tier`); the preview ran it as the legacy watch a create would keep. */
17842
+ deprecations?: components["schemas"]["WatchDeprecation"][];
17203
17843
  /**
17204
17844
  * @description Present only when estimated_match_count is not an exact count. `query_upper_bound`: the time budget ran out after the search but before the change check; the count is the marks that matched the query in the window plus the marks changed in the last 6 hours that the search index may not reflect yet, so it can only be too high. `lower_bound`: the search timed out or lost a shard, more than 10,000 marks matched the query in the window, the change check timed out, or the re-check of marks changed in the last 6 hours (which the search index may not reflect yet) could not finish; the count is the verified matches (0 if none), so it can only be too low. `candidacy_upper_bound`: a watch without a text query could not be fully evaluated (search unreachable, a very large change set, or the budget ran out); the count is the number of changed marks in the window.
17205
17845
  * @enum {string}
@@ -17226,6 +17866,15 @@ export interface operations {
17226
17866
  "application/json": components["schemas"]["Error"];
17227
17867
  };
17228
17868
  };
17869
+ /** @description Missing or invalid API key */
17870
+ 401: {
17871
+ headers: {
17872
+ [name: string]: unknown;
17873
+ };
17874
+ content: {
17875
+ "application/json": components["schemas"]["Error"];
17876
+ };
17877
+ };
17229
17878
  /** @description Payload too large — the 256KB service-level query cap. NOT reachable over HTTP: the 50,000-byte / depth-5 bounded-JSON check on `query` runs first and answers 400 `validation_error`; only service/MCP callers can observe this status. */
17230
17879
  413: {
17231
17880
  headers: {
@@ -17293,15 +17942,16 @@ export interface operations {
17293
17942
  /** @enum {string} */
17294
17943
  watch_type: "mark" | "portfolio" | "owner" | "class" | "similarity";
17295
17944
  /**
17296
- * @description Watch query JSON (max 50,000 bytes serialized, depth 5 — larger bodies are 400 `validation_error`). Similarity watches use `version: "v2"`, `q` (string), optional public-search `strategies` (`exact`, `phonetic`, `fuzzy`, `prefix`), optional `min_match_tier` (`exact`, `normalized`, `fuzzy`, `phonetic`), `filters`, and optional `trigger_events` (default: `trademark.created`, `trademark.updated`, `trademark.status_changed`; `trademark.retracted` / `trademark.corrected` are opt-in). `filters.offices` takes WIPO ST.3 codes (`US`, `EM`, …; legacy `uspto`/`euipo`/`EU` accepted); `filters.jurisdictions` without `filters.offices` is auto-translated to the live offices for those jurisdictions and is rejected with 400 `no_live_office` when none resolves. `score_threshold` is NOT accepted on write (400) — match scores are informational via `match_score` on alerts — and is never echoed on read.
17945
+ * @description Watch query JSON (max 50,000 bytes serialized, depth 5; larger bodies are 400 `validation_error`). `version` is required: `v1`, `v2` and `v3` are accepted, and a new or changed query is stored as a v3 similarity watch whatever `version` it sends (`version` is set to `v3`) unless it uses the deprecated keys below: `q` (string), optional `similarity` (the search channels: `identical`, `fuzzy`, `embedded`, `phonetic`, `lookalike`; default `identical,fuzzy,embedded,lookalike`, `identical` always on), optional `min_tier` (the weakest similarity tier that alerts: `identical`, `near_identical`, `similar`, `related`; default `related`, everything through), `filters`, and optional `trigger_events` (default: `trademark.created`, `trademark.updated`, `trademark.status_changed`; `trademark.retracted` / `trademark.corrected` are opt-in; `trademark.corrected` also covers a status Signa corrected, including a lapse or a reversal shown by office records that reached Signa late, which then never arrives as `trademark.status_changed` / `trademark.updated`). The search text filters (`mark_text_*`) and exclusions (`exclude`, `*_not`) are not accepted on watches. Deprecated until 2026-12-28: `strategies` (replaced by `similarity`) and `min_match_tier` (replaced by `min_tier`). A write that uses them is kept as a legacy watch with its original matching until it is re-saved without them, and each is reported in the response `deprecations`; sending old and new keys together is 400 `conflicting_params`. Stored watches keep the matching they were saved with; a PATCH whose query equals the stored one changes nothing, one that differs only where a write normalises it (such as offices added from jurisdictions, or code and ID casing) is saved in that form and not migrated (a legacy watch stays legacy), though the saved form can change what it matches (a jurisdictions-only watch is evaluated once offices are added), and a PATCH that changes it re-saves it under these rules. `filters.offices` takes WIPO ST.3 codes (`US`, `EM`, …; legacy `uspto`/`euipo`/`EU` accepted); `filters.jurisdictions` without `filters.offices` is auto-translated to the live offices for those jurisdictions and is rejected with 400 `no_live_office` when none resolves. `score_threshold` is NOT accepted on write (400), since match scores are informational via `match.score` on alerts, and is never echoed on read.
17297
17946
  * @example {
17298
- * "version": "v2",
17947
+ * "version": "v3",
17299
17948
  * "q": "acme",
17300
- * "strategies": [
17301
- * "exact",
17302
- * "fuzzy"
17949
+ * "similarity": [
17950
+ * "identical",
17951
+ * "fuzzy",
17952
+ * "phonetic"
17303
17953
  * ],
17304
- * "min_match_tier": "fuzzy",
17954
+ * "min_tier": "similar",
17305
17955
  * "filters": {
17306
17956
  * "offices": [
17307
17957
  * "US"
@@ -17405,6 +18055,8 @@ export interface operations {
17405
18055
  };
17406
18056
  created_at: string;
17407
18057
  updated_at: string;
18058
+ /** @description Present on create, update and bulk responses when the written query used a deprecated key: `strategies` (replaced by `similarity`) or `min_match_tier` (replaced by `min_tier`). The watch is kept as a legacy watch with its original matching until it is re-saved without them. Each entry names the key, its replacement and the date the old key stops being accepted. */
18059
+ deprecations?: components["schemas"]["WatchDeprecation"][];
17408
18060
  }[];
17409
18061
  request_id: string;
17410
18062
  };
@@ -17419,6 +18071,15 @@ export interface operations {
17419
18071
  "application/json": components["schemas"]["Error"];
17420
18072
  };
17421
18073
  };
18074
+ /** @description Missing or invalid API key */
18075
+ 401: {
18076
+ headers: {
18077
+ [name: string]: unknown;
18078
+ };
18079
+ content: {
18080
+ "application/json": components["schemas"]["Error"];
18081
+ };
18082
+ };
17422
18083
  /** @description Insufficient credits — `insufficient_credits_for_watch`: the pooled credit balance cannot fund the minimum monitoring window for a new watch (charged plans only). Extensions carry `credit_balance`, `credit_required`, `monitoring_daily_cost`, `required_days`. */
17423
18084
  402: {
17424
18085
  headers: {
@@ -17484,6 +18145,15 @@ export interface operations {
17484
18145
  "application/json": components["schemas"]["MonitoringStatus"];
17485
18146
  };
17486
18147
  };
18148
+ /** @description Missing or invalid API key */
18149
+ 401: {
18150
+ headers: {
18151
+ [name: string]: unknown;
18152
+ };
18153
+ content: {
18154
+ "application/json": components["schemas"]["Error"];
18155
+ };
18156
+ };
17487
18157
  };
17488
18158
  };
17489
18159
  listWebhookEndpoints: {
@@ -17516,6 +18186,15 @@ export interface operations {
17516
18186
  "application/json": components["schemas"]["Error"];
17517
18187
  };
17518
18188
  };
18189
+ /** @description Missing or invalid API key */
18190
+ 401: {
18191
+ headers: {
18192
+ [name: string]: unknown;
18193
+ };
18194
+ content: {
18195
+ "application/json": components["schemas"]["Error"];
18196
+ };
18197
+ };
17519
18198
  };
17520
18199
  };
17521
18200
  createWebhookEndpoint: {
@@ -17533,7 +18212,7 @@ export interface operations {
17533
18212
  "application/json": {
17534
18213
  url: string;
17535
18214
  description?: string;
17536
- /** @description Events delivered to this endpoint. Accepted values: alert.created, trademark.status_changed, office_action.issued. trademark.status_changed and office_action.issued are delivered only for marks in one of the organization's portfolios. alert.created follows watch scope. */
18215
+ /** @description Events delivered to this endpoint. Accepted values: alert.created, trademark.status_changed, trademark.corrected, office_action.issued. trademark.status_changed, trademark.corrected and office_action.issued are delivered only for marks in one of the organization's portfolios; trademark.status_changed also delivers trademark.corrected. alert.created follows watch scope. */
17537
18216
  enabled_events: string[];
17538
18217
  /** @description Limit this endpoint to events on marks in this portfolio (ptf_*). Applies to every event type, alert.created included: an alert is delivered only when its matched mark was a member of the portfolio at event time. */
17539
18218
  portfolio_id?: string | null;
@@ -17562,6 +18241,15 @@ export interface operations {
17562
18241
  "application/json": components["schemas"]["Error"];
17563
18242
  };
17564
18243
  };
18244
+ /** @description Missing or invalid API key */
18245
+ 401: {
18246
+ headers: {
18247
+ [name: string]: unknown;
18248
+ };
18249
+ content: {
18250
+ "application/json": components["schemas"]["Error"];
18251
+ };
18252
+ };
17565
18253
  /** @description Portfolio not found */
17566
18254
  404: {
17567
18255
  headers: {
@@ -17593,6 +18281,15 @@ export interface operations {
17593
18281
  "application/json": components["schemas"]["WebhookEndpoint"];
17594
18282
  };
17595
18283
  };
18284
+ /** @description Missing or invalid API key */
18285
+ 401: {
18286
+ headers: {
18287
+ [name: string]: unknown;
18288
+ };
18289
+ content: {
18290
+ "application/json": components["schemas"]["Error"];
18291
+ };
18292
+ };
17596
18293
  /** @description Not found */
17597
18294
  404: {
17598
18295
  headers: {
@@ -17634,6 +18331,15 @@ export interface operations {
17634
18331
  };
17635
18332
  };
17636
18333
  };
18334
+ /** @description Missing or invalid API key */
18335
+ 401: {
18336
+ headers: {
18337
+ [name: string]: unknown;
18338
+ };
18339
+ content: {
18340
+ "application/json": components["schemas"]["Error"];
18341
+ };
18342
+ };
17637
18343
  /** @description Not found */
17638
18344
  404: {
17639
18345
  headers: {
@@ -17662,7 +18368,7 @@ export interface operations {
17662
18368
  "application/json": {
17663
18369
  url?: string;
17664
18370
  description?: string | null;
17665
- /** @description Events delivered to this endpoint. Accepted values: alert.created, trademark.status_changed, office_action.issued. trademark.status_changed and office_action.issued are delivered only for marks in one of the organization's portfolios. alert.created follows watch scope. */
18371
+ /** @description Events delivered to this endpoint. Accepted values: alert.created, trademark.status_changed, trademark.corrected, office_action.issued. trademark.status_changed, trademark.corrected and office_action.issued are delivered only for marks in one of the organization's portfolios; trademark.status_changed also delivers trademark.corrected. alert.created follows watch scope. */
17666
18372
  enabled_events?: string[];
17667
18373
  /** @description Limit this endpoint to events on marks in this portfolio (ptf_*), or null to clear. Applies to every event type, alert.created included: an alert is delivered only when its matched mark was a member of the portfolio at event time. */
17668
18374
  portfolio_id?: string | null;
@@ -17693,6 +18399,15 @@ export interface operations {
17693
18399
  "application/json": components["schemas"]["Error"];
17694
18400
  };
17695
18401
  };
18402
+ /** @description Missing or invalid API key */
18403
+ 401: {
18404
+ headers: {
18405
+ [name: string]: unknown;
18406
+ };
18407
+ content: {
18408
+ "application/json": components["schemas"]["Error"];
18409
+ };
18410
+ };
17696
18411
  /** @description Not found */
17697
18412
  404: {
17698
18413
  headers: {
@@ -17729,6 +18444,15 @@ export interface operations {
17729
18444
  "application/json": components["schemas"]["WebhookEndpoint"];
17730
18445
  };
17731
18446
  };
18447
+ /** @description Missing or invalid API key */
18448
+ 401: {
18449
+ headers: {
18450
+ [name: string]: unknown;
18451
+ };
18452
+ content: {
18453
+ "application/json": components["schemas"]["Error"];
18454
+ };
18455
+ };
17732
18456
  /** @description Not found */
17733
18457
  404: {
17734
18458
  headers: {
@@ -17777,6 +18501,15 @@ export interface operations {
17777
18501
  };
17778
18502
  };
17779
18503
  };
18504
+ /** @description Missing or invalid API key */
18505
+ 401: {
18506
+ headers: {
18507
+ [name: string]: unknown;
18508
+ };
18509
+ content: {
18510
+ "application/json": components["schemas"]["Error"];
18511
+ };
18512
+ };
17780
18513
  /** @description Not found */
17781
18514
  404: {
17782
18515
  headers: {
@@ -17830,6 +18563,15 @@ export interface operations {
17830
18563
  "application/json": components["schemas"]["Error"];
17831
18564
  };
17832
18565
  };
18566
+ /** @description Missing or invalid API key */
18567
+ 401: {
18568
+ headers: {
18569
+ [name: string]: unknown;
18570
+ };
18571
+ content: {
18572
+ "application/json": components["schemas"]["Error"];
18573
+ };
18574
+ };
17833
18575
  /** @description Not found */
17834
18576
  404: {
17835
18577
  headers: {
@@ -17862,6 +18604,15 @@ export interface operations {
17862
18604
  "application/json": components["schemas"]["WebhookDelivery"];
17863
18605
  };
17864
18606
  };
18607
+ /** @description Missing or invalid API key */
18608
+ 401: {
18609
+ headers: {
18610
+ [name: string]: unknown;
18611
+ };
18612
+ content: {
18613
+ "application/json": components["schemas"]["Error"];
18614
+ };
18615
+ };
17865
18616
  /** @description Not found */
17866
18617
  404: {
17867
18618
  headers: {
@@ -17902,6 +18653,15 @@ export interface operations {
17902
18653
  };
17903
18654
  };
17904
18655
  };
18656
+ /** @description Missing or invalid API key */
18657
+ 401: {
18658
+ headers: {
18659
+ [name: string]: unknown;
18660
+ };
18661
+ content: {
18662
+ "application/json": components["schemas"]["Error"];
18663
+ };
18664
+ };
17905
18665
  /** @description Not found */
17906
18666
  404: {
17907
18667
  headers: {
@@ -17968,6 +18728,15 @@ export interface operations {
17968
18728
  "application/json": components["schemas"]["Error"];
17969
18729
  };
17970
18730
  };
18731
+ /** @description Missing or invalid API key */
18732
+ 401: {
18733
+ headers: {
18734
+ [name: string]: unknown;
18735
+ };
18736
+ content: {
18737
+ "application/json": components["schemas"]["Error"];
18738
+ };
18739
+ };
17971
18740
  /** @description Missing events:read scope */
17972
18741
  403: {
17973
18742
  headers: {
@@ -18026,6 +18795,15 @@ export interface operations {
18026
18795
  "application/json": components["schemas"]["Error"];
18027
18796
  };
18028
18797
  };
18798
+ /** @description Missing or invalid API key */
18799
+ 401: {
18800
+ headers: {
18801
+ [name: string]: unknown;
18802
+ };
18803
+ content: {
18804
+ "application/json": components["schemas"]["Error"];
18805
+ };
18806
+ };
18029
18807
  /** @description Missing events:read scope */
18030
18808
  403: {
18031
18809
  headers: {
@@ -19284,6 +20062,11 @@ export interface operations {
19284
20062
  * @enum {string}
19285
20063
  */
19286
20064
  interval?: "monthly" | "annual";
20065
+ /**
20066
+ * @description Undo only: `plan` and `interval` name the current plan, and the request may only cancel the change scheduled here (`applied`, nothing charged). If no such change is pending (it already took effect or was cancelled), the request is refused 409 `plan_change_blocked` (`scheduled_change_not_pending`) and nothing is changed or charged. Omitted or false: an ordinary plan change.
20067
+ * @example true
20068
+ */
20069
+ undo_scheduled_change?: boolean;
19287
20070
  };
19288
20071
  };
19289
20072
  };
@@ -19333,7 +20116,7 @@ export interface operations {
19333
20116
  "application/json": components["schemas"]["Error"];
19334
20117
  };
19335
20118
  };
19336
- /** @description The organization has no live subscription to change (type `no_live_subscription`; subscribe through checkout); the subscription cannot take the change (type `plan_change_blocked`, with `reason`: `cancelling` — set to cancel; `scheduled` — a change is already scheduled; `no_period_end`; `not_self_serve` — an enterprise contract; `unresolved_price`; `pending_payment` — a different change is parked awaiting its payment; a repeat of the SAME parked change answers 200 pending_payment with the same invoice); or billing changes are paused while a payment dispute is open or after it was lost (type `billing_hold`; contact support); or the organization is suspended for an unpaid subscription invoice (type `billing_suspended`; the plan comes back when the invoice is paid). A past-due organization whose plan is still paid for can change plan. */
20119
+ /** @description The organization has no live subscription to change (type `no_live_subscription`; subscribe through checkout); the subscription cannot take the change (type `plan_change_blocked`, with `reason`: `cancelling` — set to cancel; `scheduled` — the subscription is managed by a schedule Signa did not set up (contact support); `no_period_end`; `not_self_serve` — an enterprise contract; `unresolved_price`; `pending_payment` — a different change is parked awaiting its payment; a repeat of the SAME parked change answers 200 pending_payment with the same invoice; `scheduled_change_pending` — an upgrade (or a longer interval) while a change made here is scheduled: undo it first by requesting the current plan and interval; `scheduled_change_not_pending` — `undo_scheduled_change` was set but no change made here is pending, nothing was changed or charged); or billing changes are paused while a payment dispute is open or after it was lost (type `billing_hold`; contact support); or the organization is suspended for an unpaid subscription invoice (type `billing_suspended`; the plan comes back when the invoice is paid). A past-due organization whose plan is still paid for can change plan. */
19337
20120
  409: {
19338
20121
  headers: {
19339
20122
  [name: string]: unknown;