@curviate/sdk 0.37.1 → 0.38.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.
@@ -77,7 +77,7 @@ export interface paths {
77
77
  put?: never;
78
78
  /**
79
79
  * Endorse a member's skill
80
- * @description Endorses one specific skill on a target member's profile. You can only endorse the skills of your 1st-degree connections. To obtain the endorsement_id: (1) GET /v1/{account_id}/users/{user_id}?linkedin_sections=linkedin_skills, (2) read the target skill's endorsement_id from the skills section, this field is present ONLY for connections you are eligible to endorse (it is omitted for users outside your network and on your own profile, so this workflow requires the target to be a 1st-degree connection), (3) call this endpoint with that value. user_id must be the LinkedIn member ID (ACo... format); a public identifier does not resolve on this endpoint.
80
+ * @description Endorses one skill on a target member's profile. Only skills of your 1st-degree connections can be endorsed, using the endorsement_id from their profile's skills section (GET users/{user_id}?linkedin_sections=linkedin_skills).
81
81
  */
82
82
  post: operations["postV1AccountIdUsersUserIdEndorseSkill"];
83
83
  delete?: never;
@@ -155,7 +155,7 @@ export interface paths {
155
155
  };
156
156
  /**
157
157
  * List the account's profile viewers
158
- * @description Returns a cursor-paginated list of the account's recent profile viewers, each classified by disclosure fidelity (identified, semi-anonymous, or an aggregate rollup). A Premium account can see identified viewers; a free account is capped at semi-anonymous fidelity; an in-band result, never an error. Page until cursor is null.
158
+ * @description Returns a cursor-paginated list of the account's recent profile viewers, each classified by disclosure fidelity (identified, semi-anonymous, or aggregate). A free account is capped at semi-anonymous; Premium sees identified. Page until cursor is null.
159
159
  */
160
160
  get: operations["getV1AccountIdProfileVisitors"];
161
161
  put?: never;
@@ -215,7 +215,7 @@ export interface paths {
215
215
  };
216
216
  /**
217
217
  * List who a user follows
218
- * @description Returns a paginated list of LinkedIn accounts this user follows. LinkedIn only allows listing the connected account's OWN following list, user_id MUST be "me"; any other value returns a non-retryable error (this is a permanent LinkedIn platform limitation, not a gap in this endpoint). To list another user's followers instead, use GET /v1/{account_id}/users/{user_id}/followers, which does accept an explicit user_id.
218
+ * @description Lists accounts this user follows. LinkedIn allows only the connected account's own list: user_id must be "me". To list another user's followers, use the followers endpoint instead.
219
219
  */
220
220
  get: operations["getV1AccountIdUsersUserIdFollowing"];
221
221
  put?: never;
@@ -242,7 +242,7 @@ export interface paths {
242
242
  post: operations["postV1AccountIdUsersUserIdFollow"];
243
243
  /**
244
244
  * Unfollow a user
245
- * @description Unfollows a LinkedIn user. Idempotent, unfollowing a user this account does not currently follow still returns 200.
245
+ * @description Unfollows a LinkedIn user. Unfollowing a user this account does not currently follow still returns 200, not an error.
246
246
  */
247
247
  delete: operations["deleteV1AccountIdUsersUserIdFollow"];
248
248
  options?: never;
@@ -341,7 +341,7 @@ export interface paths {
341
341
  put?: never;
342
342
  /**
343
343
  * Invite connections to follow a company page
344
- * @description Invites one or more of the connected account's 1st-degree connections to follow a company page it administers with the invite-to-follow entitlement. Pass the AC... member ids from an invitable-followers read. Returns one outcome per invitee, in request order, for an all-valid request. If any invitee id is invalid, the whole request is rejected (404), with no partial success. Re-inviting an already-invited member is a safe no-op (the same invitation id, never a duplicate). Only identifiers transit. Nothing is stored.
344
+ * @description Invites one or more of the connected account's 1st-degree connections to follow a company page it administers, using member ids from an invitable-followers read. All-or-nothing: one invalid invitee id rejects the whole request (404). Re-inviting an already-invited member is a safe no-op.
345
345
  */
346
346
  post: operations["postV1AccountIdCompaniesIdentifierFollowInvite"];
347
347
  delete?: never;
@@ -399,7 +399,7 @@ export interface paths {
399
399
  };
400
400
  /**
401
401
  * List a company page's admin conversations
402
- * @description Returns the conversations in a company page's admin message inbox, newest-activity-first. The connected account must administer the page. Content passes through and is never stored. Beta: deep pagination is being validated at scale. Single-page listing and termination are verified; deep pagination (many pages / large cursor round-trips) is provisional until validated against a busier inbox.
402
+ * @description Lists a company page's admin-inbox conversations, newest-activity-first. The connected account must administer the page. Content is never stored. Beta: single-page results are verified; deep pagination across many pages is still being validated at scale.
403
403
  */
404
404
  get: operations["getV1AccountIdCompaniesIdentifierChats"];
405
405
  put?: never;
@@ -419,7 +419,7 @@ export interface paths {
419
419
  };
420
420
  /**
421
421
  * Retrieve one admin conversation
422
- * @description Returns a single conversation from a company page's admin inbox by id; the same shape as a list item. The connected account must administer the page.
422
+ * @description Returns a single conversation from a company page's admin inbox by id, the same shape as a list item. The connected account must administer the page.
423
423
  */
424
424
  get: operations["getV1AccountIdCompaniesIdentifierChatsChatId"];
425
425
  put?: never;
@@ -445,7 +445,7 @@ export interface paths {
445
445
  put?: never;
446
446
  /**
447
447
  * Reply as the company page
448
- * @description Sends a message into an existing company-inbox conversation, as the page. chat_id is the conversation id from GET /v1/{account_id}/companies/{identifier}/chats, the same 2-... id this group's chat reads return, passed verbatim. The connected account must administer the page. Reply-only: a page can never start a new conversation, only answer an existing one. Send application/json with text, base64 attachments (max 5 MiB per file, and 9 MiB for the whole request body; base64 makes a file about a third larger in the body than on disk), or both; at least one of text or attachments is required. Message content passes through to the platform and is never stored. The response's sent_as field names the acting identity that was actually used.
448
+ * @description Sends a message into an existing company-inbox conversation, as the page. Reply-only: a page can never start a new conversation, only answer one. Send text, base64 attachments (5 MiB per file, 9 MiB per request), or both. The connected account must administer the page.
449
449
  */
450
450
  post: operations["postV1AccountIdCompaniesIdentifierChatsChatIdMessages"];
451
451
  delete?: never;
@@ -483,7 +483,7 @@ export interface paths {
483
483
  };
484
484
  /**
485
485
  * Search or filter a company page's admin inbox
486
- * @description Free-text search (query) OR one topic/unread filter over the admin inbox: exactly one mode per call. topic accepts 1-5 or a name (Service request, Request a demo, Support, Careers, Other). filter_effective is present only in topic/unread mode. The connected account must administer the page. Beta: deep pagination is being validated at scale. Single-page listing and termination are verified; deep pagination (many pages / large cursor round-trips) is provisional until validated against a busier inbox.
486
+ * @description Free-text search (query) or one topic/unread filter over the admin inbox, exactly one mode per call. The connected account must administer the page. Beta: single-page results are verified; deep pagination across many pages is still being validated at scale.
487
487
  */
488
488
  get: operations["getV1AccountIdCompaniesIdentifierChatsSearch"];
489
489
  put?: never;
@@ -563,7 +563,7 @@ export interface paths {
563
563
  };
564
564
  /**
565
565
  * Resolve search filter IDs
566
- * @description Resolves human-readable terms (e.g. 'software development') to opaque filter IDs for use in structured search filters. The type parameter selects the filter category; keywords is required for every type, including EMPLOYMENT_TYPE. Results paginate: send the cursor from the previous response to get the next page, and stop when it comes back null.
566
+ * @description Resolves human-readable terms (e.g. 'software development') to opaque filter IDs for structured search filters. type selects the category; keywords is required for every type. Paginate with cursor until it returns null.
567
567
  */
568
568
  get: operations["getV1AccountIdSearchParameters"];
569
569
  put?: never;
@@ -665,7 +665,7 @@ export interface paths {
665
665
  put?: never;
666
666
  /**
667
667
  * Search from a pasted URL
668
- * @description Runs a pasted LinkedIn search URL directly. url is the only accepted body field, this is the sole home of URL-mode; the structured people/companies/posts/jobs endpoints no longer accept url. The response is polymorphic: each item is discriminated individually by its own kind (a person, a company, a post, or a job).
668
+ * @description Runs a pasted LinkedIn search URL directly; url is the only accepted body field, the sole home of URL-mode. The response is polymorphic: each item is discriminated by its own kind (person, company, post, or job).
669
669
  */
670
670
  post: operations["postV1AccountIdSearch"];
671
671
  delete?: never;
@@ -749,7 +749,7 @@ export interface paths {
749
749
  put?: never;
750
750
  /**
751
751
  * Start a chat
752
- * @description Starts a new chat with one or more members from a connected account. Send application/json; attach files as base64-encoded attachments (max 5 MiB per file, and 9 MiB for the whole request body; base64 makes a file about a third larger in the body than on disk). This call keeps nothing and logs nothing. Once sent it is a message in the account's inbox, so reading that conversation back through Curviate stores its body in your tenant's inbox records, with no expiry. Company pages are reply-only and cannot start a conversation; reply using a `COMPANY_` chat id from GET /v1/{account_id}/inboxes/{inbox_id}/chats instead.
752
+ * @description Starts a chat with members. This call keeps nothing and logs nothing. Once sent it is a message in the account's inbox, so reading that conversation back through Curviate stores its body in your tenant's inbox records, with no expiry. Company pages are reply-only: a COMPANY_ id cannot start one.
753
753
  */
754
754
  post: operations["postV1AccountIdChats"];
755
755
  delete?: never;
@@ -797,7 +797,7 @@ export interface paths {
797
797
  put?: never;
798
798
  /**
799
799
  * Send a message
800
- * @description Sends a message into an existing chat. Send application/json with text, base64 attachments (max 5 MiB per file, and 9 MiB for the whole request body; base64 makes a file about a third larger in the body than on disk), or both; at least one of text or attachments is required. This call keeps nothing and logs nothing. Once sent it is a message in the account's inbox, so reading that conversation back through Curviate stores its body in your tenant's inbox records, with no expiry. Sending on behalf of a company page: use a COMPANY_ chat id (from GET /v1/{account_id}/inboxes/{inbox_id}/chats) and the message sends AS THE PAGE, no separate parameter needed. The response's sent_as field names the acting identity that was actually used. Company pages are reply-only: this endpoint can answer an existing conversation on a page's behalf, but a page can never start a new one.
800
+ * @description Sends a message into a chat: text, attachments, or both. This call keeps nothing and logs nothing. Once sent it is a message in the account's inbox, so reading that conversation back through Curviate stores its body in your tenant's inbox records, with no expiry. COMPANY_ chat ids send as the page.
801
801
  */
802
802
  post: operations["postV1AccountIdChatsChatIdMessages"];
803
803
  delete?: never;
@@ -883,9 +883,7 @@ export interface paths {
883
883
  };
884
884
  /**
885
885
  * Search chats
886
- * @description Free-text search of the connected account's own inbox. Matches both participant names and message content. A no-match term returns an empty list, not an error.
887
- *
888
- * Served from the chats and messages already retrieved for this account, so it costs no platform call and draws down no budget. A chat that has never been retrieved cannot match. The `coverage` block on the response says how complete the searched corpus is.
886
+ * @description Free-text search of the connected account's own inbox, matching participant names and message content. Served from chats and messages already retrieved, so it costs no platform call. A chat never retrieved cannot match; the response's coverage block says how complete that is.
889
887
  */
890
888
  get: operations["getV1AccountIdChatsSearch"];
891
889
  put?: never;
@@ -925,7 +923,7 @@ export interface paths {
925
923
  };
926
924
  /**
927
925
  * List inboxes
928
- * @description Returns the account's personal inbox plus, when the company product is attached, one entry per company page x folder (id like 'COMPANY_83734124_PRIMARY'). Company inboxes carry reply_only:true; company pages can only reply to existing conversations, never start one. company_id is resolved by correlating the page name against the account's managed pages; an uncorrelatable page returns company_id:null, never a fabricated id. When no company inbox exists, hint names the Company Pages reconnect requirement instead of returning silently empty.
926
+ * @description Lists the account's personal inbox plus, when the company product is attached, one entry per company page and folder. Company inboxes are reply-only. company_id is null when the page can't be correlated to a managed page.
929
927
  */
930
928
  get: operations["getV1AccountIdInboxes"];
931
929
  put?: never;
@@ -945,7 +943,7 @@ export interface paths {
945
943
  };
946
944
  /**
947
945
  * List an inbox's conversations
948
- * @description Returns a paginated list of an inbox's conversations, newest-activity-first. Each chat's id is send-ready: pass it directly to the send-message endpoint to reply; a company inbox's chat id (e.g. 'COMPANY_83734124_2-...') replies AS THE PAGE, no separate parameter needed. Works identically for personal (CLASSIC_) inboxes. Company pages are reply-only (reply_only:true on the inbox, from GET /inboxes); they cannot start a new conversation. A malformed inbox_id returns 400 INVALID_REQUEST; a well-formed id for a mailbox this account does not administer returns 403 RESOURCE_ACCESS_RESTRICTED (no existence disclosure); there is no 404 for this endpoint.
946
+ * @description Lists an inbox's conversations, newest first. Each chat id is send-ready: pass it to the send-message endpoint to reply; a company id replies as that page. Company inboxes are reply-only. A mailbox this account doesn't administer returns 403, never 404.
949
947
  */
950
948
  get: operations["getV1AccountIdInboxesInboxIdChats"];
951
949
  put?: never;
@@ -965,7 +963,7 @@ export interface paths {
965
963
  };
966
964
  /**
967
965
  * Get the account's home feed
968
- * @description Returns the connected account's LinkedIn home feed as agent-actionable posts. `sort=recent` (default) is reverse-chronological and always available; `sort=relevant` is LinkedIn's ranked 'top' feed, which draws on a shared, throttled request budget and can rate-limit. Each post carries the numeric activity id you pass to the Posts group to react, comment, or fetch detail. Page until cursor is null.
966
+ * @description Returns the account's LinkedIn home feed as agent-actionable posts. sort=recent (default) is always available; sort=relevant can rate-limit. Each post carries the activity id for the Posts group. Page until cursor is null.
969
967
  */
970
968
  get: operations["getV1AccountIdFeedHome"];
971
969
  put?: never;
@@ -985,7 +983,7 @@ export interface paths {
985
983
  };
986
984
  /**
987
985
  * List the account's notifications
988
- * @description Returns the connected account's notification cards as a cursor-paginated list, plus the account-level unread badge (unread_count) and a newest-notification watermark (latest_published_at) for cheap polling. Injected/promo cards are included and flagged. Each post-related card carries the numeric activity id you pass to the Posts group. Page until cursor is null.
986
+ * @description Returns the account's notification cards, cursor-paginated, plus unread_count and a latest_published_at watermark for cheap polling. Each post-related card carries the activity id for the Posts group. Page until cursor is null.
989
987
  */
990
988
  get: operations["getV1AccountIdNotifications"];
991
989
  put?: never;
@@ -1027,7 +1025,7 @@ export interface paths {
1027
1025
  put?: never;
1028
1026
  /**
1029
1027
  * Show less like a notification
1030
- * @description Applies 'show less like this' to the source of one of the connected account's own notification cards. For network-activity cards (a repost, comment, or reaction by your network) this removes the card, the same effect as deleting it, because LinkedIn exposes no separate softer signal for these cards. This is a self-action and cannot be undone. No request body.
1028
+ * @description Applies 'show less like this' to the source of one of the account's own notification cards. For network-activity cards this removes the card, the same as deleting it. Self-action, cannot be undone. No request body.
1031
1029
  */
1032
1030
  post: operations["postV1AccountIdNotificationsCardUrnShowLess"];
1033
1031
  delete?: never;
@@ -1309,7 +1307,7 @@ export interface paths {
1309
1307
  };
1310
1308
  /**
1311
1309
  * Get job posting
1312
- * @description Returns one classic LinkedIn job posting at full detail, title, company, location, description, applicant count, and budget when set. Any posting reachable by its numeric id can be retrieved; including public postings not owned by the connected account. Pass `with_sections` to request additional sections such as hiring team, salary, or benefits.
1310
+ * @description Returns one classic job posting at full detail. Any posting reachable by its numeric id can be retrieved, including one not owned by the connected account. Pass `with_sections` for extra sections.
1313
1311
  */
1314
1312
  get: operations["getV1AccountIdJobsJobId"];
1315
1313
  put?: never;
@@ -1319,7 +1317,7 @@ export interface paths {
1319
1317
  head?: never;
1320
1318
  /**
1321
1319
  * Edit job posting
1322
- * @description Applies a partial update to a classic job posting the connected account owns, only the fields you include are changed; everything else is left as-is. This can affect real money: editing a posting that is already published (LISTED) changes a live, money-spending listing, and the connected account may be billed differently as a result. Only postings the connected account owns can be edited.
1320
+ * @description Applies a partial update to a job posting the connected account owns; only included fields change. Editing an already-published (LISTED) posting affects a live, money-spending listing.
1323
1321
  */
1324
1322
  patch: operations["patchV1AccountIdJobsJobId"];
1325
1323
  trace?: never;
@@ -1355,7 +1353,7 @@ export interface paths {
1355
1353
  put?: never;
1356
1354
  /**
1357
1355
  * Publish job posting
1358
- * @description Publishes a classic job posting draft. THIS CAN SPEND REAL MONEY: publishing with mode PROMOTED or PROMOTED_PLUS charges the connected account's LinkedIn payment method for the budget you provide, providing `budget` on those modes IS the explicit opt-in to spend. FREE publishing spends nothing but requires free-posting eligibility (check GET .../budget's free.eligible first). Returns either the published posting or a verification checkpoint that must be resolved before the posting goes live.
1356
+ * @description Publishes a job posting draft. PROMOTED or PROMOTED_PLUS with a budget charges the account's LinkedIn payment method; providing budget is the opt-in to spend. FREE publishing needs free-posting eligibility (check the budget endpoint first). May return a checkpoint to resolve first.
1359
1357
  */
1360
1358
  post: operations["postV1AccountIdJobsJobIdPublish"];
1361
1359
  delete?: never;
@@ -1631,7 +1629,7 @@ export interface paths {
1631
1629
  put?: never;
1632
1630
  /**
1633
1631
  * Start a chat (Recruiter)
1634
- * @description Send an opening InMail-style message to one or more Recruiter member IDs (AE... format). subject and signature are REQUIRED for Recruiter (InMail-based messaging). Accepts optional base64-encoded file / voice / video attachments (application/json only; multipart is not supported). Recruiter PRO: optionally schedule a follow-up. Requires a Recruiter seat.
1632
+ * @description Sends an opening InMail-style message to one or more Recruiter member IDs. subject and signature are required. Accepts optional base64 attachments (JSON only, no multipart). Requires a Recruiter seat.
1635
1633
  */
1636
1634
  post: operations["postV1AccountIdRecruiterChats"];
1637
1635
  delete?: never;
@@ -1671,7 +1669,7 @@ export interface paths {
1671
1669
  put?: never;
1672
1670
  /**
1673
1671
  * Resolve search-filter IDs (Recruiter)
1674
- * @description Resolve human-readable terms to opaque Recruiter filter ids for use in pipeline, search, and applicant requests. The request body is a discriminated union on source: APPLICANTS and PIPELINE require project_id (a bad or missing project_id on these sources returns 404/400 respectively); SEARCH, JOB_POSTING, and JOBS do not take project_id. Each source has its own type enum; an out-of-family type value is rejected with 400 before any external call. Requires a Recruiter seat.
1672
+ * @description Resolves human-readable terms to opaque Recruiter filter ids for pipeline, search, and applicant requests. Body is discriminated by source: APPLICANTS/PIPELINE require project_id, others do not. Requires a Recruiter seat.
1675
1673
  */
1676
1674
  post: operations["postV1AccountIdRecruiterSearchParameters"];
1677
1675
  delete?: never;
@@ -1755,7 +1753,7 @@ export interface paths {
1755
1753
  put?: never;
1756
1754
  /**
1757
1755
  * Search a project's talent pool
1758
- * @description Search a Recruiter project's talent pool. A POST body carries the required channel_id (the project's own RECRUITER_SEARCH talent-pool channel, read it off talent_pool.channels[] of GET .../recruiter/projects/{project_id}) plus the (all-optional) people-search filter set. Pagination is driven by the limit (1-100) and cursor query params. Requires a Recruiter seat.
1756
+ * @description Searches a Recruiter project's talent pool. Requires channel_id (the project's RECRUITER_SEARCH talent-pool channel, from talent_pool.channels[]) plus optional filters. Requires a Recruiter seat.
1759
1757
  */
1760
1758
  post: operations["postV1AccountIdRecruiterProjectsProjectIdTalentPoolSearch"];
1761
1759
  delete?: never;
@@ -1887,7 +1885,7 @@ export interface paths {
1887
1885
  head?: never;
1888
1886
  /**
1889
1887
  * Edit a job posting
1890
- * @description MONEY WARNING: if this job posting is already PUBLISHED (LISTED/REVIEW/SUSPENDED), editing it mutates a live, money-spending listing; the posting keeps running and spending under the edited fields. Partial update: every field is optional, and any field you omit is left unchanged. Requires a Recruiter seat.
1888
+ * @description MONEY WARNING: editing an already-published (LISTED/REVIEW/SUSPENDED) posting mutates a live, money-spending listing. Partial update: omitted fields are unchanged. Requires a Recruiter seat.
1891
1889
  */
1892
1890
  patch: operations["patchV1AccountIdRecruiterProjectsProjectIdJobsJobId"];
1893
1891
  trace?: never;
@@ -1903,7 +1901,7 @@ export interface paths {
1903
1901
  put?: never;
1904
1902
  /**
1905
1903
  * Publish a job posting
1906
- * @description REAL MONEY: PROMOTED and PROMOTED_PLUS spend on the connected account's LinkedIn payment method. Providing budget IS the explicit opt-in to spend, there is no separate confirm flag. FREE requires free-posting eligibility (check GET .../budget's free.eligible first). bypass_email_verification skips the on-behalf-of-company posting eligibility check (replaces the retired publish-verification checkpoint, there is no separate checkpoint-solve step). Requires a Recruiter seat.
1904
+ * @description REAL MONEY: PROMOTED/PROMOTED_PLUS spend on the account's LinkedIn payment method; providing budget is the opt-in to spend. FREE requires free-posting eligibility (check the budget endpoint first). Requires a Recruiter seat.
1907
1905
  */
1908
1906
  post: operations["postV1AccountIdRecruiterProjectsProjectIdJobsJobIdPublish"];
1909
1907
  delete?: never;
@@ -2001,7 +1999,7 @@ export interface paths {
2001
1999
  };
2002
2000
  /**
2003
2001
  * Download an applicant's résumé
2004
- * @description Stream the résumé file for a talent-pool applicant as raw bytes. Curviate never caches, stores, or logs the résumé body. Gated by has_resume on the applicant detail. An applicant with no résumé on file -> 404 RESOURCE_NOT_FOUND; a résumé still generating upstream -> 503 (retry shortly). Requires a Recruiter seat.
2002
+ * @description Streams the résumé file as raw bytes; Curviate never caches, stores, or logs it. Gated by has_resume. No résumé on file returns 404; still generating returns 503 (retry). Requires a Recruiter seat.
2005
2003
  */
2006
2004
  get: operations["getV1AccountIdRecruiterProjectsProjectIdTalentPoolApplicantsApplicantIdResume"];
2007
2005
  put?: never;
@@ -2023,7 +2021,7 @@ export interface paths {
2023
2021
  put?: never;
2024
2022
  /**
2025
2023
  * Start a chat (Sales Navigator)
2026
- * @description Send an opening InMail-style message to one or more Sales Navigator members (ACw... IDs). subject is REQUIRED for Sales Navigator (InMail-based messaging). Accepts optional base64-encoded file / voice / video attachments (application/json only; multipart is not supported). Requires a Sales Navigator seat.
2024
+ * @description Sends an opening InMail-style message to one or more Sales Navigator members. subject is required. Accepts optional base64 attachments (JSON only, no multipart). Requires a Sales Navigator seat.
2027
2025
  */
2028
2026
  post: operations["postV1AccountIdSalesNavigatorChats"];
2029
2027
  delete?: never;
@@ -2181,7 +2179,7 @@ export interface paths {
2181
2179
  };
2182
2180
  /**
2183
2181
  * Resolve search-filter IDs (Sales Navigator)
2184
- * @description Resolve human-readable terms to opaque Sales Navigator filter IDs for use in people or company search requests. The type parameter selects the filter family; type must be one of the 16 Sales Navigator values. Any other value is rejected with 400 at schema validation, before any external call. Requires a Sales Navigator seat.
2182
+ * @description Resolves human-readable terms to opaque Sales Navigator filter IDs for people or company search. type selects the filter family; an unrecognized value is rejected with 400. Requires a Sales Navigator seat.
2185
2183
  */
2186
2184
  get: operations["getV1AccountIdSalesNavigatorSearchParameters"];
2187
2185
  put?: never;
@@ -2203,7 +2201,7 @@ export interface paths {
2203
2201
  put?: never;
2204
2202
  /**
2205
2203
  * Search people (Sales Navigator)
2206
- * @description Search for LinkedIn members using the full Sales Navigator people filter set. Pass structured filters in the body, resolve filter IDs first via GET .../search/parameters. limit and cursor go in query params. To search from a pasted URL instead, use POST .../sales-navigator/search. Requires a Sales Navigator seat.
2204
+ * @description Search for LinkedIn members using the full Sales Navigator filter set. Resolve filter IDs first via search/parameters. limit and cursor are query params. For a pasted URL instead, use POST .../search. Requires a Sales Navigator seat.
2207
2205
  */
2208
2206
  post: operations["postV1AccountIdSalesNavigatorSearchPeople"];
2209
2207
  delete?: never;
@@ -2223,7 +2221,7 @@ export interface paths {
2223
2221
  put?: never;
2224
2222
  /**
2225
2223
  * Search companies (Sales Navigator)
2226
- * @description Search for LinkedIn companies using the full Sales Navigator company filter set. Pass structured filters in the body, resolve filter IDs first via GET .../search/parameters. limit and cursor go in query params. To search from a pasted URL instead, use POST .../sales-navigator/search. Requires a Sales Navigator seat.
2224
+ * @description Search for LinkedIn companies using the full Sales Navigator filter set. Resolve filter IDs first via search/parameters. limit and cursor are query params. For a pasted URL instead, use POST .../search. Requires a Sales Navigator seat.
2227
2225
  */
2228
2226
  post: operations["postV1AccountIdSalesNavigatorSearchCompanies"];
2229
2227
  delete?: never;
@@ -2243,7 +2241,7 @@ export interface paths {
2243
2241
  put?: never;
2244
2242
  /**
2245
2243
  * Search from a pasted URL (Sales Navigator)
2246
- * @description Run a pasted Sales Navigator search, saved-search, or lead-list URL directly. url is the only accepted body field; this is the sole home of URL-mode; the structured search/people and search/companies endpoints no longer accept url. The response is polymorphic: each item is discriminated individually by its own kind (a person, a company, a saved lead, or a saved account). limit (1-50) and cursor go in query params. Requires a Sales Navigator seat.
2244
+ * @description Runs a pasted Sales Navigator search, saved-search, or lead-list URL directly; url is the only accepted body field, the sole home of URL-mode. Response is polymorphic by kind (person, company, saved lead, saved account). Requires a Sales Navigator seat.
2247
2245
  */
2248
2246
  post: operations["postV1AccountIdSalesNavigatorSearch"];
2249
2247
  delete?: never;
@@ -2261,7 +2259,7 @@ export interface paths {
2261
2259
  };
2262
2260
  /**
2263
2261
  * List connected LinkedIn accounts
2264
- * @description List the tenant's connected (non-archived) LinkedIn accounts, cursor-paginated. Use `limit` (1-250, default 50) and `cursor` (from a prior page's `cursor` field) to page; `cursor` is null on the last page.
2262
+ * @description List the tenant's connected (non-archived) LinkedIn accounts, cursor-paginated. Use `limit` (1-250, default 50) and `cursor` (from a prior page's `cursor` field) to page; `cursor` is null on the last page. Filter by `external_id` for one end user's accounts.
2265
2263
  */
2266
2264
  get: operations["getV1Accounts"];
2267
2265
  put?: never;
@@ -2295,7 +2293,7 @@ export interface paths {
2295
2293
  head?: never;
2296
2294
  /**
2297
2295
  * Update account metadata / proxy configuration
2298
- * @description Update an account's custom metadata (a flat string map that replaces the store wholesale) and/or its custom proxy egress, supply a proxy object to set one, or null to clear it (revert to automatic proxy protection). Credentials and seat binding are untouched. The proxy password is encrypted at rest and never returned.
2296
+ * @description Updates an account's metadata (a flat string map, replaced wholesale) and/or its custom proxy egress; pass a proxy object to set one, or null to clear it. Credentials and seat are untouched.
2299
2297
  */
2300
2298
  patch: operations["patchV1AccountsAccountId"];
2301
2299
  trace?: never;
@@ -2331,7 +2329,7 @@ export interface paths {
2331
2329
  put?: never;
2332
2330
  /**
2333
2331
  * Start a credential/cookie authentication
2334
- * @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` (list your seats with GET /v1/accounts/seats, or copy a seat id from 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.
2332
+ * @description Authenticates a LinkedIn account with credentials or a cookie, nested: auth_method credentials reads credentials: { email, password }; auth_method cookie reads cookie: { li_at }. Omit account_id for a new account; include it to reconnect. Returns the account or a 202 checkpoint.
2335
2333
  */
2336
2334
  post: operations["postV1AuthIntent"];
2337
2335
  delete?: never;
@@ -2351,7 +2349,7 @@ export interface paths {
2351
2349
  put?: never;
2352
2350
  /**
2353
2351
  * Solve a checkpoint verification challenge
2354
- * @description Resolve the pending verification challenge for an account by submitting the code, an OTP / 2FA code, the chosen contract id (for a contract_selection challenge), or the special value TRY_ANOTHER_WAY to switch the challenge method. `account_id` (in the body) identifies the mid-flight connect. A chained challenge returns another 202.
2352
+ * @description Resolves the pending verification challenge for account_id: a code, OTP/2FA, a contract_selection id, or TRY_ANOTHER_WAY to switch method. A chained challenge returns another 202.
2355
2353
  */
2356
2354
  post: operations["postV1AuthCheckpointSolve"];
2357
2355
  delete?: never;
@@ -2370,8 +2368,8 @@ export interface paths {
2370
2368
  get?: never;
2371
2369
  put?: never;
2372
2370
  /**
2373
- * Re-request a checkpoint verification notification
2374
- * @description Re-issue the pending verification challenge notification for an account. Meaningful for code-delivery challenges (otp / two_factor_sms / mobile_app_approval); a two_factor_app challenge has nothing to re-request (the code is generated on the device) and returns resent:false rather than an error, the response never claims a re-send that did not happen. `account_id` (in the body) identifies the mid-flight connect. Does not reset the checkpoint's expiry.
2371
+ * Re-send a checkpoint code, or switch its method
2372
+ * @description Without challenge: re-sends the pending code or notification for account_id (a two_factor_app challenge has nothing to resend: resent:false). With challenge (an id from challenge_selection): switches to that method and returns the next 202 checkpoint.
2375
2373
  */
2376
2374
  post: operations["postV1AuthCheckpointRequest"];
2377
2375
  delete?: never;
@@ -2391,7 +2389,7 @@ export interface paths {
2391
2389
  put?: never;
2392
2390
  /**
2393
2391
  * Poll a mobile-app-approval checkpoint
2394
- * @description Poll the pending mobile-app-approval challenge for an account and advance it. This is the completion driver for mobile_app_approval (and the in-app arm of otp_or_mobile_app_approval): call it repeatedly until the account is active. Returns object:"account" + status:"active" once approved; object:"checkpoint" + status:"pending" while still waiting; status:"checkpoint_required" (with challenge_type) when the approval chained to a new challenge (e.g. approval -> 2FA), switch to POST /v1/auth/checkpoint/solve for the new type; status:"expired"/"failed" on timeout/failure. A code-based checkpoint polled here returns 422 directing you to POST /v1/auth/checkpoint/solve instead. `account_id` (in the body) identifies the mid-flight connect.
2392
+ * @description Polls the pending mobile-app-approval challenge for account_id and advances it; call repeatedly until active. Returns active once approved, pending while waiting, or checkpoint_required if it chains. A code-based checkpoint here returns 422; use checkpoint/solve.
2395
2393
  */
2396
2394
  post: operations["postV1AuthCheckpointPoll"];
2397
2395
  delete?: never;
@@ -2409,7 +2407,7 @@ export interface paths {
2409
2407
  };
2410
2408
  /**
2411
2409
  * Get a connect session's status
2412
- * @description Return the current status of a credential connect session, keyed by its account id (acc_..., from auth/intent or a checkpoint response). status is one of checkpoint_required / done / expired / failed; checkpoint_required carries challenge_type. account_id is present once status is done. Poll until status leaves checkpoint_required.
2410
+ * @description Returns a credential connect session's status by account id (from auth/intent or a checkpoint). status is checkpoint_required, done, expired, or failed; checkpoint_required carries challenge_type. Poll until status leaves checkpoint_required.
2413
2411
  */
2414
2412
  get: operations["getV1AuthSessionsSessionId"];
2415
2413
  put?: never;
@@ -2429,7 +2427,7 @@ export interface paths {
2429
2427
  };
2430
2428
  /**
2431
2429
  * List the events received for an account
2432
- * @description Returns the events Curviate received for this account in the last 24 hours, newest received first, with the exact payload a registered webhook would have been delivered. Events are retained whether or not any webhook is subscribed to them, so this works with no listener running. Retention is 24 hours from received_at and is absolute, and a live claim does not extend it. Disconnecting an account removes its events from this response immediately; the rows are not otherwise deleted early. Events can arrive out of order, so treat the ordering as arrival order, not causal order. Each item carries its queue state, and `state` filters on it: `done` is what your agents have already handled, `unread` is what is still waiting, `claimed` is what someone holds right now. This read claims nothing and is safe to poll. Page until cursor is null.
2430
+ * @description Returns events received for this account in the last 24 hours, newest first, same payload a webhook would get. Retention is 24h from received_at, absolute; claiming doesn't extend it. Order is arrival, not causal. Claims nothing; safe to poll. Page until cursor is null.
2433
2431
  */
2434
2432
  get: operations["getV1AccountIdEvents"];
2435
2433
  put?: never;
@@ -2451,7 +2449,7 @@ export interface paths {
2451
2449
  put?: never;
2452
2450
  /**
2453
2451
  * Claim events to work on
2454
- * @description Leases up to `limit` unread events for this account and returns them, oldest `occurred_at` first, in one atomic step. Two agents claiming at the same instant never receive the same event, which a plain read plus a read flag cannot promise. Claiming when nothing is available returns an empty list and a 200. `consumer` is free text that identifies your worker. It is recorded on each event and never verified, so the lease is cooperative: it keeps your own agents from duplicating work, and it is not access control. Finish an event with the done call, or hand it back with release. If you do neither, the lease expires after `lease_seconds` (default 300, max 3600) and the event becomes claimable again. `limit` defaults to 10 and caps at 100. Ordering is arrival order, not causal order: events can arrive out of sequence, so establish causality from the payload if you need it. Retention is still 24 hours from `received_at` and a lease does not extend it, so an event can disappear while you hold it.
2452
+ * @description Leases up to limit unread events atomically; two agents never get the same one. consumer is free text, not checked, cooperative rather than access control. Finish with done or release, or it expires after lease_seconds. Retention is still 24h; an event can vanish while held.
2455
2453
  */
2456
2454
  post: operations["postV1AccountIdEventsClaim"];
2457
2455
  delete?: never;
@@ -2471,7 +2469,7 @@ export interface paths {
2471
2469
  put?: never;
2472
2470
  /**
2473
2471
  * Release a claimed event
2474
- * @description Hands a leased event back so it can be claimed again immediately, by you or by anyone else. Use it when your handler fails: returning the work is better than holding it for the rest of the lease. No request body. The caller is not checked against whoever claimed it, because the lease is cooperative rather than access control. Releasing an event that is already done changes nothing and returns state `done`.
2472
+ * @description Hands a leased event back so it can be claimed again immediately. Use when your handler fails. Not checked against the original claimer: cooperative, not access control. Releasing an already-done event changes nothing.
2475
2473
  */
2476
2474
  post: operations["postV1AccountIdEventsEventIdRelease"];
2477
2475
  delete?: never;
@@ -2491,7 +2489,7 @@ export interface paths {
2491
2489
  put?: never;
2492
2490
  /**
2493
2491
  * Mark an event done
2494
- * @description Marks an event handled. This is the only terminal state there is, and it is shared across every consumer under this tenant: a done event leaves the unread set for all of them, so it is the signal that the work is finished rather than a per-agent bookmark. There is no failed state. An event nothing can handle needs no special marking, it expires with the rest at 24 hours. No request body, safe to call twice, and it keeps the first completion time.
2492
+ * @description Marks an event handled, the only terminal state, shared across every consumer under the tenant. No failed state; an unhandled event just expires at 24 hours. Safe to call twice; keeps the first completion time.
2495
2493
  */
2496
2494
  post: operations["postV1AccountIdEventsEventIdDone"];
2497
2495
  delete?: never;
@@ -2555,7 +2553,7 @@ export interface paths {
2555
2553
  put?: never;
2556
2554
  /**
2557
2555
  * Send a test delivery
2558
- * @description Queues a synthetic delivery to this webhook so you can confirm your endpoint really receives and verifies deliveries, without waiting for a real event. It travels the normal path: the same signature construction, the same custom headers, the same delivery record, the same retry schedule. The event name is always webhook.test, which is not in the event catalogue and cannot be subscribed to, so it can never be mistaken for a real event. The payload carries no LinkedIn content. Match data.test_id in what arrives against the test_id in this response.
2556
+ * @description Queues a synthetic delivery to this webhook to confirm your endpoint receives and verifies deliveries. Travels the normal path: signature, headers, retry schedule. Event name is always webhook.test, never a real event. Match data.test_id against this response's test_id.
2559
2557
  */
2560
2558
  post: operations["postV1WebhooksIdTest"];
2561
2559
  delete?: never;
@@ -2601,7 +2599,7 @@ export interface paths {
2601
2599
  };
2602
2600
  /**
2603
2601
  * Read an account's safety policy
2604
- * @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. Each value is this account's own where it set one, otherwise the tenant default for its `limit_profile` (`GET /v1/safety-policy`), otherwise the Curviate default. 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.
2602
+ * @description Returns every configurable safety field for every budget row of this account: ceiling, bands, window, posture, warm-up, and where each value was inherited from. Fields, posture and precedence: /reference/safety.
2605
2603
  */
2606
2604
  get: operations["getV1AccountIdSafetyPolicy"];
2607
2605
  put?: never;
@@ -2611,7 +2609,7 @@ export interface paths {
2611
2609
  head?: never;
2612
2610
  /**
2613
2611
  * Update an account's safety policy
2614
- * @description The account-level safety-policy write (tenant-wide defaults are set on `PATCH /v1/safety-policy`). 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 tenant default where one is set, the Curviate default otherwise. 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 pins it, and the pin wins from then on: no connect, reconnect or account read moves it again until you release it with `limit_profile_source: "default"`, which is sent on its own: changing `limit_profile` and releasing it in the same request is refused. 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.
2612
+ * @description Updates this account's safety policy. Send only the fields you're changing; null clears an override back to the tenant or Curviate default. Any value is accepted, none are clamped. Fields, posture and precedence: /reference/safety.
2615
2613
  */
2616
2614
  patch: operations["patchV1AccountIdSafetyPolicy"];
2617
2615
  trace?: never;
@@ -2624,8 +2622,8 @@ export interface paths {
2624
2622
  cookie?: never;
2625
2623
  };
2626
2624
  /**
2627
- * List what Curviate refused or warned about
2628
- * @description Returns this account's safety events, newest first: every action Curviate refused, and every action it let through while flagging that a limit had been crossed. Under the default posture nothing is refused, so everything here is a warning and `blocked` is how you tell the two apart. Each event names the budget row that breached, why, the operation that hit it and when. Filter by `budget_row` for one action type and by `since` / `until` for a period, and page until `cursor` is null. This is a read of what already happened, so it never changes a limit or a count: to change what is refused, update the safety policy. The account resource is the other half of the picture, reporting where each row stands right now rather than what has already been flagged. One entry here is not a refusal: `reason: "halt_cleared"` with `blocked: false` records somebody lifting a platform pause early through `clear_halts` on the safety policy, and it sits beside the `rate_limited` entry it lifted so the pause and its end read as one thread.
2625
+ * List limit hits
2626
+ * @description Each entry is an action Curviate refused (enforce) or warned about (warn) at a safety limit or pause, or a halt_cleared record of a pause lifted early. Read blocked and reason; filter by budget_row, since and until, and page until cursor is null.
2629
2627
  */
2630
2628
  get: operations["getV1AccountIdSafetyEvents"];
2631
2629
  put?: never;
@@ -2645,7 +2643,7 @@ export interface paths {
2645
2643
  };
2646
2644
  /**
2647
2645
  * Read the tenant safety defaults
2648
- * @description Returns the tenant-wide safety defaults, per limit profile and per budget row: the values every account on that profile resolves from unless it sets its own. A value nobody has set here is the Curviate default, and a value set above the Curviate default carries an `over_default` entry naming the value, the default and its source class. Also carries `tenant_default_posture`. Works with no accounts connected, so defaults can be in place before the first one is.
2646
+ * @description Returns the tenant-wide safety defaults per limit profile and budget row, that accounts resolve from unless they override. Works with no accounts connected. Fields, posture and precedence: /reference/safety.
2649
2647
  */
2650
2648
  get: operations["getV1SafetyPolicy"];
2651
2649
  put?: never;
@@ -2655,11 +2653,71 @@ export interface paths {
2655
2653
  head?: never;
2656
2654
  /**
2657
2655
  * Update the tenant safety defaults
2658
- * @description The tenant-level safety-policy write. Sets defaults per limit profile and per budget row; every account on that profile resolves from them unless it overrides the same field itself, including accounts connected later. THIS CHANGES EVERY ACCOUNT IN THE TENANT THAT HAS NOT OVERRIDDEN THE FIELD, and it applies immediately: under `enforce` posture, lowering a default can start refusing actions across the tenant in one request. The response carries `impact`: how many accounts had a ceiling change, and how many moved into `over`, measured on those accounts before and after the write. Send only what you are changing; `null` clears a default back to the Curviate default. A value equal to the one already in force is not stored and not recorded. Any limit may be set to any value, and a value above the Curviate default is reported rather than refused. Every change is appended to the ledger with the previous value, the new value, the Curviate default, the actor and the time. Per-row posture is not a tenant default: use `tenant_default_posture` here, or `posture` on an account's own policy. Per-account values are set on `PATCH /v1/{account_id}/safety-policy`.
2656
+ * @description Updates tenant-wide safety defaults per limit profile and budget row; affects every account that hasn't overridden the field, immediately. Fields, posture and precedence: /reference/safety.
2659
2657
  */
2660
2658
  patch: operations["patchV1SafetyPolicy"];
2661
2659
  trace?: never;
2662
2660
  };
2661
+ "/v1/billing/seats/add": {
2662
+ parameters: {
2663
+ query?: never;
2664
+ header?: never;
2665
+ path?: never;
2666
+ cookie?: never;
2667
+ };
2668
+ get?: never;
2669
+ put?: never;
2670
+ /**
2671
+ * Add seats
2672
+ * @description Adds seats to the workspace's active subscription. A trialing workspace gets 409 TRIAL_ACTIVE_SEAT_LIMIT (buy to convert first). Every call buys the seats it asks for.
2673
+ */
2674
+ post: operations["postV1BillingSeatsAdd"];
2675
+ delete?: never;
2676
+ options?: never;
2677
+ head?: never;
2678
+ patch?: never;
2679
+ trace?: never;
2680
+ };
2681
+ "/v1/billing/seats/{seat_id}/cancel": {
2682
+ parameters: {
2683
+ query?: never;
2684
+ header?: never;
2685
+ path?: never;
2686
+ cookie?: never;
2687
+ };
2688
+ get?: never;
2689
+ put?: never;
2690
+ /**
2691
+ * Cancel a seat
2692
+ * @description Schedules a seat for cancellation at the end of the current period. Already scheduled: returns the existing effective date. Already effective: 400 ALREADY_CANCELLED.
2693
+ */
2694
+ post: operations["postV1BillingSeatsSeatIdCancel"];
2695
+ delete?: never;
2696
+ options?: never;
2697
+ head?: never;
2698
+ patch?: never;
2699
+ trace?: never;
2700
+ };
2701
+ "/v1/billing/seats/{seat_id}/cancel/revert": {
2702
+ parameters: {
2703
+ query?: never;
2704
+ header?: never;
2705
+ path?: never;
2706
+ cookie?: never;
2707
+ };
2708
+ get?: never;
2709
+ put?: never;
2710
+ /**
2711
+ * Revert a scheduled seat cancellation
2712
+ * @description Reverts a seat's pending end-of-period cancellation. 400 CANCELLATION_ALREADY_EFFECTIVE when nothing is scheduled or it already took effect; 400 INVALID_CANCELLATION_SOURCE when the whole subscription, not this seat, was scheduled to cancel.
2713
+ */
2714
+ post: operations["postV1BillingSeatsSeatIdCancelRevert"];
2715
+ delete?: never;
2716
+ options?: never;
2717
+ head?: never;
2718
+ patch?: never;
2719
+ trace?: never;
2720
+ };
2663
2721
  }
2664
2722
  export type webhooks = Record<string, never>;
2665
2723
  export interface components {
@@ -2864,18 +2922,18 @@ export interface operations {
2864
2922
  getV1AccountIdUsersUserId: {
2865
2923
  parameters: {
2866
2924
  query?: {
2867
- /** @description Which profile sections to fetch (repeatable, flat). Pass one or more of: linkedin_experience, linkedin_education, linkedin_languages, linkedin_skills, linkedin_certifications, linkedin_volunteer_experience, linkedin_projects, linkedin_recommendations, linkedin_interests (or linkedin_* for all), plus each value's _preview variant. Omit for base fields only. */
2925
+ /** @description Profile sections to fetch, repeatable: linkedin_experience, linkedin_skills, and others (each has a _preview variant). Omit for base fields only. */
2868
2926
  linkedin_sections?: string[];
2869
- /** @description How willing this read is to reach LinkedIn. `auto` (default) serves a stored copy while it is within the resource's freshness threshold; `live` always fetches; `refill` serves a stored copy at any age and fetches once when this read has no stored copy yet; `cache_only` never fetches and returns NOT_STORED when nothing is stored. `cache_only` cannot be combined with max_age. A 502 under `cache_only` means the store could not be read, not that nothing is stored: no request was made to LinkedIn, and the same read is worth retrying. */
2927
+ /** @description How willing this read is to reach LinkedIn: auto (default), live, refill, or cache_only. Details: /reference/getting-started/cache. */
2870
2928
  mode?: "live" | "auto" | "refill" | "cache_only";
2871
- /** @description Maximum age, in seconds, of a stored copy this read will accept. Overrides the `auto`, `live` and `refill` presets in both directions; `0` is the same as `mode=live`. Not accepted with `mode=cache_only`, whose guarantee is not a freshness threshold. */
2929
+ /** @description Maximum age in seconds of a stored copy this read accepts; overrides mode in both directions. Not with cache_only. Details: /reference/getting-started/cache. */
2872
2930
  max_age?: number;
2873
2931
  };
2874
2932
  header?: never;
2875
2933
  path: {
2876
2934
  /** @description The account ID (`acc_...`) to use for the request. */
2877
2935
  account_id: string;
2878
- /** @description "me" for the caller's own account, or another LinkedIn user's public identifier, member ID, or profile URL. Note on the skills section: a skill's `endorsement_id` (the value needed to endorse that skill) is returned only for users you are eligible to endorse; i.e. your 1st-degree connections. For users outside your network, and on your own profile, the skills section still lists each skill (name, endorsement_count, endorsed, insights) but omits `endorsement_id`. This depends on the connection, not on the identifier form used to look the user up. */
2936
+ /** @description "me" for the caller, or a public identifier, member ID, or profile URL. endorsement_id appears only for connections eligible to endorse. */
2879
2937
  user_id: string;
2880
2938
  };
2881
2939
  cookie?: never;
@@ -3528,7 +3586,7 @@ export interface operations {
3528
3586
  /** @description New last name. */
3529
3587
  last_name?: string;
3530
3588
  /** @description New text for your profile's About section. */
3531
- bio?: string;
3589
+ bio?: "" | string;
3532
3590
  /** @description Your profile headline (the short line shown under your name). */
3533
3591
  headline?: string;
3534
3592
  /** @description Skills to add to your profile. Add-only, this does not remove or reorder existing skills. */
@@ -4576,9 +4634,9 @@ export interface operations {
4576
4634
  getV1AccountIdProfileVisitors: {
4577
4635
  parameters: {
4578
4636
  query?: {
4579
- /** @description Maximum viewers to return in this page (1-100, default 20). The server may walk a few internal pages to fill one page, and never slices a fetched page down to a smaller limit, so the returned count can exceed this value; the response text says so and includes a cursor to continue when it does. */
4637
+ /** @description Maximum viewers per page (1-100, default 20). The returned count can exceed this; the response includes a cursor to continue. */
4580
4638
  limit?: number;
4581
- /** @description Opaque pagination cursor from a prior response's `cursor`; omit for the first page. Zero individuals on a page does NOT mean the list is exhausted while `cursor` is non-null (an aggregate-only page may precede more identified viewers); page until `cursor` is null. Heavy pagination consumes a shared, throttled upstream request budget; you own the spend via the cursor. */
4639
+ /** @description Opaque cursor from a prior response's cursor; omit for the first page. Page until cursor is null, even on a page with zero people. */
4582
4640
  cursor?: string;
4583
4641
  };
4584
4642
  header?: never;
@@ -5445,7 +5503,7 @@ export interface operations {
5445
5503
  path: {
5446
5504
  /** @description The connected LinkedIn account to read with. */
5447
5505
  account_id: string;
5448
- /** @description The company to retrieve. Accepts the company's public handle (the slug in `linkedin.com/company/<handle>`, e.g. t-systems) or its numeric id (e.g. 1234567). The numeric id field returned on each POST /v1/{account_id}/search/companies result, or the id field of this endpoint's own response, can be passed here directly. */
5506
+ /** @description The company to retrieve: its public handle (the `linkedin.com/company/<handle>` slug) or numeric id. Both come back on a search/companies result. */
5449
5507
  identifier: string;
5450
5508
  };
5451
5509
  cookie?: never;
@@ -5669,7 +5727,7 @@ export interface operations {
5669
5727
  path: {
5670
5728
  /** @description The connected LinkedIn account to read with. */
5671
5729
  account_id: string;
5672
- /** @description The company's numeric id (e.g. 112013061), the id field of GET /v1/{account_id}/companies/{identifier} or a POST /v1/{account_id}/search/companies result. A public handle or URN is not accepted here; pass the numeric id. */
5730
+ /** @description The company's numeric id (e.g. 112013061), the id field from GET .../companies/{identifier} or a search/companies result. A handle or URN is not accepted here. */
5673
5731
  identifier: string;
5674
5732
  };
5675
5733
  cookie?: never;
@@ -5856,7 +5914,7 @@ export interface operations {
5856
5914
  path: {
5857
5915
  /** @description The connected LinkedIn account to read with. */
5858
5916
  account_id: string;
5859
- /** @description The company's numeric id (e.g. 112013061), the id field of GET /v1/{account_id}/companies/{identifier} or a POST /v1/{account_id}/search/companies result. A public handle or URN is not accepted here; pass the numeric id. */
5917
+ /** @description The company's numeric id (e.g. 112013061), the id field from GET .../companies/{identifier} or a search/companies result. A handle or URN is not accepted here. */
5860
5918
  identifier: string;
5861
5919
  };
5862
5920
  cookie?: never;
@@ -6052,7 +6110,7 @@ export interface operations {
6052
6110
  path: {
6053
6111
  /** @description The connected LinkedIn account to read with. */
6054
6112
  account_id: string;
6055
- /** @description The company's numeric id (e.g. 112013061), the id field of GET /v1/{account_id}/companies/{identifier} or a POST /v1/{account_id}/search/companies result. A public handle or URN is not accepted here; pass the numeric id. */
6113
+ /** @description The company's numeric id (e.g. 112013061), the id field from GET .../companies/{identifier} or a search/companies result. A handle or URN is not accepted here. */
6056
6114
  identifier: string;
6057
6115
  };
6058
6116
  cookie?: never;
@@ -6225,7 +6283,7 @@ export interface operations {
6225
6283
  path: {
6226
6284
  /** @description The connected LinkedIn account, which must administer the page with invite rights. */
6227
6285
  account_id: string;
6228
- /** @description The company's numeric id (e.g. 112013061), the id field of GET /v1/{account_id}/companies/{identifier} or a POST /v1/{account_id}/search/companies result. A public handle or URN is not accepted here; pass the numeric id. */
6286
+ /** @description The company's numeric id (e.g. 112013061), the id field from GET .../companies/{identifier} or a search/companies result. A handle or URN is not accepted here. */
6229
6287
  identifier: string;
6230
6288
  };
6231
6289
  cookie?: never;
@@ -6239,7 +6297,7 @@ export interface operations {
6239
6297
  };
6240
6298
  };
6241
6299
  responses: {
6242
- /** @description One per-invitee outcome for each requested member, in request order, for an all-valid request. If any invitee id is invalid, the whole request is rejected (404), with no partial success. Re-inviting an already-invited member returns the same invitation id with status "already_invited", an idempotent no-op, never a duplicate. Only identifiers transit; nothing is stored. */
6300
+ /** @description One per-invitee outcome for each requested member, in request order, for an all-valid request. If any invitee id is invalid, the whole request is rejected (404), with no partial success. Re-inviting an already-invited member returns the same invitation id with status "already_invited"; calling again never creates a duplicate. Only identifiers transit; nothing is stored. */
6243
6301
  200: {
6244
6302
  headers: {
6245
6303
  "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
@@ -6263,7 +6321,7 @@ export interface operations {
6263
6321
  /** @description The member id from the request, echoed back. */
6264
6322
  invitee_id: string;
6265
6323
  /**
6266
- * @description Per-invitee outcome. "invited": a new follow-invitation was created. "already_invited": a pending invitation already existed (idempotent no-op; the same invitation_id is returned, never a duplicate). "ineligible": the member is not an invitable 1st-degree connection. "not_found": the member id did not resolve.
6324
+ * @description Per-invitee outcome. "invited": a new follow-invitation was created. "already_invited": a pending invitation already existed; calling again returns the same invitation_id, never a duplicate. "ineligible": the member is not an invitable 1st-degree connection. "not_found": the member id did not resolve.
6267
6325
  * @enum {string}
6268
6326
  */
6269
6327
  status: "invited" | "already_invited" | "ineligible" | "not_found";
@@ -6397,7 +6455,7 @@ export interface operations {
6397
6455
  path: {
6398
6456
  /** @description The connected LinkedIn account, which must administer the page. */
6399
6457
  account_id: string;
6400
- /** @description The company's numeric id (e.g. 112013061), the id field of GET /v1/{account_id}/companies/{identifier} or a POST /v1/{account_id}/search/companies result. A public handle or URN is not accepted here; pass the numeric id. */
6458
+ /** @description The company's numeric id (e.g. 112013061), the id field from GET .../companies/{identifier} or a search/companies result. A handle or URN is not accepted here. */
6401
6459
  identifier: string;
6402
6460
  };
6403
6461
  cookie?: never;
@@ -6555,7 +6613,7 @@ export interface operations {
6555
6613
  path: {
6556
6614
  /** @description The connected LinkedIn account, which must administer the page with invite rights. */
6557
6615
  account_id: string;
6558
- /** @description The company's numeric id (e.g. 112013061), the id field of GET /v1/{account_id}/companies/{identifier} or a POST /v1/{account_id}/search/companies result. A public handle or URN is not accepted here; pass the numeric id. */
6616
+ /** @description The company's numeric id (e.g. 112013061), the id field from GET .../companies/{identifier} or a search/companies result. A handle or URN is not accepted here. */
6559
6617
  identifier: string;
6560
6618
  };
6561
6619
  cookie?: never;
@@ -6698,14 +6756,14 @@ export interface operations {
6698
6756
  limit?: number;
6699
6757
  /** @description Opaque pagination cursor from a prior response's cursor. Omit for the first page. */
6700
6758
  cursor?: string;
6701
- /** @description Additional response fields to resolve, comma-separated in a single value (for example expand=public_identifier). Accepted values: public_identifier. When requested, the field is present on every user object in the response, carrying either a value or null. Omit for the base fields only. Pass the parameter once; repeating it drops values. At most 25 people per request need an extra lookup to resolve; anyone beyond that carries null, so ask for a smaller page to resolve them all. */
6759
+ /** @description Extra fields to resolve, comma-separated in one value (expand=public_identifier). Present on every result as a value or null; repeating the key drops values. */
6702
6760
  expand?: string;
6703
6761
  };
6704
6762
  header?: never;
6705
6763
  path: {
6706
6764
  /** @description The connected LinkedIn account, which must administer the page. */
6707
6765
  account_id: string;
6708
- /** @description The company's numeric id (e.g. 112013061), the id field of GET /v1/{account_id}/companies/{identifier} or a POST /v1/{account_id}/search/companies result. A public handle or URN is not accepted here; pass the numeric id. */
6766
+ /** @description The company's numeric id (e.g. 112013061), the id field from GET .../companies/{identifier} or a search/companies result. A handle or URN is not accepted here. */
6709
6767
  identifier: string;
6710
6768
  };
6711
6769
  cookie?: never;
@@ -6889,14 +6947,14 @@ export interface operations {
6889
6947
  getV1AccountIdCompaniesIdentifierChatsChatId: {
6890
6948
  parameters: {
6891
6949
  query?: {
6892
- /** @description Additional response fields to resolve, comma-separated in a single value (for example expand=public_identifier). Accepted values: public_identifier. When requested, the field is present on every user object in the response, carrying either a value or null. Omit for the base fields only. Pass the parameter once; repeating it drops values. At most 25 people per request need an extra lookup to resolve; anyone beyond that carries null, so ask for a smaller page to resolve them all. */
6950
+ /** @description Extra fields to resolve, comma-separated in one value (expand=public_identifier). Present on every result as a value or null; repeating the key drops values. */
6893
6951
  expand?: string;
6894
6952
  };
6895
6953
  header?: never;
6896
6954
  path: {
6897
6955
  /** @description The connected LinkedIn account, which must administer the page. */
6898
6956
  account_id: string;
6899
- /** @description The company's numeric id (e.g. 112013061), the id field of GET /v1/{account_id}/companies/{identifier} or a POST /v1/{account_id}/search/companies result. A public handle or URN is not accepted here; pass the numeric id. */
6957
+ /** @description The company's numeric id (e.g. 112013061), the id field from GET .../companies/{identifier} or a search/companies result. A handle or URN is not accepted here. */
6900
6958
  identifier: string;
6901
6959
  /** @description The conversation id in the "2-..." form, the id field of a chats list or search result. Pass it verbatim. */
6902
6960
  chat_id: string;
@@ -7076,14 +7134,14 @@ export interface operations {
7076
7134
  limit?: number;
7077
7135
  /** @description Opaque pagination cursor from a prior response's cursor. Omit for the first page. */
7078
7136
  cursor?: string;
7079
- /** @description Additional response fields to resolve, comma-separated in a single value (for example expand=public_identifier). Accepted values: public_identifier. When requested, the field is present on every user object in the response, carrying either a value or null. Omit for the base fields only. Pass the parameter once; repeating it drops values. At most 25 people per request need an extra lookup to resolve; anyone beyond that carries null, so ask for a smaller page to resolve them all. */
7137
+ /** @description Extra fields to resolve, comma-separated in one value (expand=public_identifier). Present on every result as a value or null; repeating the key drops values. */
7080
7138
  expand?: string;
7081
7139
  };
7082
7140
  header?: never;
7083
7141
  path: {
7084
7142
  /** @description The connected LinkedIn account, which must administer the page. */
7085
7143
  account_id: string;
7086
- /** @description The company's numeric id (e.g. 112013061), the id field of GET /v1/{account_id}/companies/{identifier} or a POST /v1/{account_id}/search/companies result. A public handle or URN is not accepted here; pass the numeric id. */
7144
+ /** @description The company's numeric id (e.g. 112013061), the id field from GET .../companies/{identifier} or a search/companies result. A handle or URN is not accepted here. */
7087
7145
  identifier: string;
7088
7146
  /** @description The conversation id in the "2-..." form, the id field of a chats list or search result. Pass it verbatim. */
7089
7147
  chat_id: string;
@@ -7252,7 +7310,7 @@ export interface operations {
7252
7310
  path: {
7253
7311
  /** @description The connected LinkedIn account, which must administer the page. */
7254
7312
  account_id: string;
7255
- /** @description The company's numeric id (e.g. 112013061), the id field of GET /v1/{account_id}/companies/{identifier} or a POST /v1/{account_id}/search/companies result. A public handle or URN is not accepted here; pass the numeric id. */
7313
+ /** @description The company's numeric id (e.g. 112013061), the id field from GET .../companies/{identifier} or a search/companies result. A handle or URN is not accepted here. */
7256
7314
  identifier: string;
7257
7315
  /** @description The conversation id in the "2-..." form, the id field of a chats list or search result. Pass it verbatim. */
7258
7316
  chat_id: string;
@@ -7266,7 +7324,7 @@ export interface operations {
7266
7324
  text?: string;
7267
7325
  /** @description Optional message ID to quote or reply to. */
7268
7326
  quote_id?: string;
7269
- /** @description Optional file attachments (base64-encoded). */
7327
+ /** @description Optional file attachments, base64-encoded: at most 5 MiB per file and 9 MiB for the whole request body (base64 adds about a third). */
7270
7328
  attachments?: {
7271
7329
  /** @description Base64-encoded file bytes. */
7272
7330
  content: string;
@@ -7427,14 +7485,14 @@ export interface operations {
7427
7485
  getV1AccountIdCompaniesIdentifierChatsChatIdMessagesMessageId: {
7428
7486
  parameters: {
7429
7487
  query?: {
7430
- /** @description Additional response fields to resolve, comma-separated in a single value (for example expand=public_identifier). Accepted values: public_identifier. When requested, the field is present on every user object in the response, carrying either a value or null. Omit for the base fields only. Pass the parameter once; repeating it drops values. At most 25 people per request need an extra lookup to resolve; anyone beyond that carries null, so ask for a smaller page to resolve them all. */
7488
+ /** @description Extra fields to resolve, comma-separated in one value (expand=public_identifier). Present on every result as a value or null; repeating the key drops values. */
7431
7489
  expand?: string;
7432
7490
  };
7433
7491
  header?: never;
7434
7492
  path: {
7435
7493
  /** @description The connected LinkedIn account, which must administer the page. */
7436
7494
  account_id: string;
7437
- /** @description The company's numeric id (e.g. 112013061), the id field of GET /v1/{account_id}/companies/{identifier} or a POST /v1/{account_id}/search/companies result. A public handle or URN is not accepted here; pass the numeric id. */
7495
+ /** @description The company's numeric id (e.g. 112013061), the id field from GET .../companies/{identifier} or a search/companies result. A handle or URN is not accepted here. */
7438
7496
  identifier: string;
7439
7497
  /** @description The conversation id in the "2-..." form, the id field of a chats list or search result. Pass it verbatim. */
7440
7498
  chat_id: string;
@@ -7601,14 +7659,14 @@ export interface operations {
7601
7659
  limit?: number;
7602
7660
  /** @description Opaque pagination cursor from a prior response's cursor. Omit for the first page. */
7603
7661
  cursor?: string;
7604
- /** @description Additional response fields to resolve, comma-separated in a single value (for example expand=public_identifier). Accepted values: public_identifier. When requested, the field is present on every user object in the response, carrying either a value or null. Omit for the base fields only. Pass the parameter once; repeating it drops values. At most 25 people per request need an extra lookup to resolve; anyone beyond that carries null, so ask for a smaller page to resolve them all. */
7662
+ /** @description Extra fields to resolve, comma-separated in one value (expand=public_identifier). Present on every result as a value or null; repeating the key drops values. */
7605
7663
  expand?: string;
7606
7664
  };
7607
7665
  header?: never;
7608
7666
  path: {
7609
7667
  /** @description The connected LinkedIn account, which must administer the page. */
7610
7668
  account_id: string;
7611
- /** @description The company's numeric id (e.g. 112013061), the id field of GET /v1/{account_id}/companies/{identifier} or a POST /v1/{account_id}/search/companies result. A public handle or URN is not accepted here; pass the numeric id. */
7669
+ /** @description The company's numeric id (e.g. 112013061), the id field from GET .../companies/{identifier} or a search/companies result. A handle or URN is not accepted here. */
7612
7670
  identifier: string;
7613
7671
  };
7614
7672
  cookie?: never;
@@ -7797,9 +7855,9 @@ export interface operations {
7797
7855
  getV1AccountIdProfileGroups: {
7798
7856
  parameters: {
7799
7857
  query?: {
7800
- /** @description Target any other LinkedIn user's groups instead of the acting account's own, a vanity slug or a full /in/{vanity} URL. Omit to enumerate the acting account's own groups (a complete read). A profile target is a documented partial read (that target's interests-groups section only). */
7858
+ /** @description Target another LinkedIn user's groups instead of your own (vanity slug or /in/{vanity} URL). Partial read: interests-groups section only. */
7801
7859
  profile?: string;
7802
- /** @description Maximum items to return per page (1-100, default 20). list_group_members walks fixed-size internal pages and cannot go below one page, so its returned count can exceed this value; the response text says so and includes a cursor to continue when it does. */
7860
+ /** @description Maximum items per page (1-100, default 20). The returned count can exceed this; the response includes a cursor to continue. */
7803
7861
  limit?: number;
7804
7862
  /** @description Opaque pagination cursor from a prior response's cursor. Omit for the first page. */
7805
7863
  cursor?: string;
@@ -7985,7 +8043,7 @@ export interface operations {
7985
8043
  path: {
7986
8044
  /** @description The connected LinkedIn account performing the read. */
7987
8045
  account_id: string;
7988
- /** @description The group to look up. Accepts a numeric group id (e.g. 9123014) or a full group URL (e.g. https://www.linkedin.com/groups/9123014/, .../members/). The numeric id is extracted from either form, pass the id field returned by GET /v1/{account_id}/profile/groups or this endpoint's own response. */
8046
+ /** @description The group to look up: a numeric group id (e.g. 9123014) or its full group URL; the id is extracted from either form. */
7989
8047
  group: string;
7990
8048
  };
7991
8049
  cookie?: never;
@@ -8157,18 +8215,18 @@ export interface operations {
8157
8215
  getV1AccountIdGroupsGroupMembers: {
8158
8216
  parameters: {
8159
8217
  query?: {
8160
- /** @description Filter members by name, prefix/substring, multi-word, case-insensitive (e.g. 'raphael red' matches "Raphael Redmer"). Folds in member search as this SAME endpoint, not a separate one. Omit (or pass an empty string) for the full roster. */
8218
+ /** @description Filter members by name, prefix/substring, case-insensitive. Folds in member search as this endpoint, not a separate one. */
8161
8219
  name?: string;
8162
- /** @description Maximum items to return per page (1-100, default 20). list_group_members walks fixed-size internal pages and cannot go below one page, so its returned count can exceed this value; the response text says so and includes a cursor to continue when it does. */
8220
+ /** @description Maximum items per page (1-100, default 20). The returned count can exceed this; the response includes a cursor to continue. */
8163
8221
  limit?: number;
8164
- /** @description Opaque pagination cursor from a prior response's cursor. Omit for the first page. Scoped to the `name` value it was minted under, replaying it alongside a different `name` is rejected. */
8222
+ /** @description Opaque cursor from a prior response's cursor. Omit for the first page. Scoped to the name value it was minted under. */
8165
8223
  cursor?: string;
8166
8224
  };
8167
8225
  header?: never;
8168
8226
  path: {
8169
8227
  /** @description The connected LinkedIn account performing the read. */
8170
8228
  account_id: string;
8171
- /** @description The group to look up. Accepts a numeric group id (e.g. 9123014) or a full group URL (e.g. https://www.linkedin.com/groups/9123014/, .../members/). The numeric id is extracted from either form, pass the id field returned by GET /v1/{account_id}/profile/groups or this endpoint's own response. */
8229
+ /** @description The group to look up: a numeric group id (e.g. 9123014) or its full group URL; the id is extracted from either form. */
8172
8230
  group: string;
8173
8231
  };
8174
8232
  cookie?: never;
@@ -8320,7 +8378,7 @@ export interface operations {
8320
8378
  getV1AccountIdSearchParameters: {
8321
8379
  parameters: {
8322
8380
  query: {
8323
- /** @description Parameter type to resolve. Classic types: LOCATION, PEOPLE, RELATION, COMPANY, SCHOOL, INDUSTRY, SERVICE, JOB_FUNCTION, JOB_TITLE, EMPLOYMENT_TYPE, SKILL. Non-classic types (e.g. GROUPS, SALES_INDUSTRY) are rejected. */
8381
+ /** @description Parameter type to resolve. Non-classic types (e.g. GROUPS, SALES_INDUSTRY) are rejected. */
8324
8382
  type: "LOCATION" | "PEOPLE" | "RELATION" | "COMPANY" | "SCHOOL" | "INDUSTRY" | "SERVICE" | "JOB_FUNCTION" | "JOB_TITLE" | "EMPLOYMENT_TYPE" | "SKILL";
8325
8383
  /** @description Human term to resolve to opaque filter IDs (e.g. 'software development'). Required for every type, including EMPLOYMENT_TYPE. */
8326
8384
  keywords: string;
@@ -10183,7 +10241,7 @@ export interface operations {
10183
10241
  limit?: number;
10184
10242
  /** @description An opaque cursor for pagination. Pass the `cursor` from the preceding response to fetch the next page. */
10185
10243
  cursor?: string;
10186
- /** @description Additional response fields to resolve, comma-separated in a single value (for example expand=public_identifier). Accepted values: public_identifier. When requested, the field is present on every user object in the response, carrying either a value or null. Omit for the base fields only. Pass the parameter once; repeating it drops values. At most 25 people per request need an extra lookup to resolve; anyone beyond that carries null, so ask for a smaller page to resolve them all. */
10244
+ /** @description Extra fields to resolve, comma-separated in one value (expand=public_identifier). Present on every result as a value or null; repeating the key drops values. */
10187
10245
  expand?: string;
10188
10246
  };
10189
10247
  header?: never;
@@ -10453,7 +10511,7 @@ export interface operations {
10453
10511
  text: string;
10454
10512
  /** @description Optional conversation name / subject line (<= 200 chars). */
10455
10513
  subject?: string;
10456
- /** @description Optional file attachments (base64-encoded). */
10514
+ /** @description Optional file attachments, base64-encoded: at most 5 MiB per file and 9 MiB for the whole request body (base64 adds about a third). */
10457
10515
  attachments?: {
10458
10516
  /** @description Base64-encoded file bytes. */
10459
10517
  content: string;
@@ -10606,11 +10664,11 @@ export interface operations {
10606
10664
  getV1AccountIdChatsChatId: {
10607
10665
  parameters: {
10608
10666
  query?: {
10609
- /** @description Additional response fields to resolve, comma-separated in a single value (for example expand=public_identifier). Accepted values: public_identifier. When requested, the field is present on every user object in the response, carrying either a value or null. Omit for the base fields only. Pass the parameter once; repeating it drops values. At most 25 people per request need an extra lookup to resolve; anyone beyond that carries null, so ask for a smaller page to resolve them all. */
10667
+ /** @description Extra fields to resolve, comma-separated in one value (expand=public_identifier). Present on every result as a value or null; repeating the key drops values. */
10610
10668
  expand?: string;
10611
- /** @description How willing this read is to reach LinkedIn. `auto` (default) serves a stored copy while it is within the resource's freshness threshold; `live` always fetches; `refill` serves a stored copy at any age and fetches once when this read has no stored copy yet; `cache_only` never fetches and returns NOT_STORED when nothing is stored. `cache_only` cannot be combined with max_age. A 502 under `cache_only` means the store could not be read, not that nothing is stored: no request was made to LinkedIn, and the same read is worth retrying. */
10669
+ /** @description How willing this read is to reach LinkedIn: auto (default), live, refill, or cache_only. Details: /reference/getting-started/cache. */
10612
10670
  mode?: "live" | "auto" | "refill" | "cache_only";
10613
- /** @description Maximum age, in seconds, of a stored copy this read will accept. Overrides the `auto`, `live` and `refill` presets in both directions; `0` is the same as `mode=live`. Not accepted with `mode=cache_only`, whose guarantee is not a freshness threshold. */
10671
+ /** @description Maximum age in seconds of a stored copy this read accepts; overrides mode in both directions. Not with cache_only. Details: /reference/getting-started/cache. */
10614
10672
  max_age?: number;
10615
10673
  };
10616
10674
  header?: never;
@@ -10999,9 +11057,9 @@ export interface operations {
10999
11057
  getV1AccountIdChatsChatIdMessages: {
11000
11058
  parameters: {
11001
11059
  query?: {
11002
- /** @description How willing this read is to reach LinkedIn. `auto` (default) serves a stored copy while it is within the resource's freshness threshold; `live` always fetches; `refill` serves a stored copy at any age and fetches once when this read has no stored copy yet; `cache_only` never fetches and returns NOT_STORED when nothing is stored. `cache_only` cannot be combined with max_age. A 502 under `cache_only` means the store could not be read, not that nothing is stored: no request was made to LinkedIn, and the same read is worth retrying. */
11060
+ /** @description How willing this read is to reach LinkedIn: auto (default), live, refill, or cache_only. Details: /reference/getting-started/cache. */
11003
11061
  mode?: "live" | "auto" | "refill" | "cache_only";
11004
- /** @description Maximum age, in seconds, of a stored copy this read will accept. Overrides the `auto`, `live` and `refill` presets in both directions; `0` is the same as `mode=live`. Not accepted with `mode=cache_only`, whose guarantee is not a freshness threshold. */
11062
+ /** @description Maximum age in seconds of a stored copy this read accepts; overrides mode in both directions. Not with cache_only. Details: /reference/getting-started/cache. */
11005
11063
  max_age?: number;
11006
11064
  /** @description Optional filter: only return messages from this sender ID. */
11007
11065
  user_id?: string;
@@ -11013,7 +11071,7 @@ export interface operations {
11013
11071
  limit?: number;
11014
11072
  /** @description An opaque cursor for pagination. Pass the `cursor` from the preceding response to fetch the next page. */
11015
11073
  cursor?: string;
11016
- /** @description Additional response fields to resolve, comma-separated in a single value (for example expand=public_identifier). Accepted values: public_identifier. When requested, the field is present on every user object in the response, carrying either a value or null. Omit for the base fields only. Pass the parameter once; repeating it drops values. At most 25 people per request need an extra lookup to resolve; anyone beyond that carries null, so ask for a smaller page to resolve them all. */
11074
+ /** @description Extra fields to resolve, comma-separated in one value (expand=public_identifier). Present on every result as a value or null; repeating the key drops values. */
11017
11075
  expand?: string;
11018
11076
  };
11019
11077
  header?: never;
@@ -11239,7 +11297,7 @@ export interface operations {
11239
11297
  path: {
11240
11298
  /** @description The account ID (`acc_...`) that owns the chat. */
11241
11299
  account_id: string;
11242
- /** @description The unique identifier of the chat to send the message to. A COMPANY_ chat id (e.g. 'COMPANY_83734124_2-YTQ3ODU3Njgt', from the inboxes endpoints) sends this message as that company page instead of the connected member. */
11300
+ /** @description The chat to send to. A COMPANY_ chat id (from the inboxes endpoints) sends as that company page instead of the connected member. */
11243
11301
  chat_id: string;
11244
11302
  };
11245
11303
  cookie?: never;
@@ -11251,7 +11309,7 @@ export interface operations {
11251
11309
  text?: string;
11252
11310
  /** @description Optional message ID to quote or reply to. */
11253
11311
  quote_id?: string;
11254
- /** @description Optional file attachments (base64-encoded). */
11312
+ /** @description Optional file attachments, base64-encoded: at most 5 MiB per file and 9 MiB for the whole request body (base64 adds about a third). */
11255
11313
  attachments?: {
11256
11314
  /** @description Base64-encoded file bytes. */
11257
11315
  content: string;
@@ -11403,7 +11461,7 @@ export interface operations {
11403
11461
  getV1AccountIdChatsChatIdMessagesMessageId: {
11404
11462
  parameters: {
11405
11463
  query?: {
11406
- /** @description Additional response fields to resolve, comma-separated in a single value (for example expand=public_identifier). Accepted values: public_identifier. When requested, the field is present on every user object in the response, carrying either a value or null. Omit for the base fields only. Pass the parameter once; repeating it drops values. At most 25 people per request need an extra lookup to resolve; anyone beyond that carries null, so ask for a smaller page to resolve them all. */
11464
+ /** @description Extra fields to resolve, comma-separated in one value (expand=public_identifier). Present on every result as a value or null; repeating the key drops values. */
11407
11465
  expand?: string;
11408
11466
  };
11409
11467
  header?: never;
@@ -12075,7 +12133,7 @@ export interface operations {
12075
12133
  getV1AccountIdChatsSearch: {
12076
12134
  parameters: {
12077
12135
  query: {
12078
- /** @description The search term: matches both participant names and message content (e.g. 'sophie keller'). Minimum 3 characters. A shorter term cannot use the search index and is rejected with INVALID_REQUEST. */
12136
+ /** @description Search term, matches participant names and message content. Minimum 3 characters. */
12079
12137
  query: string;
12080
12138
  /** @description Maximum chats to return per page (1-100, default 20). The server may walk a few internal pages to fill one page. */
12081
12139
  limit?: number;
@@ -12555,7 +12613,7 @@ export interface operations {
12555
12613
  limit?: number;
12556
12614
  /** @description An opaque cursor for pagination. Pass the `cursor` from the preceding response to fetch the next page. */
12557
12615
  cursor?: string;
12558
- /** @description Additional response fields to resolve, comma-separated in a single value (for example expand=public_identifier). Accepted values: public_identifier. When requested, the field is present on every user object in the response, carrying either a value or null. Omit for the base fields only. Pass the parameter once; repeating it drops values. At most 25 people per request need an extra lookup to resolve; anyone beyond that carries null, so ask for a smaller page to resolve them all. */
12616
+ /** @description Extra fields to resolve, comma-separated in one value (expand=public_identifier). Present on every result as a value or null; repeating the key drops values. */
12559
12617
  expand?: string;
12560
12618
  };
12561
12619
  header?: never;
@@ -12811,11 +12869,11 @@ export interface operations {
12811
12869
  getV1AccountIdFeedHome: {
12812
12870
  parameters: {
12813
12871
  query?: {
12814
- /** @description Sort order. `recent` (default) = reverse-chronological, always available. `relevant` = LinkedIn's ranked 'top' feed, which draws on a shared, throttled request budget and can rate-limit. When a `cursor` is supplied the sort is taken from the cursor and this is ignored. */
12872
+ /** @description Sort order. recent (default) is reverse-chronological. relevant can rate-limit. Ignored when cursor is supplied; the sort comes from the cursor. */
12815
12873
  sort?: "recent" | "relevant";
12816
- /** @description Lower bound on the posts returned in this page (1-100, default 20). The server walks fixed internal pages and returns whole pages up to the next boundary at or beyond this value, so a page may return slightly more; page until `cursor` is null. */
12874
+ /** @description Minimum posts per page (1-100, default 20); the returned count can exceed this. Page until cursor is null. */
12817
12875
  limit?: number;
12818
- /** @description Opaque pagination cursor from a prior response's `cursor`; omit for the first page. Self-describing of its sort: when present, the sort is taken from the cursor. Pass it back verbatim; the `relevant` cursor expires (~1h). Page until `cursor` is null. */
12876
+ /** @description Opaque cursor from a prior response's cursor; omit for the first page, self-describing of its sort. The relevant cursor expires after about an hour. */
12819
12877
  cursor?: string;
12820
12878
  };
12821
12879
  header?: never;
@@ -12996,11 +13054,11 @@ export interface operations {
12996
13054
  getV1AccountIdNotifications: {
12997
13055
  parameters: {
12998
13056
  query?: {
12999
- /** @description Which notification stream to read (default all): all | jobs | mentions | my_posts | my_posts_comments | my_posts_reactions | my_posts_reposts. Any other value is a 400. */
13057
+ /** @description Which notification stream to read (default all): jobs, mentions, my_posts, my_posts_comments/reactions/reposts. Any other value is a 400. */
13000
13058
  filter?: "all" | "jobs" | "mentions" | "my_posts" | "my_posts_comments" | "my_posts_reactions" | "my_posts_reposts";
13001
- /** @description Lower bound on the notifications returned in this page (1-100, default 20). The server walks fixed internal pages and returns whole pages up to the next boundary at or beyond this value; page until cursor is null. */
13059
+ /** @description Minimum notifications per page (1-100, default 20); the server returns whole pages up to this boundary. Page until cursor is null. */
13002
13060
  limit?: number;
13003
- /** @description Opaque pagination cursor from a prior response's `cursor`; omit for the first page. Pass it back verbatim. This feed throttles hard under fast polling: poll `unread_count` rather than deep-paging. */
13061
+ /** @description Opaque cursor from a prior response's cursor; omit for the first page, pass back verbatim. Poll unread_count instead of deep-paging. */
13004
13062
  cursor?: string;
13005
13063
  };
13006
13064
  header?: never;
@@ -13163,7 +13221,7 @@ export interface operations {
13163
13221
  path: {
13164
13222
  /** @description The connected LinkedIn account whose notifications to read or act on. */
13165
13223
  account_id: string;
13166
- /** @description The card urn to delete, the `card_urn` field of a GET /v1/{account_id}/notifications item (urn:li:fsd_notificationCard:...). Pass the card urn, NOT object_urn (which targets the wrong notification). Percent-encode it into the path. This cannot be undone. */
13224
+ /** @description The card_urn field of a notifications list item (not object_urn). Percent-encode it into the path. This cannot be undone. */
13167
13225
  card_urn: string;
13168
13226
  };
13169
13227
  cookie?: never;
@@ -13172,7 +13230,7 @@ export interface operations {
13172
13230
  responses: {
13173
13231
  /** @description The notification card was deleted. This cannot be undone.
13174
13232
  *
13175
- * **Safe to retry.** This operation is idempotent: deleting a card that you have already deleted succeeds with 200, it is not an error, and it does not delete anything else. A client that retries after a network timeout is never punished for it. (A `card_urn` that never existed on this account is a 404; that distinguishes a wrong handle from a repeat.)
13233
+ * **Safe to retry.** Deleting a card you already deleted succeeds with 200 again, it is not an error, and it does not delete anything else. A client that retries after a network timeout is never punished for it. (A `card_urn` that never existed on this account is a 404; that distinguishes a wrong handle from a repeat.)
13176
13234
  *
13177
13235
  * **Timing.** The removal takes effect within a few seconds; a notifications list read immediately after this call may still include the card for a moment. If you need to confirm removal, re-read after a short delay rather than instantly; but the 200 is already your confirmation that the card was resolved and the removal accepted. */
13178
13236
  200: {
@@ -13287,7 +13345,7 @@ export interface operations {
13287
13345
  path: {
13288
13346
  /** @description The connected LinkedIn account whose notifications to read or act on. */
13289
13347
  account_id: string;
13290
- /** @description The card urn, the `card_urn` field of a GET /v1/{account_id}/notifications item. For network-activity cards (a repost, comment, or reaction by your network) 'show less' removes the card; the same effect as deleting it; because LinkedIn exposes no separate softer signal for these cards. This cannot be undone. */
13348
+ /** @description The card_urn field of a notifications list item. For network-activity cards this removes the card, same as deleting it. This cannot be undone. */
13291
13349
  card_urn: string;
13292
13350
  };
13293
13351
  cookie?: never;
@@ -13298,7 +13356,7 @@ export interface operations {
13298
13356
  *
13299
13357
  * **This is the same operation as delete.** LinkedIn's own web client sends an identical request for both its 'Delete notification' and its 'Show less like this' menu item, on every card type that offers them; there is no separate, softer signal available to send. This endpoint exists so the calling intent reads clearly; it does not behave differently. If you want fewer cards like this one in future, change the account's notification preferences on LinkedIn instead.
13300
13358
  *
13301
- * **Safe to retry**, and same timing as `delete_notification`: idempotent (a repeat is a 200, not an error), effective within a few seconds. */
13359
+ * **Safe to retry**, and same timing as `delete_notification`: a repeat call returns 200 again, not an error, effective within a few seconds. */
13302
13360
  200: {
13303
13361
  headers: {
13304
13362
  "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
@@ -13640,7 +13698,7 @@ export interface operations {
13640
13698
  path: {
13641
13699
  /** @description The account ID (`acc_...`) to use for the request. */
13642
13700
  account_id: string;
13643
- /** @description The post's `id`, as returned by `get_post` or any list response (`list_user_posts`, `list_profile_activity`, `get_feed`). A bare numeric activity id (`7332661864792854528`), a URN (`urn:li:activity:<id>`, `urn:li:ugcPost:<id>`, `urn:li:share:<id>`), and a full LinkedIn share URL are all accepted and mean the same post. */
13701
+ /** @description The post's id from get_post or any list response. A bare activity id, a URN (activity/ugcPost/share), or a full share URL all work. */
13644
13702
  post_id: string;
13645
13703
  };
13646
13704
  cookie?: never;
@@ -13811,7 +13869,7 @@ export interface operations {
13811
13869
  path: {
13812
13870
  /** @description The account ID (`acc_...`) to comment as. */
13813
13871
  account_id: string;
13814
- /** @description The post's `id`, as returned by `get_post` or any list response (`list_user_posts`, `list_profile_activity`, `get_feed`). A bare numeric activity id (`7332661864792854528`), a URN (`urn:li:activity:<id>`, `urn:li:ugcPost:<id>`, `urn:li:share:<id>`), and a full LinkedIn share URL are all accepted and mean the same post. */
13872
+ /** @description The post's id from get_post or any list response. A bare activity id, a URN (activity/ugcPost/share), or a full share URL all work. */
13815
13873
  post_id: string;
13816
13874
  };
13817
13875
  cookie?: never;
@@ -14017,7 +14075,7 @@ export interface operations {
14017
14075
  path: {
14018
14076
  /** @description The account ID (`acc_...`) to reply as. */
14019
14077
  account_id: string;
14020
- /** @description The post's `id`, as returned by `get_post` or any list response (`list_user_posts`, `list_profile_activity`, `get_feed`). A bare numeric activity id (`7332661864792854528`), a URN (`urn:li:activity:<id>`, `urn:li:ugcPost:<id>`, `urn:li:share:<id>`), and a full LinkedIn share URL are all accepted and mean the same post. */
14078
+ /** @description The post's id from get_post or any list response. A bare activity id, a URN (activity/ugcPost/share), or a full share URL all work. */
14021
14079
  post_id: string;
14022
14080
  /** @description The parent comment's `id` (a bare numeric string), as returned by comment_on_post / list_comment_replies. */
14023
14081
  comment_id: string;
@@ -14225,7 +14283,7 @@ export interface operations {
14225
14283
  path: {
14226
14284
  /** @description The account ID (`acc_...`) that authored the comment. */
14227
14285
  account_id: string;
14228
- /** @description The post's `id`, as returned by `get_post` or any list response (`list_user_posts`, `list_profile_activity`, `get_feed`). A bare numeric activity id (`7332661864792854528`), a URN (`urn:li:activity:<id>`, `urn:li:ugcPost:<id>`, `urn:li:share:<id>`), and a full LinkedIn share URL are all accepted and mean the same post. */
14286
+ /** @description The post's id from get_post or any list response. A bare activity id, a URN (activity/ugcPost/share), or a full share URL all work. */
14229
14287
  post_id: string;
14230
14288
  /** @description The comment's `id` (a bare numeric string), as returned by comment_on_post / list_comment_replies. */
14231
14289
  comment_id: string;
@@ -14336,7 +14394,7 @@ export interface operations {
14336
14394
  path: {
14337
14395
  /** @description The account ID (`acc_...`) that authored the comment. */
14338
14396
  account_id: string;
14339
- /** @description The post's `id`, as returned by `get_post` or any list response (`list_user_posts`, `list_profile_activity`, `get_feed`). A bare numeric activity id (`7332661864792854528`), a URN (`urn:li:activity:<id>`, `urn:li:ugcPost:<id>`, `urn:li:share:<id>`), and a full LinkedIn share URL are all accepted and mean the same post. */
14397
+ /** @description The post's id from get_post or any list response. A bare activity id, a URN (activity/ugcPost/share), or a full share URL all work. */
14340
14398
  post_id: string;
14341
14399
  /** @description The comment's `id` (a bare numeric string), as returned by comment_on_post / list_comment_replies. */
14342
14400
  comment_id: string;
@@ -14529,7 +14587,7 @@ export interface operations {
14529
14587
  path: {
14530
14588
  /** @description The account ID (`acc_...`) to use for the request. */
14531
14589
  account_id: string;
14532
- /** @description The post's `id`, as returned by `get_post` or any list response (`list_user_posts`, `list_profile_activity`, `get_feed`). A bare numeric activity id (`7332661864792854528`), a URN (`urn:li:activity:<id>`, `urn:li:ugcPost:<id>`, `urn:li:share:<id>`), and a full LinkedIn share URL are all accepted and mean the same post. */
14590
+ /** @description The post's id from get_post or any list response. A bare activity id, a URN (activity/ugcPost/share), or a full share URL all work. */
14533
14591
  post_id: string;
14534
14592
  /** @description The parent comment's `id` (a bare numeric string), as returned by comment_on_post / list_comment_replies. */
14535
14593
  comment_id: string;
@@ -14709,7 +14767,7 @@ export interface operations {
14709
14767
  path: {
14710
14768
  /** @description The account ID (`acc_...`) to use for the request. */
14711
14769
  account_id: string;
14712
- /** @description The post's `id`, as returned by `get_post` or any list response (`list_user_posts`, `list_profile_activity`, `get_feed`). A bare numeric activity id (`7332661864792854528`), a URN (`urn:li:activity:<id>`, `urn:li:ugcPost:<id>`, `urn:li:share:<id>`), and a full LinkedIn share URL are all accepted and mean the same post. */
14770
+ /** @description The post's id from get_post or any list response. A bare activity id, a URN (activity/ugcPost/share), or a full share URL all work. */
14713
14771
  post_id: string;
14714
14772
  /** @description The comment's `id` (a bare numeric string), as returned by comment_on_post / list_comment_replies. */
14715
14773
  comment_id: string;
@@ -14850,7 +14908,7 @@ export interface operations {
14850
14908
  path: {
14851
14909
  /** @description The account ID (`acc_...`) to react from. */
14852
14910
  account_id: string;
14853
- /** @description The post's `id`, as returned by `get_post` or any list response (`list_user_posts`, `list_profile_activity`, `get_feed`). A bare numeric activity id (`7332661864792854528`), a URN (`urn:li:activity:<id>`, `urn:li:ugcPost:<id>`, `urn:li:share:<id>`), and a full LinkedIn share URL are all accepted and mean the same post. */
14911
+ /** @description The post's id from get_post or any list response. A bare activity id, a URN (activity/ugcPost/share), or a full share URL all work. */
14854
14912
  post_id: string;
14855
14913
  /** @description The comment's `id` (a bare numeric string), as returned by comment_on_post / list_comment_replies. */
14856
14914
  comment_id: string;
@@ -14998,7 +15056,7 @@ export interface operations {
14998
15056
  path: {
14999
15057
  /** @description The account ID (`acc_...`) whose reaction to remove. */
15000
15058
  account_id: string;
15001
- /** @description The post's `id`, as returned by `get_post` or any list response (`list_user_posts`, `list_profile_activity`, `get_feed`). A bare numeric activity id (`7332661864792854528`), a URN (`urn:li:activity:<id>`, `urn:li:ugcPost:<id>`, `urn:li:share:<id>`), and a full LinkedIn share URL are all accepted and mean the same post. */
15059
+ /** @description The post's id from get_post or any list response. A bare activity id, a URN (activity/ugcPost/share), or a full share URL all work. */
15002
15060
  post_id: string;
15003
15061
  /** @description The comment's `id` (a bare numeric string), as returned by comment_on_post / list_comment_replies. */
15004
15062
  comment_id: string;
@@ -16001,7 +16059,7 @@ export interface operations {
16001
16059
  getV1AccountIdJobs: {
16002
16060
  parameters: {
16003
16061
  query: {
16004
- /** @description Filter by posting lifecycle state (request vocabulary). Required. Filtering is applied by LinkedIn and is best-effort: OPEN commonly returns the same postings as DRAFT, and no query is guaranteed to return an item whose own `state` is LISTED even though LISTED is a valid value of that field. Callers needing a strict filter should re-filter on each returned item's own `state`. */
16062
+ /** @description Filter by posting lifecycle state (required). Best-effort: results may not match exactly, re-filter on each item's own state. */
16005
16063
  state: "DRAFT" | "OPEN" | "CLOSED" | "REVIEW" | "SUSPENDED";
16006
16064
  /** @description Number of results to return (1-100). */
16007
16065
  limit?: number;
@@ -16418,14 +16476,14 @@ export interface operations {
16418
16476
  getV1AccountIdJobsJobId: {
16419
16477
  parameters: {
16420
16478
  query?: {
16421
- /** @description Which additional sections to include on the response (e.g. hiring_team, salary, benefits). The exact set of accepted values is not finalized, supply the section names you need, comma-separated for more than one; each name is trimmed before use. Omit for the base fields only. */
16479
+ /** @description Extra sections to include (e.g. hiring_team, salary, benefits), comma-separated for more than one. Omit for base fields only. */
16422
16480
  with_sections?: string[];
16423
16481
  };
16424
16482
  header?: never;
16425
16483
  path: {
16426
16484
  /** @description The connected LinkedIn account to retrieve the job posting on behalf of. */
16427
16485
  account_id: string;
16428
- /** @description The numeric id of the job posting, e.g. 4100000000. This is the number in a LinkedIn job URL (https://www.linkedin.com/jobs/view/4100000000) and the job_urn value in a POST /v1/{account_id}/search/jobs result. Pass the number only, a full URL is not accepted by the API (the SDK and CLI extract the id from a URL for you). */
16486
+ /** @description The job posting's numeric id, e.g. 4100000000 (from the LinkedIn job URL or a search/jobs result). A full URL is not accepted here. */
16429
16487
  job_id: string;
16430
16488
  };
16431
16489
  cookie?: never;
@@ -16638,7 +16696,7 @@ export interface operations {
16638
16696
  path: {
16639
16697
  /** @description The connected LinkedIn account that owns the job posting. */
16640
16698
  account_id: string;
16641
- /** @description The numeric id of the job posting, e.g. 4100000000. This is the number in a LinkedIn job URL (https://www.linkedin.com/jobs/view/4100000000) and the job_urn value in a POST /v1/{account_id}/search/jobs result. Pass the number only, a full URL is not accepted by the API (the SDK and CLI extract the id from a URL for you). */
16699
+ /** @description The job posting's numeric id, e.g. 4100000000 (from the LinkedIn job URL or a search/jobs result). A full URL is not accepted here. */
16642
16700
  job_id: string;
16643
16701
  };
16644
16702
  cookie?: never;
@@ -16900,7 +16958,7 @@ export interface operations {
16900
16958
  path: {
16901
16959
  /** @description The connected LinkedIn account that owns the job posting. */
16902
16960
  account_id: string;
16903
- /** @description The numeric id of the job posting, e.g. 4100000000. This is the number in a LinkedIn job URL (https://www.linkedin.com/jobs/view/4100000000) and the job_urn value in a POST /v1/{account_id}/search/jobs result. Pass the number only, a full URL is not accepted by the API (the SDK and CLI extract the id from a URL for you). */
16961
+ /** @description The job posting's numeric id, e.g. 4100000000 (from the LinkedIn job URL or a search/jobs result). A full URL is not accepted here. */
16904
16962
  job_id: string;
16905
16963
  };
16906
16964
  cookie?: never;
@@ -17061,7 +17119,7 @@ export interface operations {
17061
17119
  path: {
17062
17120
  /** @description The connected LinkedIn account to publish the job posting on behalf of. */
17063
17121
  account_id: string;
17064
- /** @description The numeric id of the job posting, e.g. 4100000000. This is the number in a LinkedIn job URL (https://www.linkedin.com/jobs/view/4100000000) and the job_urn value in a POST /v1/{account_id}/search/jobs result. Pass the number only, a full URL is not accepted by the API (the SDK and CLI extract the id from a URL for you). */
17122
+ /** @description The job posting's numeric id, e.g. 4100000000 (from the LinkedIn job URL or a search/jobs result). A full URL is not accepted here. */
17065
17123
  job_id: string;
17066
17124
  };
17067
17125
  cookie?: never;
@@ -17258,7 +17316,7 @@ export interface operations {
17258
17316
  path: {
17259
17317
  /** @description The connected LinkedIn account that owns the job posting. */
17260
17318
  account_id: string;
17261
- /** @description The numeric id of the job posting, e.g. 4100000000. This is the number in a LinkedIn job URL (https://www.linkedin.com/jobs/view/4100000000) and the job_urn value in a POST /v1/{account_id}/search/jobs result. Pass the number only, a full URL is not accepted by the API (the SDK and CLI extract the id from a URL for you). */
17319
+ /** @description The job posting's numeric id, e.g. 4100000000 (from the LinkedIn job URL or a search/jobs result). A full URL is not accepted here. */
17262
17320
  job_id: string;
17263
17321
  };
17264
17322
  cookie?: never;
@@ -17399,7 +17457,7 @@ export interface operations {
17399
17457
  path: {
17400
17458
  /** @description The connected LinkedIn account that owns the job posting. */
17401
17459
  account_id: string;
17402
- /** @description The numeric id of the job posting, e.g. 4100000000. This is the number in a LinkedIn job URL (https://www.linkedin.com/jobs/view/4100000000) and the job_urn value in a POST /v1/{account_id}/search/jobs result. Pass the number only, a full URL is not accepted by the API (the SDK and CLI extract the id from a URL for you). */
17460
+ /** @description The job posting's numeric id, e.g. 4100000000 (from the LinkedIn job URL or a search/jobs result). A full URL is not accepted here. */
17403
17461
  job_id: string;
17404
17462
  };
17405
17463
  cookie?: never;
@@ -17617,7 +17675,7 @@ export interface operations {
17617
17675
  path: {
17618
17676
  /** @description The connected LinkedIn account that owns the job posting. */
17619
17677
  account_id: string;
17620
- /** @description The numeric id of the job posting, e.g. 4100000000. This is the number in a LinkedIn job URL (https://www.linkedin.com/jobs/view/4100000000) and the job_urn value in a POST /v1/{account_id}/search/jobs result. Pass the number only, a full URL is not accepted by the API (the SDK and CLI extract the id from a URL for you). */
17678
+ /** @description The job posting's numeric id, e.g. 4100000000 (from the LinkedIn job URL or a search/jobs result). A full URL is not accepted here. */
17621
17679
  job_id: string;
17622
17680
  /** @description The numeric id of the job applicant, obtained from the list-applicants endpoint's items[].id. */
17623
17681
  applicant_id: string;
@@ -17800,7 +17858,7 @@ export interface operations {
17800
17858
  path: {
17801
17859
  /** @description The connected LinkedIn account that owns the job posting. */
17802
17860
  account_id: string;
17803
- /** @description The numeric id of the job posting, e.g. 4100000000. This is the number in a LinkedIn job URL (https://www.linkedin.com/jobs/view/4100000000) and the job_urn value in a POST /v1/{account_id}/search/jobs result. Pass the number only, a full URL is not accepted by the API (the SDK and CLI extract the id from a URL for you). */
17861
+ /** @description The job posting's numeric id, e.g. 4100000000 (from the LinkedIn job URL or a search/jobs result). A full URL is not accepted here. */
17804
17862
  job_id: string;
17805
17863
  /** @description The numeric id of the job applicant, obtained from the list-applicants endpoint's items[].id. */
17806
17864
  applicant_id: string;
@@ -17922,7 +17980,7 @@ export interface operations {
17922
17980
  path: {
17923
17981
  /** @description The account ID (`acc_...`) to use for the request. */
17924
17982
  account_id: string;
17925
- /** @description The post's `id`, as returned by `get_post` or any list response (`list_user_posts`, `list_profile_activity`, `get_feed`). A bare numeric activity id (`7332661864792854528`), a URN (`urn:li:activity:<id>`, `urn:li:ugcPost:<id>`, `urn:li:share:<id>`), and a full LinkedIn share URL are all accepted and mean the same post. */
17983
+ /** @description The post's id from get_post or any list response. A bare activity id, a URN (activity/ugcPost/share), or a full share URL all work. */
17926
17984
  post_id: string;
17927
17985
  };
17928
17986
  cookie?: never;
@@ -18119,7 +18177,7 @@ export interface operations {
18119
18177
  path: {
18120
18178
  /** @description The account ID (`acc_...`) that owns the post. */
18121
18179
  account_id: string;
18122
- /** @description The post's `id`, as returned by `get_post` or any list response (`list_user_posts`, `list_profile_activity`, `get_feed`). A bare numeric activity id (`7332661864792854528`), a URN (`urn:li:activity:<id>`, `urn:li:ugcPost:<id>`, `urn:li:share:<id>`), and a full LinkedIn share URL are all accepted and mean the same post. */
18180
+ /** @description The post's id from get_post or any list response. A bare activity id, a URN (activity/ugcPost/share), or a full share URL all work. */
18123
18181
  post_id: string;
18124
18182
  };
18125
18183
  cookie?: never;
@@ -18245,7 +18303,7 @@ export interface operations {
18245
18303
  /** @description File name for the attachment. */
18246
18304
  filename: string;
18247
18305
  }[];
18248
- /** @description The post to quote or repost. Empty text + quoted_post_id = a simple repost; non-empty text + quoted_post_id = a quote-post. The post's `id`, as returned by `get_post` or any list response (`list_user_posts`, `list_profile_activity`, `get_feed`). A bare numeric activity id (`7332661864792854528`), a URN (`urn:li:activity:<id>`, `urn:li:ugcPost:<id>`, `urn:li:share:<id>`), and a full LinkedIn share URL are all accepted and mean the same post. */
18306
+ /** @description The post to quote or repost. Empty text + quoted_post_id = a simple repost; non-empty text + quoted_post_id = a quote-post. The post's id from get_post or any list response. A bare activity id, a URN (activity/ugcPost/share), or a full share URL all work. */
18249
18307
  quoted_post_id?: string;
18250
18308
  /**
18251
18309
  * @description Who can read the post (substrate default: anyone if omitted).
@@ -18600,7 +18658,7 @@ export interface operations {
18600
18658
  path: {
18601
18659
  /** @description The account ID (`acc_...`) to use for the request. */
18602
18660
  account_id: string;
18603
- /** @description The post's `id`, as returned by `get_post` or any list response (`list_user_posts`, `list_profile_activity`, `get_feed`). A bare numeric activity id (`7332661864792854528`), a URN (`urn:li:activity:<id>`, `urn:li:ugcPost:<id>`, `urn:li:share:<id>`), and a full LinkedIn share URL are all accepted and mean the same post. */
18661
+ /** @description The post's id from get_post or any list response. A bare activity id, a URN (activity/ugcPost/share), or a full share URL all work. */
18604
18662
  post_id: string;
18605
18663
  };
18606
18664
  cookie?: never;
@@ -18744,7 +18802,7 @@ export interface operations {
18744
18802
  path: {
18745
18803
  /** @description The account ID (`acc_...`) to react from. */
18746
18804
  account_id: string;
18747
- /** @description The post's `id`, as returned by `get_post` or any list response (`list_user_posts`, `list_profile_activity`, `get_feed`). A bare numeric activity id (`7332661864792854528`), a URN (`urn:li:activity:<id>`, `urn:li:ugcPost:<id>`, `urn:li:share:<id>`), and a full LinkedIn share URL are all accepted and mean the same post. */
18805
+ /** @description The post's id from get_post or any list response. A bare activity id, a URN (activity/ugcPost/share), or a full share URL all work. */
18748
18806
  post_id: string;
18749
18807
  };
18750
18808
  cookie?: never;
@@ -18888,7 +18946,7 @@ export interface operations {
18888
18946
  path: {
18889
18947
  /** @description The account ID (`acc_...`) whose reaction to remove. */
18890
18948
  account_id: string;
18891
- /** @description The post's `id`, as returned by `get_post` or any list response (`list_user_posts`, `list_profile_activity`, `get_feed`). A bare numeric activity id (`7332661864792854528`), a URN (`urn:li:activity:<id>`, `urn:li:ugcPost:<id>`, `urn:li:share:<id>`), and a full LinkedIn share URL are all accepted and mean the same post. */
18949
+ /** @description The post's id from get_post or any list response. A bare activity id, a URN (activity/ugcPost/share), or a full share URL all work. */
18892
18950
  post_id: string;
18893
18951
  };
18894
18952
  cookie?: never;
@@ -19209,9 +19267,9 @@ export interface operations {
19209
19267
  getV1AccountIdSavedPosts: {
19210
19268
  parameters: {
19211
19269
  query?: {
19212
- /** @description Page-size lower bound (1-100, default 20); returns AT LEAST this many items, up to the next upstream page boundary (a page may return slightly more). Paginate with the returned cursor and walk until `cursor` is null for the complete list. */
19270
+ /** @description Minimum items per page (1-100, default 20); a page may return slightly more. Walk with cursor until it is null for the complete list. */
19213
19271
  limit?: number;
19214
- /** @description Opaque pagination cursor from a prior response's `cursor`; omit for the first page. Page until `cursor` is null. There is no `offset` parameter; an unanchored numeric offset is inert upstream, so it is not a product-surface knob. */
19272
+ /** @description Opaque cursor from a prior response's cursor; omit for the first page. Page until cursor is null. There is no offset parameter. */
19215
19273
  cursor?: string;
19216
19274
  };
19217
19275
  header?: never;
@@ -19385,13 +19443,13 @@ export interface operations {
19385
19443
  requestBody: {
19386
19444
  content: {
19387
19445
  "application/json": {
19388
- /** @description The post's `id`, as returned by `get_post` or any list response (`list_user_posts`, `list_profile_activity`, `get_feed`). A bare numeric activity id (`7332661864792854528`), a URN (`urn:li:activity:<id>`, `urn:li:ugcPost:<id>`, `urn:li:share:<id>`), and a full LinkedIn share URL are all accepted and mean the same post. */
19446
+ /** @description The post's id from get_post or any list response. A bare activity id, a URN (activity/ugcPost/share), or a full share URL all work. */
19389
19447
  post_id: string;
19390
19448
  };
19391
19449
  };
19392
19450
  };
19393
19451
  responses: {
19394
- /** @description The post is now saved (a private bookmark, no notification to the author, never visible to third parties). Re-saving an already-saved post is idempotent. */
19452
+ /** @description The post is now saved (a private bookmark, no notification to the author, never visible to third parties). Re-saving an already-saved post just returns 200 again, not an error. */
19395
19453
  200: {
19396
19454
  headers: {
19397
19455
  "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
@@ -19515,14 +19573,14 @@ export interface operations {
19515
19573
  path: {
19516
19574
  /** @description The account ID (`acc_...`) that performs the unsave. */
19517
19575
  account_id: string;
19518
- /** @description The post's `id`, as returned by `get_post` or any list response (`list_user_posts`, `list_profile_activity`, `get_feed`). A bare numeric activity id (`7332661864792854528`), a URN (`urn:li:activity:<id>`, `urn:li:ugcPost:<id>`, `urn:li:share:<id>`), and a full LinkedIn share URL are all accepted and mean the same post. */
19576
+ /** @description The post's id from get_post or any list response. A bare activity id, a URN (activity/ugcPost/share), or a full share URL all work. */
19519
19577
  post_id: string;
19520
19578
  };
19521
19579
  cookie?: never;
19522
19580
  };
19523
19581
  requestBody?: never;
19524
19582
  responses: {
19525
- /** @description The post is no longer saved. Unsaving a not-currently-saved post is idempotent. */
19583
+ /** @description The post is no longer saved. Unsaving a not-currently-saved post just returns 200 again, not an error. */
19526
19584
  200: {
19527
19585
  headers: {
19528
19586
  "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
@@ -19633,7 +19691,7 @@ export interface operations {
19633
19691
  getV1AccountIdRecruiterProfilesUserId: {
19634
19692
  parameters: {
19635
19693
  query?: {
19636
- /** @description Which recruiter profile sections to fetch (repeatable, flat). Allowed values: linkedin_*, linkedin_experience, linkedin_education, linkedin_languages, linkedin_skills, linkedin_certifications, linkedin_volunteer_experience, linkedin_projects, linkedin_recommendations, linkedin_interests, linkedin_recruiting_activity, and the _preview variant of each. Omit for base fields only. */
19694
+ /** @description Recruiter profile sections to fetch, repeatable: linkedin_experience, linkedin_skills, and others (each has a _preview variant). Omit for base fields only. */
19637
19695
  with_sections?: ("linkedin_*" | "linkedin_experience" | "linkedin_education" | "linkedin_languages" | "linkedin_skills" | "linkedin_certifications" | "linkedin_volunteer_experience" | "linkedin_projects" | "linkedin_recommendations" | "linkedin_interests" | "linkedin_recruiting_activity" | "linkedin_*_preview" | "linkedin_experience_preview" | "linkedin_education_preview" | "linkedin_languages_preview" | "linkedin_skills_preview" | "linkedin_certifications_preview" | "linkedin_volunteer_experience_preview" | "linkedin_projects_preview" | "linkedin_recommendations_preview" | "linkedin_interests_preview" | "linkedin_recruiting_activity_preview")[];
19638
19696
  };
19639
19697
  header?: never;
@@ -24937,7 +24995,7 @@ export interface operations {
24937
24995
  getV1AccountIdSalesNavigatorProfilesIdentifier: {
24938
24996
  parameters: {
24939
24997
  query?: {
24940
- /** @description Which Sales Navigator profile sections to fetch (repeatable, flat). Allowed values: linkedin_*, linkedin_experience, linkedin_education, linkedin_languages, linkedin_skills, linkedin_certifications, linkedin_volunteer_experience, linkedin_projects, linkedin_recommendations, linkedin_interests, linkedin_recruiting_activity, and the _preview variant of each. Omit for base fields only. */
24998
+ /** @description Sales Navigator sections to fetch, repeatable: linkedin_experience, linkedin_skills, others (each has a _preview variant). Omit for base fields only. */
24941
24999
  with_sections?: ("linkedin_*" | "linkedin_experience" | "linkedin_education" | "linkedin_languages" | "linkedin_skills" | "linkedin_certifications" | "linkedin_volunteer_experience" | "linkedin_projects" | "linkedin_recommendations" | "linkedin_interests" | "linkedin_recruiting_activity" | "linkedin_*_preview" | "linkedin_experience_preview" | "linkedin_education_preview" | "linkedin_languages_preview" | "linkedin_skills_preview" | "linkedin_certifications_preview" | "linkedin_volunteer_experience_preview" | "linkedin_projects_preview" | "linkedin_recommendations_preview" | "linkedin_interests_preview" | "linkedin_recruiting_activity_preview")[];
24942
25000
  };
24943
25001
  header?: never;
@@ -26440,7 +26498,7 @@ export interface operations {
26440
26498
  getV1AccountIdSalesNavigatorSearchParameters: {
26441
26499
  parameters: {
26442
26500
  query: {
26443
- /** @description The Sales Navigator filter parameter family to resolve. Exactly one of: COMPANY, ACCOUNT_LIST, LEAD_LIST, LOCATION, POSTAL_CODE, JOB_FUNCTION, JOB_TITLE, INDUSTRY, GROUP, SCHOOL, RELATION, PERSONA, SAVED_PEOPLE_SEARCH, SAVED_COMPANY_SEARCH, RECENT_SEARCH, PROFILE_LANGUAGE. Any other value is rejected with 400. */
26501
+ /** @description The Sales Navigator filter parameter family to resolve. Any value outside the enum is rejected with 400. */
26444
26502
  type: "COMPANY" | "ACCOUNT_LIST" | "LEAD_LIST" | "LOCATION" | "POSTAL_CODE" | "JOB_FUNCTION" | "JOB_TITLE" | "INDUSTRY" | "GROUP" | "SCHOOL" | "RELATION" | "PERSONA" | "SAVED_PEOPLE_SEARCH" | "SAVED_COMPANY_SEARCH" | "RECENT_SEARCH" | "PROFILE_LANGUAGE";
26445
26503
  /** @description Human-readable term to search within the parameter family. */
26446
26504
  keywords?: string;
@@ -27759,6 +27817,8 @@ export interface operations {
27759
27817
  limit?: number;
27760
27818
  /** @description Opaque pagination cursor from a prior page's `cursor` field. Omit for the first page. */
27761
27819
  cursor?: string;
27820
+ /** @description Return only accounts whose external_id equals this value exactly. */
27821
+ external_id?: string;
27762
27822
  };
27763
27823
  header?: never;
27764
27824
  path?: never;
@@ -27798,6 +27858,12 @@ export interface operations {
27798
27858
  connected_at?: string | null;
27799
27859
  /** @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. */
27800
27860
  requested_products?: ("classic" | "company" | "sales_navigator" | "recruiter")[] | null;
27861
+ /** @description Your own id for this account's end user, as set on connect or PATCH. Null when none. Not unique. */
27862
+ external_id?: string | null;
27863
+ /** @description Your own flat string map for this account, as last set by PATCH. Null when none. */
27864
+ metadata?: {
27865
+ [key: string]: string;
27866
+ } | null;
27801
27867
  /** @description ISO-8601 UTC creation timestamp of the underlying LinkedIn account, distinct from connected_at. Null until the first background enrichment lands. */
27802
27868
  substrate_created_at?: string | null;
27803
27869
  }[];
@@ -27906,6 +27972,12 @@ export interface operations {
27906
27972
  seat_id?: string | null;
27907
27973
  /** @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. */
27908
27974
  requested_products?: ("classic" | "company" | "sales_navigator" | "recruiter")[] | null;
27975
+ /** @description Your own id for this account's end user, as set on connect or PATCH. Null when none. Not unique. */
27976
+ external_id?: string | null;
27977
+ /** @description Your own flat string map for this account, as last set by PATCH. Null when none. */
27978
+ metadata?: {
27979
+ [key: string]: string;
27980
+ } | null;
27909
27981
  /** @description ISO-8601 UTC creation timestamp of the underlying LinkedIn account, distinct from connected_at. Null until the first background enrichment lands. */
27910
27982
  substrate_created_at?: string | null;
27911
27983
  /** @description Account-safety rows for this account: one entry per counted action for the current window of its grain, plus the derived total and the invitation backlog. Each row reports where the account stands, what it is allowed, which band that puts it in, what happens at the ceiling, whether the ceiling was raised above the Curviate default, and any active pause the platform caused. Whether a breach is refused or merely reported is `posture`, and the default is to report: nothing here refuses until you configure it to. Pacing is still the caller's responsibility, and nothing on this array paces for you. The per-minute REQUEST ceiling is a different thing and is deliberately not in this array: it protects Curviate's own servers rather than your LinkedIn account, it counts requests where these count platform operations, it is always enforced with HTTP 429 whatever your posture, and its envelope is returned on that refusal. Read this array to see where the account stands; read the safety events surface to see what has already been refused or flagged. */
@@ -28062,7 +28134,7 @@ export interface operations {
28062
28134
  };
28063
28135
  requestBody?: never;
28064
28136
  responses: {
28065
- /** @description The account was disconnected and hard-deleted; its seat is released. This endpoint is idempotent: calling it again for the same account also returns 200, with `already_disconnected` set so you can tell the two apart. */
28137
+ /** @description The account was disconnected and hard-deleted; its seat is released. Calling it again for the same account also returns 200, with `already_disconnected` set so you can tell a repeat call from the first. */
28066
28138
  200: {
28067
28139
  headers: {
28068
28140
  "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
@@ -28169,10 +28241,12 @@ export interface operations {
28169
28241
  requestBody: {
28170
28242
  content: {
28171
28243
  "application/json": {
28172
- /** @description Flat string->string map that replaces this account's custom-data store wholesale (unprovided keys are removed). */
28244
+ /** @description Your own flat string map for this account (up to 16 keys, key 40 chars, value 500). Replaces the stored map whole; null clears it. */
28173
28245
  metadata?: {
28174
28246
  [key: string]: string;
28175
- };
28247
+ } | null;
28248
+ /** @description Your own id for this account's end user (1-255 chars), or null to clear it. Omit to leave it unchanged. */
28249
+ external_id?: string | null;
28176
28250
  /** @description Custom-proxy egress config, or null to clear it (revert to automatic proxy protection). Omit to leave it unchanged. */
28177
28251
  proxy?: {
28178
28252
  /**
@@ -28193,7 +28267,7 @@ export interface operations {
28193
28267
  };
28194
28268
  };
28195
28269
  responses: {
28196
- /** @description The account metadata / proxy configuration was updated. */
28270
+ /** @description The account was updated. metadata and external_id are stored by Curviate and read back on GET; a PATCH carrying only those makes no LinkedIn call. */
28197
28271
  200: {
28198
28272
  headers: {
28199
28273
  "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
@@ -28212,7 +28286,7 @@ export interface operations {
28212
28286
  };
28213
28287
  };
28214
28288
  };
28215
- /** @description Invalid request, a malformed proxy object or an unsupported field (country/ip are no longer accepted). */
28289
+ /** @description Invalid request: a malformed proxy object, metadata over its limits (16 keys, key 40 chars, value 500), external_id outside 1-255 chars, or an unsupported field (country/ip). */
28216
28290
  400: {
28217
28291
  headers: {
28218
28292
  [name: string]: unknown;
@@ -28421,6 +28495,12 @@ export interface operations {
28421
28495
  * @enum {string}
28422
28496
  */
28423
28497
  linkedin_premium?: "sales_navigator" | "recruiter";
28498
+ /** @description Optional IANA zone name for this account's LinkedIn session, e.g. Europe/Berlin. Sent in canonical form; a UTC offset such as +02:00 is a 400. */
28499
+ timezone?: string;
28500
+ /** @description Your own id for the end user who owns this account, 1-255 chars, not unique. Treat it as opaque; avoid emails. */
28501
+ external_id?: string;
28502
+ /** @description Optional allow-list of premium products to ask for: sales_navigator, recruiter. Omit to ask for both; [] asks for none. Classic LinkedIn and company pages are always included. */
28503
+ products?: ("sales_navigator" | "recruiter")[];
28424
28504
  /** @description Managed proxy location hint as an ISO 3166-1 alpha-2 country code (e.g. US, DE). */
28425
28505
  country?: string;
28426
28506
  /** @description IPv4 address used to infer the managed proxy location. */
@@ -28473,6 +28553,8 @@ export interface operations {
28473
28553
  account_id?: string;
28474
28554
  /** @enum {string} */
28475
28555
  status?: "active";
28556
+ /** @description Your own id for this account's end user, as set on connect or PATCH. Null when none. Not unique. */
28557
+ external_id?: string | null;
28476
28558
  safety_warning?: components["schemas"]["SafetyWarning"];
28477
28559
  };
28478
28560
  };
@@ -28505,6 +28587,8 @@ export interface operations {
28505
28587
  * @description Deprecated, use seat_id (same value). Removed at the GA /v1 cutover.
28506
28588
  */
28507
28589
  attached_seat_id?: string | null;
28590
+ /** @description Your own id for this account's end user, as set on connect or PATCH. Null when none. Not unique. */
28591
+ external_id?: string | null;
28508
28592
  /** @description Present and true only when this connect reactivated an account you had previously disconnected, instead of opening a brand-new one. Absent on a normal connect. The account keeps its original id, and its status reflects its real observed state, which may need a reconnect. */
28509
28593
  recovered?: boolean;
28510
28594
  safety_warning?: components["schemas"]["SafetyWarning"];
@@ -28533,7 +28617,16 @@ export interface operations {
28533
28617
  * @description The verification challenge LinkedIn issued.
28534
28618
  * @enum {string}
28535
28619
  */
28536
- challenge_type?: "otp" | "two_factor_sms" | "two_factor_app" | "two_factor_whatsapp" | "mobile_app_approval" | "otp_or_mobile_app_approval" | "contract_selection";
28620
+ challenge_type?: "otp" | "two_factor_sms" | "two_factor_app" | "two_factor_whatsapp" | "mobile_app_approval" | "otp_or_mobile_app_approval" | "contract_selection" | "challenge_selection";
28621
+ /** @description Verification methods to choose from (challenge_selection only). Send one id as challenge to POST /v1/auth/checkpoint/request. */
28622
+ challenges?: {
28623
+ /** @enum {string} */
28624
+ id?: "email" | "sms" | "whatsapp";
28625
+ /** @description Display name, e.g. Text message. */
28626
+ label?: string;
28627
+ /** @description The masked destination, when known. */
28628
+ description?: string | null;
28629
+ }[];
28537
28630
  /** @description Contract picker options (contract_selection only). Solve with the chosen id as the code. */
28538
28631
  contracts?: {
28539
28632
  id?: string;
@@ -28541,6 +28634,8 @@ export interface operations {
28541
28634
  }[];
28542
28635
  /** @description ISO-8601 expiry of the challenge. */
28543
28636
  expires_at?: string;
28637
+ /** @description Your own id for this account's end user, as set on connect or PATCH. Null when none. Not unique. */
28638
+ external_id?: string | null;
28544
28639
  safety_warning?: components["schemas"]["SafetyWarning"];
28545
28640
  };
28546
28641
  };
@@ -28700,6 +28795,8 @@ export interface operations {
28700
28795
  * @description Deprecated, use seat_id (same value). Removed at the GA /v1 cutover.
28701
28796
  */
28702
28797
  attached_seat_id?: string | null;
28798
+ /** @description Your own id for this account's end user, as set on connect or PATCH. Null when none. Not unique. */
28799
+ external_id?: string | null;
28703
28800
  /** @description Present and true only when this connect reactivated an account you had previously disconnected, instead of opening a brand-new one. Absent on a normal connect. The account keeps its original id, and its status reflects its real observed state, which may need a reconnect. */
28704
28801
  recovered?: boolean;
28705
28802
  safety_warning?: components["schemas"]["SafetyWarning"];
@@ -28728,7 +28825,16 @@ export interface operations {
28728
28825
  * @description The verification challenge LinkedIn issued.
28729
28826
  * @enum {string}
28730
28827
  */
28731
- challenge_type?: "otp" | "two_factor_sms" | "two_factor_app" | "two_factor_whatsapp" | "mobile_app_approval" | "otp_or_mobile_app_approval" | "contract_selection";
28828
+ challenge_type?: "otp" | "two_factor_sms" | "two_factor_app" | "two_factor_whatsapp" | "mobile_app_approval" | "otp_or_mobile_app_approval" | "contract_selection" | "challenge_selection";
28829
+ /** @description Verification methods to choose from (challenge_selection only). Send one id as challenge to POST /v1/auth/checkpoint/request. */
28830
+ challenges?: {
28831
+ /** @enum {string} */
28832
+ id?: "email" | "sms" | "whatsapp";
28833
+ /** @description Display name, e.g. Text message. */
28834
+ label?: string;
28835
+ /** @description The masked destination, when known. */
28836
+ description?: string | null;
28837
+ }[];
28732
28838
  /** @description Contract picker options (contract_selection only). Solve with the chosen id as the code. */
28733
28839
  contracts?: {
28734
28840
  id?: string;
@@ -28847,6 +28953,11 @@ export interface operations {
28847
28953
  "application/json": {
28848
28954
  /** @description The account whose pending checkpoint notification should be re-sent (returned with the 202 checkpoint_required response, or from link/poll). */
28849
28955
  account_id: string;
28956
+ /**
28957
+ * @description Optional. An id from a challenge_selection checkpoint's challenges list: switches to that method and returns the next checkpoint. Omit to re-send the current code.
28958
+ * @enum {string}
28959
+ */
28960
+ challenge?: "email" | "sms" | "whatsapp";
28850
28961
  };
28851
28962
  };
28852
28963
  };
@@ -28871,6 +28982,58 @@ export interface operations {
28871
28982
  };
28872
28983
  };
28873
28984
  };
28985
+ /** @description challenge was sent: the method was switched and this is the next verification challenge. Solve it with POST /v1/auth/checkpoint/solve. */
28986
+ 202: {
28987
+ headers: {
28988
+ "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
28989
+ RateLimit: components["headers"]["RateLimit"];
28990
+ [name: string]: unknown;
28991
+ };
28992
+ content: {
28993
+ "application/json": {
28994
+ /**
28995
+ * @description Response type discriminator.
28996
+ * @enum {string}
28997
+ */
28998
+ object?: "checkpoint";
28999
+ /** @enum {string} */
29000
+ status?: "checkpoint_required";
29001
+ /** @description The (provisional) account_id to pass to the checkpoint sub-resource (POST /v1/auth/checkpoint/solve). */
29002
+ account_id?: string;
29003
+ /**
29004
+ * @description The verification challenge LinkedIn issued.
29005
+ * @enum {string}
29006
+ */
29007
+ challenge_type?: "otp" | "two_factor_sms" | "two_factor_app" | "two_factor_whatsapp" | "mobile_app_approval" | "otp_or_mobile_app_approval" | "contract_selection" | "challenge_selection";
29008
+ /** @description Verification methods to choose from (challenge_selection only). Send one id as challenge to POST /v1/auth/checkpoint/request. */
29009
+ challenges?: {
29010
+ /** @enum {string} */
29011
+ id?: "email" | "sms" | "whatsapp";
29012
+ /** @description Display name, e.g. Text message. */
29013
+ label?: string;
29014
+ /** @description The masked destination, when known. */
29015
+ description?: string | null;
29016
+ }[];
29017
+ /** @description Contract picker options (contract_selection only). Solve with the chosen id as the code. */
29018
+ contracts?: {
29019
+ id?: string;
29020
+ name?: string;
29021
+ }[];
29022
+ /** @description ISO-8601 expiry of the challenge. */
29023
+ expires_at?: string;
29024
+ safety_warning?: components["schemas"]["SafetyWarning"];
29025
+ };
29026
+ };
29027
+ };
29028
+ /** @description INVALID_REQUEST. challenge is not a known method id, or is not one of the methods the pending checkpoint offered; send an id from its challenges list. */
29029
+ 400: {
29030
+ headers: {
29031
+ [name: string]: unknown;
29032
+ };
29033
+ content: {
29034
+ "application/json": components["schemas"]["Error"];
29035
+ };
29036
+ };
28874
29037
  /** @description ACCOUNT_RESTRICTED. LinkedIn has restricted this account. Sign in to LinkedIn to see what it needs, resolve it there, then reconnect. */
28875
29038
  403: {
28876
29039
  headers: {
@@ -29013,18 +29176,29 @@ export interface operations {
29013
29176
  * @description Deprecated, use seat_id (same value). Removed at the GA /v1 cutover. Present on status:"active".
29014
29177
  */
29015
29178
  attached_seat_id?: string | null;
29179
+ /** @description Your own id for this account's end user, as passed on connect. Present on status:"active". */
29180
+ external_id?: string | null;
29016
29181
  /** @description ISO-8601 expiry. Present on status:"pending" and status:"checkpoint_required". */
29017
29182
  expires_at?: string;
29018
29183
  /**
29019
29184
  * @description Machine-readable challenge discriminator. On status:"checkpoint_required" it is the NEW challenge to submit; on status:"expired" it renders the right recovery guidance.
29020
29185
  * @enum {string}
29021
29186
  */
29022
- challenge_type?: "mobile_app_approval" | "otp" | "two_factor_sms" | "two_factor_app" | "two_factor_whatsapp" | "contract_selection";
29187
+ challenge_type?: "mobile_app_approval" | "otp" | "two_factor_sms" | "two_factor_app" | "two_factor_whatsapp" | "contract_selection" | "challenge_selection";
29023
29188
  /** @description Contract picker options, present only on a chained status:"checkpoint_required" with challenge_type:"contract_selection". */
29024
29189
  contracts?: {
29025
29190
  id?: string;
29026
29191
  name?: string;
29027
29192
  }[];
29193
+ /** @description Verification methods to choose from (challenge_selection only). Send one id as challenge to POST /v1/auth/checkpoint/request. */
29194
+ challenges?: {
29195
+ /** @enum {string} */
29196
+ id?: "email" | "sms" | "whatsapp";
29197
+ /** @description Display name, e.g. Text message. */
29198
+ label?: string;
29199
+ /** @description The masked destination, when known. */
29200
+ description?: string | null;
29201
+ }[];
29028
29202
  /** @description Human-readable, actionable next step when the approval timed out. Present on status:"expired". */
29029
29203
  recovery_hint?: string;
29030
29204
  safety_warning?: components["schemas"]["SafetyWarning"];
@@ -29224,7 +29398,7 @@ export interface operations {
29224
29398
  query?: {
29225
29399
  /** @description Pagination cursor from a previous response; decodable, pass it back verbatim */
29226
29400
  cursor?: string;
29227
- /** @description Return only events in this queue state. unread: nobody holds it, which includes an event whose lease expired. claimed: leased to a consumer right now. done: already handled, and it will never be handed out again. Omit to return every state. There is no failed state. */
29401
+ /** @description Return only events in this state: unread (includes an expired lease), claimed, or done. Omit for every state. There is no failed state. */
29228
29402
  state?: "unread" | "claimed" | "done";
29229
29403
  /** @description How many events to return per page, 1 to 100. Defaults to 50. */
29230
29404
  limit?: number;
@@ -29365,7 +29539,9 @@ export interface operations {
29365
29539
  content: {
29366
29540
  "application/json": {
29367
29541
  consumer: string;
29542
+ /** @description Max events to lease (1-100, default 10). */
29368
29543
  limit?: number;
29544
+ /** @description Seconds to hold the lease (10-3600, default 300). */
29369
29545
  lease_seconds?: number;
29370
29546
  };
29371
29547
  };
@@ -29727,7 +29903,7 @@ export interface operations {
29727
29903
  /** @description The URL that receives delivery POST requests. */
29728
29904
  request_url?: string;
29729
29905
  name?: string | null;
29730
- account_ids?: string[];
29906
+ account_ids?: string[] | null;
29731
29907
  enabled?: boolean;
29732
29908
  /** @description Custom headers added to each delivery POST, with a fingerprint in place of the value. */
29733
29909
  headers?: {
@@ -29740,7 +29916,7 @@ export interface operations {
29740
29916
  /** @description First 8 characters of the secret (never the full secret). */
29741
29917
  secret_prefix?: string;
29742
29918
  /**
29743
- * @description Delivery health state. 'degraded' when recent deliveries have repeatedly failed.
29919
+ * @description Delivery health state. 'degraded' when the last delivery exhausted all 5 attempts, or when it could not be signed at all because the webhook's signing secret is unusable (then no delivery can succeed; recreate the webhook).
29744
29920
  * @enum {string}
29745
29921
  */
29746
29922
  health?: "ok" | "degraded";
@@ -29868,8 +30044,8 @@ export interface operations {
29868
30044
  request_url: string;
29869
30045
  /** @description Human-readable name for this webhook (1-100 chars) */
29870
30046
  name?: string;
29871
- /** @description Per-account targeting. Required and non-empty; each id must be an acc_-prefixed id owned by the tenant. */
29872
- account_ids: string[];
30047
+ /** @description Per-account targeting. Omit to receive events for every current and future account; each id must be an acc_-prefixed id you own. */
30048
+ account_ids?: string[];
29873
30049
  /**
29874
30050
  * @description A disabled webhook is created but delivers nothing
29875
30051
  * @default true
@@ -29914,8 +30090,8 @@ export interface operations {
29914
30090
  request_url?: string;
29915
30091
  /** @description Human-readable label. */
29916
30092
  name?: string | null;
29917
- /** @description Accounts targeted by this webhook. Required and non-empty, each id must be owned by the tenant. */
29918
- account_ids?: string[];
30093
+ /** @description Accounts targeted by this webhook (acc_ ids you own), or null when an account_status webhook covers every current and future account. */
30094
+ account_ids?: string[] | null;
29919
30095
  /** @description A disabled webhook is created but delivers nothing. */
29920
30096
  enabled?: boolean;
29921
30097
  /** @description Custom headers added to each delivery POST. Values are encrypted at rest and no read returns one, so a read shows the name and a fingerprint of the value. */
@@ -30192,8 +30368,8 @@ export interface operations {
30192
30368
  request_url?: string;
30193
30369
  /** @description Human-readable label. */
30194
30370
  name?: string | null;
30195
- /** @description Accounts targeted by this webhook. Non-empty, each id is owned by the tenant. */
30196
- account_ids?: string[];
30371
+ /** @description Accounts targeted by this webhook (acc_ ids you own), or null when an account_status webhook covers every current and future account. */
30372
+ account_ids?: string[] | null;
30197
30373
  /** @description A disabled webhook is kept but delivers nothing. Disabling takes effect immediately, including for retries that were already queued; those attempts are abandoned, not deferred, so re-enabling delivers new events rather than replaying the ones that were dropped. */
30198
30374
  enabled?: boolean;
30199
30375
  /** @description Custom headers added to each delivery POST. Values are encrypted at rest and no read returns one, so a read shows the name and a fingerprint of the value. */
@@ -30268,7 +30444,7 @@ export interface operations {
30268
30444
  };
30269
30445
  requestBody?: never;
30270
30446
  responses: {
30271
- /** @description Webhook removed. Delivery stops immediately, including retries that were already queued. Idempotent, deleting an already-deleted webhook returns the same shape. */
30447
+ /** @description Webhook removed. Delivery stops immediately, including retries that were already queued. Deleting an already-deleted webhook returns the same shape again, not an error. */
30272
30448
  200: {
30273
30449
  headers: {
30274
30450
  "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
@@ -30357,8 +30533,8 @@ export interface operations {
30357
30533
  }[];
30358
30534
  /** @description Replace the field-remapping keys for the delivery payload (whole-array). */
30359
30535
  data?: string[];
30360
- /** @description Replace the targeted accounts (whole-array). Must be non-empty; each id must be an acc_-prefixed id owned by the tenant. */
30361
- account_ids?: string[];
30536
+ /** @description Replace the targeted accounts (whole-array, each an acc_ id you own), or null to cover every current and future account (account_status webhooks only). */
30537
+ account_ids?: string[] | null;
30362
30538
  };
30363
30539
  };
30364
30540
  };
@@ -30388,8 +30564,8 @@ export interface operations {
30388
30564
  request_url?: string;
30389
30565
  /** @description Human-readable label. */
30390
30566
  name?: string | null;
30391
- /** @description Accounts targeted by this webhook. Non-empty, each id is owned by the tenant. */
30392
- account_ids?: string[];
30567
+ /** @description Accounts targeted by this webhook (acc_ ids you own), or null when an account_status webhook covers every current and future account. */
30568
+ account_ids?: string[] | null;
30393
30569
  /** @description A disabled webhook is kept but delivers nothing. Disabling takes effect immediately, including for retries that were already queued; those attempts are abandoned, not deferred, so re-enabling delivers new events rather than replaying the ones that were dropped. */
30394
30570
  enabled?: boolean;
30395
30571
  /** @description Custom headers added to each delivery POST. Values are encrypted at rest and no read returns one, so a read shows the name and a fingerprint of the value. */
@@ -31412,4 +31588,287 @@ export interface operations {
31412
31588
  };
31413
31589
  };
31414
31590
  };
31591
+ postV1BillingSeatsAdd: {
31592
+ parameters: {
31593
+ query?: never;
31594
+ header?: never;
31595
+ path?: never;
31596
+ cookie?: never;
31597
+ };
31598
+ requestBody: {
31599
+ content: {
31600
+ "application/json": {
31601
+ qty: number;
31602
+ };
31603
+ };
31604
+ };
31605
+ responses: {
31606
+ /** @description Seats added. */
31607
+ 200: {
31608
+ headers: {
31609
+ "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
31610
+ RateLimit: components["headers"]["RateLimit"];
31611
+ [name: string]: unknown;
31612
+ };
31613
+ content: {
31614
+ "application/json": {
31615
+ /** @description Amount collected right now, or null when nothing was collected today. */
31616
+ charged_today_eur: number | null;
31617
+ /**
31618
+ * Format: date-time
31619
+ * @description Reserved for a future queued-proration date; always null today.
31620
+ */
31621
+ next_invoice_at: string | null;
31622
+ /** @description The newly created seat ids. */
31623
+ seat_ids: string[];
31624
+ safety_warning?: components["schemas"]["SafetyWarning"];
31625
+ };
31626
+ };
31627
+ };
31628
+ /** @description qty must be a whole number from 1 to 50. */
31629
+ 400: {
31630
+ headers: {
31631
+ [name: string]: unknown;
31632
+ };
31633
+ content: {
31634
+ "application/json": components["schemas"]["Error"];
31635
+ };
31636
+ };
31637
+ /** @description Missing or invalid API key. */
31638
+ 401: {
31639
+ headers: {
31640
+ [name: string]: unknown;
31641
+ };
31642
+ content: {
31643
+ "application/json": components["schemas"]["Error"];
31644
+ };
31645
+ };
31646
+ /** @description No active subscription, a past-due subscription, an account under dispute review, or the card was declined (no seats added). */
31647
+ 402: {
31648
+ headers: {
31649
+ [name: string]: unknown;
31650
+ };
31651
+ content: {
31652
+ "application/json": components["schemas"]["Error"];
31653
+ };
31654
+ };
31655
+ /** @description The workspace is on a free trial and cannot add seats. Buy a seat to convert to a paid subscription first. */
31656
+ 409: {
31657
+ headers: {
31658
+ [name: string]: unknown;
31659
+ };
31660
+ content: {
31661
+ "application/json": components["schemas"]["Error"];
31662
+ };
31663
+ };
31664
+ /** @description Payload too large, the request body exceeds the size limit. */
31665
+ 413: {
31666
+ headers: {
31667
+ [name: string]: unknown;
31668
+ };
31669
+ content: {
31670
+ "application/json": components["schemas"]["Error"];
31671
+ };
31672
+ };
31673
+ /** @description Rate limited, slow down and retry after the hinted delay. */
31674
+ 429: {
31675
+ headers: {
31676
+ "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
31677
+ RateLimit: components["headers"]["RateLimit"];
31678
+ "Retry-After": components["headers"]["Retry-After"];
31679
+ [name: string]: unknown;
31680
+ };
31681
+ content: {
31682
+ "application/json": components["schemas"]["Error"];
31683
+ };
31684
+ };
31685
+ /** @description The purchase could not be confirmed while another change was in progress. Check the seat count before retrying. */
31686
+ 503: {
31687
+ headers: {
31688
+ [name: string]: unknown;
31689
+ };
31690
+ content: {
31691
+ "application/json": components["schemas"]["Error"];
31692
+ };
31693
+ };
31694
+ };
31695
+ };
31696
+ postV1BillingSeatsSeatIdCancel: {
31697
+ parameters: {
31698
+ query?: never;
31699
+ header?: never;
31700
+ path: {
31701
+ /** @description The seat ID (`seat_...`) to cancel. */
31702
+ seat_id: string;
31703
+ };
31704
+ cookie?: never;
31705
+ };
31706
+ requestBody?: never;
31707
+ responses: {
31708
+ /** @description Cancellation scheduled (or already was). */
31709
+ 200: {
31710
+ headers: {
31711
+ "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
31712
+ RateLimit: components["headers"]["RateLimit"];
31713
+ [name: string]: unknown;
31714
+ };
31715
+ content: {
31716
+ "application/json": {
31717
+ /**
31718
+ * Format: date-time
31719
+ * @description When the seat's access ends.
31720
+ */
31721
+ effective_at: string;
31722
+ safety_warning?: components["schemas"]["SafetyWarning"];
31723
+ };
31724
+ };
31725
+ };
31726
+ /** @description seat_id not found for this workspace, or its cancellation already took effect. */
31727
+ 400: {
31728
+ headers: {
31729
+ [name: string]: unknown;
31730
+ };
31731
+ content: {
31732
+ "application/json": components["schemas"]["Error"];
31733
+ };
31734
+ };
31735
+ /** @description Missing or invalid API key. */
31736
+ 401: {
31737
+ headers: {
31738
+ [name: string]: unknown;
31739
+ };
31740
+ content: {
31741
+ "application/json": components["schemas"]["Error"];
31742
+ };
31743
+ };
31744
+ /** @description No active subscription, a past-due subscription, or an account under dispute review. */
31745
+ 402: {
31746
+ headers: {
31747
+ [name: string]: unknown;
31748
+ };
31749
+ content: {
31750
+ "application/json": components["schemas"]["Error"];
31751
+ };
31752
+ };
31753
+ /** @description The workspace is on a free trial and cannot change seats. Buy a seat to convert to a paid subscription first. */
31754
+ 409: {
31755
+ headers: {
31756
+ [name: string]: unknown;
31757
+ };
31758
+ content: {
31759
+ "application/json": components["schemas"]["Error"];
31760
+ };
31761
+ };
31762
+ /** @description Rate limited, slow down and retry after the hinted delay. */
31763
+ 429: {
31764
+ headers: {
31765
+ "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
31766
+ RateLimit: components["headers"]["RateLimit"];
31767
+ "Retry-After": components["headers"]["Retry-After"];
31768
+ [name: string]: unknown;
31769
+ };
31770
+ content: {
31771
+ "application/json": components["schemas"]["Error"];
31772
+ };
31773
+ };
31774
+ /** @description Another change to this subscription is in progress. Retry shortly. */
31775
+ 503: {
31776
+ headers: {
31777
+ [name: string]: unknown;
31778
+ };
31779
+ content: {
31780
+ "application/json": components["schemas"]["Error"];
31781
+ };
31782
+ };
31783
+ };
31784
+ };
31785
+ postV1BillingSeatsSeatIdCancelRevert: {
31786
+ parameters: {
31787
+ query?: never;
31788
+ header?: never;
31789
+ path: {
31790
+ /** @description The seat ID (`seat_...`) whose scheduled cancellation to revert. */
31791
+ seat_id: string;
31792
+ };
31793
+ cookie?: never;
31794
+ };
31795
+ requestBody?: never;
31796
+ responses: {
31797
+ /** @description Cancellation reverted. */
31798
+ 200: {
31799
+ headers: {
31800
+ "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
31801
+ RateLimit: components["headers"]["RateLimit"];
31802
+ [name: string]: unknown;
31803
+ };
31804
+ content: {
31805
+ "application/json": {
31806
+ /**
31807
+ * @description Always true on success.
31808
+ * @enum {boolean}
31809
+ */
31810
+ reverted: true;
31811
+ safety_warning?: components["schemas"]["SafetyWarning"];
31812
+ };
31813
+ };
31814
+ };
31815
+ /** @description seat_id not found, no cancellation is scheduled, it already took effect, or the whole subscription (not this seat) was scheduled to cancel. */
31816
+ 400: {
31817
+ headers: {
31818
+ [name: string]: unknown;
31819
+ };
31820
+ content: {
31821
+ "application/json": components["schemas"]["Error"];
31822
+ };
31823
+ };
31824
+ /** @description Missing or invalid API key. */
31825
+ 401: {
31826
+ headers: {
31827
+ [name: string]: unknown;
31828
+ };
31829
+ content: {
31830
+ "application/json": components["schemas"]["Error"];
31831
+ };
31832
+ };
31833
+ /** @description No active subscription, a past-due subscription, or an account under dispute review. */
31834
+ 402: {
31835
+ headers: {
31836
+ [name: string]: unknown;
31837
+ };
31838
+ content: {
31839
+ "application/json": components["schemas"]["Error"];
31840
+ };
31841
+ };
31842
+ /** @description The workspace is on a free trial and cannot change seats. Buy a seat to convert to a paid subscription first. */
31843
+ 409: {
31844
+ headers: {
31845
+ [name: string]: unknown;
31846
+ };
31847
+ content: {
31848
+ "application/json": components["schemas"]["Error"];
31849
+ };
31850
+ };
31851
+ /** @description Rate limited, slow down and retry after the hinted delay. */
31852
+ 429: {
31853
+ headers: {
31854
+ "RateLimit-Policy": components["headers"]["RateLimit-Policy"];
31855
+ RateLimit: components["headers"]["RateLimit"];
31856
+ "Retry-After": components["headers"]["Retry-After"];
31857
+ [name: string]: unknown;
31858
+ };
31859
+ content: {
31860
+ "application/json": components["schemas"]["Error"];
31861
+ };
31862
+ };
31863
+ /** @description Another change to this subscription is in progress. Retry shortly. */
31864
+ 503: {
31865
+ headers: {
31866
+ [name: string]: unknown;
31867
+ };
31868
+ content: {
31869
+ "application/json": components["schemas"]["Error"];
31870
+ };
31871
+ };
31872
+ };
31873
+ };
31415
31874
  }