@curviate/sdk 0.29.0 → 0.31.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.
package/dist/index.d.ts CHANGED
@@ -2409,7 +2409,7 @@ interface paths {
2409
2409
  put?: never;
2410
2410
  /**
2411
2411
  * Start a credential/cookie authentication
2412
- * @description Authenticate a LinkedIn account directly with credentials or a session cookie. The credential fields are NESTED, not top level: `auth_method: "credentials"` reads `credentials: { email, password }`, and `auth_method: "cookie"` reads `cookie: { li_at }` plus a top-level `user_agent`. Omit `account_id` to connect a NEW account into an empty `seat_id` (every seat id is listed with click-to-copy in the seat table on your dashboard); include `account_id` (in the body) to re-authenticate an EXISTING account in place. Returns the account on success (201 new / 200 reconnect), or a checkpoint challenge (202) carrying the account_id when LinkedIn requires verification. Complete the challenge with POST /v1/auth/checkpoint/solve (codes) or POST /v1/auth/checkpoint/poll (mobile-app approval). Connection scope (which LinkedIn products are enabled) is derived from the account's seat, there is no products input; the recorded scope is readable as `requested_products` on the account. A reconnect that changes scope must use credentials (a saved cookie cannot change scope). Pin a managed proxy with the optional `country`/`ip` or supply a `proxy` to override it.
2412
+ * @description Authenticate a LinkedIn account directly with credentials or a session cookie. The credential fields are NESTED, not top level: `auth_method: "credentials"` reads `credentials: { email, password }`, and `auth_method: "cookie"` reads `cookie: { li_at }` plus a top-level `user_agent`. Omit `account_id` to connect a NEW account into an empty `seat_id` (every seat id is listed with click-to-copy in the seat table on your dashboard); include `account_id` (in the body) to re-authenticate an EXISTING account in place. Returns the account on success (201 new / 200 reconnect), or a checkpoint challenge (202) carrying the account_id when LinkedIn requires verification. Complete the challenge with POST /v1/auth/checkpoint/solve (codes) or POST /v1/auth/checkpoint/poll (mobile-app approval). Connection scope (which LinkedIn products are enabled) is not something you list: the connection asks for every product and LinkedIn activates the ones the account actually has. The recorded scope is readable as `requested_products` on the account. One LinkedIn account can hold only one of the two premium surfaces, and when both are asked for Sales Navigator takes precedence, so pass the optional `linkedin_premium` (`sales_navigator` or `recruiter`) if the account holds both and you want the other one. Omit it and nothing is narrowed. It applies per connection and is not remembered, so state it on every connect and reconnect where Recruiter must win. A reconnect that changes scope must use credentials (a saved cookie cannot change scope), which includes any reconnect of an account connected before the full product set became the default. Pin a managed proxy with the optional `country`/`ip` or supply a `proxy` to override it.
2413
2413
  */
2414
2414
  post: operations["postV1AuthIntent"];
2415
2415
  delete?: never;
@@ -2611,7 +2611,7 @@ interface paths {
2611
2611
  };
2612
2612
  /**
2613
2613
  * List webhook event types
2614
- * @description Returns the complete canonical event catalogue (27 events) grouped by source: messaging (7), user (2), account_status (15), plus 3 tier-gated events. A local catalogue read: no platform call is made.
2614
+ * @description Returns the complete canonical event catalogue (27 events) grouped by source: messaging (7), user (2), account_status (15), plus 3 recruiter/sales_nav events. A local catalogue read: no platform call is made.
2615
2615
  */
2616
2616
  get: operations["getV1WebhooksEvents"];
2617
2617
  put?: never;
@@ -2679,7 +2679,7 @@ interface paths {
2679
2679
  };
2680
2680
  /**
2681
2681
  * Read an account's safety policy
2682
- * @description Returns every configurable safety field for every budget row of one account, in a single response: the ceiling, the green and amber bands, the counting window, the enforcement posture and where it was inherited from, the activity window, warm-up state, the per-row character caps and search per-query cap, and how well calibrated each row's number is. Every value is seeded configuration and every one of them is settable. Where a configured value is above the Curviate default, the row carries an `over_default` entry naming the value, the default and the source class of that default. The response also carries `tenant_default_posture`, the workspace-wide default every account inherits, separately from this account's own effective `posture`, and `limit_profile`, which says which of the four Curviate default sets (`basic`, `premium`, `sales_navigator`, `recruiter`) every row below was resolved from, detected from the platform when the account connected. When the Curviate seat attached to this account disagrees with that, `seat_tier_mismatch` names the seat tier; the detected product wins the numbers either way.
2682
+ * @description Returns every configurable safety field for every budget row of one account, in a single response: the ceiling, the green and amber bands, the counting window, the enforcement posture and where it was inherited from, the activity window, warm-up state, the per-row character caps and search per-query cap, and how well calibrated each row's number is. Every value is seeded configuration and every one of them is settable. Where a configured value is above the Curviate default, the row carries an `over_default` entry naming the value, the default and the source class of that default. The response also carries `tenant_default_posture`, the workspace-wide default every account inherits, separately from this account's own effective `posture`, and `limit_profile`, which says which of the four Curviate default sets (`basic`, `premium`, `sales_navigator`, `recruiter`) every row below was resolved from, detected from the platform when the account connected.
2683
2683
  */
2684
2684
  get: operations["getV1AccountIdSafetyPolicy"];
2685
2685
  put?: never;
@@ -2689,7 +2689,7 @@ interface paths {
2689
2689
  head?: never;
2690
2690
  /**
2691
2691
  * Update an account's safety policy
2692
- * @description The single safety-policy write. Send only the fields you are changing: everything you omit is left byte-identical, and sending `null` for a field clears your override and restores the Curviate default. Any limit may be set to any value: Curviate does not clamp, cap or refuse a change on the grounds that the number is unsafe. A value above the Curviate default is reported back in the response, and on every later read, with the default and its source class attached; there is no way to acknowledge it away, and setting the value back to the default removes it. A value that is not a value, such as a negative ceiling or an unknown row name, is a 400. Every field whose value CHANGES is appended to the account's action ledger with the previous value, the new value, the Curviate default, the actor and the time; a field you send whose value already equals its current effective value is not ledgered and is not stored as an override, so reading the policy and sending the document back changes nothing. Six fields on the read are derived rather than configured: `effective_ceiling`, `interface_ceiling`, `effective_interface_ceiling`, `posture_source`, `over_default` and each row's `warm_up_state`. Send them and they are accepted and ignored, never stored and never ledgered, so the document you read can go straight back. To pin a row's ramp, set `warm_up_factor`. `activity_window` is not accepted: send its settable subfields instead, the top-level `timezone` for the zone, and per row `activity_window_start`, `activity_window_end`, `activity_window_timezone` and `activity_window_applies_to`. The 400 this produces names those subfields, not just the refused object. And read `changes nothing` as `changes no limit`: the `posture` fields are OVERRIDES at every scope, so writing back a posture a scope merely inherits PINS it there and appends one ledger entry per pinned scope. That is what stops a later account- or tenant-wide change from moving it. A pin already in place is a no-op. An agent-authenticated write is accepted on exactly the same footing as an operator's. There is no bulk import, file upload or policy template: configuring many rows or many accounts is a loop over this operation. One field is not account-scoped: `tenant_default_posture` sets the default for EVERY account in the tenant, not just the one in the path, which is what makes it a one-call change for a whole workspace of personas. It is reported back at the top of every policy response, so a change to it is visible even on an account that overrides it. One other field is not row-scoped: `limit_profile` selects which of the four Curviate default sets this account's rows resolve from, so it moves the default under every row at once while leaving every value you have configured explicitly exactly as you set it. It is the platform product active on the account, not your Curviate seat entitlement, and the two can disagree: a lapsed subscription leaves the seat untouched. Curviate detects it when the account connects and re-detects it on every reconnect; setting it here is an operator override of that result, and it holds until the next connect. When the seat and the detected product disagree, the detected product wins the numbers and the read reports the disagreement as `seat_tier_mismatch`. One field on this operation does not configure anything: `clear_halts` lifts the platform pause on the action types you name. When the platform refuses a call on an account, Curviate pauses that action type for the platform's own retry-after or a seeded cooldown, and every later call on it is refused locally without reaching the platform; the account resource reports the live pauses as `quotas[].halt`. Naming an action type here lifts its pause immediately, so the next call goes out. An action type with no active pause is accepted and does nothing, which makes it safe to send for a set you have not checked, and only the ones actually lifted are ledgered, each with the expiry it cut short, the actor and the time, readable afterwards on `GET /v1/{account_id}/safety-events` with `reason: "halt_cleared"`. Clearing disarms nothing: if the platform refuses the account again the pause returns, and a 429 or a refused write returns it for the full cooldown. Clear one when you have reason to believe the refusal was a transient upstream fault rather than the platform pushing back on this account.
2692
+ * @description The single safety-policy write. Send only the fields you are changing: everything you omit is left byte-identical, and sending `null` for a field clears your override and restores the Curviate default. Any limit may be set to any value: Curviate does not clamp, cap or refuse a change on the grounds that the number is unsafe. A value above the Curviate default is reported back in the response, and on every later read, with the default and its source class attached; there is no way to acknowledge it away, and setting the value back to the default removes it. A value that is not a value, such as a negative ceiling or an unknown row name, is a 400. Every field whose value CHANGES is appended to the account's action ledger with the previous value, the new value, the Curviate default, the actor and the time; a field you send whose value already equals its current effective value is not ledgered and is not stored as an override, so reading the policy and sending the document back changes nothing. Six fields on the read are derived rather than configured: `effective_ceiling`, `interface_ceiling`, `effective_interface_ceiling`, `posture_source`, `over_default` and each row's `warm_up_state`. Send them and they are accepted and ignored, never stored and never ledgered, so the document you read can go straight back. To pin a row's ramp, set `warm_up_factor`. `activity_window` is not accepted: send its settable subfields instead, the top-level `timezone` for the zone, and per row `activity_window_start`, `activity_window_end`, `activity_window_timezone` and `activity_window_applies_to`. The 400 this produces names those subfields, not just the refused object. And read `changes nothing` as `changes no limit`: the `posture` fields are OVERRIDES at every scope, so writing back a posture a scope merely inherits PINS it there and appends one ledger entry per pinned scope. That is what stops a later account- or tenant-wide change from moving it. A pin already in place is a no-op. An agent-authenticated write is accepted on exactly the same footing as an operator's. There is no bulk import, file upload or policy template: configuring many rows or many accounts is a loop over this operation. One field is not account-scoped: `tenant_default_posture` sets the default for EVERY account in the tenant, not just the one in the path, which is what makes it a one-call change for a whole workspace of personas. It is reported back at the top of every policy response, so a change to it is visible even on an account that overrides it. One other field is not row-scoped: `limit_profile` selects which of the four Curviate default sets this account's rows resolve from, so it moves the default under every row at once while leaving every value you have configured explicitly exactly as you set it. It is the platform product active on the account, not your Curviate seat entitlement, and the two can disagree: a lapsed subscription leaves the seat untouched. Curviate detects it when the account connects and re-detects it on every reconnect; setting it here is an operator override of that result, and it holds until the next connect. One field on this operation does not configure anything: `clear_halts` lifts the platform pause on the action types you name. When the platform refuses a call on an account, Curviate pauses that action type for the platform's own retry-after or a seeded cooldown, and every later call on it is refused locally without reaching the platform; the account resource reports the live pauses as `quotas[].halt`. Naming an action type here lifts its pause immediately, so the next call goes out. An action type with no active pause is accepted and does nothing, which makes it safe to send for a set you have not checked, and only the ones actually lifted are ledgered, each with the expiry it cut short, the actor and the time, readable afterwards on `GET /v1/{account_id}/safety-events` with `reason: "halt_cleared"`. Clearing disarms nothing: if the platform refuses the account again the pause returns, and a 429 or a refused write returns it for the full cooldown. Clear one when you have reason to believe the refusal was a transient upstream fault rather than the platform pushing back on this account.
2693
2693
  */
2694
2694
  patch: operations["patchV1AccountIdSafetyPolicy"];
2695
2695
  trace?: never;
@@ -2742,11 +2742,6 @@ interface components {
2742
2742
  user_fixable: boolean;
2743
2743
  /** @description True when an identical retry is likely to succeed. */
2744
2744
  retry_likely_to_succeed: boolean;
2745
- /**
2746
- * @description Present on tier-gated denials, the seat tier required to proceed.
2747
- * @enum {string}
2748
- */
2749
- required_tier?: "core" | "sales_nav" | "recruiter";
2750
2745
  /** @description Present on a PLATFORM_RATE_LIMIT raised because one account-safety budget row is paused: LinkedIn refused a recent call on that row, so this one was refused locally without reaching LinkedIn. Names the paused row (for example profile_views, connection_requests_no_note). The pause is scoped to this row on this account; every other row keeps working. Absent on every other rate limit. Also present on BUDGET_EXHAUSTED, where it names the row that hit its CEILING rather than one LinkedIn paused: read the code to tell the two apart, because the recovery differs. Null on a BUDGET_EXHAUSTED whose reason is activity_window and whose action spends no budget of its own, because there is no row to name; hint.parameter still names the setting to change. Never null on a rate limit. */
2751
2746
  row?: string | null;
2752
2747
  /** @description Present on BUDGET_EXHAUSTED: the instant the refusal lifts, as an absolute instant rather than a duration, so it stays true however long you hold it. It is the window roll on a ceiling refusal and the next window open on an activity-window one. It is null in the two cases where no clock frees the account: the pending_invites gauge, whose backlog falls when invitations are accepted or withdrawn, and an InMail credit exhaustion (row inmail), which LinkedIn regrants on a schedule this product cannot read. */
@@ -2973,8 +2968,12 @@ interface operations {
2973
2968
  public_picture_url_large?: string;
2974
2969
  /** @description A private, time-limited picture download URL (present only in some responses). */
2975
2970
  private_picture_download_url?: string;
2976
- /** @description Profile summary/about section. Passes through verbatim, never stored. */
2971
+ /** @description Cover/background photo URL. */
2972
+ background_picture_url?: string;
2973
+ /** @description Mirrors the profile headline (the short line shown under the member's name). NOT the About/Summary section; see `bio` for that. */
2977
2974
  description?: string;
2975
+ /** @description The profile's About/Summary section (free text). Distinct from `description`, which mirrors the headline, not this field. */
2976
+ bio?: string;
2978
2977
  /** @description Geographic location string. */
2979
2978
  location?: string;
2980
2979
  /** @description ISO-8601 timestamp for when this profile record was created on the platform. */
@@ -2983,10 +2982,25 @@ interface operations {
2983
2982
  emails?: string[];
2984
2983
  /** @description Phone numbers associated with the profile. */
2985
2984
  phone_numbers?: string[];
2985
+ /** @description Self-declared social handles keyed by platform (e.g. 'github'), each an object naming the handle. Same sensitivity class as `emails`/`phone_numbers` (self-declared contact-class info). */
2986
+ social_handles?: {
2987
+ [key: string]: {
2988
+ /** @description The handle's display name. */
2989
+ name?: string;
2990
+ };
2991
+ };
2992
+ /** @description Personal/professional website URLs associated with the profile. */
2993
+ websites?: string[];
2986
2994
  /** @description Whether the authenticated account has blocked this member. */
2987
2995
  is_blocked?: boolean;
2988
2996
  /** @description Whether the authenticated account follows this member. */
2989
2997
  is_following?: boolean;
2998
+ /** @description Whether LinkedIn has verified this member. */
2999
+ is_verified?: boolean;
3000
+ /** @description Same value as specifics.is_premium; prefer the nested field. */
3001
+ is_premium?: boolean;
3002
+ /** @description The member's profile language. Distinct from specifics.default_locale/specifics.supported_locales. */
3003
+ language?: string;
2990
3004
  /** @description Total follower count. */
2991
3005
  followers_count?: number;
2992
3006
  /** @description Total 1st-degree connection count. */
@@ -4241,7 +4255,7 @@ interface operations {
4241
4255
  "application/json": components["schemas"]["Error"];
4242
4256
  };
4243
4257
  };
4244
- /** @description The account does not have the required Core seat. */
4258
+ /** @description Forbidden. NO_ACTIVE_SEAT: the account is not attached to an active seat. */
4245
4259
  403: {
4246
4260
  headers: {
4247
4261
  [name: string]: unknown;
@@ -4289,7 +4303,7 @@ interface operations {
4289
4303
  "application/json": components["schemas"]["Error"];
4290
4304
  };
4291
4305
  };
4292
- /** @description A temporary error occurred. Please try again. */
4306
+ /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Check `retry_likely_to_succeed`: a temporary error is worth retrying, a response that could not be interpreted is not, and carries `retry_hint: {"kind": "never"}`. */
4293
4307
  502: {
4294
4308
  headers: {
4295
4309
  [name: string]: unknown;
@@ -4434,7 +4448,7 @@ interface operations {
4434
4448
  "application/json": components["schemas"]["Error"];
4435
4449
  };
4436
4450
  };
4437
- /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Please try again. */
4451
+ /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Check `retry_likely_to_succeed`: a temporary error is worth retrying, a response that could not be interpreted is not, and carries `retry_hint: {"kind": "never"}`. */
4438
4452
  502: {
4439
4453
  headers: {
4440
4454
  [name: string]: unknown;
@@ -4577,7 +4591,7 @@ interface operations {
4577
4591
  "application/json": components["schemas"]["Error"];
4578
4592
  };
4579
4593
  };
4580
- /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Please try again. */
4594
+ /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Check `retry_likely_to_succeed`: a temporary error is worth retrying, a response that could not be interpreted is not, and carries `retry_hint: {"kind": "never"}`. */
4581
4595
  502: {
4582
4596
  headers: {
4583
4597
  [name: string]: unknown;
@@ -4720,7 +4734,7 @@ interface operations {
4720
4734
  "application/json": components["schemas"]["Error"];
4721
4735
  };
4722
4736
  };
4723
- /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Please try again. */
4737
+ /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Check `retry_likely_to_succeed`: a temporary error is worth retrying, a response that could not be interpreted is not, and carries `retry_hint: {"kind": "never"}`. */
4724
4738
  502: {
4725
4739
  headers: {
4726
4740
  [name: string]: unknown;
@@ -4859,7 +4873,7 @@ interface operations {
4859
4873
  "application/json": components["schemas"]["Error"];
4860
4874
  };
4861
4875
  };
4862
- /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Please try again. */
4876
+ /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Check `retry_likely_to_succeed`: a temporary error is worth retrying, a response that could not be interpreted is not, and carries `retry_hint: {"kind": "never"}`. */
4863
4877
  502: {
4864
4878
  headers: {
4865
4879
  [name: string]: unknown;
@@ -5609,7 +5623,7 @@ interface operations {
5609
5623
  "application/json": components["schemas"]["Error"];
5610
5624
  };
5611
5625
  };
5612
- /** @description The account does not have the required Core seat. */
5626
+ /** @description Forbidden. NO_ACTIVE_SEAT: the account is not attached to an active seat. */
5613
5627
  403: {
5614
5628
  headers: {
5615
5629
  [name: string]: unknown;
@@ -5800,7 +5814,7 @@ interface operations {
5800
5814
  "application/json": components["schemas"]["Error"];
5801
5815
  };
5802
5816
  };
5803
- /** @description The account does not have the required Core seat. */
5817
+ /** @description Forbidden. NO_ACTIVE_SEAT: the account is not attached to an active seat. */
5804
5818
  403: {
5805
5819
  headers: {
5806
5820
  [name: string]: unknown;
@@ -5994,7 +6008,7 @@ interface operations {
5994
6008
  "application/json": components["schemas"]["Error"];
5995
6009
  };
5996
6010
  };
5997
- /** @description The account does not have the required Core seat. */
6011
+ /** @description Forbidden. NO_ACTIVE_SEAT: the account is not attached to an active seat. */
5998
6012
  403: {
5999
6013
  headers: {
6000
6014
  [name: string]: unknown;
@@ -6174,7 +6188,7 @@ interface operations {
6174
6188
  "application/json": components["schemas"]["Error"];
6175
6189
  };
6176
6190
  };
6177
- /** @description The account does not have the required Core seat. */
6191
+ /** @description Forbidden. NO_ACTIVE_SEAT: the account is not attached to an active seat. */
6178
6192
  403: {
6179
6193
  headers: {
6180
6194
  [name: string]: unknown;
@@ -6332,7 +6346,7 @@ interface operations {
6332
6346
  "application/json": components["schemas"]["Error"];
6333
6347
  };
6334
6348
  };
6335
- /** @description The account does not administer this page with the invite-to-follow entitlement (fail-closed), or lacks the required Core seat. */
6349
+ /** @description The account does not administer this page with the invite-to-follow entitlement (fail-closed), or lacks an active seat. */
6336
6350
  403: {
6337
6351
  headers: {
6338
6352
  [name: string]: unknown;
@@ -6499,7 +6513,7 @@ interface operations {
6499
6513
  "application/json": components["schemas"]["Error"];
6500
6514
  };
6501
6515
  };
6502
- /** @description The account does not administer this page (follower analytics is admin-gated), or lacks the required Core seat. */
6516
+ /** @description The account does not administer this page (follower analytics is admin-gated), or lacks an active seat. */
6503
6517
  403: {
6504
6518
  headers: {
6505
6519
  [name: string]: unknown;
@@ -6547,7 +6561,7 @@ interface operations {
6547
6561
  "application/json": components["schemas"]["Error"];
6548
6562
  };
6549
6563
  };
6550
- /** @description A temporary error occurred. Please try again. */
6564
+ /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Check `retry_likely_to_succeed`: a temporary error is worth retrying, a response that could not be interpreted is not, and carries `retry_hint: {"kind": "never"}`. */
6551
6565
  502: {
6552
6566
  headers: {
6553
6567
  [name: string]: unknown;
@@ -6647,7 +6661,7 @@ interface operations {
6647
6661
  "application/json": components["schemas"]["Error"];
6648
6662
  };
6649
6663
  };
6650
- /** @description The account does not administer this page with the invite-to-follow entitlement, or lacks the required Core seat. */
6664
+ /** @description The account does not administer this page with the invite-to-follow entitlement, or lacks an active seat. */
6651
6665
  403: {
6652
6666
  headers: {
6653
6667
  [name: string]: unknown;
@@ -6695,7 +6709,7 @@ interface operations {
6695
6709
  "application/json": components["schemas"]["Error"];
6696
6710
  };
6697
6711
  };
6698
- /** @description A temporary error occurred. Please try again. */
6712
+ /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Check `retry_likely_to_succeed`: a temporary error is worth retrying, a response that could not be interpreted is not, and carries `retry_hint: {"kind": "never"}`. */
6699
6713
  502: {
6700
6714
  headers: {
6701
6715
  [name: string]: unknown;
@@ -6842,7 +6856,7 @@ interface operations {
6842
6856
  "application/json": components["schemas"]["Error"];
6843
6857
  };
6844
6858
  };
6845
- /** @description The account does not administer this page (the admin gate), or lacks the required Core seat. */
6859
+ /** @description The account does not administer this page (the admin gate), or lacks an active seat. */
6846
6860
  403: {
6847
6861
  headers: {
6848
6862
  [name: string]: unknown;
@@ -6890,7 +6904,7 @@ interface operations {
6890
6904
  "application/json": components["schemas"]["Error"];
6891
6905
  };
6892
6906
  };
6893
- /** @description A temporary error occurred. Please try again. */
6907
+ /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Check `retry_likely_to_succeed`: a temporary error is worth retrying, a response that could not be interpreted is not, and carries `retry_hint: {"kind": "never"}`. */
6894
6908
  502: {
6895
6909
  headers: {
6896
6910
  [name: string]: unknown;
@@ -7025,7 +7039,7 @@ interface operations {
7025
7039
  "application/json": components["schemas"]["Error"];
7026
7040
  };
7027
7041
  };
7028
- /** @description The account does not administer this page (the admin gate), or lacks the required Core seat. */
7042
+ /** @description The account does not administer this page (the admin gate), or lacks an active seat. */
7029
7043
  403: {
7030
7044
  headers: {
7031
7045
  [name: string]: unknown;
@@ -7073,7 +7087,7 @@ interface operations {
7073
7087
  "application/json": components["schemas"]["Error"];
7074
7088
  };
7075
7089
  };
7076
- /** @description A temporary error occurred. Please try again. */
7090
+ /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Check `retry_likely_to_succeed`: a temporary error is worth retrying, a response that could not be interpreted is not, and carries `retry_hint: {"kind": "never"}`. */
7077
7091
  502: {
7078
7092
  headers: {
7079
7093
  [name: string]: unknown;
@@ -7201,7 +7215,7 @@ interface operations {
7201
7215
  "application/json": components["schemas"]["Error"];
7202
7216
  };
7203
7217
  };
7204
- /** @description The account does not administer this page (the admin gate), or lacks the required Core seat. */
7218
+ /** @description The account does not administer this page (the admin gate), or lacks an active seat. */
7205
7219
  403: {
7206
7220
  headers: {
7207
7221
  [name: string]: unknown;
@@ -7249,7 +7263,7 @@ interface operations {
7249
7263
  "application/json": components["schemas"]["Error"];
7250
7264
  };
7251
7265
  };
7252
- /** @description A temporary error occurred. Please try again. */
7266
+ /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Check `retry_likely_to_succeed`: a temporary error is worth retrying, a response that could not be interpreted is not, and carries `retry_hint: {"kind": "never"}`. */
7253
7267
  502: {
7254
7268
  headers: {
7255
7269
  [name: string]: unknown;
@@ -7362,7 +7376,7 @@ interface operations {
7362
7376
  "application/json": components["schemas"]["Error"];
7363
7377
  };
7364
7378
  };
7365
- /** @description The account does not administer this page (fail-closed, the target company is absent from the account's administered pages), or the account lacks the required Core seat. */
7379
+ /** @description The account does not administer this page (fail-closed, the target company is absent from the account's administered pages), or the account lacks an active seat. */
7366
7380
  403: {
7367
7381
  headers: {
7368
7382
  [name: string]: unknown;
@@ -7428,7 +7442,7 @@ interface operations {
7428
7442
  "application/json": components["schemas"]["Error"];
7429
7443
  };
7430
7444
  };
7431
- /** @description A temporary error occurred. Please try again. */
7445
+ /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Check `retry_likely_to_succeed`: a temporary error is worth retrying, a response that could not be interpreted is not, and carries `retry_hint: {"kind": "never"}`. */
7432
7446
  502: {
7433
7447
  headers: {
7434
7448
  [name: string]: unknown;
@@ -7544,7 +7558,7 @@ interface operations {
7544
7558
  "application/json": components["schemas"]["Error"];
7545
7559
  };
7546
7560
  };
7547
- /** @description The account does not administer this page (the admin gate), or lacks the required Core seat. */
7561
+ /** @description The account does not administer this page (the admin gate), or lacks an active seat. */
7548
7562
  403: {
7549
7563
  headers: {
7550
7564
  [name: string]: unknown;
@@ -7592,7 +7606,7 @@ interface operations {
7592
7606
  "application/json": components["schemas"]["Error"];
7593
7607
  };
7594
7608
  };
7595
- /** @description A temporary error occurred. Please try again. */
7609
+ /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Check `retry_likely_to_succeed`: a temporary error is worth retrying, a response that could not be interpreted is not, and carries `retry_hint: {"kind": "never"}`. */
7596
7610
  502: {
7597
7611
  headers: {
7598
7612
  [name: string]: unknown;
@@ -7750,7 +7764,7 @@ interface operations {
7750
7764
  "application/json": components["schemas"]["Error"];
7751
7765
  };
7752
7766
  };
7753
- /** @description The account does not administer this page (the admin gate), or lacks the required Core seat. */
7767
+ /** @description The account does not administer this page (the admin gate), or lacks an active seat. */
7754
7768
  403: {
7755
7769
  headers: {
7756
7770
  [name: string]: unknown;
@@ -7798,7 +7812,7 @@ interface operations {
7798
7812
  "application/json": components["schemas"]["Error"];
7799
7813
  };
7800
7814
  };
7801
- /** @description A temporary error occurred. Please try again. */
7815
+ /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Check `retry_likely_to_succeed`: a temporary error is worth retrying, a response that could not be interpreted is not, and carries `retry_hint: {"kind": "never"}`. */
7802
7816
  502: {
7803
7817
  headers: {
7804
7818
  [name: string]: unknown;
@@ -7943,7 +7957,7 @@ interface operations {
7943
7957
  "application/json": components["schemas"]["Error"];
7944
7958
  };
7945
7959
  };
7946
- /** @description No active Core seat for this tenant. */
7960
+ /** @description Forbidden. NO_ACTIVE_SEAT: the account is not attached to an active seat. */
7947
7961
  403: {
7948
7962
  headers: {
7949
7963
  [name: string]: unknown;
@@ -8119,7 +8133,7 @@ interface operations {
8119
8133
  "application/json": components["schemas"]["Error"];
8120
8134
  };
8121
8135
  };
8122
- /** @description No active Core seat for this tenant. */
8136
+ /** @description Forbidden. NO_ACTIVE_SEAT: the account is not attached to an active seat. */
8123
8137
  403: {
8124
8138
  headers: {
8125
8139
  [name: string]: unknown;
@@ -8282,7 +8296,7 @@ interface operations {
8282
8296
  "application/json": components["schemas"]["Error"];
8283
8297
  };
8284
8298
  };
8285
- /** @description No active Core seat for this tenant. */
8299
+ /** @description Forbidden. NO_ACTIVE_SEAT: the account is not attached to an active seat. */
8286
8300
  403: {
8287
8301
  headers: {
8288
8302
  [name: string]: unknown;
@@ -9305,7 +9319,7 @@ interface operations {
9305
9319
  }[];
9306
9320
  /** @description Paging metadata. */
9307
9321
  paging: {
9308
- /** @description Total matching result count. */
9322
+ /** @description Total number of matching job postings, including 0 on an empty page. */
9309
9323
  total_count: number | null;
9310
9324
  };
9311
9325
  /** @description Opaque next-page cursor; null on the last page. */
@@ -9830,7 +9844,7 @@ interface operations {
9830
9844
  "application/json": components["schemas"]["Error"];
9831
9845
  };
9832
9846
  };
9833
- /** @description A temporary error occurred. Please try again. */
9847
+ /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Check `retry_likely_to_succeed`: a temporary error is worth retrying, a response that could not be interpreted is not, and carries `retry_hint: {"kind": "never"}`. */
9834
9848
  502: {
9835
9849
  headers: {
9836
9850
  [name: string]: unknown;
@@ -13148,7 +13162,7 @@ interface operations {
13148
13162
  "application/json": components["schemas"]["Error"];
13149
13163
  };
13150
13164
  };
13151
- /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Please try again. */
13165
+ /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Check `retry_likely_to_succeed`: a temporary error is worth retrying, a response that could not be interpreted is not, and carries `retry_hint: {"kind": "never"}`. */
13152
13166
  502: {
13153
13167
  headers: {
13154
13168
  [name: string]: unknown;
@@ -13272,7 +13286,7 @@ interface operations {
13272
13286
  "application/json": components["schemas"]["Error"];
13273
13287
  };
13274
13288
  };
13275
- /** @description A temporary upstream error occurred. Please try again. */
13289
+ /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Check `retry_likely_to_succeed`: a temporary error is worth retrying, a response that could not be interpreted is not, and carries `retry_hint: {"kind": "never"}`. */
13276
13290
  502: {
13277
13291
  headers: {
13278
13292
  [name: string]: unknown;
@@ -13396,7 +13410,7 @@ interface operations {
13396
13410
  "application/json": components["schemas"]["Error"];
13397
13411
  };
13398
13412
  };
13399
- /** @description A temporary upstream error occurred. Please try again. */
13413
+ /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Check `retry_likely_to_succeed`: a temporary error is worth retrying, a response that could not be interpreted is not, and carries `retry_hint: {"kind": "never"}`. */
13400
13414
  502: {
13401
13415
  headers: {
13402
13416
  [name: string]: unknown;
@@ -16099,7 +16113,7 @@ interface operations {
16099
16113
  "application/json": components["schemas"]["Error"];
16100
16114
  };
16101
16115
  };
16102
- /** @description The account does not have the required Core seat. */
16116
+ /** @description Forbidden. NO_ACTIVE_SEAT: the account is not attached to an active seat. */
16103
16117
  403: {
16104
16118
  headers: {
16105
16119
  [name: string]: unknown;
@@ -16350,7 +16364,7 @@ interface operations {
16350
16364
  "application/json": components["schemas"]["Error"];
16351
16365
  };
16352
16366
  };
16353
- /** @description The account does not have the required Core seat. */
16367
+ /** @description Forbidden. NO_ACTIVE_SEAT: the account is not attached to an active seat. */
16354
16368
  403: {
16355
16369
  headers: {
16356
16370
  [name: string]: unknown;
@@ -16575,7 +16589,7 @@ interface operations {
16575
16589
  "application/json": components["schemas"]["Error"];
16576
16590
  };
16577
16591
  };
16578
- /** @description The account does not have the required Core seat. */
16592
+ /** @description Forbidden. NO_ACTIVE_SEAT: the account is not attached to an active seat. */
16579
16593
  403: {
16580
16594
  headers: {
16581
16595
  [name: string]: unknown;
@@ -16828,7 +16842,7 @@ interface operations {
16828
16842
  "application/json": components["schemas"]["Error"];
16829
16843
  };
16830
16844
  };
16831
- /** @description The account does not have the required Core seat. */
16845
+ /** @description Forbidden. NO_ACTIVE_SEAT: the account is not attached to an active seat. */
16832
16846
  403: {
16833
16847
  headers: {
16834
16848
  [name: string]: unknown;
@@ -16998,7 +17012,7 @@ interface operations {
16998
17012
  "application/json": components["schemas"]["Error"];
16999
17013
  };
17000
17014
  };
17001
- /** @description The account does not have the required Core seat. */
17015
+ /** @description Forbidden. NO_ACTIVE_SEAT: the account is not attached to an active seat. */
17002
17016
  403: {
17003
17017
  headers: {
17004
17018
  [name: string]: unknown;
@@ -17186,7 +17200,7 @@ interface operations {
17186
17200
  "application/json": components["schemas"]["Error"];
17187
17201
  };
17188
17202
  };
17189
- /** @description Forbidden. Either the account does not have the required Core seat (TIER_NOT_ACTIVE, carries required_tier:'core'; upgrade the Curviate subscription), or LINKEDIN_FEATURE_NOT_SUBSCRIBED, the connected LinkedIn account lacks the subscription/entitlement LinkedIn requires to publish job postings, even a FREE posting (activate it on LinkedIn; reconnecting will not help). The code field distinguishes the two. */
17203
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED, the connected LinkedIn account lacks the subscription/entitlement LinkedIn requires to publish job postings, even a FREE posting (activate it on LinkedIn; reconnecting will not help). The code field distinguishes the two. */
17190
17204
  403: {
17191
17205
  headers: {
17192
17206
  [name: string]: unknown;
@@ -17322,7 +17336,7 @@ interface operations {
17322
17336
  "application/json": components["schemas"]["Error"];
17323
17337
  };
17324
17338
  };
17325
- /** @description Forbidden. Either the account does not have the required Core seat (TIER_NOT_ACTIVE, carries required_tier:'core'; upgrade the Curviate subscription), or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the connected LinkedIn account lacks the subscription/entitlement LinkedIn requires to manage job postings (the same gate that blocks publish also blocks close; activate it on LinkedIn; reconnecting will not help). The code field distinguishes the two. */
17339
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the connected LinkedIn account lacks the subscription/entitlement LinkedIn requires to manage job postings (the same gate that blocks publish also blocks close; activate it on LinkedIn; reconnecting will not help). The code field distinguishes the two. */
17326
17340
  403: {
17327
17341
  headers: {
17328
17342
  [name: string]: unknown;
@@ -17545,7 +17559,7 @@ interface operations {
17545
17559
  "application/json": components["schemas"]["Error"];
17546
17560
  };
17547
17561
  };
17548
- /** @description The account does not have the required Core seat. */
17562
+ /** @description Forbidden. NO_ACTIVE_SEAT: the account is not attached to an active seat. */
17549
17563
  403: {
17550
17564
  headers: {
17551
17565
  [name: string]: unknown;
@@ -17737,7 +17751,7 @@ interface operations {
17737
17751
  "application/json": components["schemas"]["Error"];
17738
17752
  };
17739
17753
  };
17740
- /** @description The account does not have the required Core seat. */
17754
+ /** @description Forbidden. NO_ACTIVE_SEAT: the account is not attached to an active seat. */
17741
17755
  403: {
17742
17756
  headers: {
17743
17757
  [name: string]: unknown;
@@ -17859,7 +17873,7 @@ interface operations {
17859
17873
  "application/json": components["schemas"]["Error"];
17860
17874
  };
17861
17875
  };
17862
- /** @description The account does not have the required Core seat. */
17876
+ /** @description Forbidden. NO_ACTIVE_SEAT: the account is not attached to an active seat. */
17863
17877
  403: {
17864
17878
  headers: {
17865
17879
  [name: string]: unknown;
@@ -19325,7 +19339,7 @@ interface operations {
19325
19339
  "application/json": components["schemas"]["Error"];
19326
19340
  };
19327
19341
  };
19328
- /** @description This account does not have an active Core seat. */
19342
+ /** @description Forbidden. NO_ACTIVE_SEAT: the account is not attached to an active seat. */
19329
19343
  403: {
19330
19344
  headers: {
19331
19345
  [name: string]: unknown;
@@ -19364,7 +19378,7 @@ interface operations {
19364
19378
  "application/json": components["schemas"]["Error"];
19365
19379
  };
19366
19380
  };
19367
- /** @description A temporary error occurred. Please try again. */
19381
+ /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Check `retry_likely_to_succeed`: a temporary error is worth retrying, a response that could not be interpreted is not, and carries `retry_hint: {"kind": "never"}`. */
19368
19382
  502: {
19369
19383
  headers: {
19370
19384
  [name: string]: unknown;
@@ -19452,7 +19466,7 @@ interface operations {
19452
19466
  "application/json": components["schemas"]["Error"];
19453
19467
  };
19454
19468
  };
19455
- /** @description This account does not have an active Core seat. */
19469
+ /** @description Forbidden. NO_ACTIVE_SEAT: the account is not attached to an active seat. */
19456
19470
  403: {
19457
19471
  headers: {
19458
19472
  [name: string]: unknown;
@@ -19500,7 +19514,7 @@ interface operations {
19500
19514
  "application/json": components["schemas"]["Error"];
19501
19515
  };
19502
19516
  };
19503
- /** @description A temporary error occurred. Please try again. */
19517
+ /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Check `retry_likely_to_succeed`: a temporary error is worth retrying, a response that could not be interpreted is not, and carries `retry_hint: {"kind": "never"}`. */
19504
19518
  502: {
19505
19519
  headers: {
19506
19520
  [name: string]: unknown;
@@ -19583,7 +19597,7 @@ interface operations {
19583
19597
  "application/json": components["schemas"]["Error"];
19584
19598
  };
19585
19599
  };
19586
- /** @description This account does not have an active Core seat. */
19600
+ /** @description Forbidden. NO_ACTIVE_SEAT: the account is not attached to an active seat. */
19587
19601
  403: {
19588
19602
  headers: {
19589
19603
  [name: string]: unknown;
@@ -19622,7 +19636,7 @@ interface operations {
19622
19636
  "application/json": components["schemas"]["Error"];
19623
19637
  };
19624
19638
  };
19625
- /** @description A temporary error occurred. Please try again. */
19639
+ /** @description A temporary upstream error occurred, or the upstream response could not be interpreted. Check `retry_likely_to_succeed`: a temporary error is worth retrying, a response that could not be interpreted is not, and carries `retry_hint: {"kind": "never"}`. */
19626
19640
  502: {
19627
19641
  headers: {
19628
19642
  [name: string]: unknown;
@@ -20030,7 +20044,7 @@ interface operations {
20030
20044
  "application/json": components["schemas"]["Error"];
20031
20045
  };
20032
20046
  };
20033
- /** @description Forbidden. Either TIER_NOT_ACTIVE, the Curviate seat lacks the Recruiter add-on (carries required_tier:'recruiter'; upgrade the Curviate subscription), or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the connected LinkedIn account lacks an active Recruiter subscription. The code field distinguishes the two. */
20047
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Recruiter subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
20034
20048
  403: {
20035
20049
  headers: {
20036
20050
  [name: string]: unknown;
@@ -20248,7 +20262,7 @@ interface operations {
20248
20262
  "application/json": components["schemas"]["Error"];
20249
20263
  };
20250
20264
  };
20251
- /** @description Forbidden. Either TIER_NOT_ACTIVE, the Curviate seat lacks the Recruiter add-on (carries required_tier:'recruiter'; upgrade the Curviate subscription), or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the connected LinkedIn account lacks the Recruiter subscription (activate it on LinkedIn; reconnecting will not help). The code field distinguishes the two. */
20265
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Recruiter subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
20252
20266
  403: {
20253
20267
  headers: {
20254
20268
  [name: string]: unknown;
@@ -20561,7 +20575,7 @@ interface operations {
20561
20575
  "application/json": components["schemas"]["Error"];
20562
20576
  };
20563
20577
  };
20564
- /** @description Forbidden. TIER_NOT_ACTIVE, the Curviate seat lacks the Recruiter add-on, or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the LinkedIn account does not have an active Recruiter subscription. */
20578
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Recruiter subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
20565
20579
  403: {
20566
20580
  headers: {
20567
20581
  [name: string]: unknown;
@@ -20754,7 +20768,7 @@ interface operations {
20754
20768
  "application/json": components["schemas"]["Error"];
20755
20769
  };
20756
20770
  };
20757
- /** @description Forbidden. Either TIER_NOT_ACTIVE, the Curviate seat lacks the Recruiter add-on (carries required_tier:'recruiter'; upgrade the Curviate subscription), or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the connected LinkedIn account does not have an active Recruiter subscription. The code field distinguishes the two. */
20771
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Recruiter subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
20758
20772
  403: {
20759
20773
  headers: {
20760
20774
  [name: string]: unknown;
@@ -20988,7 +21002,7 @@ interface operations {
20988
21002
  "application/json": components["schemas"]["Error"];
20989
21003
  };
20990
21004
  };
20991
- /** @description Forbidden. TIER_NOT_ACTIVE, the Curviate seat lacks the Recruiter add-on, or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the LinkedIn account does not have an active Recruiter subscription. */
21005
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Recruiter subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
20992
21006
  403: {
20993
21007
  headers: {
20994
21008
  [name: string]: unknown;
@@ -21192,7 +21206,7 @@ interface operations {
21192
21206
  "application/json": components["schemas"]["Error"];
21193
21207
  };
21194
21208
  };
21195
- /** @description Forbidden. TIER_NOT_ACTIVE, the Curviate seat lacks the Recruiter add-on, or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the LinkedIn account does not have an active Recruiter subscription. */
21209
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Recruiter subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
21196
21210
  403: {
21197
21211
  headers: {
21198
21212
  [name: string]: unknown;
@@ -21350,7 +21364,7 @@ interface operations {
21350
21364
  "application/json": components["schemas"]["Error"];
21351
21365
  };
21352
21366
  };
21353
- /** @description Forbidden. TIER_NOT_ACTIVE, the Curviate seat lacks the Recruiter add-on, or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the LinkedIn account does not have an active Recruiter subscription. */
21367
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Recruiter subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
21354
21368
  403: {
21355
21369
  headers: {
21356
21370
  [name: string]: unknown;
@@ -21604,7 +21618,7 @@ interface operations {
21604
21618
  "application/json": components["schemas"]["Error"];
21605
21619
  };
21606
21620
  };
21607
- /** @description Forbidden. TIER_NOT_ACTIVE, the Curviate seat lacks the Recruiter add-on, or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the LinkedIn account does not have an active Recruiter subscription. */
21621
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Recruiter subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
21608
21622
  403: {
21609
21623
  headers: {
21610
21624
  [name: string]: unknown;
@@ -21912,7 +21926,7 @@ interface operations {
21912
21926
  "application/json": components["schemas"]["Error"];
21913
21927
  };
21914
21928
  };
21915
- /** @description Forbidden. TIER_NOT_ACTIVE, the Curviate seat lacks the Recruiter add-on, or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the LinkedIn account does not have an active Recruiter subscription. */
21929
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Recruiter subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
21916
21930
  403: {
21917
21931
  headers: {
21918
21932
  [name: string]: unknown;
@@ -22256,7 +22270,7 @@ interface operations {
22256
22270
  "application/json": components["schemas"]["Error"];
22257
22271
  };
22258
22272
  };
22259
- /** @description Forbidden. TIER_NOT_ACTIVE, the Curviate seat lacks the Recruiter add-on, or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the LinkedIn account does not have an active Recruiter subscription. */
22273
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Recruiter subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
22260
22274
  403: {
22261
22275
  headers: {
22262
22276
  [name: string]: unknown;
@@ -22436,7 +22450,7 @@ interface operations {
22436
22450
  "application/json": components["schemas"]["Error"];
22437
22451
  };
22438
22452
  };
22439
- /** @description Forbidden. TIER_NOT_ACTIVE, the Curviate seat lacks the Recruiter add-on, or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the LinkedIn account does not have an active Recruiter subscription. */
22453
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Recruiter subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
22440
22454
  403: {
22441
22455
  headers: {
22442
22456
  [name: string]: unknown;
@@ -22644,7 +22658,7 @@ interface operations {
22644
22658
  "application/json": components["schemas"]["Error"];
22645
22659
  };
22646
22660
  };
22647
- /** @description Forbidden. TIER_NOT_ACTIVE, the Curviate seat lacks the Recruiter add-on, or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the LinkedIn account does not have an active Recruiter subscription. */
22661
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Recruiter subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
22648
22662
  403: {
22649
22663
  headers: {
22650
22664
  [name: string]: unknown;
@@ -22799,7 +22813,7 @@ interface operations {
22799
22813
  "application/json": components["schemas"]["Error"];
22800
22814
  };
22801
22815
  };
22802
- /** @description Forbidden. TIER_NOT_ACTIVE, the Curviate seat lacks the Recruiter add-on, or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the LinkedIn account does not have an active Recruiter subscription. */
22816
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Recruiter subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
22803
22817
  403: {
22804
22818
  headers: {
22805
22819
  [name: string]: unknown;
@@ -22964,7 +22978,7 @@ interface operations {
22964
22978
  "application/json": components["schemas"]["Error"];
22965
22979
  };
22966
22980
  };
22967
- /** @description Forbidden. TIER_NOT_ACTIVE, the Curviate seat lacks the Recruiter add-on, or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the LinkedIn account does not have an active Recruiter subscription. */
22981
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Recruiter subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
22968
22982
  403: {
22969
22983
  headers: {
22970
22984
  [name: string]: unknown;
@@ -23172,7 +23186,7 @@ interface operations {
23172
23186
  "application/json": components["schemas"]["Error"];
23173
23187
  };
23174
23188
  };
23175
- /** @description Forbidden. TIER_NOT_ACTIVE, the Curviate seat lacks the Recruiter add-on, or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the LinkedIn account does not have an active Recruiter subscription. */
23189
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Recruiter subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
23176
23190
  403: {
23177
23191
  headers: {
23178
23192
  [name: string]: unknown;
@@ -23352,7 +23366,7 @@ interface operations {
23352
23366
  "application/json": components["schemas"]["Error"];
23353
23367
  };
23354
23368
  };
23355
- /** @description Forbidden. TIER_NOT_ACTIVE, the Curviate seat lacks the Recruiter add-on, or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the LinkedIn account does not have an active Recruiter subscription. */
23369
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Recruiter subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
23356
23370
  403: {
23357
23371
  headers: {
23358
23372
  [name: string]: unknown;
@@ -23560,7 +23574,7 @@ interface operations {
23560
23574
  "application/json": components["schemas"]["Error"];
23561
23575
  };
23562
23576
  };
23563
- /** @description Forbidden. TIER_NOT_ACTIVE, the Curviate seat lacks the Recruiter add-on, or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the LinkedIn account does not have an active Recruiter subscription. */
23577
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Recruiter subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
23564
23578
  403: {
23565
23579
  headers: {
23566
23580
  [name: string]: unknown;
@@ -23755,7 +23769,7 @@ interface operations {
23755
23769
  "application/json": components["schemas"]["Error"];
23756
23770
  };
23757
23771
  };
23758
- /** @description Forbidden. TIER_NOT_ACTIVE, the Curviate seat lacks the Recruiter add-on, or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the LinkedIn account does not have an active Recruiter subscription. */
23772
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Recruiter subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
23759
23773
  403: {
23760
23774
  headers: {
23761
23775
  [name: string]: unknown;
@@ -23893,7 +23907,7 @@ interface operations {
23893
23907
  "application/json": components["schemas"]["Error"];
23894
23908
  };
23895
23909
  };
23896
- /** @description Forbidden. TIER_NOT_ACTIVE, the Curviate seat lacks the Recruiter add-on, or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the LinkedIn account does not have an active Recruiter subscription. */
23910
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Recruiter subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
23897
23911
  403: {
23898
23912
  headers: {
23899
23913
  [name: string]: unknown;
@@ -24038,7 +24052,7 @@ interface operations {
24038
24052
  "application/json": components["schemas"]["Error"];
24039
24053
  };
24040
24054
  };
24041
- /** @description Forbidden. TIER_NOT_ACTIVE (no Recruiter seat) or LINKEDIN_FEATURE_NOT_SUBSCRIBED (no active LinkedIn Recruiter subscription). The code field distinguishes the two. */
24055
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Recruiter subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
24042
24056
  403: {
24043
24057
  headers: {
24044
24058
  [name: string]: unknown;
@@ -24370,7 +24384,7 @@ interface operations {
24370
24384
  "application/json": components["schemas"]["Error"];
24371
24385
  };
24372
24386
  };
24373
- /** @description Forbidden. TIER_NOT_ACTIVE, the Curviate seat lacks the Recruiter add-on, or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the LinkedIn account does not have an active Recruiter subscription. */
24387
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Recruiter subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
24374
24388
  403: {
24375
24389
  headers: {
24376
24390
  [name: string]: unknown;
@@ -24578,7 +24592,7 @@ interface operations {
24578
24592
  "application/json": components["schemas"]["Error"];
24579
24593
  };
24580
24594
  };
24581
- /** @description Forbidden. TIER_NOT_ACTIVE, the Curviate seat lacks the Recruiter add-on, or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the LinkedIn account does not have an active Recruiter subscription. */
24595
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Recruiter subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
24582
24596
  403: {
24583
24597
  headers: {
24584
24598
  [name: string]: unknown;
@@ -24700,7 +24714,7 @@ interface operations {
24700
24714
  "application/json": components["schemas"]["Error"];
24701
24715
  };
24702
24716
  };
24703
- /** @description Forbidden. TIER_NOT_ACTIVE, the Curviate seat lacks the Recruiter add-on, or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the LinkedIn account does not have an active Recruiter subscription. */
24717
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Recruiter subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
24704
24718
  403: {
24705
24719
  headers: {
24706
24720
  [name: string]: unknown;
@@ -24860,7 +24874,7 @@ interface operations {
24860
24874
  "application/json": components["schemas"]["Error"];
24861
24875
  };
24862
24876
  };
24863
- /** @description Forbidden. Either TIER_NOT_ACTIVE, the Curviate seat lacks the Sales Navigator add-on (carries required_tier:'sales_nav'; upgrade the Curviate subscription), or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the connected LinkedIn account lacks the Sales Navigator subscription (activate it on LinkedIn; reconnecting will not help). The code field distinguishes the two. */
24877
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Sales Navigator subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
24864
24878
  403: {
24865
24879
  headers: {
24866
24880
  [name: string]: unknown;
@@ -25175,7 +25189,7 @@ interface operations {
25175
25189
  "application/json": components["schemas"]["Error"];
25176
25190
  };
25177
25191
  };
25178
- /** @description Forbidden. Either TIER_NOT_ACTIVE, the Curviate seat lacks the Sales Navigator add-on (carries required_tier:'sales_nav'; upgrade the Curviate subscription), or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the connected LinkedIn account lacks the Sales Navigator subscription (activate it on LinkedIn; reconnecting will not help). The code field distinguishes the two. */
25192
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Sales Navigator subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
25179
25193
  403: {
25180
25194
  headers: {
25181
25195
  [name: string]: unknown;
@@ -25323,7 +25337,7 @@ interface operations {
25323
25337
  "application/json": components["schemas"]["Error"];
25324
25338
  };
25325
25339
  };
25326
- /** @description Forbidden. Either TIER_NOT_ACTIVE, the Curviate seat lacks the Sales Navigator add-on (carries required_tier:'sales_nav'; upgrade the Curviate subscription), or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the connected LinkedIn account lacks the Sales Navigator subscription (activate it on LinkedIn; reconnecting will not help). The code field distinguishes the two. */
25340
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Sales Navigator subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
25327
25341
  403: {
25328
25342
  headers: {
25329
25343
  [name: string]: unknown;
@@ -25480,7 +25494,7 @@ interface operations {
25480
25494
  "application/json": components["schemas"]["Error"];
25481
25495
  };
25482
25496
  };
25483
- /** @description Forbidden. Either TIER_NOT_ACTIVE, the Curviate seat lacks the Sales Navigator add-on (carries required_tier:'sales_nav'; upgrade the Curviate subscription), or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the connected LinkedIn account lacks the Sales Navigator subscription (activate it on LinkedIn; reconnecting will not help). The code field distinguishes the two. */
25497
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Sales Navigator subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
25484
25498
  403: {
25485
25499
  headers: {
25486
25500
  [name: string]: unknown;
@@ -25692,7 +25706,7 @@ interface operations {
25692
25706
  "application/json": components["schemas"]["Error"];
25693
25707
  };
25694
25708
  };
25695
- /** @description Forbidden. Either TIER_NOT_ACTIVE, the Curviate seat lacks the Sales Navigator add-on (carries required_tier:'sales_nav'; upgrade the Curviate subscription), or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the connected LinkedIn account lacks the Sales Navigator subscription (activate it on LinkedIn; reconnecting will not help). The code field distinguishes the two. */
25709
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Sales Navigator subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
25696
25710
  403: {
25697
25711
  headers: {
25698
25712
  [name: string]: unknown;
@@ -26078,7 +26092,7 @@ interface operations {
26078
26092
  "application/json": components["schemas"]["Error"];
26079
26093
  };
26080
26094
  };
26081
- /** @description Forbidden. Either TIER_NOT_ACTIVE, the Curviate seat lacks the Sales Navigator add-on (carries required_tier:'sales_nav'; upgrade the Curviate subscription), or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the connected LinkedIn account lacks the Sales Navigator subscription (activate it on LinkedIn; reconnecting will not help). The code field distinguishes the two. */
26095
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Sales Navigator subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
26082
26096
  403: {
26083
26097
  headers: {
26084
26098
  [name: string]: unknown;
@@ -26225,7 +26239,7 @@ interface operations {
26225
26239
  "application/json": components["schemas"]["Error"];
26226
26240
  };
26227
26241
  };
26228
- /** @description Forbidden. Either TIER_NOT_ACTIVE, the Curviate seat lacks the Sales Navigator add-on (carries required_tier:'sales_nav'; upgrade the Curviate subscription), or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the connected LinkedIn account lacks the Sales Navigator subscription (activate it on LinkedIn; reconnecting will not help). The code field distinguishes the two. */
26242
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Sales Navigator subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
26229
26243
  403: {
26230
26244
  headers: {
26231
26245
  [name: string]: unknown;
@@ -26372,7 +26386,7 @@ interface operations {
26372
26386
  "application/json": components["schemas"]["Error"];
26373
26387
  };
26374
26388
  };
26375
- /** @description Forbidden. Either TIER_NOT_ACTIVE, the Curviate seat lacks the Sales Navigator add-on (carries required_tier:'sales_nav'; upgrade the Curviate subscription), or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the connected LinkedIn account lacks the Sales Navigator subscription (activate it on LinkedIn; reconnecting will not help). The code field distinguishes the two. */
26389
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Sales Navigator subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
26376
26390
  403: {
26377
26391
  headers: {
26378
26392
  [name: string]: unknown;
@@ -26533,7 +26547,7 @@ interface operations {
26533
26547
  "application/json": components["schemas"]["Error"];
26534
26548
  };
26535
26549
  };
26536
- /** @description Forbidden. Either TIER_NOT_ACTIVE, the Curviate seat lacks the Sales Navigator add-on (carries required_tier:'sales_nav'; upgrade the Curviate subscription), or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the connected LinkedIn account lacks the Sales Navigator subscription (activate it on LinkedIn; reconnecting will not help). The code field distinguishes the two. */
26550
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Sales Navigator subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
26537
26551
  403: {
26538
26552
  headers: {
26539
26553
  [name: string]: unknown;
@@ -27014,7 +27028,7 @@ interface operations {
27014
27028
  "application/json": components["schemas"]["Error"];
27015
27029
  };
27016
27030
  };
27017
- /** @description Forbidden. Either TIER_NOT_ACTIVE, the Curviate seat lacks the Sales Navigator add-on (carries required_tier:'sales_nav'; upgrade the Curviate subscription), or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the connected LinkedIn account lacks the Sales Navigator subscription (activate it on LinkedIn; reconnecting will not help). The code field distinguishes the two. */
27031
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Sales Navigator subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
27018
27032
  403: {
27019
27033
  headers: {
27020
27034
  [name: string]: unknown;
@@ -27286,7 +27300,7 @@ interface operations {
27286
27300
  "application/json": components["schemas"]["Error"];
27287
27301
  };
27288
27302
  };
27289
- /** @description Forbidden. Either TIER_NOT_ACTIVE, the Curviate seat lacks the Sales Navigator add-on (carries required_tier:'sales_nav'; upgrade the Curviate subscription), or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the connected LinkedIn account lacks the Sales Navigator subscription (activate it on LinkedIn; reconnecting will not help). The code field distinguishes the two. */
27303
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Sales Navigator subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
27290
27304
  403: {
27291
27305
  headers: {
27292
27306
  [name: string]: unknown;
@@ -27687,7 +27701,7 @@ interface operations {
27687
27701
  "application/json": components["schemas"]["Error"];
27688
27702
  };
27689
27703
  };
27690
- /** @description Forbidden. Either TIER_NOT_ACTIVE, the Curviate seat lacks the Sales Navigator add-on (carries required_tier:'sales_nav'; upgrade the Curviate subscription), or LINKEDIN_FEATURE_NOT_SUBSCRIBED; the connected LinkedIn account lacks the Sales Navigator subscription (activate it on LinkedIn; reconnecting will not help). The code field distinguishes the two. */
27704
+ /** @description Forbidden. Either NO_ACTIVE_SEAT (the account is not attached to an active seat), or LINKEDIN_FEATURE_NOT_SUBSCRIBED (the connected LinkedIn account lacks the Sales Navigator subscription; activate it on LinkedIn, reconnecting will not help). The code field distinguishes the two. */
27691
27705
  403: {
27692
27706
  headers: {
27693
27707
  [name: string]: unknown;
@@ -27817,7 +27831,7 @@ interface operations {
27817
27831
  seat_id?: string | null;
27818
27832
  /** @description ISO-8601 UTC connection timestamp. */
27819
27833
  connected_at?: string | null;
27820
- /** @description The seat-derived connection scope this account was last connected with (e.g. ["classic","company","sales_navigator"]). Scope is derived from the account's seat; there is no products input. Null for accounts connected before this was recorded; not attachment truth for Company Pages. */
27834
+ /** @description The connection scope this account was last connected with (e.g. ["classic","company","sales_navigator","recruiter"]). A connect asks for every product and LinkedIn activates the ones the account actually has, so this is what was ASKED for, narrowed only by an explicit linkedin_premium on that connect. A linkedin_premium narrowing is not remembered between connects, so this shows what the LAST connect asked for and a reconnect that omits the field widens it again. Null for accounts connected before this was recorded; not attachment truth for Company Pages. */
27821
27835
  requested_products?: ("classic" | "company" | "sales_navigator" | "recruiter")[] | null;
27822
27836
  /** @description ISO-8601 UTC creation timestamp of the underlying LinkedIn account, distinct from connected_at. Null until the first background enrichment lands. */
27823
27837
  substrate_created_at?: string | null;
@@ -27925,7 +27939,7 @@ interface operations {
27925
27939
  last_checked_at?: string;
27926
27940
  /** @description The seat this account occupies (null for an admin seatless account). */
27927
27941
  seat_id?: string | null;
27928
- /** @description The seat-derived connection scope this account was last connected with (e.g. ["classic","company","sales_navigator"]). Scope is derived from the account's seat; there is no products input. Null for accounts connected before this was recorded; not attachment truth for Company Pages. */
27942
+ /** @description The connection scope this account was last connected with (e.g. ["classic","company","sales_navigator","recruiter"]). A connect asks for every product and LinkedIn activates the ones the account actually has, so this is what was ASKED for, narrowed only by an explicit linkedin_premium on that connect. A linkedin_premium narrowing is not remembered between connects, so this shows what the LAST connect asked for and a reconnect that omits the field widens it again. Null for accounts connected before this was recorded; not attachment truth for Company Pages. */
27929
27943
  requested_products?: ("classic" | "company" | "sales_navigator" | "recruiter")[] | null;
27930
27944
  /** @description ISO-8601 UTC creation timestamp of the underlying LinkedIn account, distinct from connected_at. Null until the first background enrichment lands. */
27931
27945
  substrate_created_at?: string | null;
@@ -28353,10 +28367,10 @@ interface operations {
28353
28367
  /** @description Present = re-authenticate this existing account in place (reconnect); omit = connect a new account. */
28354
28368
  account_id?: string;
28355
28369
  /**
28356
- * @description Free-trial seats only: which premium to enable for the trial (at most one). Ignored for paid seats. Defaults to none.
28370
+ * @description Optional. Which LinkedIn premium surface this connection should ask for: 'sales_navigator' or 'recruiter'. Omit it and the connection asks for every product, and LinkedIn activates whichever ones the account actually has. One LinkedIn account can hold only one of the two premium surfaces, and when both are asked for Sales Navigator takes precedence, so set this to 'recruiter' if the account holds both and you want the Recruiter surface. This applies per connection and is not remembered: state it on every connect and reconnect where Recruiter must win.
28357
28371
  * @enum {string}
28358
28372
  */
28359
- trial_premium?: "none" | "sales_navigator" | "recruiter";
28373
+ linkedin_premium?: "sales_navigator" | "recruiter";
28360
28374
  /** @description Managed proxy location hint as an ISO 3166-1 alpha-2 country code (e.g. US, DE). */
28361
28375
  country?: string;
28362
28376
  /** @description IPv4 address used to infer the managed proxy location. */
@@ -28386,7 +28400,7 @@ interface operations {
28386
28400
  /** @description Maximum number of messages to sync per chat. */
28387
28401
  messages?: number;
28388
28402
  };
28389
- /** @description Which Recruiter contract to bind this account to (Recruiter tier only). */
28403
+ /** @description Which Recruiter contract to bind this account to. Only meaningful when the LinkedIn account holds a Recruiter subscription. */
28390
28404
  recruiter_contract_id?: string;
28391
28405
  };
28392
28406
  };
@@ -28508,7 +28522,7 @@ interface operations {
28508
28522
  "application/json": components["schemas"]["Error"];
28509
28523
  };
28510
28524
  };
28511
- /** @description Either LINKEDIN_FEATURE_NOT_SUBSCRIBED (the seat requested a premium product, Sales Navigator or Recruiter, that this LinkedIn account is not subscribed to; match the seat tier to the account's actual plan, or use a different seat), or ACCOUNT_RESTRICTED (LinkedIn has restricted this account; sign in to LinkedIn to see what it needs, resolve it there, then connect again). The code field distinguishes the two. */
28525
+ /** @description Either LINKEDIN_FEATURE_NOT_SUBSCRIBED (this LinkedIn account is not subscribed to a premium product the connection asked for, Sales Navigator or Recruiter; activate that subscription on LinkedIn and connect again, or set linkedin_premium to the premium the account actually holds), or ACCOUNT_RESTRICTED (LinkedIn has restricted this account; sign in to LinkedIn to see what it needs, resolve it there, then connect again). The code field distinguishes the two. */
28512
28526
  403: {
28513
28527
  headers: {
28514
28528
  [name: string]: unknown;
@@ -29975,11 +29989,6 @@ interface operations {
29975
29989
  description?: string;
29976
29990
  /** @description Present and true when the event carries LinkedIn-specific content. */
29977
29991
  linkedin_only?: boolean;
29978
- /**
29979
- * @description Required add-on tier. Present only on tier-gated events.
29980
- * @enum {string}
29981
- */
29982
- tier?: "recruiter" | "sales_nav";
29983
29992
  /**
29984
29993
  * @description Delivery timing. Omitted (equivalent to 'realtime') on every live-pushed event. 'no_longer_realtime' means no push exists for this event; 'not_realtime' means delivery is not guaranteed sub-second and may lag the underlying LinkedIn event, typically because it is detected by a poll rather than pushed, though a given event's own reference article may document an additional immediate path.
29985
29994
  * @enum {string}
@@ -30444,11 +30453,6 @@ interface operations {
30444
30453
  * @enum {string}
30445
30454
  */
30446
30455
  limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
30447
- /**
30448
- * @description The Curviate seat tier attached to this account when it disagrees with `limit_profile`, and null when the two agree or the account holds no seat. A seat records what you bought from Curviate; `limit_profile` records what LinkedIn currently grants, and a lapsed subscription moves one and not the other. The detected product always wins the numbers, so this is a report, not a refusal: a `recruiter` seat here means you are paying for Recruiter on an account LinkedIn does not currently grant it to. `core` alongside `basic` or `premium` is agreement, not a mismatch: Premium is a LinkedIn product, not a Curviate tier. A free-trial seat never reports here, because a trial is not a purchase, and neither does a seat whose entitlement has not started yet or has already lapsed.
30449
- * @enum {string|null}
30450
- */
30451
- seat_tier_mismatch?: "core" | "sn" | "recruiter" | null;
30452
30456
  /**
30453
30457
  * @description Where `limit_profile` came from. `detected`: Curviate read it from LinkedIn, at `limit_profile_detected_at`. `operator`: it was set through this operation and holds until the account next connects, or until you send `limit_profile_source: "default"` on this operation, which releases it. `default`: it has never been observed, so the value is the seeded `basic` and says nothing about the account; Curviate detects it on the account's next read or connect.
30454
30458
  * @enum {string}
@@ -30709,8 +30713,6 @@ interface operations {
30709
30713
  object?: unknown;
30710
30714
  /** @description READ-ONLY. The account this document describes; the path names it. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
30711
30715
  account_id?: unknown;
30712
- /** @description READ-ONLY. The Curviate seat tier that disagrees with `limit_profile`. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
30713
- seat_tier_mismatch?: unknown;
30714
30716
  /**
30715
30717
  * @description Where `limit_profile` came from: `default` (never observed), `detected` (read from LinkedIn) or `operator` (set through this operation). Sending `default` releases an operator override: the value is re-read from LinkedIn on the account's next read or connect. Sending `detected` or `operator` is accepted and ignored, so the whole document round-trips.
30716
30718
  * @enum {string}
@@ -30749,11 +30751,6 @@ interface operations {
30749
30751
  * @enum {string}
30750
30752
  */
30751
30753
  limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
30752
- /**
30753
- * @description The Curviate seat tier attached to this account when it disagrees with `limit_profile`, and null when the two agree or the account holds no seat. A seat records what you bought from Curviate; `limit_profile` records what LinkedIn currently grants, and a lapsed subscription moves one and not the other. The detected product always wins the numbers, so this is a report, not a refusal: a `recruiter` seat here means you are paying for Recruiter on an account LinkedIn does not currently grant it to. `core` alongside `basic` or `premium` is agreement, not a mismatch: Premium is a LinkedIn product, not a Curviate tier. A free-trial seat never reports here, because a trial is not a purchase, and neither does a seat whose entitlement has not started yet or has already lapsed.
30754
- * @enum {string|null}
30755
- */
30756
- seat_tier_mismatch?: "core" | "sn" | "recruiter" | null;
30757
30754
  /**
30758
30755
  * @description Where `limit_profile` came from. `detected`: Curviate read it from LinkedIn, at `limit_profile_detected_at`. `operator`: it was set through this operation and holds until the account next connects, or until you send `limit_profile_source: "default"` on this operation, which releases it. `default`: it has never been observed, so the value is the seeded `basic` and says nothing about the account; Curviate detects it on the account's next read or connect.
30759
30756
  * @enum {string}
@@ -31199,16 +31196,31 @@ declare class AuthResource {
31199
31196
  * account) rather than connecting a brand-new one; it is absent on a normal
31200
31197
  * connect.
31201
31198
  *
31202
- * Connection scope (which LinkedIn products are enabled: classic, company,
31203
- * a premium tier) is **seat-derived**: there is no products input on this
31204
- * body, and the recorded scope is readable back as `requested_products` on
31205
- * the account (`accounts.list()` / `accounts.get()`). A reconnect that
31206
- * would change scope must use `auth_method: "credentials"`, since a cookie
31207
- * replay cannot change scope and throws `CurviateError(code:
31208
- * "REAUTH_REQUIRED")` instead. A seat resolving to both individual-Premium
31209
- * tiers at once throws `CurviateError(code: "PREMIUM_CONFLICT")` (LinkedIn
31210
- * permits only one per profile). Pin a managed proxy with the optional
31211
- * `country`/`ip`, or supply `proxy` to override it entirely.
31199
+ * Connection scope (which LinkedIn products are enabled) is not something
31200
+ * you enumerate and it is NOT derived from the seat: the connect asks for
31201
+ * every product (classic, company, sales_navigator, recruiter) and LinkedIn
31202
+ * activates whichever ones the account actually holds. The recorded scope is
31203
+ * readable back as `requested_products` on the account
31204
+ * (`accounts.list()` / `accounts.get()`), and it is what was ASKED for, not
31205
+ * proof of attachment.
31206
+ *
31207
+ * `linkedin_premium` (`"sales_navigator"` | `"recruiter"`) is the one
31208
+ * optional narrowing. A LinkedIn account can hold only one of the two
31209
+ * premium surfaces, and when both are asked for Sales Navigator wins, so set
31210
+ * it to `"recruiter"` for an account that holds both and needs the Recruiter
31211
+ * surface. **It applies to this connection only and is never remembered**:
31212
+ * a later connect or reconnect that omits it widens the scope back to every
31213
+ * product, so state it on every call where Recruiter must win. There is no
31214
+ * account-level premium preference to set once.
31215
+ *
31216
+ * A reconnect that would change scope must use `auth_method: "credentials"`,
31217
+ * since a cookie replay cannot change scope and throws
31218
+ * `CurviateError(code: "REAUTH_REQUIRED")` instead. Asking for a premium the
31219
+ * LinkedIn account does not hold throws
31220
+ * `CurviateError(code: "LINKEDIN_FEATURE_NOT_SUBSCRIBED")` (403); the remedy
31221
+ * is to activate the subscription on LinkedIn or to point `linkedin_premium`
31222
+ * at the premium the account really has. Pin a managed proxy with the
31223
+ * optional `country`/`ip`, or supply `proxy` to override it entirely.
31212
31224
  */
31213
31225
  intent(body: AuthIntentBody): Promise<AuthIntentResult>;
31214
31226
  /**
@@ -32072,7 +32084,9 @@ declare class FeedResource {
32072
32084
  }
32073
32085
 
32074
32086
  /**
32075
- * Inboxes resource, 2 methods (Beta).
32087
+ * Inboxes resource.
32088
+ *
32089
+ * @beta Every operation in this namespace is beta.
32076
32090
  *
32077
32091
  * Account-scoped: the bound context injects `account_id` as the leading
32078
32092
  * `/v1/` path segment on every request (account-first grammar), never a
@@ -32130,6 +32144,10 @@ declare class InboxesResource {
32130
32144
  * const companyPage = (items ?? []).find((i) => i.kind === "company");
32131
32145
  * console.log(companyPage?.id, companyPage?.name, hint);
32132
32146
  * // companyPage?.id is what you pass to listChats(), e.g. "COMPANY_83734124_PRIMARY"
32147
+ *
32148
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32149
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32150
+ * or the request carries the `X-Curviate-Beta` header.
32133
32151
  */
32134
32152
  list(params?: InboxListQuery): Promise<InboxListPage>;
32135
32153
  /**
@@ -32160,6 +32178,10 @@ declare class InboxesResource {
32160
32178
  * or `"COMPANY_83734124_PRIMARY"`).
32161
32179
  * @param params - optional `limit` (1-25, default 20) and an opaque
32162
32180
  * `cursor` for pagination.
32181
+ *
32182
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32183
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32184
+ * or the request carries the `X-Curviate-Beta` header.
32163
32185
  */
32164
32186
  listChats(inboxId: string, params?: InboxChatListQuery): Promise<InboxChatListPage>;
32165
32187
  }
@@ -32260,7 +32282,25 @@ declare class NotificationsResource {
32260
32282
  }
32261
32283
 
32262
32284
  /**
32263
- * Sales Navigator resource: 12 methods (tier: sn).
32285
+ * Sales Navigator resource.
32286
+ *
32287
+ * @beta Every operation in this namespace is beta. None of it has been
32288
+ * exercised against a real LinkedIn Sales Navigator subscription yet, so
32289
+ * response shapes may still move. While an operation is beta-GATED it refuses
32290
+ * `BETA_NOT_ENABLED` (403) until a human enables beta for the tenant in
32291
+ * Settings, or the request carries the `X-Curviate-Beta` header. The beta
32292
+ * badge is a superset of the gate: a badged operation is not necessarily
32293
+ * gated, so read the code on a refusal rather than inferring it from the
32294
+ * badge.
32295
+ *
32296
+ * NO CURVIATE-SIDE ENTITLEMENT. There is no Sales Navigator product to buy
32297
+ * from Curviate and no tier on a seat: one ordinary paid seat entitles every
32298
+ * method here, and a tenant with no active seat covering the account refuses
32299
+ * `NO_ACTIVE_SEAT` (403) exactly as it does on any other namespace. What this
32300
+ * namespace does need is the LINKEDIN account's own Sales Navigator
32301
+ * subscription; an account whose LinkedIn lacks it refuses
32302
+ * `LINKEDIN_FEATURE_NOT_SUBSCRIBED` (403), and that remedy lives on LinkedIn,
32303
+ * not in Curviate billing.
32264
32304
  *
32265
32305
  * Account-scoped: the bound context injects `account_id` as the leading
32266
32306
  * `/v1/` path segment on every request (account-first grammar), never a
@@ -32322,50 +32362,85 @@ declare class SalesNavigatorResource {
32322
32362
  /**
32323
32363
  * Search LinkedIn members using the full Sales Navigator filter set.
32324
32364
  * `POST /v1/{account_id}/sales-navigator/search/people`
32325
- * Requires tier `sn`. Returns `TIER_NOT_ACTIVE` (403) when the seat lacks it.
32365
+ *
32366
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32367
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32368
+ * or the request carries the `X-Curviate-Beta` header.
32326
32369
  */
32327
32370
  searchPeople(body: SNSearchPeopleBody, query?: Partial<SNSearchPeopleQuery>): Promise<SNSearchPeopleResult>;
32328
32371
  /**
32329
32372
  * Search LinkedIn companies using the full Sales Navigator company filter set.
32330
32373
  * `POST /v1/{account_id}/sales-navigator/search/companies`
32374
+ *
32375
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32376
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32377
+ * or the request carries the `X-Curviate-Beta` header.
32331
32378
  */
32332
32379
  searchCompanies(body: SNSearchCompaniesBody, query?: Partial<SNSearchCompaniesQuery>): Promise<SNSearchCompaniesResult>;
32333
32380
  /**
32334
32381
  * Resolve human-readable terms to opaque Sales Navigator filter IDs.
32335
32382
  * `GET /v1/{account_id}/sales-navigator/search/parameters`
32383
+ *
32384
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32385
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32386
+ * or the request carries the `X-Curviate-Beta` header.
32336
32387
  */
32337
32388
  getParameters(query: SNGetParametersQuery): Promise<SNGetParametersResult>;
32338
32389
  /**
32339
32390
  * Start a new Sales Navigator chat. `attachments[]`, when supplied, carry
32340
32391
  * base64-encoded file bytes, always sent as JSON, never multipart.
32341
32392
  * `POST /v1/{account_id}/sales-navigator/chats`
32393
+ *
32394
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32395
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32396
+ * or the request carries the `X-Curviate-Beta` header.
32342
32397
  */
32343
32398
  startChat(body: SNStartChatBody): Promise<SNStartChatResult>;
32344
32399
  /**
32345
32400
  * Retrieve a LinkedIn profile with Sales Navigator enrichment.
32346
32401
  * `GET /v1/{account_id}/sales-navigator/profiles/{identifier}`
32402
+ *
32403
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32404
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32405
+ * or the request carries the `X-Curviate-Beta` header.
32347
32406
  */
32348
32407
  getProfile(identifier: string, query?: Partial<SNGetProfileQuery>): Promise<SNGetProfileResult>;
32349
32408
  /**
32350
32409
  * List the saved-account (company) lists on the operator's Sales Navigator seat.
32351
32410
  * `GET /v1/{account_id}/sales-navigator/account-lists`
32411
+ *
32412
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32413
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32414
+ * or the request carries the `X-Curviate-Beta` header.
32352
32415
  */
32353
32416
  accountLists(query?: Partial<SNAccountListsQuery>): Promise<SNAccountListsResult>;
32354
32417
  /**
32355
32418
  * List the saved-lead (member) lists on the operator's Sales Navigator seat.
32356
32419
  * `GET /v1/{account_id}/sales-navigator/lead-lists`
32420
+ *
32421
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32422
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32423
+ * or the request carries the `X-Curviate-Beta` header.
32357
32424
  */
32358
32425
  leadLists(query?: Partial<SNLeadListsQuery>): Promise<SNLeadListsResult>;
32359
32426
  /**
32360
32427
  * Browse the saved accounts (companies) in one account list. Pass optional
32361
32428
  * `persona` / `filter` / `sort_by` / `sort_order` filters in the body.
32362
32429
  * `POST /v1/{account_id}/sales-navigator/account-lists/{list_id}`
32430
+ *
32431
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32432
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32433
+ * or the request carries the `X-Curviate-Beta` header.
32363
32434
  */
32364
32435
  browseAccountList(listId: string, body?: SNBrowseAccountListBody, query?: Partial<SNBrowseAccountListQuery>): Promise<SNBrowseAccountListResult>;
32365
32436
  /**
32366
32437
  * Browse the saved leads (members) in one lead list. Pass optional
32367
32438
  * `spotlight` / `sort_by` / `sort_order` filters in the body.
32368
32439
  * `POST /v1/{account_id}/sales-navigator/lead-lists/{list_id}`
32440
+ *
32441
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32442
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32443
+ * or the request carries the `X-Curviate-Beta` header.
32369
32444
  */
32370
32445
  browseLeadList(listId: string, body?: SNBrowseLeadListBody, query?: Partial<SNBrowseLeadListQuery>): Promise<SNBrowseLeadListResult>;
32371
32446
  /**
@@ -32375,12 +32450,20 @@ declare class SalesNavigatorResource {
32375
32450
  *
32376
32451
  * No `saved` boolean is invented; a `2xx` response body is the success
32377
32452
  * signal (the substrate returns no success flag).
32453
+ *
32454
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32455
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32456
+ * or the request carries the `X-Curviate-Beta` header.
32378
32457
  */
32379
32458
  saveAccount(input: SNSaveAccountInput): Promise<SNSaveAccountResult>;
32380
32459
  /**
32381
32460
  * Save a Sales Navigator member into a lead list. Body is just `{user_id}`;
32382
32461
  * `account_id` lives in the path, not the body.
32383
32462
  * `POST /v1/{account_id}/sales-navigator/lead-lists/{list_id}/save`
32463
+ *
32464
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32465
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32466
+ * or the request carries the `X-Curviate-Beta` header.
32384
32467
  */
32385
32468
  saveLead(input: SNSaveLeadInput): Promise<SNSaveLeadResult>;
32386
32469
  /**
@@ -32388,12 +32471,33 @@ declare class SalesNavigatorResource {
32388
32471
  * `POST /v1/{account_id}/sales-navigator/search`
32389
32472
  * `url` is the only accepted body field. Response items are polymorphic,
32390
32473
  * each discriminated individually by its own `object`.
32474
+ *
32475
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32476
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32477
+ * or the request carries the `X-Curviate-Beta` header.
32391
32478
  */
32392
32479
  searchFromUrl(body: SNSearchFromUrlBody, query?: Partial<SNSearchFromUrlQuery>): Promise<SNSearchFromUrlResult>;
32393
32480
  }
32394
32481
 
32395
32482
  /**
32396
- * Recruiter resource: 23 methods (tier: recruiter), project-centric rebuild.
32483
+ * Recruiter resource, a project-centric rebuild.
32484
+ *
32485
+ * @beta Every operation in this namespace is beta. None of it has been
32486
+ * exercised against a real LinkedIn Recruiter subscription yet, so response
32487
+ * shapes may still move. While an operation is beta-GATED it refuses
32488
+ * `BETA_NOT_ENABLED` (403) until a human enables beta for the tenant in
32489
+ * Settings, or the request carries the `X-Curviate-Beta` header. The beta
32490
+ * badge is a superset of the gate: a badged operation is not necessarily
32491
+ * gated, so read the code on a refusal rather than inferring it from the
32492
+ * badge.
32493
+ *
32494
+ * NO CURVIATE-SIDE ENTITLEMENT. There is no Recruiter product to buy from
32495
+ * Curviate and no tier on a seat: one ordinary paid seat entitles every method
32496
+ * here, and a tenant with no active seat covering the account refuses
32497
+ * `NO_ACTIVE_SEAT` (403) exactly as it does on any other namespace. What this
32498
+ * namespace does need is the LINKEDIN account's own Recruiter subscription; an
32499
+ * account whose LinkedIn lacks it refuses `LINKEDIN_FEATURE_NOT_SUBSCRIBED`
32500
+ * (403), and that remedy lives on LinkedIn, not in Curviate billing.
32397
32501
  *
32398
32502
  * Account-scoped: the bound context injects `account_id` as the leading
32399
32503
  * `/v1/` path segment on every request (account-first grammar), never a
@@ -32472,23 +32576,39 @@ declare class RecruiterResource {
32472
32576
  * target's public identifier, or a member id. Request specific profile
32473
32577
  * sections via `with_sections` (repeatable query param).
32474
32578
  * `GET /v1/{account_id}/recruiter/profiles/{user_id}`
32579
+ *
32580
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32581
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32582
+ * or the request carries the `X-Curviate-Beta` header.
32475
32583
  */
32476
32584
  getProfile(identifier: string, params?: Partial<RecruiterGetProfileQuery>): Promise<RecruiterGetProfileResult>;
32477
32585
  /**
32478
32586
  * Start a Recruiter chat (InMail). JSON-only, `subject` and `signature`
32479
32587
  * are REQUIRED; optional attachments ride the body as base64-encoded
32480
32588
  * objects (no multipart). `POST /v1/{account_id}/recruiter/chats`
32589
+ *
32590
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32591
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32592
+ * or the request carries the `X-Curviate-Beta` header.
32481
32593
  */
32482
32594
  startChat(body: RecruiterStartChatBody): Promise<RecruiterStartChatResult>;
32483
32595
  /**
32484
32596
  * Search LinkedIn members using Recruiter filters. `limit`/`cursor` stay
32485
32597
  * TOP-LEVEL query params. `POST /v1/{account_id}/recruiter/search/people`
32598
+ *
32599
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32600
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32601
+ * or the request carries the `X-Curviate-Beta` header.
32486
32602
  */
32487
32603
  searchPeople(body: RecruiterSearchPeopleBody, params?: Partial<RecruiterSearchPeopleQuery>): Promise<RecruiterSearchPeopleResult>;
32488
32604
  /**
32489
32605
  * Resolve human-readable terms to opaque Recruiter filter ids. POST (was
32490
32606
  * GET): the body is a `source`-discriminated oneOf, `APPLICANTS`/`PIPELINE`
32491
32607
  * require `project_id`. `POST /v1/{account_id}/recruiter/search/parameters`
32608
+ *
32609
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32610
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32611
+ * or the request carries the `X-Curviate-Beta` header.
32492
32612
  */
32493
32613
  searchParameters(body: RecruiterSearchParametersBody, params?: Partial<RecruiterSearchParametersQuery>): Promise<RecruiterSearchParametersResult>;
32494
32614
  /**
@@ -32496,6 +32616,10 @@ declare class RecruiterResource {
32496
32616
  * `RECRUITER_SEARCH` talent-pool channel) is REQUIRED. `limit`/`cursor` stay
32497
32617
  * TOP-LEVEL query params.
32498
32618
  * `POST /v1/{account_id}/recruiter/projects/{project_id}/talent-pool/search`
32619
+ *
32620
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32621
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32622
+ * or the request carries the `X-Curviate-Beta` header.
32499
32623
  */
32500
32624
  searchTalentPool(projectId: string, body: RecruiterSearchTalentPoolBody, params?: Partial<RecruiterSearchTalentPoolQuery>): Promise<RecruiterSearchTalentPoolResult>;
32501
32625
  /**
@@ -32503,22 +32627,38 @@ declare class RecruiterResource {
32503
32627
  * nothing else in the body. The response is a 3-way oneOf (people-search,
32504
32628
  * job-applicant list, or pipeline-candidate list) keyed by the URL kind.
32505
32629
  * `POST /v1/{account_id}/recruiter/search`
32630
+ *
32631
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32632
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32633
+ * or the request carries the `X-Curviate-Beta` header.
32506
32634
  */
32507
32635
  searchFromUrl(body: RecruiterSearchFromUrlBody, params?: Partial<RecruiterSearchFromUrlQuery>): Promise<RecruiterSearchFromUrlResult>;
32508
32636
  /**
32509
32637
  * List Recruiter hiring projects visible to the account.
32510
32638
  * `GET /v1/{account_id}/recruiter/projects`
32639
+ *
32640
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32641
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32642
+ * or the request carries the `X-Curviate-Beta` header.
32511
32643
  */
32512
32644
  listProjects(params?: Partial<RecruiterListProjectsQuery>): Promise<RecruiterListProjectsResult>;
32513
32645
  /**
32514
32646
  * Get a single Recruiter hiring project (owner, metadata, talent_pool,
32515
32647
  * pipeline). `GET /v1/{account_id}/recruiter/projects/{project_id}`
32648
+ *
32649
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32650
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32651
+ * or the request carries the `X-Curviate-Beta` header.
32516
32652
  */
32517
32653
  getProject(projectId: string): Promise<RecruiterGetProjectResult>;
32518
32654
  /**
32519
32655
  * Edit a Recruiter project's config: all fields optional; omitted fields
32520
32656
  * are left unchanged. Returns a thin acknowledgement only.
32521
32657
  * `PATCH /v1/{account_id}/recruiter/projects/{project_id}`
32658
+ *
32659
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32660
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32661
+ * or the request carries the `X-Curviate-Beta` header.
32522
32662
  */
32523
32663
  updateProject(projectId: string, body: RecruiterUpdateProjectBody): Promise<RecruiterUpdateProjectResult>;
32524
32664
  /**
@@ -32526,35 +32666,59 @@ declare class RecruiterResource {
32526
32666
  * an all-optional filter set, no state mutates). `limit`/`cursor` stay
32527
32667
  * TOP-LEVEL query params.
32528
32668
  * `POST /v1/{account_id}/recruiter/projects/{project_id}/pipeline`
32669
+ *
32670
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32671
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32672
+ * or the request carries the `X-Curviate-Beta` header.
32529
32673
  */
32530
32674
  listPipeline(projectId: string, body?: RecruiterListPipelineBody, params?: Partial<RecruiterListPipelineQuery>): Promise<RecruiterListPipelineResult>;
32531
32675
  /**
32532
32676
  * Get the single job posting attached to a Recruiter project (the surface
32533
32677
  * returns one posting, not a list; a project with no attached job 404s).
32534
32678
  * `GET /v1/{account_id}/recruiter/projects/{project_id}/jobs`
32679
+ *
32680
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32681
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32682
+ * or the request carries the `X-Curviate-Beta` header.
32535
32683
  */
32536
32684
  getProjectJob(projectId: string): Promise<RecruiterProjectJob>;
32537
32685
  /**
32538
32686
  * Create a job-posting DRAFT attached to an EXISTING project, `project_name`
32539
32687
  * is not accepted (the project comes from the path). Never publishes, never
32540
32688
  * spends money. `POST /v1/{account_id}/recruiter/projects/{project_id}/jobs`
32689
+ *
32690
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32691
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32692
+ * or the request carries the `X-Curviate-Beta` header.
32541
32693
  */
32542
32694
  createProjectJob(projectId: string, body: RecruiterCreateProjectJobBody): Promise<RecruiterCreateProjectJobResult>;
32543
32695
  /**
32544
32696
  * Get pricing to publish a project's job posting; price a publish before
32545
32697
  * committing any money.
32546
32698
  * `GET /v1/{account_id}/recruiter/projects/{project_id}/jobs/{job_id}/budget`
32699
+ *
32700
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32701
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32702
+ * or the request carries the `X-Curviate-Beta` header.
32547
32703
  */
32548
32704
  getProjectJobBudget(projectId: string, jobId: string): Promise<RecruiterProjectJobBudget>;
32549
32705
  /**
32550
32706
  * Create a job-posting DRAFT together with a brand-new hiring project,
32551
32707
  * `project_name` is REQUIRED; `description` must be >= 200 characters. Never
32552
32708
  * publishes, never spends money. `POST /v1/{account_id}/recruiter/jobs`
32709
+ *
32710
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32711
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32712
+ * or the request carries the `X-Curviate-Beta` header.
32553
32713
  */
32554
32714
  createJob(body: RecruiterCreateJobBody): Promise<RecruiterCreateJobResult>;
32555
32715
  /**
32556
32716
  * List Recruiter job postings. `limit`/`cursor` stay TOP-LEVEL query params.
32557
32717
  * `GET /v1/{account_id}/recruiter/jobs`
32718
+ *
32719
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32720
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32721
+ * or the request carries the `X-Curviate-Beta` header.
32558
32722
  */
32559
32723
  listJobs(params?: Partial<RecruiterListJobsQuery>): Promise<RecruiterListJobsResult>;
32560
32724
  /**
@@ -32567,6 +32731,10 @@ declare class RecruiterResource {
32567
32731
  * client-side; the wire request always carries the numeric id. Throws
32568
32732
  * `CurviateError({ code: 'INVALID_REQUEST' })` synchronously if neither
32569
32733
  * form can be recognized.
32734
+ *
32735
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32736
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32737
+ * or the request carries the `X-Curviate-Beta` header.
32570
32738
  */
32571
32739
  getJob(jobIdOrUrl: string): Promise<RecruiterJobDetail>;
32572
32740
  /**
@@ -32574,6 +32742,10 @@ declare class RecruiterResource {
32574
32742
  * change. MONEY WARNING: editing an already-published (LISTED) posting
32575
32743
  * mutates a live, money-spending listing.
32576
32744
  * `PATCH /v1/{account_id}/recruiter/projects/{project_id}/jobs/{job_id}`
32745
+ *
32746
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32747
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32748
+ * or the request carries the `X-Curviate-Beta` header.
32577
32749
  */
32578
32750
  updateProjectJob(projectId: string, jobId: string, body: RecruiterUpdateProjectJobBody): Promise<RecruiterUpdateProjectJobResult>;
32579
32751
  /**
@@ -32583,6 +32755,10 @@ declare class RecruiterResource {
32583
32755
  * the connected account's LinkedIn payment method; supplying `budget` IS the
32584
32756
  * explicit opt-in).
32585
32757
  * `POST /v1/{account_id}/recruiter/projects/{project_id}/jobs/{job_id}/publish`
32758
+ *
32759
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32760
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32761
+ * or the request carries the `X-Curviate-Beta` header.
32586
32762
  */
32587
32763
  publishJob(projectId: string, jobId: string, body: RecruiterPublishJobBody): Promise<RecruiterPublishJobResult>;
32588
32764
  /**
@@ -32590,12 +32766,20 @@ declare class RecruiterResource {
32590
32766
  * (bodyless). Closing an already-published (LISTED) posting cannot be
32591
32767
  * undone; there is no re-open operation.
32592
32768
  * `POST /v1/{account_id}/recruiter/projects/{project_id}/jobs/{job_id}/close`
32769
+ *
32770
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32771
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32772
+ * or the request carries the `X-Curviate-Beta` header.
32593
32773
  */
32594
32774
  closeJob(projectId: string, jobId: string): Promise<RecruiterCloseJobResult>;
32595
32775
  /**
32596
32776
  * Save a candidate (or user profile) to a project's pipeline at the given
32597
32777
  * stage, the sole surviving pipeline write.
32598
32778
  * `POST /v1/{account_id}/recruiter/projects/{project_id}/pipeline/candidate/save`
32779
+ *
32780
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32781
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32782
+ * or the request carries the `X-Curviate-Beta` header.
32599
32783
  */
32600
32784
  saveCandidate(projectId: string, body: RecruiterSaveCandidateBody): Promise<RecruiterSaveCandidateResult>;
32601
32785
  /**
@@ -32603,17 +32787,29 @@ declare class RecruiterResource {
32603
32787
  * filters, no state mutates). `channel_id` (a `JOB_POSTING` talent-pool
32604
32788
  * channel) is REQUIRED. `limit`/`cursor` stay TOP-LEVEL query params.
32605
32789
  * `POST /v1/{account_id}/recruiter/projects/{project_id}/talent-pool/applicants`
32790
+ *
32791
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32792
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32793
+ * or the request carries the `X-Curviate-Beta` header.
32606
32794
  */
32607
32795
  listApplicants(projectId: string, body: RecruiterListApplicantsBody, params?: Partial<RecruiterListApplicantsQuery>): Promise<RecruiterListApplicantsResult>;
32608
32796
  /**
32609
32797
  * Get full detail for one talent-pool applicant (profile guaranteed full,
32610
32798
  * includes PII). `GET /v1/{account_id}/recruiter/projects/{project_id}/talent-pool/applicants/{applicant_id}`
32799
+ *
32800
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32801
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32802
+ * or the request carries the `X-Curviate-Beta` header.
32611
32803
  */
32612
32804
  getApplicant(projectId: string, applicantId: string): Promise<RecruiterGetApplicantResult>;
32613
32805
  /**
32614
32806
  * Download a talent-pool applicant's résumé as raw binary.
32615
32807
  * `GET /v1/{account_id}/recruiter/projects/{project_id}/talent-pool/applicants/{applicant_id}/resume`
32616
32808
  * Returns `ArrayBuffer`; the SDK does not cache or store it.
32809
+ *
32810
+ * @beta Beta operation. See the namespace note above: while beta-gated it
32811
+ * refuses `BETA_NOT_ENABLED` (403) until a human enables beta in Settings,
32812
+ * or the request carries the `X-Curviate-Beta` header.
32617
32813
  */
32618
32814
  downloadResume(projectId: string, applicantId: string): Promise<ArrayBuffer>;
32619
32815
  }
@@ -32879,6 +33075,11 @@ declare class CompaniesResource {
32879
33075
  * never stored. Beta: single-page listing and termination are verified;
32880
33076
  * deep pagination (many pages / large cursor round-trips) is provisional
32881
33077
  * until validated against a busier inbox.
33078
+ *
33079
+ * @beta Beta operation. While beta-gated it refuses `BETA_NOT_ENABLED`
33080
+ * (403) until a human enables beta in Settings, or the request carries the
33081
+ * `X-Curviate-Beta` header. Sibling methods on this namespace are stable;
33082
+ * the badge is per operation.
32882
33083
  */
32883
33084
  chats(identifier: string, params?: CompanyChatListQuery): Promise<CompanyChatListPage>;
32884
33085
  /**
@@ -32911,6 +33112,11 @@ declare class CompaniesResource {
32911
33112
  * and message content), a `topic` card, or `unread`-only; the three are
32912
33113
  * mutually exclusive and enforced server-side. The connected account must
32913
33114
  * administer the page. Beta: see `chats()`.
33115
+ *
33116
+ * @beta Beta operation. While beta-gated it refuses `BETA_NOT_ENABLED`
33117
+ * (403) until a human enables beta in Settings, or the request carries the
33118
+ * `X-Curviate-Beta` header. Sibling methods on this namespace are stable;
33119
+ * the badge is per operation.
32914
33120
  */
32915
33121
  searchChats(identifier: string, params?: CompanyChatSearchQuery): Promise<CompanyChatSearchPage>;
32916
33122
  /**
@@ -33135,13 +33341,41 @@ declare class Curviate {
33135
33341
  * This mirrors the server's error taxonomy (the customer-observable subset).
33136
33342
  * The string literals are copied here intentionally; the SDK has no dependency
33137
33343
  * on any private package. Internal-only codes that never reach a caller (e.g.
33138
- * `BANNED_ENV_PREFIX`, `ADMIN_BYPASS`, protected-account and substrate-internal
33139
- * codes) are deliberately excluded.
33344
+ * `BANNED_ENV_PREFIX`, protected-account and substrate-internal codes) are
33345
+ * deliberately excluded.
33346
+ *
33347
+ * The test for "does a caller ever see it" is the DECODE PATH, not intuition:
33348
+ * a code returned by any `/v1` route, the `/v1` catch-all, or a shared handler
33349
+ * one of them calls reaches this transport, and anything missing from this
33350
+ * array is erased to `INTERNAL` on the way out. Twenty-one codes were in that
33351
+ * position and are now carried (see the block at the end of the array).
33352
+ * `ADMIN_BYPASS` was even cited here as an example of an unreachable code
33353
+ * while being constructed at nine sites inside the versioned billing
33354
+ * endpoints, which is exactly the mistake the decode-path test avoids.
33355
+ *
33356
+ * What remains excluded are codes with no request to answer at all: the
33357
+ * boot-time environment refusal (`BANNED_ENV_PREFIX`, raised before the
33358
+ * process serves anything) and the browser-approval exchange the CLI's own
33359
+ * `setup` command consumes directly, which is not on the documented REST
33360
+ * surface and no SDK method reaches.
33361
+ *
33362
+ * The taxonomy tracks what deployments can actually emit, which is not the same
33363
+ * as what the newest one emits. A code the API has stopped returning is removed
33364
+ * eventually, because a dead code in the union tells a caller to branch on
33365
+ * something that cannot arrive, but not in the release that stops returning
33366
+ * it, because a client is pointed at a deployment, not at a changelog. Removing
33367
+ * a code the caller's deployment still sends is worse than carrying a dead one:
33368
+ * the refusal arrives as `INTERNAL` and reads as a server fault.
33140
33369
  *
33141
- * The taxonomy is additive-only: new codes may be appended, existing ones are
33142
- * never removed or renamed.
33370
+ * So a retirement is two steps. First `@deprecated`, kept exported, with the
33371
+ * replacement named. Then removed, in the first release after every deployment
33372
+ * carries the new contract. `TIER_NOT_ACTIVE` and `PREMIUM_CONFLICT` took step
33373
+ * one in 0.30.0 and step two in 0.31.0.
33374
+ *
33375
+ * A code the API NEVER emitted is a different case and goes immediately, since
33376
+ * no deployment can be sending it: `RATE_LIMITED` went that way in 0.30.0.
33143
33377
  */
33144
- declare const ERROR_CODES: readonly ["UNAUTHORIZED", "INVALID_REQUEST", "UNSUPPORTED_MEDIA_TYPE", "PAYLOAD_TOO_LARGE", "ACCOUNT_NOT_FOUND", "ACCOUNT_RESTRICTED", "ACCOUNT_ALREADY_LINKED", "RESOURCE_NOT_FOUND", "NOT_STORED", "RESOURCE_ACCESS_RESTRICTED", "FILTER_CANDIDATES_REQUIRED", "TIER_NOT_ACTIVE", "LINKEDIN_FEATURE_NOT_SUBSCRIBED", "RATE_LIMIT_ACCOUNT", "RATE_LIMIT_TENANT", "PLATFORM_RATE_LIMIT", "RATE_LIMITED", "BUDGET_EXHAUSTED", "PLATFORM_ERROR", "PLATFORM_NOT_IMPLEMENTED", "LINKEDIN_OPERATION_NOT_SUPPORTED", "CHECKPOINT_NOT_FOUND", "CHECKPOINT_EXPIRED", "CHECKPOINT_INVALID_CODE", "CHECKPOINT_MAX_ATTEMPTS", "CHECKPOINT_ALREADY_RESOLVED", "CHECKPOINT_UNSUPPORTED", "CONNECTION_IN_PROGRESS", "PREMIUM_CONFLICT", "REAUTH_REQUIRED", "LINKEDIN_AUTH_FAILED", "LINKEDIN_SESSION_EVICTED", "LINKEDIN_RATE_LIMITED", "LINKEDIN_COOKIE_INVALID", "LINKEDIN_SERVICE_UNAVAILABLE", "MESSAGE_WINDOW_EXPIRED", "RECIPIENT_UNREACHABLE", "CONNECTION_REQUEST_CONFLICT", "PAYMENT_REQUIRED", "PAYMENT_FAILED", "SUBSCRIPTION_BUSY", "SUBSCRIPTION_NOT_FOUND", "SEAT_NOT_FOUND", "SEAT_CANCELLED", "INTERNAL"];
33378
+ declare const ERROR_CODES: readonly ["UNAUTHORIZED", "INVALID_REQUEST", "UNSUPPORTED_MEDIA_TYPE", "PAYLOAD_TOO_LARGE", "ACCOUNT_NOT_FOUND", "ACCOUNT_RESTRICTED", "ACCOUNT_ALREADY_LINKED", "RESOURCE_NOT_FOUND", "NOT_STORED", "RESOURCE_ACCESS_RESTRICTED", "FILTER_CANDIDATES_REQUIRED", "NO_ACTIVE_SEAT", "LINKEDIN_FEATURE_NOT_SUBSCRIBED", "BETA_NOT_ENABLED", "RATE_LIMIT_ACCOUNT", "RATE_LIMIT_TENANT", "PLATFORM_RATE_LIMIT", "BUDGET_EXHAUSTED", "PLATFORM_ERROR", "PLATFORM_NOT_IMPLEMENTED", "LINKEDIN_OPERATION_NOT_SUPPORTED", "CHECKPOINT_NOT_FOUND", "CHECKPOINT_EXPIRED", "CHECKPOINT_INVALID_CODE", "CHECKPOINT_MAX_ATTEMPTS", "CHECKPOINT_ALREADY_RESOLVED", "CHECKPOINT_UNSUPPORTED", "CONNECTION_IN_PROGRESS", "REAUTH_REQUIRED", "LINKEDIN_AUTH_FAILED", "LINKEDIN_SESSION_EVICTED", "LINKEDIN_RATE_LIMITED", "LINKEDIN_COOKIE_INVALID", "LINKEDIN_SERVICE_UNAVAILABLE", "MESSAGE_WINDOW_EXPIRED", "RECIPIENT_UNREACHABLE", "CONNECTION_REQUEST_CONFLICT", "PAYMENT_REQUIRED", "PAYMENT_FAILED", "SUBSCRIPTION_BUSY", "SUBSCRIPTION_NOT_FOUND", "SEAT_NOT_FOUND", "SEAT_CANCELLED", "NOT_FOUND", "REACTION_NOT_FOUND", "SUBSTRATE_LINK_FAILED", "SUBSTRATE_CAP_REACHED", "BILLING_CHECKOUT_FAILED", "BILLING_PORTAL_UNAVAILABLE", "ACCOUNT_DISPUTED", "ACCOUNT_LINKING_DISABLED", "PERIOD_LOCKED", "SEAT_NOT_EMPTY", "SEAT_PROVISIONAL", "SUBSCRIPTION_ALREADY_EXISTS", "ALREADY_CANCELLED", "CANCELLATION_ALREADY_EFFECTIVE", "INVALID_CANCELLATION_SOURCE", "TRIAL_EXPIRED", "TRIAL_SEAT_LIMIT", "TRIAL_ACTIVE_SEAT_LIMIT", "TRIAL_IDENTITY_ALREADY_USED", "TRIAL_IDENTITY_UNRESOLVED", "ADMIN_BYPASS", "STRIPE_DRIFT_DETECTED", "INTERNAL"];
33145
33379
  /**
33146
33380
  * The complete set of error codes observable by API callers.
33147
33381
  *
@@ -33149,24 +33383,6 @@ declare const ERROR_CODES: readonly ["UNAUTHORIZED", "INVALID_REQUEST", "UNSUPPO
33149
33383
  * `switch (error.code)` without fear of unknown codes.
33150
33384
  */
33151
33385
  type ErrorCode = (typeof ERROR_CODES)[number];
33152
- /**
33153
- * The tiers a caller can be asked to upgrade to, surfaced on `TIER_NOT_ACTIVE`.
33154
- * `sn` and `sales_nav` are both emitted by the API (internal flag key vs.
33155
- * product-facing label).
33156
- *
33157
- * Single source of truth, mirroring {@link ERROR_CODES}: both the
33158
- * {@link RequiredTier} type and the runtime {@link KNOWN_REQUIRED_TIERS}
33159
- * membership set are derived from this one array, so the type a caller
33160
- * narrows on and the set the transport validates a wire value against can
33161
- * never drift apart.
33162
- */
33163
- declare const REQUIRED_TIERS: readonly ["core", "sn", "sales_nav", "recruiter"];
33164
- /**
33165
- * The product tier a caller needs, surfaced on `TIER_NOT_ACTIVE` so an agent
33166
- * can route an upgrade without parsing the message. `sn` and `sales_nav` are
33167
- * both emitted by the API (internal flag key vs. product-facing label).
33168
- */
33169
- type RequiredTier = (typeof REQUIRED_TIERS)[number];
33170
33386
  /** Structured retry guidance attached to retryable errors. */
33171
33387
  interface RetryHint {
33172
33388
  kind: "delay" | "backoff" | "never";
@@ -33207,8 +33423,6 @@ interface CurviateErrorInit {
33207
33423
  retryHint?: RetryHint | null;
33208
33424
  userFixable: boolean;
33209
33425
  retryLikelyToSucceed: boolean;
33210
- /** Present on `TIER_NOT_ACTIVE` only. */
33211
- requiredTier?: RequiredTier;
33212
33426
  /** Milliseconds to wait before retry, parsed from the `Retry-After` response header. */
33213
33427
  retryAfterMs?: number;
33214
33428
  /**
@@ -33281,7 +33495,6 @@ interface CurviateErrorJSON {
33281
33495
  retryHint: RetryHint | null;
33282
33496
  userFixable: boolean;
33283
33497
  retryLikelyToSucceed: boolean;
33284
- requiredTier?: RequiredTier;
33285
33498
  retryAfterMs?: number;
33286
33499
  budgetRow?: string;
33287
33500
  retryAfterSeconds?: number;
@@ -33309,7 +33522,6 @@ declare class CurviateError extends Error {
33309
33522
  readonly retryHint: RetryHint | null;
33310
33523
  readonly userFixable: boolean;
33311
33524
  readonly retryLikelyToSucceed: boolean;
33312
- readonly requiredTier: RequiredTier | undefined;
33313
33525
  readonly retryAfterMs: number | undefined;
33314
33526
  /** The budget row this response names. See {@link CurviateErrorInit.budgetRow}. */
33315
33527
  readonly budgetRow: string | undefined;
@@ -33619,4 +33831,4 @@ interface ConstructEventOptions {
33619
33831
  */
33620
33832
  declare function constructEvent(rawBody: string | Buffer, signatureHeader: string, secret: string, opts?: ConstructEventOptions): Promise<CurviateEvent>;
33621
33833
 
33622
- export { type AccountListPage, type AccountListParams, type AccountPayload, type AccountScopedNamespaces, type ConnectionPayload, type ConstructEventOptions, Curviate, type CurviateConfig, CurviateError, type CurviateErrorInit, type CurviateErrorJSON, type CurviateEvent, type CurviateEventEnvelope, ERROR_CODES, type ErrorCode, type EventPayloadBase, type MessagePayload, type RequiredTier, type ResolvedConfig, type ResourceNamespaces, type RetryHint, type SafetyHint, type SafetyReason, WebhookSignatureError, type components, constructEvent, isCurviateError, type operations, type paths };
33834
+ export { type AccountListPage, type AccountListParams, type AccountPayload, type AccountScopedNamespaces, type ConnectionPayload, type ConstructEventOptions, Curviate, type CurviateConfig, CurviateError, type CurviateErrorInit, type CurviateErrorJSON, type CurviateEvent, type CurviateEventEnvelope, ERROR_CODES, type ErrorCode, type EventPayloadBase, type MessagePayload, type ResolvedConfig, type ResourceNamespaces, type RetryHint, type SafetyHint, type SafetyReason, WebhookSignatureError, type components, constructEvent, isCurviateError, type operations, type paths };