@signa-so/sdk 0.17.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;
@@ -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
  */
@@ -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
  */
@@ -2636,6 +2636,29 @@ export interface components {
2636
2636
  */
2637
2637
  formatted: string | null;
2638
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
+ };
2639
2662
  UnsupportedDeadlineRule: {
2640
2663
  /**
2641
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.
@@ -2661,7 +2684,7 @@ export interface components {
2661
2684
  };
2662
2685
  DeadlineRow: {
2663
2686
  /**
2664
- * @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.
2665
2688
  * @example us_renewal_s9:5
2666
2689
  */
2667
2690
  occurrence_key: string;
@@ -2670,7 +2693,10 @@ export interface components {
2670
2693
  * @example us_renewal_s9
2671
2694
  */
2672
2695
  rule_id: string;
2673
- /** @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
+ */
2674
2700
  type: string;
2675
2701
  /**
2676
2702
  * @description Rule jurisdiction (`WO` for the Madrid international renewal).
@@ -2680,7 +2706,7 @@ export interface components {
2680
2706
  /** @example 2025-01-20 */
2681
2707
  trigger_date: string;
2682
2708
  /**
2683
- * @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).
2684
2710
  * @example registration_date
2685
2711
  */
2686
2712
  trigger_field: string;
@@ -2712,6 +2738,11 @@ export interface components {
2712
2738
  is_optional: boolean;
2713
2739
  /** @example cancellation_and_expiration */
2714
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;
2715
2746
  };
2716
2747
  DerivedOppositionWindow: {
2717
2748
  /** @enum {boolean} */
@@ -2771,10 +2802,11 @@ export interface components {
2771
2802
  */
2772
2803
  as_of_date: string;
2773
2804
  /**
2774
- * @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).
2775
2806
  * @example 2035-01-20
2776
2807
  */
2777
2808
  expiry_date: string | null;
2809
+ term: components["schemas"]["DerivedTerm"];
2778
2810
  deadlines: {
2779
2811
  /** @description False when no schedule could be computed; see `reason`. Mirrors POST /v1/deadlines/compute. */
2780
2812
  supported: boolean;
@@ -2831,6 +2863,21 @@ export interface components {
2831
2863
  /** @example /v1/trademarks/tm_7d4e1f2a-3b8c-4d0e-9f1a-2b3c4d5e6f70 */
2832
2864
  href: string;
2833
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;
2834
2881
  };
2835
2882
  DetailCoverageTerritory: components["schemas"]["CoverageTerritory"] & {
2836
2883
  /** @example United States of America */
@@ -3114,7 +3161,7 @@ export interface components {
3114
3161
  }[];
3115
3162
  has_media: boolean;
3116
3163
  /**
3117
- * @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.
3118
3165
  * @example https://api.signa.so/v1/trademarks/tm_abc/media/01234567-89ab-cdef-0123-456789abcdef
3119
3166
  */
3120
3167
  primary_image_url: string | null;
@@ -3156,6 +3203,14 @@ export interface components {
3156
3203
  /** @example representative */
3157
3204
  role: string;
3158
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[];
3159
3214
  }[];
3160
3215
  text_variants: {
3161
3216
  /** @example translation */
@@ -3424,7 +3479,7 @@ export interface components {
3424
3479
  */
3425
3480
  via: ("identifier" | "identical" | "fuzzy" | "embedded" | "phonetic" | "lookalike")[];
3426
3481
  /**
3427
- * @description The mark_text operator values this hit satisfied, as the caller spelled them (operator order: is, word, starts_with, ends_with, contains, pattern). Empty when the request has no positive mark_text operator.
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.
3428
3483
  * @example []
3429
3484
  */
3430
3485
  terms: string[];
@@ -3438,16 +3493,32 @@ export interface components {
3438
3493
  * ]
3439
3494
  */
3440
3495
  lanes: string[];
3441
- /** @description The ranking factors applied to this hit's score. Under an explicit sort or a trademark-number q the length factor does not apply. */
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. */
3442
3497
  factors: {
3443
3498
  /** @example live_status */
3444
3499
  factor: string;
3445
3500
  /** @example 1.3 */
3446
3501
  weight: number;
3447
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
+ }[];
3448
3519
  };
3449
3520
  };
3450
- /** @description Shape-identical to a /v1/trademarks summary row, minus relevance_score / match_explanation. */
3521
+ /** @description Shape-identical to a /v1/trademarks summary row, minus relevance_score. */
3451
3522
  TrademarkSummaryV1: {
3452
3523
  /** @example tm_7d4e1f2a3b8c9d0e */
3453
3524
  id: string;
@@ -3609,7 +3680,7 @@ export interface components {
3609
3680
  }[];
3610
3681
  has_media: boolean;
3611
3682
  /**
3612
- * @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.
3613
3684
  * @example https://api.signa.so/v1/trademarks/tm_abc/media/01234567-89ab-cdef-0123-456789abcdef
3614
3685
  */
3615
3686
  primary_image_url: string | null;
@@ -3629,35 +3700,6 @@ export interface components {
3629
3700
  */
3630
3701
  relevance_score?: number | null;
3631
3702
  match?: components["schemas"]["TrademarkMatch"];
3632
- /** @description Deprecated (removed after the 90-day window): read `match`. Present on every hit when q is present; null for mark_text-only requests. */
3633
- match_explanation?: {
3634
- /**
3635
- * @example [
3636
- * "exact",
3637
- * "fuzzy",
3638
- * "phonetic"
3639
- * ]
3640
- */
3641
- strategies_matched: string[];
3642
- /**
3643
- * @example [
3644
- * {
3645
- * "factor": "exact_match",
3646
- * "weight": 50
3647
- * },
3648
- * {
3649
- * "factor": "live_status",
3650
- * "weight": 1.3
3651
- * }
3652
- * ]
3653
- */
3654
- boost_factors: {
3655
- /** @example live_status */
3656
- factor: string;
3657
- /** @example 1.3 */
3658
- weight: number;
3659
- }[];
3660
- } | null;
3661
3703
  /**
3662
3704
  * @description Search responses only: highlight fragments keyed by field name. Null when none were returned.
3663
3705
  * @example {
@@ -3669,13 +3711,6 @@ export interface components {
3669
3711
  highlights?: {
3670
3712
  [key: string]: string[];
3671
3713
  } | null;
3672
- /**
3673
- * @description Deprecated (removed after the 90-day window): read `match.terms`. Present when the request has a positive mark_text operator.
3674
- * @example [
3675
- * "limber"
3676
- * ]
3677
- */
3678
- matched_terms?: string[];
3679
3714
  };
3680
3715
  ScreeningHit: {
3681
3716
  /** @enum {string} */
@@ -4469,6 +4504,12 @@ export interface components {
4469
4504
  * @enum {string}
4470
4505
  */
4471
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";
4472
4513
  };
4473
4514
  Office: {
4474
4515
  /** @example US */
@@ -4648,15 +4689,18 @@ export interface components {
4648
4689
  jurisdiction_code: string;
4649
4690
  /** @example Section 8 — Declaration of Use */
4650
4691
  name: string;
4651
- /** @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
+ */
4652
4696
  type: string;
4653
4697
  /**
4654
- * @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.
4655
4699
  * @example registration_date
4656
4700
  */
4657
4701
  trigger: string;
4658
4702
  /**
4659
- * @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.
4660
4704
  * @example 6
4661
4705
  */
4662
4706
  due_year: number;
@@ -4682,7 +4726,7 @@ export interface components {
4682
4726
  /** @example 10 */
4683
4727
  renewal_period_years: number;
4684
4728
  /**
4685
- * @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.
4686
4730
  * @example null
4687
4731
  */
4688
4732
  window_months: number | null;
@@ -4796,7 +4840,7 @@ export interface components {
4796
4840
  */
4797
4841
  first_renewal_after_cutoff_opens_at_period_start: string | null;
4798
4842
  /**
4799
- * @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).
4800
4844
  * @example last_day
4801
4845
  * @enum {string}
4802
4846
  */
@@ -4863,6 +4907,12 @@ export interface components {
4863
4907
  * @enum {string}
4864
4908
  */
4865
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;
4866
4916
  /**
4867
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`.
4868
4918
  * @example null
@@ -4903,7 +4953,7 @@ export interface components {
4903
4953
  */
4904
4954
  window_ends_on_before: "corresponding_day_of_start" | "day_before_corresponding_day_of_start" | null;
4905
4955
  /**
4906
- * @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.
4907
4957
  * @example last_day
4908
4958
  * @enum {string}
4909
4959
  */
@@ -5306,25 +5356,10 @@ export interface components {
5306
5356
  /** @example srch_abc123 */
5307
5357
  search_id: string;
5308
5358
  /**
5309
- * @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.
5310
5360
  * @example SIGNA
5311
5361
  */
5312
5362
  query: string | null;
5313
- /**
5314
- * @description Deprecated (removed after the 90-day window): read `similarity_applied`. The applied channels in the old strategy vocabulary.
5315
- * @example [
5316
- * "exact",
5317
- * "fuzzy",
5318
- * "prefix"
5319
- * ]
5320
- */
5321
- strategies_used: ("exact" | "phonetic" | "fuzzy" | "prefix")[];
5322
- /**
5323
- * @description Deprecated (removed after the 90-day window): the old `match` mode the request was translated from, else 'similar'.
5324
- * @example similar
5325
- * @enum {string}
5326
- */
5327
- match: "similar" | "exact" | "starts_with" | "ends_with" | "contains";
5328
5363
  /**
5329
5364
  * @description The similarity channels q ran on (identical is always included). Empty without q.
5330
5365
  * @example [
@@ -5387,7 +5422,7 @@ export interface components {
5387
5422
  sunset: string;
5388
5423
  }[];
5389
5424
  /**
5390
- * @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.
5391
5426
  * @example grouped
5392
5427
  * @enum {string}
5393
5428
  */
@@ -5403,10 +5438,10 @@ export interface components {
5403
5438
  * @enum {string}
5404
5439
  */
5405
5440
  territory_match: "protection" | "direct";
5406
- /** @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), 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. */
5407
5442
  warnings?: {
5408
5443
  /**
5409
- * @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`), `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`).
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`).
5410
5445
  * @example phonetic_skipped
5411
5446
  */
5412
5447
  code: string;
@@ -6091,30 +6126,33 @@ export interface components {
6091
6126
  * @example ent_a1b2c3d4
6092
6127
  */
6093
6128
  entity_id: string | null;
6094
- /** @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. */
6095
6130
  publicly_traded: boolean;
6096
6131
  /**
6097
- * @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.
6098
6133
  * @example AAPL
6099
6134
  */
6100
6135
  ticker: string | null;
6101
6136
  /**
6102
- * @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.
6103
6138
  * @example HWUPKR0MPOU8FGXBT394
6104
6139
  */
6105
6140
  lei: string | null;
6106
- /** @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. */
6107
6142
  has_lei: boolean;
6108
6143
  /**
6109
- * @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.
6110
6145
  * @example entity
6111
6146
  * @enum {string}
6112
6147
  */
6113
6148
  companies_source: "entity" | "direct";
6114
- /** @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
+ */
6115
6153
  trademark_count: number;
6116
6154
  /**
6117
- * @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.
6118
6156
  * @example 640
6119
6157
  */
6120
6158
  active_count: number;
@@ -6130,7 +6168,7 @@ export interface components {
6130
6168
  identifier: string;
6131
6169
  identifier_type: string;
6132
6170
  }[];
6133
- /** @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. */
6134
6172
  companies?: {
6135
6173
  /** @example sec */
6136
6174
  source: string;
@@ -6157,23 +6195,34 @@ export interface components {
6157
6195
  verified_by?: string | null;
6158
6196
  }[];
6159
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. */
6160
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. */
6161
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. */
6162
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. */
6163
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. */
6164
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. */
6165
6209
  abandoned_count: number;
6166
6210
  /**
6167
6211
  * @deprecated
6168
- * @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).
6169
6213
  */
6170
6214
  registration_rate: number | null;
6171
- /** @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. */
6172
6216
  grant_rate: number | null;
6217
+ /** @description Share of concluded prosecutions (record grain) that ended abandoned, withdrawn or refused: abandoned / (registered + expired + cancelled + abandoned). */
6173
6218
  abandonment_rate: number | null;
6219
+ /** @description Distinct offices among the records. A Madrid IR's designations recorded by WIPO count as one office. */
6174
6220
  jurisdiction_count: number;
6221
+ /** @description Earliest filing_date over the records (YYYY-MM-DD). */
6175
6222
  earliest_filing_date: string | null;
6223
+ /** @description Latest filing_date over the records (YYYY-MM-DD). */
6176
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. */
6177
6226
  computed_at: string | null;
6178
6227
  } | null;
6179
6228
  created_at: string;
@@ -6194,8 +6243,9 @@ export interface components {
6194
6243
  * @example corporation
6195
6244
  */
6196
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. */
6197
6247
  trademark_count: number;
6198
- /** @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. */
6199
6249
  active_count: number;
6200
6250
  /**
6201
6251
  * @description The resolved entity this owner is linked into. null when the owner is not linked to an entity.
@@ -6229,25 +6279,10 @@ export interface components {
6229
6279
  /** @example srch_abc123 */
6230
6280
  search_id: string;
6231
6281
  /**
6232
- * @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.
6233
6283
  * @example SIGNA
6234
6284
  */
6235
6285
  query: string | null;
6236
- /**
6237
- * @description Deprecated (removed after the 90-day window): read `similarity_applied`. The applied channels in the old strategy vocabulary.
6238
- * @example [
6239
- * "exact",
6240
- * "fuzzy",
6241
- * "prefix"
6242
- * ]
6243
- */
6244
- strategies_used: ("exact" | "phonetic" | "fuzzy" | "prefix")[];
6245
- /**
6246
- * @description Deprecated (removed after the 90-day window): the old `match` mode the request was translated from, else 'similar'.
6247
- * @example similar
6248
- * @enum {string}
6249
- */
6250
- match: "similar" | "exact" | "starts_with" | "ends_with" | "contains";
6251
6286
  /**
6252
6287
  * @description The similarity channels q ran on (identical is always included). Empty without q.
6253
6288
  * @example [
@@ -6310,7 +6345,7 @@ export interface components {
6310
6345
  sunset: string;
6311
6346
  }[];
6312
6347
  /**
6313
- * @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.
6314
6349
  * @example grouped
6315
6350
  * @enum {string}
6316
6351
  */
@@ -6326,10 +6361,10 @@ export interface components {
6326
6361
  * @enum {string}
6327
6362
  */
6328
6363
  territory_match: "protection" | "direct";
6329
- /** @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), 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. */
6330
6365
  warnings?: {
6331
6366
  /**
6332
- * @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`), `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`).
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`).
6333
6368
  * @example phonetic_skipped
6334
6369
  */
6335
6370
  code: string;
@@ -6451,12 +6486,17 @@ export interface components {
6451
6486
  /** @example US */
6452
6487
  country_code: string | null;
6453
6488
  /**
6454
- * @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.
6455
6495
  * @example 512
6456
6496
  */
6457
6497
  trademark_count: number;
6458
6498
  /**
6459
- * @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.
6460
6500
  * @example 300
6461
6501
  */
6462
6502
  active_count: number;
@@ -6474,24 +6514,36 @@ export interface components {
6474
6514
  identifier_type: string;
6475
6515
  }[];
6476
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. */
6477
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. */
6478
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. */
6479
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. */
6480
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. */
6481
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. */
6482
6528
  abandoned_count: number;
6483
6529
  /**
6484
6530
  * @deprecated
6485
- * @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).
6486
6532
  */
6487
6533
  registration_rate: number | null;
6488
- /** @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. */
6489
6535
  grant_rate: number | null;
6536
+ /** @description Share of concluded prosecutions (record grain) that ended abandoned, withdrawn or refused: abandoned / (registered + expired + cancelled + abandoned). */
6490
6537
  abandonment_rate: number | null;
6538
+ /** @description Distinct offices among the records. A Madrid IR's designations recorded by WIPO count as one office. */
6491
6539
  jurisdiction_count: number;
6540
+ /** @description Earliest filing_date over the records (YYYY-MM-DD). */
6492
6541
  earliest_filing_date: string | null;
6542
+ /** @description Latest filing_date over the records (YYYY-MM-DD). */
6493
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. */
6494
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. */
6495
6547
  computed_at: string | null;
6496
6548
  } | null;
6497
6549
  created_at: string;
@@ -6508,8 +6560,14 @@ export interface components {
6508
6560
  canonical_name: string;
6509
6561
  firm_name: string | null;
6510
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. */
6511
6569
  trademark_count: number;
6512
- /** @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. */
6513
6571
  active_count: number;
6514
6572
  };
6515
6573
  AttorneyListResponse: {
@@ -6538,25 +6596,10 @@ export interface components {
6538
6596
  /** @example srch_abc123 */
6539
6597
  search_id: string;
6540
6598
  /**
6541
- * @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.
6542
6600
  * @example SIGNA
6543
6601
  */
6544
6602
  query: string | null;
6545
- /**
6546
- * @description Deprecated (removed after the 90-day window): read `similarity_applied`. The applied channels in the old strategy vocabulary.
6547
- * @example [
6548
- * "exact",
6549
- * "fuzzy",
6550
- * "prefix"
6551
- * ]
6552
- */
6553
- strategies_used: ("exact" | "phonetic" | "fuzzy" | "prefix")[];
6554
- /**
6555
- * @description Deprecated (removed after the 90-day window): the old `match` mode the request was translated from, else 'similar'.
6556
- * @example similar
6557
- * @enum {string}
6558
- */
6559
- match: "similar" | "exact" | "starts_with" | "ends_with" | "contains";
6560
6603
  /**
6561
6604
  * @description The similarity channels q ran on (identical is always included). Empty without q.
6562
6605
  * @example [
@@ -6619,7 +6662,7 @@ export interface components {
6619
6662
  sunset: string;
6620
6663
  }[];
6621
6664
  /**
6622
- * @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.
6623
6666
  * @example grouped
6624
6667
  * @enum {string}
6625
6668
  */
@@ -6635,10 +6678,10 @@ export interface components {
6635
6678
  * @enum {string}
6636
6679
  */
6637
6680
  territory_match: "protection" | "direct";
6638
- /** @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), 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. */
6639
6682
  warnings?: {
6640
6683
  /**
6641
- * @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`), `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`).
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`).
6642
6685
  * @example phonetic_skipped
6643
6686
  */
6644
6687
  code: string;
@@ -6749,9 +6792,10 @@ export interface components {
6749
6792
  canonical_name: string;
6750
6793
  country_code: string | null;
6751
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. */
6752
6796
  trademark_count: number;
6753
6797
  /**
6754
- * @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.
6755
6799
  * @example 300
6756
6800
  */
6757
6801
  active_count: number;
@@ -6785,8 +6829,9 @@ export interface components {
6785
6829
  canonical_name: string;
6786
6830
  country_code: string | null;
6787
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. */
6788
6833
  trademark_count: number;
6789
- /** @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. */
6790
6835
  active_count: number;
6791
6836
  /**
6792
6837
  * @deprecated
@@ -6818,6 +6863,7 @@ export interface components {
6818
6863
  canonical_name: string;
6819
6864
  firm_name: string | null;
6820
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. */
6821
6867
  trademark_count: number;
6822
6868
  /**
6823
6869
  * @deprecated
@@ -6856,25 +6902,10 @@ export interface components {
6856
6902
  /** @example srch_abc123 */
6857
6903
  search_id: string;
6858
6904
  /**
6859
- * @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.
6860
6906
  * @example SIGNA
6861
6907
  */
6862
6908
  query: string | null;
6863
- /**
6864
- * @description Deprecated (removed after the 90-day window): read `similarity_applied`. The applied channels in the old strategy vocabulary.
6865
- * @example [
6866
- * "exact",
6867
- * "fuzzy",
6868
- * "prefix"
6869
- * ]
6870
- */
6871
- strategies_used: ("exact" | "phonetic" | "fuzzy" | "prefix")[];
6872
- /**
6873
- * @description Deprecated (removed after the 90-day window): the old `match` mode the request was translated from, else 'similar'.
6874
- * @example similar
6875
- * @enum {string}
6876
- */
6877
- match: "similar" | "exact" | "starts_with" | "ends_with" | "contains";
6878
6909
  /**
6879
6910
  * @description The similarity channels q ran on (identical is always included). Empty without q.
6880
6911
  * @example [
@@ -6937,7 +6968,7 @@ export interface components {
6937
6968
  sunset: string;
6938
6969
  }[];
6939
6970
  /**
6940
- * @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.
6941
6972
  * @example grouped
6942
6973
  * @enum {string}
6943
6974
  */
@@ -6953,10 +6984,10 @@ export interface components {
6953
6984
  * @enum {string}
6954
6985
  */
6955
6986
  territory_match: "protection" | "direct";
6956
- /** @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), 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. */
6957
6988
  warnings?: {
6958
6989
  /**
6959
- * @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`), `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`).
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`).
6960
6991
  * @example phonetic_skipped
6961
6992
  */
6962
6993
  code: string;
@@ -7152,11 +7183,11 @@ export interface components {
7152
7183
  */
7153
7184
  tickers: string[];
7154
7185
  /**
7155
- * @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.
7156
7187
  * @example HWUPKR0MPOU8FGXBT394
7157
7188
  */
7158
7189
  lei: string | null;
7159
- /** @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. */
7160
7191
  has_lei: boolean;
7161
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). */
7162
7193
  trademark_count: number | null;
@@ -7225,25 +7256,10 @@ export interface components {
7225
7256
  /** @example srch_abc123 */
7226
7257
  search_id: string;
7227
7258
  /**
7228
- * @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.
7229
7260
  * @example SIGNA
7230
7261
  */
7231
7262
  query: string | null;
7232
- /**
7233
- * @description Deprecated (removed after the 90-day window): read `similarity_applied`. The applied channels in the old strategy vocabulary.
7234
- * @example [
7235
- * "exact",
7236
- * "fuzzy",
7237
- * "prefix"
7238
- * ]
7239
- */
7240
- strategies_used: ("exact" | "phonetic" | "fuzzy" | "prefix")[];
7241
- /**
7242
- * @description Deprecated (removed after the 90-day window): the old `match` mode the request was translated from, else 'similar'.
7243
- * @example similar
7244
- * @enum {string}
7245
- */
7246
- match: "similar" | "exact" | "starts_with" | "ends_with" | "contains";
7247
7263
  /**
7248
7264
  * @description The similarity channels q ran on (identical is always included). Empty without q.
7249
7265
  * @example [
@@ -7306,7 +7322,7 @@ export interface components {
7306
7322
  sunset: string;
7307
7323
  }[];
7308
7324
  /**
7309
- * @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.
7310
7326
  * @example grouped
7311
7327
  * @enum {string}
7312
7328
  */
@@ -7322,10 +7338,10 @@ export interface components {
7322
7338
  * @enum {string}
7323
7339
  */
7324
7340
  territory_match: "protection" | "direct";
7325
- /** @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), 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. */
7326
7342
  warnings?: {
7327
7343
  /**
7328
- * @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`), `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`).
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`).
7329
7345
  * @example phonetic_skipped
7330
7346
  */
7331
7347
  code: string;
@@ -7425,7 +7441,10 @@ export interface components {
7425
7441
  object: "proceeding";
7426
7442
  /** @example opposition */
7427
7443
  proceeding_type: string;
7428
- /** @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
+ */
7429
7448
  proceeding_number: string | null;
7430
7449
  /** @example decided_rejected */
7431
7450
  status: string | null;
@@ -7670,9 +7689,13 @@ export interface components {
7670
7689
  base_source: "rule_period" | "stated_deadline" | "rule_absolute_cap" | null;
7671
7690
  /** @description A stated due date the engine REJECTED for exceeding the rule's absolute cap, kept as structured provenance. */
7672
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. */
7673
7693
  closed_by_fact_id: string | null;
7674
- /** @enum {string|null} */
7675
- 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;
7676
7699
  /** @description For `outcome: "stated"`: the `stated_deadline` fact that carried the date. */
7677
7700
  stated_by_fact_id: string | null;
7678
7701
  /**
@@ -7696,12 +7719,12 @@ export interface components {
7696
7719
  filing_route: "national" | "regional" | "madrid";
7697
7720
  supported: boolean;
7698
7721
  /**
7699
- * @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.
7700
7723
  * @enum {string|null}
7701
7724
  */
7702
7725
  reason: "unsupported_jurisdiction" | "requires_office_date" | null;
7703
7726
  deadlines: components["schemas"]["ComputedDeadline"][];
7704
- /** @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. */
7705
7728
  unsupported_rules: components["schemas"]["UnsupportedDeadlineRule"][];
7706
7729
  /**
7707
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.
@@ -8109,7 +8132,7 @@ export interface components {
8109
8132
  */
8110
8133
  grant_date?: string | null;
8111
8134
  /**
8112
- * @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.
8113
8136
  * @example null
8114
8137
  */
8115
8138
  expiry_date?: string | null;
@@ -8205,7 +8228,7 @@ export interface components {
8205
8228
  * @enum {string|null}
8206
8229
  */
8207
8230
  reason: "unsupported_jurisdiction" | "requires_office_date" | null;
8208
- /** @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. */
8209
8232
  unsupported_rules: components["schemas"]["UnsupportedDeadlineRule"][];
8210
8233
  };
8211
8234
  DeadlineListResponse: {
@@ -8218,7 +8241,7 @@ export interface components {
8218
8241
  total_count?: number;
8219
8242
  total_count_approximate?: boolean;
8220
8243
  };
8221
- /** @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. */
8222
8245
  unsupported_marks: components["schemas"]["DeadlineUnsupportedMark"][] | null;
8223
8246
  request_id: string;
8224
8247
  };
@@ -8449,7 +8472,7 @@ export interface components {
8449
8472
  common_extension: components["schemas"]["OppositionCommonExtension"];
8450
8473
  source: components["schemas"]["OppositionWindowSource"];
8451
8474
  /**
8452
- * @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.
8453
8476
  * @example null
8454
8477
  */
8455
8478
  reason: string | null;
@@ -8484,7 +8507,7 @@ export interface components {
8484
8507
  */
8485
8508
  publication_date?: string;
8486
8509
  /**
8487
- * @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.
8488
8511
  * @example 2026-01-15
8489
8512
  */
8490
8513
  filing_date?: string;
@@ -8540,7 +8563,7 @@ export interface components {
8540
8563
  filing_route: "national" | "regional" | "madrid";
8541
8564
  supported: boolean;
8542
8565
  /**
8543
- * @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.
8544
8567
  * @enum {string|null}
8545
8568
  */
8546
8569
  reason: "unsupported_jurisdiction" | "requires_office_date" | null;
@@ -8558,6 +8581,8 @@ export interface components {
8558
8581
  computed_at: string;
8559
8582
  /** @example 10 */
8560
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"][];
8561
8586
  };
8562
8587
  ReconcileComputedProvenance: {
8563
8588
  /** @example us_renewal_s9 */
@@ -10204,6 +10229,14 @@ export interface components {
10204
10229
  * @example 2026-08-14
10205
10230
  */
10206
10231
  source_date?: string | null;
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
+ };
10207
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. */
10208
10241
  portfolios?: {
10209
10242
  /** @example ptf_9aB2xY */
@@ -10217,7 +10250,7 @@ export interface components {
10217
10250
  created_at: string;
10218
10251
  request_id: string;
10219
10252
  };
10220
- /** @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. */
10221
10254
  SubscriptionSummary: {
10222
10255
  /**
10223
10256
  * @description The organization's Stripe subscription status as mirrored (`active`, `trialing`, `past_due`, `unpaid`, `paused`, `canceled`, ...). Null when the organization has no subscription.
@@ -10235,6 +10268,25 @@ export interface components {
10235
10268
  /** @description Stripe-hosted page to pay the open invoice or update the payment method. */
10236
10269
  invoice_url: string | null;
10237
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;
10238
10290
  };
10239
10291
  Identity: {
10240
10292
  /** @enum {string} */
@@ -10718,7 +10770,7 @@ export interface components {
10718
10770
  };
10719
10771
  StripePlanChangeResponse: {
10720
10772
  /**
10721
- * @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.
10722
10774
  * @enum {string}
10723
10775
  */
10724
10776
  outcome: "applied" | "pending_payment" | "scheduled";
@@ -12511,8 +12563,11 @@ export interface operations {
12511
12563
  requestBody?: {
12512
12564
  content: {
12513
12565
  "application/json": {
12514
- /** @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. */
12515
- q?: string;
12566
+ /**
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.
12568
+ * @example SIGNA
12569
+ */
12570
+ q?: string | string[];
12516
12571
  /** @description Similarity channels for q: identical, fuzzy, embedded, phonetic, lookalike. Default identical, fuzzy, embedded, lookalike; identical is always on. Requires q. */
12517
12572
  similarity?: ("identical" | "fuzzy" | "embedded" | "phonetic" | "lookalike")[];
12518
12573
  exclude?: components["schemas"]["SearchExclude"];
@@ -12669,7 +12724,7 @@ export interface operations {
12669
12724
  limit?: number;
12670
12725
  cursor?: string;
12671
12726
  /**
12672
- * @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.
12673
12728
  * @example grouped
12674
12729
  * @enum {string}
12675
12730
  */
@@ -15168,7 +15223,7 @@ export interface operations {
15168
15223
  "application/json": components["schemas"]["ProceedingListResponse"];
15169
15224
  };
15170
15225
  };
15171
- /** @description Missing filter or invalid params */
15226
+ /** @description Missing filter or invalid params, including an unknown or planned (not live) `office_code` */
15172
15227
  400: {
15173
15228
  headers: {
15174
15229
  [name: string]: unknown;
@@ -15195,7 +15250,7 @@ export interface operations {
15195
15250
  "application/json": components["schemas"]["Error"];
15196
15251
  };
15197
15252
  };
15198
- /** @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`). */
15199
15254
  422: {
15200
15255
  headers: {
15201
15256
  [name: string]: unknown;
@@ -15527,7 +15582,7 @@ export interface operations {
15527
15582
  listDeadlines: {
15528
15583
  parameters: {
15529
15584
  query?: {
15530
- 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;
15531
15586
  due_before?: string;
15532
15587
  urgency?: "critical" | "upcoming" | "routine" | "in_grace" | "missed";
15533
15588
  limit?: number;
@@ -16791,7 +16846,7 @@ export interface operations {
16791
16846
  listPortfolioDeadlines: {
16792
16847
  parameters: {
16793
16848
  query?: {
16794
- 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;
16795
16850
  due_before?: string;
16796
16851
  urgency?: "critical" | "upcoming" | "routine" | "in_grace" | "missed";
16797
16852
  limit?: number;
@@ -16964,6 +17019,15 @@ export interface operations {
16964
17019
  "application/json": components["schemas"]["Error"];
16965
17020
  };
16966
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
+ };
16967
17031
  };
16968
17032
  };
16969
17033
  retrieveAlert: {
@@ -16986,6 +17050,15 @@ export interface operations {
16986
17050
  "application/json": components["schemas"]["Alert"];
16987
17051
  };
16988
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
+ };
16989
17062
  /** @description Not found */
16990
17063
  404: {
16991
17064
  headers: {
@@ -17030,6 +17103,15 @@ export interface operations {
17030
17103
  "application/json": components["schemas"]["Error"];
17031
17104
  };
17032
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
+ };
17033
17115
  /** @description Not found */
17034
17116
  404: {
17035
17117
  headers: {
@@ -17156,6 +17238,15 @@ export interface operations {
17156
17238
  "application/json": components["schemas"]["Error"];
17157
17239
  };
17158
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
+ };
17159
17250
  };
17160
17251
  };
17161
17252
  listWatches: {
@@ -17180,6 +17271,15 @@ export interface operations {
17180
17271
  "application/json": components["schemas"]["WatchList"];
17181
17272
  };
17182
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
+ };
17183
17283
  };
17184
17284
  };
17185
17285
  createWatch: {
@@ -17199,7 +17299,7 @@ export interface operations {
17199
17299
  /** @enum {string} */
17200
17300
  watch_type: "mark" | "portfolio" | "owner" | "class" | "similarity";
17201
17301
  /**
17202
- * @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). 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 with the same matching, 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) — 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.
17203
17303
  * @example {
17204
17304
  * "version": "v3",
17205
17305
  * "q": "acme",
@@ -17254,6 +17354,15 @@ export interface operations {
17254
17354
  "application/json": components["schemas"]["Error"];
17255
17355
  };
17256
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
+ };
17257
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`. */
17258
17367
  402: {
17259
17368
  headers: {
@@ -17321,6 +17430,15 @@ export interface operations {
17321
17430
  "application/json": components["schemas"]["Watch"];
17322
17431
  };
17323
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
+ };
17324
17442
  /** @description Not found */
17325
17443
  404: {
17326
17444
  headers: {
@@ -17362,6 +17480,15 @@ export interface operations {
17362
17480
  };
17363
17481
  };
17364
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
+ };
17365
17492
  /** @description Not found */
17366
17493
  404: {
17367
17494
  headers: {
@@ -17426,6 +17553,15 @@ export interface operations {
17426
17553
  "application/json": components["schemas"]["Error"];
17427
17554
  };
17428
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
+ };
17429
17565
  /** @description Insufficient credits to fund the minimum monitoring window for newly added distinct trademarks. */
17430
17566
  402: {
17431
17567
  headers: {
@@ -17495,6 +17631,15 @@ export interface operations {
17495
17631
  "application/json": components["schemas"]["Error"];
17496
17632
  };
17497
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
+ };
17498
17643
  /** @description Not found */
17499
17644
  404: {
17500
17645
  headers: {
@@ -17531,6 +17676,15 @@ export interface operations {
17531
17676
  "application/pdf": string;
17532
17677
  };
17533
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
+ };
17534
17688
  /** @description Not found */
17535
17689
  404: {
17536
17690
  headers: {
@@ -17583,6 +17737,15 @@ export interface operations {
17583
17737
  "application/json": components["schemas"]["Watch"];
17584
17738
  };
17585
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
+ };
17586
17749
  /** @description Not found */
17587
17750
  404: {
17588
17751
  headers: {
@@ -17617,6 +17780,15 @@ export interface operations {
17617
17780
  "application/json": components["schemas"]["Watch"];
17618
17781
  };
17619
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
+ };
17620
17792
  /** @description Not found */
17621
17793
  404: {
17622
17794
  headers: {
@@ -17694,6 +17866,15 @@ export interface operations {
17694
17866
  "application/json": components["schemas"]["Error"];
17695
17867
  };
17696
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
+ };
17697
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. */
17698
17879
  413: {
17699
17880
  headers: {
@@ -17761,7 +17942,7 @@ export interface operations {
17761
17942
  /** @enum {string} */
17762
17943
  watch_type: "mark" | "portfolio" | "owner" | "class" | "similarity";
17763
17944
  /**
17764
- * @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). 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 with the same matching, 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) — 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.
17765
17946
  * @example {
17766
17947
  * "version": "v3",
17767
17948
  * "q": "acme",
@@ -17890,6 +18071,15 @@ export interface operations {
17890
18071
  "application/json": components["schemas"]["Error"];
17891
18072
  };
17892
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
+ };
17893
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`. */
17894
18084
  402: {
17895
18085
  headers: {
@@ -17955,6 +18145,15 @@ export interface operations {
17955
18145
  "application/json": components["schemas"]["MonitoringStatus"];
17956
18146
  };
17957
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
+ };
17958
18157
  };
17959
18158
  };
17960
18159
  listWebhookEndpoints: {
@@ -17987,6 +18186,15 @@ export interface operations {
17987
18186
  "application/json": components["schemas"]["Error"];
17988
18187
  };
17989
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
+ };
17990
18198
  };
17991
18199
  };
17992
18200
  createWebhookEndpoint: {
@@ -18004,7 +18212,7 @@ export interface operations {
18004
18212
  "application/json": {
18005
18213
  url: string;
18006
18214
  description?: string;
18007
- /** @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. */
18008
18216
  enabled_events: string[];
18009
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. */
18010
18218
  portfolio_id?: string | null;
@@ -18033,6 +18241,15 @@ export interface operations {
18033
18241
  "application/json": components["schemas"]["Error"];
18034
18242
  };
18035
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
+ };
18036
18253
  /** @description Portfolio not found */
18037
18254
  404: {
18038
18255
  headers: {
@@ -18064,6 +18281,15 @@ export interface operations {
18064
18281
  "application/json": components["schemas"]["WebhookEndpoint"];
18065
18282
  };
18066
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
+ };
18067
18293
  /** @description Not found */
18068
18294
  404: {
18069
18295
  headers: {
@@ -18105,6 +18331,15 @@ export interface operations {
18105
18331
  };
18106
18332
  };
18107
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
+ };
18108
18343
  /** @description Not found */
18109
18344
  404: {
18110
18345
  headers: {
@@ -18133,7 +18368,7 @@ export interface operations {
18133
18368
  "application/json": {
18134
18369
  url?: string;
18135
18370
  description?: string | null;
18136
- /** @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. */
18137
18372
  enabled_events?: string[];
18138
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. */
18139
18374
  portfolio_id?: string | null;
@@ -18164,6 +18399,15 @@ export interface operations {
18164
18399
  "application/json": components["schemas"]["Error"];
18165
18400
  };
18166
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
+ };
18167
18411
  /** @description Not found */
18168
18412
  404: {
18169
18413
  headers: {
@@ -18200,6 +18444,15 @@ export interface operations {
18200
18444
  "application/json": components["schemas"]["WebhookEndpoint"];
18201
18445
  };
18202
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
+ };
18203
18456
  /** @description Not found */
18204
18457
  404: {
18205
18458
  headers: {
@@ -18248,6 +18501,15 @@ export interface operations {
18248
18501
  };
18249
18502
  };
18250
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
+ };
18251
18513
  /** @description Not found */
18252
18514
  404: {
18253
18515
  headers: {
@@ -18301,6 +18563,15 @@ export interface operations {
18301
18563
  "application/json": components["schemas"]["Error"];
18302
18564
  };
18303
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
+ };
18304
18575
  /** @description Not found */
18305
18576
  404: {
18306
18577
  headers: {
@@ -18333,6 +18604,15 @@ export interface operations {
18333
18604
  "application/json": components["schemas"]["WebhookDelivery"];
18334
18605
  };
18335
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
+ };
18336
18616
  /** @description Not found */
18337
18617
  404: {
18338
18618
  headers: {
@@ -18373,6 +18653,15 @@ export interface operations {
18373
18653
  };
18374
18654
  };
18375
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
+ };
18376
18665
  /** @description Not found */
18377
18666
  404: {
18378
18667
  headers: {
@@ -18439,6 +18728,15 @@ export interface operations {
18439
18728
  "application/json": components["schemas"]["Error"];
18440
18729
  };
18441
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
+ };
18442
18740
  /** @description Missing events:read scope */
18443
18741
  403: {
18444
18742
  headers: {
@@ -18497,6 +18795,15 @@ export interface operations {
18497
18795
  "application/json": components["schemas"]["Error"];
18498
18796
  };
18499
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
+ };
18500
18807
  /** @description Missing events:read scope */
18501
18808
  403: {
18502
18809
  headers: {
@@ -19755,6 +20062,11 @@ export interface operations {
19755
20062
  * @enum {string}
19756
20063
  */
19757
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;
19758
20070
  };
19759
20071
  };
19760
20072
  };
@@ -19804,7 +20116,7 @@ export interface operations {
19804
20116
  "application/json": components["schemas"]["Error"];
19805
20117
  };
19806
20118
  };
19807
- /** @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. */
19808
20120
  409: {
19809
20121
  headers: {
19810
20122
  [name: string]: unknown;