@curviate/sdk 0.31.0 → 0.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +96 -0
- package/README.md +2 -1
- package/dist/index.d.ts +549 -32
- package/dist/index.js +47 -5
- package/package.json +1 -1
- package/src/generated/types.ts +505 -29
package/src/generated/types.ts
CHANGED
|
@@ -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).
|
|
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.
|
|
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.
|
|
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.
|
|
801
801
|
*/
|
|
802
802
|
post: operations["postV1AccountIdChatsChatIdMessages"];
|
|
803
803
|
delete?: never;
|
|
@@ -2300,6 +2300,26 @@ export interface paths {
|
|
|
2300
2300
|
patch: operations["patchV1AccountsAccountId"];
|
|
2301
2301
|
trace?: never;
|
|
2302
2302
|
};
|
|
2303
|
+
"/v1/accounts/seats": {
|
|
2304
|
+
parameters: {
|
|
2305
|
+
query?: never;
|
|
2306
|
+
header?: never;
|
|
2307
|
+
path?: never;
|
|
2308
|
+
cookie?: never;
|
|
2309
|
+
};
|
|
2310
|
+
/**
|
|
2311
|
+
* List seats
|
|
2312
|
+
* @description List the workspace's seats: each `seat_id`, whether an account occupies it, and that `account_id`. Pass an unoccupied `seat_id` to POST /v1/auth/intent to connect a new account. Every unoccupied seat listed is a valid connect target. Not paginated.
|
|
2313
|
+
*/
|
|
2314
|
+
get: operations["getV1AccountsSeats"];
|
|
2315
|
+
put?: never;
|
|
2316
|
+
post?: never;
|
|
2317
|
+
delete?: never;
|
|
2318
|
+
options?: never;
|
|
2319
|
+
head?: never;
|
|
2320
|
+
patch?: never;
|
|
2321
|
+
trace?: never;
|
|
2322
|
+
};
|
|
2303
2323
|
"/v1/auth/intent": {
|
|
2304
2324
|
parameters: {
|
|
2305
2325
|
query?: never;
|
|
@@ -2311,7 +2331,7 @@ export interface paths {
|
|
|
2311
2331
|
put?: never;
|
|
2312
2332
|
/**
|
|
2313
2333
|
* Start a credential/cookie authentication
|
|
2314
|
-
* @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` (
|
|
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.
|
|
2315
2335
|
*/
|
|
2316
2336
|
post: operations["postV1AuthIntent"];
|
|
2317
2337
|
delete?: never;
|
|
@@ -2581,7 +2601,7 @@ export interface paths {
|
|
|
2581
2601
|
};
|
|
2582
2602
|
/**
|
|
2583
2603
|
* Read an account's safety policy
|
|
2584
|
-
* @description Returns every configurable safety field for every budget row of one account, in a single response: the ceiling, the green and amber bands, the counting window, the enforcement posture and where it was inherited from, the activity window, warm-up state, the per-row character caps and search per-query cap, and how well calibrated each row's number is. Every value is seeded configuration and every one of them is settable. Where a configured value is above the Curviate default, the row carries an `over_default` entry naming the value, the default and the source class of that default. The response also carries `tenant_default_posture`, the workspace-wide default every account inherits, separately from this account's own effective `posture`, and `limit_profile`, which says which of the four Curviate default sets (`basic`, `premium`, `sales_navigator`, `recruiter`) every row below was resolved from, detected from the platform when the account connected.
|
|
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.
|
|
2585
2605
|
*/
|
|
2586
2606
|
get: operations["getV1AccountIdSafetyPolicy"];
|
|
2587
2607
|
put?: never;
|
|
@@ -2591,7 +2611,7 @@ export interface paths {
|
|
|
2591
2611
|
head?: never;
|
|
2592
2612
|
/**
|
|
2593
2613
|
* Update an account's safety policy
|
|
2594
|
-
* @description The
|
|
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 is an operator override of that result, and it holds until the next connect. One field on this operation does not configure anything: `clear_halts` lifts the platform pause on the action types you name. When the platform refuses a call on an account, Curviate pauses that action type for the platform's own retry-after or a seeded cooldown, and every later call on it is refused locally without reaching the platform; the account resource reports the live pauses as `quotas[].halt`. Naming an action type here lifts its pause immediately, so the next call goes out. An action type with no active pause is accepted and does nothing, which makes it safe to send for a set you have not checked, and only the ones actually lifted are ledgered, each with the expiry it cut short, the actor and the time, readable afterwards on `GET /v1/{account_id}/safety-events` with `reason: "halt_cleared"`. Clearing disarms nothing: if the platform refuses the account again the pause returns, and a 429 or a refused write returns it for the full cooldown. Clear one when you have reason to believe the refusal was a transient upstream fault rather than the platform pushing back on this account.
|
|
2595
2615
|
*/
|
|
2596
2616
|
patch: operations["patchV1AccountIdSafetyPolicy"];
|
|
2597
2617
|
trace?: never;
|
|
@@ -2616,6 +2636,30 @@ export interface paths {
|
|
|
2616
2636
|
patch?: never;
|
|
2617
2637
|
trace?: never;
|
|
2618
2638
|
};
|
|
2639
|
+
"/v1/safety-policy": {
|
|
2640
|
+
parameters: {
|
|
2641
|
+
query?: never;
|
|
2642
|
+
header?: never;
|
|
2643
|
+
path?: never;
|
|
2644
|
+
cookie?: never;
|
|
2645
|
+
};
|
|
2646
|
+
/**
|
|
2647
|
+
* 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.
|
|
2649
|
+
*/
|
|
2650
|
+
get: operations["getV1SafetyPolicy"];
|
|
2651
|
+
put?: never;
|
|
2652
|
+
post?: never;
|
|
2653
|
+
delete?: never;
|
|
2654
|
+
options?: never;
|
|
2655
|
+
head?: never;
|
|
2656
|
+
/**
|
|
2657
|
+
* 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`.
|
|
2659
|
+
*/
|
|
2660
|
+
patch: operations["patchV1SafetyPolicy"];
|
|
2661
|
+
trace?: never;
|
|
2662
|
+
};
|
|
2619
2663
|
}
|
|
2620
2664
|
export type webhooks = Record<string, never>;
|
|
2621
2665
|
export interface components {
|
|
@@ -2744,7 +2788,7 @@ export interface components {
|
|
|
2744
2788
|
chat_id?: string;
|
|
2745
2789
|
/** @description Identifier of the sender. */
|
|
2746
2790
|
sender_id?: string;
|
|
2747
|
-
/** @description Full message text
|
|
2791
|
+
/** @description Full message text. Curviate does not keep it on the way out; reading a conversation back stores its message bodies in your tenant's inbox records, with no expiry. */
|
|
2748
2792
|
text?: string | null;
|
|
2749
2793
|
/** @description Attachment descriptors (no bytes, use the attachment endpoint to download). */
|
|
2750
2794
|
attachments?: {
|
|
@@ -2779,6 +2823,11 @@ export interface components {
|
|
|
2779
2823
|
reaction_count?: number;
|
|
2780
2824
|
/** @description The platform this message originates from. */
|
|
2781
2825
|
provider?: string;
|
|
2826
|
+
/** @description Platform-specific detail on the message. Carries `subject` for an InMail, which is set on the thread's opening message; absent or empty for an ordinary message. */
|
|
2827
|
+
specifics?: {
|
|
2828
|
+
/** @description The InMail subject line, when the platform carries one on this message. Ordinary messages have none. Reading a conversation back stores the subject in your tenant's inbox records alongside the body, with no expiry. */
|
|
2829
|
+
subject?: string | null;
|
|
2830
|
+
};
|
|
2782
2831
|
/** @description The sender's profile, when the platform returned one alongside the message. sender_id always carries the identifier; this object carries the rest of what is known about that person. */
|
|
2783
2832
|
sender?: {
|
|
2784
2833
|
/** @description Identifier of the counterpart. */
|
|
@@ -10196,7 +10245,7 @@ export interface operations {
|
|
|
10196
10245
|
last_message_timestamp?: string;
|
|
10197
10246
|
/** @description Identifier of the 1:1 counterpart. */
|
|
10198
10247
|
user_id?: string;
|
|
10199
|
-
/** @description The most recent message in the chat. */
|
|
10248
|
+
/** @description The most recent message in the chat. Subjects are not previewed here, read the chat's messages for one. */
|
|
10200
10249
|
last_message?: {
|
|
10201
10250
|
/**
|
|
10202
10251
|
* @description Response type discriminator.
|
|
@@ -10212,7 +10261,7 @@ export interface operations {
|
|
|
10212
10261
|
chat_id?: string;
|
|
10213
10262
|
/** @description Identifier of the sender. */
|
|
10214
10263
|
sender_id?: string;
|
|
10215
|
-
/** @description Full message text
|
|
10264
|
+
/** @description Full message text. Curviate does not keep it on the way out; reading a conversation back stores its message bodies in your tenant's inbox records, with no expiry. */
|
|
10216
10265
|
text?: string | null;
|
|
10217
10266
|
/** @description Attachment descriptors (no bytes, use the attachment endpoint to download). */
|
|
10218
10267
|
attachments?: {
|
|
@@ -10621,7 +10670,7 @@ export interface operations {
|
|
|
10621
10670
|
last_message_timestamp?: string;
|
|
10622
10671
|
/** @description Identifier of the 1:1 counterpart. */
|
|
10623
10672
|
user_id?: string;
|
|
10624
|
-
/** @description The most recent message in the chat. */
|
|
10673
|
+
/** @description The most recent message in the chat. Subjects are not previewed here, read the chat's messages for one. */
|
|
10625
10674
|
last_message?: {
|
|
10626
10675
|
/**
|
|
10627
10676
|
* @description Response type discriminator.
|
|
@@ -10637,7 +10686,7 @@ export interface operations {
|
|
|
10637
10686
|
chat_id?: string;
|
|
10638
10687
|
/** @description Identifier of the sender. */
|
|
10639
10688
|
sender_id?: string;
|
|
10640
|
-
/** @description Full message text
|
|
10689
|
+
/** @description Full message text. Curviate does not keep it on the way out; reading a conversation back stores its message bodies in your tenant's inbox records, with no expiry. */
|
|
10641
10690
|
text?: string | null;
|
|
10642
10691
|
/** @description Attachment descriptors (no bytes, use the attachment endpoint to download). */
|
|
10643
10692
|
attachments?: {
|
|
@@ -11007,7 +11056,7 @@ export interface operations {
|
|
|
11007
11056
|
chat_id?: string;
|
|
11008
11057
|
/** @description Identifier of the sender. */
|
|
11009
11058
|
sender_id?: string;
|
|
11010
|
-
/** @description Full message text
|
|
11059
|
+
/** @description Full message text. Curviate does not keep it on the way out; reading a conversation back stores its message bodies in your tenant's inbox records, with no expiry. */
|
|
11011
11060
|
text?: string | null;
|
|
11012
11061
|
/** @description Attachment descriptors (no bytes, use the attachment endpoint to download). */
|
|
11013
11062
|
attachments?: {
|
|
@@ -11042,6 +11091,11 @@ export interface operations {
|
|
|
11042
11091
|
reaction_count?: number;
|
|
11043
11092
|
/** @description The platform this message originates from. */
|
|
11044
11093
|
provider?: string;
|
|
11094
|
+
/** @description Platform-specific detail on the message. Carries `subject` for an InMail, which is set on the thread's opening message; absent or empty for an ordinary message. */
|
|
11095
|
+
specifics?: {
|
|
11096
|
+
/** @description The InMail subject line, when the platform carries one on this message. Ordinary messages have none. Reading a conversation back stores the subject in your tenant's inbox records alongside the body, with no expiry. */
|
|
11097
|
+
subject?: string | null;
|
|
11098
|
+
};
|
|
11045
11099
|
/** @description The sender's profile, when the platform returned one alongside the message. sender_id always carries the identifier; this object carries the rest of what is known about that person. */
|
|
11046
11100
|
sender?: {
|
|
11047
11101
|
/** @description Identifier of the counterpart. */
|
|
@@ -11386,7 +11440,7 @@ export interface operations {
|
|
|
11386
11440
|
chat_id?: string;
|
|
11387
11441
|
/** @description Identifier of the sender. */
|
|
11388
11442
|
sender_id?: string;
|
|
11389
|
-
/** @description Full message text
|
|
11443
|
+
/** @description Full message text. Curviate does not keep it on the way out; reading a conversation back stores its message bodies in your tenant's inbox records, with no expiry. */
|
|
11390
11444
|
text?: string | null;
|
|
11391
11445
|
/** @description Attachment descriptors (no bytes, use the attachment endpoint to download). */
|
|
11392
11446
|
attachments?: {
|
|
@@ -11421,6 +11475,11 @@ export interface operations {
|
|
|
11421
11475
|
reaction_count?: number;
|
|
11422
11476
|
/** @description The platform this message originates from. */
|
|
11423
11477
|
provider?: string;
|
|
11478
|
+
/** @description Platform-specific detail on the message. Carries `subject` for an InMail, which is set on the thread's opening message; absent or empty for an ordinary message. */
|
|
11479
|
+
specifics?: {
|
|
11480
|
+
/** @description The InMail subject line, when the platform carries one on this message. Ordinary messages have none. Reading a conversation back stores the subject in your tenant's inbox records alongside the body, with no expiry. */
|
|
11481
|
+
subject?: string | null;
|
|
11482
|
+
};
|
|
11424
11483
|
/** @description The sender's profile, when the platform returned one alongside the message. sender_id always carries the identifier; this object carries the rest of what is known about that person. */
|
|
11425
11484
|
sender?: {
|
|
11426
11485
|
/** @description Identifier of the counterpart. */
|
|
@@ -12078,7 +12137,7 @@ export interface operations {
|
|
|
12078
12137
|
id?: string;
|
|
12079
12138
|
/** @description Account id that owns this message. */
|
|
12080
12139
|
account_id?: string;
|
|
12081
|
-
/** @description Full message text
|
|
12140
|
+
/** @description Full message text. Curviate does not keep it on the way out; reading a conversation back stores its message bodies in your tenant's inbox records, with no expiry. */
|
|
12082
12141
|
text?: string | null;
|
|
12083
12142
|
/** @description Identifier of the sender. */
|
|
12084
12143
|
sender_id?: string;
|
|
@@ -12217,7 +12276,7 @@ export interface operations {
|
|
|
12217
12276
|
recipient_urn: string;
|
|
12218
12277
|
/** @description InMail subject line (1-200 chars). */
|
|
12219
12278
|
subject: string;
|
|
12220
|
-
/** @description InMail body text (1-8000 chars). */
|
|
12279
|
+
/** @description InMail body text (1-8000 chars). This call keeps nothing and logs nothing. Once sent it is a message in the account's InMail inbox, so reading that chat back through Curviate stores its body in your tenant's inbox records, with no expiry. */
|
|
12221
12280
|
text: string;
|
|
12222
12281
|
};
|
|
12223
12282
|
};
|
|
@@ -12560,7 +12619,7 @@ export interface operations {
|
|
|
12560
12619
|
last_message_timestamp?: string;
|
|
12561
12620
|
/** @description Identifier of the 1:1 counterpart. */
|
|
12562
12621
|
user_id?: string;
|
|
12563
|
-
/** @description The most recent message in the chat. */
|
|
12622
|
+
/** @description The most recent message in the chat. Subjects are not previewed here, read the chat's messages for one. */
|
|
12564
12623
|
last_message?: {
|
|
12565
12624
|
/**
|
|
12566
12625
|
* @description Response type discriminator.
|
|
@@ -12576,7 +12635,7 @@ export interface operations {
|
|
|
12576
12635
|
chat_id?: string;
|
|
12577
12636
|
/** @description Identifier of the sender. */
|
|
12578
12637
|
sender_id?: string;
|
|
12579
|
-
/** @description Full message text
|
|
12638
|
+
/** @description Full message text. Curviate does not keep it on the way out; reading a conversation back stores its message bodies in your tenant's inbox records, with no expiry. */
|
|
12580
12639
|
text?: string | null;
|
|
12581
12640
|
/** @description Attachment descriptors (no bytes, use the attachment endpoint to download). */
|
|
12582
12641
|
attachments?: {
|
|
@@ -17834,7 +17893,7 @@ export interface operations {
|
|
|
17834
17893
|
"application/json": components["schemas"]["Error"];
|
|
17835
17894
|
};
|
|
17836
17895
|
};
|
|
17837
|
-
/** @description
|
|
17896
|
+
/** @description LINKEDIN_SERVICE_UNAVAILABLE, the résumé is still being generated and was not ready in time. Retry the request shortly. */
|
|
17838
17897
|
503: {
|
|
17839
17898
|
headers: {
|
|
17840
17899
|
[name: string]: unknown;
|
|
@@ -20040,11 +20099,11 @@ export interface operations {
|
|
|
20040
20099
|
"application/json": {
|
|
20041
20100
|
/** @description One or more Recruiter member IDs (AE... format) to include in the chat. */
|
|
20042
20101
|
attendees_ids: string[];
|
|
20043
|
-
/** @description Opening message text (1-8000 chars).
|
|
20102
|
+
/** @description Opening message text (1-8000 chars). This call keeps nothing and logs nothing. Once sent it is a message in the account's InMail inbox, so reading that chat back through Curviate stores its body in your tenant's inbox records, with no expiry. */
|
|
20044
20103
|
text: string;
|
|
20045
20104
|
/** @description Subject line; REQUIRED for Recruiter (InMail-based messaging), unlike the classic surface (<= 200 chars). */
|
|
20046
20105
|
subject: string;
|
|
20047
|
-
/** @description Sender signature; REQUIRED for Recruiter.
|
|
20106
|
+
/** @description Sender signature; REQUIRED for Recruiter. Kept as a field by neither this call nor the log. The platform renders it into the sent message body, which is stored if that chat is later read back through Curviate. */
|
|
20048
20107
|
signature: string;
|
|
20049
20108
|
/**
|
|
20050
20109
|
* @description Visibility of the recruiter chat.
|
|
@@ -20063,11 +20122,11 @@ export interface operations {
|
|
|
20063
20122
|
send_as?: "INMAIL" | "EMAIL";
|
|
20064
20123
|
/** @description Sourcing channel for tracking purposes (e.g. CAREER_SITE, MANUAL_IMPORT, INTERNAL_CANDIDATES, RECRUITER_SEARCH, REFERRAL; the vendor's own vocabulary is broader than this illustrative set, so any non-empty value is accepted rather than a closed enum). */
|
|
20065
20124
|
channel_type?: string;
|
|
20066
|
-
/** @description Recruiter PRO only: schedule a follow-up message. subject
|
|
20125
|
+
/** @description Recruiter PRO only: schedule a follow-up message. subject: This call keeps nothing and logs nothing, and unlike the message body the platform does not render it into what is sent. Once sent it is an InMail in the account's inbox: if a message read surfaces this subject, reading that chat back stores it in your tenant's inbox records like a body, with no expiry. text: This call keeps nothing and logs nothing. Once sent it is a message in the account's InMail inbox, so reading that chat back through Curviate stores its body in your tenant's inbox records, with no expiry. */
|
|
20067
20126
|
follow_up?: {
|
|
20068
|
-
/** @description Follow-up message subject.
|
|
20127
|
+
/** @description Follow-up message subject. This call keeps nothing and logs nothing, and unlike the message body the platform does not render it into what is sent. Once sent it is an InMail in the account's inbox: if a message read surfaces this subject, reading that chat back stores it in your tenant's inbox records like a body, with no expiry. */
|
|
20069
20128
|
subject: string;
|
|
20070
|
-
/** @description Follow-up message body.
|
|
20129
|
+
/** @description Follow-up message body. This call keeps nothing and logs nothing. Once sent it is a message in the account's InMail inbox, so reading that chat back through Curviate stores its body in your tenant's inbox records, with no expiry. */
|
|
20071
20130
|
text: string;
|
|
20072
20131
|
/** @description Optional follow-up attachments. */
|
|
20073
20132
|
attachments?: {
|
|
@@ -24710,7 +24769,7 @@ export interface operations {
|
|
|
24710
24769
|
"application/json": {
|
|
24711
24770
|
/** @description Sales Navigator member IDs for the chat recipients (>= 1, e.g. ACw...). */
|
|
24712
24771
|
attendees_ids: string[];
|
|
24713
|
-
/** @description Opening message text (1-8000 chars).
|
|
24772
|
+
/** @description Opening message text (1-8000 chars). This call keeps nothing and logs nothing. Once sent it is a message in the account's InMail inbox, so reading that chat back through Curviate stores its body in your tenant's inbox records, with no expiry. */
|
|
24714
24773
|
text: string;
|
|
24715
24774
|
/** @description Subject line; REQUIRED for Sales Navigator (InMail-based messaging), unlike the classic surface where it is optional (<= 200 chars). Maps into the SN-only specifics branch. */
|
|
24716
24775
|
subject: string;
|
|
@@ -24814,7 +24873,7 @@ export interface operations {
|
|
|
24814
24873
|
"application/json": components["schemas"]["Error"];
|
|
24815
24874
|
};
|
|
24816
24875
|
};
|
|
24817
|
-
/** @description
|
|
24876
|
+
/** @description ACCOUNT_RESTRICTED, the connected LinkedIn account cannot perform this operation. */
|
|
24818
24877
|
422: {
|
|
24819
24878
|
headers: {
|
|
24820
24879
|
[name: string]: unknown;
|
|
@@ -28237,6 +28296,91 @@ export interface operations {
|
|
|
28237
28296
|
};
|
|
28238
28297
|
};
|
|
28239
28298
|
};
|
|
28299
|
+
getV1AccountsSeats: {
|
|
28300
|
+
parameters: {
|
|
28301
|
+
query?: never;
|
|
28302
|
+
header?: never;
|
|
28303
|
+
path?: never;
|
|
28304
|
+
cookie?: never;
|
|
28305
|
+
};
|
|
28306
|
+
requestBody?: never;
|
|
28307
|
+
responses: {
|
|
28308
|
+
/** @description Every live seat in the workspace with its occupancy. Empty list when the workspace has no seats. */
|
|
28309
|
+
200: {
|
|
28310
|
+
headers: {
|
|
28311
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
28312
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
28313
|
+
[name: string]: unknown;
|
|
28314
|
+
};
|
|
28315
|
+
content: {
|
|
28316
|
+
"application/json": {
|
|
28317
|
+
/**
|
|
28318
|
+
* @description Response type discriminator.
|
|
28319
|
+
* @enum {string}
|
|
28320
|
+
*/
|
|
28321
|
+
object: "seat_list";
|
|
28322
|
+
items: {
|
|
28323
|
+
/** @description The seat ID (`seat_...`). Pass an unoccupied one as `seat_id` when connecting a new account. */
|
|
28324
|
+
seat_id: string;
|
|
28325
|
+
/** @description True when an account is connected on this seat. */
|
|
28326
|
+
occupied: boolean;
|
|
28327
|
+
/** @description The account on this seat, or null when unoccupied. */
|
|
28328
|
+
account_id: string | null;
|
|
28329
|
+
}[];
|
|
28330
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
28331
|
+
};
|
|
28332
|
+
};
|
|
28333
|
+
};
|
|
28334
|
+
/** @description Missing or invalid API key. */
|
|
28335
|
+
401: {
|
|
28336
|
+
headers: {
|
|
28337
|
+
[name: string]: unknown;
|
|
28338
|
+
};
|
|
28339
|
+
content: {
|
|
28340
|
+
"application/json": components["schemas"]["Error"];
|
|
28341
|
+
};
|
|
28342
|
+
};
|
|
28343
|
+
/** @description Rate limited, slow down and retry after the hinted delay. */
|
|
28344
|
+
429: {
|
|
28345
|
+
headers: {
|
|
28346
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
28347
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
28348
|
+
"Retry-After": components["headers"]["Retry-After"];
|
|
28349
|
+
[name: string]: unknown;
|
|
28350
|
+
};
|
|
28351
|
+
content: {
|
|
28352
|
+
"application/json": components["schemas"]["Error"];
|
|
28353
|
+
};
|
|
28354
|
+
};
|
|
28355
|
+
/** @description Internal error. */
|
|
28356
|
+
500: {
|
|
28357
|
+
headers: {
|
|
28358
|
+
[name: string]: unknown;
|
|
28359
|
+
};
|
|
28360
|
+
content: {
|
|
28361
|
+
"application/json": components["schemas"]["Error"];
|
|
28362
|
+
};
|
|
28363
|
+
};
|
|
28364
|
+
/** @description Service unavailable. */
|
|
28365
|
+
503: {
|
|
28366
|
+
headers: {
|
|
28367
|
+
[name: string]: unknown;
|
|
28368
|
+
};
|
|
28369
|
+
content: {
|
|
28370
|
+
"application/json": components["schemas"]["Error"];
|
|
28371
|
+
};
|
|
28372
|
+
};
|
|
28373
|
+
/** @description Gateway timeout. */
|
|
28374
|
+
504: {
|
|
28375
|
+
headers: {
|
|
28376
|
+
[name: string]: unknown;
|
|
28377
|
+
};
|
|
28378
|
+
content: {
|
|
28379
|
+
"application/json": components["schemas"]["Error"];
|
|
28380
|
+
};
|
|
28381
|
+
};
|
|
28382
|
+
};
|
|
28383
|
+
};
|
|
28240
28384
|
postV1AuthIntent: {
|
|
28241
28385
|
parameters: {
|
|
28242
28386
|
query?: never;
|
|
@@ -28247,7 +28391,7 @@ export interface operations {
|
|
|
28247
28391
|
requestBody: {
|
|
28248
28392
|
content: {
|
|
28249
28393
|
"application/json": {
|
|
28250
|
-
/** @description The empty seat this NEW account will occupy. Required on a new connect; omit it and the call returns 400 INVALID_REQUEST with 'seat_id is required'. Seat ids look like seat_01H..., and every seat you own is listed with click-to-copy in the seat table on your dashboard
|
|
28394
|
+
/** @description The empty seat this NEW account will occupy. Required on a new connect; omit it and the call returns 400 INVALID_REQUEST with 'seat_id is required'. Seat ids look like seat_01H..., and every seat you own is listed by GET /v1/accounts/seats (any item with occupied false is free to use) and with click-to-copy in the seat table on your dashboard. Ignored when account_id is present, because a reconnect keeps the account on its current seat. */
|
|
28251
28395
|
seat_id?: string;
|
|
28252
28396
|
/**
|
|
28253
28397
|
* @description How to authenticate. 'credentials' reads the nested `credentials` object (email + password). 'cookie' reads the nested `cookie` object (li_at) and also requires a top-level `user_agent`. Neither set of fields is accepted at the top level.
|
|
@@ -28417,7 +28561,7 @@ export interface operations {
|
|
|
28417
28561
|
"application/json": components["schemas"]["Error"];
|
|
28418
28562
|
};
|
|
28419
28563
|
};
|
|
28420
|
-
/** @description
|
|
28564
|
+
/** @description Either PAYMENT_REQUIRED (an active subscription / seat is needed; update your payment method or purchase a seat) or ACCOUNT_DISPUTED (the tenant's account is under dispute review; contact support). The code field distinguishes the two. */
|
|
28421
28565
|
402: {
|
|
28422
28566
|
headers: {
|
|
28423
28567
|
[name: string]: unknown;
|
|
@@ -30528,14 +30672,14 @@ export interface operations {
|
|
|
30528
30672
|
content: {
|
|
30529
30673
|
"application/json": {
|
|
30530
30674
|
/**
|
|
30531
|
-
* @description Which set of Curviate defaults this account's rows resolve from: `basic`, `premium`, `sales_navigator` or `recruiter`. Each inherits the one before it and raises a few rows. This is the platform product active on the account, NOT the Curviate seat entitlement, and the two can disagree: a lapsed subscription leaves the seat untouched. Curviate detects it from the platform when the account connects, re-detects it on every reconnect and, at most once a day, on an account read; setting it here is an operator override of that result and holds until the next connect. To undo the override, send `limit_profile_source: "default"`: the pin is released, and Curviate re-reads the value from LinkedIn on the account's next read or connect. Sending the value the account already holds changes nothing and pins nothing. The change is recorded in the ledger and it moves the defaults under every row at once, so any row you have configured explicitly keeps your value. The elevated Sales Navigator and Recruiter figures apply only to calls made through the matching interface, the
|
|
30675
|
+
* @description Which set of Curviate defaults this account's rows resolve from: `basic`, `premium`, `sales_navigator` or `recruiter`. Each inherits the one before it and raises a few rows. This is the platform product active on the account, NOT the Curviate seat entitlement, and the two can disagree: a lapsed subscription leaves the seat untouched. Curviate detects it from the platform when the account connects, re-detects it on every reconnect and, at most once a day, on an account read; setting it here is an operator override of that result and holds until the next connect. To undo the override, send `limit_profile_source: "default"`: the pin is released, and Curviate re-reads the value from LinkedIn on the account's next read or connect. Sending the value the account already holds changes nothing and pins nothing. The change is recorded in the ledger and it moves the defaults under every row at once, so any row you have configured explicitly keeps your value. The elevated Sales Navigator and Recruiter figures apply only to calls made through the matching interface, the Sales Navigator and Recruiter operations, and Curviate holds each call to the figure for the interface it goes through. The numbers here are therefore the ones a standard-interface call is held to, on every profile; a call through one of those operations resolves from the elevated set instead, and each row publishes that figure as `interface_ceiling`.
|
|
30532
30676
|
* @enum {string}
|
|
30533
30677
|
*/
|
|
30534
30678
|
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
30535
30679
|
/** @description The IANA zone this account's ACTIVITY window is read in, e.g. `Europe/Berlin`. Must be a real zone; anything else is a 400. Null clears it, which DISABLES the activity window for every row that has not set its own: a guessed zone inverts the window, which is worse than not having one. */
|
|
30536
30680
|
timezone?: string | null;
|
|
30537
30681
|
/**
|
|
30538
|
-
* @description The tenant-wide posture default, which every account inherits unless it overrides it. Set it once for a whole
|
|
30682
|
+
* @description The tenant-wide posture default, which every account inherits unless it overrides it. Set it once for a whole tenant of personas. Null clears it back to `warn`.
|
|
30539
30683
|
* @enum {string|null}
|
|
30540
30684
|
*/
|
|
30541
30685
|
tenant_default_posture?: "warn" | "enforce" | null;
|
|
@@ -30604,7 +30748,7 @@ export interface operations {
|
|
|
30604
30748
|
source_class?: "substrate" | "linkedin_official" | "practitioner" | "inferred" | "unseeded" | null;
|
|
30605
30749
|
/** @description READ-ONLY. `ceiling` with the account's warm-up ramp applied, which is what this row is actually held to. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
|
|
30606
30750
|
effective_ceiling?: unknown;
|
|
30607
|
-
/** @description READ-ONLY. What a call through the matching elevated interface (
|
|
30751
|
+
/** @description READ-ONLY. What a call through the matching elevated interface (the Sales Navigator and Recruiter operations) is held to on this row, or null when this row and limit profile have no such figure. `ceiling`, `effective_ceiling`, `band` and `over_default` are all the STANDARD-interface figure, so on a `sales_navigator` or `recruiter` account a row can report `over` while a call through the elevated interface still succeeds. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
|
|
30608
30752
|
interface_ceiling?: unknown;
|
|
30609
30753
|
/** @description READ-ONLY. `interface_ceiling` with the account's warm-up ramp applied. Read THIS to know where an elevated-interface call stops, for the same reason `effective_ceiling` and not `ceiling` answers that for a standard one. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
|
|
30610
30754
|
effective_interface_ceiling?: unknown;
|
|
@@ -30934,4 +31078,336 @@ export interface operations {
|
|
|
30934
31078
|
};
|
|
30935
31079
|
};
|
|
30936
31080
|
};
|
|
31081
|
+
getV1SafetyPolicy: {
|
|
31082
|
+
parameters: {
|
|
31083
|
+
query?: never;
|
|
31084
|
+
header?: never;
|
|
31085
|
+
path?: never;
|
|
31086
|
+
cookie?: never;
|
|
31087
|
+
};
|
|
31088
|
+
requestBody?: never;
|
|
31089
|
+
responses: {
|
|
31090
|
+
/** @description The tenant safety defaults, every limit profile and every budget row. */
|
|
31091
|
+
200: {
|
|
31092
|
+
headers: {
|
|
31093
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
31094
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
31095
|
+
[name: string]: unknown;
|
|
31096
|
+
};
|
|
31097
|
+
content: {
|
|
31098
|
+
"application/json": {
|
|
31099
|
+
/**
|
|
31100
|
+
* @description Response type discriminator.
|
|
31101
|
+
* @enum {string}
|
|
31102
|
+
*/
|
|
31103
|
+
object?: "tenant_safety_policy";
|
|
31104
|
+
/**
|
|
31105
|
+
* @description The workspace-wide posture default every account in the tenant inherits, or null when none is set. Always present, and separate from `posture` on purpose: when this account overrides the tenant default, a change to the tenant default does not move `posture`, and this field is how you can still see it took effect.
|
|
31106
|
+
* @enum {string|null}
|
|
31107
|
+
*/
|
|
31108
|
+
tenant_default_posture?: "warn" | "enforce" | null;
|
|
31109
|
+
/** @description One entry per limit profile, always all of them. */
|
|
31110
|
+
profiles?: {
|
|
31111
|
+
/**
|
|
31112
|
+
* @description The limit profile these defaults apply to. An account resolves from its own profile's defaults.
|
|
31113
|
+
* @enum {string}
|
|
31114
|
+
*/
|
|
31115
|
+
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
31116
|
+
/** @description Every budget row, always: the tenant default where one is set, the Curviate default otherwise. */
|
|
31117
|
+
rows?: {
|
|
31118
|
+
/** @description The counted-action row this policy governs. */
|
|
31119
|
+
budget_row?: string;
|
|
31120
|
+
/** @description What `enforce` refuses at and `warn` reports at, in the row's own unit. Null means the row is uncalibrated: Curviate has no figure for it. */
|
|
31121
|
+
ceiling?: number | null;
|
|
31122
|
+
/** @description Routine band. */
|
|
31123
|
+
green?: number | null;
|
|
31124
|
+
/** @description Warn-louder band. */
|
|
31125
|
+
amber?: number | null;
|
|
31126
|
+
/**
|
|
31127
|
+
* @description The calendar grain this row is counted in.
|
|
31128
|
+
* @enum {string}
|
|
31129
|
+
*/
|
|
31130
|
+
window_kind?: "day" | "week" | "month";
|
|
31131
|
+
/** @description How many grain units one counting window spans. */
|
|
31132
|
+
window_span?: number;
|
|
31133
|
+
/** @description IANA zone name the counting window is aligned to. Null counts in UTC. */
|
|
31134
|
+
window_timezone?: string | null;
|
|
31135
|
+
/** @description Local HH:MM the activity window opens. */
|
|
31136
|
+
activity_window_start?: string;
|
|
31137
|
+
/** @description Local HH:MM the activity window closes. */
|
|
31138
|
+
activity_window_end?: string;
|
|
31139
|
+
/** @description IANA zone name the activity window is read in. Null disables the window entirely. */
|
|
31140
|
+
activity_window_timezone?: string | null;
|
|
31141
|
+
/**
|
|
31142
|
+
* @description What the activity window governs. `writes` (the default) covers live writes to LinkedIn; `all` widens it to live reads as well, which is the setting for a persona that should not be seen browsing at 03:00. It is broader than it sounds: `all` covers every live read, including the ones about the account itself, so a nightly analytics or invitation-backlog poll is refused at 03:00 too. A read Curviate answers from its own store never reaches LinkedIn, so it is never subject to the window under either setting, at any hour; the same read IS covered when the store cannot answer it, or when you ask for it live. Inbound events are never subject to it either. One action set to `all` reaches the whole account's live reads that spend no budget of their own (notifications, profile analytics, SSI, profile visitors, the invitation and saved-list listings): those calls debit no action type, so they have none to read this setting from and take the account-wide answer instead. Reads that DO debit an action type read that action type's own setting.
|
|
31143
|
+
* @enum {string}
|
|
31144
|
+
*/
|
|
31145
|
+
activity_window_applies_to?: "writes" | "all";
|
|
31146
|
+
/** @description The tenant default multiplier for this row, or null when none is set. Null means each account follows its own derived warm-up ramp; 1 pins every account on this profile out of it. */
|
|
31147
|
+
warm_up_factor?: number | null;
|
|
31148
|
+
/** @description Length cap on the row's free-text field, in characters. */
|
|
31149
|
+
character_cap?: number | null;
|
|
31150
|
+
/** @description Length cap on the row's subject line, in characters. */
|
|
31151
|
+
subject_character_cap?: number | null;
|
|
31152
|
+
/** @description Bound on a single query's result lines. Search rows only. */
|
|
31153
|
+
per_query_cap?: number | null;
|
|
31154
|
+
/**
|
|
31155
|
+
* @description How well calibrated this row's number is. `unseeded` means Curviate has no green, amber or ceiling figure for this row on this profile: the row is reported so nothing is silently missing, but nothing has calibrated it, so no value you set can be `over_default`.
|
|
31156
|
+
* @enum {string}
|
|
31157
|
+
*/
|
|
31158
|
+
source_class?: "substrate" | "linkedin_official" | "practitioner" | "inferred" | "unseeded";
|
|
31159
|
+
/** @description What a call through the matching ELEVATED interface is held to on this row: the `/v1/{account_id}/sales-navigator/...` and `/v1/{account_id}/recruiter/...` operations. Null when this row and limit profile have no such figure, which is every row on `basic` and `premium` and most rows everywhere. Everything else on this row (`ceiling`, `effective_ceiling`, `band` and `over_default`) is the STANDARD-interface figure, because one counter serves both interfaces and the standard side is the conservative one to band against. The consequence is worth reading: on a `sales_navigator` or `recruiter` account a row can report `band: "over"` with `posture: "enforce"` while a call through the elevated interface still succeeds; the refusal the band predicts is the one a standard call gets. */
|
|
31160
|
+
interface_ceiling?: number | null;
|
|
31161
|
+
/** @description Empty when nothing on this row is above default. Computed against the STANDARD-interface default, like `band` and for the same reason. */
|
|
31162
|
+
over_default?: {
|
|
31163
|
+
/**
|
|
31164
|
+
* @description The field whose configured value is above default.
|
|
31165
|
+
* @enum {string}
|
|
31166
|
+
*/
|
|
31167
|
+
field?: "ceiling" | "green" | "amber" | "character_cap" | "subject_character_cap" | "per_query_cap";
|
|
31168
|
+
/** @description The configured value. */
|
|
31169
|
+
value?: number;
|
|
31170
|
+
/** @description The Curviate default it exceeds. */
|
|
31171
|
+
default?: number;
|
|
31172
|
+
/**
|
|
31173
|
+
* @description How well calibrated the DEFAULT is. `substrate` and `linkedin_official` are published figures; `practitioner` is corroborated operator experience; `inferred` is our own reasoning; `unseeded` means we have no figure at all for that row, in which case there is nothing to be above and no entry appears. Read this before deciding whether being above default matters.
|
|
31174
|
+
* @enum {string}
|
|
31175
|
+
*/
|
|
31176
|
+
source_class?: "substrate" | "linkedin_official" | "practitioner" | "inferred" | "unseeded";
|
|
31177
|
+
}[];
|
|
31178
|
+
}[];
|
|
31179
|
+
}[];
|
|
31180
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
31181
|
+
};
|
|
31182
|
+
};
|
|
31183
|
+
};
|
|
31184
|
+
/** @description Rate limited, slow down and retry after the hinted delay. */
|
|
31185
|
+
429: {
|
|
31186
|
+
headers: {
|
|
31187
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
31188
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
31189
|
+
"Retry-After": components["headers"]["Retry-After"];
|
|
31190
|
+
[name: string]: unknown;
|
|
31191
|
+
};
|
|
31192
|
+
content: {
|
|
31193
|
+
"application/json": components["schemas"]["Error"];
|
|
31194
|
+
};
|
|
31195
|
+
};
|
|
31196
|
+
};
|
|
31197
|
+
};
|
|
31198
|
+
patchV1SafetyPolicy: {
|
|
31199
|
+
parameters: {
|
|
31200
|
+
query?: never;
|
|
31201
|
+
header?: never;
|
|
31202
|
+
path?: never;
|
|
31203
|
+
cookie?: never;
|
|
31204
|
+
};
|
|
31205
|
+
requestBody: {
|
|
31206
|
+
content: {
|
|
31207
|
+
"application/json": {
|
|
31208
|
+
/**
|
|
31209
|
+
* @description The tenant-wide posture default every account inherits unless it overrides it. Null clears it back to `warn`.
|
|
31210
|
+
* @enum {string|null}
|
|
31211
|
+
*/
|
|
31212
|
+
tenant_default_posture?: "warn" | "enforce" | null;
|
|
31213
|
+
/** @description Tenant defaults, per limit profile. */
|
|
31214
|
+
profiles?: {
|
|
31215
|
+
/**
|
|
31216
|
+
* @description The limit profile these defaults apply to. An account resolves from the defaults of its own `limit_profile` only.
|
|
31217
|
+
* @enum {string}
|
|
31218
|
+
*/
|
|
31219
|
+
limit_profile: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
31220
|
+
/** @description Per-row defaults for this profile. Omit a field to leave it; `null` clears the tenant default back to the Curviate default. A row read back from this document may be sent unchanged. */
|
|
31221
|
+
rows: {
|
|
31222
|
+
/**
|
|
31223
|
+
* @description The budget row this patch configures.
|
|
31224
|
+
* @enum {string}
|
|
31225
|
+
*/
|
|
31226
|
+
budget_row: "connection_requests_with_note" | "connection_requests_no_note" | "messages_first_degree" | "inmail" | "open_profile_inmail" | "profile_views" | "search" | "comments" | "post_likes" | "follows" | "content_poll" | "job_poll" | "posts" | "endorsements" | "invite_responses" | "withdrawal_sweep" | "total_actions" | "pending_invites";
|
|
31227
|
+
/** @description What `enforce` refuses at and `warn` reports at, in this row's own unit. Any value up to 9007199254740991 is accepted and stored verbatim; a value above the Curviate default is reported back, never clamped. */
|
|
31228
|
+
ceiling?: number | null;
|
|
31229
|
+
/** @description Routine band. Activity at or below it is unremarkable. */
|
|
31230
|
+
green?: number | null;
|
|
31231
|
+
/** @description Warn-louder band, between green and the ceiling. */
|
|
31232
|
+
amber?: number | null;
|
|
31233
|
+
/**
|
|
31234
|
+
* @description The calendar grain this row is counted in.
|
|
31235
|
+
* @enum {string|null}
|
|
31236
|
+
*/
|
|
31237
|
+
window_kind?: "day" | "week" | "month" | null;
|
|
31238
|
+
/** @description How many `window_kind` units one counting window spans. */
|
|
31239
|
+
window_span?: number | null;
|
|
31240
|
+
/** @description IANA zone name the counting window is aligned to, e.g. `Europe/Berlin` or `UTC`. Must be a real zone; anything else is a 400. Null counts in UTC. */
|
|
31241
|
+
window_timezone?: string | null;
|
|
31242
|
+
/** @description Local time the activity window opens, HH:MM. Outside the window, live write operations are reported or refused per posture. */
|
|
31243
|
+
activity_window_start?: string | null;
|
|
31244
|
+
/** @description Local time the activity window closes, HH:MM. */
|
|
31245
|
+
activity_window_end?: string | null;
|
|
31246
|
+
/** @description IANA zone name the activity window is read in, e.g. `Europe/Berlin`. Must be a real zone; anything else is a 400. Null DISABLES the activity window: a guessed zone inverts it, which is worse than not having one. */
|
|
31247
|
+
activity_window_timezone?: string | null;
|
|
31248
|
+
/**
|
|
31249
|
+
* @description What the activity window governs. `writes` (the default) covers live writes to LinkedIn; `all` widens it to live reads. A read Curviate answers from its own store never reaches LinkedIn and so is never covered; the same read IS covered when the store cannot answer it, or when you ask for it live. Stored reads and inbound events are never subject to the window under either setting, at any hour. One action set to `all` reaches the whole account's live reads that spend no budget of their own (notifications, profile analytics, SSI, profile visitors, the invitation and saved-list listings): those calls debit no action type, so they have none to read this setting from and take the account-wide answer instead. Reads that DO debit an action type read that action type's own setting.
|
|
31250
|
+
* @enum {string|null}
|
|
31251
|
+
*/
|
|
31252
|
+
activity_window_applies_to?: "writes" | "all" | null;
|
|
31253
|
+
/** @description Multiplier applied to this row's ceiling while ramping. 1 is not ramping. */
|
|
31254
|
+
warm_up_factor?: number | null;
|
|
31255
|
+
/** @description Length cap on this row's free-text field, in characters (an invitation note, an InMail body). */
|
|
31256
|
+
character_cap?: number | null;
|
|
31257
|
+
/** @description Length cap on this row's subject line, in characters. */
|
|
31258
|
+
subject_character_cap?: number | null;
|
|
31259
|
+
/** @description Bound on a single query's result lines. Search rows only. */
|
|
31260
|
+
per_query_cap?: number | null;
|
|
31261
|
+
/**
|
|
31262
|
+
* @description How well calibrated this row's configured number is. Overriding it labels your own figure; the over-default warning always reports the class of the Curviate default.
|
|
31263
|
+
* @enum {string|null}
|
|
31264
|
+
*/
|
|
31265
|
+
source_class?: "substrate" | "linkedin_official" | "practitioner" | "inferred" | "unseeded" | null;
|
|
31266
|
+
/** @description READ-ONLY. What a call through the matching elevated interface (the Sales Navigator and Recruiter operations) is held to on this row, or null when this row and limit profile have no such figure. `ceiling`, `effective_ceiling`, `band` and `over_default` are all the STANDARD-interface figure, so on a `sales_navigator` or `recruiter` account a row can report `over` while a call through the elevated interface still succeeds. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
|
|
31267
|
+
interface_ceiling?: unknown;
|
|
31268
|
+
/** @description READ-ONLY. The fields on this row configured above the Curviate default. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
|
|
31269
|
+
over_default?: unknown;
|
|
31270
|
+
}[];
|
|
31271
|
+
}[];
|
|
31272
|
+
/** @description READ-ONLY. The document's type discriminator. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
|
|
31273
|
+
object?: unknown;
|
|
31274
|
+
/** @description READ-ONLY. What the last write changed across the tenant's accounts. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
|
|
31275
|
+
impact?: unknown;
|
|
31276
|
+
};
|
|
31277
|
+
};
|
|
31278
|
+
};
|
|
31279
|
+
responses: {
|
|
31280
|
+
/** @description The tenant safety defaults as they now read, plus the `impact` of this write. */
|
|
31281
|
+
200: {
|
|
31282
|
+
headers: {
|
|
31283
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
31284
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
31285
|
+
[name: string]: unknown;
|
|
31286
|
+
};
|
|
31287
|
+
content: {
|
|
31288
|
+
"application/json": {
|
|
31289
|
+
/**
|
|
31290
|
+
* @description Response type discriminator.
|
|
31291
|
+
* @enum {string}
|
|
31292
|
+
*/
|
|
31293
|
+
object?: "tenant_safety_policy";
|
|
31294
|
+
/**
|
|
31295
|
+
* @description The workspace-wide posture default every account in the tenant inherits, or null when none is set. Always present, and separate from `posture` on purpose: when this account overrides the tenant default, a change to the tenant default does not move `posture`, and this field is how you can still see it took effect.
|
|
31296
|
+
* @enum {string|null}
|
|
31297
|
+
*/
|
|
31298
|
+
tenant_default_posture?: "warn" | "enforce" | null;
|
|
31299
|
+
/** @description One entry per limit profile, always all of them. */
|
|
31300
|
+
profiles?: {
|
|
31301
|
+
/**
|
|
31302
|
+
* @description The limit profile these defaults apply to. An account resolves from its own profile's defaults.
|
|
31303
|
+
* @enum {string}
|
|
31304
|
+
*/
|
|
31305
|
+
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
31306
|
+
/** @description Every budget row, always: the tenant default where one is set, the Curviate default otherwise. */
|
|
31307
|
+
rows?: {
|
|
31308
|
+
/** @description The counted-action row this policy governs. */
|
|
31309
|
+
budget_row?: string;
|
|
31310
|
+
/** @description What `enforce` refuses at and `warn` reports at, in the row's own unit. Null means the row is uncalibrated: Curviate has no figure for it. */
|
|
31311
|
+
ceiling?: number | null;
|
|
31312
|
+
/** @description Routine band. */
|
|
31313
|
+
green?: number | null;
|
|
31314
|
+
/** @description Warn-louder band. */
|
|
31315
|
+
amber?: number | null;
|
|
31316
|
+
/**
|
|
31317
|
+
* @description The calendar grain this row is counted in.
|
|
31318
|
+
* @enum {string}
|
|
31319
|
+
*/
|
|
31320
|
+
window_kind?: "day" | "week" | "month";
|
|
31321
|
+
/** @description How many grain units one counting window spans. */
|
|
31322
|
+
window_span?: number;
|
|
31323
|
+
/** @description IANA zone name the counting window is aligned to. Null counts in UTC. */
|
|
31324
|
+
window_timezone?: string | null;
|
|
31325
|
+
/** @description Local HH:MM the activity window opens. */
|
|
31326
|
+
activity_window_start?: string;
|
|
31327
|
+
/** @description Local HH:MM the activity window closes. */
|
|
31328
|
+
activity_window_end?: string;
|
|
31329
|
+
/** @description IANA zone name the activity window is read in. Null disables the window entirely. */
|
|
31330
|
+
activity_window_timezone?: string | null;
|
|
31331
|
+
/**
|
|
31332
|
+
* @description What the activity window governs. `writes` (the default) covers live writes to LinkedIn; `all` widens it to live reads as well, which is the setting for a persona that should not be seen browsing at 03:00. It is broader than it sounds: `all` covers every live read, including the ones about the account itself, so a nightly analytics or invitation-backlog poll is refused at 03:00 too. A read Curviate answers from its own store never reaches LinkedIn, so it is never subject to the window under either setting, at any hour; the same read IS covered when the store cannot answer it, or when you ask for it live. Inbound events are never subject to it either. One action set to `all` reaches the whole account's live reads that spend no budget of their own (notifications, profile analytics, SSI, profile visitors, the invitation and saved-list listings): those calls debit no action type, so they have none to read this setting from and take the account-wide answer instead. Reads that DO debit an action type read that action type's own setting.
|
|
31333
|
+
* @enum {string}
|
|
31334
|
+
*/
|
|
31335
|
+
activity_window_applies_to?: "writes" | "all";
|
|
31336
|
+
/** @description The tenant default multiplier for this row, or null when none is set. Null means each account follows its own derived warm-up ramp; 1 pins every account on this profile out of it. */
|
|
31337
|
+
warm_up_factor?: number | null;
|
|
31338
|
+
/** @description Length cap on the row's free-text field, in characters. */
|
|
31339
|
+
character_cap?: number | null;
|
|
31340
|
+
/** @description Length cap on the row's subject line, in characters. */
|
|
31341
|
+
subject_character_cap?: number | null;
|
|
31342
|
+
/** @description Bound on a single query's result lines. Search rows only. */
|
|
31343
|
+
per_query_cap?: number | null;
|
|
31344
|
+
/**
|
|
31345
|
+
* @description How well calibrated this row's number is. `unseeded` means Curviate has no green, amber or ceiling figure for this row on this profile: the row is reported so nothing is silently missing, but nothing has calibrated it, so no value you set can be `over_default`.
|
|
31346
|
+
* @enum {string}
|
|
31347
|
+
*/
|
|
31348
|
+
source_class?: "substrate" | "linkedin_official" | "practitioner" | "inferred" | "unseeded";
|
|
31349
|
+
/** @description What a call through the matching ELEVATED interface is held to on this row: the `/v1/{account_id}/sales-navigator/...` and `/v1/{account_id}/recruiter/...` operations. Null when this row and limit profile have no such figure, which is every row on `basic` and `premium` and most rows everywhere. Everything else on this row (`ceiling`, `effective_ceiling`, `band` and `over_default`) is the STANDARD-interface figure, because one counter serves both interfaces and the standard side is the conservative one to band against. The consequence is worth reading: on a `sales_navigator` or `recruiter` account a row can report `band: "over"` with `posture: "enforce"` while a call through the elevated interface still succeeds; the refusal the band predicts is the one a standard call gets. */
|
|
31350
|
+
interface_ceiling?: number | null;
|
|
31351
|
+
/** @description Empty when nothing on this row is above default. Computed against the STANDARD-interface default, like `band` and for the same reason. */
|
|
31352
|
+
over_default?: {
|
|
31353
|
+
/**
|
|
31354
|
+
* @description The field whose configured value is above default.
|
|
31355
|
+
* @enum {string}
|
|
31356
|
+
*/
|
|
31357
|
+
field?: "ceiling" | "green" | "amber" | "character_cap" | "subject_character_cap" | "per_query_cap";
|
|
31358
|
+
/** @description The configured value. */
|
|
31359
|
+
value?: number;
|
|
31360
|
+
/** @description The Curviate default it exceeds. */
|
|
31361
|
+
default?: number;
|
|
31362
|
+
/**
|
|
31363
|
+
* @description How well calibrated the DEFAULT is. `substrate` and `linkedin_official` are published figures; `practitioner` is corroborated operator experience; `inferred` is our own reasoning; `unseeded` means we have no figure at all for that row, in which case there is nothing to be above and no entry appears. Read this before deciding whether being above default matters.
|
|
31364
|
+
* @enum {string}
|
|
31365
|
+
*/
|
|
31366
|
+
source_class?: "substrate" | "linkedin_official" | "practitioner" | "inferred" | "unseeded";
|
|
31367
|
+
}[];
|
|
31368
|
+
}[];
|
|
31369
|
+
}[];
|
|
31370
|
+
/** @description What this write changed across the tenant's accounts, measured on them before and after it applied. */
|
|
31371
|
+
impact?: {
|
|
31372
|
+
/** @description Accounts on which at least one budget row's resolved ceiling changed. */
|
|
31373
|
+
accounts_affected?: number;
|
|
31374
|
+
/** @description Accounts on which at least one budget row moved into `band: "over"`. */
|
|
31375
|
+
accounts_moved_into_over?: number;
|
|
31376
|
+
};
|
|
31377
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
31378
|
+
};
|
|
31379
|
+
};
|
|
31380
|
+
};
|
|
31381
|
+
/** @description INVALID_REQUEST. An unknown limit profile, row name or field, or a value that is not a value (a negative ceiling). A value is never rejected for being unsafe. */
|
|
31382
|
+
400: {
|
|
31383
|
+
headers: {
|
|
31384
|
+
[name: string]: unknown;
|
|
31385
|
+
};
|
|
31386
|
+
content: {
|
|
31387
|
+
"application/json": components["schemas"]["Error"];
|
|
31388
|
+
};
|
|
31389
|
+
};
|
|
31390
|
+
/** @description Payload too large, the request body exceeds the size limit. */
|
|
31391
|
+
413: {
|
|
31392
|
+
headers: {
|
|
31393
|
+
[name: string]: unknown;
|
|
31394
|
+
};
|
|
31395
|
+
content: {
|
|
31396
|
+
"application/json": components["schemas"]["Error"];
|
|
31397
|
+
};
|
|
31398
|
+
};
|
|
31399
|
+
/** @description Rate limited, slow down and retry after the hinted delay. */
|
|
31400
|
+
429: {
|
|
31401
|
+
headers: {
|
|
31402
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
31403
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
31404
|
+
"Retry-After": components["headers"]["Retry-After"];
|
|
31405
|
+
[name: string]: unknown;
|
|
31406
|
+
};
|
|
31407
|
+
content: {
|
|
31408
|
+
"application/json": components["schemas"]["Error"];
|
|
31409
|
+
};
|
|
31410
|
+
};
|
|
31411
|
+
};
|
|
31412
|
+
};
|
|
30937
31413
|
}
|