@cavuno/board 1.42.0 → 1.44.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.
@@ -128,7 +128,7 @@ interface components {
128
128
  remaining: number;
129
129
  };
130
130
  Alert: {
131
- /** @description Job-alert preference ID also the path key. */
131
+ /** @description Job-alert preference ID. Also the path key. */
132
132
  id: string;
133
133
  /** @enum {string} */
134
134
  object: "alert";
@@ -189,7 +189,7 @@ interface components {
189
189
  expiresAt: number | null;
190
190
  };
191
191
  Application: {
192
- /** @description Application ID the `:applicationId` path key. */
192
+ /** @description Application ID. Also the `:applicationId` path key. */
193
193
  id: string;
194
194
  /** @enum {string} */
195
195
  object: "application";
@@ -736,7 +736,7 @@ interface components {
736
736
  handle: string | null;
737
737
  /** @description Avatar URL, or `null`. */
738
738
  avatarUrl: string | null;
739
- /** @description Whether the candidate has uploaded a resume. */
739
+ /** @description Whether a resume is on file. On list rows this reflects the stored pointer; on the single-candidate detail it reflects the resolved blob (always agrees with `resume !== null`), so the two can briefly disagree if a stored file was garbage-collected. */
740
740
  hasResume: boolean;
741
741
  /** @description ISO-8601 timestamp of when the candidate registered. */
742
742
  createdAt: string;
@@ -765,6 +765,7 @@ interface components {
765
765
  savedJobCount: number;
766
766
  /** @description Number of job alerts the candidate has. */
767
767
  alertCount: number;
768
+ resume: components["schemas"]["CandidateResumeFile"];
768
769
  };
769
770
  CandidateEducation: {
770
771
  id: string;
@@ -822,6 +823,15 @@ interface components {
822
823
  jobSearchStatusVisibleTo: "everyone" | "employers_only";
823
824
  openToRelocate: boolean;
824
825
  };
826
+ /** @description Signed Convex storage URL + metadata for the uploaded resume, or `null` when no resume is on file (or the storage blob is missing). Treat the URL as sensitive PII. */
827
+ CandidateResumeFile: {
828
+ /** @description Convex storage download URL for the candidate resume. Unguessable; treat as sensitive PII. It serves the candidate’s actual resume file. Short-lived: do not cache or store it; re-fetch the candidate to get a fresh URL. */
829
+ url: string;
830
+ /** @description MIME type of the stored resume file. */
831
+ contentType: string;
832
+ /** @description Size of the resume file in bytes. */
833
+ sizeBytes: number;
834
+ } | null;
825
835
  CandidateSkill: {
826
836
  /** @enum {string} */
827
837
  object: "candidate_skill";
@@ -1386,7 +1396,7 @@ interface components {
1386
1396
  type: "worldwide" | "world_region" | "continent" | "region" | "subregion" | "subdivision" | "country" | "custom";
1387
1397
  value: string;
1388
1398
  }[];
1389
- /** @description Where remote candidates must be timezone-compatible. Each entry mirrors the `remotePermits` shape (`world_region`, `continent`, `region`, `subregion`, `country`) plus `timezone` (specific IANA name with optional `plusMinus` ±N hours expansion) and `all` (every timezone equivalent of `worldwide` for permits). The canonical `{type, value}` set is published at `GET /v1/taxonomies/remote-timezones`. **When omitted on POST**, the server auto-derives this from `remotePermits` (or `[{all,all}]` if neither was provided). **PATCH never auto-re-derives** once set, only an explicit replacement updates the stored value, even when `remotePermits` changes. Pass `[]` to clear an existing constraint. */
1399
+ /** @description Where remote candidates must be timezone-compatible. Each entry mirrors the `remotePermits` shape (`world_region`, `continent`, `region`, `subregion`, `country`) plus `timezone` (specific IANA name with optional `plusMinus` ±N hours expansion) and `all` (every timezone: equivalent of `worldwide` for permits). The canonical `{type, value}` set is published at `GET /v1/taxonomies/remote-timezones`. **When omitted on POST**, the server auto-derives this from `remotePermits` (or `[{all,all}]` if neither was provided). **PATCH never auto-re-derives**: once set, only an explicit replacement updates the stored value, even when `remotePermits` changes. Pass `[]` to clear an existing constraint. */
1390
1400
  remoteTimezones?: {
1391
1401
  /** @enum {string} */
1392
1402
  type: "all" | "world_region" | "continent" | "region" | "subregion" | "country" | "timezone";
@@ -1443,7 +1453,7 @@ interface components {
1443
1453
  officeLocations?: components["schemas"]["JobOfficeLocationInput"][];
1444
1454
  /** @description An external identifier for the job from your own system, such as an ATS requisition ID. Use this value to look up the job later via `GET /v1/jobs?externalId=...` for deduplication. Scoped per-account: two different accounts may reuse the same `externalId` without collision. Up to 255 characters. */
1445
1455
  externalId?: string;
1446
- /** @description Board-defined custom-field values, keyed by the field `key` (definitions, including type and option keys, are published at `GET /v1/settings/job-form`). Writes are **additive**: on `PATCH` a key you send is set/overwritten and a key you omit is preserved (unsent keys are never cleared); on `POST` this initializes the bag. Send a key with an intentional-empty value `null`, `""`, or `[]` to **clear** it (`""`/`null` clear any type; `[]` clears a `multi_select`); `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 wrong-typed value is rejected (`custom_field_wrong_type`), never silently cleared. Unknown keys are ignored. The stored bag never contains `null`/empty values. */
1456
+ /** @description Board-defined custom-field values, keyed by the field `key` (definitions, including type and option keys, are published at `GET /v1/settings/job-form`). Writes are **additive**: on `PATCH` a key you send is set/overwritten and a key you omit is preserved (unsent keys are never cleared); on `POST` this initializes the bag. Send a key with an intentional-empty value (`null`, `""`, or `[]`) to **clear** it (`""`/`null` clear any type; `[]` clears a `multi_select`); `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 wrong-typed value is rejected (`custom_field_wrong_type`), never silently cleared. Unknown keys are ignored. The stored bag never contains `null`/empty values. */
1447
1457
  customFieldValues?: {
1448
1458
  [key: string]: string | string[] | boolean | number | unknown | unknown;
1449
1459
  };
@@ -1451,7 +1461,7 @@ interface components {
1451
1461
  title: string;
1452
1462
  company?: components["schemas"]["InlineCompanyInput"];
1453
1463
  /**
1454
- * @description Initial status of the job. Defaults to `draft`. Only `draft` and `published` are writable here. The system-set values `expired` and `archived` are not use the dedicated transitions (`POST /v1/jobs/:id/publish`, `/pause`, `/expire`) for status changes after create.
1464
+ * @description Initial status of the job. Defaults to `draft`. Only `draft` and `published` are writable here. The system-set values `expired` and `archived` are not. Use the dedicated transitions (`POST /v1/jobs/:id/publish`, `/pause`, `/expire`) for status changes after create.
1455
1465
  * @enum {string}
1456
1466
  */
1457
1467
  status?: "draft" | "published";
@@ -1889,7 +1899,7 @@ interface components {
1889
1899
  type: "worldwide" | "world_region" | "continent" | "region" | "subregion" | "subdivision" | "country" | "custom";
1890
1900
  value: string;
1891
1901
  }[];
1892
- /** @description Where remote candidates must be timezone-compatible. Each entry mirrors the `remotePermits` shape (`world_region`, `continent`, `region`, `subregion`, `country`) plus `timezone` (specific IANA name with optional `plusMinus` ±N hours expansion) and `all` (every timezone equivalent of `worldwide` for permits). The canonical `{type, value}` set is published at `GET /v1/taxonomies/remote-timezones`. **When omitted on POST**, the server auto-derives this from `remotePermits` (or `[{all,all}]` if neither was provided). **PATCH never auto-re-derives** once set, only an explicit replacement updates the stored value, even when `remotePermits` changes. Pass `[]` to clear an existing constraint. */
1902
+ /** @description Where remote candidates must be timezone-compatible. Each entry mirrors the `remotePermits` shape (`world_region`, `continent`, `region`, `subregion`, `country`) plus `timezone` (specific IANA name with optional `plusMinus` ±N hours expansion) and `all` (every timezone: equivalent of `worldwide` for permits). The canonical `{type, value}` set is published at `GET /v1/taxonomies/remote-timezones`. **When omitted on POST**, the server auto-derives this from `remotePermits` (or `[{all,all}]` if neither was provided). **PATCH never auto-re-derives**: once set, only an explicit replacement updates the stored value, even when `remotePermits` changes. Pass `[]` to clear an existing constraint. */
1893
1903
  remoteTimezones?: {
1894
1904
  /** @enum {string} */
1895
1905
  type: "all" | "world_region" | "continent" | "region" | "subregion" | "country" | "timezone";
@@ -1951,7 +1961,7 @@ interface components {
1951
1961
  type: string;
1952
1962
  value: string;
1953
1963
  }[];
1954
- /** @description Read-only derived from `remotePermits`. */
1964
+ /** @description Read-only: derived from `remotePermits`. */
1955
1965
  remoteWorldwide: boolean | null;
1956
1966
  /** @description Hierarchical timezone selection. The flat `remoteAllowedTzOffsets` below is the read-only derived projection. */
1957
1967
  remoteTimezones: {
@@ -1959,11 +1969,11 @@ interface components {
1959
1969
  value: string;
1960
1970
  plusMinus?: number;
1961
1971
  }[];
1962
- /** @description Read-only derived from `remoteTimezones`. UTC hour offsets. */
1972
+ /** @description Read-only: derived from `remoteTimezones`. UTC hour offsets. */
1963
1973
  remoteAllowedTzOffsets: number[];
1964
- /** @description Read-only derived from `remotePermits`. ISO 3166-1 alpha-2. */
1974
+ /** @description Read-only: derived from `remotePermits`. ISO 3166-1 alpha-2. */
1965
1975
  remoteWorkPermitCountryCodes: string[];
1966
- /** @description Read-only derived from `remotePermits`. ISO 3166-2. */
1976
+ /** @description Read-only: derived from `remotePermits`. ISO 3166-2. */
1967
1977
  remoteWorkPermitSubdivisionCodes: string[];
1968
1978
  /**
1969
1979
  * @description Whether the employer sponsors visas for remote candidates. One of `yes`, `no`, or `unknown`.
@@ -2121,6 +2131,20 @@ interface components {
2121
2131
  hidden: boolean;
2122
2132
  position: number;
2123
2133
  };
2134
+ EmployerProfileStats: {
2135
+ /** @enum {string} */
2136
+ object: "employer_profile_stats";
2137
+ /** @description Company profile-page views over the all-time window (tabs and bots excluded). */
2138
+ profileViews: number;
2139
+ };
2140
+ EmployerProfileViewsPoint: {
2141
+ /** @enum {string} */
2142
+ object: "employer_profile_views_point";
2143
+ /** @description The UTC day this bucket covers (`YYYY-MM-DD`). */
2144
+ date: string;
2145
+ /** @description Company profile-page views on this day. */
2146
+ views: number;
2147
+ };
2124
2148
  EmployerSubscription: {
2125
2149
  id: string;
2126
2150
  /** @enum {string} */
@@ -2161,7 +2185,7 @@ interface components {
2161
2185
  type: "worldwide" | "world_region" | "continent" | "region" | "subregion" | "subdivision" | "country" | "custom";
2162
2186
  value: string;
2163
2187
  }[];
2164
- /** @description Where remote candidates must be timezone-compatible. Each entry mirrors the `remotePermits` shape (`world_region`, `continent`, `region`, `subregion`, `country`) plus `timezone` (specific IANA name with optional `plusMinus` ±N hours expansion) and `all` (every timezone equivalent of `worldwide` for permits). The canonical `{type, value}` set is published at `GET /v1/taxonomies/remote-timezones`. **When omitted on POST**, the server auto-derives this from `remotePermits` (or `[{all,all}]` if neither was provided). **PATCH never auto-re-derives** once set, only an explicit replacement updates the stored value, even when `remotePermits` changes. Pass `[]` to clear an existing constraint. */
2188
+ /** @description Where remote candidates must be timezone-compatible. Each entry mirrors the `remotePermits` shape (`world_region`, `continent`, `region`, `subregion`, `country`) plus `timezone` (specific IANA name with optional `plusMinus` ±N hours expansion) and `all` (every timezone: equivalent of `worldwide` for permits). The canonical `{type, value}` set is published at `GET /v1/taxonomies/remote-timezones`. **When omitted on POST**, the server auto-derives this from `remotePermits` (or `[{all,all}]` if neither was provided). **PATCH never auto-re-derives**: once set, only an explicit replacement updates the stored value, even when `remotePermits` changes. Pass `[]` to clear an existing constraint. */
2165
2189
  remoteTimezones?: {
2166
2190
  /** @enum {string} */
2167
2191
  type: "all" | "world_region" | "continent" | "region" | "subregion" | "country" | "timezone";
@@ -2213,6 +2237,19 @@ interface components {
2213
2237
  /** @description The job title. */
2214
2238
  title?: string;
2215
2239
  };
2240
+ /** @description The error envelope returned by every non-2xx response. */
2241
+ Error: {
2242
+ error: {
2243
+ /** @description Machine-readable error code, such as `validation_bad_request` or `jobs_not_found`. */
2244
+ code: string;
2245
+ /** @description Human-readable explanation. */
2246
+ message: string;
2247
+ /** @description Unique id for this request. Include it when contacting support. */
2248
+ requestId: string;
2249
+ /** @description Structured context for some errors, such as per-field validation issues. */
2250
+ details?: unknown;
2251
+ };
2252
+ };
2216
2253
  FeatureDefinition: {
2217
2254
  id: string;
2218
2255
  /** @enum {string} */
@@ -2506,24 +2543,24 @@ interface components {
2506
2543
  description: string | null;
2507
2544
  /** @description Where candidates apply, or `null` if not specified. An HTTPS URL or `mailto:` URI. */
2508
2545
  applicationUrl: string | null;
2509
- /** @description Hierarchical permit selection authored by the caller. Lossless round-trip with the input `[{type:"world_region",value:"EMEA"}]` goes in and comes out the same. The three `remoteWorkPermit*` and `remoteWorldwide` fields below are read-only derived projections of this list. */
2546
+ /** @description Hierarchical permit selection authored by the caller. Lossless round-trip with the input: `[{type:"world_region",value:"EMEA"}]` goes in and comes out the same. The three `remoteWorkPermit*` and `remoteWorldwide` fields below are read-only derived projections of this list. */
2510
2547
  remotePermits: {
2511
2548
  type: string;
2512
2549
  value: string;
2513
2550
  }[];
2514
- /** @description Read-only derived from `remotePermits`. `true` only when the authored selection is a single `{type:"worldwide"}` entry. */
2551
+ /** @description Read-only: derived from `remotePermits`. `true` only when the authored selection is a single `{type:"worldwide"}` entry. */
2515
2552
  remoteWorldwide: boolean | null;
2516
- /** @description Hierarchical timezone selection. Lossless round-trip with the authored input. When omitted on POST, the server auto-derives this from `remotePermits` (or `[{all,all}]` if neither was provided). PATCH never auto-re-derives once set, only an explicit replacement updates the stored value. The flat `remoteAllowedTzOffsets` field below is the read-only derived projection used by search. */
2553
+ /** @description Hierarchical timezone selection. Lossless round-trip with the authored input. When omitted on POST, the server auto-derives this from `remotePermits` (or `[{all,all}]` if neither was provided). PATCH never auto-re-derives: once set, only an explicit replacement updates the stored value. The flat `remoteAllowedTzOffsets` field below is the read-only derived projection used by search. */
2517
2554
  remoteTimezones: {
2518
2555
  type: string;
2519
2556
  value: string;
2520
2557
  plusMinus?: number;
2521
2558
  }[];
2522
- /** @description Read-only derived from `remoteTimezones` (per-country/per-region offset fan-out). UTC hour offsets used by the job-search index. */
2559
+ /** @description Read-only: derived from `remoteTimezones` (per-country/per-region offset fan-out). UTC hour offsets used by the job-search index. */
2523
2560
  remoteAllowedTzOffsets: number[];
2524
- /** @description Read-only derived from `remotePermits` (hierarchical groups fan out to alpha2 sets; subdivisions auto-add the parent country). ISO 3166-1 alpha-2 codes. */
2561
+ /** @description Read-only: derived from `remotePermits` (hierarchical groups fan out to alpha2 sets; subdivisions auto-add the parent country). ISO 3166-1 alpha-2 codes. */
2525
2562
  remoteWorkPermitCountryCodes: string[];
2526
- /** @description Read-only derived from `remotePermits` (subdivision entries only). ISO 3166-2 codes. */
2563
+ /** @description Read-only: derived from `remotePermits` (subdivision entries only). ISO 3166-2 codes. */
2527
2564
  remoteWorkPermitSubdivisionCodes: string[];
2528
2565
  /**
2529
2566
  * @description Whether the employer sponsors visas for remote candidates. One of `yes`, `no`, or `unknown`.
@@ -2589,6 +2626,10 @@ interface components {
2589
2626
  /** @description Board-defined custom field definitions, in display order. Read these to learn which `customFieldValues` keys, types, and option keys a job accepts on POST/PATCH /v1/jobs. */
2590
2627
  customFields?: components["schemas"]["CustomFieldDefinition"][];
2591
2628
  };
2629
+ JobFormCustomFieldsBody: {
2630
+ /** @description Full replacement list of custom field definitions, in display order. Empty array removes all. Changing `type` on an existing `key` is rejected (422); delete + recreate instead. Renaming a key is delete+add and orphans per-job values under the old key. */
2631
+ customFields: components["schemas"]["CustomFieldDefinition"][];
2632
+ };
2592
2633
  JobOfficeLocation: {
2593
2634
  /** @description ISO 3166-1 alpha-2 country code, or `null` if the location was not resolved. */
2594
2635
  countryCode: string | null;
@@ -2774,7 +2815,7 @@ interface components {
2774
2815
  categories: string[];
2775
2816
  /** @description External identifier supplied by the caller on create, used for deduplication via `GET /v1/jobs?externalId=...`. `null` when no external identifier was set. */
2776
2817
  externalId: string | null;
2777
- /** @description Board-defined custom-field values for this job, keyed by the field `key` (the definitions are published at `GET /v1/settings/job-form`). 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. Only real values are stored, so this never contains `null` or empty values. */
2818
+ /** @description Board-defined custom-field values for this job, keyed by the field `key` (the definitions are published at `GET /v1/settings/job-form`). 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. Only real values are stored, so this never contains `null` or empty values. */
2778
2819
  customFieldValues: {
2779
2820
  [key: string]: string | string[] | boolean | number;
2780
2821
  };
@@ -2787,7 +2828,7 @@ interface components {
2787
2828
  type: string;
2788
2829
  /** @description Page heading (H1), with `{{board_name}}` resolved. */
2789
2830
  title: string;
2790
- /** @description Owner-authored prose as portable HTML (transitional field, ADR-0039 the starter authors the layout). Empty string when the page has no text body. */
2831
+ /** @description Owner-authored prose as portable HTML (transitional field, ADR-0039: the starter authors the layout). Empty string when the page has no text body. */
2791
2832
  content: string;
2792
2833
  /** @enum {string} */
2793
2834
  contentFormat: "html";
@@ -2800,9 +2841,9 @@ interface components {
2800
2841
  LocationSalaryDetail: {
2801
2842
  /** @enum {string} */
2802
2843
  object: "location_salary_detail";
2803
- /** @description Immutable English source place slug the salary-stats key. */
2844
+ /** @description Immutable English source place slug: the salary-stats key. */
2804
2845
  sourceSlug: string;
2805
- /** @description Board-language canonical URL slug the starter 308 target. */
2846
+ /** @description Board-language canonical URL slug: the starter 308 target. */
2806
2847
  canonicalSlug: string;
2807
2848
  placeName: string;
2808
2849
  placeId: string;
@@ -2919,7 +2960,7 @@ interface components {
2919
2960
  MediaGet: components["schemas"]["MediaUpload"] & {
2920
2961
  /** @description Time at which the file was uploaded. ISO 8601 datetime. */
2921
2962
  uploadedAt: string;
2922
- /** @description Resources currently referencing this file. Currently always `[]` the resolver is not yet implemented. */
2963
+ /** @description Resources currently referencing this file. Currently always `[]`. The resolver is not yet implemented. */
2923
2964
  referencedBy: {
2924
2965
  /** @description Type of the resource referencing this file. */
2925
2966
  resourceType: string;
@@ -3142,7 +3183,7 @@ interface components {
3142
3183
  requireApprovalAggregatedJobs?: boolean;
3143
3184
  /** @description Whether visitors must sign in to view jobs. */
3144
3185
  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`. */
3186
+ /** @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
3187
  nativeApplicationsEnabled?: boolean;
3147
3188
  /** @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
3189
  applicantMessagingEnabled?: boolean;
@@ -3187,7 +3228,7 @@ interface components {
3187
3228
  talentNavLabel?: string;
3188
3229
  /** @description Custom copy displayed on the password gate. Up to 500 characters. Pass `null` to clear. */
3189
3230
  passwordProtectionMessage?: string | "" | unknown | unknown;
3190
- /** @description Free-form configuration object merged into the existing config. Reserved keys (e.g. `passwordProtectionEnabled`, `adsenseClientId`, `jobAccessPaywallEnabled`) cannot be set here use the dedicated endpoints instead. */
3231
+ /** @description Free-form configuration object merged into the existing config. Reserved keys (e.g. `passwordProtectionEnabled`, `adsenseClientId`, `jobAccessPaywallEnabled`) cannot be set here. Use the dedicated endpoints instead. */
3191
3232
  config?: {
3192
3233
  [key: string]: unknown;
3193
3234
  };
@@ -3390,6 +3431,11 @@ interface components {
3390
3431
  cursor?: string | null;
3391
3432
  /** @description A limit on the number of objects to be returned. Limit can range between 1 and 50. */
3392
3433
  limit?: number;
3434
+ /**
3435
+ * @description The number of posts to skip — the search page offset. Takes precedence over `cursor`; pair with the response `count` to page in parallel. `offset + limit` may not exceed 10,000.
3436
+ * @example 0
3437
+ */
3438
+ offset?: number;
3393
3439
  };
3394
3440
  PublicBlogTag: components["schemas"]["PublicBlogTagEmbed"] & {
3395
3441
  /** @enum {string} */
@@ -3416,7 +3462,7 @@ interface components {
3416
3462
  primaryDomain: string | null;
3417
3463
  /** @description Whitelabel toggle (default `true`). Render the "Powered by Cavuno" badge unless `false`. */
3418
3464
  showCavunoBranding: boolean;
3419
- /** @description True ONLY for the platform sandbox fixture tenant the safe target for write probes (doctor tier 3); data is reset nightly. Every real tenant board is `false`. */
3465
+ /** @description True ONLY for the platform sandbox fixture tenant: the safe target for write probes (doctor tier 3); data is reset nightly. Every real tenant board is `false`. */
3420
3466
  sandbox: boolean;
3421
3467
  features: {
3422
3468
  jobAlerts: boolean;
@@ -3431,11 +3477,11 @@ interface components {
3431
3477
  impressum: boolean;
3432
3478
  /** @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
3479
  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. */
3480
+ /** @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
3481
  messaging: boolean;
3436
3482
  };
3437
3483
  /**
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.
3484
+ * @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.
3439
3485
  * @enum {string}
3440
3486
  */
3441
3487
  talentDirectoryVisibility: "off" | "public" | "employers_only";
@@ -3462,9 +3508,9 @@ interface components {
3462
3508
  };
3463
3509
  };
3464
3510
  } | null;
3465
- /** @description Operator-defined custom job-field definitions (CAV-294), in display order. Board-wide; the frontend uses these to render and localize each job's opaque `customFieldValues`. Empty when the board defines none. Display-only not filterable or searchable in v1. */
3511
+ /** @description Operator-defined custom job-field definitions (CAV-294), in display order. Board-wide; the frontend uses these to render and localize each job's opaque `customFieldValues`. Empty when the board defines none. Display-only: not filterable or searchable in v1. */
3466
3512
  customFields: components["schemas"]["CustomFieldDefinition"][];
3467
- /** @description Stored operator label overrides by config group (`jobCardLabels`, `navLabels`, `breadcrumbsLabels`, …) plain-text chrome copy to merge over the `@cavuno/board` `uiCopy(language)` catalog via `uiCopy(language, labels)` (ADR-0059). Empty object when the board stores none. */
3513
+ /** @description Stored operator label overrides by config group (`jobCardLabels`, `navLabels`, `breadcrumbsLabels`, …): plain-text chrome copy to merge over the `@cavuno/board` `uiCopy(language)` catalog via `uiCopy(language, labels)` (ADR-0059). Empty object when the board stores none. */
3468
3514
  labels: {
3469
3515
  [key: string]: {
3470
3516
  [key: string]: string;
@@ -3472,7 +3518,7 @@ interface components {
3472
3518
  };
3473
3519
  /** @description Footer/brand data the hosted board footer renders (description, contact, website + social links, navigation order). The brand/social URLs (`websiteUrl`, `facebookUrl`, `linkedinUrl`, `xUrl`) are sanitized to absolute http(s); `customLinks[].url` is served verbatim (see its own note). */
3474
3520
  footer: {
3475
- /** @description Operator-written footer brand description. May carry a `{{board_name}}` placeholder resolve it before rendering. When null, fall back to the label catalog's `footer.defaultDescription` template. */
3521
+ /** @description Operator-written footer brand description. May carry a `{{board_name}}` placeholder. Resolve it before rendering. When null, fall back to the label catalog's `footer.defaultDescription` template. */
3476
3522
  description: string | null;
3477
3523
  /** @description Public contact email for the footer About column (render as `mailto:`). */
3478
3524
  contactEmail: string | null;
@@ -3481,9 +3527,9 @@ interface components {
3481
3527
  xUrl: string | null;
3482
3528
  facebookUrl: string | null;
3483
3529
  linkedinUrl: string | null;
3484
- /** @description Operator-configured navigation order: system item ids (`home`, `companies`, `pricing`, `blog`) and `custom:<id>` refs into `customLinks`. Empty when the operator never reordered render the system defaults. System items still gate on their feature flags (e.g. `blog` only when `features.blog`). */
3530
+ /** @description Operator-configured navigation order: system item ids (`home`, `companies`, `pricing`, `blog`) and `custom:<id>` refs into `customLinks`. Empty when the operator never reordered. Render the system defaults. System items still gate on their feature flags (e.g. `blog` only when `features.blog`). */
3485
3531
  navigationOrder: string[];
3486
- /** @description Operator-defined navigation links referenced from `navigationOrder` as `custom:<id>`; links not referenced there append after the system items (hosted-footer behavior). Each `url` is served verbatim (trimmed only) and may be a relative path (e.g. `/hub`) unlike the brand/social URLs it is NOT run through http(s) sanitization (matching the hosted footer, which supports relative links), so a consumer MUST sanitize it before binding to an anchor href. */
3532
+ /** @description Operator-defined navigation links referenced from `navigationOrder` as `custom:<id>`; links not referenced there append after the system items (hosted-footer behavior). Each `url` is served verbatim (trimmed only) and may be a relative path (e.g. `/hub`): unlike the brand/social URLs it is NOT run through http(s) sanitization (matching the hosted footer, which supports relative links), so a consumer MUST sanitize it before binding to an anchor href. */
3487
3533
  customLinks: {
3488
3534
  id: string;
3489
3535
  label: string;
@@ -3502,6 +3548,11 @@ interface components {
3502
3548
  cursor?: string | null;
3503
3549
  /** @description A limit on the number of objects to be returned. Limit can range between 1 and 100. */
3504
3550
  limit?: number;
3551
+ /**
3552
+ * @description The number of companies to skip — the company catalog page offset. Takes precedence over `cursor`; pair with the response `count` to page in parallel. `offset + limit` may not exceed 10,000.
3553
+ * @example 0
3554
+ */
3555
+ offset?: number;
3505
3556
  };
3506
3557
  /** @description Public-only links. The admin URL is intentionally omitted on public-board responses. */
3507
3558
  PublicCompanyLinks: {
@@ -3592,7 +3643,7 @@ interface components {
3592
3643
  type: string;
3593
3644
  value: string;
3594
3645
  }[];
3595
- /** @description Read-only derived from `remotePermits`. `true` only when the authored selection is a single `{type:"worldwide"}` entry. */
3646
+ /** @description Read-only: derived from `remotePermits`. `true` only when the authored selection is a single `{type:"worldwide"}` entry. */
3596
3647
  remoteWorldwide: boolean | null;
3597
3648
  /** @description Hierarchical timezone selection. The flat `remoteAllowedTzOffsets` field below is the read-only derived projection. */
3598
3649
  remoteTimezones: {
@@ -3600,11 +3651,11 @@ interface components {
3600
3651
  value: string;
3601
3652
  plusMinus?: number;
3602
3653
  }[];
3603
- /** @description Read-only derived from `remoteTimezones`. UTC hour offsets used by the job-search index. */
3654
+ /** @description Read-only: derived from `remoteTimezones`. UTC hour offsets used by the job-search index. */
3604
3655
  remoteAllowedTzOffsets: number[];
3605
- /** @description Read-only derived from `remotePermits` (hierarchical groups fan out to alpha2 sets; subdivisions auto-add the parent country). ISO 3166-1 alpha-2 codes. */
3656
+ /** @description Read-only: derived from `remotePermits` (hierarchical groups fan out to alpha2 sets; subdivisions auto-add the parent country). ISO 3166-1 alpha-2 codes. */
3606
3657
  remoteWorkPermitCountryCodes: string[];
3607
- /** @description Read-only derived from `remotePermits` (subdivision entries only). ISO 3166-2 codes. */
3658
+ /** @description Read-only: derived from `remotePermits` (subdivision entries only). ISO 3166-2 codes. */
3608
3659
  remoteWorkPermitSubdivisionCodes: string[];
3609
3660
  /**
3610
3661
  * @description Whether the employer sponsors visas for remote candidates. One of `yes`, `no`, or `unknown`.
@@ -3627,7 +3678,7 @@ interface components {
3627
3678
  company: components["schemas"]["JobCompany"];
3628
3679
  /** @description Physical office locations associated with the job. */
3629
3680
  officeLocations: components["schemas"]["JobOfficeLocation"][];
3630
- /** @description Resolved job categories (slug + board display name) same shape as the card; names joined server-side. */
3681
+ /** @description Resolved job categories (slug + board display name): same shape as the card; names joined server-side. */
3631
3682
  categories: {
3632
3683
  slug: string;
3633
3684
  name: string;
@@ -3642,7 +3693,7 @@ interface components {
3642
3693
  slug: string;
3643
3694
  name: string;
3644
3695
  }[];
3645
- /** @description Opaque, display-only custom-field values (CAV-294), 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` definitions (see `GET /v1/boards/:identifier`). `{}` when the board defines no custom fields. Not filterable or searchable in v1. */
3696
+ /** @description Opaque, display-only custom-field values (CAV-294), 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` definitions (see `GET /v1/boards/:identifier`). `{}` when the board defines no custom fields. Not filterable or searchable in v1. */
3646
3697
  customFieldValues: {
3647
3698
  [key: string]: string | string[] | boolean | number;
3648
3699
  };
@@ -3820,7 +3871,7 @@ interface components {
3820
3871
  */
3821
3872
  limit?: number;
3822
3873
  /**
3823
- * @description The number of jobs to skip the job catalog page offset. Takes precedence over `cursor`. `offset + limit` may not exceed 10,000.
3874
+ * @description The number of jobs to skip: the job catalog page offset. Takes precedence over `cursor`. `offset + limit` may not exceed 10,000.
3824
3875
  * @example 0
3825
3876
  */
3826
3877
  offset?: number;
@@ -3973,9 +4024,9 @@ interface components {
3973
4024
  segment: string;
3974
4025
  /** @description The aggregation interval (e.g. `1d`). */
3975
4026
  interval: string;
3976
- /** @description ISO date string inclusive start of the snapshot range. */
4027
+ /** @description ISO date string: inclusive start of the snapshot range. */
3977
4028
  rangeStart: string;
3978
- /** @description ISO date string inclusive end of the snapshot range. */
4029
+ /** @description ISO date string: inclusive end of the snapshot range. */
3979
4030
  rangeEnd: string;
3980
4031
  /** @description Provider-specific metric payload as collected. */
3981
4032
  payload?: unknown;
@@ -3992,15 +4043,15 @@ interface components {
3992
4043
  provider: string;
3993
4044
  /** @description Whether the integration is already fully connected. */
3994
4045
  connected: boolean;
3995
- /** @description OAuth providers only the URL the user must visit to grant access. */
4046
+ /** @description OAuth providers only. The URL the user must visit to grant access. */
3996
4047
  authorizationUrl?: string;
3997
- /** @description Search Console only the site-verification DNS token. */
4048
+ /** @description Search Console only: the site-verification DNS token. */
3998
4049
  verificationToken?: string;
3999
4050
  /** @description The board site URL the integration reports on. */
4000
4051
  siteUrl?: string;
4001
- /** @description Stripe only the Monetization settings deep link. */
4052
+ /** @description Stripe only: the Monetization settings deep link. */
4002
4053
  redirectUrl?: string;
4003
- /** @description Stripe only why no OAuth URL is returned. */
4054
+ /** @description Stripe only: why no OAuth URL is returned. */
4004
4055
  reason?: string;
4005
4056
  };
4006
4057
  ReportingIntegration: {
@@ -4158,7 +4209,7 @@ interface components {
4158
4209
  /** @description Display price text, e.g. "Contact us". */
4159
4210
  priceText: string;
4160
4211
  ctaText: string;
4161
- /** @description The CTA target a URL, mailto:, or tel: link. */
4212
+ /** @description The CTA target: a URL, mailto:, or tel: link. */
4162
4213
  ctaDestination: string;
4163
4214
  featuredBullets: string[];
4164
4215
  displayOrder: number;
@@ -4179,7 +4230,7 @@ interface components {
4179
4230
  id: string;
4180
4231
  /** @enum {string} */
4181
4232
  object: "saved_job";
4182
- /** @description The saved job also the DELETE path key. */
4233
+ /** @description The saved job id. Also the DELETE path key. */
4183
4234
  jobId: string;
4184
4235
  /** Format: date-time */
4185
4236
  savedAt: string;
@@ -4408,9 +4459,9 @@ interface components {
4408
4459
  SkillSalaryDetail: {
4409
4460
  /** @enum {string} */
4410
4461
  object: "skill_salary_detail";
4411
- /** @description Immutable English source slug the salary-stats key. */
4462
+ /** @description Immutable English source slug: the salary-stats key. */
4412
4463
  sourceSlug: string;
4413
- /** @description Board-language canonical URL slug the starter 308 target. */
4464
+ /** @description Board-language canonical URL slug: the starter 308 target. */
4414
4465
  canonicalSlug: string;
4415
4466
  skillName: string;
4416
4467
  overallSalary: {
@@ -4589,7 +4640,7 @@ interface components {
4589
4640
  title: string;
4590
4641
  companyName: string;
4591
4642
  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). */
4643
+ /** @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
4644
  companyLogoUrl: string | null;
4594
4645
  location: string | null;
4595
4646
  employmentType: string | null;
@@ -4738,9 +4789,9 @@ interface components {
4738
4789
  TitleSalaryDetail: {
4739
4790
  /** @enum {string} */
4740
4791
  object: "title_salary_detail";
4741
- /** @description Immutable English source slug the salary-stats key. */
4792
+ /** @description Immutable English source slug: the salary-stats key. */
4742
4793
  sourceSlug: string;
4743
- /** @description Board-language canonical URL slug the starter 308 target. */
4794
+ /** @description Board-language canonical URL slug: the starter 308 target. */
4744
4795
  canonicalSlug: string;
4745
4796
  categoryName: string;
4746
4797
  overallSalary: {
@@ -4822,7 +4873,7 @@ interface components {
4822
4873
  client_id?: string;
4823
4874
  /** @description OAuth client secret. May be supplied here or via HTTP Basic authentication. */
4824
4875
  client_secret?: string;
4825
- /** @description Optional scope narrowing. Currently ignored issued tokens always carry the full scope registered for the client. */
4876
+ /** @description Optional scope narrowing. Currently ignored: issued tokens always carry the full scope registered for the client. */
4826
4877
  scope?: string;
4827
4878
  };
4828
4879
  TokenResponse: {
@@ -5068,7 +5119,7 @@ interface components {
5068
5119
  type: "worldwide" | "world_region" | "continent" | "region" | "subregion" | "subdivision" | "country" | "custom";
5069
5120
  value: string;
5070
5121
  }[];
5071
- /** @description Where remote candidates must be timezone-compatible. Each entry mirrors the `remotePermits` shape (`world_region`, `continent`, `region`, `subregion`, `country`) plus `timezone` (specific IANA name with optional `plusMinus` ±N hours expansion) and `all` (every timezone equivalent of `worldwide` for permits). The canonical `{type, value}` set is published at `GET /v1/taxonomies/remote-timezones`. **When omitted on POST**, the server auto-derives this from `remotePermits` (or `[{all,all}]` if neither was provided). **PATCH never auto-re-derives** once set, only an explicit replacement updates the stored value, even when `remotePermits` changes. Pass `[]` to clear an existing constraint. */
5122
+ /** @description Where remote candidates must be timezone-compatible. Each entry mirrors the `remotePermits` shape (`world_region`, `continent`, `region`, `subregion`, `country`) plus `timezone` (specific IANA name with optional `plusMinus` ±N hours expansion) and `all` (every timezone: equivalent of `worldwide` for permits). The canonical `{type, value}` set is published at `GET /v1/taxonomies/remote-timezones`. **When omitted on POST**, the server auto-derives this from `remotePermits` (or `[{all,all}]` if neither was provided). **PATCH never auto-re-derives**: once set, only an explicit replacement updates the stored value, even when `remotePermits` changes. Pass `[]` to clear an existing constraint. */
5072
5123
  remoteTimezones?: {
5073
5124
  /** @enum {string} */
5074
5125
  type: "all" | "world_region" | "continent" | "region" | "subregion" | "country" | "timezone";
@@ -5125,7 +5176,7 @@ interface components {
5125
5176
  officeLocations?: components["schemas"]["JobOfficeLocationInput"][];
5126
5177
  /** @description An external identifier for the job from your own system, such as an ATS requisition ID. Use this value to look up the job later via `GET /v1/jobs?externalId=...` for deduplication. Scoped per-account: two different accounts may reuse the same `externalId` without collision. Up to 255 characters. */
5127
5178
  externalId?: string;
5128
- /** @description Board-defined custom-field values, keyed by the field `key` (definitions, including type and option keys, are published at `GET /v1/settings/job-form`). Writes are **additive**: on `PATCH` a key you send is set/overwritten and a key you omit is preserved (unsent keys are never cleared); on `POST` this initializes the bag. Send a key with an intentional-empty value `null`, `""`, or `[]` to **clear** it (`""`/`null` clear any type; `[]` clears a `multi_select`); `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 wrong-typed value is rejected (`custom_field_wrong_type`), never silently cleared. Unknown keys are ignored. The stored bag never contains `null`/empty values. */
5179
+ /** @description Board-defined custom-field values, keyed by the field `key` (definitions, including type and option keys, are published at `GET /v1/settings/job-form`). Writes are **additive**: on `PATCH` a key you send is set/overwritten and a key you omit is preserved (unsent keys are never cleared); on `POST` this initializes the bag. Send a key with an intentional-empty value (`null`, `""`, or `[]`) to **clear** it (`""`/`null` clear any type; `[]` clears a `multi_select`); `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 wrong-typed value is rejected (`custom_field_wrong_type`), never silently cleared. Unknown keys are ignored. The stored bag never contains `null`/empty values. */
5129
5180
  customFieldValues?: {
5130
5181
  [key: string]: string | string[] | boolean | number | unknown | unknown;
5131
5182
  };
@@ -5213,7 +5264,7 @@ interface components {
5213
5264
  name?: string;
5214
5265
  };
5215
5266
  Usage: {
5216
- /** @description Unique identifier for the object. Equal to the account ID usage is a per-account singleton. */
5267
+ /** @description Unique identifier for the object. Equal to the account ID: usage is a per-account singleton. */
5217
5268
  id: string;
5218
5269
  /**
5219
5270
  * @description String representing the object's type. Objects of the same type share the same value.