@curviate/sdk 0.25.0 → 0.26.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 +92 -0
- package/README.md +68 -0
- package/dist/index.d.ts +79 -53
- package/dist/index.js +19 -3
- package/package.json +1 -1
- package/src/generated/types.ts +68 -50
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,98 @@ Versioning: semantic. Minor for additive changes, patch for bug fixes; no stabil
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## [0.26.0] - 2026-09-06
|
|
11
|
+
|
|
12
|
+
Fixture regenerated against the deployed production document
|
|
13
|
+
(`https://api.curviate.com`, `server_git_sha bd795601...`, 125 paths).
|
|
14
|
+
**BREAKING at the type level** for a consumer that reads `row` off an error
|
|
15
|
+
or a safety warning as a `string`: it is now `string | null` on both. Three
|
|
16
|
+
response enums also widen, which reds an exhaustive `switch` with a `never`
|
|
17
|
+
default. Everything else in this release is additive.
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
- **`NOT_STORED` in the error taxonomy.** The `422` a read gets when
|
|
22
|
+
`mode=cache_only` (or `refill` on a resource that cannot be filled) finds
|
|
23
|
+
nothing in Curviate's store, so the API refuses rather than reaching
|
|
24
|
+
LinkedIn. It was missing from `ERROR_CODES`, so it decoded to `INTERNAL`:
|
|
25
|
+
a caller could not branch on it, and, the harmful half, `INTERNAL` is
|
|
26
|
+
retryable, so a `cache_only` miss was retried on a GET against an answer
|
|
27
|
+
that cannot change until the caller picks another mode. It is now decoded to
|
|
28
|
+
itself and is deliberately absent from the retryable set. Not the same as
|
|
29
|
+
`RESOURCE_NOT_FOUND`: the resource may exist and this API simply holds no
|
|
30
|
+
copy, so the fix is another mode, not another id. `cache_only` is the mode
|
|
31
|
+
that raises it on these reads, and `refill` or `auto` is the remedy.
|
|
32
|
+
|
|
33
|
+
**This reds `@curviate/cli`'s exit-code exhaustiveness guard, by design.**
|
|
34
|
+
That guard iterates the exported `ERROR_CODES` array rather than a copy of
|
|
35
|
+
it, which is the whole reason the array is exported, so a code added here
|
|
36
|
+
with no exit-code mapping is supposed to fail it. Map `NOT_STORED` there when
|
|
37
|
+
bumping the pin.
|
|
38
|
+
- **`messaging.getChat(chatId, params?)` takes the retrieval query.**
|
|
39
|
+
`GET /v1/{account_id}/chats/{chat_id}` declares `expand`, `mode` and
|
|
40
|
+
`max_age`; the method sent no query at all, so a chat read was the one
|
|
41
|
+
store-servable read with no retrieval ladder. `ChatGetQuery` is derived from
|
|
42
|
+
the generated `paths` types, like every other query type here.
|
|
43
|
+
`users.get()` and `messaging.listMessages()` already carried the pair and
|
|
44
|
+
are unchanged; the README now documents all three.
|
|
45
|
+
|
|
46
|
+
### Regenerated types
|
|
47
|
+
|
|
48
|
+
- **BREAKING - `row` is nullable on both `Error` and `SafetyWarning`.**
|
|
49
|
+
`Error.row` goes `string | undefined` to `string | null | undefined`, and
|
|
50
|
+
`SafetyWarning.row` - which is REQUIRED, so it is the one that will actually
|
|
51
|
+
break a build - goes `string` to `string | null`. `null` says the breach
|
|
52
|
+
names no row: an `activity_window` refusal on an action that spends no
|
|
53
|
+
budget of its own has an hour to answer for and no counter. Read
|
|
54
|
+
`hint.parameter` in that case; it names `posture`. A consumer that assigned
|
|
55
|
+
`.row` to a `string` or passed it somewhere non-null now has a type error,
|
|
56
|
+
and that error is correct - the runtime value was always going to be `null`
|
|
57
|
+
once the server started sending it. The SDK's own `CurviateError.budgetRow`
|
|
58
|
+
is UNCHANGED (`string | undefined`): `transport.ts` maps the wire field with
|
|
59
|
+
a `typeof === "string"` guard, so a `null` row arrives as an absent
|
|
60
|
+
`budgetRow`, which is what "no row to name" already meant on that surface.
|
|
61
|
+
- **BREAKING for an exhaustive `switch` - three response enums widen.** Each
|
|
62
|
+
gains a member, so a `switch` with a `never`-typed default arm stops
|
|
63
|
+
compiling. None of them removes a member, so a `switch` with a real default
|
|
64
|
+
keeps working:
|
|
65
|
+
- `GET /v1/{account_id}/safety-events` `items[].reason` gains
|
|
66
|
+
`activity_window` alongside `budget_exhausted` and `rate_limited`.
|
|
67
|
+
- `GET /v1/{account_id}/safety-events` `items[].budget_row` gains `"*"`, the
|
|
68
|
+
wildcard for an event that is not scoped to one row.
|
|
69
|
+
- `notices[].code` on the ten chat and message reads that accept
|
|
70
|
+
`expand=public_identifier` gains `EXPANSION_WITHHELD_ACTIVITY_WINDOW`
|
|
71
|
+
alongside `EXPANSION_LIMIT_REACHED`: the expansion was refused because the
|
|
72
|
+
account is outside its activity window, not because the page ran out of
|
|
73
|
+
lookup budget. Same consequence for the reader either way -
|
|
74
|
+
`public_identifier` is `null` for reasons that are not "no public profile"
|
|
75
|
+
- but a different fix, so it is a separate code. The `notices` key itself
|
|
76
|
+
is not new.
|
|
77
|
+
- **Additive - `interface_ceiling` and `effective_interface_ceiling` on every
|
|
78
|
+
budget row.** Optional, `number | null`. They appear on `quotas[]` from
|
|
79
|
+
`GET /v1/accounts/{account_id}` and on the policy rows from
|
|
80
|
+
`GET`/`PATCH /v1/{account_id}/safety-policy`. What a call through the
|
|
81
|
+
matching ELEVATED interface (`/sales-navigator/...`, `/recruiter/...`) is
|
|
82
|
+
held to on that row; `null` wherever the row and limit profile have no such
|
|
83
|
+
figure, which is every row on `basic` and `premium`. `ceiling`,
|
|
84
|
+
`effective_ceiling`, `band` and `over_default` all remain the STANDARD
|
|
85
|
+
figure, so a row can report `band: "over"` while an elevated call still
|
|
86
|
+
succeeds. Read `effective_interface_ceiling`, not `interface_ceiling`, for
|
|
87
|
+
the same reason `effective_ceiling` and not `ceiling` answers that on the
|
|
88
|
+
standard side. On the `PATCH` request body both are typed `unknown` and
|
|
89
|
+
documented READ-ONLY: sent back they are accepted and ignored, so a read can
|
|
90
|
+
round-trip unedited.
|
|
91
|
+
- **Additive - `activity_window` on the `PATCH /v1/{account_id}/safety-policy`
|
|
92
|
+
request body**, typed `unknown` and documented NOT ACCEPTED. Send the
|
|
93
|
+
settable subfields instead: top-level `timezone`, and per row
|
|
94
|
+
`activity_window_start`, `activity_window_end`, `activity_window_timezone`,
|
|
95
|
+
`activity_window_applies_to`.
|
|
96
|
+
- Description-only, no type change: `reset_at` on `Error` and `SafetyWarning`
|
|
97
|
+
now states that it is the window roll on a `ceiling` refusal and the next
|
|
98
|
+
window open on an `activity_window` one, and restates the two cases where no
|
|
99
|
+
clock frees the account (the `pending_invites` gauge, and InMail credits).
|
|
100
|
+
The chat-search `q` parameter documents that a 1-2 character term is slower.
|
|
101
|
+
|
|
10
102
|
## [0.25.0] - 2026-09-05
|
|
11
103
|
|
|
12
104
|
**BREAKING** for a consumer that pinned the old type declarations: `quotas[]`
|
package/README.md
CHANGED
|
@@ -122,6 +122,13 @@ try {
|
|
|
122
122
|
case "ACCOUNT_NOT_FOUND":
|
|
123
123
|
console.error("Account does not exist for this tenant.");
|
|
124
124
|
break;
|
|
125
|
+
case "NOT_STORED":
|
|
126
|
+
// A cache_only read the store could not answer, so nothing was fetched.
|
|
127
|
+
// The id may be perfectly good, so do not go looking for it again:
|
|
128
|
+
// re-read with mode "refill" or "auto", and on a narrowed listing drop
|
|
129
|
+
// the narrowing parameters. See "Retrieval modes" below.
|
|
130
|
+
console.warn("Nothing stored for that resource under this mode.");
|
|
131
|
+
break;
|
|
125
132
|
default:
|
|
126
133
|
if (err.retryLikelyToSucceed) {
|
|
127
134
|
// Safe to retry: server-side transient error
|
|
@@ -137,6 +144,67 @@ exported `ErrorCode` type is the complete set, so `tsc` tells you when a `switch
|
|
|
137
144
|
|
|
138
145
|
---
|
|
139
146
|
|
|
147
|
+
## Retrieval modes
|
|
148
|
+
|
|
149
|
+
Some reads can be answered from Curviate's own store instead of a live LinkedIn
|
|
150
|
+
fetch. Those reads take the same two query parameters, `mode` and `max_age`:
|
|
151
|
+
|
|
152
|
+
- `users.get()`, including `users.get("me")` (`GET /v1/{account_id}/users/{user_id}`)
|
|
153
|
+
- `messaging.getChat()` (`GET /v1/{account_id}/chats/{chat_id}`)
|
|
154
|
+
- `messaging.listMessages()` (`GET /v1/{account_id}/chats/{chat_id}/messages`)
|
|
155
|
+
|
|
156
|
+
No other read accepts them, so do not pass them elsewhere. These two keys are
|
|
157
|
+
refused rather than ignored: sending either to a read that does not declare it
|
|
158
|
+
is a `400`, and so is sending either one twice. A read that accepted
|
|
159
|
+
`mode=cache_only` and then called LinkedIn anyway would break the one guarantee
|
|
160
|
+
that parameter makes, so neither case is resolved quietly.
|
|
161
|
+
|
|
162
|
+
| `mode` | What the read does |
|
|
163
|
+
| --- | --- |
|
|
164
|
+
| `auto` (default) | serves a stored copy while it is inside the resource's freshness threshold, otherwise fetches |
|
|
165
|
+
| `live` | always fetches |
|
|
166
|
+
| `refill` | serves a stored copy at any age, and fetches once when this read has none |
|
|
167
|
+
| `cache_only` | never fetches, and throws `NOT_STORED` when the store cannot answer |
|
|
168
|
+
|
|
169
|
+
`max_age` is the mechanism the first three are presets over: the oldest stored
|
|
170
|
+
copy, in seconds, the read will accept. It overrides them in both directions,
|
|
171
|
+
and `max_age: 0` is the same as `mode: "live"`. It cannot be combined with
|
|
172
|
+
`cache_only`, whose guarantee is not a freshness threshold; that pair is
|
|
173
|
+
rejected with `INVALID_REQUEST` rather than one of the two being quietly
|
|
174
|
+
dropped.
|
|
175
|
+
|
|
176
|
+
```ts
|
|
177
|
+
// Serve whatever is stored, at any age; reach LinkedIn only if nothing is.
|
|
178
|
+
const chat = await acc.messaging.getChat("chat_1", { mode: "refill" });
|
|
179
|
+
|
|
180
|
+
// Never reach LinkedIn. Throws NOT_STORED when the store holds nothing.
|
|
181
|
+
const profile = await acc.users.get("me", { mode: "cache_only" });
|
|
182
|
+
|
|
183
|
+
// Accept a stored copy up to five minutes old, fetch otherwise.
|
|
184
|
+
const page = await acc.messaging.listMessages("chat_1", { max_age: 300 });
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Every one of these responses carries fields that say what you are holding:
|
|
188
|
+
|
|
189
|
+
- `source` is `"store"` or `"live"`, and `observed_at` is when the data was seen
|
|
190
|
+
on LinkedIn. A stored answer can carry less than a live one, because some
|
|
191
|
+
fields are dropped before anything is written, so `source: "store"` is how you
|
|
192
|
+
know to ask again with `mode: "live"` when a field you need is missing.
|
|
193
|
+
- `withdrawn` is always present, never inferred from a missing field. `true`
|
|
194
|
+
means LinkedIn has said the resource is gone, such as a removed profile, and
|
|
195
|
+
the answer you are holding is the copy Curviate still has: do not act on it.
|
|
196
|
+
`withdrawn_at` rides along when it is `true`. This is the field to branch on
|
|
197
|
+
before messaging or acting on anything served from the store, and `refill`,
|
|
198
|
+
which serves a copy at any age, is the mode most likely to hand you one.
|
|
199
|
+
|
|
200
|
+
`NOT_STORED` under `cache_only` does not always mean the resource is unknown.
|
|
201
|
+
On `listMessages` it also fires when the request narrows the page in a way the
|
|
202
|
+
stored copy cannot reproduce, so a fully stored chat can refuse a narrowed
|
|
203
|
+
`cache_only` read. Re-read without the narrowing parameters, or with a mode that
|
|
204
|
+
may fetch.
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
140
208
|
## Cursor pagination
|
|
141
209
|
|
|
142
210
|
Resources that return lists support cursor pagination. `curviate.paginate()` is an async iterator that follows the `cursor` field automatically, so you pull items one at a time without managing cursors:
|
package/dist/index.d.ts
CHANGED
|
@@ -2689,7 +2689,7 @@ interface paths {
|
|
|
2689
2689
|
head?: never;
|
|
2690
2690
|
/**
|
|
2691
2691
|
* Update an account's safety policy
|
|
2692
|
-
* @description The single safety-policy write. Send only the fields you are changing: everything you omit is left byte-identical, and sending `null` for a field clears your override and restores the Curviate default. Any limit may be set to any value: Curviate does not clamp, cap or refuse a change on the grounds that the number is unsafe. A value above the Curviate default is reported back in the response, and on every later read, with the default and its source class attached; there is no way to acknowledge it away, and setting the value back to the default removes it. A value that is not a value, such as a negative ceiling or an unknown row name, is a 400. Every field whose value CHANGES is appended to the account's action ledger with the previous value, the new value, the Curviate default, the actor and the time; a field you send whose value already equals its current effective value is not ledgered and is not stored as an override, so reading the policy and sending the document back changes nothing.
|
|
2692
|
+
* @description The single safety-policy write. Send only the fields you are changing: everything you omit is left byte-identical, and sending `null` for a field clears your override and restores the Curviate default. Any limit may be set to any value: Curviate does not clamp, cap or refuse a change on the grounds that the number is unsafe. A value above the Curviate default is reported back in the response, and on every later read, with the default and its source class attached; there is no way to acknowledge it away, and setting the value back to the default removes it. A value that is not a value, such as a negative ceiling or an unknown row name, is a 400. Every field whose value CHANGES is appended to the account's action ledger with the previous value, the new value, the Curviate default, the actor and the time; a field you send whose value already equals its current effective value is not ledgered and is not stored as an override, so reading the policy and sending the document back changes nothing. Six fields on the read are derived rather than configured: `effective_ceiling`, `interface_ceiling`, `effective_interface_ceiling`, `posture_source`, `over_default` and each row's `warm_up_state`. Send them and they are accepted and ignored, never stored and never ledgered, so the document you read can go straight back. To pin a row's ramp, set `warm_up_factor`. `activity_window` is not accepted: send its settable subfields instead, the top-level `timezone` for the zone, and per row `activity_window_start`, `activity_window_end`, `activity_window_timezone` and `activity_window_applies_to`. The 400 this produces names those subfields, not just the refused object. And read `changes nothing` as `changes no limit`: the `posture` fields are OVERRIDES at every scope, so writing back a posture a scope merely inherits PINS it there and appends one ledger entry per pinned scope. That is what stops a later account- or tenant-wide change from moving it. A pin already in place is a no-op. An agent-authenticated write is accepted on exactly the same footing as an operator's. There is no bulk import, file upload or policy template: configuring many rows or many accounts is a loop over this operation. One field is not account-scoped: `tenant_default_posture` sets the default for EVERY account in the tenant, not just the one in the path, which is what makes it a one-call change for a whole workspace of personas. It is reported back at the top of every policy response, so a change to it is visible even on an account that overrides it. One other field is not row-scoped: `limit_profile` selects which of the four Curviate default sets this account's rows resolve from, so it moves the default under every row at once while leaving every value you have configured explicitly exactly as you set it. It is the platform product active on the account, not your Curviate seat entitlement, and the two can disagree: a lapsed subscription leaves the seat untouched. Curviate detects it when the account connects and re-detects it on every reconnect; setting it here is an operator override of that result, and it holds until the next connect. When the seat and the detected product disagree, the detected product wins the numbers and the read reports the disagreement as `seat_tier_mismatch`.
|
|
2693
2693
|
*/
|
|
2694
2694
|
patch: operations["patchV1AccountIdSafetyPolicy"];
|
|
2695
2695
|
trace?: never;
|
|
@@ -2747,9 +2747,9 @@ interface components {
|
|
|
2747
2747
|
* @enum {string}
|
|
2748
2748
|
*/
|
|
2749
2749
|
required_tier?: "core" | "sales_nav" | "recruiter";
|
|
2750
|
-
/** @description Present on a PLATFORM_RATE_LIMIT raised because one account-safety budget row is paused: LinkedIn refused a recent call on that row, so this one was refused locally without reaching LinkedIn. Names the paused row (for example profile_views, connection_requests_no_note). The pause is scoped to this row on this account; every other row keeps working. Absent on every other rate limit. Also present on BUDGET_EXHAUSTED, where it names the row that hit its CEILING rather than one LinkedIn paused: read the code to tell the two apart, because the recovery differs. */
|
|
2751
|
-
row?: string;
|
|
2752
|
-
/** @description Present on BUDGET_EXHAUSTED:
|
|
2750
|
+
/** @description Present on a PLATFORM_RATE_LIMIT raised because one account-safety budget row is paused: LinkedIn refused a recent call on that row, so this one was refused locally without reaching LinkedIn. Names the paused row (for example profile_views, connection_requests_no_note). The pause is scoped to this row on this account; every other row keeps working. Absent on every other rate limit. Also present on BUDGET_EXHAUSTED, where it names the row that hit its CEILING rather than one LinkedIn paused: read the code to tell the two apart, because the recovery differs. Null on a BUDGET_EXHAUSTED whose reason is activity_window and whose action spends no budget of its own, because there is no row to name; hint.parameter still names the setting to change. Never null on a rate limit. */
|
|
2751
|
+
row?: string | null;
|
|
2752
|
+
/** @description Present on BUDGET_EXHAUSTED: the instant the refusal lifts, as an absolute instant rather than a duration, so it stays true however long you hold it. It is the window roll on a ceiling refusal and the next window open on an activity-window one. It is null in the two cases where no clock frees the account: the pending_invites gauge, whose backlog falls when invitations are accepted or withdrawn, and an InMail credit exhaustion (row inmail), which LinkedIn regrants on a schedule this product cannot read. */
|
|
2753
2753
|
reset_at?: string | null;
|
|
2754
2754
|
/** @description Present on BUDGET_EXHAUSTED: the exact setting to change, as a field rather than as prose. parameter is addressable on PATCH /v1/{account_id}/safety-policy, so an agent can decide between waiting until reset_at, escalating to a human, and reconfiguring, without parsing the message. */
|
|
2755
2755
|
hint?: {
|
|
@@ -2812,9 +2812,9 @@ interface components {
|
|
|
2812
2812
|
* }
|
|
2813
2813
|
*/
|
|
2814
2814
|
SafetyWarning: {
|
|
2815
|
-
/** @description The budget row that breached, for example profile_views or pending_invites. */
|
|
2816
|
-
row: string;
|
|
2817
|
-
/** @description
|
|
2815
|
+
/** @description The budget row that breached, for example profile_views or pending_invites. Null when the breach is not about a row: an activity_window warning on an action that spends no budget of its own (editing a message, dismissing a notification, a Recruiter or Sales Navigator admin action) is still governed by the hours the account works in. Read hint.parameter for what to change; whenever this is null it names posture, because the activity window edges are set per action type and this action has none, so the levers that reach it are the account timezone and posture. */
|
|
2816
|
+
row: string | null;
|
|
2817
|
+
/** @description The instant the refusal lifts: the window roll on a ceiling refusal, the next window open on an activity-window one. Null in the two cases no clock frees, the pending_invites gauge and InMail credits (row inmail). */
|
|
2818
2818
|
reset_at: string | null;
|
|
2819
2819
|
hint: {
|
|
2820
2820
|
/** @description The settable parameter on PATCH /v1/{account_id}/safety-policy. */
|
|
@@ -6806,13 +6806,13 @@ interface operations {
|
|
|
6806
6806
|
}[];
|
|
6807
6807
|
/** @description Opaque cursor for the next page, or null at end-of-list. */
|
|
6808
6808
|
cursor: string | null;
|
|
6809
|
-
/** @description Present only when expand=public_identifier was asked for and this page
|
|
6809
|
+
/** @description Present only when expand=public_identifier was asked for and some people on this page went unresolved for a reason the payload cannot show: more of them needed a profile lookup than one request performs, or the account is outside its activity window at this hour and enforces it. Absent whenever there is nothing to report, so a response that resolved everyone carries no such key. Branch on each entry's code, never on its message. */
|
|
6810
6810
|
notices?: {
|
|
6811
6811
|
/**
|
|
6812
|
-
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone.
|
|
6812
|
+
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone. EXPANSION_WITHHELD_ACTIVITY_WINDOW: the profile lookups this page needed were refused because the account is outside its activity window at this hour and enforces it, so those people carry public_identifier null and their null does not mean they have no public profile either. Ask again inside the window, or widen the window on this account's safety policy.
|
|
6813
6813
|
* @enum {string}
|
|
6814
6814
|
*/
|
|
6815
|
-
code: "EXPANSION_LIMIT_REACHED";
|
|
6815
|
+
code: "EXPANSION_LIMIT_REACHED" | "EXPANSION_WITHHELD_ACTIVITY_WINDOW";
|
|
6816
6816
|
/** @description One sentence explaining the condition and how to resolve it. */
|
|
6817
6817
|
message: string;
|
|
6818
6818
|
/** @description The request field the notice is about, here expand. */
|
|
@@ -6989,13 +6989,13 @@ interface operations {
|
|
|
6989
6989
|
/** @description Message body (content pass-through, never stored). */
|
|
6990
6990
|
text?: string | null;
|
|
6991
6991
|
} | null;
|
|
6992
|
-
/** @description Present only when expand=public_identifier was asked for and this page
|
|
6992
|
+
/** @description Present only when expand=public_identifier was asked for and some people on this page went unresolved for a reason the payload cannot show: more of them needed a profile lookup than one request performs, or the account is outside its activity window at this hour and enforces it. Absent whenever there is nothing to report, so a response that resolved everyone carries no such key. Branch on each entry's code, never on its message. */
|
|
6993
6993
|
notices?: {
|
|
6994
6994
|
/**
|
|
6995
|
-
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone.
|
|
6995
|
+
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone. EXPANSION_WITHHELD_ACTIVITY_WINDOW: the profile lookups this page needed were refused because the account is outside its activity window at this hour and enforces it, so those people carry public_identifier null and their null does not mean they have no public profile either. Ask again inside the window, or widen the window on this account's safety policy.
|
|
6996
6996
|
* @enum {string}
|
|
6997
6997
|
*/
|
|
6998
|
-
code: "EXPANSION_LIMIT_REACHED";
|
|
6998
|
+
code: "EXPANSION_LIMIT_REACHED" | "EXPANSION_WITHHELD_ACTIVITY_WINDOW";
|
|
6999
6999
|
/** @description One sentence explaining the condition and how to resolve it. */
|
|
7000
7000
|
message: string;
|
|
7001
7001
|
/** @description The request field the notice is about, here expand. */
|
|
@@ -7165,13 +7165,13 @@ interface operations {
|
|
|
7165
7165
|
}[];
|
|
7166
7166
|
/** @description Opaque cursor for the next page, or null at end-of-list. */
|
|
7167
7167
|
cursor: string | null;
|
|
7168
|
-
/** @description Present only when expand=public_identifier was asked for and this page
|
|
7168
|
+
/** @description Present only when expand=public_identifier was asked for and some people on this page went unresolved for a reason the payload cannot show: more of them needed a profile lookup than one request performs, or the account is outside its activity window at this hour and enforces it. Absent whenever there is nothing to report, so a response that resolved everyone carries no such key. Branch on each entry's code, never on its message. */
|
|
7169
7169
|
notices?: {
|
|
7170
7170
|
/**
|
|
7171
|
-
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone.
|
|
7171
|
+
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone. EXPANSION_WITHHELD_ACTIVITY_WINDOW: the profile lookups this page needed were refused because the account is outside its activity window at this hour and enforces it, so those people carry public_identifier null and their null does not mean they have no public profile either. Ask again inside the window, or widen the window on this account's safety policy.
|
|
7172
7172
|
* @enum {string}
|
|
7173
7173
|
*/
|
|
7174
|
-
code: "EXPANSION_LIMIT_REACHED";
|
|
7174
|
+
code: "EXPANSION_LIMIT_REACHED" | "EXPANSION_WITHHELD_ACTIVITY_WINDOW";
|
|
7175
7175
|
/** @description One sentence explaining the condition and how to resolve it. */
|
|
7176
7176
|
message: string;
|
|
7177
7177
|
/** @description The request field the notice is about, here expand. */
|
|
@@ -7508,13 +7508,13 @@ interface operations {
|
|
|
7508
7508
|
sent_at: number;
|
|
7509
7509
|
/** @description Message body (content pass-through, never stored). */
|
|
7510
7510
|
text?: string | null;
|
|
7511
|
-
/** @description Present only when expand=public_identifier was asked for and this page
|
|
7511
|
+
/** @description Present only when expand=public_identifier was asked for and some people on this page went unresolved for a reason the payload cannot show: more of them needed a profile lookup than one request performs, or the account is outside its activity window at this hour and enforces it. Absent whenever there is nothing to report, so a response that resolved everyone carries no such key. Branch on each entry's code, never on its message. */
|
|
7512
7512
|
notices?: {
|
|
7513
7513
|
/**
|
|
7514
|
-
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone.
|
|
7514
|
+
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone. EXPANSION_WITHHELD_ACTIVITY_WINDOW: the profile lookups this page needed were refused because the account is outside its activity window at this hour and enforces it, so those people carry public_identifier null and their null does not mean they have no public profile either. Ask again inside the window, or widen the window on this account's safety policy.
|
|
7515
7515
|
* @enum {string}
|
|
7516
7516
|
*/
|
|
7517
|
-
code: "EXPANSION_LIMIT_REACHED";
|
|
7517
|
+
code: "EXPANSION_LIMIT_REACHED" | "EXPANSION_WITHHELD_ACTIVITY_WINDOW";
|
|
7518
7518
|
/** @description One sentence explaining the condition and how to resolve it. */
|
|
7519
7519
|
message: string;
|
|
7520
7520
|
/** @description The request field the notice is about, here expand. */
|
|
@@ -7714,13 +7714,13 @@ interface operations {
|
|
|
7714
7714
|
* @enum {boolean}
|
|
7715
7715
|
*/
|
|
7716
7716
|
filter_effective?: true;
|
|
7717
|
-
/** @description Present only when expand=public_identifier was asked for and this page
|
|
7717
|
+
/** @description Present only when expand=public_identifier was asked for and some people on this page went unresolved for a reason the payload cannot show: more of them needed a profile lookup than one request performs, or the account is outside its activity window at this hour and enforces it. Absent whenever there is nothing to report, so a response that resolved everyone carries no such key. Branch on each entry's code, never on its message. */
|
|
7718
7718
|
notices?: {
|
|
7719
7719
|
/**
|
|
7720
|
-
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone.
|
|
7720
|
+
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone. EXPANSION_WITHHELD_ACTIVITY_WINDOW: the profile lookups this page needed were refused because the account is outside its activity window at this hour and enforces it, so those people carry public_identifier null and their null does not mean they have no public profile either. Ask again inside the window, or widen the window on this account's safety policy.
|
|
7721
7721
|
* @enum {string}
|
|
7722
7722
|
*/
|
|
7723
|
-
code: "EXPANSION_LIMIT_REACHED";
|
|
7723
|
+
code: "EXPANSION_LIMIT_REACHED" | "EXPANSION_WITHHELD_ACTIVITY_WINDOW";
|
|
7724
7724
|
/** @description One sentence explaining the condition and how to resolve it. */
|
|
7725
7725
|
message: string;
|
|
7726
7726
|
/** @description The request field the notice is about, here expand. */
|
|
@@ -10361,13 +10361,13 @@ interface operations {
|
|
|
10361
10361
|
}[];
|
|
10362
10362
|
/** @description Next-page cursor; follow until items is empty (presence is not a has-more guarantee). */
|
|
10363
10363
|
cursor?: string | null;
|
|
10364
|
-
/** @description Present only when expand=public_identifier was asked for and this page
|
|
10364
|
+
/** @description Present only when expand=public_identifier was asked for and some people on this page went unresolved for a reason the payload cannot show: more of them needed a profile lookup than one request performs, or the account is outside its activity window at this hour and enforces it. Absent whenever there is nothing to report, so a response that resolved everyone carries no such key. Branch on each entry's code, never on its message. */
|
|
10365
10365
|
notices?: {
|
|
10366
10366
|
/**
|
|
10367
|
-
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone.
|
|
10367
|
+
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone. EXPANSION_WITHHELD_ACTIVITY_WINDOW: the profile lookups this page needed were refused because the account is outside its activity window at this hour and enforces it, so those people carry public_identifier null and their null does not mean they have no public profile either. Ask again inside the window, or widen the window on this account's safety policy.
|
|
10368
10368
|
* @enum {string}
|
|
10369
10369
|
*/
|
|
10370
|
-
code: "EXPANSION_LIMIT_REACHED";
|
|
10370
|
+
code: "EXPANSION_LIMIT_REACHED" | "EXPANSION_WITHHELD_ACTIVITY_WINDOW";
|
|
10371
10371
|
/** @description One sentence explaining the condition and how to resolve it. */
|
|
10372
10372
|
message: string;
|
|
10373
10373
|
/** @description The request field the notice is about, here expand. */
|
|
@@ -10783,13 +10783,13 @@ interface operations {
|
|
|
10783
10783
|
/** @description The vanity slug from the profile URL, for example jane-smith. Present only when the request asks for it with expand=public_identifier, and then always present, carrying the slug or null when the platform surfaces none for this person. */
|
|
10784
10784
|
public_identifier?: string | null;
|
|
10785
10785
|
};
|
|
10786
|
-
/** @description Present only when expand=public_identifier was asked for and this page
|
|
10786
|
+
/** @description Present only when expand=public_identifier was asked for and some people on this page went unresolved for a reason the payload cannot show: more of them needed a profile lookup than one request performs, or the account is outside its activity window at this hour and enforces it. Absent whenever there is nothing to report, so a response that resolved everyone carries no such key. Branch on each entry's code, never on its message. */
|
|
10787
10787
|
notices?: {
|
|
10788
10788
|
/**
|
|
10789
|
-
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone.
|
|
10789
|
+
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone. EXPANSION_WITHHELD_ACTIVITY_WINDOW: the profile lookups this page needed were refused because the account is outside its activity window at this hour and enforces it, so those people carry public_identifier null and their null does not mean they have no public profile either. Ask again inside the window, or widen the window on this account's safety policy.
|
|
10790
10790
|
* @enum {string}
|
|
10791
10791
|
*/
|
|
10792
|
-
code: "EXPANSION_LIMIT_REACHED";
|
|
10792
|
+
code: "EXPANSION_LIMIT_REACHED" | "EXPANSION_WITHHELD_ACTIVITY_WINDOW";
|
|
10793
10793
|
/** @description One sentence explaining the condition and how to resolve it. */
|
|
10794
10794
|
message: string;
|
|
10795
10795
|
/** @description The request field the notice is about, here expand. */
|
|
@@ -11143,13 +11143,13 @@ interface operations {
|
|
|
11143
11143
|
}[];
|
|
11144
11144
|
/** @description Next-page cursor; follow until items is empty. */
|
|
11145
11145
|
cursor?: string | null;
|
|
11146
|
-
/** @description Present only when expand=public_identifier was asked for and this page
|
|
11146
|
+
/** @description Present only when expand=public_identifier was asked for and some people on this page went unresolved for a reason the payload cannot show: more of them needed a profile lookup than one request performs, or the account is outside its activity window at this hour and enforces it. Absent whenever there is nothing to report, so a response that resolved everyone carries no such key. Branch on each entry's code, never on its message. */
|
|
11147
11147
|
notices?: {
|
|
11148
11148
|
/**
|
|
11149
|
-
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone.
|
|
11149
|
+
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone. EXPANSION_WITHHELD_ACTIVITY_WINDOW: the profile lookups this page needed were refused because the account is outside its activity window at this hour and enforces it, so those people carry public_identifier null and their null does not mean they have no public profile either. Ask again inside the window, or widen the window on this account's safety policy.
|
|
11150
11150
|
* @enum {string}
|
|
11151
11151
|
*/
|
|
11152
|
-
code: "EXPANSION_LIMIT_REACHED";
|
|
11152
|
+
code: "EXPANSION_LIMIT_REACHED" | "EXPANSION_WITHHELD_ACTIVITY_WINDOW";
|
|
11153
11153
|
/** @description One sentence explaining the condition and how to resolve it. */
|
|
11154
11154
|
message: string;
|
|
11155
11155
|
/** @description The request field the notice is about, here expand. */
|
|
@@ -11519,13 +11519,13 @@ interface operations {
|
|
|
11519
11519
|
[key: string]: unknown;
|
|
11520
11520
|
};
|
|
11521
11521
|
};
|
|
11522
|
-
/** @description Present only when expand=public_identifier was asked for and this page
|
|
11522
|
+
/** @description Present only when expand=public_identifier was asked for and some people on this page went unresolved for a reason the payload cannot show: more of them needed a profile lookup than one request performs, or the account is outside its activity window at this hour and enforces it. Absent whenever there is nothing to report, so a response that resolved everyone carries no such key. Branch on each entry's code, never on its message. */
|
|
11523
11523
|
notices?: {
|
|
11524
11524
|
/**
|
|
11525
|
-
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone.
|
|
11525
|
+
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone. EXPANSION_WITHHELD_ACTIVITY_WINDOW: the profile lookups this page needed were refused because the account is outside its activity window at this hour and enforces it, so those people carry public_identifier null and their null does not mean they have no public profile either. Ask again inside the window, or widen the window on this account's safety policy.
|
|
11526
11526
|
* @enum {string}
|
|
11527
11527
|
*/
|
|
11528
|
-
code: "EXPANSION_LIMIT_REACHED";
|
|
11528
|
+
code: "EXPANSION_LIMIT_REACHED" | "EXPANSION_WITHHELD_ACTIVITY_WINDOW";
|
|
11529
11529
|
/** @description One sentence explaining the condition and how to resolve it. */
|
|
11530
11530
|
message: string;
|
|
11531
11531
|
/** @description The request field the notice is about, here expand. */
|
|
@@ -12096,7 +12096,7 @@ interface operations {
|
|
|
12096
12096
|
getV1AccountIdChatsSearch: {
|
|
12097
12097
|
parameters: {
|
|
12098
12098
|
query: {
|
|
12099
|
-
/** @description The search term: matches both participant names and message content (e.g. 'sophie keller'). */
|
|
12099
|
+
/** @description The search term: matches both participant names and message content (e.g. 'sophie keller'). Terms of 3 or more characters are fast; a 1-2 character term is slower. */
|
|
12100
12100
|
query: string;
|
|
12101
12101
|
/** @description Maximum chats to return per page (1-100, default 20). The server may walk a few internal pages to fill one page. */
|
|
12102
12102
|
limit?: number;
|
|
@@ -12725,13 +12725,13 @@ interface operations {
|
|
|
12725
12725
|
}[];
|
|
12726
12726
|
/** @description Next-page cursor. Follow until items is empty. */
|
|
12727
12727
|
cursor?: string | null;
|
|
12728
|
-
/** @description Present only when expand=public_identifier was asked for and this page
|
|
12728
|
+
/** @description Present only when expand=public_identifier was asked for and some people on this page went unresolved for a reason the payload cannot show: more of them needed a profile lookup than one request performs, or the account is outside its activity window at this hour and enforces it. Absent whenever there is nothing to report, so a response that resolved everyone carries no such key. Branch on each entry's code, never on its message. */
|
|
12729
12729
|
notices?: {
|
|
12730
12730
|
/**
|
|
12731
|
-
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone.
|
|
12731
|
+
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone. EXPANSION_WITHHELD_ACTIVITY_WINDOW: the profile lookups this page needed were refused because the account is outside its activity window at this hour and enforces it, so those people carry public_identifier null and their null does not mean they have no public profile either. Ask again inside the window, or widen the window on this account's safety policy.
|
|
12732
12732
|
* @enum {string}
|
|
12733
12733
|
*/
|
|
12734
|
-
code: "EXPANSION_LIMIT_REACHED";
|
|
12734
|
+
code: "EXPANSION_LIMIT_REACHED" | "EXPANSION_WITHHELD_ACTIVITY_WINDOW";
|
|
12735
12735
|
/** @description One sentence explaining the condition and how to resolve it. */
|
|
12736
12736
|
message: string;
|
|
12737
12737
|
/** @description The request field the notice is about, here expand. */
|
|
@@ -27956,6 +27956,10 @@ interface operations {
|
|
|
27956
27956
|
ceiling: number | null;
|
|
27957
27957
|
/** @description What this row is ACTUALLY held to right now: `ceiling` with the account's warm-up ramp applied. Compare `used` against THIS one, and `band` is computed against it too. While an account is new, thinly connected, dormant or recovering from a restriction the two differ, and on a five-day-old account they differ by a factor of about seven. Equal to `ceiling` once the ramp is over, and `null` wherever `ceiling` is null. The account's ramp, its factor and the triggers behind it are on GET /v1/{account_id}/safety-policy as `warm_up`. */
|
|
27958
27958
|
effective_ceiling?: number | null;
|
|
27959
|
+
/** @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. */
|
|
27960
|
+
interface_ceiling?: number | null;
|
|
27961
|
+
/** @description `interface_ceiling` with the account's warm-up ramp applied, and null wherever `interface_ceiling` is null. Read THIS to know where an elevated-interface call stops, for the same reason `effective_ceiling` rather than `ceiling` answers that for a standard one. */
|
|
27962
|
+
effective_interface_ceiling?: number | null;
|
|
27959
27963
|
/**
|
|
27960
27964
|
* @description Where `used` sits against this row's own bands. `green` routine, `amber` at or past the routine band, `hard` at or past the warn-louder band, `over` at or past the ceiling. `over` is what `posture` acts on: `warn` reports it and lets the action through, `enforce` refuses. A row with no figures reports `green` at every value, because there is nothing to be past.
|
|
27961
27965
|
* @enum {string}
|
|
@@ -30427,7 +30431,7 @@ interface operations {
|
|
|
30427
30431
|
/** @description The account this policy governs. */
|
|
30428
30432
|
account_id?: string;
|
|
30429
30433
|
/**
|
|
30430
|
-
* @description Which set of Curviate defaults every row below is resolved from. Each profile inherits the one before it and raises a few rows: `premium` adds a daily invitation band and open-profile InMail, `sales_navigator` raises profile views and search, `recruiter` raises profile views again. This is the platform product active on the account, not the Curviate seat entitlement. The two can disagree, and this is the one that governs the numbers. The elevated Sales Navigator and Recruiter figures apply only to calls made through the matching interface, the `/v1/{account_id}/sales-navigator/...` and `/v1/{account_id}/recruiter/...` operations
|
|
30434
|
+
* @description Which set of Curviate defaults every row below is resolved from. Each profile inherits the one before it and raises a few rows: `premium` adds a daily invitation band and open-profile InMail, `sales_navigator` raises profile views and search, `recruiter` raises profile views again. This is the platform product active on the account, not the Curviate seat entitlement. The two can disagree, and this is the one that governs the numbers. The elevated Sales Navigator and Recruiter figures apply only to calls made through the matching interface, the `/v1/{account_id}/sales-navigator/...` and `/v1/{account_id}/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`.
|
|
30431
30435
|
* @enum {string}
|
|
30432
30436
|
*/
|
|
30433
30437
|
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
@@ -30510,7 +30514,7 @@ interface operations {
|
|
|
30510
30514
|
/** @description IANA zone name the activity window is read in. Null disables the window entirely. */
|
|
30511
30515
|
activity_window_timezone?: string | null;
|
|
30512
30516
|
/**
|
|
30513
|
-
* @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.
|
|
30517
|
+
* @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.
|
|
30514
30518
|
* @enum {string}
|
|
30515
30519
|
*/
|
|
30516
30520
|
activity_window_applies_to?: "writes" | "all";
|
|
@@ -30534,7 +30538,11 @@ interface operations {
|
|
|
30534
30538
|
source_class?: "substrate" | "linkedin_official" | "practitioner" | "inferred" | "unseeded";
|
|
30535
30539
|
/** @description What this row is ACTUALLY held to right now: `ceiling` with the account's warm-up ramp applied. Read this one, not `ceiling`, to know where the next call will be stopped. On an account in warm-up the two differ, and on a five-day-old account they differ by a factor of about seven. Null when the row has no ceiling to ramp. `warm_up_state` and `warm_up_factor` beside it are the values ACTIVE on this row, not the seeded ones. */
|
|
30536
30540
|
effective_ceiling?: number | null;
|
|
30537
|
-
/** @description
|
|
30541
|
+
/** @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. */
|
|
30542
|
+
interface_ceiling?: number | null;
|
|
30543
|
+
/** @description `interface_ceiling` with the account's warm-up ramp applied, and null wherever `interface_ceiling` is null. Read THIS to know where an elevated-interface call stops, for the same reason `effective_ceiling` rather than `ceiling` answers that for a standard one. */
|
|
30544
|
+
effective_interface_ceiling?: number | null;
|
|
30545
|
+
/** @description Empty when nothing on this row is above default. Computed against the STANDARD-interface default, like `band` and for the same reason. */
|
|
30538
30546
|
over_default?: {
|
|
30539
30547
|
/**
|
|
30540
30548
|
* @description The field whose configured value is above default.
|
|
@@ -30593,7 +30601,7 @@ interface operations {
|
|
|
30593
30601
|
content: {
|
|
30594
30602
|
"application/json": {
|
|
30595
30603
|
/**
|
|
30596
|
-
* @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.
|
|
30604
|
+
* @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 and re-detects it on every reconnect; setting it here is an operator override of that result and holds until the next connect. Set it back to `basic` to undo. 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 `/v1/{account_id}/sales-navigator/...` and `/v1/{account_id}/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`.
|
|
30597
30605
|
* @enum {string}
|
|
30598
30606
|
*/
|
|
30599
30607
|
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
@@ -30643,7 +30651,7 @@ interface operations {
|
|
|
30643
30651
|
/** @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. */
|
|
30644
30652
|
activity_window_timezone?: string | null;
|
|
30645
30653
|
/**
|
|
30646
|
-
* @description What the activity window governs. `writes` (the default) covers live writes to LinkedIn; `all` widens it to live reads
|
|
30654
|
+
* @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.
|
|
30647
30655
|
* @enum {string|null}
|
|
30648
30656
|
*/
|
|
30649
30657
|
activity_window_applies_to?: "writes" | "all" | null;
|
|
@@ -30667,6 +30675,10 @@ interface operations {
|
|
|
30667
30675
|
source_class?: "substrate" | "linkedin_official" | "practitioner" | "inferred" | "unseeded" | null;
|
|
30668
30676
|
/** @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. */
|
|
30669
30677
|
effective_ceiling?: unknown;
|
|
30678
|
+
/** @description READ-ONLY. What a call through the matching elevated interface (`/v1/{account_id}/sales-navigator/...`, `/v1/{account_id}/recruiter/...`) 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. */
|
|
30679
|
+
interface_ceiling?: unknown;
|
|
30680
|
+
/** @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. */
|
|
30681
|
+
effective_interface_ceiling?: unknown;
|
|
30670
30682
|
/** @description READ-ONLY. Which scope supplied this row's effective `posture`. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
|
|
30671
30683
|
posture_source?: unknown;
|
|
30672
30684
|
/** @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. */
|
|
@@ -30682,6 +30694,8 @@ interface operations {
|
|
|
30682
30694
|
posture_source?: unknown;
|
|
30683
30695
|
/** @description READ-ONLY. The account's DERIVED warm-up ramp, recomputed on every read. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
|
|
30684
30696
|
warm_up?: unknown;
|
|
30697
|
+
/** @description NOT ACCEPTED. Send its settable subfields instead: the top-level `timezone`, and per row `activity_window_start`, `activity_window_end`, `activity_window_timezone`, `activity_window_applies_to`. */
|
|
30698
|
+
activity_window?: unknown;
|
|
30685
30699
|
};
|
|
30686
30700
|
};
|
|
30687
30701
|
};
|
|
@@ -30703,7 +30717,7 @@ interface operations {
|
|
|
30703
30717
|
/** @description The account this policy governs. */
|
|
30704
30718
|
account_id?: string;
|
|
30705
30719
|
/**
|
|
30706
|
-
* @description Which set of Curviate defaults every row below is resolved from. Each profile inherits the one before it and raises a few rows: `premium` adds a daily invitation band and open-profile InMail, `sales_navigator` raises profile views and search, `recruiter` raises profile views again. This is the platform product active on the account, not the Curviate seat entitlement. The two can disagree, and this is the one that governs the numbers. The elevated Sales Navigator and Recruiter figures apply only to calls made through the matching interface, the `/v1/{account_id}/sales-navigator/...` and `/v1/{account_id}/recruiter/...` operations
|
|
30720
|
+
* @description Which set of Curviate defaults every row below is resolved from. Each profile inherits the one before it and raises a few rows: `premium` adds a daily invitation band and open-profile InMail, `sales_navigator` raises profile views and search, `recruiter` raises profile views again. This is the platform product active on the account, not the Curviate seat entitlement. The two can disagree, and this is the one that governs the numbers. The elevated Sales Navigator and Recruiter figures apply only to calls made through the matching interface, the `/v1/{account_id}/sales-navigator/...` and `/v1/{account_id}/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`.
|
|
30707
30721
|
* @enum {string}
|
|
30708
30722
|
*/
|
|
30709
30723
|
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
@@ -30786,7 +30800,7 @@ interface operations {
|
|
|
30786
30800
|
/** @description IANA zone name the activity window is read in. Null disables the window entirely. */
|
|
30787
30801
|
activity_window_timezone?: string | null;
|
|
30788
30802
|
/**
|
|
30789
|
-
* @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.
|
|
30803
|
+
* @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.
|
|
30790
30804
|
* @enum {string}
|
|
30791
30805
|
*/
|
|
30792
30806
|
activity_window_applies_to?: "writes" | "all";
|
|
@@ -30810,7 +30824,11 @@ interface operations {
|
|
|
30810
30824
|
source_class?: "substrate" | "linkedin_official" | "practitioner" | "inferred" | "unseeded";
|
|
30811
30825
|
/** @description What this row is ACTUALLY held to right now: `ceiling` with the account's warm-up ramp applied. Read this one, not `ceiling`, to know where the next call will be stopped. On an account in warm-up the two differ, and on a five-day-old account they differ by a factor of about seven. Null when the row has no ceiling to ramp. `warm_up_state` and `warm_up_factor` beside it are the values ACTIVE on this row, not the seeded ones. */
|
|
30812
30826
|
effective_ceiling?: number | null;
|
|
30813
|
-
/** @description
|
|
30827
|
+
/** @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. */
|
|
30828
|
+
interface_ceiling?: number | null;
|
|
30829
|
+
/** @description `interface_ceiling` with the account's warm-up ramp applied, and null wherever `interface_ceiling` is null. Read THIS to know where an elevated-interface call stops, for the same reason `effective_ceiling` rather than `ceiling` answers that for a standard one. */
|
|
30830
|
+
effective_interface_ceiling?: number | null;
|
|
30831
|
+
/** @description Empty when nothing on this row is above default. Computed against the STANDARD-interface default, like `band` and for the same reason. */
|
|
30814
30832
|
over_default?: {
|
|
30815
30833
|
/**
|
|
30816
30834
|
* @description The field whose configured value is above default.
|
|
@@ -30920,15 +30938,15 @@ interface operations {
|
|
|
30920
30938
|
/** @description The event's id. Also the value encoded in the next page's cursor. */
|
|
30921
30939
|
id: string;
|
|
30922
30940
|
/**
|
|
30923
|
-
* @description The budget row that breached. It is not always a row the call itself spends: an invitation refused because the outstanding backlog is at its ceiling reports `pending_invites`, which is the thing that breached.
|
|
30941
|
+
* @description The budget row that breached. It is not always a row the call itself spends: an invitation refused because the outstanding backlog is at its ceiling reports `pending_invites`, which is the thing that breached. `*` means the event was not about a row at all: the activity window closing on an action that spends no budget of its own, such as editing a message or a Recruiter admin action. The `budget_row` filter accepts real row names only, so page without it to see those.
|
|
30924
30942
|
* @enum {string}
|
|
30925
30943
|
*/
|
|
30926
|
-
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";
|
|
30944
|
+
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" | "*";
|
|
30927
30945
|
/**
|
|
30928
|
-
* @description
|
|
30946
|
+
* @description Which rule flagged it, and each one calls for a different response. `budget_exhausted`: the account reached the ceiling configured for that row, which you can raise on the safety policy. `activity_window`: the account was acting outside its configured activity window, so no ceiling was the constraint. Wait for the window to open, move `activity_window_start` or `activity_window_end`, or check `activity_window_timezone` is the zone you meant. `rate_limited`: the platform itself refused this account on that row recently and Curviate is holding the row until the pause expires, which no configuration change lifts.
|
|
30929
30947
|
* @enum {string}
|
|
30930
30948
|
*/
|
|
30931
|
-
reason: "budget_exhausted" | "rate_limited";
|
|
30949
|
+
reason: "budget_exhausted" | "activity_window" | "rate_limited";
|
|
30932
30950
|
/** @description Whether the action was stopped. `false` is a warning: the action went through, and this record is the only lasting trace that it crossed a limit. Under the default `warn` posture every event is a warning, which is what makes reading this surface the point of running it. */
|
|
30933
30951
|
blocked: boolean;
|
|
30934
30952
|
/** @description The operation the caller was running when it breached. */
|
|
@@ -31232,6 +31250,7 @@ type ChatListQuery = NonNullable<paths["/v1/{account_id}/chats"]["get"]["paramet
|
|
|
31232
31250
|
type StartChatBody = paths["/v1/{account_id}/chats"]["post"]["requestBody"]["content"]["application/json"];
|
|
31233
31251
|
type StartChatResult = paths["/v1/{account_id}/chats"]["post"]["responses"]["201"]["content"]["application/json"];
|
|
31234
31252
|
type ChatDetail = paths["/v1/{account_id}/chats/{chat_id}"]["get"]["responses"]["200"]["content"]["application/json"];
|
|
31253
|
+
type ChatGetQuery = NonNullable<paths["/v1/{account_id}/chats/{chat_id}"]["get"]["parameters"]["query"]>;
|
|
31235
31254
|
type MarkChatReadBody = paths["/v1/{account_id}/chats/{chat_id}"]["patch"]["requestBody"]["content"]["application/json"];
|
|
31236
31255
|
type MarkChatReadResult = paths["/v1/{account_id}/chats/{chat_id}"]["patch"]["responses"]["200"]["content"]["application/json"];
|
|
31237
31256
|
type MessageListPage = paths["/v1/{account_id}/chats/{chat_id}/messages"]["get"]["responses"]["200"]["content"]["application/json"];
|
|
@@ -31263,8 +31282,15 @@ declare class MessagingResource {
|
|
|
31263
31282
|
* `COMPANY_` chat id from `inboxes.listChats()`.
|
|
31264
31283
|
*/
|
|
31265
31284
|
startChat(body: StartChatBody): Promise<StartChatResult>;
|
|
31266
|
-
/**
|
|
31267
|
-
|
|
31285
|
+
/**
|
|
31286
|
+
* Get details of a single chat. `GET /v1/{account_id}/chats/{chat_id}`
|
|
31287
|
+
*
|
|
31288
|
+
* A store-servable read: `{ mode, max_age }` says how willing it is to reach
|
|
31289
|
+
* LinkedIn, and the response's `source` says which way the answer came. See
|
|
31290
|
+
* "Retrieval modes" in the README for the four modes and what `max_age`
|
|
31291
|
+
* overrides.
|
|
31292
|
+
*/
|
|
31293
|
+
getChat(chatId: string, params?: ChatGetQuery): Promise<ChatDetail>;
|
|
31268
31294
|
/**
|
|
31269
31295
|
* Mark a chat read or unread. `PATCH /v1/{account_id}/chats/{chat_id}`
|
|
31270
31296
|
* Body: `{read}`.
|
|
@@ -33077,7 +33103,7 @@ declare class Curviate {
|
|
|
33077
33103
|
* The taxonomy is additive-only: new codes may be appended, existing ones are
|
|
33078
33104
|
* never removed or renamed.
|
|
33079
33105
|
*/
|
|
33080
|
-
declare const ERROR_CODES: readonly ["UNAUTHORIZED", "INVALID_REQUEST", "UNSUPPORTED_MEDIA_TYPE", "PAYLOAD_TOO_LARGE", "ACCOUNT_NOT_FOUND", "ACCOUNT_RESTRICTED", "ACCOUNT_ALREADY_LINKED", "RESOURCE_NOT_FOUND", "RESOURCE_ACCESS_RESTRICTED", "FILTER_CANDIDATES_REQUIRED", "TIER_NOT_ACTIVE", "LINKEDIN_FEATURE_NOT_SUBSCRIBED", "RATE_LIMIT_ACCOUNT", "RATE_LIMIT_TENANT", "PLATFORM_RATE_LIMIT", "RATE_LIMITED", "BUDGET_EXHAUSTED", "PLATFORM_ERROR", "PLATFORM_NOT_IMPLEMENTED", "LINKEDIN_OPERATION_NOT_SUPPORTED", "CHECKPOINT_NOT_FOUND", "CHECKPOINT_EXPIRED", "CHECKPOINT_INVALID_CODE", "CHECKPOINT_MAX_ATTEMPTS", "CHECKPOINT_ALREADY_RESOLVED", "CHECKPOINT_UNSUPPORTED", "CONNECTION_IN_PROGRESS", "PREMIUM_CONFLICT", "REAUTH_REQUIRED", "LINKEDIN_AUTH_FAILED", "LINKEDIN_SESSION_EVICTED", "LINKEDIN_RATE_LIMITED", "LINKEDIN_COOKIE_INVALID", "LINKEDIN_SERVICE_UNAVAILABLE", "MESSAGE_WINDOW_EXPIRED", "RECIPIENT_UNREACHABLE", "CONNECTION_REQUEST_CONFLICT", "PAYMENT_REQUIRED", "PAYMENT_FAILED", "SUBSCRIPTION_BUSY", "SUBSCRIPTION_NOT_FOUND", "SEAT_NOT_FOUND", "SEAT_CANCELLED", "INTERNAL"];
|
|
33106
|
+
declare const ERROR_CODES: readonly ["UNAUTHORIZED", "INVALID_REQUEST", "UNSUPPORTED_MEDIA_TYPE", "PAYLOAD_TOO_LARGE", "ACCOUNT_NOT_FOUND", "ACCOUNT_RESTRICTED", "ACCOUNT_ALREADY_LINKED", "RESOURCE_NOT_FOUND", "NOT_STORED", "RESOURCE_ACCESS_RESTRICTED", "FILTER_CANDIDATES_REQUIRED", "TIER_NOT_ACTIVE", "LINKEDIN_FEATURE_NOT_SUBSCRIBED", "RATE_LIMIT_ACCOUNT", "RATE_LIMIT_TENANT", "PLATFORM_RATE_LIMIT", "RATE_LIMITED", "BUDGET_EXHAUSTED", "PLATFORM_ERROR", "PLATFORM_NOT_IMPLEMENTED", "LINKEDIN_OPERATION_NOT_SUPPORTED", "CHECKPOINT_NOT_FOUND", "CHECKPOINT_EXPIRED", "CHECKPOINT_INVALID_CODE", "CHECKPOINT_MAX_ATTEMPTS", "CHECKPOINT_ALREADY_RESOLVED", "CHECKPOINT_UNSUPPORTED", "CONNECTION_IN_PROGRESS", "PREMIUM_CONFLICT", "REAUTH_REQUIRED", "LINKEDIN_AUTH_FAILED", "LINKEDIN_SESSION_EVICTED", "LINKEDIN_RATE_LIMITED", "LINKEDIN_COOKIE_INVALID", "LINKEDIN_SERVICE_UNAVAILABLE", "MESSAGE_WINDOW_EXPIRED", "RECIPIENT_UNREACHABLE", "CONNECTION_REQUEST_CONFLICT", "PAYMENT_REQUIRED", "PAYMENT_FAILED", "SUBSCRIPTION_BUSY", "SUBSCRIPTION_NOT_FOUND", "SEAT_NOT_FOUND", "SEAT_CANCELLED", "INTERNAL"];
|
|
33081
33107
|
/**
|
|
33082
33108
|
* The complete set of error codes observable by API callers.
|
|
33083
33109
|
*
|
package/dist/index.js
CHANGED
|
@@ -12,6 +12,14 @@ var ERROR_CODES = [
|
|
|
12
12
|
// linking again. Not retryable.
|
|
13
13
|
"ACCOUNT_ALREADY_LINKED",
|
|
14
14
|
"RESOURCE_NOT_FOUND",
|
|
15
|
+
// A read found nothing in Curviate's store and its mode may not fetch, so it
|
|
16
|
+
// refused rather than reaching LinkedIn. 422, and NOT RESOURCE_NOT_FOUND: the
|
|
17
|
+
// resource may be perfectly real, so the fix is another mode, not another id.
|
|
18
|
+
// Absent from RETRYABLE_CODES on purpose, nothing about the answer changes
|
|
19
|
+
// until the caller picks one.
|
|
20
|
+
//
|
|
21
|
+
// `cache_only` is the mode that raises it; re-read with `refill` or `auto`.
|
|
22
|
+
"NOT_STORED",
|
|
15
23
|
"RESOURCE_ACCESS_RESTRICTED",
|
|
16
24
|
// Search filter resolution: a plain-string filter value matched several
|
|
17
25
|
// LinkedIn taxonomy options and one has to be picked (422). The body carries
|
|
@@ -653,11 +661,19 @@ var MessagingResource = class {
|
|
|
653
661
|
body
|
|
654
662
|
});
|
|
655
663
|
}
|
|
656
|
-
/**
|
|
657
|
-
|
|
664
|
+
/**
|
|
665
|
+
* Get details of a single chat. `GET /v1/{account_id}/chats/{chat_id}`
|
|
666
|
+
*
|
|
667
|
+
* A store-servable read: `{ mode, max_age }` says how willing it is to reach
|
|
668
|
+
* LinkedIn, and the response's `source` says which way the answer came. See
|
|
669
|
+
* "Retrieval modes" in the README for the four modes and what `max_age`
|
|
670
|
+
* overrides.
|
|
671
|
+
*/
|
|
672
|
+
getChat(chatId, params) {
|
|
658
673
|
return this.ctx.request({
|
|
659
674
|
method: "GET",
|
|
660
|
-
path: apiPath`/v1/{account_id}/chats/${chatId}
|
|
675
|
+
path: apiPath`/v1/{account_id}/chats/${chatId}`,
|
|
676
|
+
...params ? { query: params } : {}
|
|
661
677
|
});
|
|
662
678
|
}
|
|
663
679
|
/**
|
package/package.json
CHANGED
package/src/generated/types.ts
CHANGED
|
@@ -2591,7 +2591,7 @@ export interface paths {
|
|
|
2591
2591
|
head?: never;
|
|
2592
2592
|
/**
|
|
2593
2593
|
* Update an account's safety policy
|
|
2594
|
-
* @description The single safety-policy write. Send only the fields you are changing: everything you omit is left byte-identical, and sending `null` for a field clears your override and restores the Curviate default. Any limit may be set to any value: Curviate does not clamp, cap or refuse a change on the grounds that the number is unsafe. A value above the Curviate default is reported back in the response, and on every later read, with the default and its source class attached; there is no way to acknowledge it away, and setting the value back to the default removes it. A value that is not a value, such as a negative ceiling or an unknown row name, is a 400. Every field whose value CHANGES is appended to the account's action ledger with the previous value, the new value, the Curviate default, the actor and the time; a field you send whose value already equals its current effective value is not ledgered and is not stored as an override, so reading the policy and sending the document back changes nothing.
|
|
2594
|
+
* @description The single safety-policy write. Send only the fields you are changing: everything you omit is left byte-identical, and sending `null` for a field clears your override and restores the Curviate default. Any limit may be set to any value: Curviate does not clamp, cap or refuse a change on the grounds that the number is unsafe. A value above the Curviate default is reported back in the response, and on every later read, with the default and its source class attached; there is no way to acknowledge it away, and setting the value back to the default removes it. A value that is not a value, such as a negative ceiling or an unknown row name, is a 400. Every field whose value CHANGES is appended to the account's action ledger with the previous value, the new value, the Curviate default, the actor and the time; a field you send whose value already equals its current effective value is not ledgered and is not stored as an override, so reading the policy and sending the document back changes nothing. Six fields on the read are derived rather than configured: `effective_ceiling`, `interface_ceiling`, `effective_interface_ceiling`, `posture_source`, `over_default` and each row's `warm_up_state`. Send them and they are accepted and ignored, never stored and never ledgered, so the document you read can go straight back. To pin a row's ramp, set `warm_up_factor`. `activity_window` is not accepted: send its settable subfields instead, the top-level `timezone` for the zone, and per row `activity_window_start`, `activity_window_end`, `activity_window_timezone` and `activity_window_applies_to`. The 400 this produces names those subfields, not just the refused object. And read `changes nothing` as `changes no limit`: the `posture` fields are OVERRIDES at every scope, so writing back a posture a scope merely inherits PINS it there and appends one ledger entry per pinned scope. That is what stops a later account- or tenant-wide change from moving it. A pin already in place is a no-op. An agent-authenticated write is accepted on exactly the same footing as an operator's. There is no bulk import, file upload or policy template: configuring many rows or many accounts is a loop over this operation. One field is not account-scoped: `tenant_default_posture` sets the default for EVERY account in the tenant, not just the one in the path, which is what makes it a one-call change for a whole workspace of personas. It is reported back at the top of every policy response, so a change to it is visible even on an account that overrides it. One other field is not row-scoped: `limit_profile` selects which of the four Curviate default sets this account's rows resolve from, so it moves the default under every row at once while leaving every value you have configured explicitly exactly as you set it. It is the platform product active on the account, not your Curviate seat entitlement, and the two can disagree: a lapsed subscription leaves the seat untouched. Curviate detects it when the account connects and re-detects it on every reconnect; setting it here is an operator override of that result, and it holds until the next connect. When the seat and the detected product disagree, the detected product wins the numbers and the read reports the disagreement as `seat_tier_mismatch`.
|
|
2595
2595
|
*/
|
|
2596
2596
|
patch: operations["patchV1AccountIdSafetyPolicy"];
|
|
2597
2597
|
trace?: never;
|
|
@@ -2650,9 +2650,9 @@ export interface components {
|
|
|
2650
2650
|
* @enum {string}
|
|
2651
2651
|
*/
|
|
2652
2652
|
required_tier?: "core" | "sales_nav" | "recruiter";
|
|
2653
|
-
/** @description Present on a PLATFORM_RATE_LIMIT raised because one account-safety budget row is paused: LinkedIn refused a recent call on that row, so this one was refused locally without reaching LinkedIn. Names the paused row (for example profile_views, connection_requests_no_note). The pause is scoped to this row on this account; every other row keeps working. Absent on every other rate limit. Also present on BUDGET_EXHAUSTED, where it names the row that hit its CEILING rather than one LinkedIn paused: read the code to tell the two apart, because the recovery differs. */
|
|
2654
|
-
row?: string;
|
|
2655
|
-
/** @description Present on BUDGET_EXHAUSTED:
|
|
2653
|
+
/** @description Present on a PLATFORM_RATE_LIMIT raised because one account-safety budget row is paused: LinkedIn refused a recent call on that row, so this one was refused locally without reaching LinkedIn. Names the paused row (for example profile_views, connection_requests_no_note). The pause is scoped to this row on this account; every other row keeps working. Absent on every other rate limit. Also present on BUDGET_EXHAUSTED, where it names the row that hit its CEILING rather than one LinkedIn paused: read the code to tell the two apart, because the recovery differs. Null on a BUDGET_EXHAUSTED whose reason is activity_window and whose action spends no budget of its own, because there is no row to name; hint.parameter still names the setting to change. Never null on a rate limit. */
|
|
2654
|
+
row?: string | null;
|
|
2655
|
+
/** @description Present on BUDGET_EXHAUSTED: the instant the refusal lifts, as an absolute instant rather than a duration, so it stays true however long you hold it. It is the window roll on a ceiling refusal and the next window open on an activity-window one. It is null in the two cases where no clock frees the account: the pending_invites gauge, whose backlog falls when invitations are accepted or withdrawn, and an InMail credit exhaustion (row inmail), which LinkedIn regrants on a schedule this product cannot read. */
|
|
2656
2656
|
reset_at?: string | null;
|
|
2657
2657
|
/** @description Present on BUDGET_EXHAUSTED: the exact setting to change, as a field rather than as prose. parameter is addressable on PATCH /v1/{account_id}/safety-policy, so an agent can decide between waiting until reset_at, escalating to a human, and reconfiguring, without parsing the message. */
|
|
2658
2658
|
hint?: {
|
|
@@ -2715,9 +2715,9 @@ export interface components {
|
|
|
2715
2715
|
* }
|
|
2716
2716
|
*/
|
|
2717
2717
|
SafetyWarning: {
|
|
2718
|
-
/** @description The budget row that breached, for example profile_views or pending_invites. */
|
|
2719
|
-
row: string;
|
|
2720
|
-
/** @description
|
|
2718
|
+
/** @description The budget row that breached, for example profile_views or pending_invites. Null when the breach is not about a row: an activity_window warning on an action that spends no budget of its own (editing a message, dismissing a notification, a Recruiter or Sales Navigator admin action) is still governed by the hours the account works in. Read hint.parameter for what to change; whenever this is null it names posture, because the activity window edges are set per action type and this action has none, so the levers that reach it are the account timezone and posture. */
|
|
2719
|
+
row: string | null;
|
|
2720
|
+
/** @description The instant the refusal lifts: the window roll on a ceiling refusal, the next window open on an activity-window one. Null in the two cases no clock frees, the pending_invites gauge and InMail credits (row inmail). */
|
|
2721
2721
|
reset_at: string | null;
|
|
2722
2722
|
hint: {
|
|
2723
2723
|
/** @description The settable parameter on PATCH /v1/{account_id}/safety-policy. */
|
|
@@ -6710,13 +6710,13 @@ export interface operations {
|
|
|
6710
6710
|
}[];
|
|
6711
6711
|
/** @description Opaque cursor for the next page, or null at end-of-list. */
|
|
6712
6712
|
cursor: string | null;
|
|
6713
|
-
/** @description Present only when expand=public_identifier was asked for and this page
|
|
6713
|
+
/** @description Present only when expand=public_identifier was asked for and some people on this page went unresolved for a reason the payload cannot show: more of them needed a profile lookup than one request performs, or the account is outside its activity window at this hour and enforces it. Absent whenever there is nothing to report, so a response that resolved everyone carries no such key. Branch on each entry's code, never on its message. */
|
|
6714
6714
|
notices?: {
|
|
6715
6715
|
/**
|
|
6716
|
-
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone.
|
|
6716
|
+
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone. EXPANSION_WITHHELD_ACTIVITY_WINDOW: the profile lookups this page needed were refused because the account is outside its activity window at this hour and enforces it, so those people carry public_identifier null and their null does not mean they have no public profile either. Ask again inside the window, or widen the window on this account's safety policy.
|
|
6717
6717
|
* @enum {string}
|
|
6718
6718
|
*/
|
|
6719
|
-
code: "EXPANSION_LIMIT_REACHED";
|
|
6719
|
+
code: "EXPANSION_LIMIT_REACHED" | "EXPANSION_WITHHELD_ACTIVITY_WINDOW";
|
|
6720
6720
|
/** @description One sentence explaining the condition and how to resolve it. */
|
|
6721
6721
|
message: string;
|
|
6722
6722
|
/** @description The request field the notice is about, here expand. */
|
|
@@ -6893,13 +6893,13 @@ export interface operations {
|
|
|
6893
6893
|
/** @description Message body (content pass-through, never stored). */
|
|
6894
6894
|
text?: string | null;
|
|
6895
6895
|
} | null;
|
|
6896
|
-
/** @description Present only when expand=public_identifier was asked for and this page
|
|
6896
|
+
/** @description Present only when expand=public_identifier was asked for and some people on this page went unresolved for a reason the payload cannot show: more of them needed a profile lookup than one request performs, or the account is outside its activity window at this hour and enforces it. Absent whenever there is nothing to report, so a response that resolved everyone carries no such key. Branch on each entry's code, never on its message. */
|
|
6897
6897
|
notices?: {
|
|
6898
6898
|
/**
|
|
6899
|
-
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone.
|
|
6899
|
+
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone. EXPANSION_WITHHELD_ACTIVITY_WINDOW: the profile lookups this page needed were refused because the account is outside its activity window at this hour and enforces it, so those people carry public_identifier null and their null does not mean they have no public profile either. Ask again inside the window, or widen the window on this account's safety policy.
|
|
6900
6900
|
* @enum {string}
|
|
6901
6901
|
*/
|
|
6902
|
-
code: "EXPANSION_LIMIT_REACHED";
|
|
6902
|
+
code: "EXPANSION_LIMIT_REACHED" | "EXPANSION_WITHHELD_ACTIVITY_WINDOW";
|
|
6903
6903
|
/** @description One sentence explaining the condition and how to resolve it. */
|
|
6904
6904
|
message: string;
|
|
6905
6905
|
/** @description The request field the notice is about, here expand. */
|
|
@@ -7069,13 +7069,13 @@ export interface operations {
|
|
|
7069
7069
|
}[];
|
|
7070
7070
|
/** @description Opaque cursor for the next page, or null at end-of-list. */
|
|
7071
7071
|
cursor: string | null;
|
|
7072
|
-
/** @description Present only when expand=public_identifier was asked for and this page
|
|
7072
|
+
/** @description Present only when expand=public_identifier was asked for and some people on this page went unresolved for a reason the payload cannot show: more of them needed a profile lookup than one request performs, or the account is outside its activity window at this hour and enforces it. Absent whenever there is nothing to report, so a response that resolved everyone carries no such key. Branch on each entry's code, never on its message. */
|
|
7073
7073
|
notices?: {
|
|
7074
7074
|
/**
|
|
7075
|
-
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone.
|
|
7075
|
+
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone. EXPANSION_WITHHELD_ACTIVITY_WINDOW: the profile lookups this page needed were refused because the account is outside its activity window at this hour and enforces it, so those people carry public_identifier null and their null does not mean they have no public profile either. Ask again inside the window, or widen the window on this account's safety policy.
|
|
7076
7076
|
* @enum {string}
|
|
7077
7077
|
*/
|
|
7078
|
-
code: "EXPANSION_LIMIT_REACHED";
|
|
7078
|
+
code: "EXPANSION_LIMIT_REACHED" | "EXPANSION_WITHHELD_ACTIVITY_WINDOW";
|
|
7079
7079
|
/** @description One sentence explaining the condition and how to resolve it. */
|
|
7080
7080
|
message: string;
|
|
7081
7081
|
/** @description The request field the notice is about, here expand. */
|
|
@@ -7412,13 +7412,13 @@ export interface operations {
|
|
|
7412
7412
|
sent_at: number;
|
|
7413
7413
|
/** @description Message body (content pass-through, never stored). */
|
|
7414
7414
|
text?: string | null;
|
|
7415
|
-
/** @description Present only when expand=public_identifier was asked for and this page
|
|
7415
|
+
/** @description Present only when expand=public_identifier was asked for and some people on this page went unresolved for a reason the payload cannot show: more of them needed a profile lookup than one request performs, or the account is outside its activity window at this hour and enforces it. Absent whenever there is nothing to report, so a response that resolved everyone carries no such key. Branch on each entry's code, never on its message. */
|
|
7416
7416
|
notices?: {
|
|
7417
7417
|
/**
|
|
7418
|
-
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone.
|
|
7418
|
+
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone. EXPANSION_WITHHELD_ACTIVITY_WINDOW: the profile lookups this page needed were refused because the account is outside its activity window at this hour and enforces it, so those people carry public_identifier null and their null does not mean they have no public profile either. Ask again inside the window, or widen the window on this account's safety policy.
|
|
7419
7419
|
* @enum {string}
|
|
7420
7420
|
*/
|
|
7421
|
-
code: "EXPANSION_LIMIT_REACHED";
|
|
7421
|
+
code: "EXPANSION_LIMIT_REACHED" | "EXPANSION_WITHHELD_ACTIVITY_WINDOW";
|
|
7422
7422
|
/** @description One sentence explaining the condition and how to resolve it. */
|
|
7423
7423
|
message: string;
|
|
7424
7424
|
/** @description The request field the notice is about, here expand. */
|
|
@@ -7618,13 +7618,13 @@ export interface operations {
|
|
|
7618
7618
|
* @enum {boolean}
|
|
7619
7619
|
*/
|
|
7620
7620
|
filter_effective?: true;
|
|
7621
|
-
/** @description Present only when expand=public_identifier was asked for and this page
|
|
7621
|
+
/** @description Present only when expand=public_identifier was asked for and some people on this page went unresolved for a reason the payload cannot show: more of them needed a profile lookup than one request performs, or the account is outside its activity window at this hour and enforces it. Absent whenever there is nothing to report, so a response that resolved everyone carries no such key. Branch on each entry's code, never on its message. */
|
|
7622
7622
|
notices?: {
|
|
7623
7623
|
/**
|
|
7624
|
-
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone.
|
|
7624
|
+
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone. EXPANSION_WITHHELD_ACTIVITY_WINDOW: the profile lookups this page needed were refused because the account is outside its activity window at this hour and enforces it, so those people carry public_identifier null and their null does not mean they have no public profile either. Ask again inside the window, or widen the window on this account's safety policy.
|
|
7625
7625
|
* @enum {string}
|
|
7626
7626
|
*/
|
|
7627
|
-
code: "EXPANSION_LIMIT_REACHED";
|
|
7627
|
+
code: "EXPANSION_LIMIT_REACHED" | "EXPANSION_WITHHELD_ACTIVITY_WINDOW";
|
|
7628
7628
|
/** @description One sentence explaining the condition and how to resolve it. */
|
|
7629
7629
|
message: string;
|
|
7630
7630
|
/** @description The request field the notice is about, here expand. */
|
|
@@ -10265,13 +10265,13 @@ export interface operations {
|
|
|
10265
10265
|
}[];
|
|
10266
10266
|
/** @description Next-page cursor; follow until items is empty (presence is not a has-more guarantee). */
|
|
10267
10267
|
cursor?: string | null;
|
|
10268
|
-
/** @description Present only when expand=public_identifier was asked for and this page
|
|
10268
|
+
/** @description Present only when expand=public_identifier was asked for and some people on this page went unresolved for a reason the payload cannot show: more of them needed a profile lookup than one request performs, or the account is outside its activity window at this hour and enforces it. Absent whenever there is nothing to report, so a response that resolved everyone carries no such key. Branch on each entry's code, never on its message. */
|
|
10269
10269
|
notices?: {
|
|
10270
10270
|
/**
|
|
10271
|
-
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone.
|
|
10271
|
+
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone. EXPANSION_WITHHELD_ACTIVITY_WINDOW: the profile lookups this page needed were refused because the account is outside its activity window at this hour and enforces it, so those people carry public_identifier null and their null does not mean they have no public profile either. Ask again inside the window, or widen the window on this account's safety policy.
|
|
10272
10272
|
* @enum {string}
|
|
10273
10273
|
*/
|
|
10274
|
-
code: "EXPANSION_LIMIT_REACHED";
|
|
10274
|
+
code: "EXPANSION_LIMIT_REACHED" | "EXPANSION_WITHHELD_ACTIVITY_WINDOW";
|
|
10275
10275
|
/** @description One sentence explaining the condition and how to resolve it. */
|
|
10276
10276
|
message: string;
|
|
10277
10277
|
/** @description The request field the notice is about, here expand. */
|
|
@@ -10687,13 +10687,13 @@ export interface operations {
|
|
|
10687
10687
|
/** @description The vanity slug from the profile URL, for example jane-smith. Present only when the request asks for it with expand=public_identifier, and then always present, carrying the slug or null when the platform surfaces none for this person. */
|
|
10688
10688
|
public_identifier?: string | null;
|
|
10689
10689
|
};
|
|
10690
|
-
/** @description Present only when expand=public_identifier was asked for and this page
|
|
10690
|
+
/** @description Present only when expand=public_identifier was asked for and some people on this page went unresolved for a reason the payload cannot show: more of them needed a profile lookup than one request performs, or the account is outside its activity window at this hour and enforces it. Absent whenever there is nothing to report, so a response that resolved everyone carries no such key. Branch on each entry's code, never on its message. */
|
|
10691
10691
|
notices?: {
|
|
10692
10692
|
/**
|
|
10693
|
-
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone.
|
|
10693
|
+
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone. EXPANSION_WITHHELD_ACTIVITY_WINDOW: the profile lookups this page needed were refused because the account is outside its activity window at this hour and enforces it, so those people carry public_identifier null and their null does not mean they have no public profile either. Ask again inside the window, or widen the window on this account's safety policy.
|
|
10694
10694
|
* @enum {string}
|
|
10695
10695
|
*/
|
|
10696
|
-
code: "EXPANSION_LIMIT_REACHED";
|
|
10696
|
+
code: "EXPANSION_LIMIT_REACHED" | "EXPANSION_WITHHELD_ACTIVITY_WINDOW";
|
|
10697
10697
|
/** @description One sentence explaining the condition and how to resolve it. */
|
|
10698
10698
|
message: string;
|
|
10699
10699
|
/** @description The request field the notice is about, here expand. */
|
|
@@ -11047,13 +11047,13 @@ export interface operations {
|
|
|
11047
11047
|
}[];
|
|
11048
11048
|
/** @description Next-page cursor; follow until items is empty. */
|
|
11049
11049
|
cursor?: string | null;
|
|
11050
|
-
/** @description Present only when expand=public_identifier was asked for and this page
|
|
11050
|
+
/** @description Present only when expand=public_identifier was asked for and some people on this page went unresolved for a reason the payload cannot show: more of them needed a profile lookup than one request performs, or the account is outside its activity window at this hour and enforces it. Absent whenever there is nothing to report, so a response that resolved everyone carries no such key. Branch on each entry's code, never on its message. */
|
|
11051
11051
|
notices?: {
|
|
11052
11052
|
/**
|
|
11053
|
-
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone.
|
|
11053
|
+
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone. EXPANSION_WITHHELD_ACTIVITY_WINDOW: the profile lookups this page needed were refused because the account is outside its activity window at this hour and enforces it, so those people carry public_identifier null and their null does not mean they have no public profile either. Ask again inside the window, or widen the window on this account's safety policy.
|
|
11054
11054
|
* @enum {string}
|
|
11055
11055
|
*/
|
|
11056
|
-
code: "EXPANSION_LIMIT_REACHED";
|
|
11056
|
+
code: "EXPANSION_LIMIT_REACHED" | "EXPANSION_WITHHELD_ACTIVITY_WINDOW";
|
|
11057
11057
|
/** @description One sentence explaining the condition and how to resolve it. */
|
|
11058
11058
|
message: string;
|
|
11059
11059
|
/** @description The request field the notice is about, here expand. */
|
|
@@ -11423,13 +11423,13 @@ export interface operations {
|
|
|
11423
11423
|
[key: string]: unknown;
|
|
11424
11424
|
};
|
|
11425
11425
|
};
|
|
11426
|
-
/** @description Present only when expand=public_identifier was asked for and this page
|
|
11426
|
+
/** @description Present only when expand=public_identifier was asked for and some people on this page went unresolved for a reason the payload cannot show: more of them needed a profile lookup than one request performs, or the account is outside its activity window at this hour and enforces it. Absent whenever there is nothing to report, so a response that resolved everyone carries no such key. Branch on each entry's code, never on its message. */
|
|
11427
11427
|
notices?: {
|
|
11428
11428
|
/**
|
|
11429
|
-
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone.
|
|
11429
|
+
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone. EXPANSION_WITHHELD_ACTIVITY_WINDOW: the profile lookups this page needed were refused because the account is outside its activity window at this hour and enforces it, so those people carry public_identifier null and their null does not mean they have no public profile either. Ask again inside the window, or widen the window on this account's safety policy.
|
|
11430
11430
|
* @enum {string}
|
|
11431
11431
|
*/
|
|
11432
|
-
code: "EXPANSION_LIMIT_REACHED";
|
|
11432
|
+
code: "EXPANSION_LIMIT_REACHED" | "EXPANSION_WITHHELD_ACTIVITY_WINDOW";
|
|
11433
11433
|
/** @description One sentence explaining the condition and how to resolve it. */
|
|
11434
11434
|
message: string;
|
|
11435
11435
|
/** @description The request field the notice is about, here expand. */
|
|
@@ -12000,7 +12000,7 @@ export interface operations {
|
|
|
12000
12000
|
getV1AccountIdChatsSearch: {
|
|
12001
12001
|
parameters: {
|
|
12002
12002
|
query: {
|
|
12003
|
-
/** @description The search term: matches both participant names and message content (e.g. 'sophie keller'). */
|
|
12003
|
+
/** @description The search term: matches both participant names and message content (e.g. 'sophie keller'). Terms of 3 or more characters are fast; a 1-2 character term is slower. */
|
|
12004
12004
|
query: string;
|
|
12005
12005
|
/** @description Maximum chats to return per page (1-100, default 20). The server may walk a few internal pages to fill one page. */
|
|
12006
12006
|
limit?: number;
|
|
@@ -12629,13 +12629,13 @@ export interface operations {
|
|
|
12629
12629
|
}[];
|
|
12630
12630
|
/** @description Next-page cursor. Follow until items is empty. */
|
|
12631
12631
|
cursor?: string | null;
|
|
12632
|
-
/** @description Present only when expand=public_identifier was asked for and this page
|
|
12632
|
+
/** @description Present only when expand=public_identifier was asked for and some people on this page went unresolved for a reason the payload cannot show: more of them needed a profile lookup than one request performs, or the account is outside its activity window at this hour and enforces it. Absent whenever there is nothing to report, so a response that resolved everyone carries no such key. Branch on each entry's code, never on its message. */
|
|
12633
12633
|
notices?: {
|
|
12634
12634
|
/**
|
|
12635
|
-
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone.
|
|
12635
|
+
* @description EXPANSION_LIMIT_REACHED: more people on this page needed a profile lookup than one request performs, so the ones past the budget carry public_identifier null without ever having been looked up. Their null therefore does not mean the person has no public profile. Ask for a smaller page to resolve everyone. EXPANSION_WITHHELD_ACTIVITY_WINDOW: the profile lookups this page needed were refused because the account is outside its activity window at this hour and enforces it, so those people carry public_identifier null and their null does not mean they have no public profile either. Ask again inside the window, or widen the window on this account's safety policy.
|
|
12636
12636
|
* @enum {string}
|
|
12637
12637
|
*/
|
|
12638
|
-
code: "EXPANSION_LIMIT_REACHED";
|
|
12638
|
+
code: "EXPANSION_LIMIT_REACHED" | "EXPANSION_WITHHELD_ACTIVITY_WINDOW";
|
|
12639
12639
|
/** @description One sentence explaining the condition and how to resolve it. */
|
|
12640
12640
|
message: string;
|
|
12641
12641
|
/** @description The request field the notice is about, here expand. */
|
|
@@ -27860,6 +27860,10 @@ export interface operations {
|
|
|
27860
27860
|
ceiling: number | null;
|
|
27861
27861
|
/** @description What this row is ACTUALLY held to right now: `ceiling` with the account's warm-up ramp applied. Compare `used` against THIS one, and `band` is computed against it too. While an account is new, thinly connected, dormant or recovering from a restriction the two differ, and on a five-day-old account they differ by a factor of about seven. Equal to `ceiling` once the ramp is over, and `null` wherever `ceiling` is null. The account's ramp, its factor and the triggers behind it are on GET /v1/{account_id}/safety-policy as `warm_up`. */
|
|
27862
27862
|
effective_ceiling?: number | null;
|
|
27863
|
+
/** @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. */
|
|
27864
|
+
interface_ceiling?: number | null;
|
|
27865
|
+
/** @description `interface_ceiling` with the account's warm-up ramp applied, and null wherever `interface_ceiling` is null. Read THIS to know where an elevated-interface call stops, for the same reason `effective_ceiling` rather than `ceiling` answers that for a standard one. */
|
|
27866
|
+
effective_interface_ceiling?: number | null;
|
|
27863
27867
|
/**
|
|
27864
27868
|
* @description Where `used` sits against this row's own bands. `green` routine, `amber` at or past the routine band, `hard` at or past the warn-louder band, `over` at or past the ceiling. `over` is what `posture` acts on: `warn` reports it and lets the action through, `enforce` refuses. A row with no figures reports `green` at every value, because there is nothing to be past.
|
|
27865
27869
|
* @enum {string}
|
|
@@ -30331,7 +30335,7 @@ export interface operations {
|
|
|
30331
30335
|
/** @description The account this policy governs. */
|
|
30332
30336
|
account_id?: string;
|
|
30333
30337
|
/**
|
|
30334
|
-
* @description Which set of Curviate defaults every row below is resolved from. Each profile inherits the one before it and raises a few rows: `premium` adds a daily invitation band and open-profile InMail, `sales_navigator` raises profile views and search, `recruiter` raises profile views again. This is the platform product active on the account, not the Curviate seat entitlement. The two can disagree, and this is the one that governs the numbers. The elevated Sales Navigator and Recruiter figures apply only to calls made through the matching interface, the `/v1/{account_id}/sales-navigator/...` and `/v1/{account_id}/recruiter/...` operations
|
|
30338
|
+
* @description Which set of Curviate defaults every row below is resolved from. Each profile inherits the one before it and raises a few rows: `premium` adds a daily invitation band and open-profile InMail, `sales_navigator` raises profile views and search, `recruiter` raises profile views again. This is the platform product active on the account, not the Curviate seat entitlement. The two can disagree, and this is the one that governs the numbers. The elevated Sales Navigator and Recruiter figures apply only to calls made through the matching interface, the `/v1/{account_id}/sales-navigator/...` and `/v1/{account_id}/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`.
|
|
30335
30339
|
* @enum {string}
|
|
30336
30340
|
*/
|
|
30337
30341
|
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
@@ -30414,7 +30418,7 @@ export interface operations {
|
|
|
30414
30418
|
/** @description IANA zone name the activity window is read in. Null disables the window entirely. */
|
|
30415
30419
|
activity_window_timezone?: string | null;
|
|
30416
30420
|
/**
|
|
30417
|
-
* @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.
|
|
30421
|
+
* @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.
|
|
30418
30422
|
* @enum {string}
|
|
30419
30423
|
*/
|
|
30420
30424
|
activity_window_applies_to?: "writes" | "all";
|
|
@@ -30438,7 +30442,11 @@ export interface operations {
|
|
|
30438
30442
|
source_class?: "substrate" | "linkedin_official" | "practitioner" | "inferred" | "unseeded";
|
|
30439
30443
|
/** @description What this row is ACTUALLY held to right now: `ceiling` with the account's warm-up ramp applied. Read this one, not `ceiling`, to know where the next call will be stopped. On an account in warm-up the two differ, and on a five-day-old account they differ by a factor of about seven. Null when the row has no ceiling to ramp. `warm_up_state` and `warm_up_factor` beside it are the values ACTIVE on this row, not the seeded ones. */
|
|
30440
30444
|
effective_ceiling?: number | null;
|
|
30441
|
-
/** @description
|
|
30445
|
+
/** @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. */
|
|
30446
|
+
interface_ceiling?: number | null;
|
|
30447
|
+
/** @description `interface_ceiling` with the account's warm-up ramp applied, and null wherever `interface_ceiling` is null. Read THIS to know where an elevated-interface call stops, for the same reason `effective_ceiling` rather than `ceiling` answers that for a standard one. */
|
|
30448
|
+
effective_interface_ceiling?: number | null;
|
|
30449
|
+
/** @description Empty when nothing on this row is above default. Computed against the STANDARD-interface default, like `band` and for the same reason. */
|
|
30442
30450
|
over_default?: {
|
|
30443
30451
|
/**
|
|
30444
30452
|
* @description The field whose configured value is above default.
|
|
@@ -30497,7 +30505,7 @@ export interface operations {
|
|
|
30497
30505
|
content: {
|
|
30498
30506
|
"application/json": {
|
|
30499
30507
|
/**
|
|
30500
|
-
* @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.
|
|
30508
|
+
* @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 and re-detects it on every reconnect; setting it here is an operator override of that result and holds until the next connect. Set it back to `basic` to undo. 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 `/v1/{account_id}/sales-navigator/...` and `/v1/{account_id}/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`.
|
|
30501
30509
|
* @enum {string}
|
|
30502
30510
|
*/
|
|
30503
30511
|
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
@@ -30547,7 +30555,7 @@ export interface operations {
|
|
|
30547
30555
|
/** @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. */
|
|
30548
30556
|
activity_window_timezone?: string | null;
|
|
30549
30557
|
/**
|
|
30550
|
-
* @description What the activity window governs. `writes` (the default) covers live writes to LinkedIn; `all` widens it to live reads
|
|
30558
|
+
* @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.
|
|
30551
30559
|
* @enum {string|null}
|
|
30552
30560
|
*/
|
|
30553
30561
|
activity_window_applies_to?: "writes" | "all" | null;
|
|
@@ -30571,6 +30579,10 @@ export interface operations {
|
|
|
30571
30579
|
source_class?: "substrate" | "linkedin_official" | "practitioner" | "inferred" | "unseeded" | null;
|
|
30572
30580
|
/** @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. */
|
|
30573
30581
|
effective_ceiling?: unknown;
|
|
30582
|
+
/** @description READ-ONLY. What a call through the matching elevated interface (`/v1/{account_id}/sales-navigator/...`, `/v1/{account_id}/recruiter/...`) 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. */
|
|
30583
|
+
interface_ceiling?: unknown;
|
|
30584
|
+
/** @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. */
|
|
30585
|
+
effective_interface_ceiling?: unknown;
|
|
30574
30586
|
/** @description READ-ONLY. Which scope supplied this row's effective `posture`. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
|
|
30575
30587
|
posture_source?: unknown;
|
|
30576
30588
|
/** @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. */
|
|
@@ -30586,6 +30598,8 @@ export interface operations {
|
|
|
30586
30598
|
posture_source?: unknown;
|
|
30587
30599
|
/** @description READ-ONLY. The account's DERIVED warm-up ramp, recomputed on every read. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
|
|
30588
30600
|
warm_up?: unknown;
|
|
30601
|
+
/** @description NOT ACCEPTED. Send its settable subfields instead: the top-level `timezone`, and per row `activity_window_start`, `activity_window_end`, `activity_window_timezone`, `activity_window_applies_to`. */
|
|
30602
|
+
activity_window?: unknown;
|
|
30589
30603
|
};
|
|
30590
30604
|
};
|
|
30591
30605
|
};
|
|
@@ -30607,7 +30621,7 @@ export interface operations {
|
|
|
30607
30621
|
/** @description The account this policy governs. */
|
|
30608
30622
|
account_id?: string;
|
|
30609
30623
|
/**
|
|
30610
|
-
* @description Which set of Curviate defaults every row below is resolved from. Each profile inherits the one before it and raises a few rows: `premium` adds a daily invitation band and open-profile InMail, `sales_navigator` raises profile views and search, `recruiter` raises profile views again. This is the platform product active on the account, not the Curviate seat entitlement. The two can disagree, and this is the one that governs the numbers. The elevated Sales Navigator and Recruiter figures apply only to calls made through the matching interface, the `/v1/{account_id}/sales-navigator/...` and `/v1/{account_id}/recruiter/...` operations
|
|
30624
|
+
* @description Which set of Curviate defaults every row below is resolved from. Each profile inherits the one before it and raises a few rows: `premium` adds a daily invitation band and open-profile InMail, `sales_navigator` raises profile views and search, `recruiter` raises profile views again. This is the platform product active on the account, not the Curviate seat entitlement. The two can disagree, and this is the one that governs the numbers. The elevated Sales Navigator and Recruiter figures apply only to calls made through the matching interface, the `/v1/{account_id}/sales-navigator/...` and `/v1/{account_id}/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`.
|
|
30611
30625
|
* @enum {string}
|
|
30612
30626
|
*/
|
|
30613
30627
|
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
@@ -30690,7 +30704,7 @@ export interface operations {
|
|
|
30690
30704
|
/** @description IANA zone name the activity window is read in. Null disables the window entirely. */
|
|
30691
30705
|
activity_window_timezone?: string | null;
|
|
30692
30706
|
/**
|
|
30693
|
-
* @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.
|
|
30707
|
+
* @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.
|
|
30694
30708
|
* @enum {string}
|
|
30695
30709
|
*/
|
|
30696
30710
|
activity_window_applies_to?: "writes" | "all";
|
|
@@ -30714,7 +30728,11 @@ export interface operations {
|
|
|
30714
30728
|
source_class?: "substrate" | "linkedin_official" | "practitioner" | "inferred" | "unseeded";
|
|
30715
30729
|
/** @description What this row is ACTUALLY held to right now: `ceiling` with the account's warm-up ramp applied. Read this one, not `ceiling`, to know where the next call will be stopped. On an account in warm-up the two differ, and on a five-day-old account they differ by a factor of about seven. Null when the row has no ceiling to ramp. `warm_up_state` and `warm_up_factor` beside it are the values ACTIVE on this row, not the seeded ones. */
|
|
30716
30730
|
effective_ceiling?: number | null;
|
|
30717
|
-
/** @description
|
|
30731
|
+
/** @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. */
|
|
30732
|
+
interface_ceiling?: number | null;
|
|
30733
|
+
/** @description `interface_ceiling` with the account's warm-up ramp applied, and null wherever `interface_ceiling` is null. Read THIS to know where an elevated-interface call stops, for the same reason `effective_ceiling` rather than `ceiling` answers that for a standard one. */
|
|
30734
|
+
effective_interface_ceiling?: number | null;
|
|
30735
|
+
/** @description Empty when nothing on this row is above default. Computed against the STANDARD-interface default, like `band` and for the same reason. */
|
|
30718
30736
|
over_default?: {
|
|
30719
30737
|
/**
|
|
30720
30738
|
* @description The field whose configured value is above default.
|
|
@@ -30824,15 +30842,15 @@ export interface operations {
|
|
|
30824
30842
|
/** @description The event's id. Also the value encoded in the next page's cursor. */
|
|
30825
30843
|
id: string;
|
|
30826
30844
|
/**
|
|
30827
|
-
* @description The budget row that breached. It is not always a row the call itself spends: an invitation refused because the outstanding backlog is at its ceiling reports `pending_invites`, which is the thing that breached.
|
|
30845
|
+
* @description The budget row that breached. It is not always a row the call itself spends: an invitation refused because the outstanding backlog is at its ceiling reports `pending_invites`, which is the thing that breached. `*` means the event was not about a row at all: the activity window closing on an action that spends no budget of its own, such as editing a message or a Recruiter admin action. The `budget_row` filter accepts real row names only, so page without it to see those.
|
|
30828
30846
|
* @enum {string}
|
|
30829
30847
|
*/
|
|
30830
|
-
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";
|
|
30848
|
+
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" | "*";
|
|
30831
30849
|
/**
|
|
30832
|
-
* @description
|
|
30850
|
+
* @description Which rule flagged it, and each one calls for a different response. `budget_exhausted`: the account reached the ceiling configured for that row, which you can raise on the safety policy. `activity_window`: the account was acting outside its configured activity window, so no ceiling was the constraint. Wait for the window to open, move `activity_window_start` or `activity_window_end`, or check `activity_window_timezone` is the zone you meant. `rate_limited`: the platform itself refused this account on that row recently and Curviate is holding the row until the pause expires, which no configuration change lifts.
|
|
30833
30851
|
* @enum {string}
|
|
30834
30852
|
*/
|
|
30835
|
-
reason: "budget_exhausted" | "rate_limited";
|
|
30853
|
+
reason: "budget_exhausted" | "activity_window" | "rate_limited";
|
|
30836
30854
|
/** @description Whether the action was stopped. `false` is a warning: the action went through, and this record is the only lasting trace that it crossed a limit. Under the default `warn` posture every event is a warning, which is what makes reading this surface the point of running it. */
|
|
30837
30855
|
blocked: boolean;
|
|
30838
30856
|
/** @description The operation the caller was running when it breached. */
|