@curviate/sdk 0.7.0 → 0.9.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,37 @@ Versioning: semantic — minor for additive changes, patch for bug fixes; no sta
7
7
 
8
8
  ---
9
9
 
10
+ ## [0.9.0] — 2026-07-03
11
+
12
+ ### Added
13
+
14
+ - **Account enrichment fields.** `accounts.list()` items and `accounts.get()` now carry six cached account-detail fields, populated by an async background enrichment on every successful account activation: `username`, `premium_id`, `public_identifier`, `substrate_created_at` (ISO-8601 UTC), `signatures` (`{title, content}[]`), and `groups` (`string[]`). All six are `null`/`[]` until the account's first enrichment pass completes — never `undefined`, never a missing key. Types: `AccountListPage`, `AccountDetail`.
15
+ - `accounts.get()` gains `seat_id` (`string | null`) — the seat the account occupies, `null` for an admin seatless account. Previously only `accounts.list()` items carried this field.
16
+
17
+ ### Changed
18
+
19
+ - `connected_at` (on both `accounts.list()` items and `accounts.get()`) and `last_checked_at` (`accounts.get()`) now consistently emit ISO-8601 UTC (`…Z`) timestamps — a prior docs-vs-runtime drift meant these could reach callers in raw Postgres wire format. No type change (already typed as `string`/`string | null`); this is a runtime-correctness fix reflected in the regenerated example values.
20
+ - Regenerated types from the current API surface. No resource method signatures changed — purely additive response fields.
21
+ - `quotas[]` (on `accounts.get()`) is now documented as advisory usage-safety recommendations: daily families never cause a rejected request; only `account.per_minute` is a binding limit enforced with HTTP 429. `recommended_throttle_hint` semantics documented per level (`none` / `slow_down` / `backoff` are advisory; `stop` is reserved for the binding per-minute limit). JSDoc-only — no type shape change.
22
+
23
+ ---
24
+
25
+ ## [0.8.0] — 2026-07-02
26
+
27
+ ### Added
28
+
29
+ - **Recruiter job-lifecycle endpoints are now fully implemented server-side.** The following operations no longer return `501` and are safe to call in production: getting/rejecting an applicant, downloading an applicant's resume, listing a job's applicants, solving a job's publish checkpoint, publishing a job, and fetching a Recruiter profile. Their generated response types no longer include a `501` variant — if your code branched on it, that branch is now dead and can be removed.
30
+ - Richer parameter documentation across the Recruiter and search surfaces: job/applicant/hiring-project IDs now describe where to obtain them (e.g. `job_id` from `GET /v1/recruiter/jobs`, `user_id` from a people-search result), and several previously-terse descriptions were corrected (e.g. the saved-search `industry` filter's cross-reference).
31
+ - Server-side parameter defaults are now surfaced in the generated JSDoc (`@default`) wherever the API applies one when a param is omitted — link-expiry seconds, chat visibility, hiring-project list `limit`, webhook delivery `format`/`enabled`/`headers`/`data`, and more.
32
+ - **Breaking (typed consumers):** the Sales Navigator company-search `annual_revenue.min`/`max` filter is now a bucketed numeric enum (`0 | 0.2 | 1 | 2.5 | 5 | 10 | 20 | 50 | 100 | 500 | 1000 | 1001`) instead of a free-form `number`, matching what the API actually accepts. Code passing arbitrary numbers no longer typechecks — pick the nearest bucket value. Runtime behavior is unchanged (the API already only accepted these buckets).
33
+
34
+ ### Changed
35
+
36
+ - **Search filter guard-rails are now documented.** `search.companies` `limit` requires a minimum of 2 (was 1) — the API rejects single-result company searches. `search.jobs` `benefits` and `commitments` filters now document their accepted values. `search.people` `open_to` now documents its accepted values (`proBono`, `boardMember`). The `search.posts` request examples were corrected to use the actual `member`/`company` array filter shape instead of a `member_urn` string.
37
+ - Regenerated types from the current API surface. No resource method signatures changed.
38
+
39
+ ---
40
+
10
41
  ## [0.7.0] — 2026-07-01
11
42
 
12
43
  ### Changed
package/dist/index.d.ts CHANGED
@@ -164,8 +164,23 @@ interface paths {
164
164
  headline?: string | null;
165
165
  /** @description The seat this account occupies. */
166
166
  seat_id?: string | null;
167
- /** @description ISO-8601 connection timestamp. */
168
- connected_at?: string;
167
+ /** @description ISO-8601 UTC connection timestamp. */
168
+ connected_at?: string | null;
169
+ /** @description Cached account username. Null until enriched. */
170
+ username?: string | null;
171
+ /** @description Cached premium-membership id. Null until enriched, or for non-premium accounts. */
172
+ premium_id?: string | null;
173
+ /** @description Cached public profile identifier. Null until enriched. */
174
+ public_identifier?: string | null;
175
+ /** @description ISO-8601 UTC creation timestamp of the underlying LinkedIn account — distinct from connected_at. Null until enriched. */
176
+ substrate_created_at?: string | null;
177
+ /** @description Cached signature blocks (title + content) for the account. Empty until enriched. */
178
+ signatures?: {
179
+ title?: string;
180
+ content?: string;
181
+ }[];
182
+ /** @description Cached group names the account belongs to. Empty until enriched. */
183
+ groups?: string[];
169
184
  }[];
170
185
  /** @description Next-page cursor; null on the last page. */
171
186
  cursor?: string | null;
@@ -508,9 +523,28 @@ interface paths {
508
523
  auth_method?: string;
509
524
  full_name?: string | null;
510
525
  headline?: string | null;
526
+ /** @description ISO-8601 UTC connection timestamp. */
511
527
  connected_at?: string | null;
528
+ /** @description ISO-8601 UTC time the account state was last checked. */
512
529
  last_checked_at?: string;
513
- /** @description Per-account quota view one entry per tracked family (messages.daily, connection_requests.daily, profile_views.daily, inmail.daily, account.per_minute). */
530
+ /** @description The seat this account occupies (null for an admin seatless account). */
531
+ seat_id?: string | null;
532
+ /** @description Cached account username. Null until enriched. */
533
+ username?: string | null;
534
+ /** @description Cached premium-membership id. Null until enriched, or for non-premium accounts. */
535
+ premium_id?: string | null;
536
+ /** @description Cached public profile identifier. Null until enriched. */
537
+ public_identifier?: string | null;
538
+ /** @description ISO-8601 UTC creation timestamp of the underlying LinkedIn account — distinct from connected_at. Null until enriched. */
539
+ substrate_created_at?: string | null;
540
+ /** @description Cached signature blocks (title + content) for the account. Empty until enriched. */
541
+ signatures?: {
542
+ title?: string;
543
+ content?: string;
544
+ }[];
545
+ /** @description Cached group names the account belongs to. Empty until enriched. */
546
+ groups?: string[];
547
+ /** @description Usage-safety recommendations for this account — one entry per tracked family (messages.daily, connection_requests.daily, profile_views.daily, inmail.daily, profile.endorse, account.per_minute). These are advisory only: Curviate never rejects a request because a daily recommendation is exceeded; only account.per_minute is a binding limit enforced with HTTP 429. */
514
548
  quotas?: {
515
549
  /** @description Quota family (e.g. messages.daily, account.per_minute). */
516
550
  quota_name?: string;
@@ -521,7 +555,7 @@ interface paths {
521
555
  /** @description ISO-8601 UTC time the current window resets. */
522
556
  reset_time?: string;
523
557
  /**
524
- * @description Pacing hint.
558
+ * @description Pacing recommendation for this family, advisory only. `none` (under 80% consumed), `slow_down` (80-99% consumed), and `backoff` (100%+ consumed) never block a request. `stop` is reserved exclusively for `account.per_minute` — the sole binding limit, whose breach is enforced with HTTP 429.
525
559
  * @enum {string}
526
560
  */
527
561
  recommended_throttle_hint?: "none" | "slow_down" | "backoff" | "stop";
@@ -854,10 +888,14 @@ interface paths {
854
888
  account_id?: string;
855
889
  /**
856
890
  * @description 'create' = new account onboarding; 'reconnect' = re-auth of existing account
891
+ * @default create
857
892
  * @enum {string}
858
893
  */
859
894
  purpose?: "create" | "reconnect";
860
- /** @description Seconds until the link expires (60–3600, default 900) */
895
+ /**
896
+ * @description Seconds until the link expires (60–3600, default 900)
897
+ * @default 900
898
+ */
861
899
  expires_in_seconds?: number;
862
900
  /** @description Optional browser return URL after the hosted flow. No credential material. */
863
901
  redirect_url?: string;
@@ -7622,6 +7660,7 @@ interface paths {
7622
7660
  };
7623
7661
  header?: never;
7624
7662
  path: {
7663
+ /** @description The target profile's public identifier (vanity slug), member ID, or URN. */
7625
7664
  identifier: string;
7626
7665
  };
7627
7666
  cookie?: never;
@@ -7782,15 +7821,6 @@ interface paths {
7782
7821
  "application/json": components["schemas"]["Error"];
7783
7822
  };
7784
7823
  };
7785
- /** @description Not implemented — the Recruiter profile endpoint is not available on this account configuration. */
7786
- 501: {
7787
- headers: {
7788
- [name: string]: unknown;
7789
- };
7790
- content: {
7791
- "application/json": components["schemas"]["Error"];
7792
- };
7793
- };
7794
7824
  /** @description PLATFORM_ERROR — A temporary error occurred. Please try again. */
7795
7825
  502: {
7796
7826
  headers: {
@@ -7872,12 +7902,12 @@ interface paths {
7872
7902
  saved_search?: {
7873
7903
  /** @description Saved search ID. Resolve via search/parameters?type=SAVED_SEARCHES. */
7874
7904
  id: string;
7875
- /** @description Project ID the saved search belongs to. Resolve via search/parameters?type=HIRING_PROJECTS. */
7905
+ /** @description Project ID the saved search belongs to. Resolve via search/parameters?type=SAVED_SEARCHES. */
7876
7906
  project_id: string;
7877
7907
  /** @description When true, returns only results new since the search was last run. */
7878
7908
  newest_results_only?: boolean;
7879
7909
  };
7880
- /** @description INDUSTRY IDs to include or exclude. Resolve via search/parameters?type=DEPARTMENT. */
7910
+ /** @description INDUSTRY IDs to include or exclude. Resolve via search/parameters?type=INDUSTRY. */
7881
7911
  industry?: {
7882
7912
  /** @description Filter IDs to include. */
7883
7913
  include?: string[];
@@ -8516,10 +8546,15 @@ interface paths {
8516
8546
  get: {
8517
8547
  parameters: {
8518
8548
  query: {
8549
+ /** @description The Curviate account ID whose Recruiter session lists hiring projects. */
8519
8550
  account_id: string;
8551
+ /** @description Maximum number of hiring projects to return (1–100). Defaults to 10. */
8520
8552
  limit?: number;
8553
+ /** @description Opaque pagination cursor from a previous response. Omit for the first page. */
8521
8554
  cursor?: string;
8555
+ /** @description Field to sort hiring projects by. Defaults to ACCESSED_TIME. */
8522
8556
  sort_by?: "NAME" | "FAVORITE" | "CREATED_TIME" | "ACCESSED_TIME" | "ENGAGED_TIME" | "ENGAGEMENT_COUNT";
8557
+ /** @description Sort direction. Defaults to DESCENDING. */
8523
8558
  sort_order?: "ASCENDING" | "DESCENDING";
8524
8559
  };
8525
8560
  header?: never;
@@ -8750,10 +8785,12 @@ interface paths {
8750
8785
  get: {
8751
8786
  parameters: {
8752
8787
  query: {
8788
+ /** @description The Curviate account ID whose Recruiter session performs this call. */
8753
8789
  account_id: string;
8754
8790
  };
8755
8791
  header?: never;
8756
8792
  path: {
8793
+ /** @description The hiring project ID. Obtain it from the items[].id of GET /v1/recruiter/projects. */
8757
8794
  project_id: string;
8758
8795
  };
8759
8796
  cookie?: never;
@@ -8970,6 +9007,7 @@ interface paths {
8970
9007
  get: {
8971
9008
  parameters: {
8972
9009
  query: {
9010
+ /** @description The Curviate account ID whose Recruiter session performs this call. */
8973
9011
  account_id: string;
8974
9012
  /** @description Filter by job posting status. One of: active, draft, closed. Defaults to active. */
8975
9013
  category?: "active" | "draft" | "closed";
@@ -9693,6 +9731,7 @@ interface paths {
9693
9731
  email_address?: string;
9694
9732
  /**
9695
9733
  * @description Visibility of the recruiter chat. Defaults to PRIVATE.
9734
+ * @default PRIVATE
9696
9735
  * @enum {string}
9697
9736
  */
9698
9737
  visibility?: "PUBLIC" | "PRIVATE" | "PROJECT";
@@ -10230,6 +10269,7 @@ interface paths {
10230
10269
  query?: never;
10231
10270
  header?: never;
10232
10271
  path: {
10272
+ /** @description The member id in AEM… format. Obtain it from the `id` field of a POST /v1/recruiter/search/people result item. */
10233
10273
  user_id: string;
10234
10274
  };
10235
10275
  cookie?: never;
@@ -10404,6 +10444,7 @@ interface paths {
10404
10444
  query?: never;
10405
10445
  header?: never;
10406
10446
  path: {
10447
+ /** @description The job posting draft ID, returned as job_id in the POST /v1/recruiter/jobs response. */
10407
10448
  job_id: string;
10408
10449
  };
10409
10450
  cookie?: never;
@@ -10589,15 +10630,6 @@ interface paths {
10589
10630
  "application/json": components["schemas"]["Error"];
10590
10631
  };
10591
10632
  };
10592
- /** @description PLATFORM_NOT_IMPLEMENTED — this operation is not available on the current platform tier. */
10593
- 501: {
10594
- headers: {
10595
- [name: string]: unknown;
10596
- };
10597
- content: {
10598
- "application/json": components["schemas"]["Error"];
10599
- };
10600
- };
10601
10633
  /** @description PLATFORM_ERROR — A temporary error occurred. Please try again. */
10602
10634
  502: {
10603
10635
  headers: {
@@ -10651,6 +10683,7 @@ interface paths {
10651
10683
  query?: never;
10652
10684
  header?: never;
10653
10685
  path: {
10686
+ /** @description The job posting ID whose pending publish checkpoint is being solved. */
10654
10687
  job_id: string;
10655
10688
  };
10656
10689
  cookie?: never;
@@ -10769,15 +10802,6 @@ interface paths {
10769
10802
  "application/json": components["schemas"]["Error"];
10770
10803
  };
10771
10804
  };
10772
- /** @description PLATFORM_NOT_IMPLEMENTED — this operation is not available on the current platform tier. */
10773
- 501: {
10774
- headers: {
10775
- [name: string]: unknown;
10776
- };
10777
- content: {
10778
- "application/json": components["schemas"]["Error"];
10779
- };
10780
- };
10781
10805
  /** @description PLATFORM_ERROR — A temporary error occurred. Please try again. */
10782
10806
  502: {
10783
10807
  headers: {
@@ -10916,15 +10940,6 @@ interface paths {
10916
10940
  "application/json": components["schemas"]["Error"];
10917
10941
  };
10918
10942
  };
10919
- /** @description The real adapter for this endpoint is not yet wired. */
10920
- 501: {
10921
- headers: {
10922
- [name: string]: unknown;
10923
- };
10924
- content: {
10925
- "application/json": components["schemas"]["Error"];
10926
- };
10927
- };
10928
10943
  /** @description The platform returned an error. */
10929
10944
  502: {
10930
10945
  headers: {
@@ -11160,15 +11175,6 @@ interface paths {
11160
11175
  "application/json": components["schemas"]["Error"];
11161
11176
  };
11162
11177
  };
11163
- /** @description The real adapter for this endpoint is not yet wired. */
11164
- 501: {
11165
- headers: {
11166
- [name: string]: unknown;
11167
- };
11168
- content: {
11169
- "application/json": components["schemas"]["Error"];
11170
- };
11171
- };
11172
11178
  /** @description The platform returned an error. */
11173
11179
  502: {
11174
11180
  headers: {
@@ -11251,6 +11257,7 @@ interface paths {
11251
11257
  };
11252
11258
  header?: never;
11253
11259
  path: {
11260
+ /** @description The job posting ID whose applicants to list. Obtain it from GET /v1/recruiter/jobs. */
11254
11261
  job_id: string;
11255
11262
  };
11256
11263
  cookie?: never;
@@ -11421,15 +11428,6 @@ interface paths {
11421
11428
  "application/json": components["schemas"]["Error"];
11422
11429
  };
11423
11430
  };
11424
- /** @description The real adapter for this endpoint is not yet wired. */
11425
- 501: {
11426
- headers: {
11427
- [name: string]: unknown;
11428
- };
11429
- content: {
11430
- "application/json": components["schemas"]["Error"];
11431
- };
11432
- };
11433
11431
  /** @description The platform returned an error. */
11434
11432
  502: {
11435
11433
  headers: {
@@ -12121,10 +12119,16 @@ interface paths {
12121
12119
  annual_revenue?: {
12122
12120
  /** @description ISO 4217 three-character currency code (e.g. 'USD'). */
12123
12121
  currency: string;
12124
- /** @description Minimum revenue in the given currency. */
12125
- min: number;
12126
- /** @description Maximum revenue. Use 1001 for '1000+' (open-ended upper bound). */
12127
- max: number;
12122
+ /**
12123
+ * @description Minimum revenue bucket. One of the enumerated values; 1001 means '1000+'.
12124
+ * @enum {number}
12125
+ */
12126
+ min: 0 | 0.2 | 1 | 2.5 | 5 | 10 | 20 | 50 | 100 | 500 | 1000 | 1001;
12127
+ /**
12128
+ * @description Maximum revenue bucket. Use 1001 for '1000+' (open-ended upper bound).
12129
+ * @enum {number}
12130
+ */
12131
+ max: 0 | 0.2 | 1 | 2.5 | 5 | 10 | 20 | 50 | 100 | 500 | 1000 | 1001;
12128
12132
  };
12129
12133
  /** @description Connection distance: 1 (1st), 2 (2nd), 3 (3rd+). No GROUP value for companies. */
12130
12134
  network_distance?: (1 | 2 | 3)[];
@@ -13244,7 +13248,7 @@ interface paths {
13244
13248
  network_distance?: (1 | 2 | 3)[];
13245
13249
  /** @description Filter by profile language codes. */
13246
13250
  profile_language?: string[];
13247
- /** @description Filter by open-to opportunity types. */
13251
+ /** @description Filter by open-to opportunity types. Valid values: proBono, boardMember. */
13248
13252
  open_to?: string[];
13249
13253
  };
13250
13254
  };
@@ -13473,7 +13477,7 @@ interface paths {
13473
13477
  query: {
13474
13478
  /** @description The linked LinkedIn account to search on behalf of. */
13475
13479
  account_id: string;
13476
- /** @description Maximum results per page (1–50, default 10). */
13480
+ /** @description Maximum results per page (2–50, default 10). Company search requires a minimum of 2. */
13477
13481
  limit?: number;
13478
13482
  /** @description Opaque pagination cursor returned from a previous response. */
13479
13483
  cursor?: string;
@@ -14030,9 +14034,9 @@ interface paths {
14030
14034
  */
14031
14035
  value: 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100;
14032
14036
  };
14033
- /** @description Filter by offered benefits. */
14037
+ /** @description Filter by offered benefits. Valid values: medical_insurance, vision_insurance, dental_insurance, 401(k), pension_plan, commuter_benefits. */
14034
14038
  benefits?: string[];
14035
- /** @description Filter by company commitments. */
14039
+ /** @description Filter by company commitments. Valid values: career_growth_and_learning, diversity_equity_and_inclusion, environmental_sustainability, social_impact, work_life_balance. */
14036
14040
  commitments?: string[];
14037
14041
  /** @description Filter to jobs with LinkedIn verification badges. */
14038
14042
  has_verifications?: boolean;
@@ -14334,21 +14338,31 @@ interface paths {
14334
14338
  name?: string;
14335
14339
  /**
14336
14340
  * @description Delivery body encoding (default: json)
14341
+ * @default json
14337
14342
  * @enum {string}
14338
14343
  */
14339
14344
  format?: "json" | "form";
14340
14345
  /** @description Per-account targeting. Required and non-empty — each id must be an acc_-prefixed id owned by the tenant. */
14341
14346
  account_ids: string[];
14342
- /** @description A disabled webhook is created but delivers nothing */
14347
+ /**
14348
+ * @description A disabled webhook is created but delivers nothing
14349
+ * @default true
14350
+ */
14343
14351
  enabled?: boolean;
14344
- /** @description Custom headers added to each delivery POST */
14352
+ /**
14353
+ * @description Custom headers added to each delivery POST
14354
+ * @default []
14355
+ */
14345
14356
  headers?: {
14346
14357
  key: string;
14347
14358
  value: string;
14348
14359
  }[];
14349
14360
  /** @description Messaging events to subscribe to (default: [message.received]) */
14350
14361
  events?: ("message.received" | "message.delivered" | "message.read" | "message.reaction" | "message.edited" | "message.deleted")[];
14351
- /** @description Field-remapping keys for the messaging delivery payload */
14362
+ /**
14363
+ * @description Field-remapping keys for the messaging delivery payload
14364
+ * @default []
14365
+ */
14352
14366
  data?: string[];
14353
14367
  } | {
14354
14368
  /** @constant */
@@ -14359,21 +14373,31 @@ interface paths {
14359
14373
  name?: string;
14360
14374
  /**
14361
14375
  * @description Delivery body encoding (default: json)
14376
+ * @default json
14362
14377
  * @enum {string}
14363
14378
  */
14364
14379
  format?: "json" | "form";
14365
14380
  /** @description Per-account targeting. Required and non-empty — each id must be an acc_-prefixed id owned by the tenant. */
14366
14381
  account_ids: string[];
14367
- /** @description A disabled webhook is created but delivers nothing */
14382
+ /**
14383
+ * @description A disabled webhook is created but delivers nothing
14384
+ * @default true
14385
+ */
14368
14386
  enabled?: boolean;
14369
- /** @description Custom headers added to each delivery POST */
14387
+ /**
14388
+ * @description Custom headers added to each delivery POST
14389
+ * @default []
14390
+ */
14370
14391
  headers?: {
14371
14392
  key: string;
14372
14393
  value: string;
14373
14394
  }[];
14374
14395
  /** @description User/relation events to subscribe to (default: [connection.accepted]) */
14375
14396
  events?: "connection.accepted"[];
14376
- /** @description Field-remapping keys for the user/relation delivery payload */
14397
+ /**
14398
+ * @description Field-remapping keys for the user/relation delivery payload
14399
+ * @default []
14400
+ */
14377
14401
  data?: ("user_provider_id" | "user_full_name" | "user_public_identifier" | "user_profile_url" | "user_picture_url")[];
14378
14402
  } | {
14379
14403
  /** @constant */
@@ -14384,14 +14408,21 @@ interface paths {
14384
14408
  name?: string;
14385
14409
  /**
14386
14410
  * @description Delivery body encoding (default: json)
14411
+ * @default json
14387
14412
  * @enum {string}
14388
14413
  */
14389
14414
  format?: "json" | "form";
14390
14415
  /** @description Per-account targeting. Required and non-empty — each id must be an acc_-prefixed id owned by the tenant. */
14391
14416
  account_ids: string[];
14392
- /** @description A disabled webhook is created but delivers nothing */
14417
+ /**
14418
+ * @description A disabled webhook is created but delivers nothing
14419
+ * @default true
14420
+ */
14393
14421
  enabled?: boolean;
14394
- /** @description Custom headers added to each delivery POST */
14422
+ /**
14423
+ * @description Custom headers added to each delivery POST
14424
+ * @default []
14425
+ */
14395
14426
  headers?: {
14396
14427
  key: string;
14397
14428
  value: string;
@@ -15050,6 +15081,11 @@ declare class AccountsResource {
15050
15081
  /**
15051
15082
  * List the tenant's connected LinkedIn accounts, cursor-paginated.
15052
15083
  *
15084
+ * Each item also carries a small set of cached account-detail fields
15085
+ * (`username`, `premium_id`, `public_identifier`, `substrate_created_at`,
15086
+ * `signatures`, `groups`) populated by an async background enrichment —
15087
+ * `null`/`[]` until the account's first enrichment pass completes.
15088
+ *
15053
15089
  * @param params - optional `limit` (1–250) and `cursor` (from a prior page).
15054
15090
  * @returns a page of accounts and the next-page `cursor` (null when exhausted).
15055
15091
  *
@@ -15080,7 +15116,14 @@ declare class AccountsResource {
15080
15116
  createConnectLink(body: AccountConnectLinkBody): Promise<AccountConnectLinkResult>;
15081
15117
  /**
15082
15118
  * Return metadata and current state for one connected account, including the
15083
- * central `quotas[]` view for all tracked quota families.
15119
+ * central `quotas[]` view for all tracked quota families and `seat_id` (the
15120
+ * seat this account occupies, `null` for an admin seatless account).
15121
+ *
15122
+ * This is a stale-while-revalidate read — it always returns immediately
15123
+ * from the cached row (never blocks on a live substrate call), and the
15124
+ * six cached enrichment fields (`username`, `premium_id`,
15125
+ * `public_identifier`, `substrate_created_at`, `signatures`, `groups`) are
15126
+ * `null`/`[]` until the account's first enrichment pass completes.
15084
15127
  */
15085
15128
  get(accountId: string): Promise<AccountDetail>;
15086
15129
  /**
package/dist/index.js CHANGED
@@ -308,6 +308,11 @@ var AccountsResource = class {
308
308
  /**
309
309
  * List the tenant's connected LinkedIn accounts, cursor-paginated.
310
310
  *
311
+ * Each item also carries a small set of cached account-detail fields
312
+ * (`username`, `premium_id`, `public_identifier`, `substrate_created_at`,
313
+ * `signatures`, `groups`) populated by an async background enrichment —
314
+ * `null`/`[]` until the account's first enrichment pass completes.
315
+ *
311
316
  * @param params - optional `limit` (1–250) and `cursor` (from a prior page).
312
317
  * @returns a page of accounts and the next-page `cursor` (null when exhausted).
313
318
  *
@@ -368,7 +373,14 @@ var AccountsResource = class {
368
373
  }
369
374
  /**
370
375
  * Return metadata and current state for one connected account, including the
371
- * central `quotas[]` view for all tracked quota families.
376
+ * central `quotas[]` view for all tracked quota families and `seat_id` (the
377
+ * seat this account occupies, `null` for an admin seatless account).
378
+ *
379
+ * This is a stale-while-revalidate read — it always returns immediately
380
+ * from the cached row (never blocks on a live substrate call), and the
381
+ * six cached enrichment fields (`username`, `premium_id`,
382
+ * `public_identifier`, `substrate_created_at`, `signatures`, `groups`) are
383
+ * `null`/`[]` until the account's first enrichment pass completes.
372
384
  */
373
385
  get(accountId) {
374
386
  return this.ctx.request({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@curviate/sdk",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "private": false,
5
5
  "description": "TypeScript SDK for the Curviate API.",
6
6
  "license": "MIT",
@@ -55,8 +55,23 @@ export interface paths {
55
55
  headline?: string | null;
56
56
  /** @description The seat this account occupies. */
57
57
  seat_id?: string | null;
58
- /** @description ISO-8601 connection timestamp. */
59
- connected_at?: string;
58
+ /** @description ISO-8601 UTC connection timestamp. */
59
+ connected_at?: string | null;
60
+ /** @description Cached account username. Null until enriched. */
61
+ username?: string | null;
62
+ /** @description Cached premium-membership id. Null until enriched, or for non-premium accounts. */
63
+ premium_id?: string | null;
64
+ /** @description Cached public profile identifier. Null until enriched. */
65
+ public_identifier?: string | null;
66
+ /** @description ISO-8601 UTC creation timestamp of the underlying LinkedIn account — distinct from connected_at. Null until enriched. */
67
+ substrate_created_at?: string | null;
68
+ /** @description Cached signature blocks (title + content) for the account. Empty until enriched. */
69
+ signatures?: {
70
+ title?: string;
71
+ content?: string;
72
+ }[];
73
+ /** @description Cached group names the account belongs to. Empty until enriched. */
74
+ groups?: string[];
60
75
  }[];
61
76
  /** @description Next-page cursor; null on the last page. */
62
77
  cursor?: string | null;
@@ -399,9 +414,28 @@ export interface paths {
399
414
  auth_method?: string;
400
415
  full_name?: string | null;
401
416
  headline?: string | null;
417
+ /** @description ISO-8601 UTC connection timestamp. */
402
418
  connected_at?: string | null;
419
+ /** @description ISO-8601 UTC time the account state was last checked. */
403
420
  last_checked_at?: string;
404
- /** @description Per-account quota view one entry per tracked family (messages.daily, connection_requests.daily, profile_views.daily, inmail.daily, account.per_minute). */
421
+ /** @description The seat this account occupies (null for an admin seatless account). */
422
+ seat_id?: string | null;
423
+ /** @description Cached account username. Null until enriched. */
424
+ username?: string | null;
425
+ /** @description Cached premium-membership id. Null until enriched, or for non-premium accounts. */
426
+ premium_id?: string | null;
427
+ /** @description Cached public profile identifier. Null until enriched. */
428
+ public_identifier?: string | null;
429
+ /** @description ISO-8601 UTC creation timestamp of the underlying LinkedIn account — distinct from connected_at. Null until enriched. */
430
+ substrate_created_at?: string | null;
431
+ /** @description Cached signature blocks (title + content) for the account. Empty until enriched. */
432
+ signatures?: {
433
+ title?: string;
434
+ content?: string;
435
+ }[];
436
+ /** @description Cached group names the account belongs to. Empty until enriched. */
437
+ groups?: string[];
438
+ /** @description Usage-safety recommendations for this account — one entry per tracked family (messages.daily, connection_requests.daily, profile_views.daily, inmail.daily, profile.endorse, account.per_minute). These are advisory only: Curviate never rejects a request because a daily recommendation is exceeded; only account.per_minute is a binding limit enforced with HTTP 429. */
405
439
  quotas?: {
406
440
  /** @description Quota family (e.g. messages.daily, account.per_minute). */
407
441
  quota_name?: string;
@@ -412,7 +446,7 @@ export interface paths {
412
446
  /** @description ISO-8601 UTC time the current window resets. */
413
447
  reset_time?: string;
414
448
  /**
415
- * @description Pacing hint.
449
+ * @description Pacing recommendation for this family, advisory only. `none` (under 80% consumed), `slow_down` (80-99% consumed), and `backoff` (100%+ consumed) never block a request. `stop` is reserved exclusively for `account.per_minute` — the sole binding limit, whose breach is enforced with HTTP 429.
416
450
  * @enum {string}
417
451
  */
418
452
  recommended_throttle_hint?: "none" | "slow_down" | "backoff" | "stop";
@@ -745,10 +779,14 @@ export interface paths {
745
779
  account_id?: string;
746
780
  /**
747
781
  * @description 'create' = new account onboarding; 'reconnect' = re-auth of existing account
782
+ * @default create
748
783
  * @enum {string}
749
784
  */
750
785
  purpose?: "create" | "reconnect";
751
- /** @description Seconds until the link expires (60–3600, default 900) */
786
+ /**
787
+ * @description Seconds until the link expires (60–3600, default 900)
788
+ * @default 900
789
+ */
752
790
  expires_in_seconds?: number;
753
791
  /** @description Optional browser return URL after the hosted flow. No credential material. */
754
792
  redirect_url?: string;
@@ -7513,6 +7551,7 @@ export interface paths {
7513
7551
  };
7514
7552
  header?: never;
7515
7553
  path: {
7554
+ /** @description The target profile's public identifier (vanity slug), member ID, or URN. */
7516
7555
  identifier: string;
7517
7556
  };
7518
7557
  cookie?: never;
@@ -7673,15 +7712,6 @@ export interface paths {
7673
7712
  "application/json": components["schemas"]["Error"];
7674
7713
  };
7675
7714
  };
7676
- /** @description Not implemented — the Recruiter profile endpoint is not available on this account configuration. */
7677
- 501: {
7678
- headers: {
7679
- [name: string]: unknown;
7680
- };
7681
- content: {
7682
- "application/json": components["schemas"]["Error"];
7683
- };
7684
- };
7685
7715
  /** @description PLATFORM_ERROR — A temporary error occurred. Please try again. */
7686
7716
  502: {
7687
7717
  headers: {
@@ -7763,12 +7793,12 @@ export interface paths {
7763
7793
  saved_search?: {
7764
7794
  /** @description Saved search ID. Resolve via search/parameters?type=SAVED_SEARCHES. */
7765
7795
  id: string;
7766
- /** @description Project ID the saved search belongs to. Resolve via search/parameters?type=HIRING_PROJECTS. */
7796
+ /** @description Project ID the saved search belongs to. Resolve via search/parameters?type=SAVED_SEARCHES. */
7767
7797
  project_id: string;
7768
7798
  /** @description When true, returns only results new since the search was last run. */
7769
7799
  newest_results_only?: boolean;
7770
7800
  };
7771
- /** @description INDUSTRY IDs to include or exclude. Resolve via search/parameters?type=DEPARTMENT. */
7801
+ /** @description INDUSTRY IDs to include or exclude. Resolve via search/parameters?type=INDUSTRY. */
7772
7802
  industry?: {
7773
7803
  /** @description Filter IDs to include. */
7774
7804
  include?: string[];
@@ -8407,10 +8437,15 @@ export interface paths {
8407
8437
  get: {
8408
8438
  parameters: {
8409
8439
  query: {
8440
+ /** @description The Curviate account ID whose Recruiter session lists hiring projects. */
8410
8441
  account_id: string;
8442
+ /** @description Maximum number of hiring projects to return (1–100). Defaults to 10. */
8411
8443
  limit?: number;
8444
+ /** @description Opaque pagination cursor from a previous response. Omit for the first page. */
8412
8445
  cursor?: string;
8446
+ /** @description Field to sort hiring projects by. Defaults to ACCESSED_TIME. */
8413
8447
  sort_by?: "NAME" | "FAVORITE" | "CREATED_TIME" | "ACCESSED_TIME" | "ENGAGED_TIME" | "ENGAGEMENT_COUNT";
8448
+ /** @description Sort direction. Defaults to DESCENDING. */
8414
8449
  sort_order?: "ASCENDING" | "DESCENDING";
8415
8450
  };
8416
8451
  header?: never;
@@ -8641,10 +8676,12 @@ export interface paths {
8641
8676
  get: {
8642
8677
  parameters: {
8643
8678
  query: {
8679
+ /** @description The Curviate account ID whose Recruiter session performs this call. */
8644
8680
  account_id: string;
8645
8681
  };
8646
8682
  header?: never;
8647
8683
  path: {
8684
+ /** @description The hiring project ID. Obtain it from the items[].id of GET /v1/recruiter/projects. */
8648
8685
  project_id: string;
8649
8686
  };
8650
8687
  cookie?: never;
@@ -8861,6 +8898,7 @@ export interface paths {
8861
8898
  get: {
8862
8899
  parameters: {
8863
8900
  query: {
8901
+ /** @description The Curviate account ID whose Recruiter session performs this call. */
8864
8902
  account_id: string;
8865
8903
  /** @description Filter by job posting status. One of: active, draft, closed. Defaults to active. */
8866
8904
  category?: "active" | "draft" | "closed";
@@ -9584,6 +9622,7 @@ export interface paths {
9584
9622
  email_address?: string;
9585
9623
  /**
9586
9624
  * @description Visibility of the recruiter chat. Defaults to PRIVATE.
9625
+ * @default PRIVATE
9587
9626
  * @enum {string}
9588
9627
  */
9589
9628
  visibility?: "PUBLIC" | "PRIVATE" | "PROJECT";
@@ -10121,6 +10160,7 @@ export interface paths {
10121
10160
  query?: never;
10122
10161
  header?: never;
10123
10162
  path: {
10163
+ /** @description The member id in AEM… format. Obtain it from the `id` field of a POST /v1/recruiter/search/people result item. */
10124
10164
  user_id: string;
10125
10165
  };
10126
10166
  cookie?: never;
@@ -10295,6 +10335,7 @@ export interface paths {
10295
10335
  query?: never;
10296
10336
  header?: never;
10297
10337
  path: {
10338
+ /** @description The job posting draft ID, returned as job_id in the POST /v1/recruiter/jobs response. */
10298
10339
  job_id: string;
10299
10340
  };
10300
10341
  cookie?: never;
@@ -10480,15 +10521,6 @@ export interface paths {
10480
10521
  "application/json": components["schemas"]["Error"];
10481
10522
  };
10482
10523
  };
10483
- /** @description PLATFORM_NOT_IMPLEMENTED — this operation is not available on the current platform tier. */
10484
- 501: {
10485
- headers: {
10486
- [name: string]: unknown;
10487
- };
10488
- content: {
10489
- "application/json": components["schemas"]["Error"];
10490
- };
10491
- };
10492
10524
  /** @description PLATFORM_ERROR — A temporary error occurred. Please try again. */
10493
10525
  502: {
10494
10526
  headers: {
@@ -10542,6 +10574,7 @@ export interface paths {
10542
10574
  query?: never;
10543
10575
  header?: never;
10544
10576
  path: {
10577
+ /** @description The job posting ID whose pending publish checkpoint is being solved. */
10545
10578
  job_id: string;
10546
10579
  };
10547
10580
  cookie?: never;
@@ -10660,15 +10693,6 @@ export interface paths {
10660
10693
  "application/json": components["schemas"]["Error"];
10661
10694
  };
10662
10695
  };
10663
- /** @description PLATFORM_NOT_IMPLEMENTED — this operation is not available on the current platform tier. */
10664
- 501: {
10665
- headers: {
10666
- [name: string]: unknown;
10667
- };
10668
- content: {
10669
- "application/json": components["schemas"]["Error"];
10670
- };
10671
- };
10672
10696
  /** @description PLATFORM_ERROR — A temporary error occurred. Please try again. */
10673
10697
  502: {
10674
10698
  headers: {
@@ -10807,15 +10831,6 @@ export interface paths {
10807
10831
  "application/json": components["schemas"]["Error"];
10808
10832
  };
10809
10833
  };
10810
- /** @description The real adapter for this endpoint is not yet wired. */
10811
- 501: {
10812
- headers: {
10813
- [name: string]: unknown;
10814
- };
10815
- content: {
10816
- "application/json": components["schemas"]["Error"];
10817
- };
10818
- };
10819
10834
  /** @description The platform returned an error. */
10820
10835
  502: {
10821
10836
  headers: {
@@ -11051,15 +11066,6 @@ export interface paths {
11051
11066
  "application/json": components["schemas"]["Error"];
11052
11067
  };
11053
11068
  };
11054
- /** @description The real adapter for this endpoint is not yet wired. */
11055
- 501: {
11056
- headers: {
11057
- [name: string]: unknown;
11058
- };
11059
- content: {
11060
- "application/json": components["schemas"]["Error"];
11061
- };
11062
- };
11063
11069
  /** @description The platform returned an error. */
11064
11070
  502: {
11065
11071
  headers: {
@@ -11142,6 +11148,7 @@ export interface paths {
11142
11148
  };
11143
11149
  header?: never;
11144
11150
  path: {
11151
+ /** @description The job posting ID whose applicants to list. Obtain it from GET /v1/recruiter/jobs. */
11145
11152
  job_id: string;
11146
11153
  };
11147
11154
  cookie?: never;
@@ -11312,15 +11319,6 @@ export interface paths {
11312
11319
  "application/json": components["schemas"]["Error"];
11313
11320
  };
11314
11321
  };
11315
- /** @description The real adapter for this endpoint is not yet wired. */
11316
- 501: {
11317
- headers: {
11318
- [name: string]: unknown;
11319
- };
11320
- content: {
11321
- "application/json": components["schemas"]["Error"];
11322
- };
11323
- };
11324
11322
  /** @description The platform returned an error. */
11325
11323
  502: {
11326
11324
  headers: {
@@ -12012,10 +12010,16 @@ export interface paths {
12012
12010
  annual_revenue?: {
12013
12011
  /** @description ISO 4217 three-character currency code (e.g. 'USD'). */
12014
12012
  currency: string;
12015
- /** @description Minimum revenue in the given currency. */
12016
- min: number;
12017
- /** @description Maximum revenue. Use 1001 for '1000+' (open-ended upper bound). */
12018
- max: number;
12013
+ /**
12014
+ * @description Minimum revenue bucket. One of the enumerated values; 1001 means '1000+'.
12015
+ * @enum {number}
12016
+ */
12017
+ min: 0 | 0.2 | 1 | 2.5 | 5 | 10 | 20 | 50 | 100 | 500 | 1000 | 1001;
12018
+ /**
12019
+ * @description Maximum revenue bucket. Use 1001 for '1000+' (open-ended upper bound).
12020
+ * @enum {number}
12021
+ */
12022
+ max: 0 | 0.2 | 1 | 2.5 | 5 | 10 | 20 | 50 | 100 | 500 | 1000 | 1001;
12019
12023
  };
12020
12024
  /** @description Connection distance: 1 (1st), 2 (2nd), 3 (3rd+). No GROUP value for companies. */
12021
12025
  network_distance?: (1 | 2 | 3)[];
@@ -13135,7 +13139,7 @@ export interface paths {
13135
13139
  network_distance?: (1 | 2 | 3)[];
13136
13140
  /** @description Filter by profile language codes. */
13137
13141
  profile_language?: string[];
13138
- /** @description Filter by open-to opportunity types. */
13142
+ /** @description Filter by open-to opportunity types. Valid values: proBono, boardMember. */
13139
13143
  open_to?: string[];
13140
13144
  };
13141
13145
  };
@@ -13364,7 +13368,7 @@ export interface paths {
13364
13368
  query: {
13365
13369
  /** @description The linked LinkedIn account to search on behalf of. */
13366
13370
  account_id: string;
13367
- /** @description Maximum results per page (1–50, default 10). */
13371
+ /** @description Maximum results per page (2–50, default 10). Company search requires a minimum of 2. */
13368
13372
  limit?: number;
13369
13373
  /** @description Opaque pagination cursor returned from a previous response. */
13370
13374
  cursor?: string;
@@ -13921,9 +13925,9 @@ export interface paths {
13921
13925
  */
13922
13926
  value: 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100;
13923
13927
  };
13924
- /** @description Filter by offered benefits. */
13928
+ /** @description Filter by offered benefits. Valid values: medical_insurance, vision_insurance, dental_insurance, 401(k), pension_plan, commuter_benefits. */
13925
13929
  benefits?: string[];
13926
- /** @description Filter by company commitments. */
13930
+ /** @description Filter by company commitments. Valid values: career_growth_and_learning, diversity_equity_and_inclusion, environmental_sustainability, social_impact, work_life_balance. */
13927
13931
  commitments?: string[];
13928
13932
  /** @description Filter to jobs with LinkedIn verification badges. */
13929
13933
  has_verifications?: boolean;
@@ -14225,21 +14229,31 @@ export interface paths {
14225
14229
  name?: string;
14226
14230
  /**
14227
14231
  * @description Delivery body encoding (default: json)
14232
+ * @default json
14228
14233
  * @enum {string}
14229
14234
  */
14230
14235
  format?: "json" | "form";
14231
14236
  /** @description Per-account targeting. Required and non-empty — each id must be an acc_-prefixed id owned by the tenant. */
14232
14237
  account_ids: string[];
14233
- /** @description A disabled webhook is created but delivers nothing */
14238
+ /**
14239
+ * @description A disabled webhook is created but delivers nothing
14240
+ * @default true
14241
+ */
14234
14242
  enabled?: boolean;
14235
- /** @description Custom headers added to each delivery POST */
14243
+ /**
14244
+ * @description Custom headers added to each delivery POST
14245
+ * @default []
14246
+ */
14236
14247
  headers?: {
14237
14248
  key: string;
14238
14249
  value: string;
14239
14250
  }[];
14240
14251
  /** @description Messaging events to subscribe to (default: [message.received]) */
14241
14252
  events?: ("message.received" | "message.delivered" | "message.read" | "message.reaction" | "message.edited" | "message.deleted")[];
14242
- /** @description Field-remapping keys for the messaging delivery payload */
14253
+ /**
14254
+ * @description Field-remapping keys for the messaging delivery payload
14255
+ * @default []
14256
+ */
14243
14257
  data?: string[];
14244
14258
  } | {
14245
14259
  /** @constant */
@@ -14250,21 +14264,31 @@ export interface paths {
14250
14264
  name?: string;
14251
14265
  /**
14252
14266
  * @description Delivery body encoding (default: json)
14267
+ * @default json
14253
14268
  * @enum {string}
14254
14269
  */
14255
14270
  format?: "json" | "form";
14256
14271
  /** @description Per-account targeting. Required and non-empty — each id must be an acc_-prefixed id owned by the tenant. */
14257
14272
  account_ids: string[];
14258
- /** @description A disabled webhook is created but delivers nothing */
14273
+ /**
14274
+ * @description A disabled webhook is created but delivers nothing
14275
+ * @default true
14276
+ */
14259
14277
  enabled?: boolean;
14260
- /** @description Custom headers added to each delivery POST */
14278
+ /**
14279
+ * @description Custom headers added to each delivery POST
14280
+ * @default []
14281
+ */
14261
14282
  headers?: {
14262
14283
  key: string;
14263
14284
  value: string;
14264
14285
  }[];
14265
14286
  /** @description User/relation events to subscribe to (default: [connection.accepted]) */
14266
14287
  events?: "connection.accepted"[];
14267
- /** @description Field-remapping keys for the user/relation delivery payload */
14288
+ /**
14289
+ * @description Field-remapping keys for the user/relation delivery payload
14290
+ * @default []
14291
+ */
14268
14292
  data?: ("user_provider_id" | "user_full_name" | "user_public_identifier" | "user_profile_url" | "user_picture_url")[];
14269
14293
  } | {
14270
14294
  /** @constant */
@@ -14275,14 +14299,21 @@ export interface paths {
14275
14299
  name?: string;
14276
14300
  /**
14277
14301
  * @description Delivery body encoding (default: json)
14302
+ * @default json
14278
14303
  * @enum {string}
14279
14304
  */
14280
14305
  format?: "json" | "form";
14281
14306
  /** @description Per-account targeting. Required and non-empty — each id must be an acc_-prefixed id owned by the tenant. */
14282
14307
  account_ids: string[];
14283
- /** @description A disabled webhook is created but delivers nothing */
14308
+ /**
14309
+ * @description A disabled webhook is created but delivers nothing
14310
+ * @default true
14311
+ */
14284
14312
  enabled?: boolean;
14285
- /** @description Custom headers added to each delivery POST */
14313
+ /**
14314
+ * @description Custom headers added to each delivery POST
14315
+ * @default []
14316
+ */
14286
14317
  headers?: {
14287
14318
  key: string;
14288
14319
  value: string;