@cavuno/board 1.18.0 → 1.19.1

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.
package/dist/index.d.mts CHANGED
@@ -15,7 +15,7 @@ interface components {
15
15
  * @description String representing the object's type. Objects of the same type share the same value.
16
16
  * @enum {string}
17
17
  */
18
- object: "api_key";
18
+ object: 'api_key';
19
19
  /** @description Public key ID component, embedded in the key prefix as `cavuno_live_<keyId>_`. */
20
20
  keyId: string;
21
21
  /** @description Human-readable name for the key, shown in the dashboard. */
@@ -40,14 +40,14 @@ interface components {
40
40
  * @description String representing the object's type. Objects of the same type share the same value.
41
41
  * @enum {string}
42
42
  */
43
- object: "audit_log";
43
+ object: 'audit_log';
44
44
  /** @description Identifier of the account the entry belongs to. */
45
45
  accountId: string;
46
46
  /**
47
47
  * @description Type of actor that performed the action.
48
48
  * @enum {string}
49
49
  */
50
- actorType: "api_key" | "oauth_token" | "user_session" | "system";
50
+ actorType: 'api_key' | 'oauth_token' | 'user_session' | 'system';
51
51
  /** @description Identifier of the actor that performed the action. */
52
52
  actorId: string;
53
53
  /** @description Human-readable label for the actor, suitable for display. */
@@ -78,20 +78,20 @@ interface components {
78
78
  operations: ({
79
79
  id: string;
80
80
  /** @enum {string} */
81
- method: "POST";
81
+ method: 'POST';
82
82
  body?: unknown;
83
83
  action?: string;
84
84
  resourceId?: string;
85
85
  } | {
86
86
  id: string;
87
87
  /** @enum {string} */
88
- method: "PATCH";
88
+ method: 'PATCH';
89
89
  body?: unknown;
90
90
  resourceId: string;
91
91
  } | {
92
92
  id: string;
93
93
  /** @enum {string} */
94
- method: "DELETE";
94
+ method: 'DELETE';
95
95
  resourceId: string;
96
96
  })[];
97
97
  };
@@ -102,7 +102,7 @@ interface components {
102
102
  * @description String representing the object's type. Objects of the same type share the same value.
103
103
  * @enum {string}
104
104
  */
105
- object: "blog_author";
105
+ object: 'blog_author';
106
106
  /** @description Display name of the author. */
107
107
  name: string;
108
108
  /** @description URL-friendly slug for the author. */
@@ -132,14 +132,14 @@ interface components {
132
132
  /** @description Time at which the author was last updated, or `null` if it has never been updated. ISO 8601 datetime. */
133
133
  updatedAt: string | null;
134
134
  };
135
- BlogPost: components["schemas"]["BlogPostSummary"] & {
135
+ BlogPost: components['schemas']['BlogPostSummary'] & {
136
136
  html: string | null;
137
137
  };
138
138
  BlogPostSummary: {
139
139
  /** @description Unique identifier for the object. Use this value as the `{id}` path parameter for the blog-post endpoints (e.g. `GET /v1/blog/posts/{id}`). */
140
140
  id: string;
141
141
  /** @enum {string} */
142
- object: "blog_post";
142
+ object: 'blog_post';
143
143
  title: string;
144
144
  slug: string;
145
145
  status: string;
@@ -166,20 +166,20 @@ interface components {
166
166
  operations: ({
167
167
  id: string;
168
168
  /** @enum {string} */
169
- method: "POST";
169
+ method: 'POST';
170
170
  body?: unknown;
171
171
  action?: string;
172
172
  resourceId?: string;
173
173
  } | {
174
174
  id: string;
175
175
  /** @enum {string} */
176
- method: "PATCH";
176
+ method: 'PATCH';
177
177
  body?: unknown;
178
178
  resourceId: string;
179
179
  } | {
180
180
  id: string;
181
181
  /** @enum {string} */
182
- method: "DELETE";
182
+ method: 'DELETE';
183
183
  resourceId: string;
184
184
  })[];
185
185
  };
@@ -190,7 +190,7 @@ interface components {
190
190
  * @description String representing the object's type. Objects of the same type share the same value.
191
191
  * @enum {string}
192
192
  */
193
- object: "blog_tag";
193
+ object: 'blog_tag';
194
194
  /** @description Display name of the tag. */
195
195
  name: string;
196
196
  /** @description URL-friendly slug for the tag. */
@@ -210,10 +210,13 @@ interface components {
210
210
  };
211
211
  BoardAccessGrant: {
212
212
  /** @enum {string} */
213
- object: "board_access_grant";
213
+ object: 'board_access_grant';
214
214
  /** @description The board-access grant. Send it as the `X-Board-Access` header on subsequent content reads to pass the password wall. */
215
215
  token: string;
216
216
  };
217
+ BoardAuthConsumeMagicLinkBody: {
218
+ token: string;
219
+ };
217
220
  BoardAuthForgotPasswordBody: {
218
221
  /** Format: email */
219
222
  email: string;
@@ -226,6 +229,17 @@ interface components {
226
229
  BoardAuthLogoutBody: {
227
230
  refreshToken: string;
228
231
  };
232
+ BoardAuthOAuthAuthorizationUrl: {
233
+ /** @enum {string} */
234
+ object: 'oauth_authorization_url';
235
+ /** @enum {string} */
236
+ provider: 'google' | 'linkedin';
237
+ /** Format: uri */
238
+ authorizeUrl: string;
239
+ };
240
+ BoardAuthOAuthExchangeBody: {
241
+ token: string;
242
+ };
229
243
  BoardAuthRefreshBody: {
230
244
  refreshToken: string;
231
245
  };
@@ -234,18 +248,24 @@ interface components {
234
248
  * @description Which role profile to create on the board.
235
249
  * @enum {string}
236
250
  */
237
- role: "candidate" | "employer";
251
+ role: 'candidate' | 'employer';
238
252
  /**
239
253
  * @description Registration method. Only `emailpass` is supported.
240
254
  * @enum {string}
241
255
  */
242
- method: "emailpass";
256
+ method: 'emailpass';
243
257
  /** Format: email */
244
258
  email: string;
245
259
  /** @description Minimum 8 characters. */
246
260
  password: string;
247
261
  displayName: string;
248
262
  };
263
+ BoardAuthRequestMagicLinkBody: {
264
+ /** Format: email */
265
+ email: string;
266
+ /** @description Optional same-origin path to carry through the email link. */
267
+ returnTo?: string;
268
+ };
249
269
  BoardAuthResetPasswordBody: {
250
270
  token: string;
251
271
  /** @description Minimum 8 characters. */
@@ -253,21 +273,21 @@ interface components {
253
273
  };
254
274
  BoardAuthSession: {
255
275
  /** @enum {string} */
256
- object: "board_auth_session";
276
+ object: 'board_auth_session';
257
277
  /** @description Short-lived JWT (1 hour). Send as `Authorization: Bearer`. */
258
278
  accessToken: string;
259
279
  /** @description Opaque single-use refresh token (30 days). Each refresh returns a replacement; a reused token is rejected. */
260
280
  refreshToken: string;
261
281
  /** @description Access-token expiry, epoch milliseconds. */
262
282
  expiresAt: number;
263
- boardUser: components["schemas"]["BoardUser"];
283
+ boardUser: components['schemas']['BoardUser'];
264
284
  };
265
285
  BoardAuthVerifyEmailBody: {
266
286
  token: string;
267
287
  };
268
288
  BoardSeo: {
269
289
  /** @enum {string} */
270
- object: "board_seo";
290
+ object: 'board_seo';
271
291
  /** @description Verbatim `ads.txt` content, or `null` when not configured. */
272
292
  adsTxt: string | null;
273
293
  /** @description IndexNow key-file content, or `null` when not configured. */
@@ -298,9 +318,9 @@ interface components {
298
318
  /** @description Board user ID. */
299
319
  id: string;
300
320
  /** @enum {string} */
301
- object: "board_user";
321
+ object: 'board_user';
302
322
  /** @enum {string} */
303
- role: "candidate" | "employer";
323
+ role: 'candidate' | 'employer';
304
324
  email: string;
305
325
  displayName: string | null;
306
326
  emailVerified: boolean;
@@ -310,24 +330,24 @@ interface components {
310
330
  operations: ({
311
331
  id: string;
312
332
  /** @enum {string} */
313
- method: "POST";
333
+ method: 'POST';
314
334
  body?: unknown;
315
335
  action?: string;
316
336
  resourceId?: string;
317
337
  } | {
318
338
  id: string;
319
339
  /** @enum {string} */
320
- method: "PATCH";
340
+ method: 'PATCH';
321
341
  body?: unknown;
322
342
  resourceId: string;
323
343
  } | {
324
344
  id: string;
325
345
  /** @enum {string} */
326
- method: "DELETE";
346
+ method: 'DELETE';
327
347
  resourceId: string;
328
348
  })[];
329
349
  };
330
- Company: components["schemas"]["CompanySummary"] & {
350
+ Company: components['schemas']['CompanySummary'] & {
331
351
  /** @description Long-form description of the company, or `null` if not set. */
332
352
  description: string | null;
333
353
  /** @description Whether automated backfill of jobs from this company is supported, or `null` if not yet evaluated. */
@@ -339,7 +359,7 @@ interface components {
339
359
  };
340
360
  CompanyCategorySalary: {
341
361
  /** @enum {string} */
342
- object: "company_category_salary";
362
+ object: 'company_category_salary';
343
363
  categorySourceSlug: string;
344
364
  categoryCanonicalSlug: string;
345
365
  companyName: string;
@@ -383,7 +403,7 @@ interface components {
383
403
  };
384
404
  CompanyMarket: {
385
405
  /** @enum {string} */
386
- object: "company_market";
406
+ object: 'company_market';
387
407
  slug: string;
388
408
  name: string;
389
409
  /** @description Number of companies on the board in this market. */
@@ -402,7 +422,7 @@ interface components {
402
422
  * @description String representing the object's type. Objects of the same type share the same value.
403
423
  * @enum {string}
404
424
  */
405
- object: "public_company";
425
+ object: 'public_company';
406
426
  /** @description Display name of the company. */
407
427
  name: string;
408
428
  /** @description URL-friendly slug for the company. */
@@ -417,15 +437,15 @@ interface components {
417
437
  jobCount: number;
418
438
  /** @description Number of currently-published, non-expired jobs at this company. */
419
439
  publishedJobCount: number;
420
- links: components["schemas"]["PublicCompanyLinks"];
440
+ links: components['schemas']['PublicCompanyLinks'];
421
441
  };
422
- CompanyPublicDetail: components["schemas"]["CompanyPublic"] & {
442
+ CompanyPublicDetail: components['schemas']['CompanyPublic'] & {
423
443
  /** @description Markets (sectors) this company operates in, each with its source slug. Empty when the company has no markets. */
424
- markets: components["schemas"]["CompanyMarketRef"][];
444
+ markets: components['schemas']['CompanyMarketRef'][];
425
445
  };
426
446
  CompanySalary: {
427
447
  /** @enum {string} */
428
- object: "company_salary";
448
+ object: 'company_salary';
429
449
  companyName: string;
430
450
  companySlug: string;
431
451
  companyLogoPath: string | null;
@@ -490,7 +510,7 @@ interface components {
490
510
  * @description String representing the object's type. Objects of the same type share the same value.
491
511
  * @enum {string}
492
512
  */
493
- object: "company";
513
+ object: 'company';
494
514
  /** @description Display name of the company. */
495
515
  name: string;
496
516
  /** @description URL-friendly slug for the company. */
@@ -512,7 +532,7 @@ interface components {
512
532
  /** @description Time at which the company was last updated, or `null` if it has never been updated. ISO 8601 datetime. */
513
533
  updatedAt: string | null;
514
534
  /** @description Public + admin URLs for this company. `public` may be `null` if the company lacks a slug. */
515
- links: components["schemas"]["ResourceLinks"] & {
535
+ links: components['schemas']['ResourceLinks'] & {
516
536
  /**
517
537
  * Format: uri
518
538
  * @description Canonical public URL for this company on the board, or `null` when no slug is set.
@@ -534,7 +554,7 @@ interface components {
534
554
  * @description Author visibility status. One of `active` or `inactive`.
535
555
  * @enum {string}
536
556
  */
537
- status?: "active" | "inactive";
557
+ status?: 'active' | 'inactive';
538
558
  /** @description Storage ID of an uploaded avatar image (from `POST /v1/media/upload`). Pass `null` to clear an existing avatar. */
539
559
  avatarStorageId?: string | null;
540
560
  /** @description The author's personal website URL. Normalized to a canonical URL when stored. */
@@ -572,7 +592,7 @@ interface components {
572
592
  publishedAt?: string;
573
593
  title: string;
574
594
  /** @enum {string} */
575
- status?: "draft" | "scheduled" | "published";
595
+ status?: 'draft' | 'scheduled' | 'published';
576
596
  };
577
597
  CreateCompanyBody: {
578
598
  /** @description Public company website URL. Normalized to a canonical apex domain when stored. */
@@ -603,22 +623,22 @@ interface components {
603
623
  * @description Employment type of the role.
604
624
  * @enum {string}
605
625
  */
606
- employmentType?: "full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other";
626
+ employmentType?: 'full_time' | 'part_time' | 'contract' | 'internship' | 'temporary' | 'volunteer' | 'other';
607
627
  /**
608
628
  * @description Whether the role is on-site, hybrid, or fully remote.
609
629
  * @enum {string}
610
630
  */
611
- remoteOption?: "on_site" | "hybrid" | "remote";
631
+ remoteOption?: 'on_site' | 'hybrid' | 'remote';
612
632
  /** @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. */
613
633
  remotePermits?: {
614
634
  /** @enum {string} */
615
- type: "worldwide" | "world_region" | "continent" | "region" | "subregion" | "subdivision" | "country" | "custom";
635
+ type: 'worldwide' | 'world_region' | 'continent' | 'region' | 'subregion' | 'subdivision' | 'country' | 'custom';
616
636
  value: string;
617
637
  }[];
618
638
  /** @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. */
619
639
  remoteTimezones?: {
620
640
  /** @enum {string} */
621
- type: "all" | "world_region" | "continent" | "region" | "subregion" | "country" | "timezone";
641
+ type: 'all' | 'world_region' | 'continent' | 'region' | 'subregion' | 'country' | 'timezone';
622
642
  value: string;
623
643
  plusMinus?: number;
624
644
  }[];
@@ -626,12 +646,12 @@ interface components {
626
646
  * @description Whether the employer sponsors visas for remote candidates. One of `yes`, `no`, or `unknown`.
627
647
  * @enum {string}
628
648
  */
629
- remoteSponsorship?: "yes" | "no" | "unknown";
649
+ remoteSponsorship?: 'yes' | 'no' | 'unknown';
630
650
  /**
631
651
  * @description Seniority level of the role.
632
652
  * @enum {string}
633
653
  */
634
- seniority?: "entry_level" | "associate" | "mid_level" | "senior" | "lead" | "principal" | "director" | "executive";
654
+ seniority?: 'entry_level' | 'associate' | 'mid_level' | 'senior' | 'lead' | 'principal' | 'director' | 'executive';
635
655
  /** @description Where candidates apply. Accepts an HTTPS URL, a `mailto:` URI, or a bare email address (which is normalized to `mailto:` form). */
636
656
  applicationUrl: string;
637
657
  /** @description Minimum salary, in `salaryCurrency` units. */
@@ -644,7 +664,7 @@ interface components {
644
664
  * @description Period the `salaryMin` and `salaryMax` figures are quoted against.
645
665
  * @enum {string}
646
666
  */
647
- salaryTimeframe?: "per_year" | "per_month" | "per_week" | "per_day" | "per_hour";
667
+ salaryTimeframe?: 'per_year' | 'per_month' | 'per_week' | 'per_day' | 'per_hour';
648
668
  /** @description Whether the job appears in featured slots on the public board. */
649
669
  isFeatured?: boolean;
650
670
  /** @description Job expiry as a Unix epoch in milliseconds. On create, omitted or `null` defaults to 30 days from creation. On PATCH, pass `null` to clear an existing expiry. Past timestamps remove the job from the public board. */
@@ -652,7 +672,7 @@ interface components {
652
672
  /** @description Time at which the job was first published, as a Unix epoch in milliseconds. When omitted on create with `status: "published"`, the server stamps the current time. Useful for bulk-importing historical jobs while preserving original publication dates. PATCH may overwrite an existing value but cannot clear it. */
653
673
  publishedAt?: number;
654
674
  /** @description Required education credentials. Each value is one of `high_school`, `associate_degree`, `bachelor_degree`, `professional_certificate`, `postgraduate_degree`, or `no_requirements`. */
655
- educationRequirements?: ("high_school" | "associate_degree" | "bachelor_degree" | "professional_certificate" | "postgraduate_degree" | "no_requirements")[];
675
+ educationRequirements?: ('high_school' | 'associate_degree' | 'bachelor_degree' | 'professional_certificate' | 'postgraduate_degree' | 'no_requirements')[];
656
676
  /** @description Minimum required experience, expressed in months. */
657
677
  experienceMonths?: number;
658
678
  /** @description If `true`, equivalent experience may substitute for the listed education requirements. */
@@ -661,11 +681,11 @@ interface components {
661
681
  * @description Period denominator for `inOfficeFrequency`.
662
682
  * @enum {string}
663
683
  */
664
- inOfficePeriod?: "per_week" | "per_month" | "per_year";
684
+ inOfficePeriod?: 'per_week' | 'per_month' | 'per_year';
665
685
  /** @description How often the candidate must be in-office over `inOfficePeriod`. */
666
686
  inOfficeFrequency?: number;
667
687
  /** @description Physical office locations associated with the job. Each entry is forward-geocoded server-side; a country mismatch returns `400 jobs_unresolvable_location`. */
668
- officeLocations?: components["schemas"]["JobOfficeLocationInput"][];
688
+ officeLocations?: components['schemas']['JobOfficeLocationInput'][];
669
689
  /** @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. */
670
690
  externalId?: string;
671
691
  /** @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. */
@@ -674,12 +694,12 @@ interface components {
674
694
  };
675
695
  /** @description The job title. */
676
696
  title: string;
677
- company?: components["schemas"]["InlineCompanyInput"];
697
+ company?: components['schemas']['InlineCompanyInput'];
678
698
  /**
679
699
  * @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.
680
700
  * @enum {string}
681
701
  */
682
- status?: "draft" | "published";
702
+ status?: 'draft' | 'published';
683
703
  };
684
704
  CreateJobPostingBody: {
685
705
  submission: {
@@ -693,7 +713,7 @@ interface components {
693
713
  remoteOption: string;
694
714
  officeLocations: {
695
715
  /** @enum {string} */
696
- provider?: "mapbox";
716
+ provider?: 'mapbox';
697
717
  providerPlaceId?: string;
698
718
  displayName: string;
699
719
  countryCode?: string;
@@ -736,7 +756,7 @@ interface components {
736
756
  offset?: number;
737
757
  }[];
738
758
  /** @enum {string} */
739
- remoteSponsorship?: "yes" | "no" | "unknown";
759
+ remoteSponsorship?: 'yes' | 'no' | 'unknown';
740
760
  customFieldValues?: {
741
761
  [key: string]: string | string[] | boolean | number;
742
762
  };
@@ -774,7 +794,7 @@ interface components {
774
794
  * @description Tag visibility. One of `public` or `internal`.
775
795
  * @enum {string}
776
796
  */
777
- visibility?: "public" | "internal";
797
+ visibility?: 'public' | 'internal';
778
798
  /** @description SEO meta title for the tag page. */
779
799
  metaTitle?: string;
780
800
  /** @description SEO meta description for the tag page. */
@@ -791,9 +811,9 @@ interface components {
791
811
  * @description Field type, which dictates the accepted value: `short_text`/`long_text` → string; `single_select` → one option key (string); `multi_select` → array of option keys; `boolean` → boolean; `number` → number.
792
812
  * @enum {string}
793
813
  */
794
- type: "short_text" | "long_text" | "single_select" | "multi_select" | "boolean" | "number";
814
+ type: 'short_text' | 'long_text' | 'single_select' | 'multi_select' | 'boolean' | 'number';
795
815
  /** @description Present only for `single_select`/`multi_select`. A written value must be one (or, for multi, several) of these option `key`s — never a label. */
796
- options?: components["schemas"]["CustomFieldOption"][];
816
+ options?: components['schemas']['CustomFieldOption'][];
797
817
  /** @description When true, the value cannot be cleared or left empty on a write (rejected with `custom_field_required`). */
798
818
  required: boolean;
799
819
  /** @description Inclusive minimum for `number` fields, when set. */
@@ -819,7 +839,7 @@ interface components {
819
839
  * @description OAuth token endpoint authentication method. Use `none` for public PKCE clients that cannot keep a client secret.
820
840
  * @enum {string}
821
841
  */
822
- token_endpoint_auth_method?: "client_secret_basic" | "none";
842
+ token_endpoint_auth_method?: 'client_secret_basic' | 'none';
823
843
  };
824
844
  DynamicClientRegistrationResponse: {
825
845
  /** @description Public OAuth client identifier. */
@@ -868,9 +888,9 @@ interface components {
868
888
  /** @description If `true` (default), creates a new company when no match is found. Set to `false` to receive a `404 companies_not_found` response instead. */
869
889
  createIfMissing?: boolean;
870
890
  };
871
- Job: components["schemas"]["JobSummary"] & {
891
+ Job: components['schemas']['JobSummary'] & {
872
892
  /** @description Public + admin URLs for this job. `public` may be `null` if the job lacks a slug or company-slug. */
873
- links?: components["schemas"]["ResourceLinks"] & {
893
+ links?: components['schemas']['ResourceLinks'] & {
874
894
  /**
875
895
  * Format: uri
876
896
  * @description Canonical public URL for this job, or `null` when the job has no slug or no associated company slug (so a stable URL cannot be assembled).
@@ -904,9 +924,9 @@ interface components {
904
924
  * @description Whether the employer sponsors visas for remote candidates. One of `yes`, `no`, or `unknown`.
905
925
  * @enum {string}
906
926
  */
907
- remoteSponsorship: "yes" | "no" | "unknown";
927
+ remoteSponsorship: 'yes' | 'no' | 'unknown';
908
928
  /** @description Required education credentials. Each value is one of `high_school`, `associate_degree`, `bachelor_degree`, `professional_certificate`, `postgraduate_degree`, or `no_requirements`. */
909
- educationRequirements: ("high_school" | "associate_degree" | "bachelor_degree" | "professional_certificate" | "postgraduate_degree" | "no_requirements")[];
929
+ educationRequirements: ('high_school' | 'associate_degree' | 'bachelor_degree' | 'professional_certificate' | 'postgraduate_degree' | 'no_requirements')[];
910
930
  /** @description Minimum required experience in months, or `null` if not specified. */
911
931
  experienceMonths: number | null;
912
932
  /** @description If `true`, equivalent experience may substitute for the listed education requirements. `null` if not specified. */
@@ -915,12 +935,12 @@ interface components {
915
935
  * @description Period denominator for `inOfficeFrequency`, or `null` if not specified.
916
936
  * @enum {string|null}
917
937
  */
918
- inOfficePeriod: "per_week" | "per_month" | "per_year" | null;
938
+ inOfficePeriod: 'per_week' | 'per_month' | 'per_year' | null;
919
939
  /** @description How often the candidate must be in-office over `inOfficePeriod`, or `null` if not specified. */
920
940
  inOfficeFrequency: number | null;
921
- company: components["schemas"]["JobCompany"];
941
+ company: components['schemas']['JobCompany'];
922
942
  /** @description Physical office locations associated with the job. */
923
- officeLocations: components["schemas"]["JobOfficeLocation"][];
943
+ officeLocations: components['schemas']['JobOfficeLocation'][];
924
944
  };
925
945
  /** @description Embedded company resource for the job, or `null` if no company is attached. */
926
946
  JobCompany: {
@@ -962,7 +982,7 @@ interface components {
962
982
  allowedCountries?: string[];
963
983
  };
964
984
  /** @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. */
965
- customFields?: components["schemas"]["CustomFieldDefinition"][];
985
+ customFields?: components['schemas']['CustomFieldDefinition'][];
966
986
  };
967
987
  JobOfficeLocation: {
968
988
  /** @description ISO 3166-1 alpha-2 country code, or `null` if the location was not resolved. */
@@ -997,12 +1017,12 @@ interface components {
997
1017
  };
998
1018
  JobPostingBillingCheck: {
999
1019
  /** @enum {string} */
1000
- object: "job_posting_billing_check";
1020
+ object: 'job_posting_billing_check';
1001
1021
  hasActiveBilling: boolean;
1002
1022
  };
1003
1023
  JobPostingBillingOptions: {
1004
1024
  /** @enum {string} */
1005
- object: "job_posting_billing_options";
1025
+ object: 'job_posting_billing_options';
1006
1026
  options: {
1007
1027
  id: string;
1008
1028
  type: string;
@@ -1027,7 +1047,7 @@ interface components {
1027
1047
  };
1028
1048
  JobPostingBillingVerification: {
1029
1049
  /** @enum {string} */
1030
- object: "job_posting_billing_verification";
1050
+ object: 'job_posting_billing_verification';
1031
1051
  success: boolean;
1032
1052
  };
1033
1053
  JobPostingCheckBillingBody: {
@@ -1036,25 +1056,25 @@ interface components {
1036
1056
  };
1037
1057
  JobPostingLogo: {
1038
1058
  /** @enum {string} */
1039
- object: "job_posting_logo";
1059
+ object: 'job_posting_logo';
1040
1060
  publicUrl: string;
1041
1061
  };
1042
1062
  JobPostingPlan: {
1043
1063
  /** @enum {string} */
1044
- object: "job_posting_plan";
1064
+ object: 'job_posting_plan';
1045
1065
  id: string;
1046
1066
  name: string;
1047
1067
  description: string | null;
1048
1068
  kind: string;
1049
1069
  /** @enum {string|null} */
1050
- billingInterval: "month" | "year" | null;
1070
+ billingInterval: 'month' | 'year' | null;
1051
1071
  /** @enum {string|null} */
1052
- purpose: "job_posting" | "talent_access" | null;
1072
+ purpose: 'job_posting' | 'talent_access' | null;
1053
1073
  isRecommended: boolean;
1054
1074
  displayOrder: number | null;
1055
1075
  invoiceOnly: boolean;
1056
1076
  /** @enum {string|null} */
1057
- publishTiming: "on_issue" | "on_payment" | null;
1077
+ publishTiming: 'on_issue' | 'on_payment' | null;
1058
1078
  netTermsDays: number | null;
1059
1079
  prices: {
1060
1080
  currency: string;
@@ -1068,29 +1088,29 @@ interface components {
1068
1088
  };
1069
1089
  JobPostingResult: {
1070
1090
  /** @enum {string} */
1071
- object: "job_posting_result";
1091
+ object: 'job_posting_result';
1072
1092
  /** @enum {string} */
1073
- status: "checkout";
1093
+ status: 'checkout';
1074
1094
  checkoutUrl: string;
1075
1095
  jobId: string;
1076
1096
  } | {
1077
1097
  /** @enum {string} */
1078
- object: "job_posting_result";
1098
+ object: 'job_posting_result';
1079
1099
  /** @enum {string} */
1080
- status: "published";
1100
+ status: 'published';
1081
1101
  jobId: string;
1082
1102
  jobSlug: string;
1083
1103
  } | {
1084
1104
  /** @enum {string} */
1085
- object: "job_posting_result";
1105
+ object: 'job_posting_result';
1086
1106
  /** @enum {string} */
1087
- status: "pending_approval";
1107
+ status: 'pending_approval';
1088
1108
  jobId: string;
1089
1109
  } | {
1090
1110
  /** @enum {string} */
1091
- object: "job_posting_result";
1111
+ object: 'job_posting_result';
1092
1112
  /** @enum {string} */
1093
- status: "invoice_sent";
1113
+ status: 'invoice_sent';
1094
1114
  jobId: string;
1095
1115
  };
1096
1116
  JobPostingSendVerificationBody: {
@@ -1099,7 +1119,7 @@ interface components {
1099
1119
  };
1100
1120
  JobPostingSubscriptionEntitlements: {
1101
1121
  /** @enum {string} */
1102
- object: "job_posting_subscription_entitlements";
1122
+ object: 'job_posting_subscription_entitlements';
1103
1123
  hasSubscription: boolean;
1104
1124
  subscriptionId: string | null;
1105
1125
  canFeature: boolean | null;
@@ -1121,7 +1141,7 @@ interface components {
1121
1141
  * @description String representing the object's type. Objects of the same type share the same value.
1122
1142
  * @enum {string}
1123
1143
  */
1124
- object: "job";
1144
+ object: 'job';
1125
1145
  /** @description The job title. */
1126
1146
  title: string;
1127
1147
  /** @description URL-friendly slug used in public board URLs, or `null` if no slug is set. */
@@ -1130,24 +1150,24 @@ interface components {
1130
1150
  * @description Current status of the job. One of `draft`, `published`, `expired`, or `archived`.
1131
1151
  * @enum {string}
1132
1152
  */
1133
- status: "draft" | "published" | "expired" | "archived";
1153
+ status: 'draft' | 'published' | 'expired' | 'archived';
1134
1154
  /** @description Identifier of the company the job belongs to, or `null` if no company is attached. */
1135
1155
  companyId: string | null;
1136
1156
  /**
1137
1157
  * @description Employment type of the role, or `null` if not specified.
1138
1158
  * @enum {string|null}
1139
1159
  */
1140
- employmentType: "full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other" | null;
1160
+ employmentType: 'full_time' | 'part_time' | 'contract' | 'internship' | 'temporary' | 'volunteer' | 'other' | null;
1141
1161
  /**
1142
1162
  * @description Whether the role is on-site, hybrid, or fully remote, or `null` if not specified.
1143
1163
  * @enum {string|null}
1144
1164
  */
1145
- remoteOption: "on_site" | "hybrid" | "remote" | null;
1165
+ remoteOption: 'on_site' | 'hybrid' | 'remote' | null;
1146
1166
  /**
1147
1167
  * @description Seniority level of the role, or `null` if not specified.
1148
1168
  * @enum {string|null}
1149
1169
  */
1150
- seniority: "entry_level" | "associate" | "mid_level" | "senior" | "lead" | "principal" | "director" | "executive" | null;
1170
+ seniority: 'entry_level' | 'associate' | 'mid_level' | 'senior' | 'lead' | 'principal' | 'director' | 'executive' | null;
1151
1171
  /** @description Minimum salary in `salaryCurrency` units, or `null` if not specified. */
1152
1172
  salaryMin: number | null;
1153
1173
  /** @description Maximum salary in `salaryCurrency` units, or `null` if not specified. */
@@ -1158,7 +1178,7 @@ interface components {
1158
1178
  * @description Period the salary range is quoted against, or `null` if no salary is specified.
1159
1179
  * @enum {string|null}
1160
1180
  */
1161
- salaryTimeframe: "per_year" | "per_month" | "per_week" | "per_day" | "per_hour" | null;
1181
+ salaryTimeframe: 'per_year' | 'per_month' | 'per_week' | 'per_day' | 'per_hour' | null;
1162
1182
  /** @description Whether the job appears in featured slots on the public board. */
1163
1183
  isFeatured: boolean;
1164
1184
  /** @description Time at which the job was first published, or `null` if not yet published. ISO 8601 datetime. */
@@ -1175,11 +1195,11 @@ interface components {
1175
1195
  customFieldValues: {
1176
1196
  [key: string]: string | string[] | boolean | number;
1177
1197
  };
1178
- links: components["schemas"]["AdminOnlyResourceLinks"];
1198
+ links: components['schemas']['AdminOnlyResourceLinks'];
1179
1199
  };
1180
1200
  LegalPage: {
1181
1201
  /** @enum {string} */
1182
- object: "legal_page";
1202
+ object: 'legal_page';
1183
1203
  /** @description The resolved legal page type. */
1184
1204
  type: string;
1185
1205
  /** @description Page heading (H1), with `{{board_name}}` resolved. */
@@ -1187,7 +1207,7 @@ interface components {
1187
1207
  /** @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. */
1188
1208
  content: string;
1189
1209
  /** @enum {string} */
1190
- contentFormat: "html";
1210
+ contentFormat: 'html';
1191
1211
  /** @description Structured impressum legal-entity facts; `null` for non-impressum pages. */
1192
1212
  legalEntity: {
1193
1213
  legalName: string | null;
@@ -1196,7 +1216,7 @@ interface components {
1196
1216
  };
1197
1217
  LocationSalaryDetail: {
1198
1218
  /** @enum {string} */
1199
- object: "location_salary_detail";
1219
+ object: 'location_salary_detail';
1200
1220
  /** @description Immutable English source place slug — the salary-stats key. */
1201
1221
  sourceSlug: string;
1202
1222
  /** @description Board-language canonical URL slug — the starter 308 target. */
@@ -1277,7 +1297,7 @@ interface components {
1277
1297
  };
1278
1298
  LocationSkillsIndex: {
1279
1299
  /** @enum {string} */
1280
- object: "location_skills_index";
1300
+ object: 'location_skills_index';
1281
1301
  sourceSlug: string;
1282
1302
  canonicalSlug: string;
1283
1303
  placeName: string;
@@ -1291,7 +1311,7 @@ interface components {
1291
1311
  };
1292
1312
  LocationTitlesIndex: {
1293
1313
  /** @enum {string} */
1294
- object: "location_titles_index";
1314
+ object: 'location_titles_index';
1295
1315
  sourceSlug: string;
1296
1316
  canonicalSlug: string;
1297
1317
  placeName: string;
@@ -1303,7 +1323,7 @@ interface components {
1303
1323
  jobCount: number;
1304
1324
  }[];
1305
1325
  };
1306
- MediaGet: components["schemas"]["MediaUpload"] & {
1326
+ MediaGet: components['schemas']['MediaUpload'] & {
1307
1327
  /** @description Time at which the file was uploaded. ISO 8601 datetime. */
1308
1328
  uploadedAt: string;
1309
1329
  /** @description Resources currently referencing this file. Currently always `[]` — the resolver is not yet implemented. */
@@ -1321,7 +1341,7 @@ interface components {
1321
1341
  * @description String representing the object's type. Objects of the same type share the same value.
1322
1342
  * @enum {string}
1323
1343
  */
1324
- object: "media_upload";
1344
+ object: 'media_upload';
1325
1345
  /** @description URL where the file can be downloaded. Permanent for files served from the assets domain; a signed URL for legacy files. Always set on the upload response; may be `null` on retrieval if the underlying blob has been deleted. */
1326
1346
  url: string | null;
1327
1347
  /** @description Time at which the signed `url` expires (ISO 8601 datetime), or `null` when the `url` is permanent and never expires. */
@@ -1334,7 +1354,7 @@ interface components {
1334
1354
  * @description Resource type the file was uploaded for.
1335
1355
  * @enum {string}
1336
1356
  */
1337
- purpose: "board_logo" | "board_hero" | "account_avatar" | "company_logo" | "blog_image";
1357
+ purpose: 'board_logo' | 'board_hero' | 'account_avatar' | 'company_logo' | 'blog_image';
1338
1358
  };
1339
1359
  /** @description Error envelope, populated once the operation reaches `failed`. `null` otherwise. */
1340
1360
  OperationErrorEnvelope: {
@@ -1365,20 +1385,20 @@ interface components {
1365
1385
  * @description String representing the object's type. Objects of the same type share the same value.
1366
1386
  * @enum {string}
1367
1387
  */
1368
- object: "operation";
1388
+ object: 'operation';
1369
1389
  /** @description Operation kind, identifying which workflow the operation runs. */
1370
1390
  kind: string;
1371
1391
  /**
1372
1392
  * @description Current state of the operation.
1373
1393
  * @enum {string}
1374
1394
  */
1375
- state: "pending" | "running" | "succeeded" | "failed" | "cancelled";
1395
+ state: 'pending' | 'running' | 'succeeded' | 'failed' | 'cancelled';
1376
1396
  /** @description Identifier of the account the operation belongs to. */
1377
1397
  accountId: string;
1378
- progress: components["schemas"]["OperationProgress"];
1398
+ progress: components['schemas']['OperationProgress'];
1379
1399
  /** @description Operation result, populated once the operation reaches `succeeded`. Shape varies by `kind`. */
1380
1400
  result?: unknown;
1381
- error: components["schemas"]["OperationErrorEnvelope"];
1401
+ error: components['schemas']['OperationErrorEnvelope'];
1382
1402
  /** @description Time at which the operation was created. ISO 8601 datetime. */
1383
1403
  createdAt: string;
1384
1404
  /** @description Time at which the operation was last updated. ISO 8601 datetime. */
@@ -1430,23 +1450,23 @@ interface components {
1430
1450
  /** @description Default expiry, in days, applied to newly published jobs when no `expiresAt` is supplied. */
1431
1451
  defaultJobDurationDays?: number;
1432
1452
  /** @description Public contact email shown on the board. Pass `null` to clear. */
1433
- contactEmail?: string | "" | unknown | unknown;
1453
+ contactEmail?: string | '' | unknown | unknown;
1434
1454
  /** @description Legal name of the entity operating the board. Pass `null` to clear. */
1435
- companyLegalName?: string | "" | unknown | unknown;
1455
+ companyLegalName?: string | '' | unknown | unknown;
1436
1456
  /** @description Postal address of the entity operating the board. Pass `null` to clear. */
1437
- companyAddress?: string | "" | unknown | unknown;
1457
+ companyAddress?: string | '' | unknown | unknown;
1438
1458
  /** @description Public company website URL. Pass `null` to clear. */
1439
- companyWebsiteUrl?: string | "" | unknown | unknown;
1459
+ companyWebsiteUrl?: string | '' | unknown | unknown;
1440
1460
  /** @description Company X (Twitter) handle or profile URL. Pass `null` to clear. */
1441
- companyXHandle?: string | "" | unknown | unknown;
1461
+ companyXHandle?: string | '' | unknown | unknown;
1442
1462
  /** @description Company Facebook page URL. Pass `null` to clear. */
1443
- companyFacebookUrl?: string | "" | unknown | unknown;
1463
+ companyFacebookUrl?: string | '' | unknown | unknown;
1444
1464
  /** @description Company LinkedIn page URL. Pass `null` to clear. */
1445
- companyLinkedinUrl?: string | "" | unknown | unknown;
1465
+ companyLinkedinUrl?: string | '' | unknown | unknown;
1446
1466
  /** @description Label shown for the talent directory in the public navigation. 1–50 characters. */
1447
1467
  talentNavLabel?: string;
1448
1468
  /** @description Custom copy displayed on the password gate. Up to 500 characters. Pass `null` to clear. */
1449
- passwordProtectionMessage?: string | "" | unknown | unknown;
1469
+ passwordProtectionMessage?: string | '' | unknown | unknown;
1450
1470
  /** @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. */
1451
1471
  config?: {
1452
1472
  [key: string]: unknown;
@@ -1454,21 +1474,21 @@ interface components {
1454
1474
  };
1455
1475
  Plan: {
1456
1476
  /** @enum {string} */
1457
- object: "plan";
1477
+ object: 'plan';
1458
1478
  id: string;
1459
1479
  name: string;
1460
1480
  description: string | null;
1461
1481
  /** @enum {string} */
1462
- purpose: "job_posting" | "talent_access";
1482
+ purpose: 'job_posting' | 'talent_access';
1463
1483
  /** @enum {string} */
1464
- kind: "free" | "subscription" | "one_time" | "bundle";
1484
+ kind: 'free' | 'subscription' | 'one_time' | 'bundle';
1465
1485
  /** @enum {string|null} */
1466
- billingInterval: "month" | "year" | null;
1486
+ billingInterval: 'month' | 'year' | null;
1467
1487
  isRecommended: boolean;
1468
1488
  displayOrder: number;
1469
1489
  invoiceOnly: boolean;
1470
1490
  /** @enum {string|null} */
1471
- publishTiming: "on_issue" | "on_payment" | null;
1491
+ publishTiming: 'on_issue' | 'on_payment' | null;
1472
1492
  netTermsDays: number | null;
1473
1493
  price: {
1474
1494
  currency: string;
@@ -1481,7 +1501,7 @@ interface components {
1481
1501
  maxActiveJobs: number;
1482
1502
  featuredSlots: number;
1483
1503
  /** @enum {string} */
1484
- featureSelectionMode: "auto" | "manual";
1504
+ featureSelectionMode: 'auto' | 'manual';
1485
1505
  };
1486
1506
  /** @description Talent-access allowances (per billing period). Present only when `purpose` is `talent_access`. `"unlimited"` is a sentinel value. */
1487
1507
  talent?: {
@@ -1491,13 +1511,13 @@ interface components {
1491
1511
  };
1492
1512
  PublicBlogAdjacentPosts: {
1493
1513
  /** @enum {string} */
1494
- object: "blog_adjacent_posts";
1495
- previous: components["schemas"]["PublicBlogPostSummary"] | null;
1496
- next: components["schemas"]["PublicBlogPostSummary"] | null;
1514
+ object: 'blog_adjacent_posts';
1515
+ previous: components['schemas']['PublicBlogPostSummary'] | null;
1516
+ next: components['schemas']['PublicBlogPostSummary'] | null;
1497
1517
  };
1498
- PublicBlogAuthor: components["schemas"]["PublicBlogAuthorEmbed"] & {
1518
+ PublicBlogAuthor: components['schemas']['PublicBlogAuthorEmbed'] & {
1499
1519
  /** @enum {string} */
1500
- object: "public_blog_author";
1520
+ object: 'public_blog_author';
1501
1521
  };
1502
1522
  PublicBlogAuthorEmbed: {
1503
1523
  id: string;
@@ -1510,7 +1530,7 @@ interface components {
1510
1530
  linkedinUrl: string | null;
1511
1531
  githubUrl: string | null;
1512
1532
  };
1513
- PublicBlogPost: components["schemas"]["PublicBlogPostSummary"] & {
1533
+ PublicBlogPost: components['schemas']['PublicBlogPostSummary'] & {
1514
1534
  html: string | null;
1515
1535
  ogImageUrl: string | null;
1516
1536
  featureImageCaption: string | null;
@@ -1522,7 +1542,7 @@ interface components {
1522
1542
  PublicBlogPostSummary: {
1523
1543
  id: string;
1524
1544
  /** @enum {string} */
1525
- object: "public_blog_post";
1545
+ object: 'public_blog_post';
1526
1546
  title: string;
1527
1547
  slug: string;
1528
1548
  featured: boolean;
@@ -1533,8 +1553,8 @@ interface components {
1533
1553
  publishedAt: string | null;
1534
1554
  canonicalUrl: string | null;
1535
1555
  createdAt: string;
1536
- authors: components["schemas"]["PublicBlogAuthorEmbed"][];
1537
- tags: components["schemas"]["PublicBlogTagEmbed"][];
1556
+ authors: components['schemas']['PublicBlogAuthorEmbed'][];
1557
+ tags: components['schemas']['PublicBlogTagEmbed'][];
1538
1558
  };
1539
1559
  PublicBlogSearchBody: {
1540
1560
  /** @description Free-text search query. Up to 200 characters. */
@@ -1544,9 +1564,9 @@ interface components {
1544
1564
  /** @description A limit on the number of objects to be returned. Limit can range between 1 and 50. */
1545
1565
  limit?: number;
1546
1566
  };
1547
- PublicBlogTag: components["schemas"]["PublicBlogTagEmbed"] & {
1567
+ PublicBlogTag: components['schemas']['PublicBlogTagEmbed'] & {
1548
1568
  /** @enum {string} */
1549
- object: "public_blog_tag";
1569
+ object: 'public_blog_tag';
1550
1570
  };
1551
1571
  PublicBlogTagEmbed: {
1552
1572
  id: string;
@@ -1556,7 +1576,7 @@ interface components {
1556
1576
  };
1557
1577
  PublicBoardContext: {
1558
1578
  /** @enum {string} */
1559
- object: "public_board";
1579
+ object: 'public_board';
1560
1580
  /** @description Immutable board identifier (`boards_…`). */
1561
1581
  id: string;
1562
1582
  /** @description Mutable canonical board slug. */
@@ -1630,7 +1650,7 @@ interface components {
1630
1650
  * @description String representing the object's type. Objects of the same type share the same value.
1631
1651
  * @enum {string}
1632
1652
  */
1633
- object: "public_job";
1653
+ object: 'public_job';
1634
1654
  /** @description The job title. */
1635
1655
  title: string;
1636
1656
  /** @description URL-friendly slug used in public board URLs, or `null` if no slug is set. */
@@ -1639,24 +1659,24 @@ interface components {
1639
1659
  * @description Current status of the job. One of `draft`, `published`, `expired`, or `archived`.
1640
1660
  * @enum {string}
1641
1661
  */
1642
- status: "draft" | "published" | "expired" | "archived";
1662
+ status: 'draft' | 'published' | 'expired' | 'archived';
1643
1663
  /** @description Identifier of the company the job belongs to, or `null` if no company is attached. */
1644
1664
  companyId: string | null;
1645
1665
  /**
1646
1666
  * @description Employment type of the role, or `null` if not specified.
1647
1667
  * @enum {string|null}
1648
1668
  */
1649
- employmentType: "full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other" | null;
1669
+ employmentType: 'full_time' | 'part_time' | 'contract' | 'internship' | 'temporary' | 'volunteer' | 'other' | null;
1650
1670
  /**
1651
1671
  * @description Whether the role is on-site, hybrid, or fully remote, or `null` if not specified.
1652
1672
  * @enum {string|null}
1653
1673
  */
1654
- remoteOption: "on_site" | "hybrid" | "remote" | null;
1674
+ remoteOption: 'on_site' | 'hybrid' | 'remote' | null;
1655
1675
  /**
1656
1676
  * @description Seniority level of the role, or `null` if not specified.
1657
1677
  * @enum {string|null}
1658
1678
  */
1659
- seniority: "entry_level" | "associate" | "mid_level" | "senior" | "lead" | "principal" | "director" | "executive" | null;
1679
+ seniority: 'entry_level' | 'associate' | 'mid_level' | 'senior' | 'lead' | 'principal' | 'director' | 'executive' | null;
1660
1680
  /** @description Minimum salary in `salaryCurrency` units, or `null` if not specified. */
1661
1681
  salaryMin: number | null;
1662
1682
  /** @description Maximum salary in `salaryCurrency` units, or `null` if not specified. */
@@ -1667,7 +1687,7 @@ interface components {
1667
1687
  * @description Period the salary range is quoted against, or `null` if no salary is specified.
1668
1688
  * @enum {string|null}
1669
1689
  */
1670
- salaryTimeframe: "per_year" | "per_month" | "per_week" | "per_day" | "per_hour" | null;
1690
+ salaryTimeframe: 'per_year' | 'per_month' | 'per_week' | 'per_day' | 'per_hour' | null;
1671
1691
  /** @description Whether the job appears in featured slots on the public board. */
1672
1692
  isFeatured: boolean;
1673
1693
  /** @description Time at which the job was first published, or `null` if not yet published. ISO 8601 datetime. */
@@ -1678,7 +1698,7 @@ interface components {
1678
1698
  createdAt: string;
1679
1699
  /** @description Time at which the job was last updated. ISO 8601 datetime. */
1680
1700
  updatedAt: string;
1681
- links: components["schemas"]["PublicJobLinks"];
1701
+ links: components['schemas']['PublicJobLinks'];
1682
1702
  /** @description Long-form description of the role, or `null` if not specified. */
1683
1703
  description: string | null;
1684
1704
  /** @description Where candidates apply, or `null` if not specified. An HTTPS URL or `mailto:` URI. */
@@ -1706,9 +1726,9 @@ interface components {
1706
1726
  * @description Whether the employer sponsors visas for remote candidates. One of `yes`, `no`, or `unknown`.
1707
1727
  * @enum {string}
1708
1728
  */
1709
- remoteSponsorship: "yes" | "no" | "unknown";
1729
+ remoteSponsorship: 'yes' | 'no' | 'unknown';
1710
1730
  /** @description Required education credentials. Each value is one of `high_school`, `associate_degree`, `bachelor_degree`, `professional_certificate`, `postgraduate_degree`, or `no_requirements`. */
1711
- educationRequirements: ("high_school" | "associate_degree" | "bachelor_degree" | "professional_certificate" | "postgraduate_degree" | "no_requirements")[];
1731
+ educationRequirements: ('high_school' | 'associate_degree' | 'bachelor_degree' | 'professional_certificate' | 'postgraduate_degree' | 'no_requirements')[];
1712
1732
  /** @description Minimum required experience in months, or `null` if not specified. */
1713
1733
  experienceMonths: number | null;
1714
1734
  /** @description If `true`, equivalent experience may substitute for the listed education requirements. `null` if not specified. */
@@ -1717,12 +1737,12 @@ interface components {
1717
1737
  * @description Period denominator for `inOfficeFrequency`, or `null` if not specified.
1718
1738
  * @enum {string|null}
1719
1739
  */
1720
- inOfficePeriod: "per_week" | "per_month" | "per_year" | null;
1740
+ inOfficePeriod: 'per_week' | 'per_month' | 'per_year' | null;
1721
1741
  /** @description How often the candidate must be in-office over `inOfficePeriod`, or `null` if not specified. */
1722
1742
  inOfficeFrequency: number | null;
1723
- company: components["schemas"]["JobCompany"];
1743
+ company: components['schemas']['JobCompany'];
1724
1744
  /** @description Physical office locations associated with the job. */
1725
- officeLocations: components["schemas"]["JobOfficeLocation"][];
1745
+ officeLocations: components['schemas']['JobOfficeLocation'][];
1726
1746
  /** @description Resolved job categories (slug + board display name) — same shape as the card; names joined server-side. */
1727
1747
  categories: {
1728
1748
  slug: string;
@@ -1741,21 +1761,21 @@ interface components {
1741
1761
  };
1742
1762
  PublicJobAlertConfirmation: {
1743
1763
  /** @enum {string} */
1744
- object: "job_alert_confirmation";
1764
+ object: 'job_alert_confirmation';
1745
1765
  /**
1746
1766
  * @description Outcome of the confirmation. Always returned with HTTP 200 so the consumer renders by status (the token may be valid, stale, or unknown).
1747
1767
  * @enum {string}
1748
1768
  */
1749
- status: "confirmed" | "already_confirmed" | "expired" | "not_found";
1769
+ status: 'confirmed' | 'already_confirmed' | 'expired' | 'not_found';
1750
1770
  };
1751
1771
  PublicJobAlertManageResult: {
1752
1772
  /** @enum {string} */
1753
- object: "job_alert_manage_result";
1773
+ object: 'job_alert_manage_result';
1754
1774
  success: boolean;
1755
1775
  };
1756
1776
  PublicJobAlertManageState: {
1757
1777
  /** @enum {string} */
1758
- object: "job_alert_manage_state";
1778
+ object: 'job_alert_manage_state';
1759
1779
  email: string;
1760
1780
  confirmed: boolean;
1761
1781
  unsubscribed: boolean;
@@ -1778,18 +1798,18 @@ interface components {
1778
1798
  };
1779
1799
  PublicJobAlertResend: {
1780
1800
  /** @enum {string} */
1781
- object: "job_alert_confirmation_resend";
1801
+ object: 'job_alert_confirmation_resend';
1782
1802
  /** @enum {string} */
1783
- status: "sent" | "not_found" | "already_confirmed" | "throttled" | "send_failed";
1803
+ status: 'sent' | 'not_found' | 'already_confirmed' | 'throttled' | 'send_failed';
1784
1804
  };
1785
1805
  PublicJobAlertSubscription: {
1786
1806
  /** @enum {string} */
1787
- object: "job_alert_subscription";
1807
+ object: 'job_alert_subscription';
1788
1808
  /**
1789
1809
  * @description `created` on a new subscription; `duplicate` if it existed.
1790
1810
  * @enum {string}
1791
1811
  */
1792
- status: "created" | "duplicate";
1812
+ status: 'created' | 'duplicate';
1793
1813
  /** @description True when a double-opt-in confirmation email was sent. */
1794
1814
  requiresConfirmation: boolean;
1795
1815
  /** @description True if the subscriber was already email-confirmed. */
@@ -1798,7 +1818,7 @@ interface components {
1798
1818
  PublicJobCard: {
1799
1819
  id: string;
1800
1820
  /** @enum {string} */
1801
- object: "job_card";
1821
+ object: 'job_card';
1802
1822
  slug: string;
1803
1823
  title: string;
1804
1824
  /**
@@ -1807,9 +1827,9 @@ interface components {
1807
1827
  */
1808
1828
  publishedAt: string | null;
1809
1829
  /** @enum {string|null} */
1810
- employmentType: "full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other" | null;
1830
+ employmentType: 'full_time' | 'part_time' | 'contract' | 'internship' | 'temporary' | 'volunteer' | 'other' | null;
1811
1831
  /** @enum {string|null} */
1812
- remoteOption: "on_site" | "hybrid" | "remote" | null;
1832
+ remoteOption: 'on_site' | 'hybrid' | 'remote' | null;
1813
1833
  /** @description Display region label for remote jobs (e.g. "United States", "Worldwide"); `null` for non-remote jobs. */
1814
1834
  remoteLocationLabel: string | null;
1815
1835
  salaryMin: number | null;
@@ -1852,7 +1872,7 @@ interface components {
1852
1872
  };
1853
1873
  PublicPlace: {
1854
1874
  /** @enum {string} */
1855
- object: "place";
1875
+ object: 'place';
1856
1876
  /** @description Stable place identity (locations-tree edge endpoint). */
1857
1877
  id: string;
1858
1878
  /** @description Parent place's `id`; `null` for a root place. */
@@ -1869,16 +1889,21 @@ interface components {
1869
1889
  PublicSearchJobsBody: {
1870
1890
  /** @description Free-text search query matched against job title and description. Up to 200 characters. */
1871
1891
  query?: string;
1892
+ /**
1893
+ * @description Result ordering. `relevance` (default) ranks by search relevance with featured jobs first; `newest` orders by publish date and `salary_high` by salary (no-salary jobs last). Any explicit sort unpins featured jobs.
1894
+ * @enum {string}
1895
+ */
1896
+ sort?: 'relevance' | 'newest' | 'salary_high';
1872
1897
  /** @description Optional faceted filters to narrow search results. Multi-value filters match jobs in any of the supplied values; range filters accept `gte` and `lte` bounds. */
1873
1898
  filters?: {
1874
1899
  /** @description Only return jobs at any of the given company IDs. Up to 10 values. */
1875
1900
  companyId?: string[];
1876
1901
  /** @description Only return jobs with any of the given remote-work options. Up to 10 values. */
1877
- remoteOption?: ("on_site" | "hybrid" | "remote")[];
1902
+ remoteOption?: ('on_site' | 'hybrid' | 'remote')[];
1878
1903
  /** @description Only return jobs with any of the given employment types. Up to 10 values. */
1879
- employmentType?: ("full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other")[];
1904
+ employmentType?: ('full_time' | 'part_time' | 'contract' | 'internship' | 'temporary' | 'volunteer' | 'other')[];
1880
1905
  /** @description Only return jobs at any of the given seniority levels. Up to 10 values. */
1881
- seniority?: ("entry_level" | "associate" | "mid_level" | "senior" | "lead" | "principal" | "director" | "executive")[];
1906
+ seniority?: ('entry_level' | 'associate' | 'mid_level' | 'senior' | 'lead' | 'principal' | 'director' | 'executive')[];
1882
1907
  /** @description Range filter on the job's `publishedAt` timestamp. */
1883
1908
  publishedAt?: {
1884
1909
  /**
@@ -1912,9 +1937,9 @@ interface components {
1912
1937
  };
1913
1938
  PublicTaxonomyResolution: {
1914
1939
  /** @enum {string} */
1915
- object: "taxonomy_resolution";
1940
+ object: 'taxonomy_resolution';
1916
1941
  /** @enum {string} */
1917
- type: "category" | "skill" | "place" | "market";
1942
+ type: 'category' | 'skill' | 'place' | 'market';
1918
1943
  /** @description Immutable English source slug — the semantic-search key. */
1919
1944
  sourceSlug: string;
1920
1945
  /** @description Board-language URL slug (the `<link rel=canonical>` target). */
@@ -1923,7 +1948,7 @@ interface components {
1923
1948
  displayName: string;
1924
1949
  /** @description The canonical slug to emit a 308 redirect to when the inbound slug differs; `null` otherwise. */
1925
1950
  redirectTo: string | null;
1926
- geo: components["schemas"]["TaxonomyGeo"];
1951
+ geo: components['schemas']['TaxonomyGeo'];
1927
1952
  };
1928
1953
  PublicVerifyBoardPasswordBody: {
1929
1954
  /** @description The board password. */
@@ -1938,7 +1963,7 @@ interface components {
1938
1963
  };
1939
1964
  RedirectResolution: {
1940
1965
  /** @enum {string} */
1941
- object: "redirect_resolution";
1966
+ object: 'redirect_resolution';
1942
1967
  path: string;
1943
1968
  /** @description The redirect target (board-relative), or `null` when no redirect matches. The consumer 308s to `target`, or 404s when `null`. */
1944
1969
  target: string | null;
@@ -1978,7 +2003,7 @@ interface components {
1978
2003
  * @description Hint indicating whether `token` is an `access_token` or `refresh_token`. Optional.
1979
2004
  * @enum {string}
1980
2005
  */
1981
- token_type_hint?: "access_token" | "refresh_token";
2006
+ token_type_hint?: 'access_token' | 'refresh_token';
1982
2007
  /** @description OAuth client identifier. May be supplied here or via HTTP Basic authentication. */
1983
2008
  client_id?: string;
1984
2009
  /** @description OAuth client secret. May be supplied here or via HTTP Basic authentication. */
@@ -1986,7 +2011,7 @@ interface components {
1986
2011
  };
1987
2012
  SalaryCompanyIndexItem: {
1988
2013
  /** @enum {string} */
1989
- object: "salary_company";
2014
+ object: 'salary_company';
1990
2015
  companySlug: string;
1991
2016
  companyName: string;
1992
2017
  logoPath: string | null;
@@ -1997,7 +2022,7 @@ interface components {
1997
2022
  };
1998
2023
  SalaryLocationIndexItem: {
1999
2024
  /** @enum {string} */
2000
- object: "salary_location";
2025
+ object: 'salary_location';
2001
2026
  placeSlug: string;
2002
2027
  placeName: string;
2003
2028
  /** @description Slug of the parent place; `null` for a top-level node. */
@@ -2008,7 +2033,7 @@ interface components {
2008
2033
  };
2009
2034
  SalarySkillIndexItem: {
2010
2035
  /** @enum {string} */
2011
- object: "salary_skill";
2036
+ object: 'salary_skill';
2012
2037
  slug: string;
2013
2038
  name: string;
2014
2039
  avgSalaryMin: number;
@@ -2020,7 +2045,7 @@ interface components {
2020
2045
  };
2021
2046
  SalaryTitleIndexItem: {
2022
2047
  /** @enum {string} */
2023
- object: "salary_title";
2048
+ object: 'salary_title';
2024
2049
  slug: string;
2025
2050
  name: string;
2026
2051
  avgSalaryMin: number;
@@ -2032,7 +2057,7 @@ interface components {
2032
2057
  };
2033
2058
  SalesLedPlan: {
2034
2059
  /** @enum {string} */
2035
- object: "sales_led_plan";
2060
+ object: 'sales_led_plan';
2036
2061
  id: string;
2037
2062
  name: string;
2038
2063
  description: string;
@@ -2051,17 +2076,17 @@ interface components {
2051
2076
  /** @description Saved-job row ID. */
2052
2077
  id: string;
2053
2078
  /** @enum {string} */
2054
- object: "saved_job";
2079
+ object: 'saved_job';
2055
2080
  /** @description The saved job — also the DELETE path key. */
2056
2081
  jobId: string;
2057
2082
  /** Format: date-time */
2058
2083
  savedAt: string;
2059
- job: components["schemas"]["PublicJob"];
2084
+ job: components['schemas']['PublicJob'];
2060
2085
  };
2061
2086
  SearchBlogPostsBody: {
2062
2087
  query?: string;
2063
2088
  /** @enum {string} */
2064
- status?: "draft" | "scheduled" | "published";
2089
+ status?: 'draft' | 'scheduled' | 'published';
2065
2090
  cursor?: string | null;
2066
2091
  limit?: number;
2067
2092
  };
@@ -2082,15 +2107,15 @@ interface components {
2082
2107
  /** @description Optional faceted filters to narrow search results. Multi-value filters match jobs in any of the supplied values; range filters accept `gte` and `lte` bounds. */
2083
2108
  filters?: {
2084
2109
  /** @description Only return jobs in any of the given statuses. Up to 10 values. */
2085
- status?: ("draft" | "published" | "expired" | "archived")[];
2110
+ status?: ('draft' | 'published' | 'expired' | 'archived')[];
2086
2111
  /** @description Only return jobs at any of the given company IDs. Up to 10 values. */
2087
2112
  companyId?: string[];
2088
2113
  /** @description Only return jobs with any of the given remote-work options. Up to 10 values. */
2089
- remoteOption?: ("on_site" | "hybrid" | "remote")[];
2114
+ remoteOption?: ('on_site' | 'hybrid' | 'remote')[];
2090
2115
  /** @description Only return jobs with any of the given employment types. Up to 10 values. */
2091
- employmentType?: ("full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other")[];
2116
+ employmentType?: ('full_time' | 'part_time' | 'contract' | 'internship' | 'temporary' | 'volunteer' | 'other')[];
2092
2117
  /** @description Only return jobs at any of the given seniority levels. Up to 10 values. */
2093
- seniority?: ("entry_level" | "associate" | "mid_level" | "senior" | "lead" | "principal" | "director" | "executive")[];
2118
+ seniority?: ('entry_level' | 'associate' | 'mid_level' | 'senior' | 'lead' | 'principal' | 'director' | 'executive')[];
2094
2119
  /** @description Range filter on the job's `publishedAt` timestamp. */
2095
2120
  publishedAt?: {
2096
2121
  /**
@@ -2117,25 +2142,25 @@ interface components {
2117
2142
  /** @description Whether AdSense placements are rendered on the public board. */
2118
2143
  adsenseEnabled?: boolean;
2119
2144
  /** @description AdSense publisher ID in `ca-pub-XXXXXXXXXXXXXXXX` format. Pass an empty string or `null` to clear. */
2120
- adsenseClientId?: string | "" | unknown | unknown;
2145
+ adsenseClientId?: string | '' | unknown | unknown;
2121
2146
  /** @description Map of placement key to slot configuration. Placement keys are lowercase alphanumeric with `-`, `_`, `.`, or `:`. */
2122
2147
  adsenseSlots?: {
2123
- [key: string]: components["schemas"]["SettingsAdsenseSlot"];
2148
+ [key: string]: components['schemas']['SettingsAdsenseSlot'];
2124
2149
  };
2125
2150
  /** @description Contents to serve from `/ads.txt`. Up to 2,000 characters. Pass an empty string or `null` to clear. */
2126
- adsTxt?: string | "" | unknown | unknown;
2151
+ adsTxt?: string | '' | unknown | unknown;
2127
2152
  };
2128
2153
  SettingsAdsenseSlot: {
2129
2154
  /** @description Whether this placement is rendered. */
2130
2155
  enabled: boolean;
2131
2156
  /** @description Ten-digit AdSense slot ID. Pass an empty string or `null` to clear. */
2132
- slotId: string | "" | unknown | unknown;
2157
+ slotId: string | '' | unknown | unknown;
2133
2158
  /** @description AdSense layout type for the placement. */
2134
- layout?: ("auto" | "in-article" | "in-feed" | "fluid") | "" | unknown | unknown;
2159
+ layout?: ('auto' | 'in-article' | 'in-feed' | 'fluid') | '' | unknown | unknown;
2135
2160
  /** @description AdSense ad format. */
2136
- format?: ("auto" | "horizontal" | "vertical" | "rectangle" | "responsive") | "" | unknown | unknown;
2161
+ format?: ('auto' | 'horizontal' | 'vertical' | 'rectangle' | 'responsive') | '' | unknown | unknown;
2137
2162
  /** @description Visual style override for the placement. */
2138
- style?: ("default" | "light" | "dark" | "contrast") | "" | unknown | unknown;
2163
+ style?: ('default' | 'light' | 'dark' | 'contrast') | '' | unknown | unknown;
2139
2164
  /** @description How often the placement is shown (e.g. once every N items). */
2140
2165
  frequency?: number | unknown | unknown;
2141
2166
  };
@@ -2169,7 +2194,7 @@ interface components {
2169
2194
  };
2170
2195
  SkillLocationSalary: {
2171
2196
  /** @enum {string} */
2172
- object: "skill_location_salary";
2197
+ object: 'skill_location_salary';
2173
2198
  skillSourceSlug: string;
2174
2199
  skillCanonicalSlug: string;
2175
2200
  locationSourceSlug: string;
@@ -2236,16 +2261,16 @@ interface components {
2236
2261
  };
2237
2262
  SkillLocationsIndex: {
2238
2263
  /** @enum {string} */
2239
- object: "skill_locations_index";
2264
+ object: 'skill_locations_index';
2240
2265
  sourceSlug: string;
2241
2266
  canonicalSlug: string;
2242
2267
  skillName: string;
2243
2268
  currency: string;
2244
- locations: components["schemas"]["SalaryLocationIndexItem"][];
2269
+ locations: components['schemas']['SalaryLocationIndexItem'][];
2245
2270
  };
2246
2271
  SkillSalaryDetail: {
2247
2272
  /** @enum {string} */
2248
- object: "skill_salary_detail";
2273
+ object: 'skill_salary_detail';
2249
2274
  /** @description Immutable English source slug — the salary-stats key. */
2250
2275
  sourceSlug: string;
2251
2276
  /** @description Board-language canonical URL slug — the starter 308 target. */
@@ -2308,7 +2333,7 @@ interface components {
2308
2333
  };
2309
2334
  TalentDirectoryEntry: {
2310
2335
  /** @enum {string} */
2311
- object: "talent_directory_entry";
2336
+ object: 'talent_directory_entry';
2312
2337
  handle: string | null;
2313
2338
  displayName: string | null;
2314
2339
  headline: string | null;
@@ -2331,7 +2356,7 @@ interface components {
2331
2356
  };
2332
2357
  TalentProfile: {
2333
2358
  /** @enum {string} */
2334
- object: "talent_profile";
2359
+ object: 'talent_profile';
2335
2360
  handle: string | null;
2336
2361
  displayName: string | null;
2337
2362
  headline: string | null;
@@ -2390,7 +2415,7 @@ interface components {
2390
2415
  } | null;
2391
2416
  TitleLocationSalary: {
2392
2417
  /** @enum {string} */
2393
- object: "title_location_salary";
2418
+ object: 'title_location_salary';
2394
2419
  categorySourceSlug: string;
2395
2420
  categoryCanonicalSlug: string;
2396
2421
  locationSourceSlug: string;
@@ -2457,16 +2482,16 @@ interface components {
2457
2482
  };
2458
2483
  TitleLocationsIndex: {
2459
2484
  /** @enum {string} */
2460
- object: "title_locations_index";
2485
+ object: 'title_locations_index';
2461
2486
  sourceSlug: string;
2462
2487
  canonicalSlug: string;
2463
2488
  categoryName: string;
2464
2489
  currency: string;
2465
- locations: components["schemas"]["SalaryLocationIndexItem"][];
2490
+ locations: components['schemas']['SalaryLocationIndexItem'][];
2466
2491
  };
2467
2492
  TitleSalaryDetail: {
2468
2493
  /** @enum {string} */
2469
- object: "title_salary_detail";
2494
+ object: 'title_salary_detail';
2470
2495
  /** @description Immutable English source slug — the salary-stats key. */
2471
2496
  sourceSlug: string;
2472
2497
  /** @description Board-language canonical URL slug — the starter 308 target. */
@@ -2538,7 +2563,7 @@ interface components {
2538
2563
  * @description OAuth grant type. Either `authorization_code` to exchange an authorization code for a new token pair, or `refresh_token` to exchange a refresh token for a new token pair.
2539
2564
  * @enum {string}
2540
2565
  */
2541
- grant_type: "authorization_code" | "refresh_token";
2566
+ grant_type: 'authorization_code' | 'refresh_token';
2542
2567
  /** @description Authorization code returned from the authorization endpoint. Required when `grant_type` is `authorization_code`. */
2543
2568
  code?: string;
2544
2569
  /** @description Redirect URI used in the original authorization request. Must match exactly. Required when `grant_type` is `authorization_code`. */
@@ -2561,7 +2586,7 @@ interface components {
2561
2586
  * @description Always `Bearer`.
2562
2587
  * @enum {string}
2563
2588
  */
2564
- token_type: "Bearer";
2589
+ token_type: 'Bearer';
2565
2590
  /** @description Lifetime of the access token, in seconds. */
2566
2591
  expires_in: number;
2567
2592
  /** @description Newly issued refresh token. Single-use; reusing it revokes the entire token chain. */
@@ -2583,7 +2608,7 @@ interface components {
2583
2608
  * @description Author visibility status. One of `active` or `inactive`.
2584
2609
  * @enum {string}
2585
2610
  */
2586
- status?: "active" | "inactive";
2611
+ status?: 'active' | 'inactive';
2587
2612
  /** @description Storage ID of an uploaded avatar image (from `POST /v1/media/upload`). Pass `null` to clear an existing avatar. */
2588
2613
  avatarStorageId?: string | null;
2589
2614
  /** @description The author's personal website URL. Normalized to a canonical URL when stored. */
@@ -2621,7 +2646,7 @@ interface components {
2621
2646
  publishedAt?: string;
2622
2647
  title?: string;
2623
2648
  /** @enum {string} */
2624
- status?: "draft" | "scheduled" | "published";
2649
+ status?: 'draft' | 'scheduled' | 'published';
2625
2650
  };
2626
2651
  UpdateCompanyBody: {
2627
2652
  /** @description Public company website URL. Normalized to a canonical apex domain when stored. */
@@ -2652,22 +2677,22 @@ interface components {
2652
2677
  * @description Employment type of the role.
2653
2678
  * @enum {string}
2654
2679
  */
2655
- employmentType?: "full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other";
2680
+ employmentType?: 'full_time' | 'part_time' | 'contract' | 'internship' | 'temporary' | 'volunteer' | 'other';
2656
2681
  /**
2657
2682
  * @description Whether the role is on-site, hybrid, or fully remote.
2658
2683
  * @enum {string}
2659
2684
  */
2660
- remoteOption?: "on_site" | "hybrid" | "remote";
2685
+ remoteOption?: 'on_site' | 'hybrid' | 'remote';
2661
2686
  /** @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. */
2662
2687
  remotePermits?: {
2663
2688
  /** @enum {string} */
2664
- type: "worldwide" | "world_region" | "continent" | "region" | "subregion" | "subdivision" | "country" | "custom";
2689
+ type: 'worldwide' | 'world_region' | 'continent' | 'region' | 'subregion' | 'subdivision' | 'country' | 'custom';
2665
2690
  value: string;
2666
2691
  }[];
2667
2692
  /** @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. */
2668
2693
  remoteTimezones?: {
2669
2694
  /** @enum {string} */
2670
- type: "all" | "world_region" | "continent" | "region" | "subregion" | "country" | "timezone";
2695
+ type: 'all' | 'world_region' | 'continent' | 'region' | 'subregion' | 'country' | 'timezone';
2671
2696
  value: string;
2672
2697
  plusMinus?: number;
2673
2698
  }[];
@@ -2675,12 +2700,12 @@ interface components {
2675
2700
  * @description Whether the employer sponsors visas for remote candidates. One of `yes`, `no`, or `unknown`.
2676
2701
  * @enum {string}
2677
2702
  */
2678
- remoteSponsorship?: "yes" | "no" | "unknown";
2703
+ remoteSponsorship?: 'yes' | 'no' | 'unknown';
2679
2704
  /**
2680
2705
  * @description Seniority level of the role.
2681
2706
  * @enum {string}
2682
2707
  */
2683
- seniority?: "entry_level" | "associate" | "mid_level" | "senior" | "lead" | "principal" | "director" | "executive";
2708
+ seniority?: 'entry_level' | 'associate' | 'mid_level' | 'senior' | 'lead' | 'principal' | 'director' | 'executive';
2684
2709
  /** @description Where candidates apply. Accepts an HTTPS URL, a `mailto:` URI, or a bare email address (which is normalized to `mailto:` form). */
2685
2710
  applicationUrl?: string;
2686
2711
  /** @description Minimum salary, in `salaryCurrency` units. */
@@ -2693,7 +2718,7 @@ interface components {
2693
2718
  * @description Period the `salaryMin` and `salaryMax` figures are quoted against.
2694
2719
  * @enum {string}
2695
2720
  */
2696
- salaryTimeframe?: "per_year" | "per_month" | "per_week" | "per_day" | "per_hour";
2721
+ salaryTimeframe?: 'per_year' | 'per_month' | 'per_week' | 'per_day' | 'per_hour';
2697
2722
  /** @description Whether the job appears in featured slots on the public board. */
2698
2723
  isFeatured?: boolean;
2699
2724
  /** @description Job expiry as a Unix epoch in milliseconds. On create, omitted or `null` defaults to 30 days from creation. On PATCH, pass `null` to clear an existing expiry. Past timestamps remove the job from the public board. */
@@ -2701,7 +2726,7 @@ interface components {
2701
2726
  /** @description Time at which the job was first published, as a Unix epoch in milliseconds. When omitted on create with `status: "published"`, the server stamps the current time. Useful for bulk-importing historical jobs while preserving original publication dates. PATCH may overwrite an existing value but cannot clear it. */
2702
2727
  publishedAt?: number;
2703
2728
  /** @description Required education credentials. Each value is one of `high_school`, `associate_degree`, `bachelor_degree`, `professional_certificate`, `postgraduate_degree`, or `no_requirements`. */
2704
- educationRequirements?: ("high_school" | "associate_degree" | "bachelor_degree" | "professional_certificate" | "postgraduate_degree" | "no_requirements")[];
2729
+ educationRequirements?: ('high_school' | 'associate_degree' | 'bachelor_degree' | 'professional_certificate' | 'postgraduate_degree' | 'no_requirements')[];
2705
2730
  /** @description Minimum required experience, expressed in months. */
2706
2731
  experienceMonths?: number;
2707
2732
  /** @description If `true`, equivalent experience may substitute for the listed education requirements. */
@@ -2710,11 +2735,11 @@ interface components {
2710
2735
  * @description Period denominator for `inOfficeFrequency`.
2711
2736
  * @enum {string}
2712
2737
  */
2713
- inOfficePeriod?: "per_week" | "per_month" | "per_year";
2738
+ inOfficePeriod?: 'per_week' | 'per_month' | 'per_year';
2714
2739
  /** @description How often the candidate must be in-office over `inOfficePeriod`. */
2715
2740
  inOfficeFrequency?: number;
2716
2741
  /** @description Physical office locations associated with the job. Each entry is forward-geocoded server-side; a country mismatch returns `400 jobs_unresolvable_location`. */
2717
- officeLocations?: components["schemas"]["JobOfficeLocationInput"][];
2742
+ officeLocations?: components['schemas']['JobOfficeLocationInput'][];
2718
2743
  /** @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. */
2719
2744
  externalId?: string;
2720
2745
  /** @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. */
@@ -2733,7 +2758,7 @@ interface components {
2733
2758
  * @description Tag visibility. One of `public` or `internal`.
2734
2759
  * @enum {string}
2735
2760
  */
2736
- visibility?: "public" | "internal";
2761
+ visibility?: 'public' | 'internal';
2737
2762
  /** @description SEO meta title for the tag page. */
2738
2763
  metaTitle?: string;
2739
2764
  /** @description SEO meta description for the tag page. */
@@ -2748,7 +2773,7 @@ interface components {
2748
2773
  * @description String representing the object's type. Objects of the same type share the same value.
2749
2774
  * @enum {string}
2750
2775
  */
2751
- object: "usage";
2776
+ object: 'usage';
2752
2777
  /** @description Number of jobs currently in `published` status. */
2753
2778
  activeJobs: number;
2754
2779
  /** @description Plan-enforced cap on the number of published jobs. */
@@ -2811,6 +2836,8 @@ type OfficeLocation = Schemas['JobOfficeLocation'];
2811
2836
  type RemoteOption = NonNullable<PublicJob['remoteOption']>;
2812
2837
  type EmploymentType = NonNullable<PublicJob['employmentType']>;
2813
2838
  type Seniority = NonNullable<PublicJob['seniority']>;
2839
+ /** Candidate-facing result ordering (ADR-0048); `relevance` is the default. */
2840
+ type JobSort = NonNullable<Schemas['PublicSearchJobsBody']['sort']>;
2814
2841
  type EducationRequirement = PublicJob['educationRequirements'][number];
2815
2842
  type RemotePermit = PublicJob['remotePermits'][number];
2816
2843
  type RemoteTimezone = PublicJob['remoteTimezones'][number];
@@ -2841,6 +2868,8 @@ type JobsListQuery = {
2841
2868
  remoteOption?: RemoteOption[];
2842
2869
  employmentType?: EmploymentType[];
2843
2870
  seniority?: Seniority[];
2871
+ /** Result ordering (ADR-0048). Absent ⇒ `relevance` (the featured-ranked browse). */
2872
+ sort?: JobSort;
2844
2873
  /** Place slug for a geo radius search; unresolvable slugs are ignored. */
2845
2874
  location?: string;
2846
2875
  /** Radius in km around `location` (10–250; default 50). */
@@ -2977,7 +3006,7 @@ declare function isConflict(e: unknown): e is BoardApiError;
2977
3006
  * constant because the package is platform-neutral and cannot read
2978
3007
  * package.json at runtime.
2979
3008
  */
2980
- declare const SDK_VERSION = "1.18.0";
3009
+ declare const SDK_VERSION = "1.19.1";
2981
3010
 
2982
3011
  type BoardUser = Schemas['BoardUser'];
2983
3012
  type BoardAuthSession = Schemas['BoardAuthSession'];
@@ -2988,6 +3017,14 @@ type LogoutBody = Schemas['BoardAuthLogoutBody'];
2988
3017
  type VerifyEmailBody = Schemas['BoardAuthVerifyEmailBody'];
2989
3018
  type ForgotPasswordBody = Schemas['BoardAuthForgotPasswordBody'];
2990
3019
  type ResetPasswordBody = Schemas['BoardAuthResetPasswordBody'];
3020
+ type RequestMagicLinkBody = Schemas['BoardAuthRequestMagicLinkBody'];
3021
+ type ConsumeMagicLinkBody = Schemas['BoardAuthConsumeMagicLinkBody'];
3022
+ type OAuthProvider = 'google' | 'linkedin';
3023
+ type OAuthAuthorizationQuery = {
3024
+ returnTo?: string;
3025
+ };
3026
+ type OAuthAuthorizationUrl = Schemas['BoardAuthOAuthAuthorizationUrl'];
3027
+ type OAuthExchangeBody = Schemas['BoardAuthOAuthExchangeBody'];
2991
3028
 
2992
3029
  type PublicBoard = Schemas['PublicBoardContext'];
2993
3030
  type PublicBoardFeatures = PublicBoard['features'];
@@ -3867,6 +3904,26 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
3867
3904
  verifyEmail(body: VerifyEmailBody, options?: FetchOptions): Promise<void>;
3868
3905
  forgotPassword(body: ForgotPasswordBody, options?: FetchOptions): Promise<void>;
3869
3906
  resetPassword(body: ResetPasswordBody, options?: FetchOptions): Promise<void>;
3907
+ requestMagicLink(body: RequestMagicLinkBody, options?: FetchOptions): Promise<void>;
3908
+ consumeMagicLink(body: ConsumeMagicLinkBody, options?: FetchOptions): Promise<{
3909
+ object: "board_auth_session";
3910
+ accessToken: string;
3911
+ refreshToken: string;
3912
+ expiresAt: number;
3913
+ boardUser: components["schemas"]["BoardUser"];
3914
+ }>;
3915
+ getOAuthAuthorizationUrl(provider: OAuthProvider, query?: OAuthAuthorizationQuery, options?: FetchOptions): Promise<{
3916
+ object: "oauth_authorization_url";
3917
+ provider: "google" | "linkedin";
3918
+ authorizeUrl: string;
3919
+ }>;
3920
+ exchangeOAuth(body: OAuthExchangeBody, options?: FetchOptions): Promise<{
3921
+ object: "board_auth_session";
3922
+ accessToken: string;
3923
+ refreshToken: string;
3924
+ expiresAt: number;
3925
+ boardUser: components["schemas"]["BoardUser"];
3926
+ }>;
3870
3927
  };
3871
3928
  me: {
3872
3929
  retrieve(query?: Record<string, never>, options?: FetchOptions): Promise<{
@@ -4593,4 +4650,4 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
4593
4650
  };
4594
4651
  type BoardSdk = ReturnType<typeof createBoardClient>;
4595
4652
 
4596
- export { ACCESS_TOKEN_KEY, type Awaitable, BOARD_ACCESS_GRANT_KEY, type BlogAuthorEmbed, type BlogPostsListQuery, type BlogSearchBody, type BlogSimilarQuery, type BlogTagEmbed, type BoardAccessGrant, BoardApiError, type BoardAuthSession, BoardClient, type BoardRequest, type BoardSdk, type BoardSeo, type BoardUser, type CompaniesListQuery, type CompaniesSearchBody, type CompanyCategorySalary, type CompanyJobsListQuery, type CompanyListEnvelope, type CompanyMarket, type CompanyMarketRef, type CompanyMarketsListQuery, type CompanySalary, type CompanySimilarQuery, type CreateBoardClientOptions, type CreateJobPostingInput, type CustomStorage, type EducationRequirement, type EmbedJobsQuery, type EmploymentType, type FetchOptions, type ForgotPasswordBody, type JobAlertConfirmation, type JobAlertDeletePreferenceInput, type JobAlertFiltersInput, type JobAlertFrequency, type JobAlertManageQuery, type JobAlertManageResult, type JobAlertManageState, type JobAlertManageTokenInput, type JobAlertPreference, type JobAlertRemoteOption, type JobAlertResendResult, type JobAlertStoredFilters, type JobAlertSubscribeInput, type JobAlertSubscription, type JobAlertUpdatePreferenceInput, type JobCardListEnvelope, type JobCardSearchEnvelope, type JobCompany, type JobPostingBillingCheck, type JobPostingBillingOptions, type JobPostingBillingVerification, type JobPostingLogoResult, type JobPostingPlan, type JobPostingResult, type JobPostingSubscriptionEntitlements, type JobsListQuery, type JobsSearchBody, type LegalEntity, type LegalPageType, type ListEnvelope, type LocationSalaryDetail, type LocationSkillsIndex, type LocationTitlesIndex, type Logger, type LoginBody, type LogoutBody, type OfficeLocation, type PlacesListQuery, type Plan, type PlanListEnvelope, type PlansListQuery, type PublicBlogAdjacentPosts, type PublicBlogAuthor, type PublicBlogPost, type PublicBlogPostSummary, type PublicBlogTag, type PublicBoard, type PublicBoardAnalytics, type PublicBoardFeatures, type PublicBoardTheme, type PublicCompany, type PublicCompanyDetail, type PublicJob, type PublicJobCard, type PublicLegalPage, type PublicPlace, REFRESH_TOKEN_KEY, type RedirectResolution, type RefreshBody, type RegisterBody, type RelatedSearch, type RemoteOption, type RemotePermit, type RemoteTimezone, type ResetPasswordBody, SDK_VERSION, type SalaryCompany, type SalaryDetailQuery, type SalaryLocation, type SalarySkill, type SalaryTitle, type SalesLedPlan, type SalesLedPlanListEnvelope, type SaveJobBody, type SavedJob, type SavedJobsListQuery, type SearchEnvelope, type Seniority, type SkillLocationSalary, type SkillLocationsIndex, type SkillSalaryDetail, type StorageMode, type StorefrontPagination, type TalentDirectoryEntry, type TalentDirectoryListEnvelope, type TalentDirectoryQuery, type TalentProfile, type TaxonomyGeo, type TaxonomyResolution, type TitleLocationSalary, type TitleLocationsIndex, type TitleSalaryDetail, type VerifyEmailBody, createBoardClient, isBoardApiError, isBoardPasswordRequired, isConflict, isForbidden, isNotFound, isRateLimited, isUnauthorized, isValidationError };
4653
+ export { ACCESS_TOKEN_KEY, type Awaitable, BOARD_ACCESS_GRANT_KEY, type BlogAuthorEmbed, type BlogPostsListQuery, type BlogSearchBody, type BlogSimilarQuery, type BlogTagEmbed, type BoardAccessGrant, BoardApiError, type BoardAuthSession, BoardClient, type BoardRequest, type BoardSdk, type BoardSeo, type BoardUser, type CompaniesListQuery, type CompaniesSearchBody, type CompanyCategorySalary, type CompanyJobsListQuery, type CompanyListEnvelope, type CompanyMarket, type CompanyMarketRef, type CompanyMarketsListQuery, type CompanySalary, type CompanySimilarQuery, type ConsumeMagicLinkBody, type CreateBoardClientOptions, type CreateJobPostingInput, type CustomStorage, type EducationRequirement, type EmbedJobsQuery, type EmploymentType, type FetchOptions, type ForgotPasswordBody, type JobAlertConfirmation, type JobAlertDeletePreferenceInput, type JobAlertFiltersInput, type JobAlertFrequency, type JobAlertManageQuery, type JobAlertManageResult, type JobAlertManageState, type JobAlertManageTokenInput, type JobAlertPreference, type JobAlertRemoteOption, type JobAlertResendResult, type JobAlertStoredFilters, type JobAlertSubscribeInput, type JobAlertSubscription, type JobAlertUpdatePreferenceInput, type JobCardListEnvelope, type JobCardSearchEnvelope, type JobCompany, type JobPostingBillingCheck, type JobPostingBillingOptions, type JobPostingBillingVerification, type JobPostingLogoResult, type JobPostingPlan, type JobPostingResult, type JobPostingSubscriptionEntitlements, type JobSort, type JobsListQuery, type JobsSearchBody, type LegalEntity, type LegalPageType, type ListEnvelope, type LocationSalaryDetail, type LocationSkillsIndex, type LocationTitlesIndex, type Logger, type LoginBody, type LogoutBody, type OAuthAuthorizationQuery, type OAuthAuthorizationUrl, type OAuthExchangeBody, type OAuthProvider, type OfficeLocation, type PlacesListQuery, type Plan, type PlanListEnvelope, type PlansListQuery, type PublicBlogAdjacentPosts, type PublicBlogAuthor, type PublicBlogPost, type PublicBlogPostSummary, type PublicBlogTag, type PublicBoard, type PublicBoardAnalytics, type PublicBoardFeatures, type PublicBoardTheme, type PublicCompany, type PublicCompanyDetail, type PublicJob, type PublicJobCard, type PublicLegalPage, type PublicPlace, REFRESH_TOKEN_KEY, type RedirectResolution, type RefreshBody, type RegisterBody, type RelatedSearch, type RemoteOption, type RemotePermit, type RemoteTimezone, type RequestMagicLinkBody, type ResetPasswordBody, SDK_VERSION, type SalaryCompany, type SalaryDetailQuery, type SalaryLocation, type SalarySkill, type SalaryTitle, type SalesLedPlan, type SalesLedPlanListEnvelope, type SaveJobBody, type SavedJob, type SavedJobsListQuery, type SearchEnvelope, type Seniority, type SkillLocationSalary, type SkillLocationsIndex, type SkillSalaryDetail, type StorageMode, type StorefrontPagination, type TalentDirectoryEntry, type TalentDirectoryListEnvelope, type TalentDirectoryQuery, type TalentProfile, type TaxonomyGeo, type TaxonomyResolution, type TitleLocationSalary, type TitleLocationsIndex, type TitleSalaryDetail, type VerifyEmailBody, createBoardClient, isBoardApiError, isBoardPasswordRequired, isConflict, isForbidden, isNotFound, isRateLimited, isUnauthorized, isValidationError };