@curviate/sdk 0.36.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 +60 -0
- package/dist/index.d.ts +24 -26
- package/dist/index.js +1 -3
- package/package.json +1 -1
- package/src/generated/types.ts +23 -23
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,66 @@ 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
|
+
|
|
12
72
|
## [0.36.0] - 2026-09-20
|
|
13
73
|
|
|
14
74
|
Fixture and types regenerated against the deployed production document
|
package/dist/index.d.ts
CHANGED
|
@@ -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;
|
|
@@ -29825,11 +29825,11 @@ interface operations {
|
|
|
29825
29825
|
name?: string | null;
|
|
29826
29826
|
account_ids?: string[];
|
|
29827
29827
|
enabled?: boolean;
|
|
29828
|
-
/** @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. */
|
|
29829
29829
|
headers?: {
|
|
29830
29830
|
key?: string;
|
|
29831
|
-
/** @description A
|
|
29832
|
-
|
|
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;
|
|
29833
29833
|
}[];
|
|
29834
29834
|
events?: string[];
|
|
29835
29835
|
data?: string[];
|
|
@@ -29914,7 +29914,7 @@ interface operations {
|
|
|
29914
29914
|
*/
|
|
29915
29915
|
enabled?: boolean;
|
|
29916
29916
|
/**
|
|
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
|
|
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.
|
|
29918
29918
|
* @default []
|
|
29919
29919
|
*/
|
|
29920
29920
|
headers?: {
|
|
@@ -29943,7 +29943,7 @@ interface operations {
|
|
|
29943
29943
|
*/
|
|
29944
29944
|
enabled?: boolean;
|
|
29945
29945
|
/**
|
|
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
|
|
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.
|
|
29947
29947
|
* @default []
|
|
29948
29948
|
*/
|
|
29949
29949
|
headers?: {
|
|
@@ -29972,7 +29972,7 @@ interface operations {
|
|
|
29972
29972
|
*/
|
|
29973
29973
|
enabled?: boolean;
|
|
29974
29974
|
/**
|
|
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
|
|
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.
|
|
29976
29976
|
* @default []
|
|
29977
29977
|
*/
|
|
29978
29978
|
headers?: {
|
|
@@ -30014,12 +30014,12 @@ interface operations {
|
|
|
30014
30014
|
account_ids?: string[];
|
|
30015
30015
|
/** @description A disabled webhook is created but delivers nothing. */
|
|
30016
30016
|
enabled?: boolean;
|
|
30017
|
-
/** @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. */
|
|
30018
30018
|
headers?: {
|
|
30019
30019
|
/** @description The header name, as configured. */
|
|
30020
30020
|
key?: string;
|
|
30021
|
-
/** @description A
|
|
30022
|
-
|
|
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;
|
|
30023
30023
|
}[];
|
|
30024
30024
|
/** @description Canonical event names this webhook subscribes to. */
|
|
30025
30025
|
events?: string[];
|
|
@@ -30292,12 +30292,12 @@ interface operations {
|
|
|
30292
30292
|
account_ids?: string[];
|
|
30293
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. */
|
|
30294
30294
|
enabled?: boolean;
|
|
30295
|
-
/** @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. */
|
|
30296
30296
|
headers?: {
|
|
30297
30297
|
/** @description The header name, as configured. */
|
|
30298
30298
|
key?: string;
|
|
30299
|
-
/** @description A
|
|
30300
|
-
|
|
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;
|
|
30301
30301
|
}[];
|
|
30302
30302
|
/** @description Canonical event names this webhook subscribes to. */
|
|
30303
30303
|
events?: string[];
|
|
@@ -30446,7 +30446,7 @@ interface operations {
|
|
|
30446
30446
|
name?: string | null;
|
|
30447
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. */
|
|
30448
30448
|
enabled?: boolean;
|
|
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
|
|
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. */
|
|
30450
30450
|
headers?: {
|
|
30451
30451
|
key: string;
|
|
30452
30452
|
value: string;
|
|
@@ -30488,12 +30488,12 @@ interface operations {
|
|
|
30488
30488
|
account_ids?: string[];
|
|
30489
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. */
|
|
30490
30490
|
enabled?: boolean;
|
|
30491
|
-
/** @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. */
|
|
30492
30492
|
headers?: {
|
|
30493
30493
|
/** @description The header name, as configured. */
|
|
30494
30494
|
key?: string;
|
|
30495
|
-
/** @description A
|
|
30496
|
-
|
|
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;
|
|
30497
30497
|
}[];
|
|
30498
30498
|
/** @description Canonical event names this webhook subscribes to. */
|
|
30499
30499
|
events?: string[];
|
|
@@ -30600,13 +30600,13 @@ interface operations {
|
|
|
30600
30600
|
*/
|
|
30601
30601
|
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
30602
30602
|
/**
|
|
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
|
|
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.
|
|
30604
30604
|
* @enum {string}
|
|
30605
30605
|
*/
|
|
30606
30606
|
limit_profile_source?: "default" | "detected" | "operator";
|
|
30607
30607
|
/**
|
|
30608
30608
|
* Format: date-time
|
|
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.
|
|
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.
|
|
30610
30610
|
*/
|
|
30611
30611
|
limit_profile_detected_at?: string | null;
|
|
30612
30612
|
/**
|
|
@@ -30770,7 +30770,7 @@ interface operations {
|
|
|
30770
30770
|
content: {
|
|
30771
30771
|
"application/json": {
|
|
30772
30772
|
/**
|
|
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
|
|
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`.
|
|
30774
30774
|
* @enum {string}
|
|
30775
30775
|
*/
|
|
30776
30776
|
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
@@ -30860,7 +30860,7 @@ interface operations {
|
|
|
30860
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. */
|
|
30861
30861
|
account_id?: unknown;
|
|
30862
30862
|
/**
|
|
30863
|
-
* @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.
|
|
30864
30864
|
* @enum {string}
|
|
30865
30865
|
*/
|
|
30866
30866
|
limit_profile_source?: "default" | "detected" | "operator";
|
|
@@ -30898,13 +30898,13 @@ interface operations {
|
|
|
30898
30898
|
*/
|
|
30899
30899
|
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
30900
30900
|
/**
|
|
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
|
|
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.
|
|
30902
30902
|
* @enum {string}
|
|
30903
30903
|
*/
|
|
30904
30904
|
limit_profile_source?: "default" | "detected" | "operator";
|
|
30905
30905
|
/**
|
|
30906
30906
|
* Format: date-time
|
|
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.
|
|
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.
|
|
30908
30908
|
*/
|
|
30909
30909
|
limit_profile_detected_at?: string | null;
|
|
30910
30910
|
/**
|
|
@@ -32146,10 +32146,9 @@ declare class SearchResource {
|
|
|
32146
32146
|
* stays available as the numeric fallback. A malformed cursor is a `400`.
|
|
32147
32147
|
*
|
|
32148
32148
|
* @example
|
|
32149
|
-
* ```ts
|
|
32150
32149
|
* let cursor: string | null | undefined;
|
|
32151
32150
|
* do {
|
|
32152
|
-
* const page = await
|
|
32151
|
+
* const page = await curviate.account("acc_123").search.getParameters({
|
|
32153
32152
|
* type: "SKILL",
|
|
32154
32153
|
* keywords: "software development",
|
|
32155
32154
|
* ...(cursor ? { cursor } : {}),
|
|
@@ -32157,7 +32156,6 @@ declare class SearchResource {
|
|
|
32157
32156
|
* for (const item of page.items) console.log(item.id, item.name);
|
|
32158
32157
|
* cursor = page.cursor;
|
|
32159
32158
|
* } while (cursor);
|
|
32160
|
-
* ```
|
|
32161
32159
|
*/
|
|
32162
32160
|
getParameters(query: SearchParametersQuery): Promise<SearchParametersResult>;
|
|
32163
32161
|
/**
|
package/dist/index.js
CHANGED
|
@@ -1138,10 +1138,9 @@ var SearchResource = class {
|
|
|
1138
1138
|
* stays available as the numeric fallback. A malformed cursor is a `400`.
|
|
1139
1139
|
*
|
|
1140
1140
|
* @example
|
|
1141
|
-
* ```ts
|
|
1142
1141
|
* let cursor: string | null | undefined;
|
|
1143
1142
|
* do {
|
|
1144
|
-
* const page = await
|
|
1143
|
+
* const page = await curviate.account("acc_123").search.getParameters({
|
|
1145
1144
|
* type: "SKILL",
|
|
1146
1145
|
* keywords: "software development",
|
|
1147
1146
|
* ...(cursor ? { cursor } : {}),
|
|
@@ -1149,7 +1148,6 @@ var SearchResource = class {
|
|
|
1149
1148
|
* for (const item of page.items) console.log(item.id, item.name);
|
|
1150
1149
|
* cursor = page.cursor;
|
|
1151
1150
|
* } while (cursor);
|
|
1152
|
-
* ```
|
|
1153
1151
|
*/
|
|
1154
1152
|
getParameters(query) {
|
|
1155
1153
|
return this.ctx.request({
|
package/package.json
CHANGED
package/src/generated/types.ts
CHANGED
|
@@ -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;
|
|
@@ -29729,11 +29729,11 @@ export interface operations {
|
|
|
29729
29729
|
name?: string | null;
|
|
29730
29730
|
account_ids?: string[];
|
|
29731
29731
|
enabled?: boolean;
|
|
29732
|
-
/** @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. */
|
|
29733
29733
|
headers?: {
|
|
29734
29734
|
key?: string;
|
|
29735
|
-
/** @description A
|
|
29736
|
-
|
|
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;
|
|
29737
29737
|
}[];
|
|
29738
29738
|
events?: string[];
|
|
29739
29739
|
data?: string[];
|
|
@@ -29818,7 +29818,7 @@ export interface operations {
|
|
|
29818
29818
|
*/
|
|
29819
29819
|
enabled?: boolean;
|
|
29820
29820
|
/**
|
|
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
|
|
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.
|
|
29822
29822
|
* @default []
|
|
29823
29823
|
*/
|
|
29824
29824
|
headers?: {
|
|
@@ -29847,7 +29847,7 @@ export interface operations {
|
|
|
29847
29847
|
*/
|
|
29848
29848
|
enabled?: boolean;
|
|
29849
29849
|
/**
|
|
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
|
|
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.
|
|
29851
29851
|
* @default []
|
|
29852
29852
|
*/
|
|
29853
29853
|
headers?: {
|
|
@@ -29876,7 +29876,7 @@ export interface operations {
|
|
|
29876
29876
|
*/
|
|
29877
29877
|
enabled?: boolean;
|
|
29878
29878
|
/**
|
|
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
|
|
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.
|
|
29880
29880
|
* @default []
|
|
29881
29881
|
*/
|
|
29882
29882
|
headers?: {
|
|
@@ -29918,12 +29918,12 @@ export interface operations {
|
|
|
29918
29918
|
account_ids?: string[];
|
|
29919
29919
|
/** @description A disabled webhook is created but delivers nothing. */
|
|
29920
29920
|
enabled?: boolean;
|
|
29921
|
-
/** @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. */
|
|
29922
29922
|
headers?: {
|
|
29923
29923
|
/** @description The header name, as configured. */
|
|
29924
29924
|
key?: string;
|
|
29925
|
-
/** @description A
|
|
29926
|
-
|
|
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;
|
|
29927
29927
|
}[];
|
|
29928
29928
|
/** @description Canonical event names this webhook subscribes to. */
|
|
29929
29929
|
events?: string[];
|
|
@@ -30196,12 +30196,12 @@ export interface operations {
|
|
|
30196
30196
|
account_ids?: string[];
|
|
30197
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. */
|
|
30198
30198
|
enabled?: boolean;
|
|
30199
|
-
/** @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. */
|
|
30200
30200
|
headers?: {
|
|
30201
30201
|
/** @description The header name, as configured. */
|
|
30202
30202
|
key?: string;
|
|
30203
|
-
/** @description A
|
|
30204
|
-
|
|
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;
|
|
30205
30205
|
}[];
|
|
30206
30206
|
/** @description Canonical event names this webhook subscribes to. */
|
|
30207
30207
|
events?: string[];
|
|
@@ -30350,7 +30350,7 @@ export interface operations {
|
|
|
30350
30350
|
name?: string | null;
|
|
30351
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. */
|
|
30352
30352
|
enabled?: boolean;
|
|
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
|
|
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. */
|
|
30354
30354
|
headers?: {
|
|
30355
30355
|
key: string;
|
|
30356
30356
|
value: string;
|
|
@@ -30392,12 +30392,12 @@ export interface operations {
|
|
|
30392
30392
|
account_ids?: string[];
|
|
30393
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. */
|
|
30394
30394
|
enabled?: boolean;
|
|
30395
|
-
/** @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. */
|
|
30396
30396
|
headers?: {
|
|
30397
30397
|
/** @description The header name, as configured. */
|
|
30398
30398
|
key?: string;
|
|
30399
|
-
/** @description A
|
|
30400
|
-
|
|
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;
|
|
30401
30401
|
}[];
|
|
30402
30402
|
/** @description Canonical event names this webhook subscribes to. */
|
|
30403
30403
|
events?: string[];
|
|
@@ -30504,13 +30504,13 @@ export interface operations {
|
|
|
30504
30504
|
*/
|
|
30505
30505
|
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
30506
30506
|
/**
|
|
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
|
|
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.
|
|
30508
30508
|
* @enum {string}
|
|
30509
30509
|
*/
|
|
30510
30510
|
limit_profile_source?: "default" | "detected" | "operator";
|
|
30511
30511
|
/**
|
|
30512
30512
|
* Format: date-time
|
|
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.
|
|
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.
|
|
30514
30514
|
*/
|
|
30515
30515
|
limit_profile_detected_at?: string | null;
|
|
30516
30516
|
/**
|
|
@@ -30674,7 +30674,7 @@ export interface operations {
|
|
|
30674
30674
|
content: {
|
|
30675
30675
|
"application/json": {
|
|
30676
30676
|
/**
|
|
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
|
|
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`.
|
|
30678
30678
|
* @enum {string}
|
|
30679
30679
|
*/
|
|
30680
30680
|
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
@@ -30764,7 +30764,7 @@ export interface operations {
|
|
|
30764
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. */
|
|
30765
30765
|
account_id?: unknown;
|
|
30766
30766
|
/**
|
|
30767
|
-
* @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.
|
|
30768
30768
|
* @enum {string}
|
|
30769
30769
|
*/
|
|
30770
30770
|
limit_profile_source?: "default" | "detected" | "operator";
|
|
@@ -30802,13 +30802,13 @@ export interface operations {
|
|
|
30802
30802
|
*/
|
|
30803
30803
|
limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
|
|
30804
30804
|
/**
|
|
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
|
|
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.
|
|
30806
30806
|
* @enum {string}
|
|
30807
30807
|
*/
|
|
30808
30808
|
limit_profile_source?: "default" | "detected" | "operator";
|
|
30809
30809
|
/**
|
|
30810
30810
|
* Format: date-time
|
|
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.
|
|
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.
|
|
30812
30812
|
*/
|
|
30813
30813
|
limit_profile_detected_at?: string | null;
|
|
30814
30814
|
/**
|