@curviate/sdk 0.38.0 → 0.40.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 +76 -0
- package/dist/index.d.ts +33 -5
- package/dist/index.js +18 -5
- package/package.json +1 -1
- package/src/generated/types.ts +32 -4
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,82 @@ Versioning: semantic. Minor for additive changes, patch for bug fixes; no stabil
|
|
|
9
9
|
|
|
10
10
|
## [Unreleased]
|
|
11
11
|
|
|
12
|
+
## [0.40.0] - 2026-10-01
|
|
13
|
+
|
|
14
|
+
Fixture and types regenerated against the deployed production document
|
|
15
|
+
(`https://api.curviate.com`, 130 paths, server
|
|
16
|
+
`66421dcfa43949f2fd60b2872ef7fe3b16a79660`).
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- **A blank search filter or keyword is now refused with a `400`.** The
|
|
21
|
+
served document marks every free-text search filter and keyword
|
|
22
|
+
`minLength: 1`, and the server enforces it. A caller that sends an empty
|
|
23
|
+
string (`""`) for a filter or `keywords` used to get a search that ignored
|
|
24
|
+
it, and now gets `INVALID_REQUEST`. Omit the field instead of sending it
|
|
25
|
+
empty. The SDK does not validate this client-side, so the refusal comes from
|
|
26
|
+
the server. This is the one behaviour change in the release: callers that
|
|
27
|
+
pass `""` through from user input need to drop the key first.
|
|
28
|
+
- **`POST /v1/auth/checkpoint/poll` and `POST /v1/auth/checkpoint/solve` now
|
|
29
|
+
return `409 ACCOUNT_ALREADY_LINKED` when the approved LinkedIn identity is
|
|
30
|
+
already connected.** On solve, the body carries `account_id` when the
|
|
31
|
+
existing account is yours, so you can reuse it. When the identity is held by
|
|
32
|
+
another workspace, poll and solve name no account and the error is not
|
|
33
|
+
retryable. The
|
|
34
|
+
`CHECKPOINT_EXPIRED`, `CHECKPOINT_ALREADY_RESOLVED` and
|
|
35
|
+
`CONNECTION_IN_PROGRESS` 409s are unchanged. The generated 409 descriptions
|
|
36
|
+
and the `ACCOUNT_ALREADY_LINKED` note in `errors.ts` say so.
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
|
|
40
|
+
- **`TOOLSET_DISABLED` and `AMBIGUOUS_IDENTIFIER` are now in the error
|
|
41
|
+
taxonomy.** The served `Error` type documents an extra field for each
|
|
42
|
+
(`toolset`, `candidates`), but the SDK did not carry either code, so a
|
|
43
|
+
response with one decoded to `INTERNAL`, which is retryable and reads as a
|
|
44
|
+
server fault. They now decode to themselves and are not retried. A new guard
|
|
45
|
+
reads the codes named in the `Error` extras descriptions from the fixture and
|
|
46
|
+
fails if the taxonomy lacks one.
|
|
47
|
+
|
|
48
|
+
### Added
|
|
49
|
+
|
|
50
|
+
- **The generated `Error` type documents the per-code extra fields**, each
|
|
51
|
+
optional and present only on its code: `portal_url` (`PAYMENT_REQUIRED`,
|
|
52
|
+
`ACCOUNT_DISPUTED`; `null` when no portal session could be opened),
|
|
53
|
+
`attempts_remaining` (`CHECKPOINT_INVALID_CODE`), `challenge_type`
|
|
54
|
+
(`CHECKPOINT_UNSUPPORTED`), `account_id` (`ACCOUNT_ALREADY_LINKED`), `quota`
|
|
55
|
+
(`RATE_LIMIT_ACCOUNT`), `toolset` (`TOOLSET_DISABLED`) and `candidates`
|
|
56
|
+
(`AMBIGUOUS_IDENTIFIER`, each `{ id, name }`). These are types only:
|
|
57
|
+
`CurviateError` does not surface them as properties yet, so read them from
|
|
58
|
+
the response body if you need them.
|
|
59
|
+
|
|
60
|
+
## [0.39.0] - 2026-09-28
|
|
61
|
+
|
|
62
|
+
Fixture and types regenerated against the deployed production document
|
|
63
|
+
(`https://api.curviate.com`, 130 paths, server
|
|
64
|
+
`006f3739c93ff758085dc0ad13ae423bafab4631`).
|
|
65
|
+
|
|
66
|
+
### Changed
|
|
67
|
+
|
|
68
|
+
- **The retry decision now honours an explicit `retry_likely_to_succeed:
|
|
69
|
+
false`.** A GET on a retryable code (`INTERNAL`, `PLATFORM_ERROR`,
|
|
70
|
+
`PLATFORM_RATE_LIMIT`, `RATE_LIMIT_ACCOUNT`, `RATE_LIMIT_TENANT`) whose
|
|
71
|
+
envelope says `retry_likely_to_succeed: false` is no longer retried, with or
|
|
72
|
+
without a `retry_hint`. The server now sends `false` only as a verdict that
|
|
73
|
+
an unchanged retry fails the same way, and `true` for a failure whose cause
|
|
74
|
+
it cannot see, so this closes the half of the 0.37.1 fix that was deferred.
|
|
75
|
+
A response with no JSON envelope, or no such field, still retries on the
|
|
76
|
+
code table alone. Requires a server that includes the change; against an
|
|
77
|
+
older server, unexpected `INTERNAL` and `PLATFORM_ERROR` failures would stop
|
|
78
|
+
being retried.
|
|
79
|
+
- **`accounts.addSeats()` documents its new failure shapes.** A `502` means
|
|
80
|
+
the purchase failed after today's charge was taken; the charge was refunded
|
|
81
|
+
in full and the seat count was confirmed unchanged, so no seats were added
|
|
82
|
+
and it is safe to retry. A `503 STRIPE_DRIFT_DETECTED` means the seat price
|
|
83
|
+
is misconfigured on our side: nothing was charged, this is not something you
|
|
84
|
+
can fix, and retrying fails the same way until the price is corrected.
|
|
85
|
+
Contact support. Both are generated-type/description additions; no
|
|
86
|
+
resource-method shape changed.
|
|
87
|
+
|
|
12
88
|
## [0.38.0] - 2026-09-26
|
|
13
89
|
|
|
14
90
|
Fixture and types regenerated against the deployed production document
|
package/dist/index.d.ts
CHANGED
|
@@ -2878,6 +2878,25 @@ interface components {
|
|
|
2878
2878
|
name?: string;
|
|
2879
2879
|
}[];
|
|
2880
2880
|
}[];
|
|
2881
|
+
/** @description Present on PAYMENT_REQUIRED and ACCOUNT_DISPUTED: the self-service page where the tenant resolves the payment problem, so an agent can hand a human one link. Null when no portal session could be opened; fall back to the dashboard. */
|
|
2882
|
+
portal_url?: string | null;
|
|
2883
|
+
/** @description Present on CHECKPOINT_INVALID_CODE: how many more verification codes the checkpoint accepts before it locks. Stop and ask the account owner for a fresh code when it reaches zero, rather than guessing. */
|
|
2884
|
+
attempts_remaining?: number;
|
|
2885
|
+
/** @description Present on CHECKPOINT_UNSUPPORTED: the kind of verification challenge LinkedIn raised that cannot be solved through this API. A human has to complete it in LinkedIn, then the account reconnects. */
|
|
2886
|
+
challenge_type?: string;
|
|
2887
|
+
/** @description Present on ACCOUNT_ALREADY_LINKED: the id of your own existing account for this LinkedIn profile, so you can reuse it instead of linking again. Only ever an account of the calling tenant. */
|
|
2888
|
+
account_id?: string;
|
|
2889
|
+
/** @description Present on RATE_LIMIT_ACCOUNT: the per-account request ceiling that was breached, with its name, the units remaining and total, and the absolute reset_time. Wait until reset_time before retrying. */
|
|
2890
|
+
quota?: Record<string, never>;
|
|
2891
|
+
/** @description Present on TOOLSET_DISABLED: the name of the toolset that is switched off for this tenant, so you can enable it or use another tool. */
|
|
2892
|
+
toolset?: string;
|
|
2893
|
+
/** @description Present on AMBIGUOUS_IDENTIFIER: the entries the identifier matched. Pick one and re-send its id. */
|
|
2894
|
+
candidates?: {
|
|
2895
|
+
/** @description The id to send instead of the ambiguous identifier. */
|
|
2896
|
+
id?: string;
|
|
2897
|
+
/** @description Human-readable label for this entry. */
|
|
2898
|
+
name?: string;
|
|
2899
|
+
}[];
|
|
2881
2900
|
/** @description Present on errors that can be recovered programmatically, a plain sentence describing the next call to make. */
|
|
2882
2901
|
next_action?: string;
|
|
2883
2902
|
/** @description Present when something about this response is true but not visible in it. On a search, an entry names a filter value we could not check before sending it, or reports that some of the people on the page were not disclosed to the connected account, so an unexpected result count is explicable rather than silent. Branch on each entry's code, never on its message. */
|
|
@@ -28960,7 +28979,7 @@ interface operations {
|
|
|
28960
28979
|
"application/json": components["schemas"]["Error"];
|
|
28961
28980
|
};
|
|
28962
28981
|
};
|
|
28963
|
-
/** @description
|
|
28982
|
+
/** @description CHECKPOINT_EXPIRED or CHECKPOINT_ALREADY_RESOLVED: restart the connection. ACCOUNT_ALREADY_LINKED: the LinkedIn identity is already connected; it names your own account_id when you own it, otherwise it is not one you can manage here. CONNECTION_IN_PROGRESS: another connection attempt for this identity is open; wait for it to finish or expire. */
|
|
28964
28983
|
409: {
|
|
28965
28984
|
headers: {
|
|
28966
28985
|
[name: string]: unknown;
|
|
@@ -29310,7 +29329,7 @@ interface operations {
|
|
|
29310
29329
|
"application/json": components["schemas"]["Error"];
|
|
29311
29330
|
};
|
|
29312
29331
|
};
|
|
29313
|
-
/** @description The approved LinkedIn identity is already
|
|
29332
|
+
/** @description ACCOUNT_ALREADY_LINKED. The approved LinkedIn identity is already connected and is not one you can manage here; not retryable. CONNECTION_IN_PROGRESS. Another connection attempt for this identity is open; wait for it to finish or expire. */
|
|
29314
29333
|
409: {
|
|
29315
29334
|
headers: {
|
|
29316
29335
|
[name: string]: unknown;
|
|
@@ -31778,7 +31797,16 @@ interface operations {
|
|
|
31778
31797
|
"application/json": components["schemas"]["Error"];
|
|
31779
31798
|
};
|
|
31780
31799
|
};
|
|
31781
|
-
/** @description The purchase
|
|
31800
|
+
/** @description The purchase failed after today's charge was taken; the charge was refunded in full and the seat count was confirmed unchanged, so no seats were added. Safe to retry. */
|
|
31801
|
+
502: {
|
|
31802
|
+
headers: {
|
|
31803
|
+
[name: string]: unknown;
|
|
31804
|
+
};
|
|
31805
|
+
content: {
|
|
31806
|
+
"application/json": components["schemas"]["Error"];
|
|
31807
|
+
};
|
|
31808
|
+
};
|
|
31809
|
+
/** @description The purchase could not be confirmed while another change was in progress (check the seat count before retrying), or the seat price is misconfigured on our side (nothing charged; contact support, retrying fails the same way). */
|
|
31782
31810
|
503: {
|
|
31783
31811
|
headers: {
|
|
31784
31812
|
[name: string]: unknown;
|
|
@@ -31956,7 +31984,7 @@ interface operations {
|
|
|
31956
31984
|
"application/json": components["schemas"]["Error"];
|
|
31957
31985
|
};
|
|
31958
31986
|
};
|
|
31959
|
-
/** @description Another change to this subscription is in progress
|
|
31987
|
+
/** @description Another change to this subscription is in progress (retry shortly), or the seat price is misconfigured on our side (nothing charged; contact support, retrying fails the same way). */
|
|
31960
31988
|
503: {
|
|
31961
31989
|
headers: {
|
|
31962
31990
|
[name: string]: unknown;
|
|
@@ -34472,7 +34500,7 @@ declare class Curviate {
|
|
|
34472
34500
|
* A code the API NEVER emitted is a different case and goes immediately, since
|
|
34473
34501
|
* no deployment can be sending it: `RATE_LIMITED` went that way in 0.30.0.
|
|
34474
34502
|
*/
|
|
34475
|
-
declare const ERROR_CODES: readonly ["UNAUTHORIZED", "INVALID_REQUEST", "UNSUPPORTED_MEDIA_TYPE", "PAYLOAD_TOO_LARGE", "ACCOUNT_NOT_FOUND", "ACCOUNT_RESTRICTED", "ACCOUNT_ALREADY_LINKED", "RESOURCE_NOT_FOUND", "NOT_STORED", "RESOURCE_ACCESS_RESTRICTED", "FILTER_CANDIDATES_REQUIRED", "NO_ACTIVE_SEAT", "LINKEDIN_FEATURE_NOT_SUBSCRIBED", "BETA_NOT_ENABLED", "RATE_LIMIT_ACCOUNT", "RATE_LIMIT_TENANT", "PLATFORM_RATE_LIMIT", "BUDGET_EXHAUSTED", "PLATFORM_ERROR", "PLATFORM_NOT_IMPLEMENTED", "LINKEDIN_OPERATION_NOT_SUPPORTED", "CHECKPOINT_NOT_FOUND", "CHECKPOINT_EXPIRED", "CHECKPOINT_INVALID_CODE", "CHECKPOINT_MAX_ATTEMPTS", "CHECKPOINT_ALREADY_RESOLVED", "CHECKPOINT_UNSUPPORTED", "CONNECTION_IN_PROGRESS", "REAUTH_REQUIRED", "LINKEDIN_AUTH_FAILED", "LINKEDIN_SESSION_EVICTED", "LINKEDIN_RATE_LIMITED", "LINKEDIN_COOKIE_INVALID", "LINKEDIN_SERVICE_UNAVAILABLE", "MESSAGE_WINDOW_EXPIRED", "RECIPIENT_UNREACHABLE", "CONNECTION_REQUEST_CONFLICT", "PAYMENT_REQUIRED", "PAYMENT_FAILED", "SUBSCRIPTION_BUSY", "SUBSCRIPTION_NOT_FOUND", "SEAT_NOT_FOUND", "SEAT_CANCELLED", "NOT_FOUND", "REACTION_NOT_FOUND", "SUBSTRATE_LINK_FAILED", "SUBSTRATE_CAP_REACHED", "BILLING_CHECKOUT_FAILED", "BILLING_PORTAL_UNAVAILABLE", "ACCOUNT_DISPUTED", "ACCOUNT_LINKING_DISABLED", "PERIOD_LOCKED", "SEAT_NOT_EMPTY", "SEAT_PROVISIONAL", "SUBSCRIPTION_ALREADY_EXISTS", "ALREADY_CANCELLED", "CANCELLATION_ALREADY_EFFECTIVE", "INVALID_CANCELLATION_SOURCE", "TRIAL_EXPIRED", "TRIAL_SEAT_LIMIT", "TRIAL_ACTIVE_SEAT_LIMIT", "TRIAL_IDENTITY_ALREADY_USED", "TRIAL_IDENTITY_UNRESOLVED", "ADMIN_BYPASS", "STRIPE_DRIFT_DETECTED", "INTERNAL"];
|
|
34503
|
+
declare const ERROR_CODES: readonly ["UNAUTHORIZED", "INVALID_REQUEST", "UNSUPPORTED_MEDIA_TYPE", "PAYLOAD_TOO_LARGE", "ACCOUNT_NOT_FOUND", "ACCOUNT_RESTRICTED", "ACCOUNT_ALREADY_LINKED", "RESOURCE_NOT_FOUND", "NOT_STORED", "RESOURCE_ACCESS_RESTRICTED", "FILTER_CANDIDATES_REQUIRED", "NO_ACTIVE_SEAT", "LINKEDIN_FEATURE_NOT_SUBSCRIBED", "BETA_NOT_ENABLED", "RATE_LIMIT_ACCOUNT", "RATE_LIMIT_TENANT", "PLATFORM_RATE_LIMIT", "BUDGET_EXHAUSTED", "PLATFORM_ERROR", "PLATFORM_NOT_IMPLEMENTED", "LINKEDIN_OPERATION_NOT_SUPPORTED", "CHECKPOINT_NOT_FOUND", "CHECKPOINT_EXPIRED", "CHECKPOINT_INVALID_CODE", "CHECKPOINT_MAX_ATTEMPTS", "CHECKPOINT_ALREADY_RESOLVED", "CHECKPOINT_UNSUPPORTED", "CONNECTION_IN_PROGRESS", "REAUTH_REQUIRED", "LINKEDIN_AUTH_FAILED", "LINKEDIN_SESSION_EVICTED", "LINKEDIN_RATE_LIMITED", "LINKEDIN_COOKIE_INVALID", "LINKEDIN_SERVICE_UNAVAILABLE", "MESSAGE_WINDOW_EXPIRED", "RECIPIENT_UNREACHABLE", "CONNECTION_REQUEST_CONFLICT", "PAYMENT_REQUIRED", "PAYMENT_FAILED", "SUBSCRIPTION_BUSY", "SUBSCRIPTION_NOT_FOUND", "SEAT_NOT_FOUND", "SEAT_CANCELLED", "NOT_FOUND", "REACTION_NOT_FOUND", "SUBSTRATE_LINK_FAILED", "SUBSTRATE_CAP_REACHED", "BILLING_CHECKOUT_FAILED", "BILLING_PORTAL_UNAVAILABLE", "ACCOUNT_DISPUTED", "ACCOUNT_LINKING_DISABLED", "PERIOD_LOCKED", "SEAT_NOT_EMPTY", "SEAT_PROVISIONAL", "SUBSCRIPTION_ALREADY_EXISTS", "ALREADY_CANCELLED", "CANCELLATION_ALREADY_EFFECTIVE", "INVALID_CANCELLATION_SOURCE", "TRIAL_EXPIRED", "TRIAL_SEAT_LIMIT", "TRIAL_ACTIVE_SEAT_LIMIT", "TRIAL_IDENTITY_ALREADY_USED", "TRIAL_IDENTITY_UNRESOLVED", "ADMIN_BYPASS", "STRIPE_DRIFT_DETECTED", "TOOLSET_DISABLED", "AMBIGUOUS_IDENTIFIER", "INTERNAL"];
|
|
34476
34504
|
/**
|
|
34477
34505
|
* The complete set of error codes observable by API callers.
|
|
34478
34506
|
*
|
package/dist/index.js
CHANGED
|
@@ -8,8 +8,10 @@ var ERROR_CODES = [
|
|
|
8
8
|
// Account state
|
|
9
9
|
"ACCOUNT_NOT_FOUND",
|
|
10
10
|
"ACCOUNT_RESTRICTED",
|
|
11
|
-
// Duplicate connect:
|
|
12
|
-
//
|
|
11
|
+
// Duplicate connect (409): the LinkedIn identity is already connected. When
|
|
12
|
+
// your own tenant holds it the body carries `account_id`, so reuse that
|
|
13
|
+
// account instead of linking again; when another tenant holds it the body
|
|
14
|
+
// names no account and there is nothing you can manage here. Not retryable.
|
|
13
15
|
"ACCOUNT_ALREADY_LINKED",
|
|
14
16
|
"RESOURCE_NOT_FOUND",
|
|
15
17
|
// A read found nothing in Curviate's store and its mode may not fetch, so it
|
|
@@ -165,6 +167,16 @@ var ERROR_CODES = [
|
|
|
165
167
|
// was charged. Stop and surface it to a human (or support) rather than
|
|
166
168
|
// backing off.
|
|
167
169
|
"STRIPE_DRIFT_DETECTED",
|
|
170
|
+
// Agent-surface refusals the served Error component documents (their extras
|
|
171
|
+
// are `toolset` and `candidates`). Both are user_fixable and never
|
|
172
|
+
// retryable as sent.
|
|
173
|
+
//
|
|
174
|
+
// - `TOOLSET_DISABLED`: the toolset the call needs is switched off for this
|
|
175
|
+
// tenant. Enable it or use another tool.
|
|
176
|
+
// - `AMBIGUOUS_IDENTIFIER`: a name matched several entries. Pick one from
|
|
177
|
+
// `candidates` and re-send its id.
|
|
178
|
+
"TOOLSET_DISABLED",
|
|
179
|
+
"AMBIGUOUS_IDENTIFIER",
|
|
168
180
|
// Generic
|
|
169
181
|
"INTERNAL"
|
|
170
182
|
];
|
|
@@ -300,7 +312,7 @@ async function errorFromResponse(res) {
|
|
|
300
312
|
}
|
|
301
313
|
const safetyHint = toSafetyHint(env?.hint);
|
|
302
314
|
const safetyReason = toSafetyReason(env?.reason);
|
|
303
|
-
|
|
315
|
+
const err = new CurviateError({
|
|
304
316
|
code: toErrorCode(env?.code),
|
|
305
317
|
message: env?.message ?? `Request failed with status ${res.status}.`,
|
|
306
318
|
httpStatus: res.status,
|
|
@@ -325,6 +337,7 @@ async function errorFromResponse(res) {
|
|
|
325
337
|
...safetyReason !== void 0 ? { safetyReason } : {},
|
|
326
338
|
...typeof env?.blocked === "boolean" ? { blocked: env.blocked } : {}
|
|
327
339
|
});
|
|
340
|
+
return { err, refusesRetry: env?.retry_likely_to_succeed === false };
|
|
328
341
|
}
|
|
329
342
|
function retryDelay(err, attempt, jitter) {
|
|
330
343
|
if (err.retryAfterMs !== void 0) return err.retryAfterMs;
|
|
@@ -405,9 +418,9 @@ async function execute(method, path, opts) {
|
|
|
405
418
|
if (res.ok) {
|
|
406
419
|
return parseSuccess(res);
|
|
407
420
|
}
|
|
408
|
-
const err = await errorFromResponse(res);
|
|
421
|
+
const { err, refusesRetry } = await errorFromResponse(res);
|
|
409
422
|
const namesBudgetRow = err.budgetRow !== void 0;
|
|
410
|
-
const neverRetry = err.retryHint?.kind === "never";
|
|
423
|
+
const neverRetry = err.retryHint?.kind === "never" || refusesRetry;
|
|
411
424
|
const retryable = !isWrite && !namesBudgetRow && !neverRetry && RETRYABLE_CODES.has(err.code) && attempt < opts.maxRetries;
|
|
412
425
|
if (retryable) {
|
|
413
426
|
await sleep(retryDelay(err, attempt + 1, jitterFn()));
|
package/package.json
CHANGED
package/src/generated/types.ts
CHANGED
|
@@ -2781,6 +2781,25 @@ export interface components {
|
|
|
2781
2781
|
name?: string;
|
|
2782
2782
|
}[];
|
|
2783
2783
|
}[];
|
|
2784
|
+
/** @description Present on PAYMENT_REQUIRED and ACCOUNT_DISPUTED: the self-service page where the tenant resolves the payment problem, so an agent can hand a human one link. Null when no portal session could be opened; fall back to the dashboard. */
|
|
2785
|
+
portal_url?: string | null;
|
|
2786
|
+
/** @description Present on CHECKPOINT_INVALID_CODE: how many more verification codes the checkpoint accepts before it locks. Stop and ask the account owner for a fresh code when it reaches zero, rather than guessing. */
|
|
2787
|
+
attempts_remaining?: number;
|
|
2788
|
+
/** @description Present on CHECKPOINT_UNSUPPORTED: the kind of verification challenge LinkedIn raised that cannot be solved through this API. A human has to complete it in LinkedIn, then the account reconnects. */
|
|
2789
|
+
challenge_type?: string;
|
|
2790
|
+
/** @description Present on ACCOUNT_ALREADY_LINKED: the id of your own existing account for this LinkedIn profile, so you can reuse it instead of linking again. Only ever an account of the calling tenant. */
|
|
2791
|
+
account_id?: string;
|
|
2792
|
+
/** @description Present on RATE_LIMIT_ACCOUNT: the per-account request ceiling that was breached, with its name, the units remaining and total, and the absolute reset_time. Wait until reset_time before retrying. */
|
|
2793
|
+
quota?: Record<string, never>;
|
|
2794
|
+
/** @description Present on TOOLSET_DISABLED: the name of the toolset that is switched off for this tenant, so you can enable it or use another tool. */
|
|
2795
|
+
toolset?: string;
|
|
2796
|
+
/** @description Present on AMBIGUOUS_IDENTIFIER: the entries the identifier matched. Pick one and re-send its id. */
|
|
2797
|
+
candidates?: {
|
|
2798
|
+
/** @description The id to send instead of the ambiguous identifier. */
|
|
2799
|
+
id?: string;
|
|
2800
|
+
/** @description Human-readable label for this entry. */
|
|
2801
|
+
name?: string;
|
|
2802
|
+
}[];
|
|
2784
2803
|
/** @description Present on errors that can be recovered programmatically, a plain sentence describing the next call to make. */
|
|
2785
2804
|
next_action?: string;
|
|
2786
2805
|
/** @description Present when something about this response is true but not visible in it. On a search, an entry names a filter value we could not check before sending it, or reports that some of the people on the page were not disclosed to the connected account, so an unexpected result count is explicable rather than silent. Branch on each entry's code, never on its message. */
|
|
@@ -28864,7 +28883,7 @@ export interface operations {
|
|
|
28864
28883
|
"application/json": components["schemas"]["Error"];
|
|
28865
28884
|
};
|
|
28866
28885
|
};
|
|
28867
|
-
/** @description
|
|
28886
|
+
/** @description CHECKPOINT_EXPIRED or CHECKPOINT_ALREADY_RESOLVED: restart the connection. ACCOUNT_ALREADY_LINKED: the LinkedIn identity is already connected; it names your own account_id when you own it, otherwise it is not one you can manage here. CONNECTION_IN_PROGRESS: another connection attempt for this identity is open; wait for it to finish or expire. */
|
|
28868
28887
|
409: {
|
|
28869
28888
|
headers: {
|
|
28870
28889
|
[name: string]: unknown;
|
|
@@ -29214,7 +29233,7 @@ export interface operations {
|
|
|
29214
29233
|
"application/json": components["schemas"]["Error"];
|
|
29215
29234
|
};
|
|
29216
29235
|
};
|
|
29217
|
-
/** @description The approved LinkedIn identity is already
|
|
29236
|
+
/** @description ACCOUNT_ALREADY_LINKED. The approved LinkedIn identity is already connected and is not one you can manage here; not retryable. CONNECTION_IN_PROGRESS. Another connection attempt for this identity is open; wait for it to finish or expire. */
|
|
29218
29237
|
409: {
|
|
29219
29238
|
headers: {
|
|
29220
29239
|
[name: string]: unknown;
|
|
@@ -31682,7 +31701,16 @@ export interface operations {
|
|
|
31682
31701
|
"application/json": components["schemas"]["Error"];
|
|
31683
31702
|
};
|
|
31684
31703
|
};
|
|
31685
|
-
/** @description The purchase
|
|
31704
|
+
/** @description The purchase failed after today's charge was taken; the charge was refunded in full and the seat count was confirmed unchanged, so no seats were added. Safe to retry. */
|
|
31705
|
+
502: {
|
|
31706
|
+
headers: {
|
|
31707
|
+
[name: string]: unknown;
|
|
31708
|
+
};
|
|
31709
|
+
content: {
|
|
31710
|
+
"application/json": components["schemas"]["Error"];
|
|
31711
|
+
};
|
|
31712
|
+
};
|
|
31713
|
+
/** @description The purchase could not be confirmed while another change was in progress (check the seat count before retrying), or the seat price is misconfigured on our side (nothing charged; contact support, retrying fails the same way). */
|
|
31686
31714
|
503: {
|
|
31687
31715
|
headers: {
|
|
31688
31716
|
[name: string]: unknown;
|
|
@@ -31860,7 +31888,7 @@ export interface operations {
|
|
|
31860
31888
|
"application/json": components["schemas"]["Error"];
|
|
31861
31889
|
};
|
|
31862
31890
|
};
|
|
31863
|
-
/** @description Another change to this subscription is in progress
|
|
31891
|
+
/** @description Another change to this subscription is in progress (retry shortly), or the seat price is misconfigured on our side (nothing charged; contact support, retrying fails the same way). */
|
|
31864
31892
|
503: {
|
|
31865
31893
|
headers: {
|
|
31866
31894
|
[name: string]: unknown;
|