@curviate/sdk 0.35.0 → 0.37.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 +85 -1
- package/dist/index.d.ts +44 -26
- package/dist/index.js +16 -0
- package/package.json +1 -1
- package/src/generated/types.ts +28 -26
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,90 @@ Versioning: semantic. Minor for additive changes, patch for bug fixes; no stabil
|
|
|
9
9
|
|
|
10
10
|
## [Unreleased]
|
|
11
11
|
|
|
12
|
+
## [0.37.0] - 2026-09-22
|
|
13
|
+
|
|
14
|
+
Fixture and types regenerated against the deployed production document
|
|
15
|
+
(`https://api.curviate.com`, 127 paths, server
|
|
16
|
+
`9d5eb6583e24928eca0c3c8b162ad664e869af99`).
|
|
17
|
+
**BREAKING**: the webhook read summaries no longer carry `headers[].value_prefix`;
|
|
18
|
+
a keyed `headers[].value_fingerprint` takes its place. Pre-1.0 a breaking change
|
|
19
|
+
ships as a minor (as `0.27.0` did), so a caret range on `0.36.x` will not pick
|
|
20
|
+
this up.
|
|
21
|
+
|
|
22
|
+
### BREAKING
|
|
23
|
+
|
|
24
|
+
- **`headers[].value_prefix` is removed from every webhook read; `headers[].value_fingerprint` replaces it.**
|
|
25
|
+
The old field was a masked preview of the configured value: the first 8
|
|
26
|
+
characters plus `...` for values of 24 characters or more, a fixed `********`
|
|
27
|
+
below that. It disclosed a leading slice of a credential and leaked the
|
|
28
|
+
value's length class. The replacement is an 8-character keyed fingerprint that
|
|
29
|
+
carries no part of the value and no indication of its length.
|
|
30
|
+
|
|
31
|
+
It is deterministic **within an account**, which is what makes it useful: two
|
|
32
|
+
headers with the same fingerprint hold the same value, and a changed
|
|
33
|
+
fingerprint means a rotation took effect. Fingerprints are not comparable
|
|
34
|
+
across accounts. It is `string | null`, `null` for a header configured before
|
|
35
|
+
fingerprints existed, so the member is nullable where `value_prefix` was not.
|
|
36
|
+
|
|
37
|
+
Affects `webhooks.create` (201), `webhooks.list` (200), `webhooks.get` (200)
|
|
38
|
+
and `webhooks.update` (200).
|
|
39
|
+
|
|
40
|
+
```diff
|
|
41
|
+
- const configured = webhook.headers?.[0]?.value_prefix; // masked preview, gone
|
|
42
|
+
+ const configured = webhook.headers?.[0]?.value_fingerprint; // 8-char keyed fingerprint, nullable
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Any code that read `value_prefix` stops compiling, which is the intended
|
|
46
|
+
outcome: a masked preview and a fingerprint are not interchangeable, and a
|
|
47
|
+
silent rename would have left comparisons across accounts looking correct
|
|
48
|
+
while meaning nothing.
|
|
49
|
+
|
|
50
|
+
### Changed
|
|
51
|
+
|
|
52
|
+
- Every `cursor` query parameter in the document now declares `minLength: 1`:
|
|
53
|
+
all 61 of them, the last 4 landing in this release (`GET /profile/visitors`,
|
|
54
|
+
`GET /posts/{post_id}/comments`, `GET /posts/{post_id}/reactions`,
|
|
55
|
+
`GET /saved-posts`). An empty-string cursor is a `400` rather than a silently
|
|
56
|
+
ignored parameter. No TypeScript type changes: `minLength` is a validation
|
|
57
|
+
constraint, not a shape, so this reaches callers as server behaviour and as a
|
|
58
|
+
documented constraint in the generated reference.
|
|
59
|
+
- Regenerated descriptions for `limit_profile`, `limit_profile_source` and
|
|
60
|
+
`limit_profile_detected_at` on the account and safety-policy surfaces. An
|
|
61
|
+
operator-set `limit_profile` is now a **pin**: it is no longer released by the
|
|
62
|
+
account's next connect, and neither a connect, a reconnect nor an account read
|
|
63
|
+
moves it or advances `limit_profile_detected_at`. Releasing it means sending
|
|
64
|
+
`limit_profile_source: "default"` **on its own**: changing `limit_profile`
|
|
65
|
+
and releasing the pin in the same request is refused with `INVALID_REQUEST`.
|
|
66
|
+
Description-only in this package; the behaviour is the deployed server's.
|
|
67
|
+
|
|
68
|
+
### Fixed
|
|
69
|
+
|
|
70
|
+
- `search.getParameters` JSDoc example follows the convention of every other example (no code fence, a fully qualified `curviate.account(...)` call), so generated reference pages render it as one runnable snippet. Documentation only.
|
|
71
|
+
|
|
72
|
+
## [0.36.0] - 2026-09-20
|
|
73
|
+
|
|
74
|
+
Fixture and types regenerated against the deployed production document
|
|
75
|
+
(`https://api.curviate.com`, 127 paths, server
|
|
76
|
+
`41d48ed451280c29b0fb6b4b15c44ca70b76af98`). One additive shape change.
|
|
77
|
+
|
|
78
|
+
### Added
|
|
79
|
+
|
|
80
|
+
- **`search.getParameters()` accepts `cursor`.** The filter-ID resolver
|
|
81
|
+
paginates: `SearchParametersQuery` gains an optional `cursor`, and the
|
|
82
|
+
response's `cursor` field is the token to send back for the next page. Walk
|
|
83
|
+
until it comes back `null`. `offset` still works and is now described as the
|
|
84
|
+
numeric fallback for `cursor`. A malformed cursor is a `400`. Additive and
|
|
85
|
+
backward compatible: a call that passes no `cursor` behaves exactly as
|
|
86
|
+
before.
|
|
87
|
+
|
|
88
|
+
### Changed
|
|
89
|
+
|
|
90
|
+
- Regenerated descriptions on `GET /v1/{account_id}/search/parameters`: the
|
|
91
|
+
operation description now states how the pages are walked, `offset` names
|
|
92
|
+
itself the numeric fallback, and the `400` description names a malformed
|
|
93
|
+
cursor among its causes.
|
|
94
|
+
- `search.getParameters()` carries a paging `@example` in its JSDoc.
|
|
95
|
+
|
|
12
96
|
## [0.35.0] - 2026-09-19
|
|
13
97
|
|
|
14
98
|
Fixture and types regenerated a second time against the deployed production
|
|
@@ -25,7 +109,7 @@ nothing added, removed or retyped.
|
|
|
25
109
|
Present when populated. Reading it back through Curviate stores it in your
|
|
26
110
|
tenant's entity records, with no expiry."
|
|
27
111
|
|
|
28
|
-
First refresh in this
|
|
112
|
+
First refresh in this release, against production server
|
|
29
113
|
`00a1388d42b09db54424de12ecf1c7cbebe2ec12`: 23 description strings and 3
|
|
30
114
|
example values changed, nothing added, removed or retyped.
|
|
31
115
|
|
package/dist/index.d.ts
CHANGED
|
@@ -661,7 +661,7 @@ interface paths {
|
|
|
661
661
|
};
|
|
662
662
|
/**
|
|
663
663
|
* Resolve search filter IDs
|
|
664
|
-
* @description Resolves human-readable terms (e.g. 'software development') to opaque filter IDs for use in structured search filters. The type parameter selects the filter category; keywords is required for every type, including EMPLOYMENT_TYPE.
|
|
664
|
+
* @description Resolves human-readable terms (e.g. 'software development') to opaque filter IDs for use in structured search filters. The type parameter selects the filter category; keywords is required for every type, including EMPLOYMENT_TYPE. Results paginate: send the cursor from the previous response to get the next page, and stop when it comes back null.
|
|
665
665
|
*/
|
|
666
666
|
get: operations["getV1AccountIdSearchParameters"];
|
|
667
667
|
put?: never;
|
|
@@ -2709,7 +2709,7 @@ interface paths {
|
|
|
2709
2709
|
head?: never;
|
|
2710
2710
|
/**
|
|
2711
2711
|
* Update an account's safety policy
|
|
2712
|
-
* @description The account-level safety-policy write (tenant-wide defaults are set on `PATCH /v1/safety-policy`). Send only the fields you are changing: everything you omit is left byte-identical, and sending `null` for a field clears your override and restores the tenant default where one is set, the Curviate default otherwise. Any limit may be set to any value: Curviate does not clamp, cap or refuse a change on the grounds that the number is unsafe. A value above the Curviate default is reported back in the response, and on every later read, with the default and its source class attached; there is no way to acknowledge it away, and setting the value back to the default removes it. A value that is not a value, such as a negative ceiling or an unknown row name, is a 400. Every field whose value CHANGES is appended to the account's action ledger with the previous value, the new value, the Curviate default, the actor and the time; a field you send whose value already equals its current effective value is not ledgered and is not stored as an override, so reading the policy and sending the document back changes nothing. Six fields on the read are derived rather than configured: `effective_ceiling`, `interface_ceiling`, `effective_interface_ceiling`, `posture_source`, `over_default` and each row's `warm_up_state`. Send them and they are accepted and ignored, never stored and never ledgered, so the document you read can go straight back. To pin a row's ramp, set `warm_up_factor`. `activity_window` is not accepted: send its settable subfields instead, the top-level `timezone` for the zone, and per row `activity_window_start`, `activity_window_end`, `activity_window_timezone` and `activity_window_applies_to`. The 400 this produces names those subfields, not just the refused object. And read `changes nothing` as `changes no limit`: the `posture` fields are OVERRIDES at every scope, so writing back a posture a scope merely inherits PINS it there and appends one ledger entry per pinned scope. That is what stops a later account- or tenant-wide change from moving it. A pin already in place is a no-op. An agent-authenticated write is accepted on exactly the same footing as an operator's. There is no bulk import, file upload or policy template: configuring many rows or many accounts is a loop over this operation. One field is not account-scoped: `tenant_default_posture` sets the default for EVERY account in the tenant, not just the one in the path, which is what makes it a one-call change for a whole workspace of personas. It is reported back at the top of every policy response, so a change to it is visible even on an account that overrides it. One other field is not row-scoped: `limit_profile` selects which of the four Curviate default sets this account's rows resolve from, so it moves the default under every row at once while leaving every value you have configured explicitly exactly as you set it. It is the platform product active on the account, not your Curviate seat entitlement, and the two can disagree: a lapsed subscription leaves the seat untouched. Curviate detects it when the account connects and re-detects it on every reconnect; setting it here
|
|
2712
|
+
* @description The account-level safety-policy write (tenant-wide defaults are set on `PATCH /v1/safety-policy`). Send only the fields you are changing: everything you omit is left byte-identical, and sending `null` for a field clears your override and restores the tenant default where one is set, the Curviate default otherwise. Any limit may be set to any value: Curviate does not clamp, cap or refuse a change on the grounds that the number is unsafe. A value above the Curviate default is reported back in the response, and on every later read, with the default and its source class attached; there is no way to acknowledge it away, and setting the value back to the default removes it. A value that is not a value, such as a negative ceiling or an unknown row name, is a 400. Every field whose value CHANGES is appended to the account's action ledger with the previous value, the new value, the Curviate default, the actor and the time; a field you send whose value already equals its current effective value is not ledgered and is not stored as an override, so reading the policy and sending the document back changes nothing. Six fields on the read are derived rather than configured: `effective_ceiling`, `interface_ceiling`, `effective_interface_ceiling`, `posture_source`, `over_default` and each row's `warm_up_state`. Send them and they are accepted and ignored, never stored and never ledgered, so the document you read can go straight back. To pin a row's ramp, set `warm_up_factor`. `activity_window` is not accepted: send its settable subfields instead, the top-level `timezone` for the zone, and per row `activity_window_start`, `activity_window_end`, `activity_window_timezone` and `activity_window_applies_to`. The 400 this produces names those subfields, not just the refused object. And read `changes nothing` as `changes no limit`: the `posture` fields are OVERRIDES at every scope, so writing back a posture a scope merely inherits PINS it there and appends one ledger entry per pinned scope. That is what stops a later account- or tenant-wide change from moving it. A pin already in place is a no-op. An agent-authenticated write is accepted on exactly the same footing as an operator's. There is no bulk import, file upload or policy template: configuring many rows or many accounts is a loop over this operation. One field is not account-scoped: `tenant_default_posture` sets the default for EVERY account in the tenant, not just the one in the path, which is what makes it a one-call change for a whole workspace of personas. It is reported back at the top of every policy response, so a change to it is visible even on an account that overrides it. One other field is not row-scoped: `limit_profile` selects which of the four Curviate default sets this account's rows resolve from, so it moves the default under every row at once while leaving every value you have configured explicitly exactly as you set it. It is the platform product active on the account, not your Curviate seat entitlement, and the two can disagree: a lapsed subscription leaves the seat untouched. Curviate detects it when the account connects and re-detects it on every reconnect; setting it here pins it, and the pin wins from then on: no connect, reconnect or account read moves it again until you release it with `limit_profile_source: "default"`, which is sent on its own: changing `limit_profile` and releasing it in the same request is refused. One field on this operation does not configure anything: `clear_halts` lifts the platform pause on the action types you name. When the platform refuses a call on an account, Curviate pauses that action type for the platform's own retry-after or a seeded cooldown, and every later call on it is refused locally without reaching the platform; the account resource reports the live pauses as `quotas[].halt`. Naming an action type here lifts its pause immediately, so the next call goes out. An action type with no active pause is accepted and does nothing, which makes it safe to send for a set you have not checked, and only the ones actually lifted are ledgered, each with the expiry it cut short, the actor and the time, readable afterwards on `GET /v1/{account_id}/safety-events` with `reason: "halt_cleared"`. Clearing disarms nothing: if the platform refuses the account again the pause returns, and a 429 or a refused write returns it for the full cooldown. Clear one when you have reason to believe the refusal was a transient upstream fault rather than the platform pushing back on this account.
|
|
2713
2713
|
*/
|
|
2714
2714
|
patch: operations["patchV1AccountIdSafetyPolicy"];
|
|
2715
2715
|
trace?: never;
|
|
@@ -8420,10 +8420,12 @@ interface operations {
|
|
|
8420
8420
|
type: "LOCATION" | "PEOPLE" | "RELATION" | "COMPANY" | "SCHOOL" | "INDUSTRY" | "SERVICE" | "JOB_FUNCTION" | "JOB_TITLE" | "EMPLOYMENT_TYPE" | "SKILL";
|
|
8421
8421
|
/** @description Human term to resolve to opaque filter IDs (e.g. 'software development'). Required for every type, including EMPLOYMENT_TYPE. */
|
|
8422
8422
|
keywords: string;
|
|
8423
|
-
/** @description Zero-based pagination offset (default 0). */
|
|
8423
|
+
/** @description Zero-based pagination offset; a numeric fallback for cursor (default 0). */
|
|
8424
8424
|
offset?: number;
|
|
8425
8425
|
/** @description Number of parameters to return (1-100, default 10). */
|
|
8426
8426
|
limit?: number;
|
|
8427
|
+
/** @description Opaque pagination cursor returned from a previous response. */
|
|
8428
|
+
cursor?: string;
|
|
8427
8429
|
};
|
|
8428
8430
|
header?: never;
|
|
8429
8431
|
path: {
|
|
@@ -8461,7 +8463,7 @@ interface operations {
|
|
|
8461
8463
|
};
|
|
8462
8464
|
};
|
|
8463
8465
|
};
|
|
8464
|
-
/** @description Missing or empty account_id, missing or empty type, missing keywords,
|
|
8466
|
+
/** @description Missing or empty account_id, missing or empty type, missing keywords, type not in the classic allowlist, or malformed cursor. */
|
|
8465
8467
|
400: {
|
|
8466
8468
|
headers: {
|
|
8467
8469
|
[name: string]: unknown;
|
|
@@ -29823,11 +29825,11 @@ interface operations {
|
|
|
29823
29825
|
name?: string | null;
|
|
29824
29826
|
account_ids?: string[];
|
|
29825
29827
|
enabled?: boolean;
|
|
29826
|
-
/** @description Custom headers added to each delivery POST, with the value
|
|
29828
|
+
/** @description Custom headers added to each delivery POST, with a fingerprint in place of the value. */
|
|
29827
29829
|
headers?: {
|
|
29828
29830
|
key?: string;
|
|
29829
|
-
/** @description A
|
|
29830
|
-
|
|
29831
|
+
/** @description A 8-character keyed fingerprint of the configured value. It carries no part of the value and no indication of its length, but it is not a zero-disclosure field: it is deterministic, so two headers in your account with the same fingerprint hold the same value, and a changed fingerprint means a changed value. Use it to confirm a rotation took effect, or to tell whether two of your webhooks carry the same credential. Fingerprints are scoped to your account and are not comparable with another account's. Null for a header configured before fingerprints existed. The header name is what identifies which credential is configured. */
|
|
29832
|
+
value_fingerprint?: string | null;
|
|
29831
29833
|
}[];
|
|
29832
29834
|
events?: string[];
|
|
29833
29835
|
data?: string[];
|
|
@@ -29912,7 +29914,7 @@ interface operations {
|
|
|
29912
29914
|
*/
|
|
29913
29915
|
enabled?: boolean;
|
|
29914
29916
|
/**
|
|
29915
|
-
* @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
|
|
29917
|
+
* @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 8-character keyed fingerprint of the value, which carries no part of the value and no indication of its length. It is deterministic within your account, so a fingerprint confirms a rotation took effect and tells you whether two of your webhooks carry the same credential; fingerprints are not comparable across accounts. The header name is what identifies which credential is configured.
|
|
29916
29918
|
* @default []
|
|
29917
29919
|
*/
|
|
29918
29920
|
headers?: {
|
|
@@ -29941,7 +29943,7 @@ interface operations {
|
|
|
29941
29943
|
*/
|
|
29942
29944
|
enabled?: boolean;
|
|
29943
29945
|
/**
|
|
29944
|
-
* @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
|
|
29946
|
+
* @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 8-character keyed fingerprint of the value, which carries no part of the value and no indication of its length. It is deterministic within your account, so a fingerprint confirms a rotation took effect and tells you whether two of your webhooks carry the same credential; fingerprints are not comparable across accounts. The header name is what identifies which credential is configured.
|
|
29945
29947
|
* @default []
|
|
29946
29948
|
*/
|
|
29947
29949
|
headers?: {
|
|
@@ -29970,7 +29972,7 @@ interface operations {
|
|
|
29970
29972
|
*/
|
|
29971
29973
|
enabled?: boolean;
|
|
29972
29974
|
/**
|
|
29973
|
-
* @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
|
|
29975
|
+
* @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 8-character keyed fingerprint of the value, which carries no part of the value and no indication of its length. It is deterministic within your account, so a fingerprint confirms a rotation took effect and tells you whether two of your webhooks carry the same credential; fingerprints are not comparable across accounts. The header name is what identifies which credential is configured.
|
|
29974
29976
|
* @default []
|
|
29975
29977
|
*/
|
|
29976
29978
|
headers?: {
|
|
@@ -30012,12 +30014,12 @@ interface operations {
|
|
|
30012
30014
|
account_ids?: string[];
|
|
30013
30015
|
/** @description A disabled webhook is created but delivers nothing. */
|
|
30014
30016
|
enabled?: boolean;
|
|
30015
|
-
/** @description Custom headers added to each delivery POST. Values are encrypted at rest, so a read shows the name and a
|
|
30017
|
+
/** @description Custom headers added to each delivery POST. Values are encrypted at rest and no read returns one, so a read shows the name and a fingerprint of the value. */
|
|
30016
30018
|
headers?: {
|
|
30017
30019
|
/** @description The header name, as configured. */
|
|
30018
30020
|
key?: string;
|
|
30019
|
-
/** @description A
|
|
30020
|
-
|
|
30021
|
+
/** @description A 8-character keyed fingerprint of the configured value. It carries no part of the value and no indication of its length, but it is not a zero-disclosure field: it is deterministic, so two headers in your account with the same fingerprint hold the same value, and a changed fingerprint means a changed value. Use it to confirm a rotation took effect, or to tell whether two of your webhooks carry the same credential. Fingerprints are scoped to your account and are not comparable with another account's. Null for a header configured before fingerprints existed. The header name is what identifies which credential is configured. */
|
|
30022
|
+
value_fingerprint?: string | null;
|
|
30021
30023
|
}[];
|
|
30022
30024
|
/** @description Canonical event names this webhook subscribes to. */
|
|
30023
30025
|
events?: string[];
|
|
@@ -30290,12 +30292,12 @@ interface operations {
|
|
|
30290
30292
|
account_ids?: string[];
|
|
30291
30293
|
/** @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. */
|
|
30292
30294
|
enabled?: boolean;
|
|
30293
|
-
/** @description Custom headers added to each delivery POST. Values are encrypted at rest, so a read shows the name and a
|
|
30295
|
+
/** @description Custom headers added to each delivery POST. Values are encrypted at rest and no read returns one, so a read shows the name and a fingerprint of the value. */
|
|
30294
30296
|
headers?: {
|
|
30295
30297
|
/** @description The header name, as configured. */
|
|
30296
30298
|
key?: string;
|
|
30297
|
-
/** @description A
|
|
30298
|
-
|
|
30299
|
+
/** @description A 8-character keyed fingerprint of the configured value. It carries no part of the value and no indication of its length, but it is not a zero-disclosure field: it is deterministic, so two headers in your account with the same fingerprint hold the same value, and a changed fingerprint means a changed value. Use it to confirm a rotation took effect, or to tell whether two of your webhooks carry the same credential. Fingerprints are scoped to your account and are not comparable with another account's. Null for a header configured before fingerprints existed. The header name is what identifies which credential is configured. */
|
|
30300
|
+
value_fingerprint?: string | null;
|
|
30299
30301
|
}[];
|
|
30300
30302
|
/** @description Canonical event names this webhook subscribes to. */
|
|
30301
30303
|
events?: string[];
|
|
@@ -30444,7 +30446,7 @@ interface operations {
|
|
|
30444
30446
|
name?: string | null;
|
|
30445
30447
|
/** @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. */
|
|
30446
30448
|
enabled?: boolean;
|
|
30447
|
-
/** @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
|
|
30449
|
+
/** @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 8-character keyed fingerprint of the value, which carries no part of the value and no indication of its length. It is deterministic within your account, so a fingerprint confirms a rotation took effect and tells you whether two of your webhooks carry the same credential; fingerprints are not comparable across accounts. The header name is what identifies which credential is configured. */
|
|
30448
30450
|
headers?: {
|
|
30449
30451
|
key: string;
|
|
30450
30452
|
value: string;
|
|
@@ -30486,12 +30488,12 @@ interface operations {
|
|
|
30486
30488
|
account_ids?: string[];
|
|
30487
30489
|
/** @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. */
|
|
30488
30490
|
enabled?: boolean;
|
|
30489
|
-
/** @description Custom headers added to each delivery POST. Values are encrypted at rest, so a read shows the name and a
|
|
30491
|
+
/** @description Custom headers added to each delivery POST. Values are encrypted at rest and no read returns one, so a read shows the name and a fingerprint of the value. */
|
|
30490
30492
|
headers?: {
|
|
30491
30493
|
/** @description The header name, as configured. */
|
|
30492
30494
|
key?: string;
|
|
30493
|
-
/** @description A
|
|
30494
|
-
|
|
30495
|
+
/** @description A 8-character keyed fingerprint of the configured value. It carries no part of the value and no indication of its length, but it is not a zero-disclosure field: it is deterministic, so two headers in your account with the same fingerprint hold the same value, and a changed fingerprint means a changed value. Use it to confirm a rotation took effect, or to tell whether two of your webhooks carry the same credential. Fingerprints are scoped to your account and are not comparable with another account's. Null for a header configured before fingerprints existed. The header name is what identifies which credential is configured. */
|
|
30496
|
+
value_fingerprint?: string | null;
|
|
30495
30497
|
}[];
|
|
30496
30498
|
/** @description Canonical event names this webhook subscribes to. */
|
|
30497
30499
|
events?: string[];
|
|
@@ -30598,13 +30600,13 @@ interface operations {
|
|
|
30598
30600
|
*/
|
|
30599
30601
|
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
30600
30602
|
/**
|
|
30601
|
-
* @description Where `limit_profile` came from. `detected`: Curviate read it from LinkedIn, at `limit_profile_detected_at`. `operator`: it was set through this operation and holds until
|
|
30603
|
+
* @description Where `limit_profile` came from. `detected`: Curviate read it from LinkedIn, at `limit_profile_detected_at`. `operator`: it was set through this operation and holds until you release it by sending `limit_profile_source: "default"` on this operation, on its own (changing `limit_profile` and releasing it in the same request is refused). Nothing else overrides it: a connect, a reconnect and an account read all leave a pinned value exactly as you set it. `default`: it has never been observed, so the value is the seeded `basic` and says nothing about the account; Curviate detects it on the account's next read or connect.
|
|
30602
30604
|
* @enum {string}
|
|
30603
30605
|
*/
|
|
30604
30606
|
limit_profile_source?: "default" | "detected" | "operator";
|
|
30605
30607
|
/**
|
|
30606
30608
|
* Format: date-time
|
|
30607
|
-
* @description When Curviate last read `limit_profile` from LinkedIn, whether or not the value changed. Null until it has. Curviate re-reads it on connect and, at most once a day, on an account read, so a subscription change reaches the numbers without a reconnect.
|
|
30609
|
+
* @description When Curviate last read `limit_profile` from LinkedIn, whether or not the value changed. Null until it has. Curviate re-reads it on connect and, at most once a day, on an account read, so a subscription change reaches the numbers without a reconnect. While `limit_profile_source` is `operator` neither the value nor this timestamp moves, until you release the pin.
|
|
30608
30610
|
*/
|
|
30609
30611
|
limit_profile_detected_at?: string | null;
|
|
30610
30612
|
/**
|
|
@@ -30768,7 +30770,7 @@ interface operations {
|
|
|
30768
30770
|
content: {
|
|
30769
30771
|
"application/json": {
|
|
30770
30772
|
/**
|
|
30771
|
-
* @description Which set of Curviate defaults this account's rows resolve from: `basic`, `premium`, `sales_navigator` or `recruiter`. Each inherits the one before it and raises a few rows. This is the platform product active on the account, NOT the Curviate seat entitlement, and the two can disagree: a lapsed subscription leaves the seat untouched. Curviate detects it from the platform when the account connects, re-detects it on every reconnect and, at most once a day, on an account read; setting it here
|
|
30773
|
+
* @description Which set of Curviate defaults this account's rows resolve from: `basic`, `premium`, `sales_navigator` or `recruiter`. Each inherits the one before it and raises a few rows. This is the platform product active on the account, NOT the Curviate seat entitlement, and the two can disagree: a lapsed subscription leaves the seat untouched. Curviate detects it from the platform when the account connects, re-detects it on every reconnect and, at most once a day, on an account read; setting it here pins it, and the pin wins over detection from then on. None of those paths moves a pinned value, so it holds until you release it. To release the pin, send `limit_profile_source: "default"` on its own: Curviate re-reads the value from LinkedIn on the account's next read or connect. Changing `limit_profile` and releasing it in the same request is refused with `INVALID_REQUEST`, because those are opposite intents. Sending the value the account already holds changes nothing and pins nothing. The change is recorded in the ledger and it moves the defaults under every row at once, so any row you have configured explicitly keeps your value. The elevated Sales Navigator and Recruiter figures apply only to calls made through the matching interface, the Sales Navigator and Recruiter operations, and Curviate holds each call to the figure for the interface it goes through. The numbers here are therefore the ones a standard-interface call is held to, on every profile; a call through one of those operations resolves from the elevated set instead, and each row publishes that figure as `interface_ceiling`.
|
|
30772
30774
|
* @enum {string}
|
|
30773
30775
|
*/
|
|
30774
30776
|
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
@@ -30858,7 +30860,7 @@ interface operations {
|
|
|
30858
30860
|
/** @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. */
|
|
30859
30861
|
account_id?: unknown;
|
|
30860
30862
|
/**
|
|
30861
|
-
* @description Where `limit_profile` came from: `default` (never observed), `detected` (read from LinkedIn) or `operator` (
|
|
30863
|
+
* @description Where `limit_profile` came from: `default` (never observed), `detected` (read from LinkedIn) or `operator` (pinned through this operation, and nothing but a release moves it). Sending `default` releases a pin: the value is re-read from LinkedIn on the account's next read or connect. Send it on its own; changing `limit_profile` in the same request is refused. Sending `detected` or `operator` is accepted and ignored, so the whole document round-trips.
|
|
30862
30864
|
* @enum {string}
|
|
30863
30865
|
*/
|
|
30864
30866
|
limit_profile_source?: "default" | "detected" | "operator";
|
|
@@ -30896,13 +30898,13 @@ interface operations {
|
|
|
30896
30898
|
*/
|
|
30897
30899
|
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
30898
30900
|
/**
|
|
30899
|
-
* @description Where `limit_profile` came from. `detected`: Curviate read it from LinkedIn, at `limit_profile_detected_at`. `operator`: it was set through this operation and holds until
|
|
30901
|
+
* @description Where `limit_profile` came from. `detected`: Curviate read it from LinkedIn, at `limit_profile_detected_at`. `operator`: it was set through this operation and holds until you release it by sending `limit_profile_source: "default"` on this operation, on its own (changing `limit_profile` and releasing it in the same request is refused). Nothing else overrides it: a connect, a reconnect and an account read all leave a pinned value exactly as you set it. `default`: it has never been observed, so the value is the seeded `basic` and says nothing about the account; Curviate detects it on the account's next read or connect.
|
|
30900
30902
|
* @enum {string}
|
|
30901
30903
|
*/
|
|
30902
30904
|
limit_profile_source?: "default" | "detected" | "operator";
|
|
30903
30905
|
/**
|
|
30904
30906
|
* Format: date-time
|
|
30905
|
-
* @description When Curviate last read `limit_profile` from LinkedIn, whether or not the value changed. Null until it has. Curviate re-reads it on connect and, at most once a day, on an account read, so a subscription change reaches the numbers without a reconnect.
|
|
30907
|
+
* @description When Curviate last read `limit_profile` from LinkedIn, whether or not the value changed. Null until it has. Curviate re-reads it on connect and, at most once a day, on an account read, so a subscription change reaches the numbers without a reconnect. While `limit_profile_source` is `operator` neither the value nor this timestamp moves, until you release the pin.
|
|
30906
30908
|
*/
|
|
30907
30909
|
limit_profile_detected_at?: string | null;
|
|
30908
30910
|
/**
|
|
@@ -32138,6 +32140,22 @@ declare class SearchResource {
|
|
|
32138
32140
|
/**
|
|
32139
32141
|
* Resolve human-readable terms to opaque filter IDs for structured search.
|
|
32140
32142
|
* `GET /v1/{account_id}/search/parameters`
|
|
32143
|
+
*
|
|
32144
|
+
* Paginated: the response carries a `cursor`, and sending it back as
|
|
32145
|
+
* `cursor` returns the next page. Stop when it comes back `null`. `offset`
|
|
32146
|
+
* stays available as the numeric fallback. A malformed cursor is a `400`.
|
|
32147
|
+
*
|
|
32148
|
+
* @example
|
|
32149
|
+
* let cursor: string | null | undefined;
|
|
32150
|
+
* do {
|
|
32151
|
+
* const page = await curviate.account("acc_123").search.getParameters({
|
|
32152
|
+
* type: "SKILL",
|
|
32153
|
+
* keywords: "software development",
|
|
32154
|
+
* ...(cursor ? { cursor } : {}),
|
|
32155
|
+
* });
|
|
32156
|
+
* for (const item of page.items) console.log(item.id, item.name);
|
|
32157
|
+
* cursor = page.cursor;
|
|
32158
|
+
* } while (cursor);
|
|
32141
32159
|
*/
|
|
32142
32160
|
getParameters(query: SearchParametersQuery): Promise<SearchParametersResult>;
|
|
32143
32161
|
/**
|
package/dist/index.js
CHANGED
|
@@ -1132,6 +1132,22 @@ var SearchResource = class {
|
|
|
1132
1132
|
/**
|
|
1133
1133
|
* Resolve human-readable terms to opaque filter IDs for structured search.
|
|
1134
1134
|
* `GET /v1/{account_id}/search/parameters`
|
|
1135
|
+
*
|
|
1136
|
+
* Paginated: the response carries a `cursor`, and sending it back as
|
|
1137
|
+
* `cursor` returns the next page. Stop when it comes back `null`. `offset`
|
|
1138
|
+
* stays available as the numeric fallback. A malformed cursor is a `400`.
|
|
1139
|
+
*
|
|
1140
|
+
* @example
|
|
1141
|
+
* let cursor: string | null | undefined;
|
|
1142
|
+
* do {
|
|
1143
|
+
* const page = await curviate.account("acc_123").search.getParameters({
|
|
1144
|
+
* type: "SKILL",
|
|
1145
|
+
* keywords: "software development",
|
|
1146
|
+
* ...(cursor ? { cursor } : {}),
|
|
1147
|
+
* });
|
|
1148
|
+
* for (const item of page.items) console.log(item.id, item.name);
|
|
1149
|
+
* cursor = page.cursor;
|
|
1150
|
+
* } while (cursor);
|
|
1135
1151
|
*/
|
|
1136
1152
|
getParameters(query) {
|
|
1137
1153
|
return this.ctx.request({
|
package/package.json
CHANGED
package/src/generated/types.ts
CHANGED
|
@@ -563,7 +563,7 @@ export interface paths {
|
|
|
563
563
|
};
|
|
564
564
|
/**
|
|
565
565
|
* Resolve search filter IDs
|
|
566
|
-
* @description Resolves human-readable terms (e.g. 'software development') to opaque filter IDs for use in structured search filters. The type parameter selects the filter category; keywords is required for every type, including EMPLOYMENT_TYPE.
|
|
566
|
+
* @description Resolves human-readable terms (e.g. 'software development') to opaque filter IDs for use in structured search filters. The type parameter selects the filter category; keywords is required for every type, including EMPLOYMENT_TYPE. Results paginate: send the cursor from the previous response to get the next page, and stop when it comes back null.
|
|
567
567
|
*/
|
|
568
568
|
get: operations["getV1AccountIdSearchParameters"];
|
|
569
569
|
put?: never;
|
|
@@ -2611,7 +2611,7 @@ export interface paths {
|
|
|
2611
2611
|
head?: never;
|
|
2612
2612
|
/**
|
|
2613
2613
|
* Update an account's safety policy
|
|
2614
|
-
* @description The account-level safety-policy write (tenant-wide defaults are set on `PATCH /v1/safety-policy`). Send only the fields you are changing: everything you omit is left byte-identical, and sending `null` for a field clears your override and restores the tenant default where one is set, the Curviate default otherwise. Any limit may be set to any value: Curviate does not clamp, cap or refuse a change on the grounds that the number is unsafe. A value above the Curviate default is reported back in the response, and on every later read, with the default and its source class attached; there is no way to acknowledge it away, and setting the value back to the default removes it. A value that is not a value, such as a negative ceiling or an unknown row name, is a 400. Every field whose value CHANGES is appended to the account's action ledger with the previous value, the new value, the Curviate default, the actor and the time; a field you send whose value already equals its current effective value is not ledgered and is not stored as an override, so reading the policy and sending the document back changes nothing. Six fields on the read are derived rather than configured: `effective_ceiling`, `interface_ceiling`, `effective_interface_ceiling`, `posture_source`, `over_default` and each row's `warm_up_state`. Send them and they are accepted and ignored, never stored and never ledgered, so the document you read can go straight back. To pin a row's ramp, set `warm_up_factor`. `activity_window` is not accepted: send its settable subfields instead, the top-level `timezone` for the zone, and per row `activity_window_start`, `activity_window_end`, `activity_window_timezone` and `activity_window_applies_to`. The 400 this produces names those subfields, not just the refused object. And read `changes nothing` as `changes no limit`: the `posture` fields are OVERRIDES at every scope, so writing back a posture a scope merely inherits PINS it there and appends one ledger entry per pinned scope. That is what stops a later account- or tenant-wide change from moving it. A pin already in place is a no-op. An agent-authenticated write is accepted on exactly the same footing as an operator's. There is no bulk import, file upload or policy template: configuring many rows or many accounts is a loop over this operation. One field is not account-scoped: `tenant_default_posture` sets the default for EVERY account in the tenant, not just the one in the path, which is what makes it a one-call change for a whole workspace of personas. It is reported back at the top of every policy response, so a change to it is visible even on an account that overrides it. One other field is not row-scoped: `limit_profile` selects which of the four Curviate default sets this account's rows resolve from, so it moves the default under every row at once while leaving every value you have configured explicitly exactly as you set it. It is the platform product active on the account, not your Curviate seat entitlement, and the two can disagree: a lapsed subscription leaves the seat untouched. Curviate detects it when the account connects and re-detects it on every reconnect; setting it here
|
|
2614
|
+
* @description The account-level safety-policy write (tenant-wide defaults are set on `PATCH /v1/safety-policy`). Send only the fields you are changing: everything you omit is left byte-identical, and sending `null` for a field clears your override and restores the tenant default where one is set, the Curviate default otherwise. Any limit may be set to any value: Curviate does not clamp, cap or refuse a change on the grounds that the number is unsafe. A value above the Curviate default is reported back in the response, and on every later read, with the default and its source class attached; there is no way to acknowledge it away, and setting the value back to the default removes it. A value that is not a value, such as a negative ceiling or an unknown row name, is a 400. Every field whose value CHANGES is appended to the account's action ledger with the previous value, the new value, the Curviate default, the actor and the time; a field you send whose value already equals its current effective value is not ledgered and is not stored as an override, so reading the policy and sending the document back changes nothing. Six fields on the read are derived rather than configured: `effective_ceiling`, `interface_ceiling`, `effective_interface_ceiling`, `posture_source`, `over_default` and each row's `warm_up_state`. Send them and they are accepted and ignored, never stored and never ledgered, so the document you read can go straight back. To pin a row's ramp, set `warm_up_factor`. `activity_window` is not accepted: send its settable subfields instead, the top-level `timezone` for the zone, and per row `activity_window_start`, `activity_window_end`, `activity_window_timezone` and `activity_window_applies_to`. The 400 this produces names those subfields, not just the refused object. And read `changes nothing` as `changes no limit`: the `posture` fields are OVERRIDES at every scope, so writing back a posture a scope merely inherits PINS it there and appends one ledger entry per pinned scope. That is what stops a later account- or tenant-wide change from moving it. A pin already in place is a no-op. An agent-authenticated write is accepted on exactly the same footing as an operator's. There is no bulk import, file upload or policy template: configuring many rows or many accounts is a loop over this operation. One field is not account-scoped: `tenant_default_posture` sets the default for EVERY account in the tenant, not just the one in the path, which is what makes it a one-call change for a whole workspace of personas. It is reported back at the top of every policy response, so a change to it is visible even on an account that overrides it. One other field is not row-scoped: `limit_profile` selects which of the four Curviate default sets this account's rows resolve from, so it moves the default under every row at once while leaving every value you have configured explicitly exactly as you set it. It is the platform product active on the account, not your Curviate seat entitlement, and the two can disagree: a lapsed subscription leaves the seat untouched. Curviate detects it when the account connects and re-detects it on every reconnect; setting it here pins it, and the pin wins from then on: no connect, reconnect or account read moves it again until you release it with `limit_profile_source: "default"`, which is sent on its own: changing `limit_profile` and releasing it in the same request is refused. One field on this operation does not configure anything: `clear_halts` lifts the platform pause on the action types you name. When the platform refuses a call on an account, Curviate pauses that action type for the platform's own retry-after or a seeded cooldown, and every later call on it is refused locally without reaching the platform; the account resource reports the live pauses as `quotas[].halt`. Naming an action type here lifts its pause immediately, so the next call goes out. An action type with no active pause is accepted and does nothing, which makes it safe to send for a set you have not checked, and only the ones actually lifted are ledgered, each with the expiry it cut short, the actor and the time, readable afterwards on `GET /v1/{account_id}/safety-events` with `reason: "halt_cleared"`. Clearing disarms nothing: if the platform refuses the account again the pause returns, and a 429 or a refused write returns it for the full cooldown. Clear one when you have reason to believe the refusal was a transient upstream fault rather than the platform pushing back on this account.
|
|
2615
2615
|
*/
|
|
2616
2616
|
patch: operations["patchV1AccountIdSafetyPolicy"];
|
|
2617
2617
|
trace?: never;
|
|
@@ -8324,10 +8324,12 @@ export interface operations {
|
|
|
8324
8324
|
type: "LOCATION" | "PEOPLE" | "RELATION" | "COMPANY" | "SCHOOL" | "INDUSTRY" | "SERVICE" | "JOB_FUNCTION" | "JOB_TITLE" | "EMPLOYMENT_TYPE" | "SKILL";
|
|
8325
8325
|
/** @description Human term to resolve to opaque filter IDs (e.g. 'software development'). Required for every type, including EMPLOYMENT_TYPE. */
|
|
8326
8326
|
keywords: string;
|
|
8327
|
-
/** @description Zero-based pagination offset (default 0). */
|
|
8327
|
+
/** @description Zero-based pagination offset; a numeric fallback for cursor (default 0). */
|
|
8328
8328
|
offset?: number;
|
|
8329
8329
|
/** @description Number of parameters to return (1-100, default 10). */
|
|
8330
8330
|
limit?: number;
|
|
8331
|
+
/** @description Opaque pagination cursor returned from a previous response. */
|
|
8332
|
+
cursor?: string;
|
|
8331
8333
|
};
|
|
8332
8334
|
header?: never;
|
|
8333
8335
|
path: {
|
|
@@ -8365,7 +8367,7 @@ export interface operations {
|
|
|
8365
8367
|
};
|
|
8366
8368
|
};
|
|
8367
8369
|
};
|
|
8368
|
-
/** @description Missing or empty account_id, missing or empty type, missing keywords,
|
|
8370
|
+
/** @description Missing or empty account_id, missing or empty type, missing keywords, type not in the classic allowlist, or malformed cursor. */
|
|
8369
8371
|
400: {
|
|
8370
8372
|
headers: {
|
|
8371
8373
|
[name: string]: unknown;
|
|
@@ -29727,11 +29729,11 @@ export interface operations {
|
|
|
29727
29729
|
name?: string | null;
|
|
29728
29730
|
account_ids?: string[];
|
|
29729
29731
|
enabled?: boolean;
|
|
29730
|
-
/** @description Custom headers added to each delivery POST, with the value
|
|
29732
|
+
/** @description Custom headers added to each delivery POST, with a fingerprint in place of the value. */
|
|
29731
29733
|
headers?: {
|
|
29732
29734
|
key?: string;
|
|
29733
|
-
/** @description A
|
|
29734
|
-
|
|
29735
|
+
/** @description A 8-character keyed fingerprint of the configured value. It carries no part of the value and no indication of its length, but it is not a zero-disclosure field: it is deterministic, so two headers in your account with the same fingerprint hold the same value, and a changed fingerprint means a changed value. Use it to confirm a rotation took effect, or to tell whether two of your webhooks carry the same credential. Fingerprints are scoped to your account and are not comparable with another account's. Null for a header configured before fingerprints existed. The header name is what identifies which credential is configured. */
|
|
29736
|
+
value_fingerprint?: string | null;
|
|
29735
29737
|
}[];
|
|
29736
29738
|
events?: string[];
|
|
29737
29739
|
data?: string[];
|
|
@@ -29816,7 +29818,7 @@ export interface operations {
|
|
|
29816
29818
|
*/
|
|
29817
29819
|
enabled?: boolean;
|
|
29818
29820
|
/**
|
|
29819
|
-
* @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
|
|
29821
|
+
* @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 8-character keyed fingerprint of the value, which carries no part of the value and no indication of its length. It is deterministic within your account, so a fingerprint confirms a rotation took effect and tells you whether two of your webhooks carry the same credential; fingerprints are not comparable across accounts. The header name is what identifies which credential is configured.
|
|
29820
29822
|
* @default []
|
|
29821
29823
|
*/
|
|
29822
29824
|
headers?: {
|
|
@@ -29845,7 +29847,7 @@ export interface operations {
|
|
|
29845
29847
|
*/
|
|
29846
29848
|
enabled?: boolean;
|
|
29847
29849
|
/**
|
|
29848
|
-
* @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
|
|
29850
|
+
* @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 8-character keyed fingerprint of the value, which carries no part of the value and no indication of its length. It is deterministic within your account, so a fingerprint confirms a rotation took effect and tells you whether two of your webhooks carry the same credential; fingerprints are not comparable across accounts. The header name is what identifies which credential is configured.
|
|
29849
29851
|
* @default []
|
|
29850
29852
|
*/
|
|
29851
29853
|
headers?: {
|
|
@@ -29874,7 +29876,7 @@ export interface operations {
|
|
|
29874
29876
|
*/
|
|
29875
29877
|
enabled?: boolean;
|
|
29876
29878
|
/**
|
|
29877
|
-
* @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
|
|
29879
|
+
* @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 8-character keyed fingerprint of the value, which carries no part of the value and no indication of its length. It is deterministic within your account, so a fingerprint confirms a rotation took effect and tells you whether two of your webhooks carry the same credential; fingerprints are not comparable across accounts. The header name is what identifies which credential is configured.
|
|
29878
29880
|
* @default []
|
|
29879
29881
|
*/
|
|
29880
29882
|
headers?: {
|
|
@@ -29916,12 +29918,12 @@ export interface operations {
|
|
|
29916
29918
|
account_ids?: string[];
|
|
29917
29919
|
/** @description A disabled webhook is created but delivers nothing. */
|
|
29918
29920
|
enabled?: boolean;
|
|
29919
|
-
/** @description Custom headers added to each delivery POST. Values are encrypted at rest, so a read shows the name and a
|
|
29921
|
+
/** @description Custom headers added to each delivery POST. Values are encrypted at rest and no read returns one, so a read shows the name and a fingerprint of the value. */
|
|
29920
29922
|
headers?: {
|
|
29921
29923
|
/** @description The header name, as configured. */
|
|
29922
29924
|
key?: string;
|
|
29923
|
-
/** @description A
|
|
29924
|
-
|
|
29925
|
+
/** @description A 8-character keyed fingerprint of the configured value. It carries no part of the value and no indication of its length, but it is not a zero-disclosure field: it is deterministic, so two headers in your account with the same fingerprint hold the same value, and a changed fingerprint means a changed value. Use it to confirm a rotation took effect, or to tell whether two of your webhooks carry the same credential. Fingerprints are scoped to your account and are not comparable with another account's. Null for a header configured before fingerprints existed. The header name is what identifies which credential is configured. */
|
|
29926
|
+
value_fingerprint?: string | null;
|
|
29925
29927
|
}[];
|
|
29926
29928
|
/** @description Canonical event names this webhook subscribes to. */
|
|
29927
29929
|
events?: string[];
|
|
@@ -30194,12 +30196,12 @@ export interface operations {
|
|
|
30194
30196
|
account_ids?: string[];
|
|
30195
30197
|
/** @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. */
|
|
30196
30198
|
enabled?: boolean;
|
|
30197
|
-
/** @description Custom headers added to each delivery POST. Values are encrypted at rest, so a read shows the name and a
|
|
30199
|
+
/** @description Custom headers added to each delivery POST. Values are encrypted at rest and no read returns one, so a read shows the name and a fingerprint of the value. */
|
|
30198
30200
|
headers?: {
|
|
30199
30201
|
/** @description The header name, as configured. */
|
|
30200
30202
|
key?: string;
|
|
30201
|
-
/** @description A
|
|
30202
|
-
|
|
30203
|
+
/** @description A 8-character keyed fingerprint of the configured value. It carries no part of the value and no indication of its length, but it is not a zero-disclosure field: it is deterministic, so two headers in your account with the same fingerprint hold the same value, and a changed fingerprint means a changed value. Use it to confirm a rotation took effect, or to tell whether two of your webhooks carry the same credential. Fingerprints are scoped to your account and are not comparable with another account's. Null for a header configured before fingerprints existed. The header name is what identifies which credential is configured. */
|
|
30204
|
+
value_fingerprint?: string | null;
|
|
30203
30205
|
}[];
|
|
30204
30206
|
/** @description Canonical event names this webhook subscribes to. */
|
|
30205
30207
|
events?: string[];
|
|
@@ -30348,7 +30350,7 @@ export interface operations {
|
|
|
30348
30350
|
name?: string | null;
|
|
30349
30351
|
/** @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. */
|
|
30350
30352
|
enabled?: boolean;
|
|
30351
|
-
/** @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
|
|
30353
|
+
/** @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 8-character keyed fingerprint of the value, which carries no part of the value and no indication of its length. It is deterministic within your account, so a fingerprint confirms a rotation took effect and tells you whether two of your webhooks carry the same credential; fingerprints are not comparable across accounts. The header name is what identifies which credential is configured. */
|
|
30352
30354
|
headers?: {
|
|
30353
30355
|
key: string;
|
|
30354
30356
|
value: string;
|
|
@@ -30390,12 +30392,12 @@ export interface operations {
|
|
|
30390
30392
|
account_ids?: string[];
|
|
30391
30393
|
/** @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. */
|
|
30392
30394
|
enabled?: boolean;
|
|
30393
|
-
/** @description Custom headers added to each delivery POST. Values are encrypted at rest, so a read shows the name and a
|
|
30395
|
+
/** @description Custom headers added to each delivery POST. Values are encrypted at rest and no read returns one, so a read shows the name and a fingerprint of the value. */
|
|
30394
30396
|
headers?: {
|
|
30395
30397
|
/** @description The header name, as configured. */
|
|
30396
30398
|
key?: string;
|
|
30397
|
-
/** @description A
|
|
30398
|
-
|
|
30399
|
+
/** @description A 8-character keyed fingerprint of the configured value. It carries no part of the value and no indication of its length, but it is not a zero-disclosure field: it is deterministic, so two headers in your account with the same fingerprint hold the same value, and a changed fingerprint means a changed value. Use it to confirm a rotation took effect, or to tell whether two of your webhooks carry the same credential. Fingerprints are scoped to your account and are not comparable with another account's. Null for a header configured before fingerprints existed. The header name is what identifies which credential is configured. */
|
|
30400
|
+
value_fingerprint?: string | null;
|
|
30399
30401
|
}[];
|
|
30400
30402
|
/** @description Canonical event names this webhook subscribes to. */
|
|
30401
30403
|
events?: string[];
|
|
@@ -30502,13 +30504,13 @@ export interface operations {
|
|
|
30502
30504
|
*/
|
|
30503
30505
|
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
30504
30506
|
/**
|
|
30505
|
-
* @description Where `limit_profile` came from. `detected`: Curviate read it from LinkedIn, at `limit_profile_detected_at`. `operator`: it was set through this operation and holds until
|
|
30507
|
+
* @description Where `limit_profile` came from. `detected`: Curviate read it from LinkedIn, at `limit_profile_detected_at`. `operator`: it was set through this operation and holds until you release it by sending `limit_profile_source: "default"` on this operation, on its own (changing `limit_profile` and releasing it in the same request is refused). Nothing else overrides it: a connect, a reconnect and an account read all leave a pinned value exactly as you set it. `default`: it has never been observed, so the value is the seeded `basic` and says nothing about the account; Curviate detects it on the account's next read or connect.
|
|
30506
30508
|
* @enum {string}
|
|
30507
30509
|
*/
|
|
30508
30510
|
limit_profile_source?: "default" | "detected" | "operator";
|
|
30509
30511
|
/**
|
|
30510
30512
|
* Format: date-time
|
|
30511
|
-
* @description When Curviate last read `limit_profile` from LinkedIn, whether or not the value changed. Null until it has. Curviate re-reads it on connect and, at most once a day, on an account read, so a subscription change reaches the numbers without a reconnect.
|
|
30513
|
+
* @description When Curviate last read `limit_profile` from LinkedIn, whether or not the value changed. Null until it has. Curviate re-reads it on connect and, at most once a day, on an account read, so a subscription change reaches the numbers without a reconnect. While `limit_profile_source` is `operator` neither the value nor this timestamp moves, until you release the pin.
|
|
30512
30514
|
*/
|
|
30513
30515
|
limit_profile_detected_at?: string | null;
|
|
30514
30516
|
/**
|
|
@@ -30672,7 +30674,7 @@ export interface operations {
|
|
|
30672
30674
|
content: {
|
|
30673
30675
|
"application/json": {
|
|
30674
30676
|
/**
|
|
30675
|
-
* @description Which set of Curviate defaults this account's rows resolve from: `basic`, `premium`, `sales_navigator` or `recruiter`. Each inherits the one before it and raises a few rows. This is the platform product active on the account, NOT the Curviate seat entitlement, and the two can disagree: a lapsed subscription leaves the seat untouched. Curviate detects it from the platform when the account connects, re-detects it on every reconnect and, at most once a day, on an account read; setting it here
|
|
30677
|
+
* @description Which set of Curviate defaults this account's rows resolve from: `basic`, `premium`, `sales_navigator` or `recruiter`. Each inherits the one before it and raises a few rows. This is the platform product active on the account, NOT the Curviate seat entitlement, and the two can disagree: a lapsed subscription leaves the seat untouched. Curviate detects it from the platform when the account connects, re-detects it on every reconnect and, at most once a day, on an account read; setting it here pins it, and the pin wins over detection from then on. None of those paths moves a pinned value, so it holds until you release it. To release the pin, send `limit_profile_source: "default"` on its own: Curviate re-reads the value from LinkedIn on the account's next read or connect. Changing `limit_profile` and releasing it in the same request is refused with `INVALID_REQUEST`, because those are opposite intents. Sending the value the account already holds changes nothing and pins nothing. The change is recorded in the ledger and it moves the defaults under every row at once, so any row you have configured explicitly keeps your value. The elevated Sales Navigator and Recruiter figures apply only to calls made through the matching interface, the Sales Navigator and Recruiter operations, and Curviate holds each call to the figure for the interface it goes through. The numbers here are therefore the ones a standard-interface call is held to, on every profile; a call through one of those operations resolves from the elevated set instead, and each row publishes that figure as `interface_ceiling`.
|
|
30676
30678
|
* @enum {string}
|
|
30677
30679
|
*/
|
|
30678
30680
|
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
@@ -30762,7 +30764,7 @@ export interface operations {
|
|
|
30762
30764
|
/** @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. */
|
|
30763
30765
|
account_id?: unknown;
|
|
30764
30766
|
/**
|
|
30765
|
-
* @description Where `limit_profile` came from: `default` (never observed), `detected` (read from LinkedIn) or `operator` (
|
|
30767
|
+
* @description Where `limit_profile` came from: `default` (never observed), `detected` (read from LinkedIn) or `operator` (pinned through this operation, and nothing but a release moves it). Sending `default` releases a pin: the value is re-read from LinkedIn on the account's next read or connect. Send it on its own; changing `limit_profile` in the same request is refused. Sending `detected` or `operator` is accepted and ignored, so the whole document round-trips.
|
|
30766
30768
|
* @enum {string}
|
|
30767
30769
|
*/
|
|
30768
30770
|
limit_profile_source?: "default" | "detected" | "operator";
|
|
@@ -30800,13 +30802,13 @@ export interface operations {
|
|
|
30800
30802
|
*/
|
|
30801
30803
|
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
30802
30804
|
/**
|
|
30803
|
-
* @description Where `limit_profile` came from. `detected`: Curviate read it from LinkedIn, at `limit_profile_detected_at`. `operator`: it was set through this operation and holds until
|
|
30805
|
+
* @description Where `limit_profile` came from. `detected`: Curviate read it from LinkedIn, at `limit_profile_detected_at`. `operator`: it was set through this operation and holds until you release it by sending `limit_profile_source: "default"` on this operation, on its own (changing `limit_profile` and releasing it in the same request is refused). Nothing else overrides it: a connect, a reconnect and an account read all leave a pinned value exactly as you set it. `default`: it has never been observed, so the value is the seeded `basic` and says nothing about the account; Curviate detects it on the account's next read or connect.
|
|
30804
30806
|
* @enum {string}
|
|
30805
30807
|
*/
|
|
30806
30808
|
limit_profile_source?: "default" | "detected" | "operator";
|
|
30807
30809
|
/**
|
|
30808
30810
|
* Format: date-time
|
|
30809
|
-
* @description When Curviate last read `limit_profile` from LinkedIn, whether or not the value changed. Null until it has. Curviate re-reads it on connect and, at most once a day, on an account read, so a subscription change reaches the numbers without a reconnect.
|
|
30811
|
+
* @description When Curviate last read `limit_profile` from LinkedIn, whether or not the value changed. Null until it has. Curviate re-reads it on connect and, at most once a day, on an account read, so a subscription change reaches the numbers without a reconnect. While `limit_profile_source` is `operator` neither the value nor this timestamp moves, until you release the pin.
|
|
30810
30812
|
*/
|
|
30811
30813
|
limit_profile_detected_at?: string | null;
|
|
30812
30814
|
/**
|