@curviate/sdk 0.24.3 → 0.25.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 +82 -1
- package/README.md +10 -0
- package/dist/index.d.ts +2107 -408
- package/dist/index.js +99 -4
- package/package.json +3 -1
- package/src/generated/types.ts +1988 -431
package/src/generated/types.ts
CHANGED
|
@@ -884,6 +884,8 @@ export interface paths {
|
|
|
884
884
|
/**
|
|
885
885
|
* Search chats
|
|
886
886
|
* @description Free-text search of the connected account's own inbox. Matches both participant names and message content. A no-match term returns an empty list, not an error.
|
|
887
|
+
*
|
|
888
|
+
* Served from the chats and messages already retrieved for this account, so it costs no platform call and draws down no budget. A chat that has never been retrieved cannot match. The `coverage` block on the response says how complete the searched corpus is.
|
|
887
889
|
*/
|
|
888
890
|
get: operations["getV1AccountIdChatsSearch"];
|
|
889
891
|
put?: never;
|
|
@@ -2279,7 +2281,7 @@ export interface paths {
|
|
|
2279
2281
|
};
|
|
2280
2282
|
/**
|
|
2281
2283
|
* Get a linked LinkedIn account
|
|
2282
|
-
* @description Return the metadata and current state for one connected account. Status is mapped to the stable whitelist: active | reconnect_needed | restricted | connecting.
|
|
2284
|
+
* @description Return the metadata and current state for one connected account. Status is mapped to the stable whitelist: active | reconnect_needed | restricted | connecting | disconnected.
|
|
2283
2285
|
*/
|
|
2284
2286
|
get: operations["getV1AccountsAccountId"];
|
|
2285
2287
|
put?: never;
|
|
@@ -2398,6 +2400,86 @@ export interface paths {
|
|
|
2398
2400
|
patch?: never;
|
|
2399
2401
|
trace?: never;
|
|
2400
2402
|
};
|
|
2403
|
+
"/v1/{account_id}/events": {
|
|
2404
|
+
parameters: {
|
|
2405
|
+
query?: never;
|
|
2406
|
+
header?: never;
|
|
2407
|
+
path?: never;
|
|
2408
|
+
cookie?: never;
|
|
2409
|
+
};
|
|
2410
|
+
/**
|
|
2411
|
+
* List the events received for an account
|
|
2412
|
+
* @description Returns the events Curviate received for this account in the last 24 hours, newest received first, with the exact payload a registered webhook would have been delivered. Events are retained whether or not any webhook is subscribed to them, so this works with no listener running. Retention is 24 hours from received_at and is absolute, and a live claim does not extend it. Disconnecting an account removes its events from this response immediately; the rows are not otherwise deleted early. Events can arrive out of order, so treat the ordering as arrival order, not causal order. Each item carries its queue state, and `state` filters on it: `done` is what your agents have already handled, `unread` is what is still waiting, `claimed` is what someone holds right now. This read claims nothing and is safe to poll. Page until cursor is null.
|
|
2413
|
+
*/
|
|
2414
|
+
get: operations["getV1AccountIdEvents"];
|
|
2415
|
+
put?: never;
|
|
2416
|
+
post?: never;
|
|
2417
|
+
delete?: never;
|
|
2418
|
+
options?: never;
|
|
2419
|
+
head?: never;
|
|
2420
|
+
patch?: never;
|
|
2421
|
+
trace?: never;
|
|
2422
|
+
};
|
|
2423
|
+
"/v1/{account_id}/events/claim": {
|
|
2424
|
+
parameters: {
|
|
2425
|
+
query?: never;
|
|
2426
|
+
header?: never;
|
|
2427
|
+
path?: never;
|
|
2428
|
+
cookie?: never;
|
|
2429
|
+
};
|
|
2430
|
+
get?: never;
|
|
2431
|
+
put?: never;
|
|
2432
|
+
/**
|
|
2433
|
+
* Claim events to work on
|
|
2434
|
+
* @description Leases up to `limit` unread events for this account and returns them, oldest `occurred_at` first, in one atomic step. Two agents claiming at the same instant never receive the same event, which a plain read plus a read flag cannot promise. Claiming when nothing is available returns an empty list and a 200. `consumer` is free text that identifies your worker. It is recorded on each event and never verified, so the lease is cooperative: it keeps your own agents from duplicating work, and it is not access control. Finish an event with the done call, or hand it back with release. If you do neither, the lease expires after `lease_seconds` (default 300, max 3600) and the event becomes claimable again. `limit` defaults to 10 and caps at 100. Ordering is arrival order, not causal order: events can arrive out of sequence, so establish causality from the payload if you need it. Retention is still 24 hours from `received_at` and a lease does not extend it, so an event can disappear while you hold it.
|
|
2435
|
+
*/
|
|
2436
|
+
post: operations["postV1AccountIdEventsClaim"];
|
|
2437
|
+
delete?: never;
|
|
2438
|
+
options?: never;
|
|
2439
|
+
head?: never;
|
|
2440
|
+
patch?: never;
|
|
2441
|
+
trace?: never;
|
|
2442
|
+
};
|
|
2443
|
+
"/v1/{account_id}/events/{event_id}/release": {
|
|
2444
|
+
parameters: {
|
|
2445
|
+
query?: never;
|
|
2446
|
+
header?: never;
|
|
2447
|
+
path?: never;
|
|
2448
|
+
cookie?: never;
|
|
2449
|
+
};
|
|
2450
|
+
get?: never;
|
|
2451
|
+
put?: never;
|
|
2452
|
+
/**
|
|
2453
|
+
* Release a claimed event
|
|
2454
|
+
* @description Hands a leased event back so it can be claimed again immediately, by you or by anyone else. Use it when your handler fails: returning the work is better than holding it for the rest of the lease. No request body. The caller is not checked against whoever claimed it, because the lease is cooperative rather than access control. Releasing an event that is already done changes nothing and returns state `done`.
|
|
2455
|
+
*/
|
|
2456
|
+
post: operations["postV1AccountIdEventsEventIdRelease"];
|
|
2457
|
+
delete?: never;
|
|
2458
|
+
options?: never;
|
|
2459
|
+
head?: never;
|
|
2460
|
+
patch?: never;
|
|
2461
|
+
trace?: never;
|
|
2462
|
+
};
|
|
2463
|
+
"/v1/{account_id}/events/{event_id}/done": {
|
|
2464
|
+
parameters: {
|
|
2465
|
+
query?: never;
|
|
2466
|
+
header?: never;
|
|
2467
|
+
path?: never;
|
|
2468
|
+
cookie?: never;
|
|
2469
|
+
};
|
|
2470
|
+
get?: never;
|
|
2471
|
+
put?: never;
|
|
2472
|
+
/**
|
|
2473
|
+
* Mark an event done
|
|
2474
|
+
* @description Marks an event handled. This is the only terminal state there is, and it is shared across every consumer under this tenant: a done event leaves the unread set for all of them, so it is the signal that the work is finished rather than a per-agent bookmark. There is no failed state. An event nothing can handle needs no special marking, it expires with the rest at 24 hours. No request body, safe to call twice, and it keeps the first completion time.
|
|
2475
|
+
*/
|
|
2476
|
+
post: operations["postV1AccountIdEventsEventIdDone"];
|
|
2477
|
+
delete?: never;
|
|
2478
|
+
options?: never;
|
|
2479
|
+
head?: never;
|
|
2480
|
+
patch?: never;
|
|
2481
|
+
trace?: never;
|
|
2482
|
+
};
|
|
2401
2483
|
"/v1/webhooks": {
|
|
2402
2484
|
parameters: {
|
|
2403
2485
|
query?: never;
|
|
@@ -2431,7 +2513,7 @@ export interface paths {
|
|
|
2431
2513
|
};
|
|
2432
2514
|
/**
|
|
2433
2515
|
* List webhook event types
|
|
2434
|
-
* @description Returns the complete canonical event catalogue (28 events) grouped by source: messaging (8), user (2), account_status (15), plus 3 tier-gated events.
|
|
2516
|
+
* @description Returns the complete canonical event catalogue (28 events) grouped by source: messaging (8), user (2), account_status (15), plus 3 tier-gated events. A local catalogue read: no platform call is made.
|
|
2435
2517
|
*/
|
|
2436
2518
|
get: operations["getV1WebhooksEvents"];
|
|
2437
2519
|
put?: never;
|
|
@@ -2490,6 +2572,50 @@ export interface paths {
|
|
|
2490
2572
|
patch: operations["patchV1WebhooksId"];
|
|
2491
2573
|
trace?: never;
|
|
2492
2574
|
};
|
|
2575
|
+
"/v1/{account_id}/safety-policy": {
|
|
2576
|
+
parameters: {
|
|
2577
|
+
query?: never;
|
|
2578
|
+
header?: never;
|
|
2579
|
+
path?: never;
|
|
2580
|
+
cookie?: never;
|
|
2581
|
+
};
|
|
2582
|
+
/**
|
|
2583
|
+
* Read an account's safety policy
|
|
2584
|
+
* @description Returns every configurable safety field for every budget row of one account, in a single response: the ceiling, the green and amber bands, the counting window, the enforcement posture and where it was inherited from, the activity window, warm-up state, the per-row character caps and search per-query cap, and how well calibrated each row's number is. Every value is seeded configuration and every one of them is settable. Where a configured value is above the Curviate default, the row carries an `over_default` entry naming the value, the default and the source class of that default. The response also carries `tenant_default_posture`, the workspace-wide default every account inherits, separately from this account's own effective `posture`, and `limit_profile`, which says which of the four Curviate default sets (`basic`, `premium`, `sales_navigator`, `recruiter`) every row below was resolved from, detected from the platform when the account connected. When the Curviate seat attached to this account disagrees with that, `seat_tier_mismatch` names the seat tier; the detected product wins the numbers either way.
|
|
2585
|
+
*/
|
|
2586
|
+
get: operations["getV1AccountIdSafetyPolicy"];
|
|
2587
|
+
put?: never;
|
|
2588
|
+
post?: never;
|
|
2589
|
+
delete?: never;
|
|
2590
|
+
options?: never;
|
|
2591
|
+
head?: never;
|
|
2592
|
+
/**
|
|
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. Four fields on the read are derived rather than configured: `effective_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, which for the zone is the top-level `timezone`. 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
|
+
*/
|
|
2596
|
+
patch: operations["patchV1AccountIdSafetyPolicy"];
|
|
2597
|
+
trace?: never;
|
|
2598
|
+
};
|
|
2599
|
+
"/v1/{account_id}/safety-events": {
|
|
2600
|
+
parameters: {
|
|
2601
|
+
query?: never;
|
|
2602
|
+
header?: never;
|
|
2603
|
+
path?: never;
|
|
2604
|
+
cookie?: never;
|
|
2605
|
+
};
|
|
2606
|
+
/**
|
|
2607
|
+
* List what Curviate refused or warned about
|
|
2608
|
+
* @description Returns this account's safety events, newest first: every action Curviate refused, and every action it let through while flagging that a limit had been crossed. Under the default posture nothing is refused, so everything here is a warning and `blocked` is how you tell the two apart. Each event names the budget row that breached, why, the operation that hit it and when. Filter by `budget_row` for one action type and by `since` / `until` for a period, and page until `cursor` is null. This is a read of what already happened, so it never changes a limit or a count: to change what is refused, update the safety policy. The account resource is the other half of the picture, reporting where each row stands right now rather than what has already been flagged.
|
|
2609
|
+
*/
|
|
2610
|
+
get: operations["getV1AccountIdSafetyEvents"];
|
|
2611
|
+
put?: never;
|
|
2612
|
+
post?: never;
|
|
2613
|
+
delete?: never;
|
|
2614
|
+
options?: never;
|
|
2615
|
+
head?: never;
|
|
2616
|
+
patch?: never;
|
|
2617
|
+
trace?: never;
|
|
2618
|
+
};
|
|
2493
2619
|
}
|
|
2494
2620
|
export type webhooks = Record<string, never>;
|
|
2495
2621
|
export interface components {
|
|
@@ -2524,6 +2650,26 @@ export interface components {
|
|
|
2524
2650
|
* @enum {string}
|
|
2525
2651
|
*/
|
|
2526
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: when this row's budget frees up, as an absolute instant rather than a duration, so it stays true however long you hold it. Null for the pending_invites row, whose backlog falls when invitations are accepted or withdrawn rather than at any window boundary, so there is no instant to name. */
|
|
2656
|
+
reset_at?: string | null;
|
|
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
|
+
hint?: {
|
|
2659
|
+
/** @description The settable parameter, for example profile_views.ceiling or posture. */
|
|
2660
|
+
parameter: string;
|
|
2661
|
+
/** @description One paragraph naming the condition and what changing that parameter would do. */
|
|
2662
|
+
message: string;
|
|
2663
|
+
};
|
|
2664
|
+
/**
|
|
2665
|
+
* @description Present on BUDGET_EXHAUSTED: which rule refused. ceiling means the row's configured limit is spent, and you wait until reset_at or raise it. activity_window means the account is outside the hours it works in, and reset_at is when the window next opens. The two need different fixes, so branch on this rather than on the message; hint.parameter already names the right setting for each.
|
|
2666
|
+
* @enum {string}
|
|
2667
|
+
*/
|
|
2668
|
+
reason?: "ceiling" | "activity_window";
|
|
2669
|
+
/** @description Present on BUDGET_EXHAUSTED, always true: the action did not happen and spent nothing. The same payload with blocked false rides the SUCCESS body of an account on the default warn posture, under safety_warning, and is otherwise field-identical, so one branch of your code handles both postures and moving an account to enforce is not a breaking change. */
|
|
2670
|
+
blocked?: boolean;
|
|
2671
|
+
/** @description Present alongside row: whole seconds until that row is usable again. This response carries no Retry-After header and no delay retry_hint, deliberately: a paused row can be paused for an hour, and a client that sleeps that inside the call hangs. Do not retry this row before the wait elapses; switch to other work instead. Seconds, not milliseconds. */
|
|
2672
|
+
retry_after?: number;
|
|
2527
2673
|
/** @description Present when a structured search filter value matched several filter options and one has to be picked (422 FILTER_CANDIDATES_REQUIRED). One entry per offending value, so a single retry can fix them all. A value that matched no option at all is not listed here and is not an error: it is sent on as an id and reported in notices[] on the 200. */
|
|
2528
2674
|
unresolved?: {
|
|
2529
2675
|
/** @description The request body field the value came from. Dotted for nested filters, for example author.company. */
|
|
@@ -2555,6 +2701,38 @@ export interface components {
|
|
|
2555
2701
|
value?: string;
|
|
2556
2702
|
}[];
|
|
2557
2703
|
};
|
|
2704
|
+
/**
|
|
2705
|
+
* @description Present on a successful response when this account crossed an account-safety ceiling while the affected budget row is on the default warn posture. The action still happened. Field-identical to the BUDGET_EXHAUSTED error body except that blocked is false, so one branch handles both postures and switching the account to enforce is a configuration change rather than a client rewrite.
|
|
2706
|
+
* @example {
|
|
2707
|
+
* "row": "profile_views",
|
|
2708
|
+
* "reset_at": "2026-09-05T00:00:00.000Z",
|
|
2709
|
+
* "hint": {
|
|
2710
|
+
* "parameter": "profile_views.ceiling",
|
|
2711
|
+
* "message": "This account is at its configured ceiling for profile_views."
|
|
2712
|
+
* },
|
|
2713
|
+
* "reason": "ceiling",
|
|
2714
|
+
* "blocked": false
|
|
2715
|
+
* }
|
|
2716
|
+
*/
|
|
2717
|
+
SafetyWarning: {
|
|
2718
|
+
/** @description The budget row that breached, for example profile_views or pending_invites. */
|
|
2719
|
+
row: string;
|
|
2720
|
+
/** @description When the row frees up, as an absolute instant. Null for the pending_invites gauge. */
|
|
2721
|
+
reset_at: string | null;
|
|
2722
|
+
hint: {
|
|
2723
|
+
/** @description The settable parameter on PATCH /v1/{account_id}/safety-policy. */
|
|
2724
|
+
parameter: string;
|
|
2725
|
+
/** @description What the condition is and what changing that parameter would do. */
|
|
2726
|
+
message: string;
|
|
2727
|
+
};
|
|
2728
|
+
/**
|
|
2729
|
+
* @description Which rule was crossed. ceiling means the row's configured limit is spent; activity_window means the account is outside the hours it works in, which is a different fact with a different remedy. hint.parameter names the right setting for each.
|
|
2730
|
+
* @enum {string}
|
|
2731
|
+
*/
|
|
2732
|
+
reason: "ceiling" | "activity_window";
|
|
2733
|
+
/** @description Always false here. True on the BUDGET_EXHAUSTED refusal carrying the same payload. */
|
|
2734
|
+
blocked: boolean;
|
|
2735
|
+
};
|
|
2558
2736
|
/** @description A message. `quoted` carries the message this one quotes, when it quotes one; a quoted message has the same shape and may itself carry a `quoted`. */
|
|
2559
2737
|
Message: {
|
|
2560
2738
|
/**
|
|
@@ -2644,6 +2822,10 @@ export interface operations {
|
|
|
2644
2822
|
query?: {
|
|
2645
2823
|
/** @description Which profile sections to fetch (repeatable, flat). Pass one or more of: linkedin_experience, linkedin_education, linkedin_languages, linkedin_skills, linkedin_certifications, linkedin_volunteer_experience, linkedin_projects, linkedin_recommendations, linkedin_interests (or linkedin_* for all), plus each value's _preview variant. Omit for base fields only. */
|
|
2646
2824
|
linkedin_sections?: string[];
|
|
2825
|
+
/** @description How willing this read is to reach LinkedIn. `auto` (default) serves a stored copy while it is within the resource's freshness threshold; `live` always fetches; `refill` serves a stored copy at any age and fetches once when this read has no stored copy yet; `cache_only` never fetches and returns NOT_STORED when nothing is stored. `cache_only` cannot be combined with max_age. A 502 under `cache_only` means the store could not be read, not that nothing is stored: no request was made to LinkedIn, and the same read is worth retrying. */
|
|
2826
|
+
mode?: "live" | "auto" | "refill" | "cache_only";
|
|
2827
|
+
/** @description Maximum age, in seconds, of a stored copy this read will accept. Overrides the `auto`, `live` and `refill` presets in both directions; `0` is the same as `mode=live`. Not accepted with `mode=cache_only`, whose guarantee is not a freshness threshold. */
|
|
2828
|
+
max_age?: number;
|
|
2647
2829
|
};
|
|
2648
2830
|
header?: never;
|
|
2649
2831
|
path: {
|
|
@@ -2661,6 +2843,8 @@ export interface operations {
|
|
|
2661
2843
|
headers: {
|
|
2662
2844
|
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
2663
2845
|
RateLimit: components["headers"]["RateLimit"];
|
|
2846
|
+
/** @description Seconds since this data was observed on LinkedIn. Present only when source is `store`; a live fetch sets no Age header at all. */
|
|
2847
|
+
Age?: number;
|
|
2664
2848
|
[name: string]: unknown;
|
|
2665
2849
|
};
|
|
2666
2850
|
content: {
|
|
@@ -3151,10 +3335,22 @@ export interface operations {
|
|
|
3151
3335
|
/** @description Section names that were requested but throttled by LinkedIn. */
|
|
3152
3336
|
throttled_sections?: string[];
|
|
3153
3337
|
};
|
|
3338
|
+
/** @description ISO-8601 timestamp for when this data was observed on LinkedIn. On a live fetch this is the time of the fetch; on a stored answer it is when the data was actually seen, not when you asked for it. */
|
|
3339
|
+
observed_at: string;
|
|
3340
|
+
/**
|
|
3341
|
+
* @description Whether this answer came from Curviate's stored copy or from a fresh LinkedIn fetch. A stored answer costs the connected account nothing and is never surfaced to the person being read. It also carries less: fields Curviate does not retain (message bodies, notes, attachments, third-party contact details) are only ever present on a live fetch. Pass mode=live when you need them.
|
|
3342
|
+
* @enum {string}
|
|
3343
|
+
*/
|
|
3344
|
+
source: "store" | "live";
|
|
3345
|
+
/** @description Whether LinkedIn has told us this resource no longer exists, such as a removed profile. When true, the answer above is the copy Curviate still holds and must not be treated as current. Always present; false is the normal case. */
|
|
3346
|
+
withdrawn: boolean;
|
|
3347
|
+
/** @description ISO-8601 timestamp for when a fetch MOST RECENTLY found this resource gone on LinkedIn. Every later fetch that finds it gone again moves it. Present only when withdrawn is true. */
|
|
3348
|
+
withdrawn_at?: string;
|
|
3349
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
3154
3350
|
};
|
|
3155
3351
|
};
|
|
3156
3352
|
};
|
|
3157
|
-
/** @description
|
|
3353
|
+
/** @description Either a query param failed validation (the error details name the field), or the platform rejected the request for this target profile: The request was rejected as invalid. In the latter case the linkedin_sections value is not at fault, and the same request may succeed on another profile. INVALID_REQUEST also covers `mode=cache_only` sent together with `max_age`: that mode never reaches LinkedIn at any age, so a freshness threshold cannot change its answer, and the pair is refused rather than one of the two being ignored. Drop `max_age`, or use `mode=refill` (stored at any age, fetch only when nothing is stored). */
|
|
3158
3354
|
400: {
|
|
3159
3355
|
headers: {
|
|
3160
3356
|
[name: string]: unknown;
|
|
@@ -3190,7 +3386,7 @@ export interface operations {
|
|
|
3190
3386
|
"application/json": components["schemas"]["Error"];
|
|
3191
3387
|
};
|
|
3192
3388
|
};
|
|
3193
|
-
/** @description The account is restricted and cannot be queried. */
|
|
3389
|
+
/** @description The account is restricted and cannot be queried (ACCOUNT_RESTRICTED). Nothing is stored for this resource and `mode=cache_only` never fetches (NOT_STORED). Not the same as a 404: the resource may exist, and this API holds no copy of it. Re-read with `mode=refill` or `mode=auto` to fetch it. */
|
|
3194
3390
|
422: {
|
|
3195
3391
|
headers: {
|
|
3196
3392
|
[name: string]: unknown;
|
|
@@ -3220,7 +3416,7 @@ export interface operations {
|
|
|
3220
3416
|
"application/json": components["schemas"]["Error"];
|
|
3221
3417
|
};
|
|
3222
3418
|
};
|
|
3223
|
-
/** @description A temporary error occurred. Please try again. */
|
|
3419
|
+
/** @description A temporary error occurred. Please try again. Under `mode=cache_only` this specifically means the stored copy could not be read: no request was made to LinkedIn, and the same read is worth retrying. */
|
|
3224
3420
|
502: {
|
|
3225
3421
|
headers: {
|
|
3226
3422
|
[name: string]: unknown;
|
|
@@ -3315,6 +3511,7 @@ export interface operations {
|
|
|
3315
3511
|
* @enum {string}
|
|
3316
3512
|
*/
|
|
3317
3513
|
object: "user_updated";
|
|
3514
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
3318
3515
|
} & {
|
|
3319
3516
|
[key: string]: unknown;
|
|
3320
3517
|
};
|
|
@@ -3486,6 +3683,7 @@ export interface operations {
|
|
|
3486
3683
|
}[];
|
|
3487
3684
|
/** @description Next-page cursor; null on the last page. */
|
|
3488
3685
|
cursor?: string | null;
|
|
3686
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
3489
3687
|
};
|
|
3490
3688
|
};
|
|
3491
3689
|
};
|
|
@@ -3612,6 +3810,7 @@ export interface operations {
|
|
|
3612
3810
|
/** @description Remaining InMail credits on a Sales Navigator seat, or null if not subscribed. */
|
|
3613
3811
|
sales_navigator: number | null;
|
|
3614
3812
|
};
|
|
3813
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
3615
3814
|
};
|
|
3616
3815
|
};
|
|
3617
3816
|
};
|
|
@@ -3727,6 +3926,7 @@ export interface operations {
|
|
|
3727
3926
|
* @enum {string}
|
|
3728
3927
|
*/
|
|
3729
3928
|
object: "skill_endorsed";
|
|
3929
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
3730
3930
|
};
|
|
3731
3931
|
};
|
|
3732
3932
|
};
|
|
@@ -3923,6 +4123,7 @@ export interface operations {
|
|
|
3923
4123
|
};
|
|
3924
4124
|
/** @description Always null for this resource; the full administered set returns in one page. */
|
|
3925
4125
|
cursor: string | null;
|
|
4126
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
3926
4127
|
};
|
|
3927
4128
|
};
|
|
3928
4129
|
};
|
|
@@ -4085,6 +4286,7 @@ export interface operations {
|
|
|
4085
4286
|
actions: {
|
|
4086
4287
|
[key: string]: string;
|
|
4087
4288
|
};
|
|
4289
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
4088
4290
|
};
|
|
4089
4291
|
};
|
|
4090
4292
|
};
|
|
@@ -4227,6 +4429,7 @@ export interface operations {
|
|
|
4227
4429
|
/** @description Trend magnitude in percent (direction is a client-rendered icon absent from the source, so magnitude only). */
|
|
4228
4430
|
change_pct_magnitude: number | null;
|
|
4229
4431
|
};
|
|
4432
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
4230
4433
|
};
|
|
4231
4434
|
};
|
|
4232
4435
|
};
|
|
@@ -4369,6 +4572,7 @@ export interface operations {
|
|
|
4369
4572
|
}[];
|
|
4370
4573
|
/** @description Opaque cursor for the next page; null when the list is known-exhausted. A non-null cursor means more may exist, keep paging (zero individuals on a page is not exhaustion). There is no total (the upstream total is unreliable). */
|
|
4371
4574
|
cursor: string | null;
|
|
4575
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
4372
4576
|
};
|
|
4373
4577
|
};
|
|
4374
4578
|
};
|
|
@@ -4498,6 +4702,7 @@ export interface operations {
|
|
|
4498
4702
|
active_seat: boolean;
|
|
4499
4703
|
/** @description Freshness watermark (epoch ms). Treat 0/null as "no watermark / computed on read", not a 1970 date. */
|
|
4500
4704
|
calculated_at: number | null;
|
|
4705
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
4501
4706
|
};
|
|
4502
4707
|
};
|
|
4503
4708
|
};
|
|
@@ -4651,6 +4856,7 @@ export interface operations {
|
|
|
4651
4856
|
}[];
|
|
4652
4857
|
/** @description Next-page cursor; null on the last page. */
|
|
4653
4858
|
cursor?: string | null;
|
|
4859
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
4654
4860
|
};
|
|
4655
4861
|
};
|
|
4656
4862
|
};
|
|
@@ -4804,6 +5010,7 @@ export interface operations {
|
|
|
4804
5010
|
}[];
|
|
4805
5011
|
/** @description Next-page cursor; null on the last page. */
|
|
4806
5012
|
cursor?: string | null;
|
|
5013
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
4807
5014
|
};
|
|
4808
5015
|
};
|
|
4809
5016
|
};
|
|
@@ -5078,6 +5285,7 @@ export interface operations {
|
|
|
5078
5285
|
* @enum {string}
|
|
5079
5286
|
*/
|
|
5080
5287
|
object: "user_unfollowed";
|
|
5288
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
5081
5289
|
};
|
|
5082
5290
|
};
|
|
5083
5291
|
};
|
|
@@ -5272,6 +5480,18 @@ export interface operations {
|
|
|
5272
5480
|
/** @description Average employee tenure, in years. */
|
|
5273
5481
|
average_tenure?: number;
|
|
5274
5482
|
};
|
|
5483
|
+
/** @description ISO-8601 timestamp for when this data was observed on LinkedIn. On a live fetch this is the time of the fetch; on a stored answer it is when the data was actually seen, not when you asked for it. */
|
|
5484
|
+
observed_at: string;
|
|
5485
|
+
/**
|
|
5486
|
+
* @description Whether this answer came from Curviate's stored copy or from a fresh LinkedIn fetch. A stored answer costs the connected account nothing and is never surfaced to the person being read. It also carries less: fields Curviate does not retain (message bodies, notes, attachments, third-party contact details) are only ever present on a live fetch. Pass mode=live when you need them.
|
|
5487
|
+
* @enum {string}
|
|
5488
|
+
*/
|
|
5489
|
+
source: "store" | "live";
|
|
5490
|
+
/** @description Whether LinkedIn has told us this resource no longer exists, such as a removed profile. When true, the answer above is the copy Curviate still holds and must not be treated as current. Always present; false is the normal case. */
|
|
5491
|
+
withdrawn: boolean;
|
|
5492
|
+
/** @description ISO-8601 timestamp for when a fetch MOST RECENTLY found this resource gone on LinkedIn. Every later fetch that finds it gone again moves it. Present only when withdrawn is true. */
|
|
5493
|
+
withdrawn_at?: string;
|
|
5494
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
5275
5495
|
};
|
|
5276
5496
|
};
|
|
5277
5497
|
};
|
|
@@ -5462,6 +5682,7 @@ export interface operations {
|
|
|
5462
5682
|
/** @description The offending value. */
|
|
5463
5683
|
value?: string;
|
|
5464
5684
|
}[];
|
|
5685
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
5465
5686
|
};
|
|
5466
5687
|
};
|
|
5467
5688
|
};
|
|
@@ -5636,11 +5857,26 @@ export interface operations {
|
|
|
5636
5857
|
repost_count: number;
|
|
5637
5858
|
}[];
|
|
5638
5859
|
paging: {
|
|
5639
|
-
/** @description
|
|
5860
|
+
/** @description Always null. This list runs on the post search, which no longer reports how many posts match, so there is no total to page toward; walk the pages with cursor until it comes back null. */
|
|
5640
5861
|
total_count: number | null;
|
|
5641
5862
|
};
|
|
5642
5863
|
/** @description Opaque cursor for the next page, or null when there are no more results. */
|
|
5643
5864
|
cursor: string | null;
|
|
5865
|
+
/** @description Present only when there is something to report about this page, for example that this page is short because the walk stopped fetching upstream pages after hitting the page cap, not because the results ran out; more results wait behind the cursor (a null cursor is the only reliable end-of-results signal). Absent when there is nothing to report. */
|
|
5866
|
+
notices?: {
|
|
5867
|
+
/**
|
|
5868
|
+
* @description FILTER_VALUE_UNRESOLVED: the value matched no known filter option, so it was sent on as an id we could not check. FILTER_VALUE_UNCHECKED: the value already looked like an id, so it was never looked up, and this page came back empty. SOME_RESULTS_HIDDEN: some people on this page were not disclosed to the connected account, so those entries cannot be read back. ALL_RESULTS_HIDDEN: none of the people on this page were disclosed, so the page yielded nothing you can act on, even when more pages follow. PAGE_TRUNCATED: this page is short because the search stopped fetching upstream pages, not because the results ran out; follow cursor, and treat only a null cursor as the end. Branch on this rather than on message.
|
|
5869
|
+
* @enum {string}
|
|
5870
|
+
*/
|
|
5871
|
+
code: "FILTER_VALUE_UNRESOLVED" | "FILTER_VALUE_UNCHECKED" | "SOME_RESULTS_HIDDEN" | "ALL_RESULTS_HIDDEN" | "PAGE_TRUNCATED";
|
|
5872
|
+
/** @description One sentence explaining the condition and how to resolve it. */
|
|
5873
|
+
message: string;
|
|
5874
|
+
/** @description The request field the notice is about, dotted for nested filters. */
|
|
5875
|
+
field?: string;
|
|
5876
|
+
/** @description The offending value. */
|
|
5877
|
+
value?: string;
|
|
5878
|
+
}[];
|
|
5879
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
5644
5880
|
};
|
|
5645
5881
|
};
|
|
5646
5882
|
};
|
|
@@ -5820,6 +6056,7 @@ export interface operations {
|
|
|
5820
6056
|
};
|
|
5821
6057
|
/** @description Opaque cursor for the next page, or null when there are no more results. */
|
|
5822
6058
|
cursor: string | null;
|
|
6059
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
5823
6060
|
};
|
|
5824
6061
|
};
|
|
5825
6062
|
};
|
|
@@ -5977,6 +6214,7 @@ export interface operations {
|
|
|
5977
6214
|
message?: string;
|
|
5978
6215
|
} | null;
|
|
5979
6216
|
}[];
|
|
6217
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
5980
6218
|
};
|
|
5981
6219
|
};
|
|
5982
6220
|
};
|
|
@@ -6143,6 +6381,7 @@ export interface operations {
|
|
|
6143
6381
|
}[];
|
|
6144
6382
|
/** @description Opaque cursor for the next page, or null at end-of-list. */
|
|
6145
6383
|
cursor: string | null;
|
|
6384
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
6146
6385
|
};
|
|
6147
6386
|
};
|
|
6148
6387
|
};
|
|
@@ -6290,6 +6529,7 @@ export interface operations {
|
|
|
6290
6529
|
}[];
|
|
6291
6530
|
/** @description Opaque cursor for the next page, or null when exhausted. */
|
|
6292
6531
|
cursor: string | null;
|
|
6532
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
6293
6533
|
};
|
|
6294
6534
|
};
|
|
6295
6535
|
};
|
|
@@ -6484,6 +6724,7 @@ export interface operations {
|
|
|
6484
6724
|
/** @description The expansion the notice is about, here public_identifier. */
|
|
6485
6725
|
value?: string;
|
|
6486
6726
|
}[];
|
|
6727
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
6487
6728
|
};
|
|
6488
6729
|
};
|
|
6489
6730
|
};
|
|
@@ -6666,6 +6907,7 @@ export interface operations {
|
|
|
6666
6907
|
/** @description The expansion the notice is about, here public_identifier. */
|
|
6667
6908
|
value?: string;
|
|
6668
6909
|
}[];
|
|
6910
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
6669
6911
|
};
|
|
6670
6912
|
};
|
|
6671
6913
|
};
|
|
@@ -6841,6 +7083,7 @@ export interface operations {
|
|
|
6841
7083
|
/** @description The expansion the notice is about, here public_identifier. */
|
|
6842
7084
|
value?: string;
|
|
6843
7085
|
}[];
|
|
7086
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
6844
7087
|
};
|
|
6845
7088
|
};
|
|
6846
7089
|
};
|
|
@@ -6986,11 +7229,11 @@ export interface operations {
|
|
|
6986
7229
|
* @description Response type discriminator.
|
|
6987
7230
|
* @enum {string}
|
|
6988
7231
|
*/
|
|
6989
|
-
object
|
|
6990
|
-
/** @description The sent message's identifier. */
|
|
6991
|
-
message_id
|
|
7232
|
+
object: "message_sent";
|
|
7233
|
+
/** @description The sent message's identifier. Null when no message was actually sent, and an array when the message was delivered as several messages, one per attachment. */
|
|
7234
|
+
message_id: string | string[] | null;
|
|
6992
7235
|
/** @description The identity this message was actually sent as. */
|
|
6993
|
-
sent_as
|
|
7236
|
+
sent_as: {
|
|
6994
7237
|
/**
|
|
6995
7238
|
* @description Which identity sent the message.
|
|
6996
7239
|
* @enum {string}
|
|
@@ -7001,6 +7244,7 @@ export interface operations {
|
|
|
7001
7244
|
/** @description Company inboxes only. The page's display name, or null in the rare case the page itself could not be resolved at all. */
|
|
7002
7245
|
name?: string | null;
|
|
7003
7246
|
};
|
|
7247
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
7004
7248
|
};
|
|
7005
7249
|
};
|
|
7006
7250
|
};
|
|
@@ -7182,6 +7426,7 @@ export interface operations {
|
|
|
7182
7426
|
/** @description The expansion the notice is about, here public_identifier. */
|
|
7183
7427
|
value?: string;
|
|
7184
7428
|
}[];
|
|
7429
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
7185
7430
|
};
|
|
7186
7431
|
};
|
|
7187
7432
|
};
|
|
@@ -7387,6 +7632,7 @@ export interface operations {
|
|
|
7387
7632
|
/** @description The expansion the notice is about, here public_identifier. */
|
|
7388
7633
|
value?: string;
|
|
7389
7634
|
}[];
|
|
7635
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
7390
7636
|
};
|
|
7391
7637
|
};
|
|
7392
7638
|
};
|
|
@@ -7579,6 +7825,7 @@ export interface operations {
|
|
|
7579
7825
|
};
|
|
7580
7826
|
/** @description Opaque cursor for the next page; null when the enumeration is exhausted. */
|
|
7581
7827
|
cursor: string | null;
|
|
7828
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
7582
7829
|
};
|
|
7583
7830
|
};
|
|
7584
7831
|
};
|
|
@@ -7743,6 +7990,18 @@ export interface operations {
|
|
|
7743
7990
|
invitation_level: string | null;
|
|
7744
7991
|
/** @description Up to ~12 sampled member ids, a partial sample, possibly empty. */
|
|
7745
7992
|
sample_past_members: string[];
|
|
7993
|
+
/** @description ISO-8601 timestamp for when this data was observed on LinkedIn. On a live fetch this is the time of the fetch; on a stored answer it is when the data was actually seen, not when you asked for it. */
|
|
7994
|
+
observed_at: string;
|
|
7995
|
+
/**
|
|
7996
|
+
* @description Whether this answer came from Curviate's stored copy or from a fresh LinkedIn fetch. A stored answer costs the connected account nothing and is never surfaced to the person being read. It also carries less: fields Curviate does not retain (message bodies, notes, attachments, third-party contact details) are only ever present on a live fetch. Pass mode=live when you need them.
|
|
7997
|
+
* @enum {string}
|
|
7998
|
+
*/
|
|
7999
|
+
source: "store" | "live";
|
|
8000
|
+
/** @description Whether LinkedIn has told us this resource no longer exists, such as a removed profile. When true, the answer above is the copy Curviate still holds and must not be treated as current. Always present; false is the normal case. */
|
|
8001
|
+
withdrawn: boolean;
|
|
8002
|
+
/** @description ISO-8601 timestamp for when a fetch MOST RECENTLY found this resource gone on LinkedIn. Every later fetch that finds it gone again moves it. Present only when withdrawn is true. */
|
|
8003
|
+
withdrawn_at?: string;
|
|
8004
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
7746
8005
|
};
|
|
7747
8006
|
};
|
|
7748
8007
|
};
|
|
@@ -7905,6 +8164,7 @@ export interface operations {
|
|
|
7905
8164
|
};
|
|
7906
8165
|
/** @description Opaque cursor for the next page; null on the last page. */
|
|
7907
8166
|
cursor: string | null;
|
|
8167
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
7908
8168
|
};
|
|
7909
8169
|
};
|
|
7910
8170
|
};
|
|
@@ -8038,6 +8298,7 @@ export interface operations {
|
|
|
8038
8298
|
}[];
|
|
8039
8299
|
/** @description Opaque pagination cursor for the next page, or null when this is the last page. */
|
|
8040
8300
|
cursor: string | null;
|
|
8301
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
8041
8302
|
};
|
|
8042
8303
|
};
|
|
8043
8304
|
};
|
|
@@ -8258,6 +8519,7 @@ export interface operations {
|
|
|
8258
8519
|
/** @description The offending value. */
|
|
8259
8520
|
value?: string;
|
|
8260
8521
|
}[];
|
|
8522
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
8261
8523
|
};
|
|
8262
8524
|
};
|
|
8263
8525
|
};
|
|
@@ -8436,7 +8698,7 @@ export interface operations {
|
|
|
8436
8698
|
}[];
|
|
8437
8699
|
/** @description Paging metadata. */
|
|
8438
8700
|
paging: {
|
|
8439
|
-
/** @description
|
|
8701
|
+
/** @description Always null on this search. LinkedIn stopped reporting how many results match, so there is no total to page toward; walk the pages with cursor until it comes back null. A short or empty page is not the end: only a null cursor is. */
|
|
8440
8702
|
total_count: number | null;
|
|
8441
8703
|
};
|
|
8442
8704
|
/** @description Opaque next-page cursor; null on the last page. */
|
|
@@ -8455,6 +8717,7 @@ export interface operations {
|
|
|
8455
8717
|
/** @description The offending value. */
|
|
8456
8718
|
value?: string;
|
|
8457
8719
|
}[];
|
|
8720
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
8458
8721
|
};
|
|
8459
8722
|
};
|
|
8460
8723
|
};
|
|
@@ -8681,7 +8944,7 @@ export interface operations {
|
|
|
8681
8944
|
}[];
|
|
8682
8945
|
/** @description Paging metadata. */
|
|
8683
8946
|
paging: {
|
|
8684
|
-
/** @description
|
|
8947
|
+
/** @description Always null on this search. LinkedIn stopped reporting how many results match, so there is no total to page toward; walk the pages with cursor until it comes back null. A short or empty page is not the end: only a null cursor is. */
|
|
8685
8948
|
total_count: number | null;
|
|
8686
8949
|
};
|
|
8687
8950
|
/** @description Opaque next-page cursor; null on the last page. */
|
|
@@ -8700,6 +8963,7 @@ export interface operations {
|
|
|
8700
8963
|
/** @description The offending value. */
|
|
8701
8964
|
value?: string;
|
|
8702
8965
|
}[];
|
|
8966
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
8703
8967
|
};
|
|
8704
8968
|
};
|
|
8705
8969
|
};
|
|
@@ -8964,6 +9228,7 @@ export interface operations {
|
|
|
8964
9228
|
/** @description The offending value. */
|
|
8965
9229
|
value?: string;
|
|
8966
9230
|
}[];
|
|
9231
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
8967
9232
|
};
|
|
8968
9233
|
};
|
|
8969
9234
|
};
|
|
@@ -9248,11 +9513,12 @@ export interface operations {
|
|
|
9248
9513
|
})[];
|
|
9249
9514
|
/** @description Paging metadata. */
|
|
9250
9515
|
paging: {
|
|
9251
|
-
/** @description
|
|
9516
|
+
/** @description Present only when LinkedIn reports a total for the kind of search the pasted URL names, and null whenever it does not. Never treat it as the has-more signal or as an exact figure; page with cursor until that comes back null. */
|
|
9252
9517
|
total_count: number | null;
|
|
9253
9518
|
};
|
|
9254
9519
|
/** @description Opaque next-page cursor; null on the last page. */
|
|
9255
9520
|
cursor: string | null;
|
|
9521
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
9256
9522
|
};
|
|
9257
9523
|
};
|
|
9258
9524
|
};
|
|
@@ -9407,6 +9673,7 @@ export interface operations {
|
|
|
9407
9673
|
}[];
|
|
9408
9674
|
/** @description Opaque next-page cursor; null on the last page. */
|
|
9409
9675
|
cursor: string | null;
|
|
9676
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
9410
9677
|
};
|
|
9411
9678
|
};
|
|
9412
9679
|
};
|
|
@@ -9594,6 +9861,7 @@ export interface operations {
|
|
|
9594
9861
|
/** @description The offending value. */
|
|
9595
9862
|
value?: string;
|
|
9596
9863
|
}[];
|
|
9864
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
9597
9865
|
};
|
|
9598
9866
|
};
|
|
9599
9867
|
};
|
|
@@ -9743,6 +10011,7 @@ export interface operations {
|
|
|
9743
10011
|
}[];
|
|
9744
10012
|
/** @description Opaque pagination cursor for the next page, or null when this is the last page. */
|
|
9745
10013
|
cursor: string | null;
|
|
10014
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
9746
10015
|
};
|
|
9747
10016
|
};
|
|
9748
10017
|
};
|
|
@@ -10010,6 +10279,7 @@ export interface operations {
|
|
|
10010
10279
|
/** @description The expansion the notice is about, here public_identifier. */
|
|
10011
10280
|
value?: string;
|
|
10012
10281
|
}[];
|
|
10282
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
10013
10283
|
};
|
|
10014
10284
|
};
|
|
10015
10285
|
};
|
|
@@ -10155,11 +10425,12 @@ export interface operations {
|
|
|
10155
10425
|
* @description Response type discriminator.
|
|
10156
10426
|
* @enum {string}
|
|
10157
10427
|
*/
|
|
10158
|
-
object
|
|
10428
|
+
object: "chat_started";
|
|
10159
10429
|
/** @description The chat's identifier (existing thread reused when messaging a known 1:1 contact). */
|
|
10160
|
-
chat_id
|
|
10161
|
-
/** @description The opening message identifier. */
|
|
10162
|
-
message_id
|
|
10430
|
+
chat_id: string;
|
|
10431
|
+
/** @description The opening message identifier. Null when no message was actually sent, and an array when the message was delivered as several messages, one per attachment. Confirm the send with chat_id, which is always present. */
|
|
10432
|
+
message_id: string | string[] | null;
|
|
10433
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
10163
10434
|
};
|
|
10164
10435
|
};
|
|
10165
10436
|
};
|
|
@@ -10272,6 +10543,10 @@ export interface operations {
|
|
|
10272
10543
|
query?: {
|
|
10273
10544
|
/** @description Additional response fields to resolve, comma-separated in a single value (for example expand=public_identifier). Accepted values: public_identifier. When requested, the field is present on every user object in the response, carrying either a value or null. Omit for the base fields only. Pass the parameter once; repeating it drops values. At most 25 people per request need an extra lookup to resolve; anyone beyond that carries null, so ask for a smaller page to resolve them all. */
|
|
10274
10545
|
expand?: string;
|
|
10546
|
+
/** @description How willing this read is to reach LinkedIn. `auto` (default) serves a stored copy while it is within the resource's freshness threshold; `live` always fetches; `refill` serves a stored copy at any age and fetches once when this read has no stored copy yet; `cache_only` never fetches and returns NOT_STORED when nothing is stored. `cache_only` cannot be combined with max_age. A 502 under `cache_only` means the store could not be read, not that nothing is stored: no request was made to LinkedIn, and the same read is worth retrying. */
|
|
10547
|
+
mode?: "live" | "auto" | "refill" | "cache_only";
|
|
10548
|
+
/** @description Maximum age, in seconds, of a stored copy this read will accept. Overrides the `auto`, `live` and `refill` presets in both directions; `0` is the same as `mode=live`. Not accepted with `mode=cache_only`, whose guarantee is not a freshness threshold. */
|
|
10549
|
+
max_age?: number;
|
|
10275
10550
|
};
|
|
10276
10551
|
header?: never;
|
|
10277
10552
|
path: {
|
|
@@ -10284,11 +10559,13 @@ export interface operations {
|
|
|
10284
10559
|
};
|
|
10285
10560
|
requestBody?: never;
|
|
10286
10561
|
responses: {
|
|
10287
|
-
/** @description The chat's metadata and most-recent message. */
|
|
10562
|
+
/** @description The chat's metadata and most-recent message. `source` says whether it came from Curviate's stored copy or from a fresh fetch, and `observed_at` says when it was seen; a stored answer also carries an `Age` header. */
|
|
10288
10563
|
200: {
|
|
10289
10564
|
headers: {
|
|
10290
10565
|
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
10291
10566
|
RateLimit: components["headers"]["RateLimit"];
|
|
10567
|
+
/** @description Seconds since this data was observed on LinkedIn. Present only when source is `store`; a live fetch sets no Age header at all. */
|
|
10568
|
+
Age?: number;
|
|
10292
10569
|
[name: string]: unknown;
|
|
10293
10570
|
};
|
|
10294
10571
|
content: {
|
|
@@ -10424,9 +10701,30 @@ export interface operations {
|
|
|
10424
10701
|
/** @description The expansion the notice is about, here public_identifier. */
|
|
10425
10702
|
value?: string;
|
|
10426
10703
|
}[];
|
|
10704
|
+
/** @description ISO-8601 timestamp for when this data was observed on LinkedIn. On a live fetch this is the time of the fetch; on a stored answer it is when the data was actually seen, not when you asked for it. */
|
|
10705
|
+
observed_at: string;
|
|
10706
|
+
/**
|
|
10707
|
+
* @description Whether this answer came from Curviate's stored copy or from a fresh LinkedIn fetch. A stored answer costs the connected account nothing and is never surfaced to the person being read. It also carries less: fields Curviate does not retain (message bodies, notes, attachments, third-party contact details) are only ever present on a live fetch. Pass mode=live when you need them.
|
|
10708
|
+
* @enum {string}
|
|
10709
|
+
*/
|
|
10710
|
+
source: "store" | "live";
|
|
10711
|
+
/** @description Whether LinkedIn has told us this resource no longer exists, such as a removed profile. When true, the answer above is the copy Curviate still holds and must not be treated as current. Always present; false is the normal case. */
|
|
10712
|
+
withdrawn: boolean;
|
|
10713
|
+
/** @description ISO-8601 timestamp for when a fetch MOST RECENTLY found this resource gone on LinkedIn. Every later fetch that finds it gone again moves it. Present only when withdrawn is true. */
|
|
10714
|
+
withdrawn_at?: string;
|
|
10715
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
10427
10716
|
};
|
|
10428
10717
|
};
|
|
10429
10718
|
};
|
|
10719
|
+
/** @description A query parameter failed validation. INVALID_REQUEST also covers `mode=cache_only` sent together with `max_age`: that mode never reaches LinkedIn at any age, so a freshness threshold cannot change its answer, and the pair is refused rather than one of the two being ignored. Either parameter sent more than once is refused for the same reason, in either order. */
|
|
10720
|
+
400: {
|
|
10721
|
+
headers: {
|
|
10722
|
+
[name: string]: unknown;
|
|
10723
|
+
};
|
|
10724
|
+
content: {
|
|
10725
|
+
"application/json": components["schemas"]["Error"];
|
|
10726
|
+
};
|
|
10727
|
+
};
|
|
10430
10728
|
/** @description Missing or invalid API key. */
|
|
10431
10729
|
401: {
|
|
10432
10730
|
headers: {
|
|
@@ -10445,6 +10743,15 @@ export interface operations {
|
|
|
10445
10743
|
"application/json": components["schemas"]["Error"];
|
|
10446
10744
|
};
|
|
10447
10745
|
};
|
|
10746
|
+
/** @description Nothing is stored for this chat and `mode=cache_only` never fetches (NOT_STORED). Not the same as a 404: the chat may exist, and this API holds no copy of it. Re-read with `mode=refill` or `mode=auto` to fetch it. */
|
|
10747
|
+
422: {
|
|
10748
|
+
headers: {
|
|
10749
|
+
[name: string]: unknown;
|
|
10750
|
+
};
|
|
10751
|
+
content: {
|
|
10752
|
+
"application/json": components["schemas"]["Error"];
|
|
10753
|
+
};
|
|
10754
|
+
};
|
|
10448
10755
|
/** @description Rate limited. */
|
|
10449
10756
|
429: {
|
|
10450
10757
|
headers: {
|
|
@@ -10466,7 +10773,7 @@ export interface operations {
|
|
|
10466
10773
|
"application/json": components["schemas"]["Error"];
|
|
10467
10774
|
};
|
|
10468
10775
|
};
|
|
10469
|
-
/** @description A temporary error occurred. Please try again. */
|
|
10776
|
+
/** @description A temporary error occurred. Please try again. Under `mode=cache_only` this specifically means the stored copy could not be read: no request was made to LinkedIn, and the same read is worth retrying. */
|
|
10470
10777
|
502: {
|
|
10471
10778
|
headers: {
|
|
10472
10779
|
[name: string]: unknown;
|
|
@@ -10534,6 +10841,7 @@ export interface operations {
|
|
|
10534
10841
|
chat_id?: string;
|
|
10535
10842
|
/** @description The applied read status. */
|
|
10536
10843
|
read?: boolean;
|
|
10844
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
10537
10845
|
};
|
|
10538
10846
|
};
|
|
10539
10847
|
};
|
|
@@ -10626,6 +10934,10 @@ export interface operations {
|
|
|
10626
10934
|
getV1AccountIdChatsChatIdMessages: {
|
|
10627
10935
|
parameters: {
|
|
10628
10936
|
query?: {
|
|
10937
|
+
/** @description How willing this read is to reach LinkedIn. `auto` (default) serves a stored copy while it is within the resource's freshness threshold; `live` always fetches; `refill` serves a stored copy at any age and fetches once when this read has no stored copy yet; `cache_only` never fetches and returns NOT_STORED when nothing is stored. `cache_only` cannot be combined with max_age. A 502 under `cache_only` means the store could not be read, not that nothing is stored: no request was made to LinkedIn, and the same read is worth retrying. */
|
|
10938
|
+
mode?: "live" | "auto" | "refill" | "cache_only";
|
|
10939
|
+
/** @description Maximum age, in seconds, of a stored copy this read will accept. Overrides the `auto`, `live` and `refill` presets in both directions; `0` is the same as `mode=live`. Not accepted with `mode=cache_only`, whose guarantee is not a freshness threshold. */
|
|
10940
|
+
max_age?: number;
|
|
10629
10941
|
/** @description Optional filter: only return messages from this sender ID. */
|
|
10630
10942
|
user_id?: string;
|
|
10631
10943
|
/** @description ISO-8601 UTC datetime (exclusive upper bound). Only entries before this time are returned. */
|
|
@@ -10650,11 +10962,13 @@ export interface operations {
|
|
|
10650
10962
|
};
|
|
10651
10963
|
requestBody?: never;
|
|
10652
10964
|
responses: {
|
|
10653
|
-
/** @description A page of messages from the chat. Full message text is returned verbatim (content pass-through). */
|
|
10965
|
+
/** @description A page of messages from the chat, newest first. Full message text is returned verbatim (content pass-through). `source` says whether the page came from Curviate's stored copy or from a fresh fetch, and `observed_at` says when the chat was last read end to end; a stored answer also carries an `Age` header and always sets `cursor` to null, because a page is served from the store only when it is the whole answer. Narrowing the request with `user_id`, `before`, `after` or a `cursor` always fetches. */
|
|
10654
10966
|
200: {
|
|
10655
10967
|
headers: {
|
|
10656
10968
|
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
10657
10969
|
RateLimit: components["headers"]["RateLimit"];
|
|
10970
|
+
/** @description Seconds since this data was observed on LinkedIn. Present only when source is `store`; a live fetch sets no Age header at all. */
|
|
10971
|
+
Age?: number;
|
|
10658
10972
|
[name: string]: unknown;
|
|
10659
10973
|
};
|
|
10660
10974
|
content: {
|
|
@@ -10747,10 +11061,22 @@ export interface operations {
|
|
|
10747
11061
|
/** @description The expansion the notice is about, here public_identifier. */
|
|
10748
11062
|
value?: string;
|
|
10749
11063
|
}[];
|
|
11064
|
+
/** @description ISO-8601 timestamp for when this data was observed on LinkedIn. On a live fetch this is the time of the fetch; on a stored answer it is when the data was actually seen, not when you asked for it. */
|
|
11065
|
+
observed_at: string;
|
|
11066
|
+
/**
|
|
11067
|
+
* @description Whether this answer came from Curviate's stored copy or from a fresh LinkedIn fetch. A stored answer costs the connected account nothing and is never surfaced to the person being read. It also carries less: fields Curviate does not retain (message bodies, notes, attachments, third-party contact details) are only ever present on a live fetch. Pass mode=live when you need them.
|
|
11068
|
+
* @enum {string}
|
|
11069
|
+
*/
|
|
11070
|
+
source: "store" | "live";
|
|
11071
|
+
/** @description Whether LinkedIn has told us this resource no longer exists, such as a removed profile. When true, the answer above is the copy Curviate still holds and must not be treated as current. Always present; false is the normal case. */
|
|
11072
|
+
withdrawn: boolean;
|
|
11073
|
+
/** @description ISO-8601 timestamp for when a fetch MOST RECENTLY found this resource gone on LinkedIn. Every later fetch that finds it gone again moves it. Present only when withdrawn is true. */
|
|
11074
|
+
withdrawn_at?: string;
|
|
11075
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
10750
11076
|
};
|
|
10751
11077
|
};
|
|
10752
11078
|
};
|
|
10753
|
-
/** @description limit out of range (1-25), malformed cursor, or invalid before/after datetime. */
|
|
11079
|
+
/** @description limit out of range (1-25), malformed cursor, or invalid before/after datetime. INVALID_REQUEST also covers `mode=cache_only` sent together with `max_age`, and either parameter sent more than once, in either order. */
|
|
10754
11080
|
400: {
|
|
10755
11081
|
headers: {
|
|
10756
11082
|
[name: string]: unknown;
|
|
@@ -10777,6 +11103,15 @@ export interface operations {
|
|
|
10777
11103
|
"application/json": components["schemas"]["Error"];
|
|
10778
11104
|
};
|
|
10779
11105
|
};
|
|
11106
|
+
/** @description `mode=cache_only` and this chat's messages cannot be answered from the stored copy (NOT_STORED): either no complete read of the chat has been observed, or the request narrows the page in a way the stored copy cannot reproduce. Not a 404: the chat may exist. Re-read with `mode=refill`, `auto` or `live`, without the narrowing parameters. */
|
|
11107
|
+
422: {
|
|
11108
|
+
headers: {
|
|
11109
|
+
[name: string]: unknown;
|
|
11110
|
+
};
|
|
11111
|
+
content: {
|
|
11112
|
+
"application/json": components["schemas"]["Error"];
|
|
11113
|
+
};
|
|
11114
|
+
};
|
|
10780
11115
|
/** @description Rate limited. */
|
|
10781
11116
|
429: {
|
|
10782
11117
|
headers: {
|
|
@@ -10798,7 +11133,7 @@ export interface operations {
|
|
|
10798
11133
|
"application/json": components["schemas"]["Error"];
|
|
10799
11134
|
};
|
|
10800
11135
|
};
|
|
10801
|
-
/** @description A temporary error occurred. Please try again. */
|
|
11136
|
+
/** @description A temporary error occurred. Please try again. Under `mode=cache_only` this specifically means the stored copy could not be read: no request was made to LinkedIn, and the same read is worth retrying. */
|
|
10802
11137
|
502: {
|
|
10803
11138
|
headers: {
|
|
10804
11139
|
[name: string]: unknown;
|
|
@@ -10872,11 +11207,11 @@ export interface operations {
|
|
|
10872
11207
|
* @description Response type discriminator.
|
|
10873
11208
|
* @enum {string}
|
|
10874
11209
|
*/
|
|
10875
|
-
object
|
|
10876
|
-
/** @description The sent message's identifier. */
|
|
10877
|
-
message_id
|
|
11210
|
+
object: "message_sent";
|
|
11211
|
+
/** @description The sent message's identifier. Null when no message was actually sent, and an array when the message was delivered as several messages, one per attachment. */
|
|
11212
|
+
message_id: string | string[] | null;
|
|
10878
11213
|
/** @description The identity this message was actually sent as. */
|
|
10879
|
-
sent_as
|
|
11214
|
+
sent_as: {
|
|
10880
11215
|
/**
|
|
10881
11216
|
* @description Which identity sent the message.
|
|
10882
11217
|
* @enum {string}
|
|
@@ -10887,6 +11222,7 @@ export interface operations {
|
|
|
10887
11222
|
/** @description Company inboxes only. The page's display name, or null in the rare case the page itself could not be resolved at all. */
|
|
10888
11223
|
name?: string | null;
|
|
10889
11224
|
};
|
|
11225
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
10890
11226
|
};
|
|
10891
11227
|
};
|
|
10892
11228
|
};
|
|
@@ -11101,6 +11437,7 @@ export interface operations {
|
|
|
11101
11437
|
/** @description The expansion the notice is about, here public_identifier. */
|
|
11102
11438
|
value?: string;
|
|
11103
11439
|
}[];
|
|
11440
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
11104
11441
|
};
|
|
11105
11442
|
};
|
|
11106
11443
|
};
|
|
@@ -11204,6 +11541,7 @@ export interface operations {
|
|
|
11204
11541
|
object?: "message_deleted";
|
|
11205
11542
|
/** @description The deleted message's identifier. */
|
|
11206
11543
|
message_id?: string;
|
|
11544
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
11207
11545
|
};
|
|
11208
11546
|
};
|
|
11209
11547
|
};
|
|
@@ -11323,6 +11661,7 @@ export interface operations {
|
|
|
11323
11661
|
object?: "message_edited";
|
|
11324
11662
|
/** @description The edited message's identifier. */
|
|
11325
11663
|
message_id?: string;
|
|
11664
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
11326
11665
|
};
|
|
11327
11666
|
};
|
|
11328
11667
|
};
|
|
@@ -11462,6 +11801,7 @@ export interface operations {
|
|
|
11462
11801
|
message_id?: string;
|
|
11463
11802
|
/** @description The emoji reaction value. */
|
|
11464
11803
|
reaction?: string;
|
|
11804
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
11465
11805
|
};
|
|
11466
11806
|
};
|
|
11467
11807
|
};
|
|
@@ -11676,7 +12016,7 @@ export interface operations {
|
|
|
11676
12016
|
};
|
|
11677
12017
|
requestBody?: never;
|
|
11678
12018
|
responses: {
|
|
11679
|
-
/** @description A page of chats matching the search term (participant names and/or message content),
|
|
12019
|
+
/** @description A page of chats matching the search term (participant names and/or message content), the next-page cursor, and how much of the stored inbox the search could see. */
|
|
11680
12020
|
200: {
|
|
11681
12021
|
headers: {
|
|
11682
12022
|
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
@@ -11703,17 +12043,17 @@ export interface operations {
|
|
|
11703
12043
|
/** @description Chat display name, or null. */
|
|
11704
12044
|
name?: string | null;
|
|
11705
12045
|
/**
|
|
11706
|
-
* @description Conversation type
|
|
12046
|
+
* @description Conversation type.
|
|
11707
12047
|
* @enum {string}
|
|
11708
12048
|
*/
|
|
11709
|
-
type?: "1to1" | "group";
|
|
12049
|
+
type?: "1to1" | "group" | "channel";
|
|
11710
12050
|
is_group?: boolean;
|
|
11711
12051
|
is_1to1?: boolean;
|
|
11712
12052
|
/** @description Number of unread messages in this chat. */
|
|
11713
12053
|
unread_count?: number;
|
|
11714
12054
|
/** @description Identifier of the 1:1 counterpart, when the match is a 1:1 chat. */
|
|
11715
12055
|
user_id?: string;
|
|
11716
|
-
/** @description The most recent message in the chat, when
|
|
12056
|
+
/** @description The most recent stored message in the chat, when one is stored. */
|
|
11717
12057
|
last_message?: {
|
|
11718
12058
|
/**
|
|
11719
12059
|
* @description Response type discriminator.
|
|
@@ -11728,7 +12068,7 @@ export interface operations {
|
|
|
11728
12068
|
text?: string | null;
|
|
11729
12069
|
/** @description Identifier of the sender. */
|
|
11730
12070
|
sender_id?: string;
|
|
11731
|
-
/** @description
|
|
12071
|
+
/** @description Attachment descriptors on the message, without the file bytes. Empty when the message has none. */
|
|
11732
12072
|
attachments?: {
|
|
11733
12073
|
/** @description Attachment identifier. */
|
|
11734
12074
|
id?: string;
|
|
@@ -11747,6 +12087,16 @@ export interface operations {
|
|
|
11747
12087
|
}[];
|
|
11748
12088
|
/** @description Opaque next-page cursor; null on the last page. */
|
|
11749
12089
|
cursor?: string | null;
|
|
12090
|
+
/** @description How complete the searched corpus is. This searches the chats and messages already retrieved for this account, so a chat never retrieved cannot match. Retrieve a chat's messages (GET .../chats/{chat_id}/messages) to widen it. */
|
|
12091
|
+
coverage?: {
|
|
12092
|
+
/** @description True when every stored chat has a complete message walk that no later invalidation has withdrawn; false when any chat is unwalked, mid-walk or withdrawn. */
|
|
12093
|
+
complete?: boolean;
|
|
12094
|
+
/** @description Chats held for this account. */
|
|
12095
|
+
chats_stored?: number;
|
|
12096
|
+
/** @description Of those, how many have messages that were never fully enumerated. */
|
|
12097
|
+
chats_incomplete?: number;
|
|
12098
|
+
};
|
|
12099
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
11750
12100
|
};
|
|
11751
12101
|
};
|
|
11752
12102
|
};
|
|
@@ -11872,11 +12222,12 @@ export interface operations {
|
|
|
11872
12222
|
* @description Response type discriminator.
|
|
11873
12223
|
* @enum {string}
|
|
11874
12224
|
*/
|
|
11875
|
-
object
|
|
11876
|
-
/** @description The InMail message identifier. */
|
|
11877
|
-
message_id
|
|
12225
|
+
object: "inmail_sent";
|
|
12226
|
+
/** @description The InMail message identifier. Null when no message was actually sent, and an array when the message was delivered as several messages, one per attachment. Confirm the send with chat_id, which is always present. */
|
|
12227
|
+
message_id: string | string[] | null;
|
|
11878
12228
|
/** @description The conversation thread identifier. */
|
|
11879
|
-
chat_id
|
|
12229
|
+
chat_id: string;
|
|
12230
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
11880
12231
|
};
|
|
11881
12232
|
};
|
|
11882
12233
|
};
|
|
@@ -12041,6 +12392,7 @@ export interface operations {
|
|
|
12041
12392
|
}[];
|
|
12042
12393
|
/** @description Present only when no company inbox exists. Names the reconnect requirement. */
|
|
12043
12394
|
hint?: string;
|
|
12395
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
12044
12396
|
};
|
|
12045
12397
|
};
|
|
12046
12398
|
};
|
|
@@ -12291,6 +12643,7 @@ export interface operations {
|
|
|
12291
12643
|
/** @description The expansion the notice is about, here public_identifier. */
|
|
12292
12644
|
value?: string;
|
|
12293
12645
|
}[];
|
|
12646
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
12294
12647
|
};
|
|
12295
12648
|
};
|
|
12296
12649
|
};
|
|
@@ -12475,6 +12828,7 @@ export interface operations {
|
|
|
12475
12828
|
}[];
|
|
12476
12829
|
/** @description Opaque cursor for the next page; null when the walk is exhausted. Self-describing of the sort, pass it back verbatim as `cursor`. The relevant cursor expires (~1h). There is no total (an unbounded, reordering stream); page until cursor is null. */
|
|
12477
12830
|
cursor: string | null;
|
|
12831
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
12478
12832
|
};
|
|
12479
12833
|
};
|
|
12480
12834
|
};
|
|
@@ -12637,6 +12991,7 @@ export interface operations {
|
|
|
12637
12991
|
unread_count: number;
|
|
12638
12992
|
/** @description Timestamp (epoch ms) of the newest notification, a poll watermark to detect 'anything new since last poll'. null if unavailable. */
|
|
12639
12993
|
latest_published_at: number | null;
|
|
12994
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
12640
12995
|
};
|
|
12641
12996
|
};
|
|
12642
12997
|
};
|
|
@@ -12760,6 +13115,7 @@ export interface operations {
|
|
|
12760
13115
|
object: "notification_deleted";
|
|
12761
13116
|
/** @description The card urn that was deleted. */
|
|
12762
13117
|
card_urn: string;
|
|
13118
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
12763
13119
|
};
|
|
12764
13120
|
};
|
|
12765
13121
|
};
|
|
@@ -12883,6 +13239,7 @@ export interface operations {
|
|
|
12883
13239
|
object: "notification_show_less_applied";
|
|
12884
13240
|
/** @description The card urn the show-less action was applied to. */
|
|
12885
13241
|
card_urn: string;
|
|
13242
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
12886
13243
|
};
|
|
12887
13244
|
};
|
|
12888
13245
|
};
|
|
@@ -13113,6 +13470,7 @@ export interface operations {
|
|
|
13113
13470
|
}[];
|
|
13114
13471
|
/** @description Next-page cursor; null on the last page. */
|
|
13115
13472
|
cursor?: string | null;
|
|
13473
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
13116
13474
|
};
|
|
13117
13475
|
};
|
|
13118
13476
|
};
|
|
@@ -13290,6 +13648,7 @@ export interface operations {
|
|
|
13290
13648
|
}[];
|
|
13291
13649
|
/** @description Next-page cursor; null on the last page. cursor:null does not confirm completeness when limit is small, the underlying pagination is offset-based. */
|
|
13292
13650
|
cursor?: string | null;
|
|
13651
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
13293
13652
|
};
|
|
13294
13653
|
};
|
|
13295
13654
|
};
|
|
@@ -13468,6 +13827,7 @@ export interface operations {
|
|
|
13468
13827
|
/** @description File size in bytes, when known. */
|
|
13469
13828
|
file_size?: number;
|
|
13470
13829
|
}[];
|
|
13830
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
13471
13831
|
};
|
|
13472
13832
|
};
|
|
13473
13833
|
};
|
|
@@ -13675,6 +14035,7 @@ export interface operations {
|
|
|
13675
14035
|
/** @description File size in bytes, when known. */
|
|
13676
14036
|
file_size?: number;
|
|
13677
14037
|
}[];
|
|
14038
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
13678
14039
|
};
|
|
13679
14040
|
};
|
|
13680
14041
|
};
|
|
@@ -13982,6 +14343,7 @@ export interface operations {
|
|
|
13982
14343
|
/** @description File size in bytes, when known. */
|
|
13983
14344
|
file_size?: number;
|
|
13984
14345
|
}[];
|
|
14346
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
13985
14347
|
};
|
|
13986
14348
|
};
|
|
13987
14349
|
};
|
|
@@ -14179,6 +14541,7 @@ export interface operations {
|
|
|
14179
14541
|
cursor?: string | null;
|
|
14180
14542
|
/** @description Total reply count, when the platform reports it. */
|
|
14181
14543
|
total_count?: number;
|
|
14544
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
14182
14545
|
};
|
|
14183
14546
|
};
|
|
14184
14547
|
};
|
|
@@ -14324,6 +14687,7 @@ export interface operations {
|
|
|
14324
14687
|
}[];
|
|
14325
14688
|
/** @description Next-page cursor; null on the last page. */
|
|
14326
14689
|
cursor?: string | null;
|
|
14690
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
14327
14691
|
};
|
|
14328
14692
|
};
|
|
14329
14693
|
};
|
|
@@ -14453,6 +14817,7 @@ export interface operations {
|
|
|
14453
14817
|
* @enum {string}
|
|
14454
14818
|
*/
|
|
14455
14819
|
reaction?: "like" | "celebrate" | "support" | "love" | "insightful" | "funny";
|
|
14820
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
14456
14821
|
};
|
|
14457
14822
|
};
|
|
14458
14823
|
};
|
|
@@ -14598,6 +14963,7 @@ export interface operations {
|
|
|
14598
14963
|
* @enum {string}
|
|
14599
14964
|
*/
|
|
14600
14965
|
reaction?: "like" | "celebrate" | "support" | "love" | "insightful" | "funny";
|
|
14966
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
14601
14967
|
};
|
|
14602
14968
|
};
|
|
14603
14969
|
};
|
|
@@ -14760,6 +15126,7 @@ export interface operations {
|
|
|
14760
15126
|
/** @description Public profile picture URL. */
|
|
14761
15127
|
public_picture_url?: string;
|
|
14762
15128
|
};
|
|
15129
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
14763
15130
|
};
|
|
14764
15131
|
};
|
|
14765
15132
|
};
|
|
@@ -14838,7 +15205,7 @@ export interface operations {
|
|
|
14838
15205
|
"application/json": components["schemas"]["Error"];
|
|
14839
15206
|
};
|
|
14840
15207
|
};
|
|
14841
|
-
/** @description
|
|
15208
|
+
/** @description The platform did not complete the invitation, or is temporarily unavailable. When `retry_hint` is `never`, the invitation may already have been delivered and re-sending would send a second one: read the sent invitations before trying again. The per-response `retry_hint` and `retry_likely_to_succeed` are authoritative, not the general meaning of the code. */
|
|
14842
15209
|
502: {
|
|
14843
15210
|
headers: {
|
|
14844
15211
|
[name: string]: unknown;
|
|
@@ -14932,6 +15299,7 @@ export interface operations {
|
|
|
14932
15299
|
}[];
|
|
14933
15300
|
/** @description Opaque pagination cursor for the next page, or null if at the end. */
|
|
14934
15301
|
cursor?: string | null;
|
|
15302
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
14935
15303
|
};
|
|
14936
15304
|
};
|
|
14937
15305
|
};
|
|
@@ -15090,6 +15458,7 @@ export interface operations {
|
|
|
15090
15458
|
}[];
|
|
15091
15459
|
/** @description Opaque pagination cursor for the next page, or null if at the end. */
|
|
15092
15460
|
cursor?: string | null;
|
|
15461
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
15093
15462
|
};
|
|
15094
15463
|
};
|
|
15095
15464
|
};
|
|
@@ -15214,6 +15583,7 @@ export interface operations {
|
|
|
15214
15583
|
* @enum {string}
|
|
15215
15584
|
*/
|
|
15216
15585
|
status?: "accepted" | "not_found";
|
|
15586
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
15217
15587
|
};
|
|
15218
15588
|
};
|
|
15219
15589
|
};
|
|
@@ -15338,6 +15708,7 @@ export interface operations {
|
|
|
15338
15708
|
* @enum {string}
|
|
15339
15709
|
*/
|
|
15340
15710
|
status?: "declined" | "not_found";
|
|
15711
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
15341
15712
|
};
|
|
15342
15713
|
};
|
|
15343
15714
|
};
|
|
@@ -15462,6 +15833,7 @@ export interface operations {
|
|
|
15462
15833
|
* @enum {string}
|
|
15463
15834
|
*/
|
|
15464
15835
|
status?: "withdrawn" | "not_found";
|
|
15836
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
15465
15837
|
};
|
|
15466
15838
|
};
|
|
15467
15839
|
};
|
|
@@ -15609,6 +15981,7 @@ export interface operations {
|
|
|
15609
15981
|
}[];
|
|
15610
15982
|
/** @description Opaque pagination cursor for the next page; null when no next page. A string only when a full page was returned, pass it back verbatim to page forward. */
|
|
15611
15983
|
cursor: string | null;
|
|
15984
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
15612
15985
|
};
|
|
15613
15986
|
};
|
|
15614
15987
|
};
|
|
@@ -15859,6 +16232,7 @@ export interface operations {
|
|
|
15859
16232
|
listed_at?: string;
|
|
15860
16233
|
/** @description Hiring team members associated with this posting, when the posting exposes any. */
|
|
15861
16234
|
hiring_team?: unknown[];
|
|
16235
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
15862
16236
|
};
|
|
15863
16237
|
};
|
|
15864
16238
|
};
|
|
@@ -16072,6 +16446,18 @@ export interface operations {
|
|
|
16072
16446
|
listed_at?: string;
|
|
16073
16447
|
/** @description Hiring team members associated with this posting, when the posting exposes any. */
|
|
16074
16448
|
hiring_team?: unknown[];
|
|
16449
|
+
/** @description ISO-8601 timestamp for when this data was observed on LinkedIn. On a live fetch this is the time of the fetch; on a stored answer it is when the data was actually seen, not when you asked for it. */
|
|
16450
|
+
observed_at: string;
|
|
16451
|
+
/**
|
|
16452
|
+
* @description Whether this answer came from Curviate's stored copy or from a fresh LinkedIn fetch. A stored answer costs the connected account nothing and is never surfaced to the person being read. It also carries less: fields Curviate does not retain (message bodies, notes, attachments, third-party contact details) are only ever present on a live fetch. Pass mode=live when you need them.
|
|
16453
|
+
* @enum {string}
|
|
16454
|
+
*/
|
|
16455
|
+
source: "store" | "live";
|
|
16456
|
+
/** @description Whether LinkedIn has told us this resource no longer exists, such as a removed profile. When true, the answer above is the copy Curviate still holds and must not be treated as current. Always present; false is the normal case. */
|
|
16457
|
+
withdrawn: boolean;
|
|
16458
|
+
/** @description ISO-8601 timestamp for when a fetch MOST RECENTLY found this resource gone on LinkedIn. Every later fetch that finds it gone again moves it. Present only when withdrawn is true. */
|
|
16459
|
+
withdrawn_at?: string;
|
|
16460
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
16075
16461
|
};
|
|
16076
16462
|
};
|
|
16077
16463
|
};
|
|
@@ -16324,6 +16710,7 @@ export interface operations {
|
|
|
16324
16710
|
listed_at?: string;
|
|
16325
16711
|
/** @description Hiring team members associated with this posting, when the posting exposes any. */
|
|
16326
16712
|
hiring_team?: unknown[];
|
|
16713
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
16327
16714
|
};
|
|
16328
16715
|
};
|
|
16329
16716
|
};
|
|
@@ -16493,6 +16880,7 @@ export interface operations {
|
|
|
16493
16880
|
/** @description Estimated daily applicants if published for free. */
|
|
16494
16881
|
estimated_daily_applicants_count?: number;
|
|
16495
16882
|
};
|
|
16883
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
16496
16884
|
};
|
|
16497
16885
|
};
|
|
16498
16886
|
};
|
|
@@ -16680,6 +17068,7 @@ export interface operations {
|
|
|
16680
17068
|
* @enum {string}
|
|
16681
17069
|
*/
|
|
16682
17070
|
job_state: "DRAFT" | "LISTED" | "CLOSED" | "REVIEW" | "SUSPENDED";
|
|
17071
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
16683
17072
|
};
|
|
16684
17073
|
};
|
|
16685
17074
|
};
|
|
@@ -16815,6 +17204,7 @@ export interface operations {
|
|
|
16815
17204
|
* @enum {string}
|
|
16816
17205
|
*/
|
|
16817
17206
|
object: "job_posting_closed";
|
|
17207
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
16818
17208
|
};
|
|
16819
17209
|
};
|
|
16820
17210
|
};
|
|
@@ -17037,6 +17427,7 @@ export interface operations {
|
|
|
17037
17427
|
};
|
|
17038
17428
|
/** @description Opaque pagination cursor for the next page. Present only when more applicants remain past this page, omit on the first request, pass back verbatim to page forward. */
|
|
17039
17429
|
cursor?: string;
|
|
17430
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
17040
17431
|
};
|
|
17041
17432
|
};
|
|
17042
17433
|
};
|
|
@@ -17228,6 +17619,7 @@ export interface operations {
|
|
|
17228
17619
|
/** @description The applicant's phone number. */
|
|
17229
17620
|
phone?: string;
|
|
17230
17621
|
};
|
|
17622
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
17231
17623
|
};
|
|
17232
17624
|
};
|
|
17233
17625
|
};
|
|
@@ -17553,6 +17945,18 @@ export interface operations {
|
|
|
17553
17945
|
poll?: Record<string, never> | null;
|
|
17554
17946
|
/** @description Job-posting or article context on the post, present only when applicable. */
|
|
17555
17947
|
specifics?: Record<string, never> | null;
|
|
17948
|
+
/** @description ISO-8601 timestamp for when this data was observed on LinkedIn. On a live fetch this is the time of the fetch; on a stored answer it is when the data was actually seen, not when you asked for it. */
|
|
17949
|
+
observed_at: string;
|
|
17950
|
+
/**
|
|
17951
|
+
* @description Whether this answer came from Curviate's stored copy or from a fresh LinkedIn fetch. A stored answer costs the connected account nothing and is never surfaced to the person being read. It also carries less: fields Curviate does not retain (message bodies, notes, attachments, third-party contact details) are only ever present on a live fetch. Pass mode=live when you need them.
|
|
17952
|
+
* @enum {string}
|
|
17953
|
+
*/
|
|
17954
|
+
source: "store" | "live";
|
|
17955
|
+
/** @description Whether LinkedIn has told us this resource no longer exists, such as a removed profile. When true, the answer above is the copy Curviate still holds and must not be treated as current. Always present; false is the normal case. */
|
|
17956
|
+
withdrawn: boolean;
|
|
17957
|
+
/** @description ISO-8601 timestamp for when a fetch MOST RECENTLY found this resource gone on LinkedIn. Every later fetch that finds it gone again moves it. Present only when withdrawn is true. */
|
|
17958
|
+
withdrawn_at?: string;
|
|
17959
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
17556
17960
|
};
|
|
17557
17961
|
};
|
|
17558
17962
|
};
|
|
@@ -17800,6 +18204,7 @@ export interface operations {
|
|
|
17800
18204
|
object: "post_created";
|
|
17801
18205
|
/** @description The newly published post's own identifier. */
|
|
17802
18206
|
id: string;
|
|
18207
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
17803
18208
|
};
|
|
17804
18209
|
};
|
|
17805
18210
|
};
|
|
@@ -18027,6 +18432,7 @@ export interface operations {
|
|
|
18027
18432
|
}[];
|
|
18028
18433
|
/** @description Next-page cursor; null on the last page. */
|
|
18029
18434
|
cursor?: string | null;
|
|
18435
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
18030
18436
|
};
|
|
18031
18437
|
};
|
|
18032
18438
|
};
|
|
@@ -18175,6 +18581,7 @@ export interface operations {
|
|
|
18175
18581
|
}[];
|
|
18176
18582
|
/** @description Next-page cursor; null on the last page. cursor:null does not confirm completeness when limit is small, the underlying pagination is offset-based; use --all / paginate() for exhaustive reads. */
|
|
18177
18583
|
cursor?: string | null;
|
|
18584
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
18178
18585
|
};
|
|
18179
18586
|
};
|
|
18180
18587
|
};
|
|
@@ -18300,6 +18707,7 @@ export interface operations {
|
|
|
18300
18707
|
* @enum {string}
|
|
18301
18708
|
*/
|
|
18302
18709
|
reaction: "like" | "celebrate" | "support" | "love" | "insightful" | "funny";
|
|
18710
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
18303
18711
|
};
|
|
18304
18712
|
};
|
|
18305
18713
|
};
|
|
@@ -18441,6 +18849,7 @@ export interface operations {
|
|
|
18441
18849
|
* @enum {string}
|
|
18442
18850
|
*/
|
|
18443
18851
|
reaction: "like" | "celebrate" | "support" | "love" | "insightful" | "funny";
|
|
18852
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
18444
18853
|
};
|
|
18445
18854
|
};
|
|
18446
18855
|
};
|
|
@@ -18558,7 +18967,7 @@ export interface operations {
|
|
|
18558
18967
|
};
|
|
18559
18968
|
requestBody?: never;
|
|
18560
18969
|
responses: {
|
|
18561
|
-
/** @description Reactions made by this account (user_id="me") or another LinkedIn user. Each item embeds the reacted-on post and whether the queried account is the sender. */
|
|
18970
|
+
/** @description Reactions made by this account (user_id="me") or another LinkedIn user. Each item embeds the reacted-on post and whether the queried account is the sender. No reaction-time field is available on this item, an upstream limitation rather than something this endpoint drops; parent_post.created_at is the post's own creation time, not the reaction's, and is not a usable proxy for it. List order is not documented or guaranteed, so do not rely on it to filter by date; cap results by count (limit) instead. */
|
|
18562
18971
|
200: {
|
|
18563
18972
|
headers: {
|
|
18564
18973
|
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
@@ -18641,6 +19050,7 @@ export interface operations {
|
|
|
18641
19050
|
}[];
|
|
18642
19051
|
/** @description Next-page cursor; null on the last page. */
|
|
18643
19052
|
cursor?: string | null;
|
|
19053
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
18644
19054
|
};
|
|
18645
19055
|
};
|
|
18646
19056
|
};
|
|
@@ -18797,6 +19207,7 @@ export interface operations {
|
|
|
18797
19207
|
}[];
|
|
18798
19208
|
/** @description Next-page cursor; null on the last page. */
|
|
18799
19209
|
cursor?: string | null;
|
|
19210
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
18800
19211
|
};
|
|
18801
19212
|
};
|
|
18802
19213
|
};
|
|
@@ -18923,6 +19334,7 @@ export interface operations {
|
|
|
18923
19334
|
saved: boolean;
|
|
18924
19335
|
/** @description The target post's activity id, stripped of the urn:li:activity: prefix. */
|
|
18925
19336
|
post_id: string;
|
|
19337
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
18926
19338
|
};
|
|
18927
19339
|
};
|
|
18928
19340
|
};
|
|
@@ -19053,6 +19465,7 @@ export interface operations {
|
|
|
19053
19465
|
saved: boolean;
|
|
19054
19466
|
/** @description The target post's activity id, stripped of the urn:li:activity: prefix. */
|
|
19055
19467
|
post_id: string;
|
|
19468
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
19056
19469
|
};
|
|
19057
19470
|
};
|
|
19058
19471
|
};
|
|
@@ -19499,6 +19912,7 @@ export interface operations {
|
|
|
19499
19912
|
message_status?: string;
|
|
19500
19913
|
}[];
|
|
19501
19914
|
};
|
|
19915
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
19502
19916
|
};
|
|
19503
19917
|
};
|
|
19504
19918
|
};
|
|
@@ -19698,7 +20112,7 @@ export interface operations {
|
|
|
19698
20112
|
};
|
|
19699
20113
|
};
|
|
19700
20114
|
responses: {
|
|
19701
|
-
/** @description Recruiter chat started. Returns the object discriminator, the chat_id, and the message_id of the opening message. Message content is never echoed back.
|
|
20115
|
+
/** @description Recruiter chat started. Returns the object discriminator, the chat_id, and the message_id of the opening message. Message content is never echoed back. Requires a Recruiter seat. */
|
|
19702
20116
|
201: {
|
|
19703
20117
|
headers: {
|
|
19704
20118
|
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
@@ -19714,8 +20128,9 @@ export interface operations {
|
|
|
19714
20128
|
object: "chat_started";
|
|
19715
20129
|
/** @description The newly created chat's identifier. */
|
|
19716
20130
|
chat_id: string;
|
|
19717
|
-
/** @description The opening message identifier. */
|
|
19718
|
-
message_id: string;
|
|
20131
|
+
/** @description The opening message identifier. Null when no message was actually sent, and an array when the message was delivered as several messages, one per attachment. Confirm the send with chat_id, which is always present. */
|
|
20132
|
+
message_id: string | string[] | null;
|
|
20133
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
19719
20134
|
};
|
|
19720
20135
|
};
|
|
19721
20136
|
};
|
|
@@ -20028,6 +20443,7 @@ export interface operations {
|
|
|
20028
20443
|
cursor?: string;
|
|
20029
20444
|
/** @description Total number of matching results, when the platform returns it. */
|
|
20030
20445
|
total_count?: number;
|
|
20446
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
20031
20447
|
};
|
|
20032
20448
|
};
|
|
20033
20449
|
};
|
|
@@ -20220,6 +20636,7 @@ export interface operations {
|
|
|
20220
20636
|
cursor?: string;
|
|
20221
20637
|
/** @description Total number of matching parameters, when the platform returns it. */
|
|
20222
20638
|
total_count?: number;
|
|
20639
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
20223
20640
|
};
|
|
20224
20641
|
};
|
|
20225
20642
|
};
|
|
@@ -20453,6 +20870,7 @@ export interface operations {
|
|
|
20453
20870
|
cursor?: string;
|
|
20454
20871
|
/** @description Total number of projects, when the platform returns it. */
|
|
20455
20872
|
total_count?: number;
|
|
20873
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
20456
20874
|
};
|
|
20457
20875
|
};
|
|
20458
20876
|
};
|
|
@@ -20656,6 +21074,7 @@ export interface operations {
|
|
|
20656
21074
|
};
|
|
20657
21075
|
/** @description ISO 8601 timestamp of the account's last access, when known. */
|
|
20658
21076
|
last_accessed_at?: string;
|
|
21077
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
20659
21078
|
};
|
|
20660
21079
|
};
|
|
20661
21080
|
};
|
|
@@ -20813,6 +21232,7 @@ export interface operations {
|
|
|
20813
21232
|
* @enum {string}
|
|
20814
21233
|
*/
|
|
20815
21234
|
object: "recruiter_project_edited";
|
|
21235
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
20816
21236
|
};
|
|
20817
21237
|
};
|
|
20818
21238
|
};
|
|
@@ -21066,6 +21486,7 @@ export interface operations {
|
|
|
21066
21486
|
cursor?: string;
|
|
21067
21487
|
/** @description Total number of matching candidates, when the platform returns it. */
|
|
21068
21488
|
total_count?: number;
|
|
21489
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
21069
21490
|
};
|
|
21070
21491
|
};
|
|
21071
21492
|
};
|
|
@@ -21373,6 +21794,7 @@ export interface operations {
|
|
|
21373
21794
|
cursor?: string;
|
|
21374
21795
|
/** @description Total number of matching results, when the platform returns it. */
|
|
21375
21796
|
total_count?: number;
|
|
21797
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
21376
21798
|
};
|
|
21377
21799
|
};
|
|
21378
21800
|
};
|
|
@@ -21896,6 +22318,7 @@ export interface operations {
|
|
|
21896
22318
|
is_eliminatory?: boolean;
|
|
21897
22319
|
choices?: string[];
|
|
21898
22320
|
}[];
|
|
22321
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
21899
22322
|
};
|
|
21900
22323
|
};
|
|
21901
22324
|
};
|
|
@@ -22103,6 +22526,7 @@ export interface operations {
|
|
|
22103
22526
|
object: "recruiter_job_posting_created";
|
|
22104
22527
|
job_id: string;
|
|
22105
22528
|
project_id: string;
|
|
22529
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
22106
22530
|
};
|
|
22107
22531
|
};
|
|
22108
22532
|
};
|
|
@@ -22257,6 +22681,7 @@ export interface operations {
|
|
|
22257
22681
|
free: {
|
|
22258
22682
|
eligible?: boolean;
|
|
22259
22683
|
};
|
|
22684
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
22260
22685
|
};
|
|
22261
22686
|
};
|
|
22262
22687
|
};
|
|
@@ -22421,6 +22846,7 @@ export interface operations {
|
|
|
22421
22846
|
cursor?: string;
|
|
22422
22847
|
/** @description Total number of matching job postings, when the platform returns it. */
|
|
22423
22848
|
total_count?: number;
|
|
22849
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
22424
22850
|
};
|
|
22425
22851
|
};
|
|
22426
22852
|
};
|
|
@@ -22628,6 +23054,7 @@ export interface operations {
|
|
|
22628
23054
|
object: "recruiter_job_posting_created";
|
|
22629
23055
|
job_id: string;
|
|
22630
23056
|
project_id: string;
|
|
23057
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
22631
23058
|
};
|
|
22632
23059
|
};
|
|
22633
23060
|
};
|
|
@@ -22807,6 +23234,7 @@ export interface operations {
|
|
|
22807
23234
|
is_eliminatory?: boolean;
|
|
22808
23235
|
choices?: string[];
|
|
22809
23236
|
}[];
|
|
23237
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
22810
23238
|
};
|
|
22811
23239
|
};
|
|
22812
23240
|
};
|
|
@@ -23014,6 +23442,7 @@ export interface operations {
|
|
|
23014
23442
|
* @enum {string}
|
|
23015
23443
|
*/
|
|
23016
23444
|
object: "recruiter_job_posting_edited";
|
|
23445
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
23017
23446
|
};
|
|
23018
23447
|
};
|
|
23019
23448
|
};
|
|
@@ -23208,6 +23637,7 @@ export interface operations {
|
|
|
23208
23637
|
* @enum {string}
|
|
23209
23638
|
*/
|
|
23210
23639
|
job_state: "DRAFT" | "CLOSED" | "LISTED" | "REVIEW" | "SUSPENDED";
|
|
23640
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
23211
23641
|
};
|
|
23212
23642
|
};
|
|
23213
23643
|
};
|
|
@@ -23345,6 +23775,7 @@ export interface operations {
|
|
|
23345
23775
|
* @enum {string}
|
|
23346
23776
|
*/
|
|
23347
23777
|
object: "recruiter_job_posting_closed";
|
|
23778
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
23348
23779
|
};
|
|
23349
23780
|
};
|
|
23350
23781
|
};
|
|
@@ -23489,6 +23920,7 @@ export interface operations {
|
|
|
23489
23920
|
* @enum {string}
|
|
23490
23921
|
*/
|
|
23491
23922
|
object: "recruiter_candidate_saved";
|
|
23923
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
23492
23924
|
};
|
|
23493
23925
|
};
|
|
23494
23926
|
};
|
|
@@ -23820,6 +24252,7 @@ export interface operations {
|
|
|
23820
24252
|
cursor?: string;
|
|
23821
24253
|
/** @description Total number of matching applicants, when the platform returns it. */
|
|
23822
24254
|
total_count?: number;
|
|
24255
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
23823
24256
|
};
|
|
23824
24257
|
};
|
|
23825
24258
|
};
|
|
@@ -24027,6 +24460,7 @@ export interface operations {
|
|
|
24027
24460
|
endorsement_count?: number;
|
|
24028
24461
|
}[];
|
|
24029
24462
|
};
|
|
24463
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
24030
24464
|
};
|
|
24031
24465
|
};
|
|
24032
24466
|
};
|
|
@@ -24306,8 +24740,9 @@ export interface operations {
|
|
|
24306
24740
|
object: "chat_started";
|
|
24307
24741
|
/** @description The newly created Sales Navigator chat identifier. */
|
|
24308
24742
|
chat_id: string | null;
|
|
24309
|
-
/** @description The opening message identifier.
|
|
24743
|
+
/** @description The opening message identifier. Null when no message was actually sent, and an array when the message was delivered as several messages, one per attachment. Confirm the send with chat_id, which is always present. */
|
|
24310
24744
|
message_id: string | string[] | null;
|
|
24745
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
24311
24746
|
};
|
|
24312
24747
|
};
|
|
24313
24748
|
};
|
|
@@ -24622,6 +25057,7 @@ export interface operations {
|
|
|
24622
25057
|
/** @description Present when available. */
|
|
24623
25058
|
throttled_sections?: string[];
|
|
24624
25059
|
};
|
|
25060
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
24625
25061
|
};
|
|
24626
25062
|
};
|
|
24627
25063
|
};
|
|
@@ -24769,6 +25205,7 @@ export interface operations {
|
|
|
24769
25205
|
};
|
|
24770
25206
|
/** @description Opaque cursor for the next page, or null when exhausted. */
|
|
24771
25207
|
cursor: string | null;
|
|
25208
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
24772
25209
|
};
|
|
24773
25210
|
};
|
|
24774
25211
|
};
|
|
@@ -24925,6 +25362,7 @@ export interface operations {
|
|
|
24925
25362
|
};
|
|
24926
25363
|
/** @description Opaque cursor for the next page, or null when exhausted. */
|
|
24927
25364
|
cursor: string | null;
|
|
25365
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
24928
25366
|
};
|
|
24929
25367
|
};
|
|
24930
25368
|
};
|
|
@@ -25136,6 +25574,7 @@ export interface operations {
|
|
|
25136
25574
|
};
|
|
25137
25575
|
/** @description Opaque cursor for the next page, or null when exhausted. */
|
|
25138
25576
|
cursor: string | null;
|
|
25577
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
25139
25578
|
};
|
|
25140
25579
|
};
|
|
25141
25580
|
};
|
|
@@ -25521,6 +25960,7 @@ export interface operations {
|
|
|
25521
25960
|
};
|
|
25522
25961
|
/** @description Opaque cursor for the next page, or null when exhausted. */
|
|
25523
25962
|
cursor: string | null;
|
|
25963
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
25524
25964
|
};
|
|
25525
25965
|
};
|
|
25526
25966
|
};
|
|
@@ -25667,6 +26107,7 @@ export interface operations {
|
|
|
25667
26107
|
list_id: string;
|
|
25668
26108
|
/** @description The LinkedIn company id that was saved. */
|
|
25669
26109
|
company_id: string;
|
|
26110
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
25670
26111
|
};
|
|
25671
26112
|
};
|
|
25672
26113
|
};
|
|
@@ -25813,6 +26254,7 @@ export interface operations {
|
|
|
25813
26254
|
list_id: string;
|
|
25814
26255
|
/** @description The LinkedIn member id that was saved. */
|
|
25815
26256
|
user_id: string;
|
|
26257
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
25816
26258
|
};
|
|
25817
26259
|
};
|
|
25818
26260
|
};
|
|
@@ -25973,6 +26415,7 @@ export interface operations {
|
|
|
25973
26415
|
};
|
|
25974
26416
|
/** @description Opaque cursor for the next page, or null when exhausted. */
|
|
25975
26417
|
cursor: string | null;
|
|
26418
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
25976
26419
|
};
|
|
25977
26420
|
};
|
|
25978
26421
|
};
|
|
@@ -26453,6 +26896,7 @@ export interface operations {
|
|
|
26453
26896
|
};
|
|
26454
26897
|
/** @description Opaque pagination cursor. Null when exhausted. */
|
|
26455
26898
|
cursor: string | null;
|
|
26899
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
26456
26900
|
};
|
|
26457
26901
|
};
|
|
26458
26902
|
};
|
|
@@ -26724,6 +27168,7 @@ export interface operations {
|
|
|
26724
27168
|
};
|
|
26725
27169
|
/** @description Opaque pagination cursor. Null when exhausted. */
|
|
26726
27170
|
cursor: string | null;
|
|
27171
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
26727
27172
|
};
|
|
26728
27173
|
};
|
|
26729
27174
|
};
|
|
@@ -27124,6 +27569,7 @@ export interface operations {
|
|
|
27124
27569
|
};
|
|
27125
27570
|
/** @description Opaque pagination cursor. Null when exhausted. */
|
|
27126
27571
|
cursor: string | null;
|
|
27572
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
27127
27573
|
};
|
|
27128
27574
|
};
|
|
27129
27575
|
};
|
|
@@ -27282,6 +27728,7 @@ export interface operations {
|
|
|
27282
27728
|
}[];
|
|
27283
27729
|
/** @description Next-page cursor; null on the last page. */
|
|
27284
27730
|
cursor?: string | null;
|
|
27731
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
27285
27732
|
};
|
|
27286
27733
|
};
|
|
27287
27734
|
};
|
|
@@ -27356,7 +27803,7 @@ export interface operations {
|
|
|
27356
27803
|
};
|
|
27357
27804
|
requestBody?: never;
|
|
27358
27805
|
responses: {
|
|
27359
|
-
/** @description The account's metadata and current state, including the
|
|
27806
|
+
/** @description The account's metadata and current state, including the quotas[] budget view (one entry per counted action row for this account, for the current window of that row's grain) account_states[], the platform conditions the account is currently in, and activity_window, the hours in which live writes are reported or refused. */
|
|
27360
27807
|
200: {
|
|
27361
27808
|
headers: {
|
|
27362
27809
|
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
@@ -27386,22 +27833,73 @@ export interface operations {
|
|
|
27386
27833
|
requested_products?: ("classic" | "company" | "sales_navigator" | "recruiter")[] | null;
|
|
27387
27834
|
/** @description ISO-8601 UTC creation timestamp of the underlying LinkedIn account, distinct from connected_at. Null until the first background enrichment lands. */
|
|
27388
27835
|
substrate_created_at?: string | null;
|
|
27389
|
-
/** @description
|
|
27836
|
+
/** @description Account-safety rows for this account: one entry per counted action for the current window of its grain, plus the derived total and the invitation backlog. Each row reports where the account stands, what it is allowed, which band that puts it in, what happens at the ceiling, whether the ceiling was raised above the Curviate default, and any active pause the platform caused. Whether a breach is refused or merely reported is `posture`, and the default is to report: nothing here refuses until you configure it to. Pacing is still the caller's responsibility, and nothing on this array paces for you. The per-minute REQUEST ceiling is a different thing and is deliberately not in this array: it protects Curviate's own servers rather than your LinkedIn account, it counts requests where these count platform operations, it is always enforced with HTTP 429 whatever your posture, and its envelope is returned on that refusal. Read this array to see where the account stands; read the safety events surface to see what has already been refused or flagged. */
|
|
27390
27837
|
quotas?: {
|
|
27391
|
-
/** @description Quota family (e.g. messages.daily, account.per_minute). */
|
|
27392
|
-
quota_name?: string;
|
|
27393
|
-
/** @description Remaining units in the current window. */
|
|
27394
|
-
remaining?: number;
|
|
27395
|
-
/** @description Window capacity for this family. This is a substrate capacity ceiling, not a safe sustained rate; the caller owns its own pacing. */
|
|
27396
|
-
total?: number;
|
|
27397
|
-
/** @description ISO-8601 UTC time the current window resets. */
|
|
27398
|
-
reset_time?: string;
|
|
27399
27838
|
/**
|
|
27400
|
-
* @description
|
|
27839
|
+
* @description The safety row. `search` counts result LINES, not queries issued; `content_poll` also debits `profile_views`. Two rows are not counters and say so in `kind`: `total_actions` is a tally of everything this account did in the window, and `pending_invites` is the outstanding invitation backlog read from the platform rather than something this account spends.
|
|
27840
|
+
* @enum {string}
|
|
27841
|
+
*/
|
|
27842
|
+
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";
|
|
27843
|
+
/**
|
|
27844
|
+
* @description Which arithmetic produced `used`. `debit`: actions this account spent, counted as they happen. `tally`: a sum across the debit rows in the window, which is why it has a warn threshold and no ceiling. `gauge`: a level read from the platform rather than counted here, so it falls on its own as invitations are accepted or withdrawn.
|
|
27845
|
+
* @enum {string}
|
|
27846
|
+
*/
|
|
27847
|
+
kind: "debit" | "tally" | "gauge";
|
|
27848
|
+
/**
|
|
27849
|
+
* @description Calendar grain this row is counted in. UTC, not account-local. `null` on the gauge, which has no window at all.
|
|
27850
|
+
* @enum {string|null}
|
|
27851
|
+
*/
|
|
27852
|
+
window: "day" | "week" | "month" | null;
|
|
27853
|
+
/** @description ISO-8601 UTC start of the current window; `null` on the gauge. */
|
|
27854
|
+
window_start: string | null;
|
|
27855
|
+
/** @description ISO-8601 UTC instant the current window rolls over and `used` returns to 0. `null` on the gauge: a backlog falls when invitations are accepted or withdrawn, not at a window edge, so naming an instant would promise something nothing keeps. */
|
|
27856
|
+
resets_at: string | null;
|
|
27857
|
+
/** @description Where the account stands: actions counted in the current window for a debit row, the summed tally for `total_actions`, the observed backlog for the gauge. A debit row with no activity reports 0, never null. Only the gauge can be `null`, and only before anything has observed it: 0 there would be a backlog nobody looked at. */
|
|
27858
|
+
used: number | null;
|
|
27859
|
+
/** @description What this account is allowed on this row in this window, as configured. `null` where the row deliberately has no ceiling: the tally is reported and never enforced, and an uncalibrated row has no figure at all. Change it on the safety policy; Curviate never clamps what you set. */
|
|
27860
|
+
ceiling: number | null;
|
|
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
|
+
effective_ceiling?: number | null;
|
|
27863
|
+
/**
|
|
27864
|
+
* @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
|
+
* @enum {string}
|
|
27866
|
+
*/
|
|
27867
|
+
band: "green" | "amber" | "hard" | "over";
|
|
27868
|
+
/**
|
|
27869
|
+
* @description What happens when this row is `over`. `warn`: the action goes through and the response carries the breach. `enforce`: the action is refused before it reaches the platform. Set per row, per account or workspace-wide on the safety policy; the default is `warn`. One exception worth knowing: on `pending_invites` this field is not the one that acts. That row blocks invitations rather than being spent itself, and the posture that decides whether a full backlog warns or refuses is the one on the invitation row, so setting `enforce` on invitations is enough and you never have to find a posture on a row nothing spends.
|
|
27870
|
+
* @enum {string}
|
|
27871
|
+
*/
|
|
27872
|
+
posture: "warn" | "enforce";
|
|
27873
|
+
/** @description Whether something on this row is configured above Curviate's own default. The safety policy carries the detail: which field, the value, the default and how well calibrated that default is. */
|
|
27874
|
+
over_default: boolean;
|
|
27875
|
+
/** @description An active pause on this row because the platform refused a recent request on it, or `null`. A halt is not a ceiling: no limit you raise lifts it, and it clears itself when it expires. */
|
|
27876
|
+
halt: {
|
|
27877
|
+
/** @description What the platform did: `rate_limited`, `platform_fault`, or `resend_cooldown` (the same invitation was sent too recently). */
|
|
27878
|
+
reason?: string;
|
|
27879
|
+
/** @description Whole seconds until the pause expires. */
|
|
27880
|
+
retry_after_seconds?: number;
|
|
27881
|
+
} | null;
|
|
27882
|
+
/**
|
|
27883
|
+
* Format: date-time
|
|
27884
|
+
* @description When the gauge's level was read from the platform. `null` on every other row, whose numbers are read live from Curviate's own records. Read it before acting on the backlog: the level is refreshed in the background, so it can be up to an hour old.
|
|
27885
|
+
*/
|
|
27886
|
+
observed_at: string | null;
|
|
27887
|
+
/**
|
|
27888
|
+
* @description How well calibrated this row is, in descending order of trust: `substrate` (the transport layer's own guidance), `linkedin_official` (platform-published; reliable for mechanics such as credit counts and reset dates, not for safe volume), `practitioner` (corroborated operator experience), `inferred` (Curviate's own reasoning; flagged, never hidden), `unseeded` (no figure at all for this row on this account's limit profile, reported so nothing is silently missing, never presented as a number).
|
|
27401
27889
|
* @enum {string}
|
|
27402
27890
|
*/
|
|
27403
|
-
|
|
27891
|
+
source: "substrate" | "linkedin_official" | "practitioner" | "inferred" | "unseeded";
|
|
27404
27892
|
}[];
|
|
27893
|
+
/** @description Platform conditions this LinkedIn account is currently in, additive to `status` and independent of it. `recruiter_session_evicted`: the account is signed in somewhere else and LinkedIn allows one session at a time for it, so a person has to close the other session; reconnecting will not help. `commercial_use_limited`: LinkedIn's commercial-use limit has tripped, so people search returns only a handful of results per query. It is a paywall, not a penalty, and nothing else about the account is affected. `profile_view_limited`: profile views outside this account's own network are being blocked; first-degree views still work. The two limits are detected from their symptom: LinkedIn publishes no threshold for either, exposes no counter, and lifts neither on request, so no number is reported. `commercial_use_limited` is a present-tense reading and a genuinely narrow search can also produce the shape it looks for, so treat it as a reason to check rather than a certainty; the next people search that returns a full page clears it. An account in none of these reports an empty array. */
|
|
27894
|
+
account_states?: ("recruiter_session_evicted" | "commercial_use_limited" | "profile_view_limited")[];
|
|
27895
|
+
/** @description The account's activity window, the hours in which Curviate reports or refuses live writes to LinkedIn. Reads and anything served from Curviate's own store are never affected, at any hour. Configure it on the account's safety policy. */
|
|
27896
|
+
activity_window?: {
|
|
27897
|
+
/** @description The IANA zone the window is read in, or null when none is set. */
|
|
27898
|
+
timezone?: string | null;
|
|
27899
|
+
/** @description True when no zone is set, which DISABLES the activity window. Curviate never guesses a zone: a guess eight hours wrong inverts the window, refusing every daytime write and permitting every nocturnal one. If you configured a window and it never fires, this is why. */
|
|
27900
|
+
timezone_unset?: boolean;
|
|
27901
|
+
};
|
|
27902
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
27405
27903
|
};
|
|
27406
27904
|
};
|
|
27407
27905
|
};
|
|
@@ -27498,6 +27996,7 @@ export interface operations {
|
|
|
27498
27996
|
* @enum {boolean}
|
|
27499
27997
|
*/
|
|
27500
27998
|
already_disconnected?: true;
|
|
27999
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
27501
28000
|
};
|
|
27502
28001
|
};
|
|
27503
28002
|
};
|
|
@@ -27621,6 +28120,7 @@ export interface operations {
|
|
|
27621
28120
|
*/
|
|
27622
28121
|
object?: "account";
|
|
27623
28122
|
account_id?: string;
|
|
28123
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
27624
28124
|
};
|
|
27625
28125
|
};
|
|
27626
28126
|
};
|
|
@@ -27800,6 +28300,7 @@ export interface operations {
|
|
|
27800
28300
|
account_id?: string;
|
|
27801
28301
|
/** @enum {string} */
|
|
27802
28302
|
status?: "active";
|
|
28303
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
27803
28304
|
};
|
|
27804
28305
|
};
|
|
27805
28306
|
};
|
|
@@ -27833,6 +28334,7 @@ export interface operations {
|
|
|
27833
28334
|
attached_seat_id?: string | null;
|
|
27834
28335
|
/** @description Present and true only when this connect reactivated an account you had previously disconnected, instead of opening a brand-new one. Absent on a normal connect. The account keeps its original id, and its status reflects its real observed state, which may need a reconnect. */
|
|
27835
28336
|
recovered?: boolean;
|
|
28337
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
27836
28338
|
};
|
|
27837
28339
|
};
|
|
27838
28340
|
};
|
|
@@ -27866,6 +28368,7 @@ export interface operations {
|
|
|
27866
28368
|
}[];
|
|
27867
28369
|
/** @description ISO-8601 expiry of the challenge. */
|
|
27868
28370
|
expires_at?: string;
|
|
28371
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
27869
28372
|
};
|
|
27870
28373
|
};
|
|
27871
28374
|
};
|
|
@@ -28026,6 +28529,7 @@ export interface operations {
|
|
|
28026
28529
|
attached_seat_id?: string | null;
|
|
28027
28530
|
/** @description Present and true only when this connect reactivated an account you had previously disconnected, instead of opening a brand-new one. Absent on a normal connect. The account keeps its original id, and its status reflects its real observed state, which may need a reconnect. */
|
|
28028
28531
|
recovered?: boolean;
|
|
28532
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
28029
28533
|
};
|
|
28030
28534
|
};
|
|
28031
28535
|
};
|
|
@@ -28059,6 +28563,7 @@ export interface operations {
|
|
|
28059
28563
|
}[];
|
|
28060
28564
|
/** @description ISO-8601 expiry of the challenge. */
|
|
28061
28565
|
expires_at?: string;
|
|
28566
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
28062
28567
|
};
|
|
28063
28568
|
};
|
|
28064
28569
|
};
|
|
@@ -28189,6 +28694,7 @@ export interface operations {
|
|
|
28189
28694
|
object?: "checkpoint";
|
|
28190
28695
|
account_id?: string;
|
|
28191
28696
|
resent?: boolean;
|
|
28697
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
28192
28698
|
};
|
|
28193
28699
|
};
|
|
28194
28700
|
};
|
|
@@ -28348,6 +28854,7 @@ export interface operations {
|
|
|
28348
28854
|
}[];
|
|
28349
28855
|
/** @description Human-readable, actionable next step when the approval timed out. Present on status:"expired". */
|
|
28350
28856
|
recovery_hint?: string;
|
|
28857
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
28351
28858
|
};
|
|
28352
28859
|
};
|
|
28353
28860
|
};
|
|
@@ -28476,6 +28983,7 @@ export interface operations {
|
|
|
28476
28983
|
challenge_type?: string;
|
|
28477
28984
|
/** @description ISO-8601 UTC challenge expiry, when known; null otherwise. */
|
|
28478
28985
|
expires_at?: string | null;
|
|
28986
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
28479
28987
|
};
|
|
28480
28988
|
};
|
|
28481
28989
|
};
|
|
@@ -28538,21 +29046,26 @@ export interface operations {
|
|
|
28538
29046
|
};
|
|
28539
29047
|
};
|
|
28540
29048
|
};
|
|
28541
|
-
|
|
29049
|
+
getV1AccountIdEvents: {
|
|
28542
29050
|
parameters: {
|
|
28543
29051
|
query?: {
|
|
28544
29052
|
/** @description Pagination cursor from a previous response; decodable, pass it back verbatim */
|
|
28545
29053
|
cursor?: string;
|
|
28546
|
-
/** @description
|
|
29054
|
+
/** @description Return only events in this queue state. unread: nobody holds it, which includes an event whose lease expired. claimed: leased to a consumer right now. done: already handled, and it will never be handed out again. Omit to return every state. There is no failed state. */
|
|
29055
|
+
state?: "unread" | "claimed" | "done";
|
|
29056
|
+
/** @description How many events to return per page, 1 to 100. Defaults to 50. */
|
|
28547
29057
|
limit?: number;
|
|
28548
29058
|
};
|
|
28549
29059
|
header?: never;
|
|
28550
|
-
path
|
|
29060
|
+
path: {
|
|
29061
|
+
/** @description The connected LinkedIn account whose received events to read. */
|
|
29062
|
+
account_id: string;
|
|
29063
|
+
};
|
|
28551
29064
|
cookie?: never;
|
|
28552
29065
|
};
|
|
28553
29066
|
requestBody?: never;
|
|
28554
29067
|
responses: {
|
|
28555
|
-
/** @description
|
|
29068
|
+
/** @description The events Curviate received for this account in the last 24 hours, newest received first. Events are retained whether or not any webhook is subscribed to them, which is what makes this readable with no listener running. Retention is 24 hours from received_at, absolute: an event is deleted on that clock and nothing extends it, including a live claim. Disconnecting an account removes its events from this response immediately. Each item carries its queue state, so state=done answers what your agents have already handled and state=unread answers what is still waiting. This read never claims anything. */
|
|
28556
29069
|
200: {
|
|
28557
29070
|
headers: {
|
|
28558
29071
|
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
@@ -28565,59 +29078,57 @@ export interface operations {
|
|
|
28565
29078
|
* @description Response type discriminator.
|
|
28566
29079
|
* @enum {string}
|
|
28567
29080
|
*/
|
|
28568
|
-
object
|
|
28569
|
-
/** @description
|
|
28570
|
-
items
|
|
29081
|
+
object: "event_list";
|
|
29082
|
+
/** @description Retained events for this account, newest received first. [] when nothing arrived in the last 24 hours. */
|
|
29083
|
+
items: {
|
|
28571
29084
|
/**
|
|
28572
|
-
* @description
|
|
29085
|
+
* @description Item type discriminator.
|
|
28573
29086
|
* @enum {string}
|
|
28574
29087
|
*/
|
|
28575
|
-
object
|
|
28576
|
-
/** @description
|
|
28577
|
-
id
|
|
29088
|
+
object: "event";
|
|
29089
|
+
/** @description The retained event's id. Also the value encoded in the next page's cursor. */
|
|
29090
|
+
id: string;
|
|
29091
|
+
/** @description The canonical event name, the same name you subscribe a webhook to (for example message.received, account.connected). */
|
|
29092
|
+
event: string;
|
|
28578
29093
|
/**
|
|
28579
|
-
*
|
|
28580
|
-
* @
|
|
29094
|
+
* Format: date-time
|
|
29095
|
+
* @description When the platform says the event happened. Events can arrive out of order, so do not treat this ordering as causal, establish ordering from the payload if you need it.
|
|
28581
29096
|
*/
|
|
28582
|
-
|
|
28583
|
-
/** @description The URL that receives delivery POST requests. */
|
|
28584
|
-
request_url?: string;
|
|
28585
|
-
name?: string | null;
|
|
28586
|
-
account_ids?: string[];
|
|
28587
|
-
enabled?: boolean;
|
|
28588
|
-
/** @description Custom headers added to each delivery POST, with the value masked. */
|
|
28589
|
-
headers?: {
|
|
28590
|
-
key?: string;
|
|
28591
|
-
/** @description A masked view of the configured value: the first 8 characters followed by "..." when the value is at least 24 characters long, and a fixed "********" for anything shorter. The full value is never returned; the header name is what identifies which credential is configured. */
|
|
28592
|
-
value_prefix?: string;
|
|
28593
|
-
}[];
|
|
28594
|
-
events?: string[];
|
|
28595
|
-
data?: string[];
|
|
28596
|
-
/** @description First 8 characters of the secret (never the full secret). */
|
|
28597
|
-
secret_prefix?: string;
|
|
29097
|
+
occurred_at: string;
|
|
28598
29098
|
/**
|
|
28599
|
-
*
|
|
29099
|
+
* Format: date-time
|
|
29100
|
+
* @description When Curviate received the event. Retention is 24 hours from this instant, absolute.
|
|
29101
|
+
*/
|
|
29102
|
+
received_at: string;
|
|
29103
|
+
/** @description Exactly the payload a registered webhook would have been delivered for this event, content included. It always carries account_id, event and occurred_at; the remaining fields depend on the event. This is the delivered payload itself, not a summary of it, and not the per-delivery envelope (there is no delivery when nothing is subscribed). */
|
|
29104
|
+
payload: {
|
|
29105
|
+
[key: string]: unknown;
|
|
29106
|
+
};
|
|
29107
|
+
/**
|
|
29108
|
+
* @description Queue state. unread: nobody holds it. claimed: leased to a consumer until lease_until, and an expired lease reads as unread again. done: handled, and it will never be handed out again. There is no failed state. Filter on it with the state query parameter, which is how you ask what your agents have already handled.
|
|
28600
29109
|
* @enum {string}
|
|
28601
29110
|
*/
|
|
28602
|
-
|
|
28603
|
-
|
|
29111
|
+
state: "unread" | "claimed" | "done";
|
|
29112
|
+
/** @description The consumer name recorded by the last claim, or null. Free text, never verified, so treat it as a label rather than an identity. */
|
|
29113
|
+
claimed_by: string | null;
|
|
28604
29114
|
/**
|
|
28605
|
-
*
|
|
28606
|
-
* @
|
|
29115
|
+
* Format: date-time
|
|
29116
|
+
* @description When the current lease expires, or null when the event is not leased. A lease never extends the 24 hour retention.
|
|
28607
29117
|
*/
|
|
28608
|
-
|
|
29118
|
+
lease_until: string | null;
|
|
28609
29119
|
/**
|
|
28610
|
-
*
|
|
28611
|
-
* @
|
|
29120
|
+
* Format: date-time
|
|
29121
|
+
* @description When the event was marked done, or null. Set once and never moved.
|
|
28612
29122
|
*/
|
|
28613
|
-
|
|
29123
|
+
done_at: string | null;
|
|
28614
29124
|
}[];
|
|
28615
|
-
/** @description
|
|
28616
|
-
cursor
|
|
29125
|
+
/** @description Cursor for the next page; null on the terminal page. Pass it back verbatim. Page until cursor is null. */
|
|
29126
|
+
cursor: string | null;
|
|
29127
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
28617
29128
|
};
|
|
28618
29129
|
};
|
|
28619
29130
|
};
|
|
28620
|
-
/** @description Invalid
|
|
29131
|
+
/** @description Invalid request, an out-of-range `limit`, an unknown `state`, or a corrupt `cursor`. */
|
|
28621
29132
|
400: {
|
|
28622
29133
|
headers: {
|
|
28623
29134
|
[name: string]: unknown;
|
|
@@ -28626,8 +29137,8 @@ export interface operations {
|
|
|
28626
29137
|
"application/json": components["schemas"]["Error"];
|
|
28627
29138
|
};
|
|
28628
29139
|
};
|
|
28629
|
-
/** @description
|
|
28630
|
-
|
|
29140
|
+
/** @description The account_id does not belong to this tenant, or the account is unknown. An id whose connection was replaced or removed also stops resolving here, and it is already absent from the list, so re-read `GET /v1/accounts` for the current id. */
|
|
29141
|
+
404: {
|
|
28631
29142
|
headers: {
|
|
28632
29143
|
[name: string]: unknown;
|
|
28633
29144
|
};
|
|
@@ -28635,7 +29146,7 @@ export interface operations {
|
|
|
28635
29146
|
"application/json": components["schemas"]["Error"];
|
|
28636
29147
|
};
|
|
28637
29148
|
};
|
|
28638
|
-
/** @description Rate limited,
|
|
29149
|
+
/** @description Rate limited, retry after the hinted delay. */
|
|
28639
29150
|
429: {
|
|
28640
29151
|
headers: {
|
|
28641
29152
|
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
@@ -28647,105 +29158,48 @@ export interface operations {
|
|
|
28647
29158
|
"application/json": components["schemas"]["Error"];
|
|
28648
29159
|
};
|
|
28649
29160
|
};
|
|
29161
|
+
/** @description Internal error. */
|
|
29162
|
+
500: {
|
|
29163
|
+
headers: {
|
|
29164
|
+
[name: string]: unknown;
|
|
29165
|
+
};
|
|
29166
|
+
content: {
|
|
29167
|
+
"application/json": components["schemas"]["Error"];
|
|
29168
|
+
};
|
|
29169
|
+
};
|
|
29170
|
+
/** @description Service unavailable. */
|
|
29171
|
+
503: {
|
|
29172
|
+
headers: {
|
|
29173
|
+
[name: string]: unknown;
|
|
29174
|
+
};
|
|
29175
|
+
content: {
|
|
29176
|
+
"application/json": components["schemas"]["Error"];
|
|
29177
|
+
};
|
|
29178
|
+
};
|
|
28650
29179
|
};
|
|
28651
29180
|
};
|
|
28652
|
-
|
|
29181
|
+
postV1AccountIdEventsClaim: {
|
|
28653
29182
|
parameters: {
|
|
28654
29183
|
query?: never;
|
|
28655
29184
|
header?: never;
|
|
28656
|
-
path
|
|
29185
|
+
path: {
|
|
29186
|
+
/** @description The connected LinkedIn account whose received events to read. */
|
|
29187
|
+
account_id: string;
|
|
29188
|
+
};
|
|
28657
29189
|
cookie?: never;
|
|
28658
29190
|
};
|
|
28659
29191
|
requestBody: {
|
|
28660
29192
|
content: {
|
|
28661
29193
|
"application/json": {
|
|
28662
|
-
|
|
28663
|
-
|
|
28664
|
-
|
|
28665
|
-
request_url: string;
|
|
28666
|
-
/** @description Human-readable name for this webhook (1-100 chars) */
|
|
28667
|
-
name?: string;
|
|
28668
|
-
/** @description Per-account targeting. Required and non-empty; each id must be an acc_-prefixed id owned by the tenant. */
|
|
28669
|
-
account_ids: string[];
|
|
28670
|
-
/**
|
|
28671
|
-
* @description A disabled webhook is created but delivers nothing
|
|
28672
|
-
* @default true
|
|
28673
|
-
*/
|
|
28674
|
-
enabled?: boolean;
|
|
28675
|
-
/**
|
|
28676
|
-
* @description Custom headers added to each delivery POST. Names must be valid HTTP header names and values must be printable ASCII (no line breaks or control characters). Reserved names are rejected at registration; they include Content-Type, User-Agent, Host, any Curviate-* or Sec-* name, and the hop-by-hop headers. At most 10 headers, 1024 characters per value, 4096 bytes in total. Custom headers are not covered by the delivery signature, so treat them as a hint, not as proof of origin. Values are encrypted at rest and are never returned by a read. A read shows the header name plus a masked value: the first 8 characters followed by "..." when the value is at least 24 characters long, and a fixed "********" for anything shorter, so a short value is never disclosed by its own preview. The header name is what identifies which credential is configured.
|
|
28677
|
-
* @default []
|
|
28678
|
-
*/
|
|
28679
|
-
headers?: {
|
|
28680
|
-
key: string;
|
|
28681
|
-
value: string;
|
|
28682
|
-
}[];
|
|
28683
|
-
/** @description Messaging events to subscribe to (default: [message.received]) */
|
|
28684
|
-
events?: ("message.received" | "message.delivered" | "message.read" | "message.reaction" | "message.edited" | "message.deleted" | "chat.updated" | "chat.deleted")[];
|
|
28685
|
-
/**
|
|
28686
|
-
* @description Field-remapping keys for the messaging delivery payload
|
|
28687
|
-
* @default []
|
|
28688
|
-
*/
|
|
28689
|
-
data?: string[];
|
|
28690
|
-
} | {
|
|
28691
|
-
/** @constant */
|
|
28692
|
-
source: "user";
|
|
28693
|
-
/** @description HTTPS URL that receives webhook deliveries. Must be a publicly reachable host on the default https port; private, loopback and link-local addresses are rejected. */
|
|
28694
|
-
request_url: string;
|
|
28695
|
-
/** @description Human-readable name for this webhook (1-100 chars) */
|
|
28696
|
-
name?: string;
|
|
28697
|
-
/** @description Per-account targeting. Required and non-empty; each id must be an acc_-prefixed id owned by the tenant. */
|
|
28698
|
-
account_ids: string[];
|
|
28699
|
-
/**
|
|
28700
|
-
* @description A disabled webhook is created but delivers nothing
|
|
28701
|
-
* @default true
|
|
28702
|
-
*/
|
|
28703
|
-
enabled?: boolean;
|
|
28704
|
-
/**
|
|
28705
|
-
* @description Custom headers added to each delivery POST. Names must be valid HTTP header names and values must be printable ASCII (no line breaks or control characters). Reserved names are rejected at registration; they include Content-Type, User-Agent, Host, any Curviate-* or Sec-* name, and the hop-by-hop headers. At most 10 headers, 1024 characters per value, 4096 bytes in total. Custom headers are not covered by the delivery signature, so treat them as a hint, not as proof of origin. Values are encrypted at rest and are never returned by a read. A read shows the header name plus a masked value: the first 8 characters followed by "..." when the value is at least 24 characters long, and a fixed "********" for anything shorter, so a short value is never disclosed by its own preview. The header name is what identifies which credential is configured.
|
|
28706
|
-
* @default []
|
|
28707
|
-
*/
|
|
28708
|
-
headers?: {
|
|
28709
|
-
key: string;
|
|
28710
|
-
value: string;
|
|
28711
|
-
}[];
|
|
28712
|
-
/** @description User/relation events to subscribe to (default: [connection.accepted]) */
|
|
28713
|
-
events?: ("connection.accepted" | "connection.new")[];
|
|
28714
|
-
/**
|
|
28715
|
-
* @description Field-remapping keys for the user/relation delivery payload
|
|
28716
|
-
* @default []
|
|
28717
|
-
*/
|
|
28718
|
-
data?: ("user_provider_id" | "user_full_name" | "user_public_identifier" | "user_profile_url" | "user_picture_url")[];
|
|
28719
|
-
} | {
|
|
28720
|
-
/** @constant */
|
|
28721
|
-
source: "account_status";
|
|
28722
|
-
/** @description HTTPS URL that receives webhook deliveries. Must be a publicly reachable host on the default https port; private, loopback and link-local addresses are rejected. */
|
|
28723
|
-
request_url: string;
|
|
28724
|
-
/** @description Human-readable name for this webhook (1-100 chars) */
|
|
28725
|
-
name?: string;
|
|
28726
|
-
/** @description Per-account targeting. Required and non-empty; each id must be an acc_-prefixed id owned by the tenant. */
|
|
28727
|
-
account_ids: string[];
|
|
28728
|
-
/**
|
|
28729
|
-
* @description A disabled webhook is created but delivers nothing
|
|
28730
|
-
* @default true
|
|
28731
|
-
*/
|
|
28732
|
-
enabled?: boolean;
|
|
28733
|
-
/**
|
|
28734
|
-
* @description Custom headers added to each delivery POST. Names must be valid HTTP header names and values must be printable ASCII (no line breaks or control characters). Reserved names are rejected at registration; they include Content-Type, User-Agent, Host, any Curviate-* or Sec-* name, and the hop-by-hop headers. At most 10 headers, 1024 characters per value, 4096 bytes in total. Custom headers are not covered by the delivery signature, so treat them as a hint, not as proof of origin. Values are encrypted at rest and are never returned by a read. A read shows the header name plus a masked value: the first 8 characters followed by "..." when the value is at least 24 characters long, and a fixed "********" for anything shorter, so a short value is never disclosed by its own preview. The header name is what identifies which credential is configured.
|
|
28735
|
-
* @default []
|
|
28736
|
-
*/
|
|
28737
|
-
headers?: {
|
|
28738
|
-
key: string;
|
|
28739
|
-
value: string;
|
|
28740
|
-
}[];
|
|
28741
|
-
/** @description Account-status events to subscribe to (default: all 12 lifecycle events) */
|
|
28742
|
-
events?: ("account.created" | "account.connected" | "account.synced" | "account.reconnected" | "account.reconnect_needed" | "account.restricted" | "account.creation_failed" | "account.disconnected" | "account.error" | "account.paused" | "account.connecting" | "account.permission_revoked" | "account.initial_sync.running" | "account.initial_sync.completed" | "account.initial_sync.failed")[];
|
|
29194
|
+
consumer: string;
|
|
29195
|
+
limit?: number;
|
|
29196
|
+
lease_seconds?: number;
|
|
28743
29197
|
};
|
|
28744
29198
|
};
|
|
28745
29199
|
};
|
|
28746
29200
|
responses: {
|
|
28747
|
-
/** @description
|
|
28748
|
-
|
|
29201
|
+
/** @description The events now leased to you, oldest occurred_at first. Claiming when nothing is available returns an empty list and a 200, so an idle poll is not an error. Each event is handed to one caller only: a second claim running at the same instant gets different events, or none. The lease is cooperative and is not access control: it stops your own agents duplicating work, it does not stop anything from acting on an event it did not claim. */
|
|
29202
|
+
200: {
|
|
28749
29203
|
headers: {
|
|
28750
29204
|
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
28751
29205
|
RateLimit: components["headers"]["RateLimit"];
|
|
@@ -28757,49 +29211,62 @@ export interface operations {
|
|
|
28757
29211
|
* @description Response type discriminator.
|
|
28758
29212
|
* @enum {string}
|
|
28759
29213
|
*/
|
|
28760
|
-
object
|
|
28761
|
-
/** @description
|
|
28762
|
-
|
|
29214
|
+
object: "event_claim";
|
|
29215
|
+
/** @description The consumer name you sent, echoed as recorded on the claimed events. Like every echoed input on this API it passes the output filter on the way back, so a value containing a filtered term returns altered. */
|
|
29216
|
+
consumer: string;
|
|
28763
29217
|
/**
|
|
28764
|
-
*
|
|
28765
|
-
* @
|
|
29218
|
+
* Format: date-time
|
|
29219
|
+
* @description When this batch's lease expires. After this instant the events become claimable by anyone again, whether or not you finished. null when nothing was claimed.
|
|
28766
29220
|
*/
|
|
28767
|
-
|
|
28768
|
-
/** @description The
|
|
28769
|
-
|
|
28770
|
-
|
|
28771
|
-
|
|
28772
|
-
|
|
28773
|
-
|
|
28774
|
-
|
|
28775
|
-
|
|
28776
|
-
|
|
28777
|
-
|
|
28778
|
-
|
|
28779
|
-
|
|
28780
|
-
|
|
28781
|
-
|
|
29221
|
+
lease_until: string | null;
|
|
29222
|
+
/** @description The events now leased to you, oldest occurred_at first. [] when nothing was available, which is a success and not an error. */
|
|
29223
|
+
items: {
|
|
29224
|
+
/**
|
|
29225
|
+
* @description Item type discriminator.
|
|
29226
|
+
* @enum {string}
|
|
29227
|
+
*/
|
|
29228
|
+
object: "event";
|
|
29229
|
+
/** @description The retained event's id. Also the value encoded in the next page's cursor. */
|
|
29230
|
+
id: string;
|
|
29231
|
+
/** @description The canonical event name, the same name you subscribe a webhook to (for example message.received, account.connected). */
|
|
29232
|
+
event: string;
|
|
29233
|
+
/**
|
|
29234
|
+
* Format: date-time
|
|
29235
|
+
* @description When the platform says the event happened. Events can arrive out of order, so do not treat this ordering as causal, establish ordering from the payload if you need it.
|
|
29236
|
+
*/
|
|
29237
|
+
occurred_at: string;
|
|
29238
|
+
/**
|
|
29239
|
+
* Format: date-time
|
|
29240
|
+
* @description When Curviate received the event. Retention is 24 hours from this instant, absolute.
|
|
29241
|
+
*/
|
|
29242
|
+
received_at: string;
|
|
29243
|
+
/** @description Exactly the payload a registered webhook would have been delivered for this event, content included. It always carries account_id, event and occurred_at; the remaining fields depend on the event. This is the delivered payload itself, not a summary of it, and not the per-delivery envelope (there is no delivery when nothing is subscribed). */
|
|
29244
|
+
payload: {
|
|
29245
|
+
[key: string]: unknown;
|
|
29246
|
+
};
|
|
29247
|
+
/**
|
|
29248
|
+
* @description Queue state. unread: nobody holds it. claimed: leased to a consumer until lease_until, and an expired lease reads as unread again. done: handled, and it will never be handed out again. There is no failed state. Filter on it with the state query parameter, which is how you ask what your agents have already handled.
|
|
29249
|
+
* @enum {string}
|
|
29250
|
+
*/
|
|
29251
|
+
state: "unread" | "claimed" | "done";
|
|
29252
|
+
/** @description The consumer name recorded by the last claim, or null. Free text, never verified, so treat it as a label rather than an identity. */
|
|
29253
|
+
claimed_by: string | null;
|
|
29254
|
+
/**
|
|
29255
|
+
* Format: date-time
|
|
29256
|
+
* @description When the current lease expires, or null when the event is not leased. A lease never extends the 24 hour retention.
|
|
29257
|
+
*/
|
|
29258
|
+
lease_until: string | null;
|
|
29259
|
+
/**
|
|
29260
|
+
* Format: date-time
|
|
29261
|
+
* @description When the event was marked done, or null. Set once and never moved.
|
|
29262
|
+
*/
|
|
29263
|
+
done_at: string | null;
|
|
28782
29264
|
}[];
|
|
28783
|
-
|
|
28784
|
-
events?: string[];
|
|
28785
|
-
/** @description Field-remapping keys for the delivery payload (messaging and user sources only). */
|
|
28786
|
-
data?: string[];
|
|
28787
|
-
/**
|
|
28788
|
-
* @description HMAC signing secret, 64 hexadecimal characters, returned exactly once at creation. Store it securely.
|
|
28789
|
-
* @example a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2
|
|
28790
|
-
*/
|
|
28791
|
-
secret?: string;
|
|
28792
|
-
/**
|
|
28793
|
-
* @description The first 8 characters of the secret, for identification without exposing it. Exactly the value the read endpoints return for this webhook.
|
|
28794
|
-
* @example a1b2c3d4
|
|
28795
|
-
*/
|
|
28796
|
-
secret_prefix?: string;
|
|
28797
|
-
/** @description ISO-8601 creation timestamp. */
|
|
28798
|
-
created_at?: string;
|
|
29265
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
28799
29266
|
};
|
|
28800
29267
|
};
|
|
28801
29268
|
};
|
|
28802
|
-
/** @description Invalid request,
|
|
29269
|
+
/** @description Invalid request, a missing consumer or an out-of-range limit or lease_seconds. */
|
|
28803
29270
|
400: {
|
|
28804
29271
|
headers: {
|
|
28805
29272
|
[name: string]: unknown;
|
|
@@ -28808,8 +29275,8 @@ export interface operations {
|
|
|
28808
29275
|
"application/json": components["schemas"]["Error"];
|
|
28809
29276
|
};
|
|
28810
29277
|
};
|
|
28811
|
-
/** @description
|
|
28812
|
-
|
|
29278
|
+
/** @description The account_id does not belong to this tenant, or the account is unknown. An id whose connection was replaced or removed also stops resolving here, and it is already absent from the list, so re-read `GET /v1/accounts` for the current id. */
|
|
29279
|
+
404: {
|
|
28813
29280
|
headers: {
|
|
28814
29281
|
[name: string]: unknown;
|
|
28815
29282
|
};
|
|
@@ -28817,8 +29284,8 @@ export interface operations {
|
|
|
28817
29284
|
"application/json": components["schemas"]["Error"];
|
|
28818
29285
|
};
|
|
28819
29286
|
};
|
|
28820
|
-
/** @description
|
|
28821
|
-
|
|
29287
|
+
/** @description Payload too large, the request body exceeds the size limit. */
|
|
29288
|
+
413: {
|
|
28822
29289
|
headers: {
|
|
28823
29290
|
[name: string]: unknown;
|
|
28824
29291
|
};
|
|
@@ -28826,17 +29293,20 @@ export interface operations {
|
|
|
28826
29293
|
"application/json": components["schemas"]["Error"];
|
|
28827
29294
|
};
|
|
28828
29295
|
};
|
|
28829
|
-
/** @description
|
|
28830
|
-
|
|
29296
|
+
/** @description Rate limited, retry after the hinted delay. */
|
|
29297
|
+
429: {
|
|
28831
29298
|
headers: {
|
|
29299
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
29300
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
29301
|
+
"Retry-After": components["headers"]["Retry-After"];
|
|
28832
29302
|
[name: string]: unknown;
|
|
28833
29303
|
};
|
|
28834
29304
|
content: {
|
|
28835
29305
|
"application/json": components["schemas"]["Error"];
|
|
28836
29306
|
};
|
|
28837
29307
|
};
|
|
28838
|
-
/** @description
|
|
28839
|
-
|
|
29308
|
+
/** @description Internal error. */
|
|
29309
|
+
500: {
|
|
28840
29310
|
headers: {
|
|
28841
29311
|
[name: string]: unknown;
|
|
28842
29312
|
};
|
|
@@ -28844,12 +29314,9 @@ export interface operations {
|
|
|
28844
29314
|
"application/json": components["schemas"]["Error"];
|
|
28845
29315
|
};
|
|
28846
29316
|
};
|
|
28847
|
-
/** @description
|
|
28848
|
-
|
|
29317
|
+
/** @description Service unavailable. */
|
|
29318
|
+
503: {
|
|
28849
29319
|
headers: {
|
|
28850
|
-
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
28851
|
-
RateLimit: components["headers"]["RateLimit"];
|
|
28852
|
-
"Retry-After": components["headers"]["Retry-After"];
|
|
28853
29320
|
[name: string]: unknown;
|
|
28854
29321
|
};
|
|
28855
29322
|
content: {
|
|
@@ -28858,16 +29325,21 @@ export interface operations {
|
|
|
28858
29325
|
};
|
|
28859
29326
|
};
|
|
28860
29327
|
};
|
|
28861
|
-
|
|
29328
|
+
postV1AccountIdEventsEventIdRelease: {
|
|
28862
29329
|
parameters: {
|
|
28863
29330
|
query?: never;
|
|
28864
29331
|
header?: never;
|
|
28865
|
-
path
|
|
29332
|
+
path: {
|
|
29333
|
+
/** @description The connected LinkedIn account whose received events to read. */
|
|
29334
|
+
account_id: string;
|
|
29335
|
+
/** @description The event's `id`, as returned by the events read or by a claim. */
|
|
29336
|
+
event_id: string;
|
|
29337
|
+
};
|
|
28866
29338
|
cookie?: never;
|
|
28867
29339
|
};
|
|
28868
29340
|
requestBody?: never;
|
|
28869
29341
|
responses: {
|
|
28870
|
-
/** @description The
|
|
29342
|
+
/** @description The event's state after the release. A released event is claimable again immediately, by you or by anyone else. Releasing an event that is already done changes nothing and comes back with state done, because done is final. Release is the right move when your handler fails: hand the work back rather than sit on it for the rest of the lease. */
|
|
28871
29343
|
200: {
|
|
28872
29344
|
headers: {
|
|
28873
29345
|
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
@@ -28880,36 +29352,32 @@ export interface operations {
|
|
|
28880
29352
|
* @description Response type discriminator.
|
|
28881
29353
|
* @enum {string}
|
|
28882
29354
|
*/
|
|
28883
|
-
object
|
|
28884
|
-
/** @description
|
|
28885
|
-
|
|
28886
|
-
|
|
28887
|
-
|
|
28888
|
-
|
|
28889
|
-
|
|
28890
|
-
|
|
28891
|
-
|
|
28892
|
-
|
|
28893
|
-
|
|
28894
|
-
|
|
28895
|
-
|
|
28896
|
-
|
|
28897
|
-
|
|
28898
|
-
|
|
28899
|
-
|
|
28900
|
-
|
|
28901
|
-
|
|
28902
|
-
|
|
28903
|
-
|
|
28904
|
-
*/
|
|
28905
|
-
availability?: "realtime" | "no_longer_realtime" | "not_realtime";
|
|
28906
|
-
}[];
|
|
28907
|
-
}[];
|
|
29355
|
+
object: "event_lease";
|
|
29356
|
+
/** @description The event's id. */
|
|
29357
|
+
id: string;
|
|
29358
|
+
/**
|
|
29359
|
+
* @description unread: claimable now. claimed: leased to someone until lease_until. done: handled, and it will never be handed out again. There is no failed state.
|
|
29360
|
+
* @enum {string}
|
|
29361
|
+
*/
|
|
29362
|
+
state: "unread" | "claimed" | "done";
|
|
29363
|
+
/** @description The consumer name recorded by the last claim, or null. Free text, never verified, so treat it as a label rather than an identity. */
|
|
29364
|
+
claimed_by: string | null;
|
|
29365
|
+
/**
|
|
29366
|
+
* Format: date-time
|
|
29367
|
+
* @description When the current lease expires, or null when the event is not leased.
|
|
29368
|
+
*/
|
|
29369
|
+
lease_until: string | null;
|
|
29370
|
+
/**
|
|
29371
|
+
* Format: date-time
|
|
29372
|
+
* @description When the event was marked done, or null. Set once and never moved.
|
|
29373
|
+
*/
|
|
29374
|
+
done_at: string | null;
|
|
29375
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
28908
29376
|
};
|
|
28909
29377
|
};
|
|
28910
29378
|
};
|
|
28911
|
-
/** @description
|
|
28912
|
-
|
|
29379
|
+
/** @description No such event for this account, or it has already passed its 24 hour retention. An id whose connection was replaced or removed also stops resolving here, and it is already absent from the list, so re-read `GET /v1/accounts` for the current id. */
|
|
29380
|
+
404: {
|
|
28913
29381
|
headers: {
|
|
28914
29382
|
[name: string]: unknown;
|
|
28915
29383
|
};
|
|
@@ -28917,7 +29385,7 @@ export interface operations {
|
|
|
28917
29385
|
"application/json": components["schemas"]["Error"];
|
|
28918
29386
|
};
|
|
28919
29387
|
};
|
|
28920
|
-
/** @description Rate limited,
|
|
29388
|
+
/** @description Rate limited, retry after the hinted delay. */
|
|
28921
29389
|
429: {
|
|
28922
29390
|
headers: {
|
|
28923
29391
|
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
@@ -28929,68 +29397,8 @@ export interface operations {
|
|
|
28929
29397
|
"application/json": components["schemas"]["Error"];
|
|
28930
29398
|
};
|
|
28931
29399
|
};
|
|
28932
|
-
|
|
28933
|
-
|
|
28934
|
-
postV1WebhooksIdTest: {
|
|
28935
|
-
parameters: {
|
|
28936
|
-
query?: never;
|
|
28937
|
-
header?: never;
|
|
28938
|
-
path: {
|
|
28939
|
-
/** @description Webhook id (wh_-prefixed ULID). */
|
|
28940
|
-
id: string;
|
|
28941
|
-
};
|
|
28942
|
-
cookie?: never;
|
|
28943
|
-
};
|
|
28944
|
-
requestBody?: never;
|
|
28945
|
-
responses: {
|
|
28946
|
-
/** @description The test delivery is queued. It travels the same path as a real delivery: the same signature, the same custom headers, the same delivery record, the same retry schedule. Wait for it to arrive at your endpoint, verify the signature, and match data.test_id to the test_id below. */
|
|
28947
|
-
202: {
|
|
28948
|
-
headers: {
|
|
28949
|
-
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
28950
|
-
RateLimit: components["headers"]["RateLimit"];
|
|
28951
|
-
[name: string]: unknown;
|
|
28952
|
-
};
|
|
28953
|
-
content: {
|
|
28954
|
-
"application/json": {
|
|
28955
|
-
/**
|
|
28956
|
-
* @description Response type discriminator.
|
|
28957
|
-
* @enum {string}
|
|
28958
|
-
*/
|
|
28959
|
-
object?: "webhook_test";
|
|
28960
|
-
/** @description The webhook the test delivery was queued for. */
|
|
28961
|
-
webhook_id?: string;
|
|
28962
|
-
/** @description Correlation id for this test delivery, echoed as data.test_id in the delivered payload. Match it to confirm that the delivery your receiver observed is the one you asked for. */
|
|
28963
|
-
test_id?: string;
|
|
28964
|
-
/**
|
|
28965
|
-
* @description Always webhook.test. This name is not part of the event catalogue and can never be subscribed to, so it can never be confused with a real event.
|
|
28966
|
-
* @enum {string}
|
|
28967
|
-
*/
|
|
28968
|
-
event?: "webhook.test";
|
|
28969
|
-
/** @description When the test delivery was queued (ISO 8601). */
|
|
28970
|
-
queued_at?: string;
|
|
28971
|
-
};
|
|
28972
|
-
};
|
|
28973
|
-
};
|
|
28974
|
-
/** @description Malformed webhook id, or the webhook is disabled or targets no account, in which case nothing could be delivered. */
|
|
28975
|
-
400: {
|
|
28976
|
-
headers: {
|
|
28977
|
-
[name: string]: unknown;
|
|
28978
|
-
};
|
|
28979
|
-
content: {
|
|
28980
|
-
"application/json": components["schemas"]["Error"];
|
|
28981
|
-
};
|
|
28982
|
-
};
|
|
28983
|
-
/** @description Missing or invalid API key. */
|
|
28984
|
-
401: {
|
|
28985
|
-
headers: {
|
|
28986
|
-
[name: string]: unknown;
|
|
28987
|
-
};
|
|
28988
|
-
content: {
|
|
28989
|
-
"application/json": components["schemas"]["Error"];
|
|
28990
|
-
};
|
|
28991
|
-
};
|
|
28992
|
-
/** @description Webhook not found or not owned by this tenant. */
|
|
28993
|
-
404: {
|
|
29400
|
+
/** @description Internal error. */
|
|
29401
|
+
500: {
|
|
28994
29402
|
headers: {
|
|
28995
29403
|
[name: string]: unknown;
|
|
28996
29404
|
};
|
|
@@ -28998,12 +29406,9 @@ export interface operations {
|
|
|
28998
29406
|
"application/json": components["schemas"]["Error"];
|
|
28999
29407
|
};
|
|
29000
29408
|
};
|
|
29001
|
-
/** @description
|
|
29002
|
-
|
|
29409
|
+
/** @description Service unavailable. */
|
|
29410
|
+
503: {
|
|
29003
29411
|
headers: {
|
|
29004
|
-
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
29005
|
-
RateLimit: components["headers"]["RateLimit"];
|
|
29006
|
-
"Retry-After": components["headers"]["Retry-After"];
|
|
29007
29412
|
[name: string]: unknown;
|
|
29008
29413
|
};
|
|
29009
29414
|
content: {
|
|
@@ -29012,19 +29417,21 @@ export interface operations {
|
|
|
29012
29417
|
};
|
|
29013
29418
|
};
|
|
29014
29419
|
};
|
|
29015
|
-
|
|
29420
|
+
postV1AccountIdEventsEventIdDone: {
|
|
29016
29421
|
parameters: {
|
|
29017
29422
|
query?: never;
|
|
29018
29423
|
header?: never;
|
|
29019
29424
|
path: {
|
|
29020
|
-
/** @description
|
|
29021
|
-
|
|
29425
|
+
/** @description The connected LinkedIn account whose received events to read. */
|
|
29426
|
+
account_id: string;
|
|
29427
|
+
/** @description The event's `id`, as returned by the events read or by a claim. */
|
|
29428
|
+
event_id: string;
|
|
29022
29429
|
};
|
|
29023
29430
|
cookie?: never;
|
|
29024
29431
|
};
|
|
29025
29432
|
requestBody?: never;
|
|
29026
29433
|
responses: {
|
|
29027
|
-
/** @description The
|
|
29434
|
+
/** @description The event's state after being marked done. Done is the only terminal state there is, and it is shared: once an event is done it leaves the unread set for every consumer under this tenant, not just for you. There is no failed state, because an event nothing can handle simply expires with the rest at 24 hours. Calling this twice is safe and keeps the first done_at. */
|
|
29028
29435
|
200: {
|
|
29029
29436
|
headers: {
|
|
29030
29437
|
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
@@ -29037,42 +29444,32 @@ export interface operations {
|
|
|
29037
29444
|
* @description Response type discriminator.
|
|
29038
29445
|
* @enum {string}
|
|
29039
29446
|
*/
|
|
29040
|
-
object
|
|
29041
|
-
/** @description
|
|
29042
|
-
id
|
|
29447
|
+
object: "event_lease";
|
|
29448
|
+
/** @description The event's id. */
|
|
29449
|
+
id: string;
|
|
29043
29450
|
/**
|
|
29044
|
-
* @description
|
|
29451
|
+
* @description unread: claimable now. claimed: leased to someone until lease_until. done: handled, and it will never be handed out again. There is no failed state.
|
|
29045
29452
|
* @enum {string}
|
|
29046
29453
|
*/
|
|
29047
|
-
|
|
29048
|
-
/** @description The
|
|
29049
|
-
|
|
29050
|
-
/**
|
|
29051
|
-
|
|
29052
|
-
|
|
29053
|
-
|
|
29054
|
-
|
|
29055
|
-
|
|
29056
|
-
|
|
29057
|
-
|
|
29058
|
-
|
|
29059
|
-
|
|
29060
|
-
|
|
29061
|
-
value_prefix?: string;
|
|
29062
|
-
}[];
|
|
29063
|
-
/** @description Canonical event names this webhook subscribes to. */
|
|
29064
|
-
events?: string[];
|
|
29065
|
-
/** @description Field-remapping keys for the delivery payload (messaging and user sources only). */
|
|
29066
|
-
data?: string[];
|
|
29067
|
-
/** @description First 8 characters of the signing secret. The full secret is never returned on edit, it is preserved unchanged. */
|
|
29068
|
-
secret_prefix?: string;
|
|
29069
|
-
/** @description ISO-8601 creation timestamp. */
|
|
29070
|
-
created_at?: string;
|
|
29454
|
+
state: "unread" | "claimed" | "done";
|
|
29455
|
+
/** @description The consumer name recorded by the last claim, or null. Free text, never verified, so treat it as a label rather than an identity. */
|
|
29456
|
+
claimed_by: string | null;
|
|
29457
|
+
/**
|
|
29458
|
+
* Format: date-time
|
|
29459
|
+
* @description When the current lease expires, or null when the event is not leased.
|
|
29460
|
+
*/
|
|
29461
|
+
lease_until: string | null;
|
|
29462
|
+
/**
|
|
29463
|
+
* Format: date-time
|
|
29464
|
+
* @description When the event was marked done, or null. Set once and never moved.
|
|
29465
|
+
*/
|
|
29466
|
+
done_at: string | null;
|
|
29467
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
29071
29468
|
};
|
|
29072
29469
|
};
|
|
29073
29470
|
};
|
|
29074
|
-
/** @description
|
|
29075
|
-
|
|
29471
|
+
/** @description No such event for this account, or it has already passed its 24 hour retention. An id whose connection was replaced or removed also stops resolving here, and it is already absent from the list, so re-read `GET /v1/accounts` for the current id. */
|
|
29472
|
+
404: {
|
|
29076
29473
|
headers: {
|
|
29077
29474
|
[name: string]: unknown;
|
|
29078
29475
|
};
|
|
@@ -29080,17 +29477,20 @@ export interface operations {
|
|
|
29080
29477
|
"application/json": components["schemas"]["Error"];
|
|
29081
29478
|
};
|
|
29082
29479
|
};
|
|
29083
|
-
/** @description
|
|
29084
|
-
|
|
29480
|
+
/** @description Rate limited, retry after the hinted delay. */
|
|
29481
|
+
429: {
|
|
29085
29482
|
headers: {
|
|
29483
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
29484
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
29485
|
+
"Retry-After": components["headers"]["Retry-After"];
|
|
29086
29486
|
[name: string]: unknown;
|
|
29087
29487
|
};
|
|
29088
29488
|
content: {
|
|
29089
29489
|
"application/json": components["schemas"]["Error"];
|
|
29090
29490
|
};
|
|
29091
29491
|
};
|
|
29092
|
-
/** @description
|
|
29093
|
-
|
|
29492
|
+
/** @description Internal error. */
|
|
29493
|
+
500: {
|
|
29094
29494
|
headers: {
|
|
29095
29495
|
[name: string]: unknown;
|
|
29096
29496
|
};
|
|
@@ -29098,12 +29498,9 @@ export interface operations {
|
|
|
29098
29498
|
"application/json": components["schemas"]["Error"];
|
|
29099
29499
|
};
|
|
29100
29500
|
};
|
|
29101
|
-
/** @description
|
|
29102
|
-
|
|
29501
|
+
/** @description Service unavailable. */
|
|
29502
|
+
503: {
|
|
29103
29503
|
headers: {
|
|
29104
|
-
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
29105
|
-
RateLimit: components["headers"]["RateLimit"];
|
|
29106
|
-
"Retry-After": components["headers"]["Retry-After"];
|
|
29107
29504
|
[name: string]: unknown;
|
|
29108
29505
|
};
|
|
29109
29506
|
content: {
|
|
@@ -29112,19 +29509,21 @@ export interface operations {
|
|
|
29112
29509
|
};
|
|
29113
29510
|
};
|
|
29114
29511
|
};
|
|
29115
|
-
|
|
29512
|
+
getV1Webhooks: {
|
|
29116
29513
|
parameters: {
|
|
29117
|
-
query?:
|
|
29118
|
-
|
|
29119
|
-
|
|
29120
|
-
/** @description
|
|
29121
|
-
|
|
29514
|
+
query?: {
|
|
29515
|
+
/** @description Pagination cursor from a previous response; decodable, pass it back verbatim */
|
|
29516
|
+
cursor?: string;
|
|
29517
|
+
/** @description Max items per page (1-250, default 50) */
|
|
29518
|
+
limit?: number;
|
|
29122
29519
|
};
|
|
29520
|
+
header?: never;
|
|
29521
|
+
path?: never;
|
|
29123
29522
|
cookie?: never;
|
|
29124
29523
|
};
|
|
29125
29524
|
requestBody?: never;
|
|
29126
29525
|
responses: {
|
|
29127
|
-
/** @description
|
|
29526
|
+
/** @description A page of registered webhooks. The plaintext secret is never present on list items. */
|
|
29128
29527
|
200: {
|
|
29129
29528
|
headers: {
|
|
29130
29529
|
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
@@ -29137,13 +29536,60 @@ export interface operations {
|
|
|
29137
29536
|
* @description Response type discriminator.
|
|
29138
29537
|
* @enum {string}
|
|
29139
29538
|
*/
|
|
29140
|
-
object?: "
|
|
29141
|
-
/** @description
|
|
29142
|
-
|
|
29539
|
+
object?: "webhook_list";
|
|
29540
|
+
/** @description Page of registered webhooks. */
|
|
29541
|
+
items?: {
|
|
29542
|
+
/**
|
|
29543
|
+
* @description Response type discriminator.
|
|
29544
|
+
* @enum {string}
|
|
29545
|
+
*/
|
|
29546
|
+
object?: "webhook";
|
|
29547
|
+
/** @description Webhook id (wh_-prefixed ULID). */
|
|
29548
|
+
id?: string;
|
|
29549
|
+
/**
|
|
29550
|
+
* @description The event source this webhook subscribes to.
|
|
29551
|
+
* @enum {string}
|
|
29552
|
+
*/
|
|
29553
|
+
source?: "messaging" | "user" | "account_status";
|
|
29554
|
+
/** @description The URL that receives delivery POST requests. */
|
|
29555
|
+
request_url?: string;
|
|
29556
|
+
name?: string | null;
|
|
29557
|
+
account_ids?: string[];
|
|
29558
|
+
enabled?: boolean;
|
|
29559
|
+
/** @description Custom headers added to each delivery POST, with the value masked. */
|
|
29560
|
+
headers?: {
|
|
29561
|
+
key?: string;
|
|
29562
|
+
/** @description A masked view of the configured value: the first 8 characters followed by "..." when the value is at least 24 characters long, and a fixed "********" for anything shorter. The full value is never returned; the header name is what identifies which credential is configured. */
|
|
29563
|
+
value_prefix?: string;
|
|
29564
|
+
}[];
|
|
29565
|
+
events?: string[];
|
|
29566
|
+
data?: string[];
|
|
29567
|
+
/** @description First 8 characters of the secret (never the full secret). */
|
|
29568
|
+
secret_prefix?: string;
|
|
29569
|
+
/**
|
|
29570
|
+
* @description Delivery health state. 'degraded' when recent deliveries have repeatedly failed.
|
|
29571
|
+
* @enum {string}
|
|
29572
|
+
*/
|
|
29573
|
+
health?: "ok" | "degraded";
|
|
29574
|
+
created_at?: string;
|
|
29575
|
+
/**
|
|
29576
|
+
* @description ISO-8601 timestamp of the most recent delivery attempt, whether it succeeded or failed. Null when this webhook has never attempted a delivery.
|
|
29577
|
+
* @example 2026-06-17T10:05:00Z
|
|
29578
|
+
*/
|
|
29579
|
+
last_delivery_at?: string | null;
|
|
29580
|
+
/**
|
|
29581
|
+
* @description Percentage (0-100) of the last 7 days' delivery attempts that succeeded. Null when there were no attempts in that window; no data is not a perfect score. A webhook that attempted deliveries and failed every one returns 0, with a non-null last_delivery_at.
|
|
29582
|
+
* @example 98
|
|
29583
|
+
*/
|
|
29584
|
+
delivery_success_rate_7d?: number | null;
|
|
29585
|
+
}[];
|
|
29586
|
+
/** @description Opaque next-page cursor. Null on the last page. */
|
|
29587
|
+
cursor?: string | null;
|
|
29588
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
29143
29589
|
};
|
|
29144
29590
|
};
|
|
29145
29591
|
};
|
|
29146
|
-
/** @description
|
|
29592
|
+
/** @description Invalid pagination parameters, limit out of range or malformed cursor. */
|
|
29147
29593
|
400: {
|
|
29148
29594
|
headers: {
|
|
29149
29595
|
[name: string]: unknown;
|
|
@@ -29161,15 +29607,6 @@ export interface operations {
|
|
|
29161
29607
|
"application/json": components["schemas"]["Error"];
|
|
29162
29608
|
};
|
|
29163
29609
|
};
|
|
29164
|
-
/** @description Webhook not found or not owned by this tenant. */
|
|
29165
|
-
404: {
|
|
29166
|
-
headers: {
|
|
29167
|
-
[name: string]: unknown;
|
|
29168
|
-
};
|
|
29169
|
-
content: {
|
|
29170
|
-
"application/json": components["schemas"]["Error"];
|
|
29171
|
-
};
|
|
29172
|
-
};
|
|
29173
29610
|
/** @description Rate limited, slow down and retry after the hinted delay. */
|
|
29174
29611
|
429: {
|
|
29175
29612
|
headers: {
|
|
@@ -29184,58 +29621,119 @@ export interface operations {
|
|
|
29184
29621
|
};
|
|
29185
29622
|
};
|
|
29186
29623
|
};
|
|
29187
|
-
|
|
29624
|
+
postV1Webhooks: {
|
|
29188
29625
|
parameters: {
|
|
29189
29626
|
query?: never;
|
|
29190
29627
|
header?: never;
|
|
29191
|
-
path
|
|
29192
|
-
/** @description Webhook id (wh_-prefixed ULID). */
|
|
29193
|
-
id: string;
|
|
29194
|
-
};
|
|
29628
|
+
path?: never;
|
|
29195
29629
|
cookie?: never;
|
|
29196
29630
|
};
|
|
29197
29631
|
requestBody: {
|
|
29198
29632
|
content: {
|
|
29199
29633
|
"application/json": {
|
|
29200
|
-
/** @
|
|
29201
|
-
|
|
29202
|
-
/** @description
|
|
29203
|
-
request_url
|
|
29204
|
-
/** @description
|
|
29205
|
-
name?: string
|
|
29206
|
-
/** @description
|
|
29634
|
+
/** @constant */
|
|
29635
|
+
source: "messaging";
|
|
29636
|
+
/** @description HTTPS URL that receives webhook deliveries. Must be a publicly reachable host on the default https port; private, loopback and link-local addresses are rejected. */
|
|
29637
|
+
request_url: string;
|
|
29638
|
+
/** @description Human-readable name for this webhook (1-100 chars) */
|
|
29639
|
+
name?: string;
|
|
29640
|
+
/** @description Per-account targeting. Required and non-empty; each id must be an acc_-prefixed id owned by the tenant. */
|
|
29641
|
+
account_ids: string[];
|
|
29642
|
+
/**
|
|
29643
|
+
* @description A disabled webhook is created but delivers nothing
|
|
29644
|
+
* @default true
|
|
29645
|
+
*/
|
|
29207
29646
|
enabled?: boolean;
|
|
29208
|
-
/**
|
|
29647
|
+
/**
|
|
29648
|
+
* @description Custom headers added to each delivery POST. Names must be valid HTTP header names and values must be printable ASCII (no line breaks or control characters). Reserved names are rejected at registration; they include Content-Type, User-Agent, Host, any Curviate-* or Sec-* name, and the hop-by-hop headers. At most 10 headers, 1024 characters per value, 4096 bytes in total. Custom headers are not covered by the delivery signature, so treat them as a hint, not as proof of origin. Values are encrypted at rest and are never returned by a read. A read shows the header name plus a masked value: the first 8 characters followed by "..." when the value is at least 24 characters long, and a fixed "********" for anything shorter, so a short value is never disclosed by its own preview. The header name is what identifies which credential is configured.
|
|
29649
|
+
* @default []
|
|
29650
|
+
*/
|
|
29209
29651
|
headers?: {
|
|
29210
29652
|
key: string;
|
|
29211
29653
|
value: string;
|
|
29212
29654
|
}[];
|
|
29213
|
-
/** @description
|
|
29655
|
+
/** @description Messaging events to subscribe to (default: [message.received]) */
|
|
29656
|
+
events?: ("message.received" | "message.delivered" | "message.read" | "message.reaction" | "message.edited" | "message.deleted" | "chat.updated" | "chat.deleted")[];
|
|
29657
|
+
/**
|
|
29658
|
+
* @description Field-remapping keys for the messaging delivery payload
|
|
29659
|
+
* @default []
|
|
29660
|
+
*/
|
|
29214
29661
|
data?: string[];
|
|
29215
|
-
|
|
29216
|
-
|
|
29217
|
-
|
|
29218
|
-
|
|
29219
|
-
|
|
29220
|
-
|
|
29221
|
-
|
|
29222
|
-
|
|
29223
|
-
|
|
29224
|
-
|
|
29225
|
-
|
|
29226
|
-
|
|
29227
|
-
|
|
29228
|
-
|
|
29229
|
-
|
|
29230
|
-
|
|
29231
|
-
|
|
29232
|
-
|
|
29662
|
+
} | {
|
|
29663
|
+
/** @constant */
|
|
29664
|
+
source: "user";
|
|
29665
|
+
/** @description HTTPS URL that receives webhook deliveries. Must be a publicly reachable host on the default https port; private, loopback and link-local addresses are rejected. */
|
|
29666
|
+
request_url: string;
|
|
29667
|
+
/** @description Human-readable name for this webhook (1-100 chars) */
|
|
29668
|
+
name?: string;
|
|
29669
|
+
/** @description Per-account targeting. Required and non-empty; each id must be an acc_-prefixed id owned by the tenant. */
|
|
29670
|
+
account_ids: string[];
|
|
29671
|
+
/**
|
|
29672
|
+
* @description A disabled webhook is created but delivers nothing
|
|
29673
|
+
* @default true
|
|
29674
|
+
*/
|
|
29675
|
+
enabled?: boolean;
|
|
29676
|
+
/**
|
|
29677
|
+
* @description Custom headers added to each delivery POST. Names must be valid HTTP header names and values must be printable ASCII (no line breaks or control characters). Reserved names are rejected at registration; they include Content-Type, User-Agent, Host, any Curviate-* or Sec-* name, and the hop-by-hop headers. At most 10 headers, 1024 characters per value, 4096 bytes in total. Custom headers are not covered by the delivery signature, so treat them as a hint, not as proof of origin. Values are encrypted at rest and are never returned by a read. A read shows the header name plus a masked value: the first 8 characters followed by "..." when the value is at least 24 characters long, and a fixed "********" for anything shorter, so a short value is never disclosed by its own preview. The header name is what identifies which credential is configured.
|
|
29678
|
+
* @default []
|
|
29679
|
+
*/
|
|
29680
|
+
headers?: {
|
|
29681
|
+
key: string;
|
|
29682
|
+
value: string;
|
|
29683
|
+
}[];
|
|
29684
|
+
/** @description User/relation events to subscribe to (default: [connection.accepted]) */
|
|
29685
|
+
events?: ("connection.accepted" | "connection.new")[];
|
|
29686
|
+
/**
|
|
29687
|
+
* @description Field-remapping keys for the user/relation delivery payload
|
|
29688
|
+
* @default []
|
|
29689
|
+
*/
|
|
29690
|
+
data?: ("user_provider_id" | "user_full_name" | "user_public_identifier" | "user_profile_url" | "user_picture_url")[];
|
|
29691
|
+
} | {
|
|
29692
|
+
/** @constant */
|
|
29693
|
+
source: "account_status";
|
|
29694
|
+
/** @description HTTPS URL that receives webhook deliveries. Must be a publicly reachable host on the default https port; private, loopback and link-local addresses are rejected. */
|
|
29695
|
+
request_url: string;
|
|
29696
|
+
/** @description Human-readable name for this webhook (1-100 chars) */
|
|
29697
|
+
name?: string;
|
|
29698
|
+
/** @description Per-account targeting. Required and non-empty; each id must be an acc_-prefixed id owned by the tenant. */
|
|
29699
|
+
account_ids: string[];
|
|
29700
|
+
/**
|
|
29701
|
+
* @description A disabled webhook is created but delivers nothing
|
|
29702
|
+
* @default true
|
|
29703
|
+
*/
|
|
29704
|
+
enabled?: boolean;
|
|
29705
|
+
/**
|
|
29706
|
+
* @description Custom headers added to each delivery POST. Names must be valid HTTP header names and values must be printable ASCII (no line breaks or control characters). Reserved names are rejected at registration; they include Content-Type, User-Agent, Host, any Curviate-* or Sec-* name, and the hop-by-hop headers. At most 10 headers, 1024 characters per value, 4096 bytes in total. Custom headers are not covered by the delivery signature, so treat them as a hint, not as proof of origin. Values are encrypted at rest and are never returned by a read. A read shows the header name plus a masked value: the first 8 characters followed by "..." when the value is at least 24 characters long, and a fixed "********" for anything shorter, so a short value is never disclosed by its own preview. The header name is what identifies which credential is configured.
|
|
29707
|
+
* @default []
|
|
29708
|
+
*/
|
|
29709
|
+
headers?: {
|
|
29710
|
+
key: string;
|
|
29711
|
+
value: string;
|
|
29712
|
+
}[];
|
|
29713
|
+
/** @description Account-status events to subscribe to (default: all 12 lifecycle events) */
|
|
29714
|
+
events?: ("account.created" | "account.connected" | "account.synced" | "account.reconnected" | "account.reconnect_needed" | "account.restricted" | "account.creation_failed" | "account.disconnected" | "account.error" | "account.paused" | "account.connecting" | "account.permission_revoked" | "account.initial_sync.running" | "account.initial_sync.completed" | "account.initial_sync.failed")[];
|
|
29715
|
+
};
|
|
29716
|
+
};
|
|
29717
|
+
};
|
|
29718
|
+
responses: {
|
|
29719
|
+
/** @description Webhook registered. The HMAC signing secret is returned exactly once, store it immediately. */
|
|
29720
|
+
201: {
|
|
29721
|
+
headers: {
|
|
29722
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
29723
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
29724
|
+
[name: string]: unknown;
|
|
29725
|
+
};
|
|
29726
|
+
content: {
|
|
29727
|
+
"application/json": {
|
|
29728
|
+
/**
|
|
29729
|
+
* @description Response type discriminator.
|
|
29730
|
+
* @enum {string}
|
|
29233
29731
|
*/
|
|
29234
29732
|
object?: "webhook";
|
|
29235
29733
|
/** @description Webhook id (wh_-prefixed ULID). */
|
|
29236
29734
|
id?: string;
|
|
29237
29735
|
/**
|
|
29238
|
-
* @description The event source this webhook subscribes to
|
|
29736
|
+
* @description The event source this webhook subscribes to.
|
|
29239
29737
|
* @enum {string}
|
|
29240
29738
|
*/
|
|
29241
29739
|
source?: "messaging" | "user" | "account_status";
|
|
@@ -29243,9 +29741,9 @@ export interface operations {
|
|
|
29243
29741
|
request_url?: string;
|
|
29244
29742
|
/** @description Human-readable label. */
|
|
29245
29743
|
name?: string | null;
|
|
29246
|
-
/** @description Accounts targeted by this webhook.
|
|
29744
|
+
/** @description Accounts targeted by this webhook. Required and non-empty, each id must be owned by the tenant. */
|
|
29247
29745
|
account_ids?: string[];
|
|
29248
|
-
/** @description A disabled webhook is
|
|
29746
|
+
/** @description A disabled webhook is created but delivers nothing. */
|
|
29249
29747
|
enabled?: boolean;
|
|
29250
29748
|
/** @description Custom headers added to each delivery POST. Values are encrypted at rest, so a read shows the name and a masked value only. */
|
|
29251
29749
|
headers?: {
|
|
@@ -29258,14 +29756,23 @@ export interface operations {
|
|
|
29258
29756
|
events?: string[];
|
|
29259
29757
|
/** @description Field-remapping keys for the delivery payload (messaging and user sources only). */
|
|
29260
29758
|
data?: string[];
|
|
29261
|
-
/**
|
|
29759
|
+
/**
|
|
29760
|
+
* @description HMAC signing secret, 64 hexadecimal characters, returned exactly once at creation. Store it securely.
|
|
29761
|
+
* @example a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2
|
|
29762
|
+
*/
|
|
29763
|
+
secret?: string;
|
|
29764
|
+
/**
|
|
29765
|
+
* @description The first 8 characters of the secret, for identification without exposing it. Exactly the value the read endpoints return for this webhook.
|
|
29766
|
+
* @example a1b2c3d4
|
|
29767
|
+
*/
|
|
29262
29768
|
secret_prefix?: string;
|
|
29263
29769
|
/** @description ISO-8601 creation timestamp. */
|
|
29264
29770
|
created_at?: string;
|
|
29771
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
29265
29772
|
};
|
|
29266
29773
|
};
|
|
29267
29774
|
};
|
|
29268
|
-
/** @description Invalid request, malformed URL, empty events array, event-source mismatch
|
|
29775
|
+
/** @description Invalid request, malformed URL, empty events array, or event-source mismatch. */
|
|
29269
29776
|
400: {
|
|
29270
29777
|
headers: {
|
|
29271
29778
|
[name: string]: unknown;
|
|
@@ -29292,7 +29799,7 @@ export interface operations {
|
|
|
29292
29799
|
"application/json": components["schemas"]["Error"];
|
|
29293
29800
|
};
|
|
29294
29801
|
};
|
|
29295
|
-
/** @description
|
|
29802
|
+
/** @description One or more account_ids not found for this tenant. */
|
|
29296
29803
|
404: {
|
|
29297
29804
|
headers: {
|
|
29298
29805
|
[name: string]: unknown;
|
|
@@ -29324,4 +29831,1054 @@ export interface operations {
|
|
|
29324
29831
|
};
|
|
29325
29832
|
};
|
|
29326
29833
|
};
|
|
29834
|
+
getV1WebhooksEvents: {
|
|
29835
|
+
parameters: {
|
|
29836
|
+
query?: never;
|
|
29837
|
+
header?: never;
|
|
29838
|
+
path?: never;
|
|
29839
|
+
cookie?: never;
|
|
29840
|
+
};
|
|
29841
|
+
requestBody?: never;
|
|
29842
|
+
responses: {
|
|
29843
|
+
/** @description The complete canonical event catalogue, grouped by source. */
|
|
29844
|
+
200: {
|
|
29845
|
+
headers: {
|
|
29846
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
29847
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
29848
|
+
[name: string]: unknown;
|
|
29849
|
+
};
|
|
29850
|
+
content: {
|
|
29851
|
+
"application/json": {
|
|
29852
|
+
/**
|
|
29853
|
+
* @description Response type discriminator.
|
|
29854
|
+
* @enum {string}
|
|
29855
|
+
*/
|
|
29856
|
+
object?: "webhook_event_catalogue";
|
|
29857
|
+
/** @description Event types grouped by source. */
|
|
29858
|
+
sources?: {
|
|
29859
|
+
/** @description Event source group (messaging, user, account_status, recruiter, sales_nav). */
|
|
29860
|
+
source?: string;
|
|
29861
|
+
events?: {
|
|
29862
|
+
/** @description Canonical event name. */
|
|
29863
|
+
type?: string;
|
|
29864
|
+
/** @description Event source group. */
|
|
29865
|
+
source?: string;
|
|
29866
|
+
description?: string;
|
|
29867
|
+
/** @description Present and true when the event carries LinkedIn-specific content. */
|
|
29868
|
+
linkedin_only?: boolean;
|
|
29869
|
+
/**
|
|
29870
|
+
* @description Required add-on tier. Present only on tier-gated events.
|
|
29871
|
+
* @enum {string}
|
|
29872
|
+
*/
|
|
29873
|
+
tier?: "recruiter" | "sales_nav";
|
|
29874
|
+
/**
|
|
29875
|
+
* @description Delivery timing. Omitted (equivalent to 'realtime') on every live-pushed event. 'no_longer_realtime' means no push exists for this event; 'not_realtime' means delivery is not guaranteed sub-second and may lag the underlying LinkedIn event, typically because it is detected by a poll rather than pushed, though a given event's own reference article may document an additional immediate path.
|
|
29876
|
+
* @enum {string}
|
|
29877
|
+
*/
|
|
29878
|
+
availability?: "realtime" | "no_longer_realtime" | "not_realtime";
|
|
29879
|
+
}[];
|
|
29880
|
+
}[];
|
|
29881
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
29882
|
+
};
|
|
29883
|
+
};
|
|
29884
|
+
};
|
|
29885
|
+
/** @description Missing or invalid API key. */
|
|
29886
|
+
401: {
|
|
29887
|
+
headers: {
|
|
29888
|
+
[name: string]: unknown;
|
|
29889
|
+
};
|
|
29890
|
+
content: {
|
|
29891
|
+
"application/json": components["schemas"]["Error"];
|
|
29892
|
+
};
|
|
29893
|
+
};
|
|
29894
|
+
/** @description Rate limited, slow down and retry after the hinted delay. */
|
|
29895
|
+
429: {
|
|
29896
|
+
headers: {
|
|
29897
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
29898
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
29899
|
+
"Retry-After": components["headers"]["Retry-After"];
|
|
29900
|
+
[name: string]: unknown;
|
|
29901
|
+
};
|
|
29902
|
+
content: {
|
|
29903
|
+
"application/json": components["schemas"]["Error"];
|
|
29904
|
+
};
|
|
29905
|
+
};
|
|
29906
|
+
};
|
|
29907
|
+
};
|
|
29908
|
+
postV1WebhooksIdTest: {
|
|
29909
|
+
parameters: {
|
|
29910
|
+
query?: never;
|
|
29911
|
+
header?: never;
|
|
29912
|
+
path: {
|
|
29913
|
+
/** @description Webhook id (wh_-prefixed ULID). */
|
|
29914
|
+
id: string;
|
|
29915
|
+
};
|
|
29916
|
+
cookie?: never;
|
|
29917
|
+
};
|
|
29918
|
+
requestBody?: never;
|
|
29919
|
+
responses: {
|
|
29920
|
+
/** @description The test delivery is queued. It travels the same path as a real delivery: the same signature, the same custom headers, the same delivery record, the same retry schedule. Wait for it to arrive at your endpoint, verify the signature, and match data.test_id to the test_id below. */
|
|
29921
|
+
202: {
|
|
29922
|
+
headers: {
|
|
29923
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
29924
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
29925
|
+
[name: string]: unknown;
|
|
29926
|
+
};
|
|
29927
|
+
content: {
|
|
29928
|
+
"application/json": {
|
|
29929
|
+
/**
|
|
29930
|
+
* @description Response type discriminator.
|
|
29931
|
+
* @enum {string}
|
|
29932
|
+
*/
|
|
29933
|
+
object?: "webhook_test";
|
|
29934
|
+
/** @description The webhook the test delivery was queued for. */
|
|
29935
|
+
webhook_id?: string;
|
|
29936
|
+
/** @description Correlation id for this test delivery, echoed as data.test_id in the delivered payload. Match it to confirm that the delivery your receiver observed is the one you asked for. */
|
|
29937
|
+
test_id?: string;
|
|
29938
|
+
/**
|
|
29939
|
+
* @description Always webhook.test. This name is not part of the event catalogue and can never be subscribed to, so it can never be confused with a real event.
|
|
29940
|
+
* @enum {string}
|
|
29941
|
+
*/
|
|
29942
|
+
event?: "webhook.test";
|
|
29943
|
+
/** @description When the test delivery was queued (ISO 8601). */
|
|
29944
|
+
queued_at?: string;
|
|
29945
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
29946
|
+
};
|
|
29947
|
+
};
|
|
29948
|
+
};
|
|
29949
|
+
/** @description Malformed webhook id, or the webhook is disabled or targets no account, in which case nothing could be delivered. */
|
|
29950
|
+
400: {
|
|
29951
|
+
headers: {
|
|
29952
|
+
[name: string]: unknown;
|
|
29953
|
+
};
|
|
29954
|
+
content: {
|
|
29955
|
+
"application/json": components["schemas"]["Error"];
|
|
29956
|
+
};
|
|
29957
|
+
};
|
|
29958
|
+
/** @description Missing or invalid API key. */
|
|
29959
|
+
401: {
|
|
29960
|
+
headers: {
|
|
29961
|
+
[name: string]: unknown;
|
|
29962
|
+
};
|
|
29963
|
+
content: {
|
|
29964
|
+
"application/json": components["schemas"]["Error"];
|
|
29965
|
+
};
|
|
29966
|
+
};
|
|
29967
|
+
/** @description Webhook not found or not owned by this tenant. */
|
|
29968
|
+
404: {
|
|
29969
|
+
headers: {
|
|
29970
|
+
[name: string]: unknown;
|
|
29971
|
+
};
|
|
29972
|
+
content: {
|
|
29973
|
+
"application/json": components["schemas"]["Error"];
|
|
29974
|
+
};
|
|
29975
|
+
};
|
|
29976
|
+
/** @description Too many test deliveries, either for this webhook or across your tenant's webhooks. Wait for the window to reset; the Retry-After header gives the number of seconds. */
|
|
29977
|
+
429: {
|
|
29978
|
+
headers: {
|
|
29979
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
29980
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
29981
|
+
"Retry-After": components["headers"]["Retry-After"];
|
|
29982
|
+
[name: string]: unknown;
|
|
29983
|
+
};
|
|
29984
|
+
content: {
|
|
29985
|
+
"application/json": components["schemas"]["Error"];
|
|
29986
|
+
};
|
|
29987
|
+
};
|
|
29988
|
+
};
|
|
29989
|
+
};
|
|
29990
|
+
getV1WebhooksId: {
|
|
29991
|
+
parameters: {
|
|
29992
|
+
query?: never;
|
|
29993
|
+
header?: never;
|
|
29994
|
+
path: {
|
|
29995
|
+
/** @description Webhook id (wh_-prefixed ULID). */
|
|
29996
|
+
id: string;
|
|
29997
|
+
};
|
|
29998
|
+
cookie?: never;
|
|
29999
|
+
};
|
|
30000
|
+
requestBody?: never;
|
|
30001
|
+
responses: {
|
|
30002
|
+
/** @description The webhook, if owned by the calling tenant. The signing secret is never returned on a read, only the prefix. */
|
|
30003
|
+
200: {
|
|
30004
|
+
headers: {
|
|
30005
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
30006
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
30007
|
+
[name: string]: unknown;
|
|
30008
|
+
};
|
|
30009
|
+
content: {
|
|
30010
|
+
"application/json": {
|
|
30011
|
+
/**
|
|
30012
|
+
* @description Response type discriminator.
|
|
30013
|
+
* @enum {string}
|
|
30014
|
+
*/
|
|
30015
|
+
object?: "webhook";
|
|
30016
|
+
/** @description Webhook id (wh_-prefixed ULID). */
|
|
30017
|
+
id?: string;
|
|
30018
|
+
/**
|
|
30019
|
+
* @description The event source this webhook subscribes to (immutable).
|
|
30020
|
+
* @enum {string}
|
|
30021
|
+
*/
|
|
30022
|
+
source?: "messaging" | "user" | "account_status";
|
|
30023
|
+
/** @description The URL that receives delivery POST requests. */
|
|
30024
|
+
request_url?: string;
|
|
30025
|
+
/** @description Human-readable label. */
|
|
30026
|
+
name?: string | null;
|
|
30027
|
+
/** @description Accounts targeted by this webhook. Non-empty, each id is owned by the tenant. */
|
|
30028
|
+
account_ids?: string[];
|
|
30029
|
+
/** @description A disabled webhook is kept but delivers nothing. Disabling takes effect immediately, including for retries that were already queued; those attempts are abandoned, not deferred, so re-enabling delivers new events rather than replaying the ones that were dropped. */
|
|
30030
|
+
enabled?: boolean;
|
|
30031
|
+
/** @description Custom headers added to each delivery POST. Values are encrypted at rest, so a read shows the name and a masked value only. */
|
|
30032
|
+
headers?: {
|
|
30033
|
+
/** @description The header name, as configured. */
|
|
30034
|
+
key?: string;
|
|
30035
|
+
/** @description A masked view of the configured value: the first 8 characters followed by "..." when the value is at least 24 characters long, and a fixed "********" for anything shorter. The full value is never returned; the header name is what identifies which credential is configured. */
|
|
30036
|
+
value_prefix?: string;
|
|
30037
|
+
}[];
|
|
30038
|
+
/** @description Canonical event names this webhook subscribes to. */
|
|
30039
|
+
events?: string[];
|
|
30040
|
+
/** @description Field-remapping keys for the delivery payload (messaging and user sources only). */
|
|
30041
|
+
data?: string[];
|
|
30042
|
+
/** @description First 8 characters of the signing secret. The full secret is never returned on edit, it is preserved unchanged. */
|
|
30043
|
+
secret_prefix?: string;
|
|
30044
|
+
/** @description ISO-8601 creation timestamp. */
|
|
30045
|
+
created_at?: string;
|
|
30046
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
30047
|
+
};
|
|
30048
|
+
};
|
|
30049
|
+
};
|
|
30050
|
+
/** @description Malformed or empty webhook id. */
|
|
30051
|
+
400: {
|
|
30052
|
+
headers: {
|
|
30053
|
+
[name: string]: unknown;
|
|
30054
|
+
};
|
|
30055
|
+
content: {
|
|
30056
|
+
"application/json": components["schemas"]["Error"];
|
|
30057
|
+
};
|
|
30058
|
+
};
|
|
30059
|
+
/** @description Missing or invalid API key. */
|
|
30060
|
+
401: {
|
|
30061
|
+
headers: {
|
|
30062
|
+
[name: string]: unknown;
|
|
30063
|
+
};
|
|
30064
|
+
content: {
|
|
30065
|
+
"application/json": components["schemas"]["Error"];
|
|
30066
|
+
};
|
|
30067
|
+
};
|
|
30068
|
+
/** @description Webhook not found or not owned by this tenant. */
|
|
30069
|
+
404: {
|
|
30070
|
+
headers: {
|
|
30071
|
+
[name: string]: unknown;
|
|
30072
|
+
};
|
|
30073
|
+
content: {
|
|
30074
|
+
"application/json": components["schemas"]["Error"];
|
|
30075
|
+
};
|
|
30076
|
+
};
|
|
30077
|
+
/** @description Rate limited, slow down and retry after the hinted delay. */
|
|
30078
|
+
429: {
|
|
30079
|
+
headers: {
|
|
30080
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
30081
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
30082
|
+
"Retry-After": components["headers"]["Retry-After"];
|
|
30083
|
+
[name: string]: unknown;
|
|
30084
|
+
};
|
|
30085
|
+
content: {
|
|
30086
|
+
"application/json": components["schemas"]["Error"];
|
|
30087
|
+
};
|
|
30088
|
+
};
|
|
30089
|
+
};
|
|
30090
|
+
};
|
|
30091
|
+
deleteV1WebhooksId: {
|
|
30092
|
+
parameters: {
|
|
30093
|
+
query?: never;
|
|
30094
|
+
header?: never;
|
|
30095
|
+
path: {
|
|
30096
|
+
/** @description Webhook id (wh_-prefixed ULID). */
|
|
30097
|
+
id: string;
|
|
30098
|
+
};
|
|
30099
|
+
cookie?: never;
|
|
30100
|
+
};
|
|
30101
|
+
requestBody?: never;
|
|
30102
|
+
responses: {
|
|
30103
|
+
/** @description Webhook removed. Delivery stops immediately, including retries that were already queued. Idempotent, deleting an already-deleted webhook returns the same shape. */
|
|
30104
|
+
200: {
|
|
30105
|
+
headers: {
|
|
30106
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
30107
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
30108
|
+
[name: string]: unknown;
|
|
30109
|
+
};
|
|
30110
|
+
content: {
|
|
30111
|
+
"application/json": {
|
|
30112
|
+
/**
|
|
30113
|
+
* @description Response type discriminator.
|
|
30114
|
+
* @enum {string}
|
|
30115
|
+
*/
|
|
30116
|
+
object?: "webhook_deleted";
|
|
30117
|
+
/** @description The id of the deleted webhook. */
|
|
30118
|
+
id?: string;
|
|
30119
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
30120
|
+
};
|
|
30121
|
+
};
|
|
30122
|
+
};
|
|
30123
|
+
/** @description Malformed or empty webhook id. */
|
|
30124
|
+
400: {
|
|
30125
|
+
headers: {
|
|
30126
|
+
[name: string]: unknown;
|
|
30127
|
+
};
|
|
30128
|
+
content: {
|
|
30129
|
+
"application/json": components["schemas"]["Error"];
|
|
30130
|
+
};
|
|
30131
|
+
};
|
|
30132
|
+
/** @description Missing or invalid API key. */
|
|
30133
|
+
401: {
|
|
30134
|
+
headers: {
|
|
30135
|
+
[name: string]: unknown;
|
|
30136
|
+
};
|
|
30137
|
+
content: {
|
|
30138
|
+
"application/json": components["schemas"]["Error"];
|
|
30139
|
+
};
|
|
30140
|
+
};
|
|
30141
|
+
/** @description Webhook not found or not owned by this tenant. */
|
|
30142
|
+
404: {
|
|
30143
|
+
headers: {
|
|
30144
|
+
[name: string]: unknown;
|
|
30145
|
+
};
|
|
30146
|
+
content: {
|
|
30147
|
+
"application/json": components["schemas"]["Error"];
|
|
30148
|
+
};
|
|
30149
|
+
};
|
|
30150
|
+
/** @description Rate limited, slow down and retry after the hinted delay. */
|
|
30151
|
+
429: {
|
|
30152
|
+
headers: {
|
|
30153
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
30154
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
30155
|
+
"Retry-After": components["headers"]["Retry-After"];
|
|
30156
|
+
[name: string]: unknown;
|
|
30157
|
+
};
|
|
30158
|
+
content: {
|
|
30159
|
+
"application/json": components["schemas"]["Error"];
|
|
30160
|
+
};
|
|
30161
|
+
};
|
|
30162
|
+
};
|
|
30163
|
+
};
|
|
30164
|
+
patchV1WebhooksId: {
|
|
30165
|
+
parameters: {
|
|
30166
|
+
query?: never;
|
|
30167
|
+
header?: never;
|
|
30168
|
+
path: {
|
|
30169
|
+
/** @description Webhook id (wh_-prefixed ULID). */
|
|
30170
|
+
id: string;
|
|
30171
|
+
};
|
|
30172
|
+
cookie?: never;
|
|
30173
|
+
};
|
|
30174
|
+
requestBody: {
|
|
30175
|
+
content: {
|
|
30176
|
+
"application/json": {
|
|
30177
|
+
/** @description Replace the subscribed events (whole-array). Every event must be a canonical event whose source matches the webhook's source. */
|
|
30178
|
+
events?: string[];
|
|
30179
|
+
/** @description Replace the delivery URL. Must be a publicly reachable https host on the default https port. */
|
|
30180
|
+
request_url?: string;
|
|
30181
|
+
/** @description Replace the human-readable name (1-100 chars), or null to clear it. */
|
|
30182
|
+
name?: string | null;
|
|
30183
|
+
/** @description Enable or disable the webhook. A disabled webhook delivers nothing. Disabling is a stop, not a pause: it takes effect immediately, including for retries that were already queued, and those attempts are abandoned rather than deferred, so re-enabling delivers new events instead of replaying the ones that were dropped. */
|
|
30184
|
+
enabled?: boolean;
|
|
30185
|
+
/** @description Replace the custom headers added to each delivery POST (whole-array). Names must be valid HTTP header names and values must be printable ASCII (no line breaks or control characters). Reserved names are rejected at registration; they include Content-Type, User-Agent, Host, any Curviate-* or Sec-* name, and the hop-by-hop headers. At most 10 headers, 1024 characters per value, 4096 bytes in total. Custom headers are not covered by the delivery signature, so treat them as a hint, not as proof of origin. Values are encrypted at rest and are never returned by a read. A read shows the header name plus a masked value: the first 8 characters followed by "..." when the value is at least 24 characters long, and a fixed "********" for anything shorter, so a short value is never disclosed by its own preview. The header name is what identifies which credential is configured. */
|
|
30186
|
+
headers?: {
|
|
30187
|
+
key: string;
|
|
30188
|
+
value: string;
|
|
30189
|
+
}[];
|
|
30190
|
+
/** @description Replace the field-remapping keys for the delivery payload (whole-array). */
|
|
30191
|
+
data?: string[];
|
|
30192
|
+
/** @description Replace the targeted accounts (whole-array). Must be non-empty; each id must be an acc_-prefixed id owned by the tenant. */
|
|
30193
|
+
account_ids?: string[];
|
|
30194
|
+
};
|
|
30195
|
+
};
|
|
30196
|
+
};
|
|
30197
|
+
responses: {
|
|
30198
|
+
/** @description Webhook updated. The signing secret is preserved, only the prefix is shown, never the full secret. */
|
|
30199
|
+
200: {
|
|
30200
|
+
headers: {
|
|
30201
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
30202
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
30203
|
+
[name: string]: unknown;
|
|
30204
|
+
};
|
|
30205
|
+
content: {
|
|
30206
|
+
"application/json": {
|
|
30207
|
+
/**
|
|
30208
|
+
* @description Response type discriminator.
|
|
30209
|
+
* @enum {string}
|
|
30210
|
+
*/
|
|
30211
|
+
object?: "webhook";
|
|
30212
|
+
/** @description Webhook id (wh_-prefixed ULID). */
|
|
30213
|
+
id?: string;
|
|
30214
|
+
/**
|
|
30215
|
+
* @description The event source this webhook subscribes to (immutable).
|
|
30216
|
+
* @enum {string}
|
|
30217
|
+
*/
|
|
30218
|
+
source?: "messaging" | "user" | "account_status";
|
|
30219
|
+
/** @description The URL that receives delivery POST requests. */
|
|
30220
|
+
request_url?: string;
|
|
30221
|
+
/** @description Human-readable label. */
|
|
30222
|
+
name?: string | null;
|
|
30223
|
+
/** @description Accounts targeted by this webhook. Non-empty, each id is owned by the tenant. */
|
|
30224
|
+
account_ids?: string[];
|
|
30225
|
+
/** @description A disabled webhook is kept but delivers nothing. Disabling takes effect immediately, including for retries that were already queued; those attempts are abandoned, not deferred, so re-enabling delivers new events rather than replaying the ones that were dropped. */
|
|
30226
|
+
enabled?: boolean;
|
|
30227
|
+
/** @description Custom headers added to each delivery POST. Values are encrypted at rest, so a read shows the name and a masked value only. */
|
|
30228
|
+
headers?: {
|
|
30229
|
+
/** @description The header name, as configured. */
|
|
30230
|
+
key?: string;
|
|
30231
|
+
/** @description A masked view of the configured value: the first 8 characters followed by "..." when the value is at least 24 characters long, and a fixed "********" for anything shorter. The full value is never returned; the header name is what identifies which credential is configured. */
|
|
30232
|
+
value_prefix?: string;
|
|
30233
|
+
}[];
|
|
30234
|
+
/** @description Canonical event names this webhook subscribes to. */
|
|
30235
|
+
events?: string[];
|
|
30236
|
+
/** @description Field-remapping keys for the delivery payload (messaging and user sources only). */
|
|
30237
|
+
data?: string[];
|
|
30238
|
+
/** @description First 8 characters of the signing secret. The full secret is never returned on edit, it is preserved unchanged. */
|
|
30239
|
+
secret_prefix?: string;
|
|
30240
|
+
/** @description ISO-8601 creation timestamp. */
|
|
30241
|
+
created_at?: string;
|
|
30242
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
30243
|
+
};
|
|
30244
|
+
};
|
|
30245
|
+
};
|
|
30246
|
+
/** @description Invalid request, malformed URL, empty events array, event-source mismatch, a change to the immutable source, or a malformed id. */
|
|
30247
|
+
400: {
|
|
30248
|
+
headers: {
|
|
30249
|
+
[name: string]: unknown;
|
|
30250
|
+
};
|
|
30251
|
+
content: {
|
|
30252
|
+
"application/json": components["schemas"]["Error"];
|
|
30253
|
+
};
|
|
30254
|
+
};
|
|
30255
|
+
/** @description Missing or invalid API key. */
|
|
30256
|
+
401: {
|
|
30257
|
+
headers: {
|
|
30258
|
+
[name: string]: unknown;
|
|
30259
|
+
};
|
|
30260
|
+
content: {
|
|
30261
|
+
"application/json": components["schemas"]["Error"];
|
|
30262
|
+
};
|
|
30263
|
+
};
|
|
30264
|
+
/** @description Payment required, an active subscription is needed. */
|
|
30265
|
+
402: {
|
|
30266
|
+
headers: {
|
|
30267
|
+
[name: string]: unknown;
|
|
30268
|
+
};
|
|
30269
|
+
content: {
|
|
30270
|
+
"application/json": components["schemas"]["Error"];
|
|
30271
|
+
};
|
|
30272
|
+
};
|
|
30273
|
+
/** @description Webhook not found, or one or more account_ids not found for this tenant. */
|
|
30274
|
+
404: {
|
|
30275
|
+
headers: {
|
|
30276
|
+
[name: string]: unknown;
|
|
30277
|
+
};
|
|
30278
|
+
content: {
|
|
30279
|
+
"application/json": components["schemas"]["Error"];
|
|
30280
|
+
};
|
|
30281
|
+
};
|
|
30282
|
+
/** @description Payload too large, the request body exceeds the size limit. */
|
|
30283
|
+
413: {
|
|
30284
|
+
headers: {
|
|
30285
|
+
[name: string]: unknown;
|
|
30286
|
+
};
|
|
30287
|
+
content: {
|
|
30288
|
+
"application/json": components["schemas"]["Error"];
|
|
30289
|
+
};
|
|
30290
|
+
};
|
|
30291
|
+
/** @description Rate limited, slow down and retry after the hinted delay. */
|
|
30292
|
+
429: {
|
|
30293
|
+
headers: {
|
|
30294
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
30295
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
30296
|
+
"Retry-After": components["headers"]["Retry-After"];
|
|
30297
|
+
[name: string]: unknown;
|
|
30298
|
+
};
|
|
30299
|
+
content: {
|
|
30300
|
+
"application/json": components["schemas"]["Error"];
|
|
30301
|
+
};
|
|
30302
|
+
};
|
|
30303
|
+
};
|
|
30304
|
+
};
|
|
30305
|
+
getV1AccountIdSafetyPolicy: {
|
|
30306
|
+
parameters: {
|
|
30307
|
+
query?: never;
|
|
30308
|
+
header?: never;
|
|
30309
|
+
path: {
|
|
30310
|
+
/** @description The account ID (`acc_...`) whose safety policy to read. */
|
|
30311
|
+
account_id: string;
|
|
30312
|
+
};
|
|
30313
|
+
cookie?: never;
|
|
30314
|
+
};
|
|
30315
|
+
requestBody?: never;
|
|
30316
|
+
responses: {
|
|
30317
|
+
/** @description The account's full safety policy: every configurable field for every budget row, in one response. Any row whose configured value is above the Curviate default carries an `over_default` entry naming the value, the default and the source class of that default. Two top-level fields are DERIVED rather than configured: `warm_up` says whether Curviate is currently holding this account below its configured ceilings and by how much, and `activity_window` says which timezone the window is read in and whether it is switched on at all. */
|
|
30318
|
+
200: {
|
|
30319
|
+
headers: {
|
|
30320
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
30321
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
30322
|
+
[name: string]: unknown;
|
|
30323
|
+
};
|
|
30324
|
+
content: {
|
|
30325
|
+
"application/json": {
|
|
30326
|
+
/**
|
|
30327
|
+
* @description Response type discriminator.
|
|
30328
|
+
* @enum {string}
|
|
30329
|
+
*/
|
|
30330
|
+
object?: "safety_policy";
|
|
30331
|
+
/** @description The account this policy governs. */
|
|
30332
|
+
account_id?: string;
|
|
30333
|
+
/**
|
|
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. A standard-interface call still lives under the `basic` or `premium` figure for its row, and Curviate does not yet track that difference: on a non-`basic` profile the numbers here are the headroom of the elevated interface, not of every call, so read them as an upper bound rather than as your budget for a standard call.
|
|
30335
|
+
* @enum {string}
|
|
30336
|
+
*/
|
|
30337
|
+
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
30338
|
+
/**
|
|
30339
|
+
* @description The Curviate seat tier attached to this account when it disagrees with `limit_profile`, and null when the two agree or the account holds no seat. A seat records what you bought from Curviate; `limit_profile` records what LinkedIn currently grants, and a lapsed subscription moves one and not the other. The detected product always wins the numbers, so this is a report, not a refusal: a `recruiter` seat here means you are paying for Recruiter on an account LinkedIn does not currently grant it to. `core` alongside `basic` or `premium` is agreement, not a mismatch: Premium is a LinkedIn product, not a Curviate tier. A free-trial seat never reports here, because a trial is not a purchase, and neither does a seat whose entitlement has not started yet or has already lapsed.
|
|
30340
|
+
* @enum {string|null}
|
|
30341
|
+
*/
|
|
30342
|
+
seat_tier_mismatch?: "core" | "sn" | "recruiter" | null;
|
|
30343
|
+
/**
|
|
30344
|
+
* @description The account's default posture, before any per-row override.
|
|
30345
|
+
* @enum {string}
|
|
30346
|
+
*/
|
|
30347
|
+
posture?: "warn" | "enforce";
|
|
30348
|
+
/**
|
|
30349
|
+
* @description Whether that default is the account's own, the tenant's, or the built-in `warn`.
|
|
30350
|
+
* @enum {string}
|
|
30351
|
+
*/
|
|
30352
|
+
posture_source?: "account" | "tenant" | "default";
|
|
30353
|
+
/**
|
|
30354
|
+
* @description The workspace-wide posture default every account in the tenant inherits, or null when none is set. Always present, and separate from `posture` on purpose: when this account overrides the tenant default, a change to the tenant default does not move `posture`, and this field is how you can still see it took effect.
|
|
30355
|
+
* @enum {string|null}
|
|
30356
|
+
*/
|
|
30357
|
+
tenant_default_posture?: "warn" | "enforce" | null;
|
|
30358
|
+
/** @description The account's ACTIVE warm-up ramp, derived on every read. While an account is warming up, every row's effective ceiling is its configured ceiling multiplied by `factor`, so a `factor` of 0.15 means an account is being held to 15 percent of the numbers the rows below report. This is what Curviate currently believes about the account, and it is separate from the per-row `warm_up_state` and `warm_up_factor` fields, which report what is active on that row: set `warm_up_factor` on a row to pin it and ignore the derivation, and read `warm_up_state` as the label for whichever factor won. Every warm-up number is inferred, and none of them is published by LinkedIn. */
|
|
30359
|
+
warm_up?: {
|
|
30360
|
+
/**
|
|
30361
|
+
* @description `none` is an account at full speed. `ramping` is a new, thinly connected or dormant account climbing 0.15 to 0.35 to 0.60 to 0.85 to 1.00 by week. `restriction_recovery` is an account under, or just out of, a LinkedIn restriction: it holds at 0 for seven days after the restriction lifts, resumes at 0.40, then steps up 0.15 every four days.
|
|
30362
|
+
* @enum {string}
|
|
30363
|
+
*/
|
|
30364
|
+
state?: "none" | "ramping" | "restriction_recovery";
|
|
30365
|
+
/** @description The multiplier applied to every row's ceiling. 1 is not ramping. */
|
|
30366
|
+
factor?: number;
|
|
30367
|
+
/** @description Which week of the ramp this account is in, counted from whichever is later of its creation and its last return from a dormancy. Null when the post-restriction schedule applies instead, which is not the weekly table. */
|
|
30368
|
+
week?: number | null;
|
|
30369
|
+
/** @description The conditions currently true of this account: `account_age` under 180 days, `connections` under 150, `dormant` for over 30 days, `post_restriction` under or recovering from a LinkedIn restriction. `dormant` stays reported until the ramp it started completes, because that is what explains the factor. */
|
|
30370
|
+
triggers?: ("account_age" | "connections" | "dormant" | "post_restriction")[];
|
|
30371
|
+
/** @description The conditions Curviate could not check because nothing supplies their input. Reported rather than assumed false: `connections` is here on every account today, because the connected-account record LinkedIn returns carries no connection count. An unevaluated trigger is not a trigger that was checked and found false. */
|
|
30372
|
+
unevaluated?: ("account_age" | "connections" | "dormant" | "post_restriction")[];
|
|
30373
|
+
};
|
|
30374
|
+
/** @description The account-level half of the activity window. Outside the window, a live write to LinkedIn is reported under `warn` posture and refused under `enforce`; reads and anything served from Curviate's own store are never affected, at any hour. */
|
|
30375
|
+
activity_window?: {
|
|
30376
|
+
/** @description The IANA zone this account's activity window is read in, or null when none is set. A row may override it with its own `activity_window_timezone`. */
|
|
30377
|
+
timezone?: string | null;
|
|
30378
|
+
/** @description True when no zone is set, which DISABLES the activity window for every row that has not set its own. Curviate never guesses a zone: a guess eight hours wrong inverts the window, refusing every daytime write and permitting every nocturnal one, which is worse than having no window at all. If you configured a window and it never fires, this is why. */
|
|
30379
|
+
timezone_unset?: boolean;
|
|
30380
|
+
};
|
|
30381
|
+
/** @description Every budget row, always. */
|
|
30382
|
+
rows?: {
|
|
30383
|
+
/** @description The counted-action row this policy governs. */
|
|
30384
|
+
budget_row?: string;
|
|
30385
|
+
/** @description What `enforce` refuses at and `warn` reports at, in the row's own unit. Null means the row is uncalibrated: Curviate has no figure for it. */
|
|
30386
|
+
ceiling?: number | null;
|
|
30387
|
+
/** @description Routine band. */
|
|
30388
|
+
green?: number | null;
|
|
30389
|
+
/** @description Warn-louder band. */
|
|
30390
|
+
amber?: number | null;
|
|
30391
|
+
/**
|
|
30392
|
+
* @description The calendar grain this row is counted in.
|
|
30393
|
+
* @enum {string}
|
|
30394
|
+
*/
|
|
30395
|
+
window_kind?: "day" | "week" | "month";
|
|
30396
|
+
/** @description How many grain units one counting window spans. */
|
|
30397
|
+
window_span?: number;
|
|
30398
|
+
/** @description IANA zone name the counting window is aligned to. Null counts in UTC. */
|
|
30399
|
+
window_timezone?: string | null;
|
|
30400
|
+
/**
|
|
30401
|
+
* @description The posture in force for this row, after inheritance.
|
|
30402
|
+
* @enum {string}
|
|
30403
|
+
*/
|
|
30404
|
+
posture?: "warn" | "enforce";
|
|
30405
|
+
/**
|
|
30406
|
+
* @description Where that posture came from, so an override is visible as one.
|
|
30407
|
+
* @enum {string}
|
|
30408
|
+
*/
|
|
30409
|
+
posture_source?: "row" | "account" | "tenant" | "default";
|
|
30410
|
+
/** @description Local HH:MM the activity window opens. */
|
|
30411
|
+
activity_window_start?: string;
|
|
30412
|
+
/** @description Local HH:MM the activity window closes. */
|
|
30413
|
+
activity_window_end?: string;
|
|
30414
|
+
/** @description IANA zone name the activity window is read in. Null disables the window entirely. */
|
|
30415
|
+
activity_window_timezone?: string | null;
|
|
30416
|
+
/**
|
|
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. Stored reads and inbound events are never subject to the window under either setting, at any hour.
|
|
30418
|
+
* @enum {string}
|
|
30419
|
+
*/
|
|
30420
|
+
activity_window_applies_to?: "writes" | "all";
|
|
30421
|
+
/**
|
|
30422
|
+
* @description The warm-up state ACTIVE on this row: the label for `warm_up_factor` beside it, so the two always agree. Read-only, so a value sent on a write is accepted and ignored; set `warm_up_factor` to pin this row's ramp.
|
|
30423
|
+
* @enum {string}
|
|
30424
|
+
*/
|
|
30425
|
+
warm_up_state?: "none" | "ramping" | "restriction_recovery";
|
|
30426
|
+
/** @description The multiplier ACTIVE on this row, which is what `effective_ceiling` above was computed with. 1 is not ramping. Set it to pin this row and ignore the account's derived ramp; leave it unset to follow the derivation. */
|
|
30427
|
+
warm_up_factor?: number;
|
|
30428
|
+
/** @description Length cap on the row's free-text field, in characters. */
|
|
30429
|
+
character_cap?: number | null;
|
|
30430
|
+
/** @description Length cap on the row's subject line, in characters. */
|
|
30431
|
+
subject_character_cap?: number | null;
|
|
30432
|
+
/** @description Bound on a single query's result lines. Search rows only. */
|
|
30433
|
+
per_query_cap?: number | null;
|
|
30434
|
+
/**
|
|
30435
|
+
* @description How well calibrated this row's number is. `unseeded` means Curviate has no green, amber or ceiling figure for this row on this profile: the row is reported so nothing is silently missing, but nothing has calibrated it, so no value you set can be `over_default`.
|
|
30436
|
+
* @enum {string}
|
|
30437
|
+
*/
|
|
30438
|
+
source_class?: "substrate" | "linkedin_official" | "practitioner" | "inferred" | "unseeded";
|
|
30439
|
+
/** @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
|
+
effective_ceiling?: number | null;
|
|
30441
|
+
/** @description Empty when nothing on this row is above default. */
|
|
30442
|
+
over_default?: {
|
|
30443
|
+
/**
|
|
30444
|
+
* @description The field whose configured value is above default.
|
|
30445
|
+
* @enum {string}
|
|
30446
|
+
*/
|
|
30447
|
+
field?: "ceiling" | "green" | "amber" | "character_cap" | "subject_character_cap" | "per_query_cap";
|
|
30448
|
+
/** @description The configured value. */
|
|
30449
|
+
value?: number;
|
|
30450
|
+
/** @description The Curviate default it exceeds. */
|
|
30451
|
+
default?: number;
|
|
30452
|
+
/**
|
|
30453
|
+
* @description How well calibrated the DEFAULT is. `substrate` and `linkedin_official` are published figures; `practitioner` is corroborated operator experience; `inferred` is our own reasoning; `unseeded` means we have no figure at all for that row, in which case there is nothing to be above and no entry appears. Read this before deciding whether being above default matters.
|
|
30454
|
+
* @enum {string}
|
|
30455
|
+
*/
|
|
30456
|
+
source_class?: "substrate" | "linkedin_official" | "practitioner" | "inferred" | "unseeded";
|
|
30457
|
+
}[];
|
|
30458
|
+
}[];
|
|
30459
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
30460
|
+
};
|
|
30461
|
+
};
|
|
30462
|
+
};
|
|
30463
|
+
/** @description No such account for this tenant. An id whose connection was replaced or removed also stops resolving here, and it is already absent from the list, so re-read `GET /v1/accounts` for the current id. */
|
|
30464
|
+
404: {
|
|
30465
|
+
headers: {
|
|
30466
|
+
[name: string]: unknown;
|
|
30467
|
+
};
|
|
30468
|
+
content: {
|
|
30469
|
+
"application/json": components["schemas"]["Error"];
|
|
30470
|
+
};
|
|
30471
|
+
};
|
|
30472
|
+
/** @description Rate limited, slow down and retry after the hinted delay. */
|
|
30473
|
+
429: {
|
|
30474
|
+
headers: {
|
|
30475
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
30476
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
30477
|
+
"Retry-After": components["headers"]["Retry-After"];
|
|
30478
|
+
[name: string]: unknown;
|
|
30479
|
+
};
|
|
30480
|
+
content: {
|
|
30481
|
+
"application/json": components["schemas"]["Error"];
|
|
30482
|
+
};
|
|
30483
|
+
};
|
|
30484
|
+
};
|
|
30485
|
+
};
|
|
30486
|
+
patchV1AccountIdSafetyPolicy: {
|
|
30487
|
+
parameters: {
|
|
30488
|
+
query?: never;
|
|
30489
|
+
header?: never;
|
|
30490
|
+
path: {
|
|
30491
|
+
/** @description The account ID (`acc_...`) whose safety policy to update. */
|
|
30492
|
+
account_id: string;
|
|
30493
|
+
};
|
|
30494
|
+
cookie?: never;
|
|
30495
|
+
};
|
|
30496
|
+
requestBody: {
|
|
30497
|
+
content: {
|
|
30498
|
+
"application/json": {
|
|
30499
|
+
/**
|
|
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. Automatic detection at connect is not built yet, so setting this is currently the only way an account leaves `basic`; 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. A standard-interface call still lives under the `basic` or `premium` figure for its row, and Curviate does not yet track that difference: on a non-`basic` profile the numbers here are the headroom of the elevated interface, not of every call, so read them as an upper bound rather than as your budget for a standard call.
|
|
30501
|
+
* @enum {string}
|
|
30502
|
+
*/
|
|
30503
|
+
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
30504
|
+
/** @description The IANA zone this account's ACTIVITY window is read in, e.g. `Europe/Berlin`. Must be a real zone; anything else is a 400. Null clears it, which DISABLES the activity window for every row that has not set its own: a guessed zone inverts the window, which is worse than not having one. */
|
|
30505
|
+
timezone?: string | null;
|
|
30506
|
+
/**
|
|
30507
|
+
* @description The tenant-wide posture default, which every account inherits unless it overrides it. Set it once for a whole workspace of personas. Null clears it back to `warn`.
|
|
30508
|
+
* @enum {string|null}
|
|
30509
|
+
*/
|
|
30510
|
+
tenant_default_posture?: "warn" | "enforce" | null;
|
|
30511
|
+
/**
|
|
30512
|
+
* @description This account's posture default, overriding the tenant default for this account only. Null clears the override.
|
|
30513
|
+
* @enum {string|null}
|
|
30514
|
+
*/
|
|
30515
|
+
posture?: "warn" | "enforce" | null;
|
|
30516
|
+
/** @description Per-row configuration. Each entry names its `budget_row` and the fields to change. A row read back from the policy document may be sent here unchanged: its read-only fields (`effective_ceiling`, `posture_source`, `over_default`, `warm_up_state`) are accepted and ignored. */
|
|
30517
|
+
rows?: {
|
|
30518
|
+
/**
|
|
30519
|
+
* @description The budget row this patch configures.
|
|
30520
|
+
* @enum {string}
|
|
30521
|
+
*/
|
|
30522
|
+
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";
|
|
30523
|
+
/** @description What `enforce` refuses at and `warn` reports at, in this row's own unit. Any value up to 9007199254740991 is accepted and stored verbatim; a value above the Curviate default is reported back, never clamped. */
|
|
30524
|
+
ceiling?: number | null;
|
|
30525
|
+
/** @description Routine band. Activity at or below it is unremarkable. */
|
|
30526
|
+
green?: number | null;
|
|
30527
|
+
/** @description Warn-louder band, between green and the ceiling. */
|
|
30528
|
+
amber?: number | null;
|
|
30529
|
+
/**
|
|
30530
|
+
* @description The calendar grain this row is counted in.
|
|
30531
|
+
* @enum {string|null}
|
|
30532
|
+
*/
|
|
30533
|
+
window_kind?: "day" | "week" | "month" | null;
|
|
30534
|
+
/** @description How many `window_kind` units one counting window spans. */
|
|
30535
|
+
window_span?: number | null;
|
|
30536
|
+
/** @description IANA zone name the counting window is aligned to, e.g. `Europe/Berlin` or `UTC`. Must be a real zone; anything else is a 400. Null counts in UTC. */
|
|
30537
|
+
window_timezone?: string | null;
|
|
30538
|
+
/**
|
|
30539
|
+
* @description Posture for this row alone, overriding the account default. Null inherits the account default, which inherits the tenant default.
|
|
30540
|
+
* @enum {string|null}
|
|
30541
|
+
*/
|
|
30542
|
+
posture?: "warn" | "enforce" | null;
|
|
30543
|
+
/** @description Local time the activity window opens, HH:MM. Outside the window, live write operations are reported or refused per posture. */
|
|
30544
|
+
activity_window_start?: string | null;
|
|
30545
|
+
/** @description Local time the activity window closes, HH:MM. */
|
|
30546
|
+
activity_window_end?: string | null;
|
|
30547
|
+
/** @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
|
+
activity_window_timezone?: string | null;
|
|
30549
|
+
/**
|
|
30550
|
+
* @description What the activity window governs. `writes` (the default) covers live writes to LinkedIn; `all` widens it to live reads that Curviate cannot serve from its store; a read it may serve from the store (a profile by key, for one) stays exempt. Stored reads and inbound events are never subject to the window under either setting, at any hour.
|
|
30551
|
+
* @enum {string|null}
|
|
30552
|
+
*/
|
|
30553
|
+
activity_window_applies_to?: "writes" | "all" | null;
|
|
30554
|
+
/**
|
|
30555
|
+
* @description READ-ONLY. The warm-up ramp state active on this row: the label for `warm_up_factor` beside it, derived from it, so the two always agree. A value sent here is still checked for being a state at all, and is then accepted and ignored: it is never stored and never recorded in the ledger. Set `warm_up_factor` to pin a row out of the ramp Curviate derives for the account.
|
|
30556
|
+
* @enum {string|null}
|
|
30557
|
+
*/
|
|
30558
|
+
warm_up_state?: "none" | "ramping" | "restriction_recovery" | null;
|
|
30559
|
+
/** @description Multiplier applied to this row's ceiling while ramping. 1 is not ramping. */
|
|
30560
|
+
warm_up_factor?: number | null;
|
|
30561
|
+
/** @description Length cap on this row's free-text field, in characters (an invitation note, an InMail body). */
|
|
30562
|
+
character_cap?: number | null;
|
|
30563
|
+
/** @description Length cap on this row's subject line, in characters. */
|
|
30564
|
+
subject_character_cap?: number | null;
|
|
30565
|
+
/** @description Bound on a single query's result lines. Search rows only. */
|
|
30566
|
+
per_query_cap?: number | null;
|
|
30567
|
+
/**
|
|
30568
|
+
* @description How well calibrated this row's configured number is. Overriding it labels your own figure; the over-default warning always reports the class of the Curviate default.
|
|
30569
|
+
* @enum {string|null}
|
|
30570
|
+
*/
|
|
30571
|
+
source_class?: "substrate" | "linkedin_official" | "practitioner" | "inferred" | "unseeded" | null;
|
|
30572
|
+
/** @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
|
+
effective_ceiling?: unknown;
|
|
30574
|
+
/** @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
|
+
posture_source?: unknown;
|
|
30576
|
+
/** @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. */
|
|
30577
|
+
over_default?: unknown;
|
|
30578
|
+
}[];
|
|
30579
|
+
/** @description READ-ONLY. The document's type discriminator. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
|
|
30580
|
+
object?: unknown;
|
|
30581
|
+
/** @description READ-ONLY. The account this document describes; the path names it. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
|
|
30582
|
+
account_id?: unknown;
|
|
30583
|
+
/** @description READ-ONLY. The Curviate seat tier that disagrees with `limit_profile`. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
|
|
30584
|
+
seat_tier_mismatch?: unknown;
|
|
30585
|
+
/** @description READ-ONLY. Which scope supplied this account'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. */
|
|
30586
|
+
posture_source?: unknown;
|
|
30587
|
+
/** @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
|
+
warm_up?: unknown;
|
|
30589
|
+
};
|
|
30590
|
+
};
|
|
30591
|
+
};
|
|
30592
|
+
responses: {
|
|
30593
|
+
/** @description The account's full safety policy: every configurable field for every budget row, in one response. Any row whose configured value is above the Curviate default carries an `over_default` entry naming the value, the default and the source class of that default. Two top-level fields are DERIVED rather than configured: `warm_up` says whether Curviate is currently holding this account below its configured ceilings and by how much, and `activity_window` says which timezone the window is read in and whether it is switched on at all. This is the same body the read returns, so a value set above default is reported on the write that set it. */
|
|
30594
|
+
200: {
|
|
30595
|
+
headers: {
|
|
30596
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
30597
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
30598
|
+
[name: string]: unknown;
|
|
30599
|
+
};
|
|
30600
|
+
content: {
|
|
30601
|
+
"application/json": {
|
|
30602
|
+
/**
|
|
30603
|
+
* @description Response type discriminator.
|
|
30604
|
+
* @enum {string}
|
|
30605
|
+
*/
|
|
30606
|
+
object?: "safety_policy";
|
|
30607
|
+
/** @description The account this policy governs. */
|
|
30608
|
+
account_id?: string;
|
|
30609
|
+
/**
|
|
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. A standard-interface call still lives under the `basic` or `premium` figure for its row, and Curviate does not yet track that difference: on a non-`basic` profile the numbers here are the headroom of the elevated interface, not of every call, so read them as an upper bound rather than as your budget for a standard call.
|
|
30611
|
+
* @enum {string}
|
|
30612
|
+
*/
|
|
30613
|
+
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
30614
|
+
/**
|
|
30615
|
+
* @description The Curviate seat tier attached to this account when it disagrees with `limit_profile`, and null when the two agree or the account holds no seat. A seat records what you bought from Curviate; `limit_profile` records what LinkedIn currently grants, and a lapsed subscription moves one and not the other. The detected product always wins the numbers, so this is a report, not a refusal: a `recruiter` seat here means you are paying for Recruiter on an account LinkedIn does not currently grant it to. `core` alongside `basic` or `premium` is agreement, not a mismatch: Premium is a LinkedIn product, not a Curviate tier. A free-trial seat never reports here, because a trial is not a purchase, and neither does a seat whose entitlement has not started yet or has already lapsed.
|
|
30616
|
+
* @enum {string|null}
|
|
30617
|
+
*/
|
|
30618
|
+
seat_tier_mismatch?: "core" | "sn" | "recruiter" | null;
|
|
30619
|
+
/**
|
|
30620
|
+
* @description The account's default posture, before any per-row override.
|
|
30621
|
+
* @enum {string}
|
|
30622
|
+
*/
|
|
30623
|
+
posture?: "warn" | "enforce";
|
|
30624
|
+
/**
|
|
30625
|
+
* @description Whether that default is the account's own, the tenant's, or the built-in `warn`.
|
|
30626
|
+
* @enum {string}
|
|
30627
|
+
*/
|
|
30628
|
+
posture_source?: "account" | "tenant" | "default";
|
|
30629
|
+
/**
|
|
30630
|
+
* @description The workspace-wide posture default every account in the tenant inherits, or null when none is set. Always present, and separate from `posture` on purpose: when this account overrides the tenant default, a change to the tenant default does not move `posture`, and this field is how you can still see it took effect.
|
|
30631
|
+
* @enum {string|null}
|
|
30632
|
+
*/
|
|
30633
|
+
tenant_default_posture?: "warn" | "enforce" | null;
|
|
30634
|
+
/** @description The account's ACTIVE warm-up ramp, derived on every read. While an account is warming up, every row's effective ceiling is its configured ceiling multiplied by `factor`, so a `factor` of 0.15 means an account is being held to 15 percent of the numbers the rows below report. This is what Curviate currently believes about the account, and it is separate from the per-row `warm_up_state` and `warm_up_factor` fields, which report what is active on that row: set `warm_up_factor` on a row to pin it and ignore the derivation, and read `warm_up_state` as the label for whichever factor won. Every warm-up number is inferred, and none of them is published by LinkedIn. */
|
|
30635
|
+
warm_up?: {
|
|
30636
|
+
/**
|
|
30637
|
+
* @description `none` is an account at full speed. `ramping` is a new, thinly connected or dormant account climbing 0.15 to 0.35 to 0.60 to 0.85 to 1.00 by week. `restriction_recovery` is an account under, or just out of, a LinkedIn restriction: it holds at 0 for seven days after the restriction lifts, resumes at 0.40, then steps up 0.15 every four days.
|
|
30638
|
+
* @enum {string}
|
|
30639
|
+
*/
|
|
30640
|
+
state?: "none" | "ramping" | "restriction_recovery";
|
|
30641
|
+
/** @description The multiplier applied to every row's ceiling. 1 is not ramping. */
|
|
30642
|
+
factor?: number;
|
|
30643
|
+
/** @description Which week of the ramp this account is in, counted from whichever is later of its creation and its last return from a dormancy. Null when the post-restriction schedule applies instead, which is not the weekly table. */
|
|
30644
|
+
week?: number | null;
|
|
30645
|
+
/** @description The conditions currently true of this account: `account_age` under 180 days, `connections` under 150, `dormant` for over 30 days, `post_restriction` under or recovering from a LinkedIn restriction. `dormant` stays reported until the ramp it started completes, because that is what explains the factor. */
|
|
30646
|
+
triggers?: ("account_age" | "connections" | "dormant" | "post_restriction")[];
|
|
30647
|
+
/** @description The conditions Curviate could not check because nothing supplies their input. Reported rather than assumed false: `connections` is here on every account today, because the connected-account record LinkedIn returns carries no connection count. An unevaluated trigger is not a trigger that was checked and found false. */
|
|
30648
|
+
unevaluated?: ("account_age" | "connections" | "dormant" | "post_restriction")[];
|
|
30649
|
+
};
|
|
30650
|
+
/** @description The account-level half of the activity window. Outside the window, a live write to LinkedIn is reported under `warn` posture and refused under `enforce`; reads and anything served from Curviate's own store are never affected, at any hour. */
|
|
30651
|
+
activity_window?: {
|
|
30652
|
+
/** @description The IANA zone this account's activity window is read in, or null when none is set. A row may override it with its own `activity_window_timezone`. */
|
|
30653
|
+
timezone?: string | null;
|
|
30654
|
+
/** @description True when no zone is set, which DISABLES the activity window for every row that has not set its own. Curviate never guesses a zone: a guess eight hours wrong inverts the window, refusing every daytime write and permitting every nocturnal one, which is worse than having no window at all. If you configured a window and it never fires, this is why. */
|
|
30655
|
+
timezone_unset?: boolean;
|
|
30656
|
+
};
|
|
30657
|
+
/** @description Every budget row, always. */
|
|
30658
|
+
rows?: {
|
|
30659
|
+
/** @description The counted-action row this policy governs. */
|
|
30660
|
+
budget_row?: string;
|
|
30661
|
+
/** @description What `enforce` refuses at and `warn` reports at, in the row's own unit. Null means the row is uncalibrated: Curviate has no figure for it. */
|
|
30662
|
+
ceiling?: number | null;
|
|
30663
|
+
/** @description Routine band. */
|
|
30664
|
+
green?: number | null;
|
|
30665
|
+
/** @description Warn-louder band. */
|
|
30666
|
+
amber?: number | null;
|
|
30667
|
+
/**
|
|
30668
|
+
* @description The calendar grain this row is counted in.
|
|
30669
|
+
* @enum {string}
|
|
30670
|
+
*/
|
|
30671
|
+
window_kind?: "day" | "week" | "month";
|
|
30672
|
+
/** @description How many grain units one counting window spans. */
|
|
30673
|
+
window_span?: number;
|
|
30674
|
+
/** @description IANA zone name the counting window is aligned to. Null counts in UTC. */
|
|
30675
|
+
window_timezone?: string | null;
|
|
30676
|
+
/**
|
|
30677
|
+
* @description The posture in force for this row, after inheritance.
|
|
30678
|
+
* @enum {string}
|
|
30679
|
+
*/
|
|
30680
|
+
posture?: "warn" | "enforce";
|
|
30681
|
+
/**
|
|
30682
|
+
* @description Where that posture came from, so an override is visible as one.
|
|
30683
|
+
* @enum {string}
|
|
30684
|
+
*/
|
|
30685
|
+
posture_source?: "row" | "account" | "tenant" | "default";
|
|
30686
|
+
/** @description Local HH:MM the activity window opens. */
|
|
30687
|
+
activity_window_start?: string;
|
|
30688
|
+
/** @description Local HH:MM the activity window closes. */
|
|
30689
|
+
activity_window_end?: string;
|
|
30690
|
+
/** @description IANA zone name the activity window is read in. Null disables the window entirely. */
|
|
30691
|
+
activity_window_timezone?: string | null;
|
|
30692
|
+
/**
|
|
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. Stored reads and inbound events are never subject to the window under either setting, at any hour.
|
|
30694
|
+
* @enum {string}
|
|
30695
|
+
*/
|
|
30696
|
+
activity_window_applies_to?: "writes" | "all";
|
|
30697
|
+
/**
|
|
30698
|
+
* @description The warm-up state ACTIVE on this row: the label for `warm_up_factor` beside it, so the two always agree. Read-only, so a value sent on a write is accepted and ignored; set `warm_up_factor` to pin this row's ramp.
|
|
30699
|
+
* @enum {string}
|
|
30700
|
+
*/
|
|
30701
|
+
warm_up_state?: "none" | "ramping" | "restriction_recovery";
|
|
30702
|
+
/** @description The multiplier ACTIVE on this row, which is what `effective_ceiling` above was computed with. 1 is not ramping. Set it to pin this row and ignore the account's derived ramp; leave it unset to follow the derivation. */
|
|
30703
|
+
warm_up_factor?: number;
|
|
30704
|
+
/** @description Length cap on the row's free-text field, in characters. */
|
|
30705
|
+
character_cap?: number | null;
|
|
30706
|
+
/** @description Length cap on the row's subject line, in characters. */
|
|
30707
|
+
subject_character_cap?: number | null;
|
|
30708
|
+
/** @description Bound on a single query's result lines. Search rows only. */
|
|
30709
|
+
per_query_cap?: number | null;
|
|
30710
|
+
/**
|
|
30711
|
+
* @description How well calibrated this row's number is. `unseeded` means Curviate has no green, amber or ceiling figure for this row on this profile: the row is reported so nothing is silently missing, but nothing has calibrated it, so no value you set can be `over_default`.
|
|
30712
|
+
* @enum {string}
|
|
30713
|
+
*/
|
|
30714
|
+
source_class?: "substrate" | "linkedin_official" | "practitioner" | "inferred" | "unseeded";
|
|
30715
|
+
/** @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
|
+
effective_ceiling?: number | null;
|
|
30717
|
+
/** @description Empty when nothing on this row is above default. */
|
|
30718
|
+
over_default?: {
|
|
30719
|
+
/**
|
|
30720
|
+
* @description The field whose configured value is above default.
|
|
30721
|
+
* @enum {string}
|
|
30722
|
+
*/
|
|
30723
|
+
field?: "ceiling" | "green" | "amber" | "character_cap" | "subject_character_cap" | "per_query_cap";
|
|
30724
|
+
/** @description The configured value. */
|
|
30725
|
+
value?: number;
|
|
30726
|
+
/** @description The Curviate default it exceeds. */
|
|
30727
|
+
default?: number;
|
|
30728
|
+
/**
|
|
30729
|
+
* @description How well calibrated the DEFAULT is. `substrate` and `linkedin_official` are published figures; `practitioner` is corroborated operator experience; `inferred` is our own reasoning; `unseeded` means we have no figure at all for that row, in which case there is nothing to be above and no entry appears. Read this before deciding whether being above default matters.
|
|
30730
|
+
* @enum {string}
|
|
30731
|
+
*/
|
|
30732
|
+
source_class?: "substrate" | "linkedin_official" | "practitioner" | "inferred" | "unseeded";
|
|
30733
|
+
}[];
|
|
30734
|
+
}[];
|
|
30735
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
30736
|
+
};
|
|
30737
|
+
};
|
|
30738
|
+
};
|
|
30739
|
+
/** @description INVALID_REQUEST. The row name, posture or source class is not one of the accepted values, or a number is not a number (a negative ceiling). A value is never rejected for being unsafe: any limit may be set to any value, and a high one is reported rather than refused. */
|
|
30740
|
+
400: {
|
|
30741
|
+
headers: {
|
|
30742
|
+
[name: string]: unknown;
|
|
30743
|
+
};
|
|
30744
|
+
content: {
|
|
30745
|
+
"application/json": components["schemas"]["Error"];
|
|
30746
|
+
};
|
|
30747
|
+
};
|
|
30748
|
+
/** @description No such account for this tenant. An id whose connection was replaced or removed also stops resolving here, and it is already absent from the list, so re-read `GET /v1/accounts` for the current id. */
|
|
30749
|
+
404: {
|
|
30750
|
+
headers: {
|
|
30751
|
+
[name: string]: unknown;
|
|
30752
|
+
};
|
|
30753
|
+
content: {
|
|
30754
|
+
"application/json": components["schemas"]["Error"];
|
|
30755
|
+
};
|
|
30756
|
+
};
|
|
30757
|
+
/** @description Payload too large, the request body exceeds the size limit. */
|
|
30758
|
+
413: {
|
|
30759
|
+
headers: {
|
|
30760
|
+
[name: string]: unknown;
|
|
30761
|
+
};
|
|
30762
|
+
content: {
|
|
30763
|
+
"application/json": components["schemas"]["Error"];
|
|
30764
|
+
};
|
|
30765
|
+
};
|
|
30766
|
+
/** @description Rate limited, slow down and retry after the hinted delay. */
|
|
30767
|
+
429: {
|
|
30768
|
+
headers: {
|
|
30769
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
30770
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
30771
|
+
"Retry-After": components["headers"]["Retry-After"];
|
|
30772
|
+
[name: string]: unknown;
|
|
30773
|
+
};
|
|
30774
|
+
content: {
|
|
30775
|
+
"application/json": components["schemas"]["Error"];
|
|
30776
|
+
};
|
|
30777
|
+
};
|
|
30778
|
+
};
|
|
30779
|
+
};
|
|
30780
|
+
getV1AccountIdSafetyEvents: {
|
|
30781
|
+
parameters: {
|
|
30782
|
+
query?: {
|
|
30783
|
+
/** @description Pagination cursor from a previous response; decodable, pass it back verbatim. */
|
|
30784
|
+
cursor?: string;
|
|
30785
|
+
/** @description Return only events flagged against this budget row. Omit for every row. */
|
|
30786
|
+
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";
|
|
30787
|
+
/** @description Only events at or after this instant (ISO-8601, e.g. 2026-09-01T00:00:00Z). */
|
|
30788
|
+
since?: string;
|
|
30789
|
+
/** @description Only events strictly before this instant (ISO-8601). */
|
|
30790
|
+
until?: string;
|
|
30791
|
+
/** @description How many events to return per page, 1 to 100. Defaults to 50. */
|
|
30792
|
+
limit?: number;
|
|
30793
|
+
};
|
|
30794
|
+
header?: never;
|
|
30795
|
+
path: {
|
|
30796
|
+
/** @description The account ID (`acc_...`) whose safety events to read. */
|
|
30797
|
+
account_id: string;
|
|
30798
|
+
};
|
|
30799
|
+
cookie?: never;
|
|
30800
|
+
};
|
|
30801
|
+
requestBody?: never;
|
|
30802
|
+
responses: {
|
|
30803
|
+
/** @description What Curviate refused or warned about on this account, newest first. Filter by `budget_row` to ask about one action type, and by `since` / `until` to ask about a period. */
|
|
30804
|
+
200: {
|
|
30805
|
+
headers: {
|
|
30806
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
30807
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
30808
|
+
[name: string]: unknown;
|
|
30809
|
+
};
|
|
30810
|
+
content: {
|
|
30811
|
+
"application/json": {
|
|
30812
|
+
/**
|
|
30813
|
+
* @description Response type discriminator.
|
|
30814
|
+
* @enum {string}
|
|
30815
|
+
*/
|
|
30816
|
+
object: "safety_event_list";
|
|
30817
|
+
/** @description Flagged events, newest first. [] when this account has never breached a limit. */
|
|
30818
|
+
items: {
|
|
30819
|
+
/**
|
|
30820
|
+
* @description Item type discriminator.
|
|
30821
|
+
* @enum {string}
|
|
30822
|
+
*/
|
|
30823
|
+
object: "safety_event";
|
|
30824
|
+
/** @description The event's id. Also the value encoded in the next page's cursor. */
|
|
30825
|
+
id: string;
|
|
30826
|
+
/**
|
|
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.
|
|
30828
|
+
* @enum {string}
|
|
30829
|
+
*/
|
|
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";
|
|
30831
|
+
/**
|
|
30832
|
+
* @description Why it was flagged. `budget_exhausted`: the account reached the ceiling configured for that row, which you can raise on the safety policy. `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
|
+
* @enum {string}
|
|
30834
|
+
*/
|
|
30835
|
+
reason: "budget_exhausted" | "rate_limited";
|
|
30836
|
+
/** @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
|
+
blocked: boolean;
|
|
30838
|
+
/** @description The operation the caller was running when it breached. */
|
|
30839
|
+
method: string;
|
|
30840
|
+
/**
|
|
30841
|
+
* Format: date-time
|
|
30842
|
+
* @description When it happened.
|
|
30843
|
+
*/
|
|
30844
|
+
occurred_at: string;
|
|
30845
|
+
}[];
|
|
30846
|
+
/** @description Cursor for the next page; null on the terminal page. Pass it back verbatim. Page until cursor is null. */
|
|
30847
|
+
cursor: string | null;
|
|
30848
|
+
safety_warning?: components["schemas"]["SafetyWarning"];
|
|
30849
|
+
};
|
|
30850
|
+
};
|
|
30851
|
+
};
|
|
30852
|
+
/** @description Invalid request: an out-of-range `limit`, an unknown `budget_row`, a malformed `since` / `until`, or a corrupt `cursor`. */
|
|
30853
|
+
400: {
|
|
30854
|
+
headers: {
|
|
30855
|
+
[name: string]: unknown;
|
|
30856
|
+
};
|
|
30857
|
+
content: {
|
|
30858
|
+
"application/json": components["schemas"]["Error"];
|
|
30859
|
+
};
|
|
30860
|
+
};
|
|
30861
|
+
/** @description No such account for this tenant. An id whose connection was replaced or removed also stops resolving here, and it is already absent from the list, so re-read `GET /v1/accounts` for the current id. */
|
|
30862
|
+
404: {
|
|
30863
|
+
headers: {
|
|
30864
|
+
[name: string]: unknown;
|
|
30865
|
+
};
|
|
30866
|
+
content: {
|
|
30867
|
+
"application/json": components["schemas"]["Error"];
|
|
30868
|
+
};
|
|
30869
|
+
};
|
|
30870
|
+
/** @description Rate limited, slow down and retry after the hinted delay. */
|
|
30871
|
+
429: {
|
|
30872
|
+
headers: {
|
|
30873
|
+
"RateLimit-Policy": components["headers"]["RateLimit-Policy"];
|
|
30874
|
+
RateLimit: components["headers"]["RateLimit"];
|
|
30875
|
+
"Retry-After": components["headers"]["Retry-After"];
|
|
30876
|
+
[name: string]: unknown;
|
|
30877
|
+
};
|
|
30878
|
+
content: {
|
|
30879
|
+
"application/json": components["schemas"]["Error"];
|
|
30880
|
+
};
|
|
30881
|
+
};
|
|
30882
|
+
};
|
|
30883
|
+
};
|
|
29327
30884
|
}
|