@cavuno/board 4.27.0 → 4.28.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 (45) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/dist/{_spec-B_pBNVUd.d.mts → _spec-DQvmsp5o.d.mts} +102 -20
  3. package/dist/{_spec-B_pBNVUd.d.ts → _spec-DQvmsp5o.d.ts} +102 -20
  4. package/dist/{blog-DzGRUsj5.d.ts → blog-CUkvhn3c.d.ts} +1 -1
  5. package/dist/{blog-fhXRik6k.d.mts → blog-CvuObn9O.d.mts} +1 -1
  6. package/dist/{board-fVAXZ8T5.d.ts → board-CCG1pO6r.d.ts} +2 -2
  7. package/dist/{board-DEiEHcpe.d.mts → board-D6xOidUX.d.mts} +2 -2
  8. package/dist/{breadcrumbs-qE3CD--N.d.mts → breadcrumbs-BBvJ5gq-.d.mts} +2 -2
  9. package/dist/{breadcrumbs-DNaaP3xa.d.ts → breadcrumbs-D2Cwrju4.d.ts} +2 -2
  10. package/dist/browser/cavuno-board.global.min.js +1 -1
  11. package/dist/{chunk-DUTQOLOF.mjs → chunk-EHSB2VAJ.mjs} +4 -0
  12. package/dist/filters.d.mts +2 -2
  13. package/dist/filters.d.ts +2 -2
  14. package/dist/format.d.mts +4 -4
  15. package/dist/format.d.ts +4 -4
  16. package/dist/index.d.mts +91 -14
  17. package/dist/index.d.ts +91 -14
  18. package/dist/index.js +44 -4
  19. package/dist/index.mjs +41 -5
  20. package/dist/{jobs-R-h3A3kl.d.mts → jobs-CEIuahbz.d.ts} +9 -7
  21. package/dist/{jobs-BRysn2m0.d.ts → jobs-DjMcghv6.d.mts} +9 -7
  22. package/dist/{search-BlB690ma.d.mts → search-C0LiPXVb.d.mts} +1 -1
  23. package/dist/{search-BK_zHHNQ.d.ts → search-D-EjtZH3.d.ts} +1 -1
  24. package/dist/{seo-C7gMl6Y7.d.ts → seo-CjNGqZZH.d.ts} +1 -1
  25. package/dist/{seo-0mbZ7M_E.d.mts → seo-DCQp8V1c.d.mts} +1 -1
  26. package/dist/seo-files.d.mts +2 -2
  27. package/dist/seo-files.d.ts +2 -2
  28. package/dist/seo.d.mts +6 -6
  29. package/dist/seo.d.ts +6 -6
  30. package/dist/server.d.mts +6 -6
  31. package/dist/server.d.ts +6 -6
  32. package/dist/server.mjs +1 -1
  33. package/dist/sitemap.d.mts +6 -6
  34. package/dist/sitemap.d.ts +6 -6
  35. package/dist/sitemap.mjs +1 -1
  36. package/dist/suggest.d.mts +2 -2
  37. package/dist/suggest.d.ts +2 -2
  38. package/package.json +1 -1
  39. package/skills/cavuno-board-account/SKILL.md +27 -0
  40. package/skills/cavuno-board-errors/SKILL.md +1 -1
  41. package/skills/cavuno-board-filters/SKILL.md +90 -1
  42. package/skills/cavuno-board-format/SKILL.md +52 -0
  43. package/skills/cavuno-board-post-a-job/SKILL.md +24 -0
  44. package/skills/cavuno-board-salaries/SKILL.md +7 -0
  45. package/skills/manifest.json +2 -2
package/CHANGELOG.md CHANGED
@@ -3,6 +3,40 @@
3
3
  This changelog records changes that affect Board API compatibility, exported
4
4
  types, runtime behavior, or supported integration patterns.
5
5
 
6
+ ## 4.28.0 — 2026-09-25
7
+
8
+ - **Resolve global location selections.** `board.locations.search` finds places
9
+ beyond a board’s existing jobs. Pass the same session token to
10
+ `board.locations.resolve` when a suggestion is selected, then use its
11
+ canonical location ID when submitting an office. `LocationResolveInput`
12
+ describes the selection request.
13
+
14
+ - **Custom-field values on job cards.** Every `PublicJobCard` (jobs list,
15
+ search, similar, company jobs, embed, recommended and saved jobs) carries
16
+ `customFieldValues` for the job and `company.customFieldValues` for its
17
+ company, keyed by field key and `{}` when empty. Only `single_select`,
18
+ `multi_select`, `boolean` and `number` values are included; select values
19
+ are option keys. Text values stay on the full job and company, and private
20
+ company fields are never included. Job values are checked against the
21
+ board's current job custom-field definitions, so values of removed fields
22
+ or options are left out. A listing can now render custom-field badges
23
+ without fetching each job.
24
+ - **Filter jobs by company custom fields.** `board.jobs.search` accepts
25
+ `filters.companyCustomFields`, matched against the public profile fields
26
+ of each job's company, with the same clauses as `filters.customFields`:
27
+ a field `key` and its accepted `values` (option keys, booleans or
28
+ numbers), AND across clauses and OR within one, up to 10 of each. Keys and
29
+ options come from `board.profileFields.retrieve('company')`. An unknown or
30
+ private key, or an undefined option key, returns `400 invalid_filter`. Job
31
+ and company keys never collide, so both lists may use the same key. When a
32
+ company's values change, its jobs follow in search within seconds. If the
33
+ filter cannot be served yet on a board, the search returns `503
34
+ search_filter_unavailable` with `details.filter: "companyCustomFields"`;
35
+ the same search without it works.
36
+ - `JobsSearchBody` is now the spec's search body type as generated; its
37
+ `customFields` and `companyCustomFields` clauses stay identical to
38
+ `CustomFieldFilter`.
39
+
6
40
  ## 4.27.0 — 2026-09-23
7
41
 
8
42
  - **Collections and profile fields.** Company and talent responses carry
@@ -61,6 +95,17 @@ types, runtime behavior, or supported integration patterns.
61
95
  job. This applies to any edit of an existing job that has an office
62
96
  location but no work arrangement, even one that changes only other fields:
63
97
  send an allowed `remoteOption` with it.
98
+ - **Employer checkout can return `pending_approval`.** When a board requires
99
+ approval of free jobs, a free employer post (and an invoice post that
100
+ publishes on issue) is held as a draft for the operator to publish instead
101
+ of going live, and `POST
102
+ /boards/{identifier}/me/companies/{slug}/jobs/{id}/checkout` answers
103
+ `status: "pending_approval"` with the `jobId`. Treat it as "submitted, not
104
+ live": do not link the job as published. Bundle, subscription and
105
+ member-credit posts still publish immediately (`status: "published"`), as
106
+ does a free post on a board without approval. The board operator now also
107
+ receives the job-submission notification for employer posts, matching the
108
+ public posting form.
64
109
  - **`jobs_constraint_violation` errors carry structured details.**
65
110
  `error.details.violations` lists each broken rule as `{ code, path, params }`
66
111
  (for example `{ code: "custom_field_required", path: ["customFieldValues",
@@ -853,10 +853,19 @@ interface components {
853
853
  employmentType: string;
854
854
  remoteOption: string;
855
855
  officeLocations: {
856
- /** @enum {string} */
856
+ /**
857
+ * @deprecated
858
+ * @description Deprecated — send `locationId` instead (an `id` from `GET /locations/search` or `GET /places`). Still accepted.
859
+ * @enum {string}
860
+ */
857
861
  provider?: "mapbox";
862
+ /**
863
+ * @deprecated
864
+ * @description Deprecated — send `locationId` instead (an `id` from `GET /locations/search` or `GET /places`). Still accepted.
865
+ */
858
866
  providerPlaceId?: string;
859
- displayName: string;
867
+ /** @description Display text for the location. Required unless `locationId` is sent; with `locationId` it defaults to the location's full name (locality, city, region, country), e.g. `Lyon, Auvergne-Rhône-Alpes, France`. */
868
+ displayName?: string;
860
869
  countryCode?: string;
861
870
  region?: string;
862
871
  locality?: string;
@@ -864,6 +873,10 @@ interface components {
864
873
  latitude?: number;
865
874
  longitude?: number;
866
875
  boundingBox?: number[];
876
+ /**
877
+ * @deprecated
878
+ * @description Deprecated — send `locationId` instead (an `id` from `GET /locations/search` or `GET /places`). Still accepted.
879
+ */
867
880
  raw?: {
868
881
  suggestion?: {
869
882
  [key: string]: unknown;
@@ -872,6 +885,8 @@ interface components {
872
885
  [key: string]: unknown;
873
886
  };
874
887
  };
888
+ /** @description Opaque location id from `GET /locations/search` or `GET /places` (`id`) — the preferred way to send a location. Resolved server-side to the full place; the other fields are then ignored except `displayName`. An unknown id returns `400 locations_invalid_id`. If the lookup is temporarily unavailable the entry is kept with `displayName` alone, or the request fails with `503 locations_unavailable` when there is none. */
889
+ locationId?: string;
875
890
  }[];
876
891
  inOfficePeriod?: string;
877
892
  inOfficeFrequency?: number;
@@ -1044,7 +1059,7 @@ interface components {
1044
1059
  /** @enum {string} */
1045
1060
  object: "employer_checkout";
1046
1061
  /** @enum {string} */
1047
- status: "checkout" | "published" | "invoice_sent";
1062
+ status: "checkout" | "published" | "pending_approval" | "invoice_sent";
1048
1063
  /** @description The Stripe Checkout / hosted-invoice URL, or `null`. */
1049
1064
  checkoutUrl: string | null;
1050
1065
  jobId: string;
@@ -1193,8 +1208,8 @@ interface components {
1193
1208
  inOfficePeriod?: "per_week" | "per_month" | "per_year";
1194
1209
  /** @description How often the candidate must be in-office over `inOfficePeriod`. */
1195
1210
  inOfficeFrequency?: number;
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`. */
1197
- officeLocations?: components["schemas"]["JobOfficeLocationInput"][];
1211
+ /** @description Physical office locations associated with the job. Prefer `{locationId}` with an `id` from `GET /locations/search` (what a location picker returns); `{query: "City, Country"}` for free-form text and `{city, country, region?, locality?}` are also accepted and geocoded server-side (a country mismatch returns `400 jobs_unresolvable_location`). A location outside the board's job-form `allowedCountries` returns `400 jobs_constraint_violation`. */
1212
+ officeLocations?: components["schemas"]["EmployerJobOfficeLocationInput"][];
1198
1213
  /** @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
1214
  collectionValues?: {
1200
1215
  [key: string]: string[] | unknown;
@@ -1263,6 +1278,24 @@ interface components {
1263
1278
  */
1264
1279
  public: string | null;
1265
1280
  };
1281
+ EmployerJobOfficeLocationInput: {
1282
+ /** @description Opaque location id from `GET /locations/search` or `GET /places` (`id`). Resolved server-side to the full place (country, region, city, locality). An unknown id returns `400 locations_invalid_id`; `503 locations_unavailable` while the lookup is temporarily down. */
1283
+ locationId: string;
1284
+ /** @description Display text for the location. Defaults to the location's full name (locality, city, region, country), e.g. `Lyon, Auvergne-Rhône-Alpes, France`. */
1285
+ displayName?: string;
1286
+ } | {
1287
+ /** @description Free-form location string (e.g. `"Berlin, Germany"`, `"Utrecht, Netherlands"`, `"Mountain View, California, USA"`). Resolved server-side; rejected when no high-confidence match is found. */
1288
+ query: string;
1289
+ } | {
1290
+ /** @description Neighborhood or sub-locality. */
1291
+ locality?: string;
1292
+ /** @description City. */
1293
+ city: string;
1294
+ /** @description Region, state, or province. */
1295
+ region?: string;
1296
+ /** @description ISO 3166-1 alpha-2 country code OR recognized country name/alias. Aliases are normalized to canonical alpha-2 server-side (e.g. `US`, `USA`, `United States` → `US`; `UK`, `GB`, `United Kingdom` → `GB`). */
1297
+ country: string;
1298
+ };
1266
1299
  EmployerJobStat: {
1267
1300
  /** @enum {string} */
1268
1301
  object: "employer_job_stat";
@@ -1470,8 +1503,8 @@ interface components {
1470
1503
  inOfficePeriod?: "per_week" | "per_month" | "per_year";
1471
1504
  /** @description How often the candidate must be in-office over `inOfficePeriod`. */
1472
1505
  inOfficeFrequency?: number;
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`. */
1474
- officeLocations?: components["schemas"]["JobOfficeLocationInput"][];
1506
+ /** @description Physical office locations associated with the job. Prefer `{locationId}` with an `id` from `GET /locations/search` (what a location picker returns); `{query: "City, Country"}` for free-form text and `{city, country, region?, locality?}` are also accepted and geocoded server-side (a country mismatch returns `400 jobs_unresolvable_location`). A location outside the board's job-form `allowedCountries` returns `400 jobs_constraint_violation`. */
1507
+ officeLocations?: components["schemas"]["EmployerJobOfficeLocationInput"][];
1475
1508
  /** @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
1509
  collectionValues?: {
1477
1510
  [key: string]: string[] | unknown;
@@ -1574,19 +1607,6 @@ interface components {
1574
1607
  /** @description Pre-formatted display name for the location, or `null` if not resolved. */
1575
1608
  displayName: string | null;
1576
1609
  };
1577
- JobOfficeLocationInput: {
1578
- /** @description Free-form location string (e.g. `"Berlin, Germany"`, `"Utrecht, Netherlands"`, `"Mountain View, California, USA"`). Resolved server-side; rejected when no high-confidence match is found. */
1579
- query: string;
1580
- } | {
1581
- /** @description Neighborhood or sub-locality. */
1582
- locality?: string;
1583
- /** @description City. */
1584
- city: string;
1585
- /** @description Region, state, or province. */
1586
- region?: string;
1587
- /** @description ISO 3166-1 alpha-2 country code OR recognized country name/alias. Aliases are normalized to canonical alpha-2 server-side (e.g. `US`, `USA`, `United States` → `US`; `UK`, `GB`, `United Kingdom` → `GB`). */
1588
- country: string;
1589
- };
1590
1610
  JobPostingBillingOptions: {
1591
1611
  /** @enum {string} */
1592
1612
  object: "job_posting_billing_options";
@@ -1680,6 +1700,12 @@ interface components {
1680
1700
  /** Format: email */
1681
1701
  email: string;
1682
1702
  };
1703
+ LocationResolveInput: {
1704
+ /** @description Opaque id returned by location search. */
1705
+ locationId: string;
1706
+ /** @description The same opaque session id used for the search interaction that returned this location. */
1707
+ session: string;
1708
+ };
1683
1709
  LocationSalaryDetail: {
1684
1710
  /** @enum {string} */
1685
1711
  object: "location_salary_detail";
@@ -1702,6 +1728,8 @@ interface components {
1702
1728
  } | null;
1703
1729
  childLocations: {
1704
1730
  placeName: string;
1731
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
1732
+ placeLabel: string;
1705
1733
  placeSlug: string;
1706
1734
  countryCode: string;
1707
1735
  avgSalaryMin: number;
@@ -1718,6 +1746,8 @@ interface components {
1718
1746
  regionSlug: string;
1719
1747
  cities: {
1720
1748
  placeName: string;
1749
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
1750
+ placeLabel: string;
1721
1751
  placeSlug: string;
1722
1752
  countryCode: string;
1723
1753
  avgSalaryMin: number;
@@ -1746,6 +1776,8 @@ interface components {
1746
1776
  }[];
1747
1777
  siblingLocations: {
1748
1778
  placeName: string;
1779
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
1780
+ placeLabel: string;
1749
1781
  placeSlug: string;
1750
1782
  countryCode: string;
1751
1783
  avgSalaryMin: number;
@@ -2524,6 +2556,10 @@ interface components {
2524
2556
  slug: string;
2525
2557
  name: string;
2526
2558
  logoUrl: string | null;
2559
+ /** @description The company's public custom-field values of the select, boolean, and number types, keyed by field key; select values are option `key`s. Private fields and text types are omitted (the full company carries text values). `{}` when none. */
2560
+ customFieldValues: {
2561
+ [key: string]: string | string[] | boolean | number;
2562
+ };
2527
2563
  } | null;
2528
2564
  /** @description Job categories (slug + board display name). Guaranteed resolvable: every emitted slug resolves via `GET /v1/boards/:identifier/categories/:slug`. */
2529
2565
  categories: {
@@ -2535,6 +2571,10 @@ interface components {
2535
2571
  slug: string;
2536
2572
  name: string;
2537
2573
  }[];
2574
+ /** @description The job's custom-field values of the select, boolean, and number types, keyed by each field's `key`; select values are option `key`s. Resolve labels via the board's `customFields.job` definitions (see `GET /v1/boards/:identifier`). Values of fields no longer defined, and removed options, are omitted; text types are only on the full job (`PublicJob`). `{}` when none. */
2575
+ customFieldValues: {
2576
+ [key: string]: string | string[] | boolean | number;
2577
+ };
2538
2578
  links: {
2539
2579
  /**
2540
2580
  * Format: uri
@@ -2553,6 +2593,25 @@ interface components {
2553
2593
  */
2554
2594
  public: string | null;
2555
2595
  };
2596
+ PublicLocation: {
2597
+ /** @enum {string} */
2598
+ object: "location";
2599
+ /** @description Opaque location id. Complete the pick through `POST /locations/resolve` with this id and the search session before using it in a later submission. Shares its id space with `PublicPlace.id`. */
2600
+ id: string;
2601
+ /** @description The location’s own name, e.g. `Berlin`. */
2602
+ name: string;
2603
+ /** @description Name with its parent context, for display in the input once picked, e.g. `Berlin, Germany`. */
2604
+ fullName: string;
2605
+ /** @description The parent context alone, for a secondary line in the result list, e.g. `Germany` for Berlin or `Berlin, Germany` for Kreuzberg; `null` for a country. */
2606
+ contextLabel: string | null;
2607
+ /**
2608
+ * @description Same vocabulary as `PublicPlace.placeType`: `country`, `region`, `city`, or `locality`.
2609
+ * @enum {string}
2610
+ */
2611
+ placeType: "country" | "region" | "city" | "locality";
2612
+ /** @description ISO 3166-1 alpha-2 country code, or `null` if unknown. */
2613
+ countryCode: string | null;
2614
+ };
2556
2615
  PublicPlace: {
2557
2616
  /** @enum {string} */
2558
2617
  object: "place";
@@ -2617,6 +2676,11 @@ interface components {
2617
2676
  key: string;
2618
2677
  values: (string | number | boolean)[];
2619
2678
  }[];
2679
+ /** @description Public custom company profile fields, matched against each job's company. Keys and option keys come from the board's public company profile field definitions (`GET /v1/boards/{identifier}/profile-fields/company`). Clauses are AND-matched; values within a clause are OR-matched. Up to 10 clauses and 10 values per clause. An unknown or private key, or an undefined option key, is rejected with `400 invalid_filter`. Kept separate from `customFields`, so a job field and a company field may share a key. */
2680
+ companyCustomFields?: {
2681
+ key: string;
2682
+ values: (string | number | boolean)[];
2683
+ }[];
2620
2684
  };
2621
2685
  /** @description An opaque pagination cursor returned in the `nextCursor` field of a previous response. Pass it back to fetch the next page of results. */
2622
2686
  cursor?: string;
@@ -2921,6 +2985,8 @@ interface components {
2921
2985
  object: "salary_location";
2922
2986
  placeSlug: string;
2923
2987
  placeName: string;
2988
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
2989
+ placeLabel: string;
2924
2990
  /** @description Slug of the parent place; `null` for a top-level node. */
2925
2991
  parentSlug: string | null;
2926
2992
  avgSalaryMin: number;
@@ -3023,6 +3089,8 @@ interface components {
3023
3089
  childLocations: {
3024
3090
  placeSlug: string;
3025
3091
  placeName: string;
3092
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3093
+ placeLabel: string;
3026
3094
  avgSalaryMin: number;
3027
3095
  avgSalaryMax: number;
3028
3096
  jobCount: number;
@@ -3033,6 +3101,8 @@ interface components {
3033
3101
  cities: {
3034
3102
  placeSlug: string;
3035
3103
  placeName: string;
3104
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3105
+ placeLabel: string;
3036
3106
  avgSalaryMin: number;
3037
3107
  avgSalaryMax: number;
3038
3108
  jobCount: number;
@@ -3041,6 +3111,8 @@ interface components {
3041
3111
  otherLocations: {
3042
3112
  placeSlug: string;
3043
3113
  placeName: string;
3114
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3115
+ placeLabel: string;
3044
3116
  avgSalaryMin: number;
3045
3117
  avgSalaryMax: number;
3046
3118
  jobCount: number;
@@ -3111,6 +3183,8 @@ interface components {
3111
3183
  avgSalaryMax: number;
3112
3184
  jobCount: number;
3113
3185
  placeName: string;
3186
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3187
+ placeLabel: string;
3114
3188
  placeSlug: string;
3115
3189
  countryCode: string;
3116
3190
  }[];
@@ -3436,6 +3510,8 @@ interface components {
3436
3510
  childLocations: {
3437
3511
  placeSlug: string;
3438
3512
  placeName: string;
3513
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3514
+ placeLabel: string;
3439
3515
  avgSalaryMin: number;
3440
3516
  avgSalaryMax: number;
3441
3517
  jobCount: number;
@@ -3446,6 +3522,8 @@ interface components {
3446
3522
  cities: {
3447
3523
  placeSlug: string;
3448
3524
  placeName: string;
3525
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3526
+ placeLabel: string;
3449
3527
  avgSalaryMin: number;
3450
3528
  avgSalaryMax: number;
3451
3529
  jobCount: number;
@@ -3454,6 +3532,8 @@ interface components {
3454
3532
  otherLocations: {
3455
3533
  placeSlug: string;
3456
3534
  placeName: string;
3535
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3536
+ placeLabel: string;
3457
3537
  avgSalaryMin: number;
3458
3538
  avgSalaryMax: number;
3459
3539
  jobCount: number;
@@ -3528,6 +3608,8 @@ interface components {
3528
3608
  avgSalaryMax: number;
3529
3609
  jobCount: number;
3530
3610
  placeName: string;
3611
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3612
+ placeLabel: string;
3531
3613
  placeSlug: string;
3532
3614
  countryCode: string;
3533
3615
  }[];
@@ -853,10 +853,19 @@ interface components {
853
853
  employmentType: string;
854
854
  remoteOption: string;
855
855
  officeLocations: {
856
- /** @enum {string} */
856
+ /**
857
+ * @deprecated
858
+ * @description Deprecated — send `locationId` instead (an `id` from `GET /locations/search` or `GET /places`). Still accepted.
859
+ * @enum {string}
860
+ */
857
861
  provider?: "mapbox";
862
+ /**
863
+ * @deprecated
864
+ * @description Deprecated — send `locationId` instead (an `id` from `GET /locations/search` or `GET /places`). Still accepted.
865
+ */
858
866
  providerPlaceId?: string;
859
- displayName: string;
867
+ /** @description Display text for the location. Required unless `locationId` is sent; with `locationId` it defaults to the location's full name (locality, city, region, country), e.g. `Lyon, Auvergne-Rhône-Alpes, France`. */
868
+ displayName?: string;
860
869
  countryCode?: string;
861
870
  region?: string;
862
871
  locality?: string;
@@ -864,6 +873,10 @@ interface components {
864
873
  latitude?: number;
865
874
  longitude?: number;
866
875
  boundingBox?: number[];
876
+ /**
877
+ * @deprecated
878
+ * @description Deprecated — send `locationId` instead (an `id` from `GET /locations/search` or `GET /places`). Still accepted.
879
+ */
867
880
  raw?: {
868
881
  suggestion?: {
869
882
  [key: string]: unknown;
@@ -872,6 +885,8 @@ interface components {
872
885
  [key: string]: unknown;
873
886
  };
874
887
  };
888
+ /** @description Opaque location id from `GET /locations/search` or `GET /places` (`id`) — the preferred way to send a location. Resolved server-side to the full place; the other fields are then ignored except `displayName`. An unknown id returns `400 locations_invalid_id`. If the lookup is temporarily unavailable the entry is kept with `displayName` alone, or the request fails with `503 locations_unavailable` when there is none. */
889
+ locationId?: string;
875
890
  }[];
876
891
  inOfficePeriod?: string;
877
892
  inOfficeFrequency?: number;
@@ -1044,7 +1059,7 @@ interface components {
1044
1059
  /** @enum {string} */
1045
1060
  object: "employer_checkout";
1046
1061
  /** @enum {string} */
1047
- status: "checkout" | "published" | "invoice_sent";
1062
+ status: "checkout" | "published" | "pending_approval" | "invoice_sent";
1048
1063
  /** @description The Stripe Checkout / hosted-invoice URL, or `null`. */
1049
1064
  checkoutUrl: string | null;
1050
1065
  jobId: string;
@@ -1193,8 +1208,8 @@ interface components {
1193
1208
  inOfficePeriod?: "per_week" | "per_month" | "per_year";
1194
1209
  /** @description How often the candidate must be in-office over `inOfficePeriod`. */
1195
1210
  inOfficeFrequency?: number;
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`. */
1197
- officeLocations?: components["schemas"]["JobOfficeLocationInput"][];
1211
+ /** @description Physical office locations associated with the job. Prefer `{locationId}` with an `id` from `GET /locations/search` (what a location picker returns); `{query: "City, Country"}` for free-form text and `{city, country, region?, locality?}` are also accepted and geocoded server-side (a country mismatch returns `400 jobs_unresolvable_location`). A location outside the board's job-form `allowedCountries` returns `400 jobs_constraint_violation`. */
1212
+ officeLocations?: components["schemas"]["EmployerJobOfficeLocationInput"][];
1198
1213
  /** @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
1214
  collectionValues?: {
1200
1215
  [key: string]: string[] | unknown;
@@ -1263,6 +1278,24 @@ interface components {
1263
1278
  */
1264
1279
  public: string | null;
1265
1280
  };
1281
+ EmployerJobOfficeLocationInput: {
1282
+ /** @description Opaque location id from `GET /locations/search` or `GET /places` (`id`). Resolved server-side to the full place (country, region, city, locality). An unknown id returns `400 locations_invalid_id`; `503 locations_unavailable` while the lookup is temporarily down. */
1283
+ locationId: string;
1284
+ /** @description Display text for the location. Defaults to the location's full name (locality, city, region, country), e.g. `Lyon, Auvergne-Rhône-Alpes, France`. */
1285
+ displayName?: string;
1286
+ } | {
1287
+ /** @description Free-form location string (e.g. `"Berlin, Germany"`, `"Utrecht, Netherlands"`, `"Mountain View, California, USA"`). Resolved server-side; rejected when no high-confidence match is found. */
1288
+ query: string;
1289
+ } | {
1290
+ /** @description Neighborhood or sub-locality. */
1291
+ locality?: string;
1292
+ /** @description City. */
1293
+ city: string;
1294
+ /** @description Region, state, or province. */
1295
+ region?: string;
1296
+ /** @description ISO 3166-1 alpha-2 country code OR recognized country name/alias. Aliases are normalized to canonical alpha-2 server-side (e.g. `US`, `USA`, `United States` → `US`; `UK`, `GB`, `United Kingdom` → `GB`). */
1297
+ country: string;
1298
+ };
1266
1299
  EmployerJobStat: {
1267
1300
  /** @enum {string} */
1268
1301
  object: "employer_job_stat";
@@ -1470,8 +1503,8 @@ interface components {
1470
1503
  inOfficePeriod?: "per_week" | "per_month" | "per_year";
1471
1504
  /** @description How often the candidate must be in-office over `inOfficePeriod`. */
1472
1505
  inOfficeFrequency?: number;
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`. */
1474
- officeLocations?: components["schemas"]["JobOfficeLocationInput"][];
1506
+ /** @description Physical office locations associated with the job. Prefer `{locationId}` with an `id` from `GET /locations/search` (what a location picker returns); `{query: "City, Country"}` for free-form text and `{city, country, region?, locality?}` are also accepted and geocoded server-side (a country mismatch returns `400 jobs_unresolvable_location`). A location outside the board's job-form `allowedCountries` returns `400 jobs_constraint_violation`. */
1507
+ officeLocations?: components["schemas"]["EmployerJobOfficeLocationInput"][];
1475
1508
  /** @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
1509
  collectionValues?: {
1477
1510
  [key: string]: string[] | unknown;
@@ -1574,19 +1607,6 @@ interface components {
1574
1607
  /** @description Pre-formatted display name for the location, or `null` if not resolved. */
1575
1608
  displayName: string | null;
1576
1609
  };
1577
- JobOfficeLocationInput: {
1578
- /** @description Free-form location string (e.g. `"Berlin, Germany"`, `"Utrecht, Netherlands"`, `"Mountain View, California, USA"`). Resolved server-side; rejected when no high-confidence match is found. */
1579
- query: string;
1580
- } | {
1581
- /** @description Neighborhood or sub-locality. */
1582
- locality?: string;
1583
- /** @description City. */
1584
- city: string;
1585
- /** @description Region, state, or province. */
1586
- region?: string;
1587
- /** @description ISO 3166-1 alpha-2 country code OR recognized country name/alias. Aliases are normalized to canonical alpha-2 server-side (e.g. `US`, `USA`, `United States` → `US`; `UK`, `GB`, `United Kingdom` → `GB`). */
1588
- country: string;
1589
- };
1590
1610
  JobPostingBillingOptions: {
1591
1611
  /** @enum {string} */
1592
1612
  object: "job_posting_billing_options";
@@ -1680,6 +1700,12 @@ interface components {
1680
1700
  /** Format: email */
1681
1701
  email: string;
1682
1702
  };
1703
+ LocationResolveInput: {
1704
+ /** @description Opaque id returned by location search. */
1705
+ locationId: string;
1706
+ /** @description The same opaque session id used for the search interaction that returned this location. */
1707
+ session: string;
1708
+ };
1683
1709
  LocationSalaryDetail: {
1684
1710
  /** @enum {string} */
1685
1711
  object: "location_salary_detail";
@@ -1702,6 +1728,8 @@ interface components {
1702
1728
  } | null;
1703
1729
  childLocations: {
1704
1730
  placeName: string;
1731
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
1732
+ placeLabel: string;
1705
1733
  placeSlug: string;
1706
1734
  countryCode: string;
1707
1735
  avgSalaryMin: number;
@@ -1718,6 +1746,8 @@ interface components {
1718
1746
  regionSlug: string;
1719
1747
  cities: {
1720
1748
  placeName: string;
1749
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
1750
+ placeLabel: string;
1721
1751
  placeSlug: string;
1722
1752
  countryCode: string;
1723
1753
  avgSalaryMin: number;
@@ -1746,6 +1776,8 @@ interface components {
1746
1776
  }[];
1747
1777
  siblingLocations: {
1748
1778
  placeName: string;
1779
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
1780
+ placeLabel: string;
1749
1781
  placeSlug: string;
1750
1782
  countryCode: string;
1751
1783
  avgSalaryMin: number;
@@ -2524,6 +2556,10 @@ interface components {
2524
2556
  slug: string;
2525
2557
  name: string;
2526
2558
  logoUrl: string | null;
2559
+ /** @description The company's public custom-field values of the select, boolean, and number types, keyed by field key; select values are option `key`s. Private fields and text types are omitted (the full company carries text values). `{}` when none. */
2560
+ customFieldValues: {
2561
+ [key: string]: string | string[] | boolean | number;
2562
+ };
2527
2563
  } | null;
2528
2564
  /** @description Job categories (slug + board display name). Guaranteed resolvable: every emitted slug resolves via `GET /v1/boards/:identifier/categories/:slug`. */
2529
2565
  categories: {
@@ -2535,6 +2571,10 @@ interface components {
2535
2571
  slug: string;
2536
2572
  name: string;
2537
2573
  }[];
2574
+ /** @description The job's custom-field values of the select, boolean, and number types, keyed by each field's `key`; select values are option `key`s. Resolve labels via the board's `customFields.job` definitions (see `GET /v1/boards/:identifier`). Values of fields no longer defined, and removed options, are omitted; text types are only on the full job (`PublicJob`). `{}` when none. */
2575
+ customFieldValues: {
2576
+ [key: string]: string | string[] | boolean | number;
2577
+ };
2538
2578
  links: {
2539
2579
  /**
2540
2580
  * Format: uri
@@ -2553,6 +2593,25 @@ interface components {
2553
2593
  */
2554
2594
  public: string | null;
2555
2595
  };
2596
+ PublicLocation: {
2597
+ /** @enum {string} */
2598
+ object: "location";
2599
+ /** @description Opaque location id. Complete the pick through `POST /locations/resolve` with this id and the search session before using it in a later submission. Shares its id space with `PublicPlace.id`. */
2600
+ id: string;
2601
+ /** @description The location’s own name, e.g. `Berlin`. */
2602
+ name: string;
2603
+ /** @description Name with its parent context, for display in the input once picked, e.g. `Berlin, Germany`. */
2604
+ fullName: string;
2605
+ /** @description The parent context alone, for a secondary line in the result list, e.g. `Germany` for Berlin or `Berlin, Germany` for Kreuzberg; `null` for a country. */
2606
+ contextLabel: string | null;
2607
+ /**
2608
+ * @description Same vocabulary as `PublicPlace.placeType`: `country`, `region`, `city`, or `locality`.
2609
+ * @enum {string}
2610
+ */
2611
+ placeType: "country" | "region" | "city" | "locality";
2612
+ /** @description ISO 3166-1 alpha-2 country code, or `null` if unknown. */
2613
+ countryCode: string | null;
2614
+ };
2556
2615
  PublicPlace: {
2557
2616
  /** @enum {string} */
2558
2617
  object: "place";
@@ -2617,6 +2676,11 @@ interface components {
2617
2676
  key: string;
2618
2677
  values: (string | number | boolean)[];
2619
2678
  }[];
2679
+ /** @description Public custom company profile fields, matched against each job's company. Keys and option keys come from the board's public company profile field definitions (`GET /v1/boards/{identifier}/profile-fields/company`). Clauses are AND-matched; values within a clause are OR-matched. Up to 10 clauses and 10 values per clause. An unknown or private key, or an undefined option key, is rejected with `400 invalid_filter`. Kept separate from `customFields`, so a job field and a company field may share a key. */
2680
+ companyCustomFields?: {
2681
+ key: string;
2682
+ values: (string | number | boolean)[];
2683
+ }[];
2620
2684
  };
2621
2685
  /** @description An opaque pagination cursor returned in the `nextCursor` field of a previous response. Pass it back to fetch the next page of results. */
2622
2686
  cursor?: string;
@@ -2921,6 +2985,8 @@ interface components {
2921
2985
  object: "salary_location";
2922
2986
  placeSlug: string;
2923
2987
  placeName: string;
2988
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
2989
+ placeLabel: string;
2924
2990
  /** @description Slug of the parent place; `null` for a top-level node. */
2925
2991
  parentSlug: string | null;
2926
2992
  avgSalaryMin: number;
@@ -3023,6 +3089,8 @@ interface components {
3023
3089
  childLocations: {
3024
3090
  placeSlug: string;
3025
3091
  placeName: string;
3092
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3093
+ placeLabel: string;
3026
3094
  avgSalaryMin: number;
3027
3095
  avgSalaryMax: number;
3028
3096
  jobCount: number;
@@ -3033,6 +3101,8 @@ interface components {
3033
3101
  cities: {
3034
3102
  placeSlug: string;
3035
3103
  placeName: string;
3104
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3105
+ placeLabel: string;
3036
3106
  avgSalaryMin: number;
3037
3107
  avgSalaryMax: number;
3038
3108
  jobCount: number;
@@ -3041,6 +3111,8 @@ interface components {
3041
3111
  otherLocations: {
3042
3112
  placeSlug: string;
3043
3113
  placeName: string;
3114
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3115
+ placeLabel: string;
3044
3116
  avgSalaryMin: number;
3045
3117
  avgSalaryMax: number;
3046
3118
  jobCount: number;
@@ -3111,6 +3183,8 @@ interface components {
3111
3183
  avgSalaryMax: number;
3112
3184
  jobCount: number;
3113
3185
  placeName: string;
3186
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3187
+ placeLabel: string;
3114
3188
  placeSlug: string;
3115
3189
  countryCode: string;
3116
3190
  }[];
@@ -3436,6 +3510,8 @@ interface components {
3436
3510
  childLocations: {
3437
3511
  placeSlug: string;
3438
3512
  placeName: string;
3513
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3514
+ placeLabel: string;
3439
3515
  avgSalaryMin: number;
3440
3516
  avgSalaryMax: number;
3441
3517
  jobCount: number;
@@ -3446,6 +3522,8 @@ interface components {
3446
3522
  cities: {
3447
3523
  placeSlug: string;
3448
3524
  placeName: string;
3525
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3526
+ placeLabel: string;
3449
3527
  avgSalaryMin: number;
3450
3528
  avgSalaryMax: number;
3451
3529
  jobCount: number;
@@ -3454,6 +3532,8 @@ interface components {
3454
3532
  otherLocations: {
3455
3533
  placeSlug: string;
3456
3534
  placeName: string;
3535
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3536
+ placeLabel: string;
3457
3537
  avgSalaryMin: number;
3458
3538
  avgSalaryMax: number;
3459
3539
  jobCount: number;
@@ -3528,6 +3608,8 @@ interface components {
3528
3608
  avgSalaryMax: number;
3529
3609
  jobCount: number;
3530
3610
  placeName: string;
3611
+ /** @description Display label for the place in a salary list. A city or locality adds its subdivision code ("New York, NY", "Washington, DC") so it reads apart from the region it shares a name with; a region or country is its name. Render this rather than `placeName` in lists. */
3612
+ placeLabel: string;
3531
3613
  placeSlug: string;
3532
3614
  countryCode: string;
3533
3615
  }[];