@curviate/sdk 0.28.0 → 0.29.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 CHANGED
@@ -7,6 +7,51 @@ Versioning: semantic. Minor for additive changes, patch for bug fixes; no stabil
7
7
 
8
8
  ---
9
9
 
10
+ ## [0.29.0] - 2026-09-07
11
+
12
+ Fixture and types regenerated against the deployed staging document
13
+ (`https://api.staging.curviate.com`, `server_git_sha 1447ffd4...`, 125 paths).
14
+ Additive only: `safety-policy` now says where `limit_profile` came from, and an
15
+ operator override can be released without a reconnect.
16
+
17
+ ### Added
18
+
19
+ - **`GET /v1/{account_id}/safety-policy` gains `limit_profile_source` and
20
+ `limit_profile_detected_at`.** `limit_profile_source` is `"default"`,
21
+ `"detected"` or `"operator"`: `default` means the value has never been
22
+ observed and is the seeded `basic`, so it says nothing about the account;
23
+ `detected` means Curviate read it from LinkedIn at `limit_profile_detected_at`,
24
+ whether or not the value changed; `operator` means it was set through the
25
+ PATCH. `limit_profile_detected_at` is an ISO date-time, or `null` until the
26
+ value has been read at least once. Both fields appear on the PATCH response
27
+ too.
28
+
29
+ - **`PATCH /v1/{account_id}/safety-policy` accepts `limit_profile_source`.**
30
+ Sending `"default"` is a real write: it releases an operator override, and the
31
+ value is re-read from LinkedIn on the account's next account read or connect.
32
+ Sending `"detected"` or `"operator"` is accepted and ignored, so a document
33
+ read from the GET round-trips unchanged. `limit_profile_detected_at` is
34
+ read-only and likewise accepted and ignored on a write.
35
+
36
+ ### Changed
37
+
38
+ - Description-only: the PATCH `limit_profile` description now states that
39
+ Curviate re-reads the profile at most once a day on an account read (not only
40
+ on connect and reconnect), and that the override is released by sending
41
+ `limit_profile_source: "default"` rather than by writing `basic` back.
42
+
43
+ ### Notes
44
+
45
+ - The server also removed `POST /v1/billing/seats/:seat_id/tier` in the same
46
+ wave. `/v1/billing/*` has never been part of the served OpenAPI document, so
47
+ there is no SDK surface change from it: the path count is unchanged at 125 and
48
+ the generated types are untouched by that removal.
49
+ - `safety-policy` has no hand-written resource method in this SDK; it is reached
50
+ through the generated `operations` types, which is where these two fields
51
+ land.
52
+
53
+ ---
54
+
10
55
  ## [0.28.0] - 2026-09-07
11
56
 
12
57
  Fixture regenerated against the deployed staging document
package/dist/index.d.ts CHANGED
@@ -30449,6 +30449,16 @@ interface operations {
30449
30449
  * @enum {string|null}
30450
30450
  */
30451
30451
  seat_tier_mismatch?: "core" | "sn" | "recruiter" | null;
30452
+ /**
30453
+ * @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 the account next connects, or until you send `limit_profile_source: "default"` on this operation, which releases 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.
30454
+ * @enum {string}
30455
+ */
30456
+ limit_profile_source?: "default" | "detected" | "operator";
30457
+ /**
30458
+ * Format: date-time
30459
+ * @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.
30460
+ */
30461
+ limit_profile_detected_at?: string | null;
30452
30462
  /**
30453
30463
  * @description The account's default posture, before any per-row override.
30454
30464
  * @enum {string}
@@ -30610,7 +30620,7 @@ interface operations {
30610
30620
  content: {
30611
30621
  "application/json": {
30612
30622
  /**
30613
- * @description Which set of Curviate defaults this account's rows resolve from: `basic`, `premium`, `sales_navigator` or `recruiter`. Each inherits the one before it and raises a few rows. This is the platform product active on the account, NOT the Curviate seat entitlement, and the two can disagree: a lapsed subscription leaves the seat untouched. Curviate detects it from the platform when the account connects and re-detects it on every reconnect; setting it here is an operator override of that result and holds until the next connect. Set it back to `basic` to undo. The change is recorded in the ledger and it moves the defaults under every row at once, so any row you have configured explicitly keeps your value. The elevated Sales Navigator and Recruiter figures apply only to calls made through the matching interface, the `/v1/{account_id}/sales-navigator/...` and `/v1/{account_id}/recruiter/...` operations, and Curviate holds each call to the figure for the interface it goes through. The numbers here are therefore the ones a standard-interface call is held to, on every profile; a call through one of those operations resolves from the elevated set instead, and each row publishes that figure as `interface_ceiling`.
30623
+ * @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 is an operator override of that result and holds until the next connect. To undo the override, send `limit_profile_source: "default"`: the pin is released, and Curviate re-reads the value from LinkedIn on the account's next read or connect. 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 `/v1/{account_id}/sales-navigator/...` and `/v1/{account_id}/recruiter/...` operations, and Curviate holds each call to the figure for the interface it goes through. The numbers here are therefore the ones a standard-interface call is held to, on every profile; a call through one of those operations resolves from the elevated set instead, and each row publishes that figure as `interface_ceiling`.
30614
30624
  * @enum {string}
30615
30625
  */
30616
30626
  limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
@@ -30701,6 +30711,13 @@ interface operations {
30701
30711
  account_id?: unknown;
30702
30712
  /** @description READ-ONLY. The Curviate seat tier that disagrees with `limit_profile`. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
30703
30713
  seat_tier_mismatch?: unknown;
30714
+ /**
30715
+ * @description Where `limit_profile` came from: `default` (never observed), `detected` (read from LinkedIn) or `operator` (set through this operation). Sending `default` releases an operator override: the value is re-read from LinkedIn on the account's next read or connect. Sending `detected` or `operator` is accepted and ignored, so the whole document round-trips.
30716
+ * @enum {string}
30717
+ */
30718
+ limit_profile_source?: "default" | "detected" | "operator";
30719
+ /** @description READ-ONLY. When `limit_profile` was last read from LinkedIn, or null if it never has been. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
30720
+ limit_profile_detected_at?: unknown;
30704
30721
  /** @description READ-ONLY. Which scope supplied this account's effective `posture`. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
30705
30722
  posture_source?: unknown;
30706
30723
  /** @description READ-ONLY. The account's DERIVED warm-up ramp, recomputed on every read. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
@@ -30737,6 +30754,16 @@ interface operations {
30737
30754
  * @enum {string|null}
30738
30755
  */
30739
30756
  seat_tier_mismatch?: "core" | "sn" | "recruiter" | null;
30757
+ /**
30758
+ * @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 the account next connects, or until you send `limit_profile_source: "default"` on this operation, which releases 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.
30759
+ * @enum {string}
30760
+ */
30761
+ limit_profile_source?: "default" | "detected" | "operator";
30762
+ /**
30763
+ * Format: date-time
30764
+ * @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.
30765
+ */
30766
+ limit_profile_detected_at?: string | null;
30740
30767
  /**
30741
30768
  * @description The account's default posture, before any per-row override.
30742
30769
  * @enum {string}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@curviate/sdk",
3
- "version": "0.28.0",
3
+ "version": "0.29.0",
4
4
  "private": false,
5
5
  "description": "TypeScript SDK for the Curviate API.",
6
6
  "license": "MIT",
@@ -30353,6 +30353,16 @@ export interface operations {
30353
30353
  * @enum {string|null}
30354
30354
  */
30355
30355
  seat_tier_mismatch?: "core" | "sn" | "recruiter" | null;
30356
+ /**
30357
+ * @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 the account next connects, or until you send `limit_profile_source: "default"` on this operation, which releases 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.
30358
+ * @enum {string}
30359
+ */
30360
+ limit_profile_source?: "default" | "detected" | "operator";
30361
+ /**
30362
+ * Format: date-time
30363
+ * @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.
30364
+ */
30365
+ limit_profile_detected_at?: string | null;
30356
30366
  /**
30357
30367
  * @description The account's default posture, before any per-row override.
30358
30368
  * @enum {string}
@@ -30514,7 +30524,7 @@ export interface operations {
30514
30524
  content: {
30515
30525
  "application/json": {
30516
30526
  /**
30517
- * @description Which set of Curviate defaults this account's rows resolve from: `basic`, `premium`, `sales_navigator` or `recruiter`. Each inherits the one before it and raises a few rows. This is the platform product active on the account, NOT the Curviate seat entitlement, and the two can disagree: a lapsed subscription leaves the seat untouched. Curviate detects it from the platform when the account connects and re-detects it on every reconnect; setting it here is an operator override of that result and holds until the next connect. Set it back to `basic` to undo. The change is recorded in the ledger and it moves the defaults under every row at once, so any row you have configured explicitly keeps your value. The elevated Sales Navigator and Recruiter figures apply only to calls made through the matching interface, the `/v1/{account_id}/sales-navigator/...` and `/v1/{account_id}/recruiter/...` operations, and Curviate holds each call to the figure for the interface it goes through. The numbers here are therefore the ones a standard-interface call is held to, on every profile; a call through one of those operations resolves from the elevated set instead, and each row publishes that figure as `interface_ceiling`.
30527
+ * @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 is an operator override of that result and holds until the next connect. To undo the override, send `limit_profile_source: "default"`: the pin is released, and Curviate re-reads the value from LinkedIn on the account's next read or connect. 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 `/v1/{account_id}/sales-navigator/...` and `/v1/{account_id}/recruiter/...` operations, and Curviate holds each call to the figure for the interface it goes through. The numbers here are therefore the ones a standard-interface call is held to, on every profile; a call through one of those operations resolves from the elevated set instead, and each row publishes that figure as `interface_ceiling`.
30518
30528
  * @enum {string}
30519
30529
  */
30520
30530
  limit_profile?: "basic" | "premium" | "sales_navigator" | "recruiter";
@@ -30605,6 +30615,13 @@ export interface operations {
30605
30615
  account_id?: unknown;
30606
30616
  /** @description READ-ONLY. The Curviate seat tier that disagrees with `limit_profile`. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
30607
30617
  seat_tier_mismatch?: unknown;
30618
+ /**
30619
+ * @description Where `limit_profile` came from: `default` (never observed), `detected` (read from LinkedIn) or `operator` (set through this operation). Sending `default` releases an operator override: the value is re-read from LinkedIn on the account's next read or connect. Sending `detected` or `operator` is accepted and ignored, so the whole document round-trips.
30620
+ * @enum {string}
30621
+ */
30622
+ limit_profile_source?: "default" | "detected" | "operator";
30623
+ /** @description READ-ONLY. When `limit_profile` was last read from LinkedIn, or null if it never has been. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
30624
+ limit_profile_detected_at?: unknown;
30608
30625
  /** @description READ-ONLY. Which scope supplied this account's effective `posture`. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
30609
30626
  posture_source?: unknown;
30610
30627
  /** @description READ-ONLY. The account's DERIVED warm-up ramp, recomputed on every read. Sent back on a write it is accepted and ignored, so the whole document round-trips; it is never stored and never ledgered. */
@@ -30641,6 +30658,16 @@ export interface operations {
30641
30658
  * @enum {string|null}
30642
30659
  */
30643
30660
  seat_tier_mismatch?: "core" | "sn" | "recruiter" | null;
30661
+ /**
30662
+ * @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 the account next connects, or until you send `limit_profile_source: "default"` on this operation, which releases 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.
30663
+ * @enum {string}
30664
+ */
30665
+ limit_profile_source?: "default" | "detected" | "operator";
30666
+ /**
30667
+ * Format: date-time
30668
+ * @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.
30669
+ */
30670
+ limit_profile_detected_at?: string | null;
30644
30671
  /**
30645
30672
  * @description The account's default posture, before any per-row override.
30646
30673
  * @enum {string}