@cavuno/board 1.39.0 → 1.41.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.
Files changed (37) hide show
  1. package/dist/{_spec-DxC1ze93.d.mts → _spec-l_596ZwW.d.mts} +373 -0
  2. package/dist/{_spec-DxC1ze93.d.ts → _spec-l_596ZwW.d.ts} +373 -0
  3. package/dist/bin.mjs +242 -18
  4. package/dist/{board-RfZEAJse.d.ts → board-BzK5j73O.d.ts} +1 -1
  5. package/dist/{board-CqYibYUA.d.mts → board-CyHA6rRP.d.mts} +1 -1
  6. package/dist/doctor.js +238 -14
  7. package/dist/doctor.mjs +238 -14
  8. package/dist/filters.d.mts +2 -2
  9. package/dist/filters.d.ts +2 -2
  10. package/dist/format.d.mts +3 -3
  11. package/dist/format.d.ts +3 -3
  12. package/dist/index.d.mts +89 -10
  13. package/dist/index.d.ts +89 -10
  14. package/dist/index.js +91 -1
  15. package/dist/index.mjs +91 -1
  16. package/dist/{jobs-DPPA1Nev.d.mts → jobs-BhthvMkA.d.mts} +1 -1
  17. package/dist/{jobs-CLLIvtMc.d.ts → jobs-CXudz1Y4.d.ts} +1 -1
  18. package/dist/{salaries-DK4RnJnw.d.ts → salaries-ByBuHCLH.d.ts} +2 -2
  19. package/dist/{salaries-Rb5h_eVZ.d.mts → salaries-Dr_Zugal.d.mts} +2 -2
  20. package/dist/{search-CqBa1Qc4.d.mts → search-CrIlXSJP.d.mts} +1 -1
  21. package/dist/{search-DBoMM-gE.d.ts → search-DZrq-k76.d.ts} +1 -1
  22. package/dist/seo.d.mts +4 -4
  23. package/dist/seo.d.ts +4 -4
  24. package/dist/server.d.mts +56 -6
  25. package/dist/server.d.ts +56 -6
  26. package/dist/server.js +41 -0
  27. package/dist/server.mjs +41 -0
  28. package/dist/sitemap.d.mts +5 -5
  29. package/dist/sitemap.d.ts +5 -5
  30. package/dist/suggest.d.mts +2 -2
  31. package/dist/suggest.d.ts +2 -2
  32. package/dist/theme.d.mts +49 -1
  33. package/dist/theme.d.ts +49 -1
  34. package/dist/theme.js +60 -26
  35. package/dist/theme.mjs +60 -26
  36. package/package.json +1 -1
  37. package/skills/manifest.json +1 -1
@@ -86,6 +86,31 @@ interface components {
86
86
  */
87
87
  admin: string;
88
88
  };
89
+ AdminPlan: {
90
+ /** @description Unique identifier for the plan. */
91
+ id: string;
92
+ /** @enum {string} */
93
+ object: "plan";
94
+ name: string;
95
+ description: string | null;
96
+ kind: string;
97
+ /**
98
+ * @description Subscription billing interval. Required for kind=subscription.
99
+ * @enum {string|null}
100
+ */
101
+ billingInterval: "month" | "year" | null;
102
+ /**
103
+ * @description Whether the plan grants job-posting or talent-access entitlement.
104
+ * @enum {string}
105
+ */
106
+ purpose: "job_posting" | "talent_access";
107
+ isPublic: boolean;
108
+ isRecommended: boolean;
109
+ isArchived: boolean;
110
+ displayOrder: number | null;
111
+ price: components["schemas"]["PlanPrice"];
112
+ features: components["schemas"]["PlanFeature"][];
113
+ };
89
114
  AiUsage: {
90
115
  id: string;
91
116
  /** @enum {string} */
@@ -276,6 +301,37 @@ interface components {
276
301
  resourceId: string;
277
302
  })[];
278
303
  };
304
+ BillingCheckout: {
305
+ /** @enum {string} */
306
+ object: "billing_checkout";
307
+ funding: components["schemas"]["BillingHostedCheckoutFunding"];
308
+ /**
309
+ * Format: uri
310
+ * @description Hosted Stripe Checkout Session URL.
311
+ */
312
+ url: string;
313
+ /** @description Stripe Checkout Session id (cs_…). */
314
+ sessionId: string;
315
+ /**
316
+ * @description Self-serve plan key. enterprise is not self-serve and returns plan_not_self_serve.
317
+ * @enum {string}
318
+ */
319
+ planKey: "starter" | "basic" | "grow" | "advanced" | "enterprise";
320
+ /** @enum {string} */
321
+ interval: "monthly" | "annual";
322
+ };
323
+ BillingCheckoutBody: {
324
+ /**
325
+ * @description Self-serve plan key. enterprise is not self-serve and returns plan_not_self_serve.
326
+ * @enum {string}
327
+ */
328
+ planKey: "starter" | "basic" | "grow" | "advanced" | "enterprise";
329
+ /**
330
+ * @description Billing interval. Defaults to monthly when omitted.
331
+ * @enum {string}
332
+ */
333
+ interval?: "monthly" | "annual";
334
+ };
279
335
  BillingConnect: {
280
336
  /** @enum {string} */
281
337
  object: "billing_connect";
@@ -314,6 +370,14 @@ interface components {
314
370
  canRemoveBranding: boolean;
315
371
  apiAccess: boolean;
316
372
  };
373
+ BillingHostedCheckoutFunding: {
374
+ /** @enum {string} */
375
+ type: "hosted_checkout";
376
+ };
377
+ BillingSavedPmFunding: {
378
+ /** @enum {string} */
379
+ type: "saved_pm";
380
+ };
317
381
  BillingSubscription: {
318
382
  /** @enum {string} */
319
383
  object: "billing_subscription";
@@ -331,6 +395,47 @@ interface components {
331
395
  stripePriceId: string;
332
396
  quantity: number;
333
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";
410
+ };
411
+ BillingUpgradeCheckoutRequired: {
412
+ /** @enum {string} */
413
+ object: "billing_upgrade";
414
+ funding: components["schemas"]["BillingHostedCheckoutFunding"];
415
+ /** @enum {string} */
416
+ status: "checkout_required";
417
+ /** Format: uri */
418
+ url: string;
419
+ sessionId: string;
420
+ /**
421
+ * @description Self-serve plan key. enterprise is not self-serve and returns plan_not_self_serve.
422
+ * @enum {string}
423
+ */
424
+ planKey: "starter" | "basic" | "grow" | "advanced" | "enterprise";
425
+ };
426
+ BillingUpgradeSavedPm: {
427
+ /** @enum {string} */
428
+ object: "billing_upgrade";
429
+ funding: components["schemas"]["BillingSavedPmFunding"];
430
+ /** @enum {string} */
431
+ status: "upgraded";
432
+ /**
433
+ * @description Self-serve plan key. enterprise is not self-serve and returns plan_not_self_serve.
434
+ * @enum {string}
435
+ */
436
+ planKey: "starter" | "basic" | "grow" | "advanced" | "enterprise";
437
+ stripeSubscriptionId: string;
438
+ };
334
439
  Block: {
335
440
  /** @enum {string} */
336
441
  object: "block";
@@ -1090,6 +1195,21 @@ interface components {
1090
1195
  object: "conversation_ref";
1091
1196
  conversationId: string | null;
1092
1197
  };
1198
+ Coupon: {
1199
+ id: string;
1200
+ /** @enum {string} */
1201
+ object: "coupon";
1202
+ name: string | null;
1203
+ percentOff: number | null;
1204
+ amountOff: number | null;
1205
+ currency: string | null;
1206
+ duration: string;
1207
+ durationInMonths: number | null;
1208
+ valid: boolean;
1209
+ appliesTo: string[] | null;
1210
+ timesRedeemed: number;
1211
+ created: string;
1212
+ };
1093
1213
  CreateAuthorBody: {
1094
1214
  /** @description URL-friendly slug for the author. Auto-generated from `name` when omitted. */
1095
1215
  slug?: string;
@@ -1171,6 +1291,20 @@ interface components {
1171
1291
  /** @description URL-friendly slug for the company. Auto-generated from `name` when omitted. */
1172
1292
  slug?: string;
1173
1293
  };
1294
+ CreateCouponBody: {
1295
+ name: string;
1296
+ percentOff?: number | null;
1297
+ /** @description Fixed discount in the currency major unit (e.g. 10 for $10, 1000 for ¥1000). Required with `currency` when there is no percentOff. */
1298
+ amountOff?: number | null;
1299
+ currency?: string | null;
1300
+ /** @enum {string} */
1301
+ duration: "once" | "forever" | "repeating";
1302
+ durationInMonths?: number;
1303
+ maxRedemptions?: number;
1304
+ /** @description Unix ms deadline after which the coupon cannot be redeemed. */
1305
+ redeemBy?: number;
1306
+ appliesToPlanIds?: string[];
1307
+ };
1174
1308
  CreateDomainBody: {
1175
1309
  /** @description Hostname to bind to this board, for example jobs.acme.com. Labels may contain letters, numbers, and hyphens, and may not start or end with a hyphen. The API normalizes accepted hostnames to lowercase before writing. */
1176
1310
  domain: string;
@@ -1202,6 +1336,15 @@ interface components {
1202
1336
  description?: string;
1203
1337
  sortOrder?: number;
1204
1338
  };
1339
+ CreateFeatureBody: {
1340
+ /** @description Stable feature key, e.g. jobs.max_active. */
1341
+ key: string;
1342
+ name: string;
1343
+ /** @description Value data type, e.g. integer or string. */
1344
+ dataType: string;
1345
+ description?: string;
1346
+ defaultValue?: string;
1347
+ };
1205
1348
  CreateForagerSubscriptionBody: {
1206
1349
  name: string;
1207
1350
  rules: components["schemas"]["ForagerRule"][];
@@ -1409,6 +1552,43 @@ interface components {
1409
1552
  /** @description The stage label. */
1410
1553
  label: string;
1411
1554
  };
1555
+ CreatePlanBody: {
1556
+ /** @description Display name for the plan. */
1557
+ name: string;
1558
+ /** @description Optional plan description. */
1559
+ description?: string;
1560
+ /**
1561
+ * @description Plan billing kind.
1562
+ * @enum {string}
1563
+ */
1564
+ kind: "free" | "one_time" | "bundle" | "subscription";
1565
+ /**
1566
+ * @description Subscription billing interval. Required for kind=subscription.
1567
+ * @enum {string}
1568
+ */
1569
+ billingInterval?: "month" | "year";
1570
+ /**
1571
+ * @description Whether the plan grants job-posting or talent-access entitlement.
1572
+ * @enum {string}
1573
+ */
1574
+ purpose?: "job_posting" | "talent_access";
1575
+ /** @description Whether the plan is publicly listed. Defaults to false. */
1576
+ isPublic?: boolean;
1577
+ isRecommended?: boolean;
1578
+ displayOrder?: number;
1579
+ };
1580
+ CreatePromotionCodeBody: {
1581
+ code: string;
1582
+ maxRedemptions?: number;
1583
+ /**
1584
+ * Format: date-time
1585
+ * @description ISO-8601 expiry; converted to epoch seconds for Stripe.
1586
+ */
1587
+ expiresAt?: string;
1588
+ firstTimeTransaction?: boolean;
1589
+ minimumAmount?: number;
1590
+ minimumAmountCurrency?: string;
1591
+ };
1412
1592
  CreateRedirectBody: {
1413
1593
  /** @description Source path to match, for example `/old-careers`. */
1414
1594
  fromPath: string;
@@ -1815,6 +1995,28 @@ interface components {
1815
1995
  */
1816
1996
  public: string | null;
1817
1997
  };
1998
+ EmployerJobStat: {
1999
+ /** @enum {string} */
2000
+ object: "employer_job_stat";
2001
+ /** @description The Convex job id these stats belong to. */
2002
+ jobId: string;
2003
+ /** @description Job-detail page-views over the all-time window. */
2004
+ views: number;
2005
+ /** @description Apply-click events over the all-time window. */
2006
+ applyClicks: number;
2007
+ /** @description Native ATS application count, or `null` for an external-apply job (no native pipeline). */
2008
+ applications: number | null;
2009
+ };
2010
+ EmployerJobStatsPoint: {
2011
+ /** @enum {string} */
2012
+ object: "employer_job_stats_point";
2013
+ /** @description The UTC day this bucket covers (`YYYY-MM-DD`). */
2014
+ date: string;
2015
+ /** @description Job-detail page-views on this day. */
2016
+ views: number;
2017
+ /** @description Apply-click events on this day. */
2018
+ applyClicks: number;
2019
+ };
1818
2020
  EmployerJobSummary: {
1819
2021
  /** @description Unique identifier for the object. Use this value as the `{id}` path parameter for the job endpoints (e.g. `GET /v1/jobs/{id}`). */
1820
2022
  id: string;
@@ -1919,6 +2121,25 @@ interface components {
1919
2121
  hidden: boolean;
1920
2122
  position: number;
1921
2123
  };
2124
+ EmployerSubscription: {
2125
+ id: string;
2126
+ /** @enum {string} */
2127
+ object: "employer_subscription";
2128
+ employerEmail: string;
2129
+ companyId: string | null;
2130
+ companyName: string | null;
2131
+ planId: string | null;
2132
+ planName: string | null;
2133
+ status: string;
2134
+ /** @description ISO-8601 period end, or null. */
2135
+ currentPeriodEnd: string | null;
2136
+ cancelAtPeriodEnd: boolean;
2137
+ /** @description ISO-8601 creation time. */
2138
+ createdAt: string;
2139
+ stripeCustomerId: string | null;
2140
+ stripeSubscriptionId: string | null;
2141
+ };
2142
+ EmployerSubscriptionOrNull: components["schemas"]["EmployerSubscription"] | unknown | unknown;
1922
2143
  EmployerUpdateJobBody: {
1923
2144
  /** @description Long-form description of the role. Up to 25,000 characters. */
1924
2145
  description?: string;
@@ -1992,6 +2213,17 @@ interface components {
1992
2213
  /** @description The job title. */
1993
2214
  title?: string;
1994
2215
  };
2216
+ FeatureDefinition: {
2217
+ id: string;
2218
+ /** @enum {string} */
2219
+ object: "feature";
2220
+ key: string;
2221
+ name: string;
2222
+ description: string | null;
2223
+ dataType: string;
2224
+ defaultValue: string | null;
2225
+ isSystem: boolean;
2226
+ };
1995
2227
  FindOrCreateCompanyBody: {
1996
2228
  /** @description The company's display name. */
1997
2229
  name: string;
@@ -2910,6 +3142,10 @@ interface components {
2910
3142
  requireApprovalAggregatedJobs?: boolean;
2911
3143
  /** @description Whether visitors must sign in to view jobs. */
2912
3144
  registrationWallEnabled?: boolean;
3145
+ /** @description Whether the board's built-in ATS receives applications. When `false` (external-applications-only board), posting surfaces require an external `applicationUrl` and `POST /boards/:identifier/jobs/:jobSlug/apply` rejects with `applications_native_disabled`. Turning this off UNPUBLISHES every published native-apply job (those with no external `applicationUrl`) back to draft via an asynchronous batched drain — expect published job counts to shrink over the following seconds. Nothing is deleted, and re-enabling does NOT republish the drafted jobs. Absent means `true`. */
3146
+ nativeApplicationsEnabled?: boolean;
3147
+ /** @description Whether applicant↔employer messaging is enabled. When `false`, the `me/conversations` route family rejects with `messaging_disabled` and new-message emails are suppressed. Absent means `true`. */
3148
+ applicantMessagingEnabled?: boolean;
2913
3149
  /** @description Legacy shorthand for the talent directory. `true` maps to `talentDirectoryVisibility: "public"`; `false` maps to `"off"`. Prefer the tri-state field. Providing both with conflicting values returns `settings_conflicting_fields`. */
2914
3150
  talentDirectoryEnabled?: boolean;
2915
3151
  /**
@@ -2956,6 +3192,34 @@ interface components {
2956
3192
  [key: string]: unknown;
2957
3193
  };
2958
3194
  };
3195
+ PaywallGrantAdmin: {
3196
+ id: string;
3197
+ /** @enum {string} */
3198
+ object: "paywall_grant";
3199
+ boardUserId: string;
3200
+ email: string;
3201
+ displayName: string;
3202
+ /** @enum {string} */
3203
+ kind: "recurring" | "one_time";
3204
+ offerKey: string;
3205
+ status: string;
3206
+ stripeCustomerId: string | null;
3207
+ stripeSubscriptionId: string | null;
3208
+ amountCents: number;
3209
+ currency: string;
3210
+ currentPeriodStart: string | null;
3211
+ currentPeriodEnd: string | null;
3212
+ cancelAtPeriodEnd: boolean;
3213
+ activatedAt: string | null;
3214
+ canceledAt: string | null;
3215
+ createdAt: string;
3216
+ };
3217
+ PaywallGrantCount: {
3218
+ /** @enum {string} */
3219
+ object: "paywall_grant_count";
3220
+ cancelableRecurring: number;
3221
+ windingDownRecurring: number;
3222
+ };
2959
3223
  PaywallOffer: {
2960
3224
  /** @enum {string} */
2961
3225
  object: "paywall_offer";
@@ -2974,6 +3238,26 @@ interface components {
2974
3238
  intervalCount: number | null;
2975
3239
  isDefault: boolean;
2976
3240
  };
3241
+ PaywallOfferAdmin: {
3242
+ id: string;
3243
+ /** @enum {string} */
3244
+ object: "paywall_offer";
3245
+ offerKey: string;
3246
+ label: string | null;
3247
+ billingLabel: string | null;
3248
+ /** @enum {string} */
3249
+ kind: "recurring" | "one_time";
3250
+ intervalUnit: string | null;
3251
+ intervalCount: number | null;
3252
+ amountCents: number;
3253
+ currency: string;
3254
+ stripePriceId: string | null;
3255
+ enabled: boolean;
3256
+ isDefault: boolean;
3257
+ displayOrder: number;
3258
+ createdAt: string;
3259
+ };
3260
+ PaywallOfferAdminOrNull: components["schemas"]["PaywallOfferAdmin"] | unknown | unknown;
2977
3261
  Permission: {
2978
3262
  /** @description Unique identifier for the permission. */
2979
3263
  id: string;
@@ -3022,6 +3306,36 @@ interface components {
3022
3306
  messagesPerPeriod: string;
3023
3307
  };
3024
3308
  };
3309
+ PlanFeature: {
3310
+ /** @description Stable feature key, e.g. jobs.max_active. */
3311
+ key: string;
3312
+ name: string | null;
3313
+ value: string | null;
3314
+ dataType: string | null;
3315
+ };
3316
+ PlanFeatureValue: {
3317
+ key: string;
3318
+ value: string;
3319
+ };
3320
+ /** @description The plan single active price, or null when no price has been set. */
3321
+ PlanPrice: {
3322
+ /** @description ISO 4217 currency code, lowercase. */
3323
+ currency: string;
3324
+ /** @description Unit amount in the smallest currency unit. */
3325
+ amountCents: number;
3326
+ stripePriceId: string | null;
3327
+ stripeProductId: string | null;
3328
+ isActive: boolean;
3329
+ } | null;
3330
+ PromotionCode: {
3331
+ id: string;
3332
+ /** @enum {string} */
3333
+ object: "promotion_code";
3334
+ code: string;
3335
+ couponId: string;
3336
+ active: boolean;
3337
+ created: string;
3338
+ };
3025
3339
  PublicBlogAdjacentPosts: {
3026
3340
  /** @enum {string} */
3027
3341
  object: "blog_adjacent_posts";
@@ -3115,6 +3429,10 @@ interface components {
3115
3429
  publicJobSubmission: boolean;
3116
3430
  candidatePaywall: boolean;
3117
3431
  impressum: boolean;
3432
+ /** @description Whether the board accepts native (on-board ATS) applications. `false` means external-applications-only: the server rejects native submissions to `POST /jobs/:jobSlug/apply` with `applications_native_disabled` (422). Clients should hide native apply UI and treat a job with no external `applicationUrl` as not-applyable. */
3433
+ nativeApplications: boolean;
3434
+ /** @description Whether applicant↔employer messaging is enabled on the board. `false` means the `me/conversations` route family rejects with `messaging_disabled` (403) — hide inbox/dock/Message CTAs. */
3435
+ messaging: boolean;
3118
3436
  };
3119
3437
  /**
3120
3438
  * @description The tri-state behind `features.talentDirectory` (which is `visibility === 'public'`). Link /talent whenever this is not `'off'` — an employers-only directory renders a sign-in upsell for anonymous visitors, matching the hosted chrome.
@@ -3622,6 +3940,9 @@ interface components {
3622
3940
  RemoveForagerCompanyBody: {
3623
3941
  companyUrl: string;
3624
3942
  };
3943
+ RenameCouponBody: {
3944
+ name: string;
3945
+ };
3625
3946
  ReorderPipelineStagesBody: {
3626
3947
  /** @description The job whose stages are reordered. */
3627
3948
  jobId: string;
@@ -3931,6 +4252,19 @@ interface components {
3931
4252
  /** Format: email */
3932
4253
  workEmail: string;
3933
4254
  };
4255
+ SetPlanFeaturesBody: {
4256
+ /** @description Full replacement set of feature key/value pairs for the plan. */
4257
+ features: {
4258
+ key: string;
4259
+ value: string;
4260
+ }[];
4261
+ };
4262
+ SetPlanPriceBody: {
4263
+ /** @description ISO 4217 currency code (e.g. usd). */
4264
+ currency: string;
4265
+ /** @description Unit amount in the smallest currency unit. */
4266
+ amountCents: number;
4267
+ };
3934
4268
  SettingsAdsenseBody: {
3935
4269
  /** @description Whether AdSense placements are rendered on the public board. */
3936
4270
  adsenseEnabled?: boolean;
@@ -4141,6 +4475,9 @@ interface components {
4141
4475
  StartConversationBody: {
4142
4476
  candidateBoardUserId: string;
4143
4477
  body: string;
4478
+ } | {
4479
+ candidateHandle: string;
4480
+ body: string;
4144
4481
  };
4145
4482
  Subscriber: {
4146
4483
  /** @description Unique identifier for the subscriber. */
@@ -4202,6 +4539,18 @@ interface components {
4202
4539
  items: components["schemas"]["SuggestionItem"][];
4203
4540
  };
4204
4541
  SuggestionItem: components["schemas"]["CompanySuggestion"] | components["schemas"]["TermSuggestion"];
4542
+ TalentAccess: {
4543
+ /** @enum {string} */
4544
+ object: "talent_access";
4545
+ /** @description Whether the viewer has an approved company membership on this board. */
4546
+ isEmployer: boolean;
4547
+ /** @description Whether this board sells talent access (a public `talent_access` plan exists). When `false` the talent surfaces are not credit-gated for employers. */
4548
+ paywallActive: boolean;
4549
+ /** @description The CTA answer: the viewer is an approved employer AND either the board has no talent paywall or one of their companies holds an active talent_access subscription or a succeeded credit pack. Always `false` for candidates; anonymous viewers get 401. */
4550
+ hasTalentAccess: boolean;
4551
+ /** @description True when any active talent_access subscription carries the unlimited profile-unlock sentinel on its feature snapshot. */
4552
+ hasUnlimitedUnlocks: boolean;
4553
+ };
4205
4554
  TalentDirectoryEntry: {
4206
4555
  /** @enum {string} */
4207
4556
  object: "talent_directory_entry";
@@ -4240,6 +4589,8 @@ interface components {
4240
4589
  title: string;
4241
4590
  companyName: string;
4242
4591
  companyUrl: string | null;
4592
+ /** @description Absolute logo URL for the company, resolved from `companyUrl` the same way the hosted profile renders it; `null` when the company has no usable website. Render a monogram/initials fallback when `null` (and on image error — the URL 404s when the brand has no icon). */
4593
+ companyLogoUrl: string | null;
4243
4594
  location: string | null;
4244
4595
  employmentType: string | null;
4245
4596
  locationType: string | null;
@@ -4255,6 +4606,8 @@ interface components {
4255
4606
  education: {
4256
4607
  institutionName: string;
4257
4608
  institutionUrl: string | null;
4609
+ /** @description Absolute logo URL for the institution, resolved from `institutionUrl` the same way the hosted profile renders it; `null` when the institution has no usable website. Render a monogram/initials fallback when `null` (and on image error). */
4610
+ institutionLogoUrl: string | null;
4258
4611
  degree: string | null;
4259
4612
  fieldOfStudy: string | null;
4260
4613
  grade: string | null;
@@ -4769,10 +5122,30 @@ interface components {
4769
5122
  channel: "messageEmails" | "applicationEmails";
4770
5123
  subscribed: boolean;
4771
5124
  };
5125
+ UpdatePaywallOfferBody: {
5126
+ /** @description Enable or disable the offer. */
5127
+ isEnabled?: boolean;
5128
+ /** @description Alias of isEnabled (either is accepted). */
5129
+ enabled?: boolean;
5130
+ label?: string;
5131
+ billingLabel?: string;
5132
+ displayOrder?: number;
5133
+ isDefault?: boolean;
5134
+ };
4772
5135
  UpdatePipelineStageBody: {
4773
5136
  label?: string;
4774
5137
  hidden?: boolean;
4775
5138
  };
5139
+ UpdatePlanBody: {
5140
+ name?: string;
5141
+ description?: string;
5142
+ /** @description Publish/unpublish the plan. */
5143
+ isPublic?: boolean;
5144
+ isRecommended?: boolean;
5145
+ /** @description Archive the plan (soft-delete). There is no hard DELETE. */
5146
+ isArchived?: boolean;
5147
+ displayOrder?: number;
5148
+ };
4776
5149
  UpdateRedirectBody: {
4777
5150
  /** @description Source path to match, for example `/old-careers`. */
4778
5151
  fromPath?: string;