@cavuno/board 4.26.0 → 4.27.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 (50) hide show
  1. package/CHANGELOG.md +89 -0
  2. package/dist/{_spec-EgN7VmAI.d.mts → _spec-B_pBNVUd.d.mts} +487 -47
  3. package/dist/{_spec-EgN7VmAI.d.ts → _spec-B_pBNVUd.d.ts} +487 -47
  4. package/dist/bin.mjs +7989 -10
  5. package/dist/{blog-BIjFcNcm.d.ts → blog-DzGRUsj5.d.ts} +1 -1
  6. package/dist/{blog-T7gQ0ciz.d.mts → blog-fhXRik6k.d.mts} +1 -1
  7. package/dist/{board-q0svBKW3.d.mts → board-DEiEHcpe.d.mts} +25 -4
  8. package/dist/{board-CsEAgsKh.d.ts → board-fVAXZ8T5.d.ts} +25 -4
  9. package/dist/{breadcrumbs-xuDid8BS.d.ts → breadcrumbs-DNaaP3xa.d.ts} +2 -2
  10. package/dist/{breadcrumbs-CFcCjuG7.d.mts → breadcrumbs-qE3CD--N.d.mts} +2 -2
  11. package/dist/browser/cavuno-board.global.min.js +1 -1
  12. package/dist/{chunk-DP2ZZZEO.mjs → chunk-DUTQOLOF.mjs} +1 -0
  13. package/dist/doctor.js +7989 -10
  14. package/dist/doctor.mjs +7989 -10
  15. package/dist/filters.d.mts +19 -3
  16. package/dist/filters.d.ts +19 -3
  17. package/dist/filters.js +10 -1
  18. package/dist/filters.mjs +10 -1
  19. package/dist/format.d.mts +4 -4
  20. package/dist/format.d.ts +4 -4
  21. package/dist/index.d.mts +173 -13
  22. package/dist/index.d.ts +173 -13
  23. package/dist/index.js +175 -23
  24. package/dist/index.mjs +175 -24
  25. package/dist/{jobs-ub3gywNQ.d.ts → jobs-BRysn2m0.d.ts} +25 -3
  26. package/dist/{jobs-CfrxlDMU.d.mts → jobs-R-h3A3kl.d.mts} +25 -3
  27. package/dist/{search-Dx1TiAZk.d.ts → search-BK_zHHNQ.d.ts} +1 -1
  28. package/dist/{search-DKS7OIn2.d.mts → search-BlB690ma.d.mts} +1 -1
  29. package/dist/{seo-CI3wLKUW.d.mts → seo-0mbZ7M_E.d.mts} +1 -1
  30. package/dist/{seo-BbG2Ujyo.d.ts → seo-C7gMl6Y7.d.ts} +1 -1
  31. package/dist/seo-files.d.mts +2 -2
  32. package/dist/seo-files.d.ts +2 -2
  33. package/dist/seo.d.mts +6 -6
  34. package/dist/seo.d.ts +6 -6
  35. package/dist/server.d.mts +6 -6
  36. package/dist/server.d.ts +6 -6
  37. package/dist/server.mjs +1 -1
  38. package/dist/sitemap.d.mts +6 -6
  39. package/dist/sitemap.d.ts +6 -6
  40. package/dist/sitemap.mjs +1 -1
  41. package/dist/suggest.d.mts +2 -2
  42. package/dist/suggest.d.ts +2 -2
  43. package/package.json +2 -1
  44. package/skills/cavuno-board-account/SKILL.md +95 -1
  45. package/skills/cavuno-board-collections/SKILL.md +148 -0
  46. package/skills/cavuno-board-companies/SKILL.md +43 -1
  47. package/skills/cavuno-board-filters/SKILL.md +71 -1
  48. package/skills/cavuno-board-paywall/SKILL.md +5 -2
  49. package/skills/cavuno-board-post-a-job/SKILL.md +64 -0
  50. package/skills/manifest.json +11 -4
@@ -4,11 +4,8 @@ interface components {
4
4
  token: string;
5
5
  };
6
6
  AccessCheckoutBody: {
7
- /**
8
- * @description The offer tier to purchase (from `GET /paywall/offers/enabled`).
9
- * @enum {string}
10
- */
11
- offerKey: "daily" | "weekly" | "monthly" | "quarterly" | "yearly" | "lifetime";
7
+ /** @description The opaque offer key returned by `GET /paywall/offers/enabled` (a plan ID or legacy tier key). */
8
+ offerKey: string;
12
9
  /** @description Relative path Stripe returns the buyer to on completion; `session_id` is appended. */
13
10
  returnPath: string;
14
11
  /** @enum {string} */
@@ -276,6 +273,89 @@ interface components {
276
273
  BoardAuthVerifyEmailBody: {
277
274
  token: string;
278
275
  };
276
+ BoardFormBuiltinField: {
277
+ /**
278
+ * @description discriminator enum property added by openapi-typescript
279
+ * @enum {string}
280
+ */
281
+ kind: "builtin";
282
+ /** @description The built-in field, rendered by your own control for that key. Job: `employmentType`, `seniority`, `title`, `workArrangement`, `location`, `remoteEligibility`, `description`, `salary`, `applyMethod`, `company`. Company: `name`, `website`, `summary`, `xUrl`, `linkedinUrl`, `facebookUrl`, `logo`, `description`. Talent: `name`, `email`, `avatar`, `headline`, `location`, `jobSearchStatus`, `bio`, `experience`, `education`, `skills`, `languages`. New built-ins may be added; skip keys you do not recognise. */
283
+ key: string;
284
+ /** @description Whether the form shows this field. Omit hidden fields from the form entirely; any value already stored on a record is kept. */
285
+ visible: boolean;
286
+ /** @description Whether a submission must fill this field. Always `false` for a hidden field. Validate it in the form before submitting. */
287
+ required: boolean;
288
+ /** @description A locked built-in is always shown and required: render it wherever it sits in the order, without a way to skip it. */
289
+ locked: boolean;
290
+ lockReason: components["schemas"]["FormFieldLockReason"];
291
+ };
292
+ /** @description The operator's job, company and talent forms (Settings → Job form, Company profile, Talent profile) as ordered field lists. Render each list in order: built-ins by `key` with your own controls, custom and collection fields from the inlined `definition`. Skip entries with `visible: false`. Every field the board has appears exactly once, so a new custom field shows up at its position without code changes. */
293
+ BoardForms: {
294
+ /** @description The job posting form, in the order to render it. */
295
+ job: components["schemas"]["BoardJobFormField"][];
296
+ /** @description The company profile form, in the order to render it. Public profile fields only. */
297
+ company: components["schemas"]["BoardProfileFormField"][];
298
+ /** @description The candidate profile form, in the order to render it. Public profile fields only. */
299
+ talent: components["schemas"]["BoardProfileFormField"][];
300
+ };
301
+ BoardJobFormCollectionField: {
302
+ /**
303
+ * @description discriminator enum property added by openapi-typescript
304
+ * @enum {string}
305
+ */
306
+ kind: "collection";
307
+ /** @description The collection field key used in `collectionValues`. Fetch choices from /boards/{identifier}/job-fields/{fieldKey}/choices. */
308
+ key: string;
309
+ /** @description Whether the form shows this field. Omit hidden fields from the form entirely; any value already stored on a record is kept. */
310
+ visible: boolean;
311
+ /** @description Whether a submission must fill this field. Always `false` for a hidden field. Validate it in the form before submitting. */
312
+ required: boolean;
313
+ definition: components["schemas"]["JobCollectionFieldDefinition"];
314
+ };
315
+ BoardJobFormCustomField: {
316
+ /**
317
+ * @description discriminator enum property added by openapi-typescript
318
+ * @enum {string}
319
+ */
320
+ kind: "custom";
321
+ /** @description The custom field key used in `customFieldValues`. */
322
+ key: string;
323
+ /** @description Whether the form shows this field. Omit hidden fields from the form entirely; any value already stored on a record is kept. */
324
+ visible: boolean;
325
+ /** @description Whether a submission must fill this field. Always `false` for a hidden field. Validate it in the form before submitting. */
326
+ required: boolean;
327
+ definition: components["schemas"]["CustomFieldDefinition"];
328
+ };
329
+ BoardJobFormField: components["schemas"]["BoardFormBuiltinField"] | components["schemas"]["BoardJobFormCustomField"] | components["schemas"]["BoardJobFormCollectionField"];
330
+ BoardProfileFormCollectionField: {
331
+ /**
332
+ * @description discriminator enum property added by openapi-typescript
333
+ * @enum {string}
334
+ */
335
+ kind: "collection";
336
+ /** @description The catalog field key. Fetch choices from /boards/{identifier}/profile-fields/{entity}/{fieldKey}/choices, or the signed-in owner choices endpoint. */
337
+ key: string;
338
+ /** @description Whether the form shows this field. Omit hidden fields from the form entirely; any value already stored on a record is kept. */
339
+ visible: boolean;
340
+ /** @description Whether a submission must fill this field. Always `false` for a hidden field. Validate it in the form before submitting. */
341
+ required: boolean;
342
+ definition: components["schemas"]["ProfileObjectReferenceDefinition"];
343
+ };
344
+ BoardProfileFormCustomField: {
345
+ /**
346
+ * @description discriminator enum property added by openapi-typescript
347
+ * @enum {string}
348
+ */
349
+ kind: "custom";
350
+ /** @description The profile custom field key. */
351
+ key: string;
352
+ /** @description Whether the form shows this field. Omit hidden fields from the form entirely; any value already stored on a record is kept. */
353
+ visible: boolean;
354
+ /** @description Whether a submission must fill this field. Always `false` for a hidden field. Validate it in the form before submitting. */
355
+ required: boolean;
356
+ definition: components["schemas"]["ProfileCustomFieldDefinition"];
357
+ };
358
+ BoardProfileFormField: components["schemas"]["BoardFormBuiltinField"] | components["schemas"]["BoardProfileFormCustomField"] | components["schemas"]["BoardProfileFormCollectionField"];
279
359
  BoardSeo: {
280
360
  /** @enum {string} */
281
361
  object: "board_seo";
@@ -548,6 +628,12 @@ interface components {
548
628
  /** @description Number of jobs that contribute to this company's salary aggregates on the board (the salary sample size). `0` when there is no usable salary data — prefer this over fetching the full company-salary document just to decide whether to show a Salaries tab. Not the same as `publishedJobCount` (open roles without pay data stay at 0 here). */
549
629
  salarySampleCount: number;
550
630
  membership: components["schemas"]["PublicCompanyMembership"];
631
+ /** @description Values for public company custom fields, keyed by field key. Private and unknown fields are omitted. */
632
+ customFieldValues: {
633
+ [key: string]: string | number | boolean | string[];
634
+ };
635
+ /** @description Resolved public object references attached to this company. Private references are omitted. */
636
+ objectReferences: components["schemas"]["ResolvedProfileObjectReference"][];
551
637
  links: components["schemas"]["PublicCompanyLinks"];
552
638
  };
553
639
  CompanyPublicDetail: components["schemas"]["CompanyPublic"] & {
@@ -708,18 +794,18 @@ interface components {
708
794
  sessionKey: string;
709
795
  };
710
796
  CreateCompanyBody: {
711
- /** @description Public company website URL. Normalized to a canonical apex domain when stored. */
712
- website?: string;
713
- /** @description One-line summary of the company. Up to 280 characters. */
714
- summary?: string;
715
- /** @description Long-form description of the company. Up to 25,000 characters. */
716
- description?: string;
717
- /** @description X (Twitter) profile URL or handle. Stored as the canonical handle. */
718
- xUrl?: string;
719
- /** @description LinkedIn company page URL. */
720
- linkedinUrl?: string;
721
- /** @description Facebook company page URL. */
722
- facebookUrl?: string;
797
+ /** @description Public company website URL. Normalized to a canonical apex domain when stored. `null` or `""` means not set. */
798
+ website?: string | null;
799
+ /** @description One-line summary of the company. Up to 280 characters. `null` or `""` means not set. */
800
+ summary?: string | null;
801
+ /** @description Long-form description of the company, as HTML. Up to 25,000 characters. The HTML is sanitized on write: tags and attributes outside the supported formatting set (paragraphs, headings, lists, links, inline emphasis) are removed. Plain text without HTML tags is converted to paragraphs. `null` or `""` means not set. */
802
+ description?: string | null;
803
+ /** @description X (Twitter) profile URL or handle. Stored as the canonical handle. `null` or `""` means not set. */
804
+ xUrl?: string | null;
805
+ /** @description LinkedIn company page URL. `null` or `""` means not set. */
806
+ linkedinUrl?: string | null;
807
+ /** @description Facebook company page URL. `null` or `""` means not set. */
808
+ facebookUrl?: string | null;
723
809
  /** @description Canonical market slugs assigned to the company. Pass an empty array to clear all markets. */
724
810
  markets?: string[];
725
811
  /** @description The company's display name. */
@@ -866,11 +952,13 @@ interface components {
866
952
  key: string;
867
953
  /** @description Authoring-default label; the localized public string lives in the board template. */
868
954
  label: string;
955
+ /** @description Optional guidance displayed beside the field. */
956
+ helpText?: string;
869
957
  /**
870
- * @description Field type, which dictates the value: `short_text`/`long_text` → string; `single_select` → one option key; `multi_select` → array of option keys; `boolean` → boolean; `number` → number.
958
+ * @description Field type, which dictates the value: `short_text`/`long_text` → plain string; `rich_text` → sanitized basic HTML; `single_select` → one option key; `multi_select` → array of option keys; `boolean` → boolean; `number` → number.
871
959
  * @enum {string}
872
960
  */
873
- type: "short_text" | "long_text" | "single_select" | "multi_select" | "boolean" | "number";
961
+ type: "short_text" | "long_text" | "rich_text" | "single_select" | "multi_select" | "boolean" | "number";
874
962
  /** @description Present only for `single_select`/`multi_select`. A stored value is one (or, for multi, several) of these option `key`s — never a label. */
875
963
  options?: components["schemas"]["CustomFieldOption"][];
876
964
  /** @description When true, the value cannot be cleared or left empty on a write (rejected with `custom_field_required`). */
@@ -1038,7 +1126,7 @@ interface components {
1038
1126
  deletionEnabled: boolean;
1039
1127
  };
1040
1128
  EmployerCreateJobBody: {
1041
- /** @description Long-form description of the role. Up to 25,000 characters. */
1129
+ /** @description Long-form description of the role, as HTML. Up to 25,000 characters. The HTML is sanitized on write: tags and attributes outside the supported formatting set (paragraphs, headings, lists, links, inline emphasis) are removed. Plain text without HTML tags is converted to paragraphs. */
1042
1130
  description: string;
1043
1131
  /** @description URL-friendly slug for the job. Auto-generated from `title` when omitted. */
1044
1132
  slug?: string;
@@ -1048,10 +1136,10 @@ interface components {
1048
1136
  */
1049
1137
  employmentType?: "full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other";
1050
1138
  /**
1051
- * @description Whether the role is on-site, hybrid, or fully remote. **Never valid on its own:** `on_site` and `hybrid` require at least one `officeLocations` entry, and `remote` requires `remotePermits` (use `[{"type":"worldwide","value":"worldwide"}]` for anywhere; `remoteTimezones` then auto-derives on POST). Sending it alone returns `400`.
1139
+ * @description **Required.** Whether the role is on-site, hybrid, or fully remote: one of `on_site`, `hybrid`, `remote`. Omitting it or sending `null` returns `400`. It is not valid on its own either: `on_site` and `hybrid` require at least one `officeLocations` entry, and `remote` requires `remotePermits` (use `[{"type":"worldwide","value":"worldwide"}]` for anywhere; `remoteTimezones` then auto-derives on POST).
1052
1140
  * @enum {string}
1053
1141
  */
1054
- remoteOption?: "on_site" | "hybrid" | "remote";
1142
+ remoteOption: "on_site" | "hybrid" | "remote";
1055
1143
  /** @description Where remote candidates must hold work authorization. Each entry is the smallest relevant scope: `worldwide`, a `world_region` (EMEA / LATAM / NA / APAC), a `continent`, a `region`, a `subregion`, a `custom` group (e.g. `EU`), a `country` (ISO 3166-1 alpha-2), or a `subdivision` (ISO 3166-2). Subdivisions auto-imply their parent country in the derived `remoteWorkPermitCountryCodes` output. Worldwide is mutually exclusive with all other entries. The canonical `{type, value}` set is published at `GET /v1/taxonomies/remote-permits`. Pass `[]` to clear an existing constraint. */
1056
1144
  remotePermits?: {
1057
1145
  /** @enum {string} */
@@ -1075,19 +1163,19 @@ interface components {
1075
1163
  * @enum {string}
1076
1164
  */
1077
1165
  seniority?: "entry_level" | "associate" | "mid_level" | "senior" | "lead" | "principal" | "director" | "executive";
1078
- /** @description Where candidates apply. Accepts an HTTPS URL, a `mailto:` URI, or a bare email address (normalized to `mailto:` form). Omit to collect applications on the board (built-in applications). */
1079
- applicationUrl?: string;
1080
- /** @description Minimum salary, in `salaryCurrency` units. */
1081
- salaryMin?: number;
1082
- /** @description Maximum salary, in `salaryCurrency` units. */
1083
- salaryMax?: number;
1084
- /** @description Three-letter ISO 4217 currency code for `salaryMin` and `salaryMax`. */
1085
- salaryCurrency?: string;
1086
- /**
1087
- * @description Period the `salaryMin` and `salaryMax` figures are quoted against.
1088
- * @enum {string}
1166
+ /** @description Where candidates apply. Accepts an HTTPS URL, a `mailto:` URI, or a bare email address (normalized to `mailto:` form). Omit it or pass `null` to collect applications on the board (built-in applications). */
1167
+ applicationUrl?: string | null;
1168
+ /** @description Minimum salary, in `salaryCurrency` units. `null` means not set. When `salaryMin` or `salaryMax` is set, `salaryCurrency` and `salaryTimeframe` are both required; otherwise `400`. */
1169
+ salaryMin?: number | null;
1170
+ /** @description Maximum salary, in `salaryCurrency` units. `null` means not set. When `salaryMin` or `salaryMax` is set, `salaryCurrency` and `salaryTimeframe` are both required; otherwise `400`. */
1171
+ salaryMax?: number | null;
1172
+ /** @description Three-letter ISO 4217 currency code for `salaryMin` and `salaryMax`. `null` means not set. Required when `salaryMin` or `salaryMax` is set; optional otherwise. */
1173
+ salaryCurrency?: string | null;
1174
+ /**
1175
+ * @description Period the `salaryMin` and `salaryMax` figures are quoted against. `null` means not set. Required when `salaryMin` or `salaryMax` is set; optional otherwise.
1176
+ * @enum {string|null}
1089
1177
  */
1090
- salaryTimeframe?: "per_year" | "per_month" | "per_week" | "per_day" | "per_hour";
1178
+ salaryTimeframe?: "per_year" | "per_month" | "per_week" | "per_day" | "per_hour" | null;
1091
1179
  /** @description Up to 100 canonical skill slugs from `GET /v1/taxonomies/skills`. Every slug must exist in this account. */
1092
1180
  skills?: string[];
1093
1181
  /** @description Up to 100 canonical category slugs from `GET /v1/taxonomies/categories`. Every slug must exist in this account. */
@@ -1107,10 +1195,21 @@ interface components {
1107
1195
  inOfficeFrequency?: number;
1108
1196
  /** @description Physical office locations associated with the job. Prefer `{query: "City, Country"}` for free-form input; `{city, country, region?, locality?}` is also accepted when you already have structured fields. Each entry is resolved server-side; a country mismatch returns `400 jobs_unresolvable_location`. */
1109
1197
  officeLocations?: components["schemas"]["JobOfficeLocationInput"][];
1198
+ /** @description Collection-reference selections keyed by the configured job collection field key. Values are arrays of record IDs, including for single-select fields. On PATCH omitted keys are preserved; send null or an empty array to clear a field. */
1199
+ collectionValues?: {
1200
+ [key: string]: string[] | unknown;
1201
+ };
1202
+ /** @description Per-job wording for selected collection entries, only on fields whose definition has `allowOverrides`. At most one item per selected entry; an item for an entry that is not selected on the job is rejected with `400 jobs_constraint_violation`. The list replaces the job's stored overrides: on PATCH omit it to keep them and send `[]` to clear them all. Deselecting an entry through `collectionValues` drops its override. */
1203
+ collectionOverrides?: components["schemas"]["JobCollectionOverride"][];
1110
1204
  /** @description The job title. */
1111
1205
  title: string;
1206
+ /** @description Board-defined custom-field values, keyed by the field `key` (definitions, including type, option keys and whether the field is required, are published on the public board context at `GET /v1/boards/:identifier` under `customFields.job`). Writes are **additive**: on `PATCH` a key you send is set/overwritten and a key you omit is preserved; on `POST` this initializes the bag. Send a key with an intentional-empty value (`null`, `""`, or `[]`) to **clear** it; `false` and `0` are kept as real values. Values must match the field type and `single_select`/`multi_select` must use defined option **keys** (not labels). A required field left empty, a wrong-typed value or an undefined option is rejected with `400 jobs_constraint_violation`. On `POST`, the required-field check runs only when this property is present (an empty object counts as present); a request that omits it is not rejected for a custom field it did not send. Unknown keys are ignored. */
1207
+ customFieldValues?: {
1208
+ [key: string]: string | string[] | boolean | number | unknown;
1209
+ };
1112
1210
  };
1113
1211
  EmployerJob: components["schemas"]["EmployerJobSummary"] & {
1212
+ resolvedCollectionFields: components["schemas"]["ResolvedJobCollectionField"][];
1114
1213
  /** @description Long-form description of the role, or `null` if not specified. */
1115
1214
  description: string | null;
1116
1215
  /** @description Where candidates apply, or `null` if not specified. An HTTPS URL or `mailto:` URI. */
@@ -1211,7 +1310,7 @@ interface components {
1211
1310
  */
1212
1311
  employmentType: "full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other" | null;
1213
1312
  /**
1214
- * @description Whether the role is on-site, hybrid, or fully remote, or `null` if not specified.
1313
+ * @description Whether the role is on-site, hybrid, or fully remote. `null` only on older jobs saved without one; create requires it and `PATCH` cannot clear it.
1215
1314
  * @enum {string|null}
1216
1315
  */
1217
1316
  remoteOption: "on_site" | "hybrid" | "remote" | null;
@@ -1235,12 +1334,20 @@ interface components {
1235
1334
  isFeatured: boolean;
1236
1335
  /** @description Time at which the job was first published, or `null` if not yet published. ISO 8601 datetime. */
1237
1336
  publishedAt: string | null;
1238
- /** @description Time at which the job expires, or `null` if no expiry is set. ISO 8601 datetime. */
1337
+ /** @description Time at which the job expires as an ISO 8601 datetime. `null` can appear when the expiry requirement does not apply, including for drafts and sponsored jobs; ordinary published jobs always have an expiry. */
1239
1338
  expiresAt: string | null;
1240
1339
  /** @description Time at which the job was created. ISO 8601 datetime. */
1241
1340
  createdAt: string;
1242
1341
  /** @description Time at which the job was last updated. ISO 8601 datetime. */
1243
1342
  updatedAt: string;
1343
+ /** @description Board-defined custom-field values for this job, keyed by the field `key`. The definitions (label, type, option keys, required) are published on the public board context at `GET /v1/boards/:identifier` under `customFields.job`. Each value is returned as stored: a string (`short_text` / `long_text` / a `single_select` option key), a string array (`multi_select` option keys), a boolean, or a number. Always an object: `{}` when the job has no custom-field values, never `null` or a missing field. */
1344
+ customFieldValues: {
1345
+ [key: string]: string | string[] | boolean | number;
1346
+ };
1347
+ /** @description Collection record IDs keyed by configured job collection field. */
1348
+ collectionValues: {
1349
+ [key: string]: string[];
1350
+ };
1244
1351
  links: components["schemas"]["EmployerJobLinks"];
1245
1352
  };
1246
1353
  EmployerPipeline: {
@@ -1296,7 +1403,7 @@ interface components {
1296
1403
  views: number;
1297
1404
  };
1298
1405
  EmployerUpdateJobBody: {
1299
- /** @description Long-form description of the role. Up to 25,000 characters. */
1406
+ /** @description Long-form description of the role, as HTML. Up to 25,000 characters. The HTML is sanitized on write: tags and attributes outside the supported formatting set (paragraphs, headings, lists, links, inline emphasis) are removed. Plain text without HTML tags is converted to paragraphs. */
1300
1407
  description?: string;
1301
1408
  /** @description URL-friendly slug for the job. Auto-generated from `title` when omitted. */
1302
1409
  slug?: string;
@@ -1306,7 +1413,7 @@ interface components {
1306
1413
  */
1307
1414
  employmentType?: "full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other";
1308
1415
  /**
1309
- * @description Whether the role is on-site, hybrid, or fully remote. **Never valid on its own:** `on_site` and `hybrid` require at least one `officeLocations` entry, and `remote` requires `remotePermits` (use `[{"type":"worldwide","value":"worldwide"}]` for anywhere; `remoteTimezones` then auto-derives on POST). Sending it alone returns `400`.
1416
+ * @description Whether the role is on-site, hybrid, or fully remote. Omitted means unchanged; `null` returns `400` because a job's workplace type can be changed but not cleared. **Never valid on its own:** `on_site` and `hybrid` require at least one `officeLocations` entry, and `remote` requires `remotePermits` (use `[{"type":"worldwide","value":"worldwide"}]` for anywhere; `remoteTimezones` then auto-derives on POST). Sending it alone returns `400`.
1310
1417
  * @enum {string}
1311
1418
  */
1312
1419
  remoteOption?: "on_site" | "hybrid" | "remote";
@@ -1335,14 +1442,14 @@ interface components {
1335
1442
  seniority?: "entry_level" | "associate" | "mid_level" | "senior" | "lead" | "principal" | "director" | "executive";
1336
1443
  /** @description Where candidates apply. Accepts an HTTPS URL, a `mailto:` URI, or a bare email address (normalized to `mailto:` form). Pass `null` to clear the stored value and switch the job to on-board (built-in) applications. Omitted means unchanged. */
1337
1444
  applicationUrl?: string | null;
1338
- /** @description Minimum salary, in `salaryCurrency` units. Pass `null` to clear the stored value; omitted means unchanged. */
1445
+ /** @description Minimum salary, in `salaryCurrency` units. Pass `null` to clear the stored value; omitted means unchanged. When a request sends any salary field, the resulting salary (sent values over stored ones) must have `salaryCurrency` and `salaryTimeframe` whenever `salaryMin` or `salaryMax` is set; otherwise `400`. Requests that send no salary field are not checked. */
1339
1446
  salaryMin?: number | null;
1340
- /** @description Maximum salary, in `salaryCurrency` units. Pass `null` to clear the stored value; omitted means unchanged. */
1447
+ /** @description Maximum salary, in `salaryCurrency` units. Pass `null` to clear the stored value; omitted means unchanged. When a request sends any salary field, the resulting salary (sent values over stored ones) must have `salaryCurrency` and `salaryTimeframe` whenever `salaryMin` or `salaryMax` is set; otherwise `400`. Requests that send no salary field are not checked. */
1341
1448
  salaryMax?: number | null;
1342
- /** @description Three-letter ISO 4217 currency code for `salaryMin` and `salaryMax`. Pass `null` to clear the stored value; omitted means unchanged. */
1449
+ /** @description Three-letter ISO 4217 currency code for `salaryMin` and `salaryMax`. Pass `null` to clear the stored value; omitted means unchanged. When a request sends any salary field, the resulting salary (sent values over stored ones) must have `salaryCurrency` and `salaryTimeframe` whenever `salaryMin` or `salaryMax` is set; otherwise `400`. Requests that send no salary field are not checked. */
1343
1450
  salaryCurrency?: string | null;
1344
1451
  /**
1345
- * @description Period the `salaryMin` and `salaryMax` figures are quoted against. Pass `null` to clear the stored value; omitted means unchanged.
1452
+ * @description Period the `salaryMin` and `salaryMax` figures are quoted against. Pass `null` to clear the stored value; omitted means unchanged. When a request sends any salary field, the resulting salary (sent values over stored ones) must have `salaryCurrency` and `salaryTimeframe` whenever `salaryMin` or `salaryMax` is set; otherwise `400`. Requests that send no salary field are not checked.
1346
1453
  * @enum {string|null}
1347
1454
  */
1348
1455
  salaryTimeframe?: "per_year" | "per_month" | "per_week" | "per_day" | "per_hour" | null;
@@ -1365,8 +1472,18 @@ interface components {
1365
1472
  inOfficeFrequency?: number;
1366
1473
  /** @description Physical office locations associated with the job. Prefer `{query: "City, Country"}` for free-form input; `{city, country, region?, locality?}` is also accepted when you already have structured fields. Each entry is resolved server-side; a country mismatch returns `400 jobs_unresolvable_location`. */
1367
1474
  officeLocations?: components["schemas"]["JobOfficeLocationInput"][];
1475
+ /** @description Collection-reference selections keyed by the configured job collection field key. Values are arrays of record IDs, including for single-select fields. On PATCH omitted keys are preserved; send null or an empty array to clear a field. */
1476
+ collectionValues?: {
1477
+ [key: string]: string[] | unknown;
1478
+ };
1479
+ /** @description Per-job wording for selected collection entries, only on fields whose definition has `allowOverrides`. At most one item per selected entry; an item for an entry that is not selected on the job is rejected with `400 jobs_constraint_violation`. The list replaces the job's stored overrides: on PATCH omit it to keep them and send `[]` to clear them all. Deselecting an entry through `collectionValues` drops its override. */
1480
+ collectionOverrides?: components["schemas"]["JobCollectionOverride"][];
1368
1481
  /** @description The job title. */
1369
1482
  title?: string;
1483
+ /** @description Board-defined custom-field values, keyed by the field `key` (definitions, including type, option keys and whether the field is required, are published on the public board context at `GET /v1/boards/:identifier` under `customFields.job`). Writes are **additive**: on `PATCH` a key you send is set/overwritten and a key you omit is preserved; on `POST` this initializes the bag. Send a key with an intentional-empty value (`null`, `""`, or `[]`) to **clear** it; `false` and `0` are kept as real values. Values must match the field type and `single_select`/`multi_select` must use defined option **keys** (not labels). A required field left empty, a wrong-typed value or an undefined option is rejected with `400 jobs_constraint_violation`. On `POST`, the required-field check runs only when this property is present (an empty object counts as present); a request that omits it is not rejected for a custom field it did not send. Unknown keys are ignored. */
1484
+ customFieldValues?: {
1485
+ [key: string]: string | string[] | boolean | number | unknown;
1486
+ };
1370
1487
  };
1371
1488
  /** @description The error envelope returned by every non-2xx response. */
1372
1489
  Error: {
@@ -1381,12 +1498,51 @@ interface components {
1381
1498
  details?: unknown;
1382
1499
  };
1383
1500
  };
1501
+ /**
1502
+ * @description Why the field is locked, or `null` when it is not.
1503
+ * @enum {string|null}
1504
+ */
1505
+ FormFieldLockReason: "google_required" | "google_hiring_organization" | "google_work_arrangement" | "google_job_location" | "google_remote_eligibility" | "posting" | "identity" | null;
1384
1506
  HandleAvailability: {
1385
1507
  /** @enum {string} */
1386
1508
  object: "handle_availability";
1387
1509
  handle: string;
1388
1510
  available: boolean;
1389
1511
  };
1512
+ JobCollectionChoiceList: {
1513
+ data: {
1514
+ id: string;
1515
+ name: string;
1516
+ /** @description URL-safe identifier, unique within the collection. Changing it keeps the previous value reserved. */
1517
+ slug?: string;
1518
+ /** @description The entry's logo: the image in the collection's logo field, or a legacy logo URL on older entries. Absent when the entry has neither. */
1519
+ logoUrl?: string;
1520
+ }[];
1521
+ nextCursor: string | null;
1522
+ };
1523
+ JobCollectionFieldDefinition: {
1524
+ key: string;
1525
+ label: string;
1526
+ typeId: string;
1527
+ multiple: boolean;
1528
+ required: boolean;
1529
+ /** @description Operator-set maximum number of entries a poster can select. Only meaningful when `multiple` is true; absent means the system ceiling of 100. */
1530
+ maxSelections?: number;
1531
+ /** @description Whether each job can replace a selected entry's title and description through `collectionOverrides`. Absent means false. */
1532
+ allowOverrides?: boolean;
1533
+ /** @description Key of the collection's short, long or rich text field whose value is a selected entry's default description. When that field is rich text, an entry's `description` is sanitised HTML. Absent means entries have no default description. */
1534
+ descriptionFieldKey?: string;
1535
+ };
1536
+ JobCollectionOverride: {
1537
+ /** @description The collection field key used in `collectionValues`. */
1538
+ fieldKey: string;
1539
+ /** @description A record ID selected for that field on this job. */
1540
+ recordId: string;
1541
+ /** @description The entry's title on this job, up to 160 characters. Omit or send a blank string to use the entry name. */
1542
+ title?: string;
1543
+ /** @description The entry's description on this job, up to 2000 characters of plain text. When the default description field is rich text, the entry's `description` returns it escaped as HTML. Omit or send a blank string to use the default description. */
1544
+ description?: string;
1545
+ };
1390
1546
  /** @description Embedded company resource for the job, or `null` if no company is attached. */
1391
1547
  JobCompany: {
1392
1548
  /** @description Unique identifier for the company. */
@@ -1717,7 +1873,7 @@ interface components {
1717
1873
  PaywallOffer: {
1718
1874
  /** @enum {string} */
1719
1875
  object: "paywall_offer";
1720
- /** @description The tier key posted to checkout (e.g. `monthly`, `lifetime`). */
1876
+ /** @description The opaque key posted unchanged to checkout (a plan ID or legacy tier key). */
1721
1877
  offerKey: string;
1722
1878
  label: string;
1723
1879
  billingLabel: string;
@@ -1815,6 +1971,80 @@ interface components {
1815
1971
  /** @description Post title. */
1816
1972
  title: string;
1817
1973
  };
1974
+ ProfileChoiceList: {
1975
+ data: {
1976
+ id: string;
1977
+ name: string;
1978
+ /** @description URL-safe identifier, unique within the collection. Changing it keeps the previous value reserved. */
1979
+ slug?: string;
1980
+ logoUrl?: string;
1981
+ }[];
1982
+ nextCursor: string | null;
1983
+ };
1984
+ ProfileCustomFieldDefinition: {
1985
+ key: string;
1986
+ label: string;
1987
+ helpText?: string;
1988
+ /** @enum {string} */
1989
+ type: "short_text" | "long_text" | "rich_text" | "single_select" | "multi_select" | "boolean" | "number" | "date" | "url" | "email" | "phone" | "image_gallery" | "file";
1990
+ required: boolean;
1991
+ /** @enum {string} */
1992
+ visibility: "private" | "public";
1993
+ editableByOwner: boolean;
1994
+ options?: {
1995
+ key: string;
1996
+ label: string;
1997
+ }[];
1998
+ min?: number;
1999
+ max?: number;
2000
+ };
2001
+ ProfileFieldValuesBody: {
2002
+ values: {
2003
+ [key: string]: string | number | boolean | string[] | unknown;
2004
+ };
2005
+ };
2006
+ ProfileFieldValuesResponse: {
2007
+ definitions: components["schemas"]["ProfileCustomFieldDefinition"][];
2008
+ values: {
2009
+ [key: string]: string | number | boolean | string[];
2010
+ };
2011
+ };
2012
+ ProfileObjectReferenceDefinition: {
2013
+ key: string;
2014
+ label: string;
2015
+ typeId: string;
2016
+ multiple: boolean;
2017
+ /** @description Operator-set maximum number of entries a profile can select. Only meaningful when `multiple` is true; absent means the system ceiling of 100. */
2018
+ maxSelections?: number;
2019
+ /** @description Whether a profile must select at least one entry when this field is shown. */
2020
+ required?: boolean;
2021
+ /** @enum {string} */
2022
+ visibility: "private" | "public";
2023
+ editableByOwner: boolean;
2024
+ allowOverrides: boolean;
2025
+ descriptionFieldKey?: string;
2026
+ valueDefinitions?: components["schemas"]["ScalarProfileCustomFieldDefinition"][];
2027
+ entryDefinitions?: components["schemas"]["ScalarProfileCustomFieldDefinition"][];
2028
+ };
2029
+ ProfileObjectReferenceSelectionWrite: {
2030
+ fieldKey: string;
2031
+ recordId: string;
2032
+ titleOverride?: string | null;
2033
+ descriptionOverride?: string | null;
2034
+ values?: {
2035
+ [key: string]: string | number | boolean | string[];
2036
+ };
2037
+ entries?: {
2038
+ key: string;
2039
+ values: {
2040
+ [key: string]: string | number | boolean | string[];
2041
+ };
2042
+ }[];
2043
+ };
2044
+ ProfileObjectReferencesResult: {
2045
+ definitions: components["schemas"]["ProfileObjectReferenceDefinition"][];
2046
+ selections: components["schemas"]["ResolvedProfileObjectReference"][];
2047
+ };
1818
2048
  PublicBlogAdjacentPosts: {
1819
2049
  /** @enum {string} */
1820
2050
  object: "blog_adjacent_posts";
@@ -1972,10 +2202,12 @@ interface components {
1972
2202
  /** @description Default Google-issued ad unit id (10 digits). Resolves the enabled jobs:list.footer slot first, then the first enabled valid slot in alphabetical placement-key order. Null when advertising is off, the publisher id is invalid, or no enabled valid slot exists. Frontends may override it per ad unit. */
1973
2203
  defaultSlotId: string | null;
1974
2204
  };
1975
- /** @description Operator-defined custom field definitions keyed by model (currently only `job`). Each key holds that model's definitions in display order. Company and talent keys are added when those models ship. The frontend uses these to render and localize each record's opaque `customFieldValues`. Display-only: not filterable or searchable in v1. */
2205
+ /** @description Operator-defined custom field definitions keyed by model (currently only `job`). Each key holds that model's definitions in display order. The frontend uses these to render and localize each record's opaque `customFieldValues`. Supports exact-value custom-field filters in job search. Profile definitions are discovered through the profile-fields endpoint. */
1976
2206
  customFields: {
1977
2207
  /** @description This model's custom-field definitions in display order. Empty when the board defines none for the model. */
1978
2208
  job: components["schemas"]["CustomFieldDefinition"][];
2209
+ /** @description Collection-reference job field definitions in display order. Fetch choices from /boards/{identifier}/job-fields/{fieldKey}/choices. */
2210
+ jobCollections: components["schemas"]["JobCollectionFieldDefinition"][];
1979
2211
  };
1980
2212
  /** @description Built-in job-form field configuration from Settings → Job form (custom fields live on `customFields.job`). The platform ENFORCES these constraints when a job is created — a violation is a 400 — so a posting form that ignores them offers options the server will reject and the employer only finds out on submit. */
1981
2213
  jobForm: {
@@ -2018,6 +2250,7 @@ interface components {
2018
2250
  allowedOptions: string[];
2019
2251
  };
2020
2252
  };
2253
+ forms: components["schemas"]["BoardForms"];
2021
2254
  /** @description Operator-authored contact and social identity (settings › Contact & company details). Extracted from the former `footer` group in 4.0.0: contact is identity data, not layout. Brand/social URLs are sanitized to absolute http(s). */
2022
2255
  contact: {
2023
2256
  /** @description Public contact email (render as `mailto:`). Operator-set in settings › Contact & company details. */
@@ -2039,6 +2272,16 @@ interface components {
2039
2272
  query?: string;
2040
2273
  /** @description Scope the results to companies in a single market (sector), by the market slug. Resolves a board-language or English slug; an unknown slug returns 404. Use `GET /boards/:identifier/companies/markets/:market` to resolve a slug to its canonical form first. */
2041
2274
  marketSlug?: string;
2275
+ /** @description Public company custom fields. Clauses are AND-matched and values within a clause are OR-matched. */
2276
+ customFields?: {
2277
+ key: string;
2278
+ values: (string | number | boolean)[];
2279
+ }[];
2280
+ /** @description Public company catalog references. Clauses are AND-matched and record IDs within a clause are OR-matched. */
2281
+ objectReferences?: {
2282
+ key: string;
2283
+ recordIds: string[];
2284
+ }[];
2042
2285
  /** @description An opaque pagination cursor returned in the `nextCursor` field of a previous response. Pass it back to fetch the next page of results. */
2043
2286
  cursor?: string | null;
2044
2287
  /** @description A limit on the number of objects to be returned. Limit can range between 1 and 100. */
@@ -2089,7 +2332,7 @@ interface components {
2089
2332
  */
2090
2333
  employmentType: "full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other" | null;
2091
2334
  /**
2092
- * @description Whether the role is on-site, hybrid, or fully remote, or `null` if not specified.
2335
+ * @description Whether the role is on-site, hybrid, or fully remote. `null` only on older jobs saved without one; create requires it and `PATCH` cannot clear it.
2093
2336
  * @enum {string|null}
2094
2337
  */
2095
2338
  remoteOption: "on_site" | "hybrid" | "remote" | null;
@@ -2113,7 +2356,7 @@ interface components {
2113
2356
  isFeatured: boolean;
2114
2357
  /** @description Time at which the job was first published, or `null` if not yet published. ISO 8601 datetime. */
2115
2358
  publishedAt: string | null;
2116
- /** @description Time at which the job expires, or `null` if no expiry is set. ISO 8601 datetime. */
2359
+ /** @description Time at which the job expires as an ISO 8601 datetime. `null` can appear when the expiry requirement does not apply, including for drafts and sponsored jobs; ordinary published jobs always have an expiry. */
2117
2360
  expiresAt: string | null;
2118
2361
  /** @description Time at which the job was created. ISO 8601 datetime. */
2119
2362
  createdAt: string;
@@ -2182,10 +2425,12 @@ interface components {
2182
2425
  slug: string;
2183
2426
  name: string;
2184
2427
  }[];
2185
- /** @description Opaque, display-only custom-field values, keyed by each field's `key`. Values are the option `key`(s) for select fields, or the raw boolean/number/text otherwise. Resolve labels via the board's `customFields.job` definitions (see `GET /v1/boards/:identifier`). `{}` when the board defines no custom fields. Not filterable or searchable in v1. */
2428
+ /** @description Opaque, display-only custom-field values, keyed by each field's `key`. Values are the option `key`(s) for select fields, or the raw boolean/number/text otherwise. Resolve labels via the board's `customFields.job` definitions (see `GET /v1/boards/:identifier`). `{}` when the board defines no custom fields. Supports exact-value custom-field filters in job search. */
2186
2429
  customFieldValues: {
2187
2430
  [key: string]: string | string[] | boolean | number;
2188
2431
  };
2432
+ /** @description Configured collection references resolved to current live names, logos, and public record details. Archived collections and records are omitted. */
2433
+ resolvedCollectionFields: components["schemas"]["ResolvedJobCollectionField"][];
2189
2434
  };
2190
2435
  PublicJobAlertConfirmation: {
2191
2436
  /** @enum {string} */
@@ -2324,6 +2569,10 @@ interface components {
2324
2569
  /** @description Live published-job count for this place. */
2325
2570
  jobCount: number;
2326
2571
  };
2572
+ PublicProfileFields: {
2573
+ definitions: components["schemas"]["ProfileCustomFieldDefinition"][];
2574
+ referenceDefinitions: components["schemas"]["ProfileObjectReferenceDefinition"][];
2575
+ };
2327
2576
  PublicSearchJobsBody: {
2328
2577
  /** @description Free-text search query matched against job title and description. Up to 200 characters. */
2329
2578
  query?: string;
@@ -2344,6 +2593,8 @@ interface components {
2344
2593
  employmentType?: ("full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other")[];
2345
2594
  /** @description Only return jobs at any of the given seniority levels. Up to 10 values. */
2346
2595
  seniority?: ("entry_level" | "associate" | "mid_level" | "senior" | "lead" | "principal" | "director" | "executive")[];
2596
+ /** @description Only return jobs tagged with any of the given category slugs. Up to 10 values. Accepts the `sourceSlug` or the board-language `canonicalSlug` from `GET /v1/boards/{identifier}/categories`, or a `slug` from a job card's `categories`. Unknown slugs match no jobs. */
2597
+ categories?: string[];
2347
2598
  /** @description Range filter on the job's `publishedAt` timestamp. */
2348
2599
  publishedAt?: {
2349
2600
  /**
@@ -2361,6 +2612,11 @@ interface components {
2361
2612
  location?: string;
2362
2613
  /** @description Search radius in kilometres around `location` (10–250; default 50). Ignored without `location`. */
2363
2614
  radius?: number;
2615
+ /** @description Public custom job fields. Clauses are AND-matched; values within a clause are OR-matched. Up to 10 clauses and 10 values per clause. */
2616
+ customFields?: {
2617
+ key: string;
2618
+ values: (string | number | boolean)[];
2619
+ }[];
2364
2620
  };
2365
2621
  /** @description An opaque pagination cursor returned in the `nextCursor` field of a previous response. Pass it back to fetch the next page of results. */
2366
2622
  cursor?: string;
@@ -2447,6 +2703,9 @@ interface components {
2447
2703
  /** @description Every stage id of the job, in the new order. */
2448
2704
  orderedStageIds: string[];
2449
2705
  };
2706
+ ReplaceProfileObjectReferenceSelectionsBody: {
2707
+ selections: components["schemas"]["ProfileObjectReferenceSelectionWrite"][];
2708
+ };
2450
2709
  ReplyBody: {
2451
2710
  body: string;
2452
2711
  };
@@ -2459,6 +2718,173 @@ interface components {
2459
2718
  /** Format: email */
2460
2719
  email: string;
2461
2720
  };
2721
+ ResolvedJobCollectionField: {
2722
+ key: string;
2723
+ label: string;
2724
+ entries: {
2725
+ id: string;
2726
+ name: string;
2727
+ /** @description URL-safe identifier, unique within the collection. Changing it keeps the previous value reserved. */
2728
+ slug?: string;
2729
+ /** @description The entry's logo: the image in the collection's logo field, or a legacy logo URL on older entries. Absent when the entry has neither. */
2730
+ logoUrl?: string;
2731
+ /** @description The entry's title on this job: the job's `titleOverride` when set, otherwise the entry name. Render this. */
2732
+ title: string;
2733
+ /** @description The entry's description on this job: the job's `descriptionOverride` when set, otherwise the value of the field's default description field, or `null` when neither exists. Sanitised HTML when the default description field is rich text, with a plain-text override escaped into paragraphs. Render this. */
2734
+ description: string | null;
2735
+ /** @description The title this job set for the entry, or `null` when it uses the entry name. */
2736
+ titleOverride: string | null;
2737
+ /** @description The plain-text description this job set for the entry, or `null` when it uses the default description. */
2738
+ descriptionOverride: string | null;
2739
+ fields: {
2740
+ key: string;
2741
+ label: string;
2742
+ /** @enum {string} */
2743
+ type: "short_text" | "long_text" | "rich_text" | "single_select" | "multi_select" | "boolean" | "number" | "date" | "url" | "email" | "phone" | "image" | "image_gallery" | "file" | "reference";
2744
+ helpText?: string;
2745
+ options?: {
2746
+ key: string;
2747
+ label: string;
2748
+ }[];
2749
+ }[];
2750
+ values: {
2751
+ [key: string]: string | string[] | boolean | number | {
2752
+ id: string;
2753
+ name: string;
2754
+ contentType: string;
2755
+ sizeBytes: number;
2756
+ url: string;
2757
+ } | {
2758
+ id: string;
2759
+ name: string;
2760
+ contentType: string;
2761
+ sizeBytes: number;
2762
+ url: string;
2763
+ }[];
2764
+ };
2765
+ references?: {
2766
+ [key: string]: {
2767
+ id: string;
2768
+ name: string;
2769
+ /** @description URL-safe identifier, unique within the collection. Changing it keeps the previous value reserved. */
2770
+ slug?: string;
2771
+ fields: {
2772
+ key: string;
2773
+ label: string;
2774
+ /** @enum {string} */
2775
+ type: "short_text" | "long_text" | "rich_text" | "single_select" | "multi_select" | "boolean" | "number" | "date" | "url" | "email" | "phone" | "image" | "image_gallery" | "file" | "reference";
2776
+ helpText?: string;
2777
+ options?: {
2778
+ key: string;
2779
+ label: string;
2780
+ }[];
2781
+ }[];
2782
+ values: {
2783
+ [key: string]: string | string[] | boolean | number | {
2784
+ id: string;
2785
+ name: string;
2786
+ contentType: string;
2787
+ sizeBytes: number;
2788
+ url: string;
2789
+ } | {
2790
+ id: string;
2791
+ name: string;
2792
+ contentType: string;
2793
+ sizeBytes: number;
2794
+ url: string;
2795
+ }[];
2796
+ };
2797
+ }[];
2798
+ };
2799
+ }[];
2800
+ };
2801
+ ResolvedProfileObjectReference: {
2802
+ fieldKey: string;
2803
+ fieldLabel: string;
2804
+ recordId: string;
2805
+ /** @description URL-safe identifier, unique within the collection. Changing it keeps the previous value reserved. */
2806
+ slug?: string;
2807
+ title: string;
2808
+ description?: string;
2809
+ titleOverride?: string;
2810
+ descriptionOverride?: string;
2811
+ /** @description The entry's logo: the image in the collection's logo field, or a legacy logo URL on older entries. Absent when the entry has neither. */
2812
+ logoUrl?: string;
2813
+ /** @enum {string} */
2814
+ descriptionType?: "rich_text";
2815
+ descriptionFieldKey?: string;
2816
+ fields: {
2817
+ key: string;
2818
+ label: string;
2819
+ /** @enum {string} */
2820
+ type: "short_text" | "long_text" | "rich_text" | "single_select" | "multi_select" | "boolean" | "number" | "date" | "url" | "email" | "phone" | "image" | "image_gallery" | "file" | "reference";
2821
+ helpText?: string;
2822
+ options?: {
2823
+ key: string;
2824
+ label: string;
2825
+ }[];
2826
+ }[];
2827
+ attributes: {
2828
+ [key: string]: string | string[] | boolean | number | {
2829
+ id: string;
2830
+ name: string;
2831
+ contentType: string;
2832
+ sizeBytes: number;
2833
+ url: string;
2834
+ } | {
2835
+ id: string;
2836
+ name: string;
2837
+ contentType: string;
2838
+ sizeBytes: number;
2839
+ url: string;
2840
+ }[];
2841
+ };
2842
+ references?: {
2843
+ [key: string]: {
2844
+ id: string;
2845
+ name: string;
2846
+ /** @description URL-safe identifier, unique within the collection. Changing it keeps the previous value reserved. */
2847
+ slug?: string;
2848
+ fields: {
2849
+ key: string;
2850
+ label: string;
2851
+ /** @enum {string} */
2852
+ type: "short_text" | "long_text" | "rich_text" | "single_select" | "multi_select" | "boolean" | "number" | "date" | "url" | "email" | "phone" | "image" | "image_gallery" | "file" | "reference";
2853
+ helpText?: string;
2854
+ options?: {
2855
+ key: string;
2856
+ label: string;
2857
+ }[];
2858
+ }[];
2859
+ values: {
2860
+ [key: string]: string | string[] | boolean | number | {
2861
+ id: string;
2862
+ name: string;
2863
+ contentType: string;
2864
+ sizeBytes: number;
2865
+ url: string;
2866
+ } | {
2867
+ id: string;
2868
+ name: string;
2869
+ contentType: string;
2870
+ sizeBytes: number;
2871
+ url: string;
2872
+ }[];
2873
+ };
2874
+ }[];
2875
+ };
2876
+ valueDefinitions: components["schemas"]["ScalarProfileCustomFieldDefinition"][];
2877
+ entryDefinitions: components["schemas"]["ScalarProfileCustomFieldDefinition"][];
2878
+ values: {
2879
+ [key: string]: string | number | boolean | string[];
2880
+ };
2881
+ entries: {
2882
+ key: string;
2883
+ values: {
2884
+ [key: string]: string | number | boolean | string[];
2885
+ };
2886
+ }[];
2887
+ };
2462
2888
  Resume: {
2463
2889
  /** @enum {string} */
2464
2890
  object: "resume";
@@ -2554,6 +2980,10 @@ interface components {
2554
2980
  savedAt: string;
2555
2981
  job: components["schemas"]["PublicJobCard"];
2556
2982
  };
2983
+ ScalarProfileCustomFieldDefinition: components["schemas"]["ProfileCustomFieldDefinition"] & {
2984
+ /** @enum {string} */
2985
+ type?: "short_text" | "long_text" | "rich_text" | "single_select" | "multi_select" | "boolean" | "number" | "date" | "url" | "email" | "phone";
2986
+ };
2557
2987
  SendWorkEmailBody: {
2558
2988
  /** Format: email */
2559
2989
  workEmail: string;
@@ -2840,6 +3270,11 @@ interface components {
2840
3270
  startDate: string | null;
2841
3271
  endDate: string | null;
2842
3272
  }[];
3273
+ /** @description Values for public candidate custom fields, keyed by field key. Private and unknown fields are omitted. */
3274
+ customFieldValues: {
3275
+ [key: string]: string | number | boolean | string[];
3276
+ };
3277
+ objectReferences: components["schemas"]["ResolvedProfileObjectReference"][];
2843
3278
  };
2844
3279
  TalentList: {
2845
3280
  id: string;
@@ -2919,6 +3354,11 @@ interface components {
2919
3354
  name: string;
2920
3355
  proficiency: string;
2921
3356
  }[];
3357
+ /** @description Values for public candidate custom fields, keyed by field key. Private and unknown fields are omitted. */
3358
+ customFieldValues: {
3359
+ [key: string]: string | number | boolean | string[];
3360
+ };
3361
+ objectReferences: components["schemas"]["ResolvedProfileObjectReference"][];
2922
3362
  };
2923
3363
  TalentUnlock: {
2924
3364
  /** @enum {string} */