@cavuno/board 4.65.0 → 4.67.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 (43) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/dist/{_spec-CIufstif.d.mts → _spec-BehBmeHK.d.mts} +131 -1
  3. package/dist/{_spec-CIufstif.d.ts → _spec-BehBmeHK.d.ts} +131 -1
  4. package/dist/{blog-DuNJLfIh.d.ts → blog-BLpOmpyQ.d.ts} +1 -1
  5. package/dist/{blog-teDJ9KaO.d.mts → blog-BmfbjijG.d.mts} +1 -1
  6. package/dist/{board-DZNCHGgl.d.mts → board-CXd9Me7_.d.mts} +2 -2
  7. package/dist/{board-iCHYuNhr.d.ts → board-dV_3NXAI.d.ts} +2 -2
  8. package/dist/{breadcrumbs-Bt3oNIAx.d.mts → breadcrumbs-Cu_SPdRA.d.mts} +2 -2
  9. package/dist/{breadcrumbs-DYGo0yB9.d.ts → breadcrumbs-PEsRCVwI.d.ts} +2 -2
  10. package/dist/browser/cavuno-board.global.min.js +1 -1
  11. package/dist/{chunk-H3YIWHXR.mjs → chunk-ZA5TZ6UH.mjs} +5 -0
  12. package/dist/filters.d.mts +2 -2
  13. package/dist/filters.d.ts +2 -2
  14. package/dist/format.d.mts +4 -4
  15. package/dist/format.d.ts +4 -4
  16. package/dist/index.d.mts +90 -15
  17. package/dist/index.d.ts +90 -15
  18. package/dist/index.js +84 -10
  19. package/dist/index.mjs +80 -11
  20. package/dist/{jobs-CbXbDBij.d.mts → jobs-CbTUedOr.d.mts} +1 -1
  21. package/dist/{jobs-DM_QMccX.d.ts → jobs-D2mKA65F.d.ts} +1 -1
  22. package/dist/{search-B7x4qt9A.d.ts → search-CHejx_k7.d.ts} +1 -1
  23. package/dist/{search-PrqcJMft.d.mts → search-CxUViZsz.d.mts} +1 -1
  24. package/dist/{seo-ohehUCzN.d.mts → seo-CWa4rTf7.d.mts} +1 -1
  25. package/dist/{seo-C1Br7ygq.d.ts → seo-DYyQ8NTh.d.ts} +1 -1
  26. package/dist/seo-files.d.mts +2 -2
  27. package/dist/seo-files.d.ts +2 -2
  28. package/dist/seo.d.mts +6 -6
  29. package/dist/seo.d.ts +6 -6
  30. package/dist/server.d.mts +6 -6
  31. package/dist/server.d.ts +6 -6
  32. package/dist/server.mjs +1 -1
  33. package/dist/sitemap.d.mts +6 -6
  34. package/dist/sitemap.d.ts +6 -6
  35. package/dist/sitemap.mjs +1 -1
  36. package/dist/suggest.d.mts +2 -2
  37. package/dist/suggest.d.ts +2 -2
  38. package/package.json +1 -1
  39. package/skills/cavuno-board-account/SKILL.md +11 -0
  40. package/skills/cavuno-board-collections/SKILL.md +31 -2
  41. package/skills/cavuno-board-filters/SKILL.md +12 -4
  42. package/skills/cavuno-board-post-a-job/SKILL.md +54 -5
  43. package/skills/manifest.json +2 -2
package/CHANGELOG.md CHANGED
@@ -3,6 +3,54 @@
3
3
  This changelog records changes that affect Board API compatibility, exported
4
4
  types, runtime behavior, or supported integration patterns.
5
5
 
6
+ ## 4.67.0 — 2026-11-11
7
+
8
+ - Job seekers can fill their own image gallery and file profile fields: new
9
+ `board.me.profile.uploadCustomFieldFile(fieldKey, file)` uploads one file
10
+ (up to 10 MB; galleries take JPEG, PNG, WebP or GIF) to a field the profile
11
+ owner can edit and returns it as a draft. Save its `id` with
12
+ `board.me.profile.updateCustomFields` to attach it; drafts never saved are
13
+ deleted after 24 hours. New error codes `candidate_custom_field_not_found`
14
+ (404) and `candidate_custom_field_not_editable` (403).
15
+ - Talent profile and directory reads, and the job seeker's own custom-field
16
+ reads, return `customFieldMedia`: the files of public image gallery and file
17
+ fields with signed links that expire after at least 24 hours. Redacted
18
+ previews return none.
19
+ - New `board.collections.entries(key)` lists the active entries of a
20
+ collection the operator made public, with only its public fields. A
21
+ collection that is not public returns `collections_not_found`.
22
+
23
+ ## 4.66.0 — 2026-11-11
24
+
25
+ - Embedded checkout for paid job postings: send `checkoutUiMode:
26
+ 'embedded_page'` to `board.jobPosting.submit` and a paid plan returns
27
+ `status: 'embedded_checkout'` with the `clientSecret`, publishable key and
28
+ connected account to mount Stripe Embedded Checkout. `hosted_page` stays
29
+ the default.
30
+ - New `board.jobPosting.getCheckout(sessionId)` reads a posting's checkout
31
+ outcome: `awaiting_payment`, `processing`, `paid`, `payment_failed` or
32
+ `canceled`, with `jobStatus` and, once live, `jobUrl`. It answers
33
+ `GET /boards/{identifier}/job-postings/checkout/{sessionId}`, and an unknown
34
+ session returns `job_posting_checkout_not_found`.
35
+ - Categories carry `totalJobCount`, the published jobs on the category or any
36
+ subcategory, each job once. `board.taxonomy.categories.list` accepts
37
+ `sort: 'totalJobCount'`, which also lists a parent with no jobs of its own.
38
+ A parent category is listed while any subcategory has published jobs.
39
+ - `GET`, `PUT` and `DELETE /sdk-frontend` register the URL your own frontend
40
+ serves the board on, so board links, auth emails, OAuth completion and
41
+ checkout returns point at it.
42
+ - `GET /contacts`, `GET /contacts/{id}`, `GET /contacts/{id}/emails` and
43
+ `GET /contacts/{id}/activity` read the board's contacts, their emails and
44
+ their activity.
45
+ - `GET /domains/{id}/dns` checks a domain's live DNS records.
46
+ - `GET /settings` and `PATCH /settings` take `mcpEnabled` and
47
+ `mcpDisabledTools`, to switch the board's MCP server off or leave out
48
+ individual tools.
49
+ - `GET /taxonomies/retag` and `POST /taxonomies/retag` re-tag live jobs (or,
50
+ for markets, companies with live jobs) against a list the board manages,
51
+ once every 24 hours per list. `/taxonomies/settings` takes
52
+ `listDescription`, one sentence on what each list means.
53
+
6
54
  ## 4.65.0 — 2026-11-09
7
55
 
8
56
  - Board MCP server: every board on a plan with API access serves a public,
@@ -1214,6 +1214,11 @@ interface components {
1214
1214
  }[];
1215
1215
  };
1216
1216
  colorMode?: string;
1217
+ /**
1218
+ * @description How a paid plan is checked out. `hosted_page` (the default) returns `status: checkout` with a Stripe-hosted `checkoutUrl`. `embedded_page` returns `status: embedded_checkout` with a client secret to mount Stripe Embedded Checkout on your own page; cards complete in place, and payment methods that need a redirect return to the board origin's `/post/success`.
1219
+ * @enum {string}
1220
+ */
1221
+ checkoutUiMode?: "hosted_page" | "embedded_page";
1217
1222
  };
1218
1223
  CreatePipelineStageBody: {
1219
1224
  /** @description The job whose pipeline gains the stage. */
@@ -2046,6 +2051,24 @@ interface components {
2046
2051
  object: "job_posting_billing_verification";
2047
2052
  success: boolean;
2048
2053
  };
2054
+ JobPostingCheckoutStatus: {
2055
+ /** @enum {string} */
2056
+ object: "job_posting_checkout_status";
2057
+ /**
2058
+ * @description `awaiting_payment` until Stripe confirms the payment to Cavuno, usually within seconds (poll briefly), `processing` while a delayed payment such as a bank debit clears (days), `paid` once it has, `payment_failed` when that delayed payment failed (the job stays a draft until a new checkout is paid), `canceled` when the checkout expired unpaid.
2059
+ * @enum {string}
2060
+ */
2061
+ status: "awaiting_payment" | "processing" | "paid" | "payment_failed" | "canceled";
2062
+ jobId: string;
2063
+ jobTitle: string;
2064
+ /**
2065
+ * @description `published` once the job is live, `pending_approval` while the board reviews it, `unpublished` otherwise (before payment, or taken down).
2066
+ * @enum {string}
2067
+ */
2068
+ jobStatus: "published" | "pending_approval" | "unpublished";
2069
+ /** @description `published` only: the job's public URL on the board. */
2070
+ jobUrl: string | null;
2071
+ };
2049
2072
  JobPostingLogo: {
2050
2073
  /** @enum {string} */
2051
2074
  object: "job_posting_logo";
@@ -2085,6 +2108,19 @@ interface components {
2085
2108
  status: "checkout";
2086
2109
  checkoutUrl: string;
2087
2110
  jobId: string;
2111
+ } | {
2112
+ /** @enum {string} */
2113
+ object: "job_posting_result";
2114
+ /** @enum {string} */
2115
+ status: "embedded_checkout";
2116
+ /** @description The Checkout Session client secret for `stripe.initEmbeddedCheckout`. The session expires after 24 hours unless paid. */
2117
+ clientSecret: string;
2118
+ sessionId: string;
2119
+ /** @description The board's connected Stripe account; pass it as `stripeAccount` to `loadStripe`. */
2120
+ stripeAccountId: string;
2121
+ /** @description The Stripe publishable key for `loadStripe`. */
2122
+ publishableKey: string;
2123
+ jobId: string;
2088
2124
  } | {
2089
2125
  /** @enum {string} */
2090
2126
  object: "job_posting_result";
@@ -2320,6 +2356,12 @@ interface components {
2320
2356
  /** @description The target stage id. */
2321
2357
  stageId: string;
2322
2358
  };
2359
+ MyCandidateProfileFieldValuesResponse: components["schemas"]["ProfileFieldValuesResponse"] & {
2360
+ /** @description Resolved files for the candidate’s saved `image_gallery` and `file` values, keyed by field key like `values`, in the stored order, including private fields. Each file `id` matches a value in `values`. `url` is a signed link for the profile owner that expires after at least 24 hours, so read it from the response rather than storing it. Unsaved uploads are not listed. Fields with no files are omitted. */
2361
+ customFieldMedia: {
2362
+ [key: string]: components["schemas"]["ProfileFieldMedia"][];
2363
+ };
2364
+ };
2323
2365
  MyItemVerification: components["schemas"]["ItemVerification"] & {
2324
2366
  /** @description The verification's id. For an item with no verification yet (`unverified`), its `itemKey`. */
2325
2367
  id?: string;
@@ -3008,6 +3050,84 @@ interface components {
3008
3050
  youtubeUrl: string | null;
3009
3051
  };
3010
3052
  };
3053
+ PublicCollectionEntry: {
3054
+ /** @description The entry's ID. */
3055
+ id: string;
3056
+ /** @description The entry's name. */
3057
+ name: string;
3058
+ /** @description URL-safe identifier, unique within the collection. Changing it keeps the previous value reserved. */
3059
+ slug?: string;
3060
+ /** @description The entry's logo: the image in the collection's logo field when that field is public, or a legacy logo URL on older entries. Absent when the entry has neither. */
3061
+ logoUrl?: string;
3062
+ /** @description The collection's public field definitions in display order. Take labels and select options from here. */
3063
+ fields: {
3064
+ key: string;
3065
+ label: string;
3066
+ /** @enum {string} */
3067
+ type: "short_text" | "long_text" | "rich_text" | "single_select" | "multi_select" | "boolean" | "number" | "date" | "url" | "email" | "phone" | "image" | "image_gallery" | "file" | "reference";
3068
+ helpText?: string;
3069
+ options?: {
3070
+ key: string;
3071
+ label: string;
3072
+ }[];
3073
+ }[];
3074
+ /** @description The entry's values, keyed by public field key. Media values are `{ id, name, contentType, sizeBytes, url }` objects (an array for an image gallery). Reference values are in `references` instead. A field with no value is absent. */
3075
+ values: {
3076
+ [key: string]: string | string[] | boolean | number | {
3077
+ id: string;
3078
+ name: string;
3079
+ contentType: string;
3080
+ sizeBytes: number;
3081
+ url: string;
3082
+ } | {
3083
+ id: string;
3084
+ name: string;
3085
+ contentType: string;
3086
+ sizeBytes: number;
3087
+ url: string;
3088
+ }[];
3089
+ };
3090
+ /** @description Entries that public reference fields point at, keyed by field key. Always an array, even for a single reference. */
3091
+ references?: {
3092
+ [key: string]: {
3093
+ id: string;
3094
+ name: string;
3095
+ /** @description URL-safe identifier, unique within the collection. Changing it keeps the previous value reserved. */
3096
+ slug?: string;
3097
+ fields: {
3098
+ key: string;
3099
+ label: string;
3100
+ /** @enum {string} */
3101
+ type: "short_text" | "long_text" | "rich_text" | "single_select" | "multi_select" | "boolean" | "number" | "date" | "url" | "email" | "phone" | "image" | "image_gallery" | "file" | "reference";
3102
+ helpText?: string;
3103
+ options?: {
3104
+ key: string;
3105
+ label: string;
3106
+ }[];
3107
+ }[];
3108
+ values: {
3109
+ [key: string]: string | string[] | boolean | number | {
3110
+ id: string;
3111
+ name: string;
3112
+ contentType: string;
3113
+ sizeBytes: number;
3114
+ url: string;
3115
+ } | {
3116
+ id: string;
3117
+ name: string;
3118
+ contentType: string;
3119
+ sizeBytes: number;
3120
+ url: string;
3121
+ }[];
3122
+ };
3123
+ }[];
3124
+ };
3125
+ };
3126
+ PublicCollectionEntryList: {
3127
+ data: components["schemas"]["PublicCollectionEntry"][];
3128
+ /** @description Pass as `cursor` for the next page; null on the last page. */
3129
+ nextCursor: string | null;
3130
+ };
3011
3131
  PublicCompaniesSearchBody: {
3012
3132
  /** @description Free-text search query matched against company name. Up to 200 characters. */
3013
3133
  query?: string;
@@ -3562,8 +3682,10 @@ interface components {
3562
3682
  canonicalSlug: string;
3563
3683
  /** @description Board-language name with source-name fallback. */
3564
3684
  displayName: string;
3565
- /** @description Live published-job count for this term on the board. Maintained as jobs publish and expire — not a tally of the current list page. */
3685
+ /** @description Live published-job count for this term on the board. Maintained as jobs publish and expire — not a tally of the current list page. For a category, only jobs tagged with the category itself, so a parent whose jobs all sit on its children has `0`; see `totalJobCount`. */
3566
3686
  jobCount: number;
3687
+ /** @description Live jobs on this category or any descendant, each job once. Present on categories; equals `jobCount` for a category with no children. Absent on skills. */
3688
+ totalJobCount?: number;
3567
3689
  };
3568
3690
  PublicVerifyBoardPasswordBody: {
3569
3691
  /** @description The board password. */
@@ -4366,6 +4488,10 @@ interface components {
4366
4488
  customFieldValues: {
4367
4489
  [key: string]: string | number | boolean | string[];
4368
4490
  };
4491
+ /** @description Resolved files for public `image_gallery` and `file` candidate custom fields, keyed by field key like `customFieldValues`, in the stored order. Each file `id` matches a value in `customFieldValues`. `url` is a signed link that expires after at least 24 hours. Anyone holding it can load the file until then, or until the profile is hidden, the field made private or the board password changed, so read it from the response rather than storing or sharing it. The candidate’s own read returns owner links instead, which also load while the profile is hidden or the field is private. Empty on redacted previews, and on an `employers_only` board for viewers other than approved employers and the candidate. Fields with no files are omitted. */
4492
+ customFieldMedia: {
4493
+ [key: string]: components["schemas"]["ProfileFieldMedia"][];
4494
+ };
4369
4495
  objectReferences: components["schemas"]["ResolvedProfileObjectReference"][];
4370
4496
  /**
4371
4497
  * @description Roughly when the candidate was last active on the board: `today` (within 24 hours), `this_week` (7 days), `this_month` (30 days), `last_3_months` (90 days) or `over_3_months`, counted back from the request. Only returned to a signed-in employer on this board, and only when the candidate’s job search status is `actively_looking` or `open_to_offers`; `null` otherwise. The exact time is never exposed.
@@ -4475,6 +4601,10 @@ interface components {
4475
4601
  customFieldValues: {
4476
4602
  [key: string]: string | number | boolean | string[];
4477
4603
  };
4604
+ /** @description Resolved files for public `image_gallery` and `file` candidate custom fields, keyed by field key like `customFieldValues`, in the stored order. Each file `id` matches a value in `customFieldValues`. `url` is a signed link that expires after at least 24 hours. Anyone holding it can load the file until then, or until the profile is hidden, the field made private or the board password changed, so read it from the response rather than storing or sharing it. The candidate’s own read returns owner links instead, which also load while the profile is hidden or the field is private. Empty on redacted previews, and on an `employers_only` board for viewers other than approved employers and the candidate. Fields with no files are omitted. */
4605
+ customFieldMedia: {
4606
+ [key: string]: components["schemas"]["ProfileFieldMedia"][];
4607
+ };
4478
4608
  objectReferences: components["schemas"]["ResolvedProfileObjectReference"][];
4479
4609
  /**
4480
4610
  * @description Roughly when the candidate was last active on the board: `today` (within 24 hours), `this_week` (7 days), `this_month` (30 days), `last_3_months` (90 days) or `over_3_months`, counted back from the request. Only returned to a signed-in employer on this board, and only when the candidate’s job search status is `actively_looking` or `open_to_offers`; `null` otherwise. The exact time is never exposed.
@@ -1214,6 +1214,11 @@ interface components {
1214
1214
  }[];
1215
1215
  };
1216
1216
  colorMode?: string;
1217
+ /**
1218
+ * @description How a paid plan is checked out. `hosted_page` (the default) returns `status: checkout` with a Stripe-hosted `checkoutUrl`. `embedded_page` returns `status: embedded_checkout` with a client secret to mount Stripe Embedded Checkout on your own page; cards complete in place, and payment methods that need a redirect return to the board origin's `/post/success`.
1219
+ * @enum {string}
1220
+ */
1221
+ checkoutUiMode?: "hosted_page" | "embedded_page";
1217
1222
  };
1218
1223
  CreatePipelineStageBody: {
1219
1224
  /** @description The job whose pipeline gains the stage. */
@@ -2046,6 +2051,24 @@ interface components {
2046
2051
  object: "job_posting_billing_verification";
2047
2052
  success: boolean;
2048
2053
  };
2054
+ JobPostingCheckoutStatus: {
2055
+ /** @enum {string} */
2056
+ object: "job_posting_checkout_status";
2057
+ /**
2058
+ * @description `awaiting_payment` until Stripe confirms the payment to Cavuno, usually within seconds (poll briefly), `processing` while a delayed payment such as a bank debit clears (days), `paid` once it has, `payment_failed` when that delayed payment failed (the job stays a draft until a new checkout is paid), `canceled` when the checkout expired unpaid.
2059
+ * @enum {string}
2060
+ */
2061
+ status: "awaiting_payment" | "processing" | "paid" | "payment_failed" | "canceled";
2062
+ jobId: string;
2063
+ jobTitle: string;
2064
+ /**
2065
+ * @description `published` once the job is live, `pending_approval` while the board reviews it, `unpublished` otherwise (before payment, or taken down).
2066
+ * @enum {string}
2067
+ */
2068
+ jobStatus: "published" | "pending_approval" | "unpublished";
2069
+ /** @description `published` only: the job's public URL on the board. */
2070
+ jobUrl: string | null;
2071
+ };
2049
2072
  JobPostingLogo: {
2050
2073
  /** @enum {string} */
2051
2074
  object: "job_posting_logo";
@@ -2085,6 +2108,19 @@ interface components {
2085
2108
  status: "checkout";
2086
2109
  checkoutUrl: string;
2087
2110
  jobId: string;
2111
+ } | {
2112
+ /** @enum {string} */
2113
+ object: "job_posting_result";
2114
+ /** @enum {string} */
2115
+ status: "embedded_checkout";
2116
+ /** @description The Checkout Session client secret for `stripe.initEmbeddedCheckout`. The session expires after 24 hours unless paid. */
2117
+ clientSecret: string;
2118
+ sessionId: string;
2119
+ /** @description The board's connected Stripe account; pass it as `stripeAccount` to `loadStripe`. */
2120
+ stripeAccountId: string;
2121
+ /** @description The Stripe publishable key for `loadStripe`. */
2122
+ publishableKey: string;
2123
+ jobId: string;
2088
2124
  } | {
2089
2125
  /** @enum {string} */
2090
2126
  object: "job_posting_result";
@@ -2320,6 +2356,12 @@ interface components {
2320
2356
  /** @description The target stage id. */
2321
2357
  stageId: string;
2322
2358
  };
2359
+ MyCandidateProfileFieldValuesResponse: components["schemas"]["ProfileFieldValuesResponse"] & {
2360
+ /** @description Resolved files for the candidate’s saved `image_gallery` and `file` values, keyed by field key like `values`, in the stored order, including private fields. Each file `id` matches a value in `values`. `url` is a signed link for the profile owner that expires after at least 24 hours, so read it from the response rather than storing it. Unsaved uploads are not listed. Fields with no files are omitted. */
2361
+ customFieldMedia: {
2362
+ [key: string]: components["schemas"]["ProfileFieldMedia"][];
2363
+ };
2364
+ };
2323
2365
  MyItemVerification: components["schemas"]["ItemVerification"] & {
2324
2366
  /** @description The verification's id. For an item with no verification yet (`unverified`), its `itemKey`. */
2325
2367
  id?: string;
@@ -3008,6 +3050,84 @@ interface components {
3008
3050
  youtubeUrl: string | null;
3009
3051
  };
3010
3052
  };
3053
+ PublicCollectionEntry: {
3054
+ /** @description The entry's ID. */
3055
+ id: string;
3056
+ /** @description The entry's name. */
3057
+ name: string;
3058
+ /** @description URL-safe identifier, unique within the collection. Changing it keeps the previous value reserved. */
3059
+ slug?: string;
3060
+ /** @description The entry's logo: the image in the collection's logo field when that field is public, or a legacy logo URL on older entries. Absent when the entry has neither. */
3061
+ logoUrl?: string;
3062
+ /** @description The collection's public field definitions in display order. Take labels and select options from here. */
3063
+ fields: {
3064
+ key: string;
3065
+ label: string;
3066
+ /** @enum {string} */
3067
+ type: "short_text" | "long_text" | "rich_text" | "single_select" | "multi_select" | "boolean" | "number" | "date" | "url" | "email" | "phone" | "image" | "image_gallery" | "file" | "reference";
3068
+ helpText?: string;
3069
+ options?: {
3070
+ key: string;
3071
+ label: string;
3072
+ }[];
3073
+ }[];
3074
+ /** @description The entry's values, keyed by public field key. Media values are `{ id, name, contentType, sizeBytes, url }` objects (an array for an image gallery). Reference values are in `references` instead. A field with no value is absent. */
3075
+ values: {
3076
+ [key: string]: string | string[] | boolean | number | {
3077
+ id: string;
3078
+ name: string;
3079
+ contentType: string;
3080
+ sizeBytes: number;
3081
+ url: string;
3082
+ } | {
3083
+ id: string;
3084
+ name: string;
3085
+ contentType: string;
3086
+ sizeBytes: number;
3087
+ url: string;
3088
+ }[];
3089
+ };
3090
+ /** @description Entries that public reference fields point at, keyed by field key. Always an array, even for a single reference. */
3091
+ references?: {
3092
+ [key: string]: {
3093
+ id: string;
3094
+ name: string;
3095
+ /** @description URL-safe identifier, unique within the collection. Changing it keeps the previous value reserved. */
3096
+ slug?: string;
3097
+ fields: {
3098
+ key: string;
3099
+ label: string;
3100
+ /** @enum {string} */
3101
+ type: "short_text" | "long_text" | "rich_text" | "single_select" | "multi_select" | "boolean" | "number" | "date" | "url" | "email" | "phone" | "image" | "image_gallery" | "file" | "reference";
3102
+ helpText?: string;
3103
+ options?: {
3104
+ key: string;
3105
+ label: string;
3106
+ }[];
3107
+ }[];
3108
+ values: {
3109
+ [key: string]: string | string[] | boolean | number | {
3110
+ id: string;
3111
+ name: string;
3112
+ contentType: string;
3113
+ sizeBytes: number;
3114
+ url: string;
3115
+ } | {
3116
+ id: string;
3117
+ name: string;
3118
+ contentType: string;
3119
+ sizeBytes: number;
3120
+ url: string;
3121
+ }[];
3122
+ };
3123
+ }[];
3124
+ };
3125
+ };
3126
+ PublicCollectionEntryList: {
3127
+ data: components["schemas"]["PublicCollectionEntry"][];
3128
+ /** @description Pass as `cursor` for the next page; null on the last page. */
3129
+ nextCursor: string | null;
3130
+ };
3011
3131
  PublicCompaniesSearchBody: {
3012
3132
  /** @description Free-text search query matched against company name. Up to 200 characters. */
3013
3133
  query?: string;
@@ -3562,8 +3682,10 @@ interface components {
3562
3682
  canonicalSlug: string;
3563
3683
  /** @description Board-language name with source-name fallback. */
3564
3684
  displayName: string;
3565
- /** @description Live published-job count for this term on the board. Maintained as jobs publish and expire — not a tally of the current list page. */
3685
+ /** @description Live published-job count for this term on the board. Maintained as jobs publish and expire — not a tally of the current list page. For a category, only jobs tagged with the category itself, so a parent whose jobs all sit on its children has `0`; see `totalJobCount`. */
3566
3686
  jobCount: number;
3687
+ /** @description Live jobs on this category or any descendant, each job once. Present on categories; equals `jobCount` for a category with no children. Absent on skills. */
3688
+ totalJobCount?: number;
3567
3689
  };
3568
3690
  PublicVerifyBoardPasswordBody: {
3569
3691
  /** @description The board password. */
@@ -4366,6 +4488,10 @@ interface components {
4366
4488
  customFieldValues: {
4367
4489
  [key: string]: string | number | boolean | string[];
4368
4490
  };
4491
+ /** @description Resolved files for public `image_gallery` and `file` candidate custom fields, keyed by field key like `customFieldValues`, in the stored order. Each file `id` matches a value in `customFieldValues`. `url` is a signed link that expires after at least 24 hours. Anyone holding it can load the file until then, or until the profile is hidden, the field made private or the board password changed, so read it from the response rather than storing or sharing it. The candidate’s own read returns owner links instead, which also load while the profile is hidden or the field is private. Empty on redacted previews, and on an `employers_only` board for viewers other than approved employers and the candidate. Fields with no files are omitted. */
4492
+ customFieldMedia: {
4493
+ [key: string]: components["schemas"]["ProfileFieldMedia"][];
4494
+ };
4369
4495
  objectReferences: components["schemas"]["ResolvedProfileObjectReference"][];
4370
4496
  /**
4371
4497
  * @description Roughly when the candidate was last active on the board: `today` (within 24 hours), `this_week` (7 days), `this_month` (30 days), `last_3_months` (90 days) or `over_3_months`, counted back from the request. Only returned to a signed-in employer on this board, and only when the candidate’s job search status is `actively_looking` or `open_to_offers`; `null` otherwise. The exact time is never exposed.
@@ -4475,6 +4601,10 @@ interface components {
4475
4601
  customFieldValues: {
4476
4602
  [key: string]: string | number | boolean | string[];
4477
4603
  };
4604
+ /** @description Resolved files for public `image_gallery` and `file` candidate custom fields, keyed by field key like `customFieldValues`, in the stored order. Each file `id` matches a value in `customFieldValues`. `url` is a signed link that expires after at least 24 hours. Anyone holding it can load the file until then, or until the profile is hidden, the field made private or the board password changed, so read it from the response rather than storing or sharing it. The candidate’s own read returns owner links instead, which also load while the profile is hidden or the field is private. Empty on redacted previews, and on an `employers_only` board for viewers other than approved employers and the candidate. Fields with no files are omitted. */
4605
+ customFieldMedia: {
4606
+ [key: string]: components["schemas"]["ProfileFieldMedia"][];
4607
+ };
4478
4608
  objectReferences: components["schemas"]["ResolvedProfileObjectReference"][];
4479
4609
  /**
4480
4610
  * @description Roughly when the candidate was last active on the board: `today` (within 24 hours), `this_week` (7 days), `this_month` (30 days), `last_3_months` (90 days) or `over_3_months`, counted back from the request. Only returned to a signed-in employer on this board, and only when the candidate’s job search status is `actively_looking` or `open_to_offers`; `null` otherwise. The exact time is never exposed.
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-CIufstif.js';
1
+ import { S as Schemas } from './_spec-BehBmeHK.js';
2
2
 
3
3
  /** Author shape embedded on posts (no `object` discriminator). */
4
4
  type BlogAuthorEmbed = Schemas['PublicBlogAuthorEmbed'];
@@ -1,4 +1,4 @@
1
- import { S as Schemas } from './_spec-CIufstif.mjs';
1
+ import { S as Schemas } from './_spec-BehBmeHK.mjs';
2
2
 
3
3
  /** Author shape embedded on posts (no `object` discriminator). */
4
4
  type BlogAuthorEmbed = Schemas['PublicBlogAuthorEmbed'];
@@ -1,5 +1,5 @@
1
- import { S as Schemas } from './_spec-CIufstif.mjs';
2
- import { L as ListEnvelope, v as RelatedSearch, b as CustomFieldFilter, O as ObjectReferenceFilter, a as JobCapability } from './jobs-CbXbDBij.mjs';
1
+ import { S as Schemas } from './_spec-BehBmeHK.mjs';
2
+ import { L as ListEnvelope, v as RelatedSearch, b as CustomFieldFilter, O as ObjectReferenceFilter, a as JobCapability } from './jobs-CbTUedOr.mjs';
3
3
 
4
4
  type PublicCompany = Schemas['CompanyPublic'];
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { S as Schemas } from './_spec-CIufstif.js';
2
- import { L as ListEnvelope, v as RelatedSearch, b as CustomFieldFilter, O as ObjectReferenceFilter, a as JobCapability } from './jobs-DM_QMccX.js';
1
+ import { S as Schemas } from './_spec-BehBmeHK.js';
2
+ import { L as ListEnvelope, v as RelatedSearch, b as CustomFieldFilter, O as ObjectReferenceFilter, a as JobCapability } from './jobs-D2mKA65F.js';
3
3
 
4
4
  type PublicCompany = Schemas['CompanyPublic'];
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { P as PublicBoard, a as CompanyCategorySalary, b as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './board-DZNCHGgl.mjs';
2
- import { P as PublicJob } from './jobs-CbXbDBij.mjs';
1
+ import { P as PublicBoard, a as CompanyCategorySalary, b as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './board-CXd9Me7_.mjs';
2
+ import { P as PublicJob } from './jobs-CbTUedOr.mjs';
3
3
 
4
4
  /**
5
5
  * Wire enum for `salaryTimeframe`. Defined here (not re-exported from any
@@ -1,5 +1,5 @@
1
- import { P as PublicBoard, a as CompanyCategorySalary, b as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './board-iCHYuNhr.js';
2
- import { P as PublicJob } from './jobs-DM_QMccX.js';
1
+ import { P as PublicBoard, a as CompanyCategorySalary, b as CompanySalary, L as LocationSalaryDetail, S as SkillSalaryDetail, T as TitleSalaryDetail } from './board-dV_3NXAI.js';
2
+ import { P as PublicJob } from './jobs-D2mKA65F.js';
3
3
 
4
4
  /**
5
5
  * Wire enum for `salaryTimeframe`. Defined here (not re-exported from any