@cavuno/board 1.44.0 → 2.0.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.
@@ -63,15 +63,6 @@ interface components {
63
63
  AddCategoryAliasesBody: {
64
64
  aliases: string[];
65
65
  };
66
- AddForagerCompanyBody: {
67
- companyUrl: string;
68
- companyName: string;
69
- description?: string | null;
70
- };
71
- AddForagerExclusionBody: {
72
- pattern: string;
73
- type: string;
74
- };
75
66
  AddMarketAliasesBody: {
76
67
  aliases: string[];
77
68
  };
@@ -111,21 +102,21 @@ interface components {
111
102
  price: components["schemas"]["PlanPrice"];
112
103
  features: components["schemas"]["PlanFeature"][];
113
104
  };
114
- AiUsage: {
105
+ AdminSalesLedPlan: {
106
+ /** @description Cavuno salesLedEmployerPlans ID. */
115
107
  id: string;
116
108
  /** @enum {string} */
117
- object: "ai_usage";
118
- /** @description The UTC day these counts are for (YYYY-MM-DD). */
119
- date: string;
120
- /** @description ISO timestamp of the next UTC-midnight counter reset. */
121
- resetAt: string;
122
- features: components["schemas"]["AiUsageFeature"][];
123
- };
124
- AiUsageFeature: {
125
- feature: string;
126
- used: number;
127
- limit: number;
128
- remaining: number;
109
+ object: "sales_led_plan";
110
+ name: string;
111
+ description: string;
112
+ priceText: string;
113
+ ctaText: string;
114
+ ctaDestination: string;
115
+ featuredBullets: string[];
116
+ isPublic: boolean;
117
+ displayOrder: number;
118
+ /** @description ISO-8601 creation timestamp. */
119
+ createdAt: string;
129
120
  };
130
121
  Alert: {
131
122
  /** @description Job-alert preference ID. Also the path key. */
@@ -163,30 +154,89 @@ interface components {
163
154
  salaryMax?: number | null;
164
155
  salaryCurrency?: string | null;
165
156
  };
166
- ApiKey: {
167
- /** @description Unique identifier for the object. */
168
- id: string;
169
- /**
170
- * @description String representing the object's type. Objects of the same type share the same value.
171
- * @enum {string}
172
- */
173
- object: "api_key";
174
- /** @description Public key ID component, embedded in the key prefix as `cavuno_live_<keyId>_`. */
175
- keyId: string;
176
- /** @description Human-readable name for the key, shown in the dashboard. */
177
- name: string;
178
- /** @description Public prefix in the form `cavuno_live_<keyId>_`. Safe to log; the full plaintext secret is never returned by the API. */
179
- prefix: string;
180
- /** @description Time at which the key was created. Unix epoch in milliseconds. */
181
- createdAt: number;
182
- /** @description Identifier of the user who minted the key. */
183
- createdBy: string;
184
- /** @description Time at which the key was last used to authenticate a request, or `null` if it has never been used. Unix epoch in milliseconds. */
185
- lastUsedAt: number | null;
186
- /** @description Time at which the key was revoked, or `null` if the key is still active. Unix epoch in milliseconds. */
187
- revokedAt: number | null;
188
- /** @description Time at which the key expires, or `null` if the key has no expiry. Unix epoch in milliseconds. */
189
- expiresAt: number | null;
157
+ AnalyticsChange: {
158
+ absolute: number;
159
+ /** @description Null when both periods are zero (undefined percent change). */
160
+ percentage: number | null;
161
+ };
162
+ AnalyticsDateRange: {
163
+ /** @description UTC date-only YYYY-MM-DD. */
164
+ start: string;
165
+ /** @description UTC date-only YYYY-MM-DD. */
166
+ end: string;
167
+ };
168
+ AnalyticsMetric: {
169
+ /** @enum {string} */
170
+ key: "sessions" | "page_views" | "average_session_duration" | "job_apply_clicks" | "impressions" | "stripe_revenue" | "adsense_revenue";
171
+ /** @enum {string} */
172
+ unit: "count" | "seconds" | "currency";
173
+ /** @description ISO currency code in lowercase when unit is currency. */
174
+ currency?: string;
175
+ current: {
176
+ total: number;
177
+ change: components["schemas"]["AnalyticsChange"];
178
+ points: components["schemas"]["AnalyticsTrendPoint"][];
179
+ };
180
+ previous: {
181
+ total: number;
182
+ points: components["schemas"]["AnalyticsTrendPoint"][];
183
+ };
184
+ /** @description Latest available day for lagging providers (GSC/AdSense) when the window tail is incomplete. */
185
+ dataAvailableThrough?: string;
186
+ };
187
+ AnalyticsOverview: {
188
+ /** @enum {string} */
189
+ object: "analytics_overview";
190
+ range: components["schemas"]["AnalyticsDateRange"];
191
+ comparisonRange: components["schemas"]["AnalyticsDateRange"];
192
+ /** @description Realtime visitors on the board right now. */
193
+ currentVisitors: number;
194
+ metrics: components["schemas"]["AnalyticsMetric"][];
195
+ };
196
+ AnalyticsTraffic: {
197
+ /** @enum {string} */
198
+ object: "analytics_traffic";
199
+ range: components["schemas"]["AnalyticsTrafficDateRange"];
200
+ pages: components["schemas"]["AnalyticsTrafficPage"][];
201
+ sources: components["schemas"]["AnalyticsTrafficSource"][];
202
+ locations: components["schemas"]["AnalyticsTrafficLocation"][];
203
+ devices: components["schemas"]["AnalyticsTrafficDevice"][];
204
+ };
205
+ AnalyticsTrafficDateRange: {
206
+ /** @description UTC date-only YYYY-MM-DD. */
207
+ start: string;
208
+ /** @description UTC date-only YYYY-MM-DD. */
209
+ end: string;
210
+ };
211
+ AnalyticsTrafficDevice: {
212
+ device: string;
213
+ visits: number;
214
+ visitsChangePercentage: number | null;
215
+ applyClicks: number;
216
+ };
217
+ AnalyticsTrafficLocation: {
218
+ countryCode: string;
219
+ visits: number;
220
+ visitsChangePercentage: number | null;
221
+ applyClicks: number;
222
+ };
223
+ AnalyticsTrafficPage: {
224
+ pathname: string;
225
+ visits: number;
226
+ visitsChangePercentage: number | null;
227
+ };
228
+ AnalyticsTrafficSource: {
229
+ /** @description Normalized referrer source (never a full URL). */
230
+ source: string;
231
+ visits: number;
232
+ visitsChangePercentage: number | null;
233
+ applyClicks: number;
234
+ };
235
+ AnalyticsTrendPoint: {
236
+ /** @description UTC date-only YYYY-MM-DD. */
237
+ date: string;
238
+ /** @description Metric value for the day, or null when a lagging provider has not reported yet. */
239
+ value: number | null;
190
240
  };
191
241
  Application: {
192
242
  /** @description Application ID. Also the `:applicationId` path key. */
@@ -226,58 +276,71 @@ interface components {
226
276
  /** @description Optional intended role for the approved employer, recorded in the audit log. Not yet persisted (companyMembers has no role field). */
227
277
  role?: string;
228
278
  };
229
- AuditLogEntry: {
230
- /** @description Unique identifier for the object. */
279
+ BackfillBulkItemResult: {
280
+ companyId: string;
281
+ /** @enum {string} */
282
+ status: "ok" | "error";
283
+ error?: {
284
+ code: string;
285
+ message: string;
286
+ };
287
+ };
288
+ BackfillBulkResult: {
289
+ /** @enum {string} */
290
+ object: "backfill_bulk_result";
291
+ data: components["schemas"]["BackfillBulkItemResult"][];
292
+ };
293
+ BackfillCompany: {
294
+ /** @enum {string} */
295
+ object: "backfill_company";
296
+ companyId: string;
297
+ name: string;
298
+ website: string | null;
299
+ /** @enum {string} */
300
+ state: "backfilling" | "available" | "needs_match" | "not_backfilling";
301
+ candidates?: components["schemas"]["BackfillMatchCandidate"][];
302
+ };
303
+ BackfillMatchCandidate: {
304
+ index: number;
305
+ name: string;
306
+ website: string | null;
307
+ };
308
+ BackfillProgress: {
309
+ /** @enum {string} */
310
+ object: "backfill_progress";
311
+ /** @enum {string} */
312
+ status: "pending" | "syncing" | "enqueuing" | "enhancing" | "succeeded" | "failed";
313
+ jobsMatched: number;
314
+ jobsToEnhance: number;
315
+ jobsEnhanced: number;
316
+ jobsFailed: number;
317
+ } | null;
318
+ BackfillRule: {
319
+ /** @description Stable Cavuno-owned resource ID. */
231
320
  id: string;
232
- /**
233
- * @description String representing the object's type. Objects of the same type share the same value.
234
- * @enum {string}
235
- */
236
- object: "audit_log";
237
- /** @description Identifier of the account the entry belongs to. */
238
- accountId: string;
239
- /**
240
- * @description Type of actor that performed the action.
241
- * @enum {string}
242
- */
243
- actorType: "api_key" | "oauth_token" | "user_session" | "system";
244
- /** @description Identifier of the actor that performed the action. */
245
- actorId: string;
246
- /** @description Human-readable label for the actor, suitable for display. */
247
- actorLabel: string;
248
- /** @description Action that was performed (e.g. `jobs.create`, `companies.update`). */
249
- action: string;
250
- /** @description Type of resource the action was performed on. */
251
- resourceType: string;
252
- /** @description Identifier of the resource the action was performed on, or `null` for resource-less actions. */
253
- resourceId: string | null;
254
- /** @description Serialized JSON snapshot of the resource before the action, or `null` for create actions. */
255
- before: string | null;
256
- /** @description Serialized JSON snapshot of the resource after the action, or `null` for delete actions. */
257
- after: string | null;
258
- /** @description Serialized JSON of free-form metadata about the action (e.g. truncation byte sizes), or `null` if none was attached. */
259
- metadata: string | null;
260
- /** @description IP address the request originated from, or `null` if unavailable. */
261
- ipAddress: string | null;
262
- /** @description User-agent string from the request, or `null` if unavailable. */
263
- userAgent: string | null;
264
- /** @description Identifier of the request that produced the entry. Use this to correlate with platform logs. */
265
- requestId: string;
266
- /** @description Time at which the audit entry was written. Unix epoch in milliseconds. */
267
- timestamp: number;
268
- };
269
- BatchForagerCompaniesBody: {
270
- /** @enum {string} */
271
- mode: "add";
272
- companies: {
273
- url: string;
274
- name: string;
275
- }[];
276
- description?: string | null;
277
- } | {
278
321
  /** @enum {string} */
279
- mode: "remove";
280
- companyUrls: string[];
322
+ object: "backfill_rule";
323
+ name: string;
324
+ rules: {
325
+ /** @enum {string} */
326
+ match: "any" | "all";
327
+ conditions: {
328
+ /** @enum {string} */
329
+ field: "title" | "description";
330
+ /** @enum {string} */
331
+ operator: "contains_any" | "contains_all" | "is_not";
332
+ terms: string[];
333
+ }[];
334
+ }[];
335
+ filters: {
336
+ countries?: string[];
337
+ subdivisions?: string[];
338
+ seniorities?: string[];
339
+ employmentTypes?: string[];
340
+ workplaceTypes?: string[];
341
+ };
342
+ createdAt: string | null;
343
+ updatedAt: string | null;
281
344
  };
282
345
  BatchRequestBody: {
283
346
  /** @description Array of sub-operations to execute. Each entry runs independently and reports its result on the corresponding entry of the response `data` array. Sub-operation `id` values must be unique within the batch. Up to 100 entries. */
@@ -307,11 +370,9 @@ interface components {
307
370
  funding: components["schemas"]["BillingHostedCheckoutFunding"];
308
371
  /**
309
372
  * Format: uri
310
- * @description Hosted Stripe Checkout Session URL.
373
+ * @description Short-lived hosted checkout URL.
311
374
  */
312
375
  url: string;
313
- /** @description Stripe Checkout Session id (cs_…). */
314
- sessionId: string;
315
376
  /**
316
377
  * @description Self-serve plan key. enterprise is not self-serve and returns plan_not_self_serve.
317
378
  * @enum {string}
@@ -336,105 +397,58 @@ interface components {
336
397
  /** @enum {string} */
337
398
  object: "billing_connect";
338
399
  connected: boolean;
339
- stripeConnectAccountId: string | null;
340
- chargesEnabled: boolean;
400
+ acceptingPayments: boolean;
341
401
  payoutsEnabled: boolean;
342
402
  detailsSubmitted: boolean;
343
- requirements: components["schemas"]["BillingConnectRequirements"];
344
- };
345
- BillingConnectRequirements: {
346
- currentlyDue: string[];
347
- eventuallyDue: string[];
348
- pastDue: string[];
349
- disabledReason: string | null;
350
- /** @description Unix timestamp (seconds) from Stripe, or null. */
351
- currentDeadline: number | null;
352
- } | null;
353
- BillingEntitlements: {
354
- /** @enum {string} */
355
- object: "billing_entitlements";
356
- /** @description Platform plan slug, or 'unknown' when absent. */
357
- planKey: string;
358
- limits: components["schemas"]["BillingEntitlementsLimits"];
359
- /**
360
- * @description Whether the stored flat limits came from the plan defaults or a staff override.
361
- * @enum {string|null}
362
- */
363
- limitsSource: "plan" | "override" | null;
364
- };
365
- BillingEntitlementsLimits: {
366
- activeJobs: number | null;
367
- subscribers: number | null;
368
- teamSeats: number | null;
369
- canBePublic: boolean;
370
- canRemoveBranding: boolean;
371
- apiAccess: boolean;
403
+ actionRequired: boolean;
372
404
  };
373
405
  BillingHostedCheckoutFunding: {
374
406
  /** @enum {string} */
375
407
  type: "hosted_checkout";
376
408
  };
377
- BillingSavedPmFunding: {
378
- /** @enum {string} */
379
- type: "saved_pm";
380
- };
381
409
  BillingSubscription: {
382
410
  /** @enum {string} */
383
411
  object: "billing_subscription";
384
412
  active: boolean;
385
413
  status: string | null;
386
- planSlug: string | null;
387
- stripeSubscriptionId: string | null;
388
- stripeCustomerId: string | null;
414
+ planKey: string | null;
389
415
  /** @description Subscription period end as a millisecond epoch. */
390
416
  currentPeriodEnd: number | null;
391
417
  cancelAtPeriodEnd: boolean;
392
- items: components["schemas"]["BillingSubscriptionItem"][];
393
- };
394
- BillingSubscriptionItem: {
395
- stripePriceId: string;
396
- quantity: number;
397
- };
398
- BillingUpgrade: components["schemas"]["BillingUpgradeSavedPm"] | components["schemas"]["BillingUpgradeCheckoutRequired"];
399
- BillingUpgradeBody: {
400
- /**
401
- * @description Self-serve plan key. enterprise is not self-serve and returns plan_not_self_serve.
402
- * @enum {string}
403
- */
404
- planKey: "starter" | "basic" | "grow" | "advanced" | "enterprise";
405
- /**
406
- * @description Billing interval. Defaults to monthly when omitted.
407
- * @enum {string}
408
- */
409
- interval?: "monthly" | "annual";
418
+ capabilities: {
419
+ activeJobsLimit: number | null;
420
+ subscriberLimit: number | null;
421
+ teamSeatLimit: number | null;
422
+ canBePublic: boolean;
423
+ canRemoveBranding: boolean;
424
+ apiAccess: boolean;
425
+ };
410
426
  };
411
- BillingUpgradeCheckoutRequired: {
427
+ BillingUpgrade: {
412
428
  /** @enum {string} */
413
429
  object: "billing_upgrade";
414
430
  funding: components["schemas"]["BillingHostedCheckoutFunding"];
415
431
  /** @enum {string} */
416
- status: "checkout_required";
432
+ status: "human_action_required";
417
433
  /** Format: uri */
418
434
  url: string;
419
- sessionId: string;
420
435
  /**
421
436
  * @description Self-serve plan key. enterprise is not self-serve and returns plan_not_self_serve.
422
437
  * @enum {string}
423
438
  */
424
439
  planKey: "starter" | "basic" | "grow" | "advanced" | "enterprise";
425
440
  };
426
- BillingUpgradeSavedPm: {
427
- /** @enum {string} */
428
- object: "billing_upgrade";
429
- funding: components["schemas"]["BillingSavedPmFunding"];
430
- /** @enum {string} */
431
- status: "upgraded";
441
+ BillingUpgradeBody: {
432
442
  /**
433
443
  * @description Self-serve plan key. enterprise is not self-serve and returns plan_not_self_serve.
434
444
  * @enum {string}
435
445
  */
436
446
  planKey: "starter" | "basic" | "grow" | "advanced" | "enterprise";
437
- stripeSubscriptionId: string;
447
+ /**
448
+ * @description Billing interval. Defaults to monthly when omitted.
449
+ * @enum {string}
450
+ */
451
+ interval?: "monthly" | "annual";
438
452
  };
439
453
  Block: {
440
454
  /** @enum {string} */
@@ -650,18 +664,6 @@ interface components {
650
664
  BoardAuthVerifyEmailBody: {
651
665
  token: string;
652
666
  };
653
- BoardContentBody: {
654
- /** @description The board name. */
655
- boardName: string;
656
- /** @description Optional board description to steer the copy. */
657
- boardDescription?: string;
658
- };
659
- BoardRulesBody: {
660
- /** @description The board name. */
661
- boardName: string;
662
- /** @description Optional board description to steer the scraping rules. */
663
- boardDescription?: string;
664
- };
665
667
  BoardSeo: {
666
668
  /** @enum {string} */
667
669
  object: "board_seo";
@@ -691,16 +693,6 @@ interface components {
691
693
  themeColor: string;
692
694
  };
693
695
  };
694
- BoardThemeBody: {
695
- /** @description The board name. */
696
- boardName: string;
697
- /** @description Optional board description to steer the palette + fonts. */
698
- boardDescription?: string;
699
- };
700
- BoardToneBody: {
701
- /** @description The board name the AI tone/voice profile is generated from. */
702
- boardName: string;
703
- };
704
696
  BoardUser: {
705
697
  /** @description Board user ID. */
706
698
  id: string;
@@ -712,6 +704,10 @@ interface components {
712
704
  displayName: string | null;
713
705
  emailVerified: boolean;
714
706
  };
707
+ BulkBackfillCompaniesBody: {
708
+ /** @description Ordered Cavuno company IDs (max 100). Partial success is returned per item. */
709
+ companyIds: string[];
710
+ };
715
711
  BulkMoveApplicantsBody: {
716
712
  applicationIds: string[];
717
713
  /** @description The target stage id. */
@@ -805,6 +801,84 @@ interface components {
805
801
  name: string;
806
802
  proficiency: string;
807
803
  };
804
+ CandidatePaywall: {
805
+ /** @enum {string} */
806
+ object: "candidate_paywall";
807
+ enabled: boolean;
808
+ previewCount: number;
809
+ lockHeading: string;
810
+ lockDescription: string;
811
+ buttonText: string;
812
+ disclaimerText: string;
813
+ /** @description ISO 4217 currency code, lowercase (e.g. usd). */
814
+ currency: string;
815
+ perMonthLabel: string;
816
+ savingsTemplate: string;
817
+ offers: components["schemas"]["CandidatePaywallOffer"][];
818
+ };
819
+ CandidatePaywallOffer: {
820
+ /** @enum {string} */
821
+ key: "daily" | "weekly" | "monthly" | "quarterly" | "yearly" | "lifetime";
822
+ /** @enum {string} */
823
+ kind: "recurring" | "lifetime";
824
+ enabled: boolean;
825
+ amountCents: number;
826
+ label: string;
827
+ billingLabel: string;
828
+ isDefault: boolean;
829
+ displayOrder: number;
830
+ /** @enum {string|null} */
831
+ intervalUnit: "day" | "week" | "month" | "year" | null;
832
+ intervalCount: number | null;
833
+ };
834
+ CandidatePaywallSubscription: {
835
+ /** @description Cavuno candidate access grant ID. */
836
+ id: string;
837
+ /** @enum {string} */
838
+ object: "candidate_paywall_subscription";
839
+ /** @description Board user / Candidate Cavuno ID (boardUsers id). */
840
+ candidateId: string;
841
+ email: string;
842
+ displayName: string;
843
+ /** @enum {string} */
844
+ kind: "recurring" | "lifetime";
845
+ /**
846
+ * @description One of: daily, weekly, monthly, quarterly, yearly, lifetime.
847
+ * @enum {string}
848
+ */
849
+ offerKey: "daily" | "weekly" | "monthly" | "quarterly" | "yearly" | "lifetime";
850
+ /** @enum {string} */
851
+ status: "pending" | "active" | "trialing" | "expired" | "past_due" | "unpaid" | "incomplete" | "incomplete_expired" | "canceled";
852
+ amountCents: number;
853
+ /** @description ISO 4217 currency code, lowercase (e.g. usd). */
854
+ currency: string;
855
+ /**
856
+ * Format: date-time
857
+ * @description ISO-8601 or null.
858
+ */
859
+ currentPeriodStart: string | null;
860
+ /**
861
+ * Format: date-time
862
+ * @description ISO-8601 or null.
863
+ */
864
+ currentPeriodEnd: string | null;
865
+ cancelAtPeriodEnd: boolean;
866
+ /**
867
+ * Format: date-time
868
+ * @description ISO-8601 or null.
869
+ */
870
+ activatedAt: string | null;
871
+ /**
872
+ * Format: date-time
873
+ * @description ISO-8601 or null.
874
+ */
875
+ canceledAt: string | null;
876
+ /**
877
+ * Format: date-time
878
+ * @description ISO-8601 creation time.
879
+ */
880
+ createdAt: string;
881
+ };
808
882
  CandidateProfile: {
809
883
  id: string;
810
884
  /** @enum {string} */
@@ -823,10 +897,10 @@ interface components {
823
897
  jobSearchStatusVisibleTo: "everyone" | "employers_only";
824
898
  openToRelocate: boolean;
825
899
  };
826
- /** @description Signed Convex storage URL + metadata for the uploaded resume, or `null` when no resume is on file (or the storage blob is missing). Treat the URL as sensitive PII. */
900
+ /** @description Protected download path and metadata for the uploaded resume, or `null` when no resume is on file (or the storage blob is missing). */
827
901
  CandidateResumeFile: {
828
- /** @description Convex storage download URL for the candidate resume. Unguessable; treat as sensitive PII. It serves the candidate’s actual resume file. Short-lived: do not cache or store it; re-fetch the candidate to get a fresh URL. */
829
- url: string;
902
+ /** @description Stable, permission-protected Cavuno API path for downloading the candidate resume. */
903
+ downloadUrl: string;
830
904
  /** @description MIME type of the stored resume file. */
831
905
  contentType: string;
832
906
  /** @description Size of the resume file in bytes. */
@@ -858,15 +932,6 @@ interface components {
858
932
  slug: string;
859
933
  website: string | null;
860
934
  };
861
- CollectReportsBody: {
862
- /** @description Restrict collection to these providers. Omit to collect every enabled provider. */
863
- providers?: ("search_console" | "adsense" | "tinybird" | "stripe")[];
864
- /**
865
- * Format: date-time
866
- * @description Collect up to this end date (ISO-8601). Defaults to the current day.
867
- */
868
- endDate?: string;
869
- };
870
935
  CompaniesBatchRequest: {
871
936
  /** @description Array of sub-operations to execute. Each entry runs independently and reports its result on the corresponding entry of the response `data` array. Sub-operation `id` values must be unique within the batch. Up to 100 entries. */
872
937
  operations: ({
@@ -1136,11 +1201,8 @@ interface components {
1136
1201
  };
1137
1202
  };
1138
1203
  ConfirmImportBody: {
1139
- /** @description A first-time or revised mapping to persist. Omit to use the mapping already attached to the batch (fingerprint reuse). */
1204
+ /** @description A first-time or revised mapping review to persist. Omit it to accept the mapping already attached to this Import. */
1140
1205
  inlineMapping?: {
1141
- schemaFingerprint: string;
1142
- /** @enum {string} */
1143
- sourceFormat: "csv" | "xml";
1144
1206
  fieldMappings: {
1145
1207
  sourceColumn: string;
1146
1208
  targetField: string;
@@ -1235,8 +1297,8 @@ interface components {
1235
1297
  * @enum {string}
1236
1298
  */
1237
1299
  status?: "active" | "inactive";
1238
- /** @description Storage ID of an uploaded avatar image (from `POST /v1/media/upload`). Pass `null` to clear an existing avatar. */
1239
- avatarStorageId?: string | null;
1300
+ /** @description Cavuno media ID of an uploaded avatar image. Pass `null` to clear it. */
1301
+ avatarMediaId?: string | null;
1240
1302
  /** @description The author's personal website URL. Normalized to a canonical URL when stored. */
1241
1303
  websiteUrl?: string;
1242
1304
  /** @description The author's X (Twitter) profile URL. Stored as the canonical `https://x.com/<handle>` URL. */
@@ -1252,6 +1314,27 @@ interface components {
1252
1314
  /** @description The author's display name. */
1253
1315
  name: string;
1254
1316
  };
1317
+ CreateBackfillRuleBody: {
1318
+ name: string;
1319
+ rules: {
1320
+ /** @enum {string} */
1321
+ match: "any" | "all";
1322
+ conditions: {
1323
+ /** @enum {string} */
1324
+ field: "title" | "description";
1325
+ /** @enum {string} */
1326
+ operator: "contains_any" | "contains_all" | "is_not";
1327
+ terms: string[];
1328
+ }[];
1329
+ }[];
1330
+ filters?: {
1331
+ countries?: string[];
1332
+ subdivisions?: string[];
1333
+ seniorities?: ("entry_level" | "associate" | "mid_level" | "senior" | "director" | "executive")[];
1334
+ employmentTypes?: ("full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other")[];
1335
+ workplaceTypes?: ("remote" | "hybrid" | "onsite")[];
1336
+ };
1337
+ };
1255
1338
  CreateBlogPostBody: {
1256
1339
  slug?: string;
1257
1340
  html?: string;
@@ -1260,8 +1343,8 @@ interface components {
1260
1343
  featured?: boolean;
1261
1344
  authorIds?: string[];
1262
1345
  tagIds?: string[];
1263
- coverStorageId?: string | null;
1264
- ogImageStorageId?: string | null;
1346
+ coverMediaId?: string | null;
1347
+ ogImageMediaId?: string | null;
1265
1348
  featureImageAlt?: string;
1266
1349
  featureImageCaption?: string;
1267
1350
  seoTitle?: string;
@@ -1346,21 +1429,6 @@ interface components {
1346
1429
  description?: string;
1347
1430
  sortOrder?: number;
1348
1431
  };
1349
- CreateFeatureBody: {
1350
- /** @description Stable feature key, e.g. jobs.max_active. */
1351
- key: string;
1352
- name: string;
1353
- /** @description Value data type, e.g. integer or string. */
1354
- dataType: string;
1355
- description?: string;
1356
- defaultValue?: string;
1357
- };
1358
- CreateForagerSubscriptionBody: {
1359
- name: string;
1360
- rules: components["schemas"]["ForagerRule"][];
1361
- filters?: components["schemas"]["ForagerFilters"];
1362
- description?: string | null;
1363
- };
1364
1432
  CreateInvitationBody: {
1365
1433
  /**
1366
1434
  * Format: email
@@ -1592,7 +1660,7 @@ interface components {
1592
1660
  maxRedemptions?: number;
1593
1661
  /**
1594
1662
  * Format: date-time
1595
- * @description ISO-8601 expiry; converted to epoch seconds for Stripe.
1663
+ * @description ISO-8601 expiry for the promotion code.
1596
1664
  */
1597
1665
  expiresAt?: string;
1598
1666
  firstTimeTransaction?: boolean;
@@ -1610,6 +1678,20 @@ interface components {
1610
1678
  */
1611
1679
  statusCode: 301 | 302;
1612
1680
  };
1681
+ CreateSalesLedPlanBody: {
1682
+ name: string;
1683
+ description: string;
1684
+ priceText: string;
1685
+ ctaText: string;
1686
+ /** @description Email address or URL. Bare emails become mailto:; bare domains become https://. */
1687
+ ctaDestination: string;
1688
+ /** @description Up to five feature bullets shown on the pricing card. */
1689
+ featuredBullets: string[];
1690
+ /** @description Whether the plan is shown on the public employer pricing page. */
1691
+ isPublic: boolean;
1692
+ /** @description Sort order among active sales-led plans (lower first). */
1693
+ displayOrder: number;
1694
+ };
1613
1695
  CreateSkillBody: {
1614
1696
  name: string;
1615
1697
  slug?: string;
@@ -2160,10 +2242,7 @@ interface components {
2160
2242
  cancelAtPeriodEnd: boolean;
2161
2243
  /** @description ISO-8601 creation time. */
2162
2244
  createdAt: string;
2163
- stripeCustomerId: string | null;
2164
- stripeSubscriptionId: string | null;
2165
2245
  };
2166
- EmployerSubscriptionOrNull: components["schemas"]["EmployerSubscription"] | unknown | unknown;
2167
2246
  EmployerUpdateJobBody: {
2168
2247
  /** @description Long-form description of the role. Up to 25,000 characters. */
2169
2248
  description?: string;
@@ -2250,17 +2329,6 @@ interface components {
2250
2329
  details?: unknown;
2251
2330
  };
2252
2331
  };
2253
- FeatureDefinition: {
2254
- id: string;
2255
- /** @enum {string} */
2256
- object: "feature";
2257
- key: string;
2258
- name: string;
2259
- description: string | null;
2260
- dataType: string;
2261
- defaultValue: string | null;
2262
- isSystem: boolean;
2263
- };
2264
2332
  FindOrCreateCompanyBody: {
2265
2333
  /** @description The company's display name. */
2266
2334
  name: string;
@@ -2273,109 +2341,6 @@ interface components {
2273
2341
  /** @description If `true` (default), creates a new company when no match is found. Set to `false` to receive a `404 companies_not_found` response instead. */
2274
2342
  createIfMissing?: boolean;
2275
2343
  };
2276
- ForagerBackfillProgress: {
2277
- id: string;
2278
- /** @enum {string} */
2279
- object: "forager_backfill_progress";
2280
- backfillId: string;
2281
- status: string;
2282
- progress: {
2283
- jobsMatched: number;
2284
- jobsToEnhance: number;
2285
- jobsEnhanced: number;
2286
- jobsFailed: number;
2287
- };
2288
- errorMessage: string | null;
2289
- createdAt: string;
2290
- };
2291
- ForagerBatchResult: {
2292
- /** @enum {string} */
2293
- object: "forager_batch_result";
2294
- successCount: number;
2295
- failureCount: number;
2296
- };
2297
- ForagerCompany: {
2298
- /** @enum {string} */
2299
- object: "forager_company";
2300
- companyId: string;
2301
- companyUrl: string;
2302
- companyName: string;
2303
- slug: string;
2304
- about: string | null;
2305
- atsType: string | null;
2306
- atsIdentifier: string | null;
2307
- addedAt: string;
2308
- };
2309
- ForagerConfig: {
2310
- /** @enum {string} */
2311
- object: "forager_config";
2312
- configured: boolean;
2313
- isActive?: boolean;
2314
- foragerUserId?: string | null;
2315
- privateVerticalId?: string | null;
2316
- foragerPlan?: string | null;
2317
- autoExpireJobs?: boolean;
2318
- lastSyncedAt?: string | null;
2319
- hasApiKey?: boolean;
2320
- hasWebhookSecret?: boolean;
2321
- };
2322
- ForagerDescription: {
2323
- /** @enum {string} */
2324
- object: "forager_description";
2325
- description: string | null;
2326
- };
2327
- ForagerExclusion: {
2328
- id: string;
2329
- /** @enum {string} */
2330
- object: "forager_exclusion";
2331
- pattern: string;
2332
- type: string;
2333
- createdAt: string;
2334
- };
2335
- ForagerFilters: {
2336
- countries?: string[];
2337
- subdivisions?: string[];
2338
- seniorities?: string[];
2339
- employment_types?: string[];
2340
- workplace_types?: string[];
2341
- };
2342
- ForagerRule: {
2343
- /** @enum {string} */
2344
- field: "title" | "description" | "category_list";
2345
- query: {
2346
- [key: string]: unknown;
2347
- };
2348
- active?: boolean;
2349
- };
2350
- ForagerSubscription: {
2351
- /** @enum {string} */
2352
- object: "forager_subscription";
2353
- verticalKey: string;
2354
- verticalId: string;
2355
- /** @enum {string} */
2356
- kind: "role" | "company";
2357
- name: string;
2358
- active: boolean;
2359
- description: string | null;
2360
- filters?: unknown;
2361
- rules?: unknown;
2362
- backfillId?: string;
2363
- createdAt: string;
2364
- updatedAt: string;
2365
- };
2366
- ForagerSyncRun: {
2367
- id: string;
2368
- /** @enum {string} */
2369
- object: "forager_sync_run";
2370
- startedAt: string | null;
2371
- completedAt: string;
2372
- /** @enum {string} */
2373
- status: "completed";
2374
- jobsCreated: number;
2375
- jobsRepublished: number;
2376
- companiesCreated: number;
2377
- totalActive: number;
2378
- };
2379
2344
  HandleAvailability: {
2380
2345
  /** @enum {string} */
2381
2346
  object: "handle_availability";
@@ -2396,7 +2361,6 @@ interface components {
2396
2361
  updatedCount: number;
2397
2362
  skippedCount: number;
2398
2363
  errorCount: number;
2399
- mappingId: string | null;
2400
2364
  startedAt: string | null;
2401
2365
  completedAt: string | null;
2402
2366
  createdAt: string;
@@ -2420,39 +2384,36 @@ interface components {
2420
2384
  updatedCount: number;
2421
2385
  skippedCount: number;
2422
2386
  errorCount: number;
2423
- mappingId: string | null;
2424
2387
  startedAt: string | null;
2425
2388
  completedAt: string | null;
2426
2389
  createdAt: string;
2427
2390
  errors: components["schemas"]["ImportBatchError"][];
2428
- proposedMapping?: unknown;
2429
- };
2430
- ImportFieldMapping: {
2431
- sourceColumn: string;
2432
- targetField: string;
2433
- confidence: number;
2434
- notes?: string;
2435
- };
2436
- ImportMapping: {
2437
- id: string;
2438
- /** @enum {string} */
2439
- object: "import_mapping";
2440
- schemaFingerprint: string;
2441
- /** @enum {string} */
2442
- sourceFormat: "csv" | "xml";
2443
- fieldMappings: components["schemas"]["ImportFieldMapping"][];
2444
- valueTransforms: components["schemas"]["ImportValueTransform"][];
2445
- defaults: components["schemas"]["ImportMappingDefaults"];
2446
- importCount: number;
2447
- lastUsedAt: string;
2448
- createdByUserId: string | null;
2449
- createdAt: string;
2450
- };
2451
- ImportMappingDefaults: {
2452
- employmentType?: string;
2453
- remoteOption?: string;
2454
- currency?: string;
2455
- descriptionFormat?: string;
2391
+ /** @description Typed, operator-reviewable mapping state. Fingerprints, cache identity, AI provenance, and extraction machinery are private. */
2392
+ proposedMapping: {
2393
+ fieldMappings: {
2394
+ sourceColumn: string;
2395
+ targetField: string;
2396
+ confidence: number;
2397
+ notes?: string;
2398
+ }[];
2399
+ defaults: {
2400
+ employmentType?: string;
2401
+ remoteOption?: string;
2402
+ currency?: string;
2403
+ descriptionFormat?: string;
2404
+ };
2405
+ valueTransforms: {
2406
+ sourceColumn: string;
2407
+ targetField: string;
2408
+ map: {
2409
+ [key: string]: string;
2410
+ };
2411
+ fallback?: string;
2412
+ }[];
2413
+ unmappedSourceColumns: string[];
2414
+ missingRequiredTargets: string[];
2415
+ warnings: string[];
2416
+ } | null;
2456
2417
  };
2457
2418
  ImportQuota: {
2458
2419
  /** @enum {string} */
@@ -2462,14 +2423,6 @@ interface components {
2462
2423
  limit: number;
2463
2424
  resetAt: string;
2464
2425
  };
2465
- ImportValueTransform: {
2466
- sourceColumn: string;
2467
- targetField: string;
2468
- map: {
2469
- [key: string]: string;
2470
- };
2471
- fallback?: string;
2472
- };
2473
2426
  IndexingConfig: {
2474
2427
  /** @enum {string} */
2475
2428
  id: "indexing_config";
@@ -2957,6 +2910,12 @@ interface components {
2957
2910
  sourceLocale: string | null;
2958
2911
  createdAt: string;
2959
2912
  };
2913
+ MatchBackfillCompanyBody: {
2914
+ /** @description Zero-based index into the short-lived candidates array from list (needs_match). Re-validated server-side. */
2915
+ candidateIndex: number;
2916
+ /** @description When true, start backfill after linking the match; when false, only record the match (available). */
2917
+ start: boolean;
2918
+ };
2960
2919
  MediaGet: components["schemas"]["MediaUpload"] & {
2961
2920
  /** @description Time at which the file was uploaded. ISO 8601 datetime. */
2962
2921
  uploadedAt: string;
@@ -3015,16 +2974,6 @@ interface components {
3015
2974
  /** @description Whether the member is the account primary owner. */
3016
2975
  isPrimaryOwner: boolean;
3017
2976
  };
3018
- MemberPermissions: {
3019
- /** @enum {string} */
3020
- id: "members_me";
3021
- /** @enum {string} */
3022
- object: "member_permissions";
3023
- /** @description The acting member's role, or `null` if they are not a member. */
3024
- role: string | null;
3025
- /** @description The permission strings the acting member effectively holds. */
3026
- permissions: string[];
3027
- };
3028
2977
  Message: {
3029
2978
  id: string;
3030
2979
  /** @enum {string} */
@@ -3089,10 +3038,6 @@ interface components {
3089
3038
  code: string;
3090
3039
  /** @description Human-readable error message. */
3091
3040
  message: string;
3092
- /** @description Additional structured details about the error, when present. */
3093
- details?: unknown;
3094
- /** @description Identifier of the request that produced the error. Use this to correlate with platform logs. */
3095
- requestId?: string;
3096
3041
  } | null;
3097
3042
  /** @description Snapshot of the operation's progress, or `null` if the operation does not report progress. */
3098
3043
  OperationProgress: {
@@ -3113,18 +3058,17 @@ interface components {
3113
3058
  * @enum {string}
3114
3059
  */
3115
3060
  object: "operation";
3116
- /** @description Operation kind, identifying which workflow the operation runs. */
3117
- kind: string;
3061
+ /**
3062
+ * @description Operation kind, identifying which workflow the operation runs.
3063
+ * @enum {string}
3064
+ */
3065
+ kind: "domains.verify" | "imports.parse" | "imports.confirm" | "subscribers.export" | "subscribers.import" | "candidates.remove" | "employers.remove";
3118
3066
  /**
3119
3067
  * @description Current state of the operation.
3120
3068
  * @enum {string}
3121
3069
  */
3122
3070
  state: "pending" | "running" | "succeeded" | "failed" | "cancelled";
3123
- /** @description Identifier of the account the operation belongs to. */
3124
- accountId: string;
3125
3071
  progress: components["schemas"]["OperationProgress"];
3126
- /** @description Operation result, populated once the operation reaches `succeeded`. Shape varies by `kind`. */
3127
- result?: unknown;
3128
3072
  error: components["schemas"]["OperationErrorEnvelope"];
3129
3073
  /** @description Time at which the operation was created. ISO 8601 datetime. */
3130
3074
  createdAt: string;
@@ -3134,16 +3078,74 @@ interface components {
3134
3078
  completedAt: string | null;
3135
3079
  /** @description Whether cancellation of the operation has been requested. */
3136
3080
  cancelRequested: boolean;
3137
- /** @description Type of resource the operation acts on, or `null` for resource-less operations. */
3138
- resourceType: string | null;
3139
- /** @description Identifier of the resource the operation acts on, or `null` for resource-less operations. */
3140
- resourceId: string | null;
3141
- /** @description Identifier of the parent operation when this operation is a child of a fan-out, or `null` otherwise. */
3142
- parentOperationId: string | null;
3081
+ /** @description Stable product resource affected by the operation, or `null` when no public resource applies. */
3082
+ resource: {
3083
+ /** @enum {string} */
3084
+ object: "company" | "domain" | "import" | "employer" | "candidate";
3085
+ id: string;
3086
+ } | null;
3143
3087
  };
3144
- PatchForagerConfigBody: {
3145
- isActive?: boolean;
3146
- autoExpireJobs?: boolean;
3088
+ Operator: {
3089
+ /**
3090
+ * @description String representing the object's type. Objects of the same type share the same value.
3091
+ * @enum {string}
3092
+ */
3093
+ object: "operator";
3094
+ /** @description The Board the credential is bound to. */
3095
+ board: {
3096
+ /** @description Unique identifier for the Board (account). */
3097
+ id: string;
3098
+ /** @description URL slug of the Board. */
3099
+ slug: string;
3100
+ /** @description Display name of the Board. */
3101
+ name: string;
3102
+ };
3103
+ /** @description The authenticated principal. */
3104
+ actor: {
3105
+ /**
3106
+ * @description How this request authenticated.
3107
+ * @enum {string}
3108
+ */
3109
+ type: "api_key" | "oauth_token" | "user_session";
3110
+ /** @description Current live membership role. Always `null` for API keys (Board-owned service credentials). Null for OAuth/session only when no live membership remains. */
3111
+ role: string | null;
3112
+ /** @description Current effective product permissions. API keys use the key's explicit scopes; OAuth is the intersection of token scopes and the consenting member's live permissions; sessions use the member's live permissions. */
3113
+ permissions: string[];
3114
+ /** @description Credential scopes for API keys and OAuth tokens. Always `null` for user sessions. */
3115
+ scopes: string[] | null;
3116
+ };
3117
+ };
3118
+ OperatorSettingsConfig: {
3119
+ passwordProtectionEnabled?: boolean;
3120
+ jobAlertsEnabled?: boolean;
3121
+ candidatesEnabled?: boolean;
3122
+ employersEnabled?: boolean;
3123
+ blogEnabled?: boolean;
3124
+ impressumEnabled?: boolean;
3125
+ requireApprovalFreeJobs?: boolean;
3126
+ requireApprovalAggregatedJobs?: boolean;
3127
+ registrationWallEnabled?: boolean;
3128
+ nativeApplicationsEnabled?: boolean;
3129
+ applicantMessagingEnabled?: boolean;
3130
+ requireCookieConsent?: boolean;
3131
+ showCavunoBranding?: boolean;
3132
+ cookieBannerTitle?: string;
3133
+ cookieBannerDescription?: string;
3134
+ cookieBannerRejectLabel?: string;
3135
+ cookieBannerAcceptLabel?: string;
3136
+ cookieBannerManageLabel?: string;
3137
+ talentNavLabel?: string;
3138
+ contactEmail?: string | null;
3139
+ companyLegalName?: string | null;
3140
+ companyAddress?: string | null;
3141
+ companyWebsiteUrl?: string | null;
3142
+ companyXHandle?: string | null;
3143
+ companyFacebookUrl?: string | null;
3144
+ companyLinkedinUrl?: string | null;
3145
+ passwordProtectionMessage?: string | null;
3146
+ defaultJobDurationDays?: number;
3147
+ /** @enum {string} */
3148
+ talentDirectoryVisibility?: "off" | "public" | "employers_only";
3147
3149
  };
3148
3150
  PatchNotificationPreferencesBody: {
3149
3151
  backfillDigest?: boolean;
@@ -3161,10 +3163,10 @@ interface components {
3161
3163
  slug?: string;
3162
3164
  /** @description Identifier of the custom domain to use as the primary public URL. */
3163
3165
  primaryDomainId?: string;
3164
- /** @description Media storage ID returned by `POST /v1/media/upload` with `purpose=board_logo`. */
3165
- logoStorageId?: string;
3166
- /** @description Media storage ID returned by `POST /v1/media/upload` with `purpose=board_hero`. */
3167
- heroStorageId?: string;
3166
+ /** @description Cavuno media ID returned by `POST /v1/media/upload` with `purpose=board_logo`. */
3167
+ logoMediaId?: string;
3168
+ /** @description Cavuno media ID returned by `POST /v1/media/upload` with `purpose=board_hero`. */
3169
+ heroMediaId?: string;
3168
3170
  /** @description Whether the board sits behind a password gate. Use `POST /v1/settings/password-protection` to set the actual password before enabling. */
3169
3171
  passwordProtectionEnabled?: boolean;
3170
3172
  /** @description Whether candidates can subscribe to email alerts for new jobs. */
@@ -3179,7 +3181,7 @@ interface components {
3179
3181
  impressumEnabled?: boolean;
3180
3182
  /** @description Whether jobs posted by employers from the free tier require admin approval before they appear on the public board. */
3181
3183
  requireApprovalFreeJobs?: boolean;
3182
- /** @description Whether aggregated jobs (e.g. those scraped or imported from upstream sources) require admin approval before they appear on the public board. */
3184
+ /** @description Whether aggregated jobs (e.g. those sourced or imported from upstream sources) require admin approval before they appear on the public board. */
3183
3185
  requireApprovalAggregatedJobs?: boolean;
3184
3186
  /** @description Whether visitors must sign in to view jobs. */
3185
3187
  registrationWallEnabled?: boolean;
@@ -3228,38 +3230,6 @@ interface components {
3228
3230
  talentNavLabel?: string;
3229
3231
  /** @description Custom copy displayed on the password gate. Up to 500 characters. Pass `null` to clear. */
3230
3232
  passwordProtectionMessage?: string | "" | unknown | unknown;
3231
- /** @description Free-form configuration object merged into the existing config. Reserved keys (e.g. `passwordProtectionEnabled`, `adsenseClientId`, `jobAccessPaywallEnabled`) cannot be set here. Use the dedicated endpoints instead. */
3232
- config?: {
3233
- [key: string]: unknown;
3234
- };
3235
- };
3236
- PaywallGrantAdmin: {
3237
- id: string;
3238
- /** @enum {string} */
3239
- object: "paywall_grant";
3240
- boardUserId: string;
3241
- email: string;
3242
- displayName: string;
3243
- /** @enum {string} */
3244
- kind: "recurring" | "one_time";
3245
- offerKey: string;
3246
- status: string;
3247
- stripeCustomerId: string | null;
3248
- stripeSubscriptionId: string | null;
3249
- amountCents: number;
3250
- currency: string;
3251
- currentPeriodStart: string | null;
3252
- currentPeriodEnd: string | null;
3253
- cancelAtPeriodEnd: boolean;
3254
- activatedAt: string | null;
3255
- canceledAt: string | null;
3256
- createdAt: string;
3257
- };
3258
- PaywallGrantCount: {
3259
- /** @enum {string} */
3260
- object: "paywall_grant_count";
3261
- cancelableRecurring: number;
3262
- windingDownRecurring: number;
3263
3233
  };
3264
3234
  PaywallOffer: {
3265
3235
  /** @enum {string} */
@@ -3279,37 +3249,6 @@ interface components {
3279
3249
  intervalCount: number | null;
3280
3250
  isDefault: boolean;
3281
3251
  };
3282
- PaywallOfferAdmin: {
3283
- id: string;
3284
- /** @enum {string} */
3285
- object: "paywall_offer";
3286
- offerKey: string;
3287
- label: string | null;
3288
- billingLabel: string | null;
3289
- /** @enum {string} */
3290
- kind: "recurring" | "one_time";
3291
- intervalUnit: string | null;
3292
- intervalCount: number | null;
3293
- amountCents: number;
3294
- currency: string;
3295
- stripePriceId: string | null;
3296
- enabled: boolean;
3297
- isDefault: boolean;
3298
- displayOrder: number;
3299
- createdAt: string;
3300
- };
3301
- PaywallOfferAdminOrNull: components["schemas"]["PaywallOfferAdmin"] | unknown | unknown;
3302
- Permission: {
3303
- /** @description Unique identifier for the permission. */
3304
- id: string;
3305
- /**
3306
- * @description String representing the object's type.
3307
- * @enum {string}
3308
- */
3309
- object: "permission";
3310
- /** @description The permission string, e.g. `members.manage`. */
3311
- permission: string;
3312
- };
3313
3252
  Plan: {
3314
3253
  /** @enum {string} */
3315
3254
  object: "plan";
@@ -3348,14 +3287,17 @@ interface components {
3348
3287
  };
3349
3288
  };
3350
3289
  PlanFeature: {
3351
- /** @description Stable feature key, e.g. jobs.max_active. */
3352
- key: string;
3290
+ /**
3291
+ * @description Stable Cavuno plan capability key.
3292
+ * @enum {string}
3293
+ */
3294
+ key: "jobs.max_active" | "jobs.duration_days" | "jobs.featured_slots" | "jobs.feature_selection_mode" | "talent.profile_unlocks" | "talent.messages_sent";
3353
3295
  name: string | null;
3354
3296
  value: string | null;
3355
- dataType: string | null;
3356
3297
  };
3357
3298
  PlanFeatureValue: {
3358
- key: string;
3299
+ /** @enum {string} */
3300
+ key: "jobs.max_active" | "jobs.duration_days" | "jobs.featured_slots" | "jobs.feature_selection_mode" | "talent.profile_unlocks" | "talent.messages_sent";
3359
3301
  value: string;
3360
3302
  };
3361
3303
  /** @description The plan single active price, or null when no price has been set. */
@@ -3364,9 +3306,6 @@ interface components {
3364
3306
  currency: string;
3365
3307
  /** @description Unit amount in the smallest currency unit. */
3366
3308
  amountCents: number;
3367
- stripePriceId: string | null;
3368
- stripeProductId: string | null;
3369
- isActive: boolean;
3370
3309
  } | null;
3371
3310
  PromotionCode: {
3372
3311
  id: string;
@@ -3916,6 +3855,34 @@ interface components {
3916
3855
  */
3917
3856
  expiresAt?: string | null;
3918
3857
  };
3858
+ PutCandidatePaywallBody: {
3859
+ /** @enum {string} */
3860
+ object?: "candidate_paywall";
3861
+ enabled: boolean;
3862
+ previewCount: number;
3863
+ lockHeading: string;
3864
+ lockDescription: string;
3865
+ buttonText: string;
3866
+ disclaimerText: string;
3867
+ currency: string;
3868
+ perMonthLabel: string;
3869
+ savingsTemplate: string;
3870
+ offers: {
3871
+ /** @enum {string} */
3872
+ key: "daily" | "weekly" | "monthly" | "quarterly" | "yearly" | "lifetime";
3873
+ enabled: boolean;
3874
+ amountCents: number;
3875
+ isDefault: boolean;
3876
+ label?: string;
3877
+ billingLabel?: string;
3878
+ /** @enum {string} */
3879
+ kind?: "recurring" | "lifetime";
3880
+ displayOrder?: number;
3881
+ /** @enum {string|null} */
3882
+ intervalUnit?: "day" | "week" | "month" | "year" | null;
3883
+ intervalCount?: number | null;
3884
+ }[];
3885
+ };
3919
3886
  ReadReceipt: {
3920
3887
  /** @enum {string} */
3921
3888
  object: "read_receipt";
@@ -3988,9 +3955,6 @@ interface components {
3988
3955
  /** @description Human-readable display label. */
3989
3956
  label: string;
3990
3957
  };
3991
- RemoveForagerCompanyBody: {
3992
- companyUrl: string;
3993
- };
3994
3958
  RenameCouponBody: {
3995
3959
  name: string;
3996
3960
  };
@@ -4000,6 +3964,14 @@ interface components {
4000
3964
  /** @description Every stage id of the job, in the new order. */
4001
3965
  orderedStageIds: string[];
4002
3966
  };
3967
+ ReorderSalesLedPlansBody: {
3968
+ /** @description Complete active set: every non-archived plan id exactly once, with unique displayOrder values. */
3969
+ orders: {
3970
+ /** @description Cavuno sales-led plan ID from list/create. */
3971
+ id: string;
3972
+ displayOrder: number;
3973
+ }[];
3974
+ };
4003
3975
  ReplyBody: {
4004
3976
  body: string;
4005
3977
  };
@@ -4008,32 +3980,7 @@ interface components {
4008
3980
  reason: "spam" | "harassment" | "misrepresentation" | "other";
4009
3981
  freeText?: string;
4010
3982
  };
4011
- ReportSnapshot: {
4012
- /** @description Unique identifier for the snapshot. */
4013
- id: string;
4014
- /**
4015
- * @description String representing the object's type.
4016
- * @enum {string}
4017
- */
4018
- object: "report_snapshot";
4019
- /** @description The provider that produced the snapshot. */
4020
- provider: string;
4021
- /** @description The metric name. */
4022
- metric: string;
4023
- /** @description The segment (e.g. `global`, `country`). */
4024
- segment: string;
4025
- /** @description The aggregation interval (e.g. `1d`). */
4026
- interval: string;
4027
- /** @description ISO date string: inclusive start of the snapshot range. */
4028
- rangeStart: string;
4029
- /** @description ISO date string: inclusive end of the snapshot range. */
4030
- rangeEnd: string;
4031
- /** @description Provider-specific metric payload as collected. */
4032
- payload?: unknown;
4033
- };
4034
3983
  ReportingConnect: {
4035
- /** @description Provider-synthetic identifier for the connect. */
4036
- id: string;
4037
3984
  /**
4038
3985
  * @description String representing the object's type.
4039
3986
  * @enum {string}
@@ -4045,14 +3992,10 @@ interface components {
4045
3992
  connected: boolean;
4046
3993
  /** @description OAuth providers only. The URL the user must visit to grant access. */
4047
3994
  authorizationUrl?: string;
4048
- /** @description Search Console only: the site-verification DNS token. */
4049
- verificationToken?: string;
4050
3995
  /** @description The board site URL the integration reports on. */
4051
3996
  siteUrl?: string;
4052
3997
  /** @description Stripe only: the Monetization settings deep link. */
4053
3998
  redirectUrl?: string;
4054
- /** @description Stripe only: why no OAuth URL is returned. */
4055
- reason?: string;
4056
3999
  };
4057
4000
  ReportingIntegration: {
4058
4001
  /** @description Unique identifier for the integration. */
@@ -4069,33 +4012,11 @@ interface components {
4069
4012
  provider: "search_console" | "adsense" | "tinybird" | "stripe" | "google_analytics";
4070
4013
  /** @description Whether collection is enabled for this integration. */
4071
4014
  enabled: boolean;
4015
+ /** @description Whether the connection has completed successfully. */
4016
+ connected: boolean;
4072
4017
  /** @description ISO-8601 timestamp of when the integration was connected. */
4073
4018
  connectedAt: string | null;
4074
- /** @description Provider-side identifier (e.g. the verified site URL). */
4075
- externalId: string | null;
4076
- /** @description OAuth scopes granted to the integration. */
4077
- scopes: string[];
4078
- settings: components["schemas"]["ReportingIntegrationSettings"];
4079
- /** @description ISO-8601 timestamp of the last successful collection. */
4080
- lastCollectedAt: string | null;
4081
- };
4082
- /** @description Provider-specific settings. The OAuth `refreshToken` and `oauthState` are always redacted. */
4083
- ReportingIntegrationSettings: {
4084
- type?: string;
4085
- siteUrl?: string;
4086
- domain?: string | null;
4087
- siteHostname?: string;
4088
- verificationToken?: string;
4089
- status?: string;
4090
- slug?: string;
4091
- inspectionUrl?: string;
4092
- lastSyncedAt?: string;
4093
- permissionLevel?: string;
4094
- platformSiteUrl?: string;
4095
- propertyUrl?: string;
4096
- adsenseAccountId?: string;
4097
- sitemapSubmitted?: boolean;
4098
- } | null;
4019
+ };
4099
4020
  ResourceLinks: {
4100
4021
  /**
4101
4022
  * Format: uri
@@ -4141,19 +4062,6 @@ interface components {
4141
4062
  /** @description OAuth client secret. May be supplied here or via HTTP Basic authentication. */
4142
4063
  client_secret?: string;
4143
4064
  };
4144
- Role: {
4145
- /** @description Unique identifier for the role. */
4146
- id: string;
4147
- /**
4148
- * @description String representing the object's type.
4149
- * @enum {string}
4150
- */
4151
- object: "role";
4152
- /** @description The role name: owner, admin, or member. */
4153
- role: string;
4154
- /** @description The permission strings granted to the role by default. */
4155
- permissions: string[];
4156
- };
4157
4065
  SalaryCompanyIndexItem: {
4158
4066
  /** @enum {string} */
4159
4067
  object: "salary_company";
@@ -4214,14 +4122,6 @@ interface components {
4214
4122
  featuredBullets: string[];
4215
4123
  displayOrder: number;
4216
4124
  };
4217
- SampleJobsBody: {
4218
- /** @description The board name. */
4219
- boardName: string;
4220
- /** @description Optional board description to tailor the sample jobs. */
4221
- boardDescription?: string;
4222
- /** @description How many sample jobs to generate (default 10, max 25). */
4223
- count?: number;
4224
- };
4225
4125
  SaveJobBody: {
4226
4126
  jobId: string;
4227
4127
  };
@@ -4304,9 +4204,10 @@ interface components {
4304
4204
  workEmail: string;
4305
4205
  };
4306
4206
  SetPlanFeaturesBody: {
4307
- /** @description Full replacement set of feature key/value pairs for the plan. */
4207
+ /** @description Full replacement set of typed Cavuno capability key/value pairs for the plan. */
4308
4208
  features: {
4309
- key: string;
4209
+ /** @enum {string} */
4210
+ key: "jobs.max_active" | "jobs.duration_days" | "jobs.featured_slots" | "jobs.feature_selection_mode" | "talent.profile_unlocks" | "talent.messages_sent";
4310
4211
  value: string;
4311
4212
  }[];
4312
4213
  };
@@ -4316,6 +4217,20 @@ interface components {
4316
4217
  /** @description Unit amount in the smallest currency unit. */
4317
4218
  amountCents: number;
4318
4219
  };
4220
+ Settings: {
4221
+ id: string;
4222
+ /** @enum {string} */
4223
+ object: "settings";
4224
+ accountId: string;
4225
+ name: string;
4226
+ slug: string;
4227
+ primaryDomainId: string | null;
4228
+ logoUrl: string | null;
4229
+ heroUrl: string | null;
4230
+ config: components["schemas"]["OperatorSettingsConfig"];
4231
+ createdAt: string;
4232
+ updatedAt: string;
4233
+ };
4319
4234
  SettingsAdsenseBody: {
4320
4235
  /** @description Whether AdSense placements are rendered on the public board. */
4321
4236
  adsenseEnabled?: boolean;
@@ -4346,30 +4261,6 @@ interface components {
4346
4261
  /** @description Plaintext password used to gate the public board. Must be at least 8 characters. Stored hashed and encrypted server-side. */
4347
4262
  password: string;
4348
4263
  };
4349
- SettingsPaywallBody: {
4350
- /** @description Whether the job-access paywall is enforced on the public board. */
4351
- jobAccessPaywallEnabled: boolean;
4352
- /** @description Number of jobs visible before the paywall locks the rest. Range 1–500. */
4353
- jobAccessPreviewCount?: number;
4354
- /** @description Heading shown on the paywall. Up to 120 characters. */
4355
- jobAccessLockHeading?: string;
4356
- /** @description Body copy shown on the paywall. Up to 600 characters. */
4357
- jobAccessLockDescription?: string;
4358
- /** @description Call-to-action label shown on the paywall. Up to 60 characters. */
4359
- jobAccessButtonText?: string;
4360
- /** @description Fine-print disclaimer shown beneath the call-to-action. Up to 200 characters. */
4361
- jobAccessDisclaimerText?: string;
4362
- /** @description Label appended to the monthly price (e.g. `/month`). Up to 60 characters. */
4363
- jobAccessPerMonthLabel?: string;
4364
- /** @description Template string used to render the savings line for annual plans. Up to 120 characters. */
4365
- jobAccessSavingsTemplate?: string;
4366
- /** @description Three-letter ISO 4217 currency code for paywall pricing. */
4367
- jobAccessCurrency?: string;
4368
- /** @description Stripe product ID associated with the paywall plan. Pass `null` to clear. */
4369
- jobAccessStripeProductId?: string | unknown | unknown;
4370
- /** @description Stripe billing-portal configuration ID used for self-serve plan management. Pass `null` to clear. */
4371
- jobAccessStripePortalConfigId?: string | unknown | unknown;
4372
- };
4373
4264
  Skill: {
4374
4265
  id: string;
4375
4266
  /** @enum {string} */
@@ -4901,7 +4792,7 @@ interface components {
4901
4792
  status: "paid" | "open" | "void" | "uncollectible";
4902
4793
  /** @enum {string} */
4903
4794
  method: "card" | "invoice";
4904
- /** @description Amount in Stripe minor units (cents for most currencies). */
4795
+ /** @description Amount in currency minor units (cents for most currencies). */
4905
4796
  amountCents: number;
4906
4797
  currency: string;
4907
4798
  description: string;
@@ -4911,7 +4802,6 @@ interface components {
4911
4802
  date: string;
4912
4803
  /** @description ISO-8601 invoice due date, or null. Past-due is client-derived from this field. */
4913
4804
  invoiceDueAt: string | null;
4914
- stripeInvoiceId: string | null;
4915
4805
  hostedInvoiceUrl: string | null;
4916
4806
  receiptUrl: string | null;
4917
4807
  methodBrand: string | null;
@@ -4919,10 +4809,6 @@ interface components {
4919
4809
  methodType: string | null;
4920
4810
  /** @enum {string|null} */
4921
4811
  publishTiming: "on_issue" | "on_payment" | null;
4922
- /** @description jobOrders id when this row is order-sourced. */
4923
- orderId: string | null;
4924
- /** @description employerSubscriptions id when this row is a subscription renewal. Cross-link: GET /v1/employer-subscriptions/:id. */
4925
- subscriptionId: string | null;
4926
4812
  };
4927
4813
  TransferOwnershipBody: {
4928
4814
  /** @description The user ID of the member who will become the primary owner. */
@@ -4966,8 +4852,8 @@ interface components {
4966
4852
  * @enum {string}
4967
4853
  */
4968
4854
  status?: "active" | "inactive";
4969
- /** @description Storage ID of an uploaded avatar image (from `POST /v1/media/upload`). Pass `null` to clear an existing avatar. */
4970
- avatarStorageId?: string | null;
4855
+ /** @description Cavuno media ID of an uploaded avatar image. Pass `null` to clear it. */
4856
+ avatarMediaId?: string | null;
4971
4857
  /** @description The author's personal website URL. Normalized to a canonical URL when stored. */
4972
4858
  websiteUrl?: string;
4973
4859
  /** @description The author's X (Twitter) profile URL. Stored as the canonical `https://x.com/<handle>` URL. */
@@ -4983,6 +4869,27 @@ interface components {
4983
4869
  /** @description The author's display name. */
4984
4870
  name?: string;
4985
4871
  };
4872
+ UpdateBackfillRuleBody: {
4873
+ name?: string;
4874
+ rules?: {
4875
+ /** @enum {string} */
4876
+ match: "any" | "all";
4877
+ conditions: {
4878
+ /** @enum {string} */
4879
+ field: "title" | "description";
4880
+ /** @enum {string} */
4881
+ operator: "contains_any" | "contains_all" | "is_not";
4882
+ terms: string[];
4883
+ }[];
4884
+ }[];
4885
+ filters?: {
4886
+ countries?: string[];
4887
+ subdivisions?: string[];
4888
+ seniorities?: ("entry_level" | "associate" | "mid_level" | "senior" | "director" | "executive")[];
4889
+ employmentTypes?: ("full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other")[];
4890
+ workplaceTypes?: ("remote" | "hybrid" | "onsite")[];
4891
+ };
4892
+ };
4986
4893
  UpdateBlogPostBody: {
4987
4894
  slug?: string;
4988
4895
  html?: string;
@@ -4991,8 +4898,8 @@ interface components {
4991
4898
  featured?: boolean;
4992
4899
  authorIds?: string[];
4993
4900
  tagIds?: string[];
4994
- coverStorageId?: string | null;
4995
- ogImageStorageId?: string | null;
4901
+ coverMediaId?: string | null;
4902
+ ogImageMediaId?: string | null;
4996
4903
  featureImageAlt?: string;
4997
4904
  featureImageCaption?: string;
4998
4905
  seoTitle?: string;
@@ -5079,16 +4986,6 @@ interface components {
5079
4986
  description?: string;
5080
4987
  sortOrder?: number;
5081
4988
  };
5082
- UpdateForagerDescriptionBody: {
5083
- description: string | null;
5084
- };
5085
- UpdateForagerSubscriptionBody: {
5086
- name?: string;
5087
- rules?: components["schemas"]["ForagerRule"][];
5088
- filters?: components["schemas"]["ForagerFilters"];
5089
- active?: boolean;
5090
- description?: string | null;
5091
- };
5092
4989
  UpdateInvitationBody: {
5093
4990
  /**
5094
4991
  * @description The new role for the pending invitation.
@@ -5206,16 +5103,6 @@ interface components {
5206
5103
  channel: "messageEmails" | "applicationEmails";
5207
5104
  subscribed: boolean;
5208
5105
  };
5209
- UpdatePaywallOfferBody: {
5210
- /** @description Enable or disable the offer. */
5211
- isEnabled?: boolean;
5212
- /** @description Alias of isEnabled (either is accepted). */
5213
- enabled?: boolean;
5214
- label?: string;
5215
- billingLabel?: string;
5216
- displayOrder?: number;
5217
- isDefault?: boolean;
5218
- };
5219
5106
  UpdatePipelineStageBody: {
5220
5107
  label?: string;
5221
5108
  hidden?: boolean;
@@ -5238,6 +5125,20 @@ interface components {
5238
5125
  /** @description HTTP status code. One of `301` or `302`. */
5239
5126
  statusCode?: 301 | 302;
5240
5127
  };
5128
+ UpdateSalesLedPlanBody: {
5129
+ name: string;
5130
+ description: string;
5131
+ priceText: string;
5132
+ ctaText: string;
5133
+ /** @description Email address or URL. Bare emails become mailto:; bare domains become https://. */
5134
+ ctaDestination: string;
5135
+ /** @description Up to five feature bullets shown on the pricing card. */
5136
+ featuredBullets: string[];
5137
+ /** @description Whether the plan is shown on the public employer pricing page. */
5138
+ isPublic: boolean;
5139
+ /** @description Sort order among active sales-led plans (lower first). */
5140
+ displayOrder: number;
5141
+ };
5241
5142
  UpdateSkillBody: {
5242
5143
  name?: string;
5243
5144
  slug?: string;
@@ -5264,21 +5165,26 @@ interface components {
5264
5165
  name?: string;
5265
5166
  };
5266
5167
  Usage: {
5267
- /** @description Unique identifier for the object. Equal to the account ID: usage is a per-account singleton. */
5268
- id: string;
5269
5168
  /**
5270
5169
  * @description String representing the object's type. Objects of the same type share the same value.
5271
5170
  * @enum {string}
5272
5171
  */
5273
5172
  object: "usage";
5274
- /** @description Number of jobs currently in `published` status. */
5275
- activeJobs: number;
5276
- /** @description Plan-enforced cap on the number of published jobs. */
5277
- activeJobsLimit: number;
5278
- /** @description Number of additional jobs the account may publish before hitting the limit. */
5279
- available: number;
5280
- /** @description Slug of the account's current plan. */
5281
- plan: string;
5173
+ /** @description Typed product capacities for active jobs, confirmed subscribers, and team seats. */
5174
+ capacities: components["schemas"]["UsageCapacity"][];
5175
+ };
5176
+ UsageCapacity: {
5177
+ /**
5178
+ * @description Stable capacity key matching the dashboard: active_jobs, confirmed_subscribers, or team_seats.
5179
+ * @enum {string}
5180
+ */
5181
+ key: "active_jobs" | "confirmed_subscribers" | "team_seats";
5182
+ /** @description Current usage for this capacity. Never negative. */
5183
+ used: number;
5184
+ /** @description Effective plan or override cap. Null when the capacity is unlimited. */
5185
+ limit: number | null;
5186
+ /** @description Slots remaining before the limit. Null when unlimited; never negative when finite. */
5187
+ remaining: number | null;
5282
5188
  };
5283
5189
  VerifyEmailOtpBody: {
5284
5190
  code: string;