@cavuno/board 1.19.0 → 1.20.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.
package/dist/index.d.ts 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,36 +318,103 @@ 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;
307
327
  };
328
+ CandidateAvatar: {
329
+ /** @enum {string} */
330
+ object: "candidate_avatar";
331
+ avatarUrl: string | null;
332
+ };
333
+ CandidateEducation: {
334
+ id: string;
335
+ /** @enum {string} */
336
+ object: "candidate_education";
337
+ institutionName: string;
338
+ institutionUrl: string | null;
339
+ degree: string | null;
340
+ fieldOfStudy: string | null;
341
+ grade: string | null;
342
+ activitiesAndSocieties: string | null;
343
+ startDate: string | null;
344
+ endDate: string | null;
345
+ description: string | null;
346
+ sortOrder: number;
347
+ };
348
+ CandidateExperience: {
349
+ id: string;
350
+ /** @enum {string} */
351
+ object: "candidate_experience";
352
+ title: string;
353
+ companyName: string;
354
+ companyUrl: string | null;
355
+ location: string | null;
356
+ employmentType: string | null;
357
+ locationType: string | null;
358
+ foundVia: string | null;
359
+ startDate: string;
360
+ endDate: string | null;
361
+ description: string | null;
362
+ sortOrder: number;
363
+ experienceSkills: string[];
364
+ };
365
+ CandidateLanguage: {
366
+ /** @enum {string} */
367
+ object: "candidate_language";
368
+ name: string;
369
+ proficiency: string;
370
+ };
371
+ CandidateProfile: {
372
+ id: string;
373
+ /** @enum {string} */
374
+ object: "candidate_profile";
375
+ displayName: string | null;
376
+ bio: string | null;
377
+ avatarUrl: string | null;
378
+ handle: string | null;
379
+ headline: string | null;
380
+ location: string | null;
381
+ /** @enum {string} */
382
+ profileVisibility: "hidden" | "logged_in_only" | "public";
383
+ /** @enum {string} */
384
+ jobSearchStatus: "actively_looking" | "open_to_offers" | "not_looking";
385
+ /** @enum {string} */
386
+ jobSearchStatusVisibleTo: "everyone" | "employers_only";
387
+ openToRelocate: boolean;
388
+ };
389
+ CandidateSkill: {
390
+ /** @enum {string} */
391
+ object: "candidate_skill";
392
+ name: string;
393
+ jobSkillId: string | null;
394
+ };
308
395
  CompaniesBatchRequest: {
309
396
  /** @description Array of sub-operations to execute. Each entry runs independently and reports its result on the corresponding entry of the response `data` array. Sub-operation `id` values must be unique within the batch. Up to 100 entries. */
310
397
  operations: ({
311
398
  id: string;
312
399
  /** @enum {string} */
313
- method: 'POST';
400
+ method: "POST";
314
401
  body?: unknown;
315
402
  action?: string;
316
403
  resourceId?: string;
317
404
  } | {
318
405
  id: string;
319
406
  /** @enum {string} */
320
- method: 'PATCH';
407
+ method: "PATCH";
321
408
  body?: unknown;
322
409
  resourceId: string;
323
410
  } | {
324
411
  id: string;
325
412
  /** @enum {string} */
326
- method: 'DELETE';
413
+ method: "DELETE";
327
414
  resourceId: string;
328
415
  })[];
329
416
  };
330
- Company: components['schemas']['CompanySummary'] & {
417
+ Company: components["schemas"]["CompanySummary"] & {
331
418
  /** @description Long-form description of the company, or `null` if not set. */
332
419
  description: string | null;
333
420
  /** @description Whether automated backfill of jobs from this company is supported, or `null` if not yet evaluated. */
@@ -339,7 +426,7 @@ interface components {
339
426
  };
340
427
  CompanyCategorySalary: {
341
428
  /** @enum {string} */
342
- object: 'company_category_salary';
429
+ object: "company_category_salary";
343
430
  categorySourceSlug: string;
344
431
  categoryCanonicalSlug: string;
345
432
  companyName: string;
@@ -383,7 +470,7 @@ interface components {
383
470
  };
384
471
  CompanyMarket: {
385
472
  /** @enum {string} */
386
- object: 'company_market';
473
+ object: "company_market";
387
474
  slug: string;
388
475
  name: string;
389
476
  /** @description Number of companies on the board in this market. */
@@ -402,7 +489,7 @@ interface components {
402
489
  * @description String representing the object's type. Objects of the same type share the same value.
403
490
  * @enum {string}
404
491
  */
405
- object: 'public_company';
492
+ object: "public_company";
406
493
  /** @description Display name of the company. */
407
494
  name: string;
408
495
  /** @description URL-friendly slug for the company. */
@@ -417,15 +504,15 @@ interface components {
417
504
  jobCount: number;
418
505
  /** @description Number of currently-published, non-expired jobs at this company. */
419
506
  publishedJobCount: number;
420
- links: components['schemas']['PublicCompanyLinks'];
507
+ links: components["schemas"]["PublicCompanyLinks"];
421
508
  };
422
- CompanyPublicDetail: components['schemas']['CompanyPublic'] & {
509
+ CompanyPublicDetail: components["schemas"]["CompanyPublic"] & {
423
510
  /** @description Markets (sectors) this company operates in, each with its source slug. Empty when the company has no markets. */
424
- markets: components['schemas']['CompanyMarketRef'][];
511
+ markets: components["schemas"]["CompanyMarketRef"][];
425
512
  };
426
513
  CompanySalary: {
427
514
  /** @enum {string} */
428
- object: 'company_salary';
515
+ object: "company_salary";
429
516
  companyName: string;
430
517
  companySlug: string;
431
518
  companyLogoPath: string | null;
@@ -490,7 +577,7 @@ interface components {
490
577
  * @description String representing the object's type. Objects of the same type share the same value.
491
578
  * @enum {string}
492
579
  */
493
- object: 'company';
580
+ object: "company";
494
581
  /** @description Display name of the company. */
495
582
  name: string;
496
583
  /** @description URL-friendly slug for the company. */
@@ -512,7 +599,7 @@ interface components {
512
599
  /** @description Time at which the company was last updated, or `null` if it has never been updated. ISO 8601 datetime. */
513
600
  updatedAt: string | null;
514
601
  /** @description Public + admin URLs for this company. `public` may be `null` if the company lacks a slug. */
515
- links: components['schemas']['ResourceLinks'] & {
602
+ links: components["schemas"]["ResourceLinks"] & {
516
603
  /**
517
604
  * Format: uri
518
605
  * @description Canonical public URL for this company on the board, or `null` when no slug is set.
@@ -534,7 +621,7 @@ interface components {
534
621
  * @description Author visibility status. One of `active` or `inactive`.
535
622
  * @enum {string}
536
623
  */
537
- status?: 'active' | 'inactive';
624
+ status?: "active" | "inactive";
538
625
  /** @description Storage ID of an uploaded avatar image (from `POST /v1/media/upload`). Pass `null` to clear an existing avatar. */
539
626
  avatarStorageId?: string | null;
540
627
  /** @description The author's personal website URL. Normalized to a canonical URL when stored. */
@@ -572,7 +659,7 @@ interface components {
572
659
  publishedAt?: string;
573
660
  title: string;
574
661
  /** @enum {string} */
575
- status?: 'draft' | 'scheduled' | 'published';
662
+ status?: "draft" | "scheduled" | "published";
576
663
  };
577
664
  CreateCompanyBody: {
578
665
  /** @description Public company website URL. Normalized to a canonical apex domain when stored. */
@@ -592,6 +679,31 @@ interface components {
592
679
  /** @description URL-friendly slug for the company. Auto-generated from `name` when omitted. */
593
680
  slug?: string;
594
681
  };
682
+ CreateEducationBody: {
683
+ institutionName: string;
684
+ institutionUrl?: string;
685
+ degree?: string;
686
+ fieldOfStudy?: string;
687
+ grade?: string;
688
+ activitiesAndSocieties?: string;
689
+ startDate?: string;
690
+ endDate?: string;
691
+ description?: string;
692
+ sortOrder?: number;
693
+ };
694
+ CreateExperienceBody: {
695
+ title: string;
696
+ companyName: string;
697
+ startDate: string;
698
+ companyUrl?: string;
699
+ location?: string;
700
+ employmentType?: string;
701
+ locationType?: string;
702
+ foundVia?: string;
703
+ endDate?: string;
704
+ description?: string;
705
+ sortOrder?: number;
706
+ };
595
707
  CreateJobBody: {
596
708
  /** @description The ID of an existing company. Provide either `companyId` or `company`, not both. */
597
709
  companyId?: string;
@@ -603,22 +715,22 @@ interface components {
603
715
  * @description Employment type of the role.
604
716
  * @enum {string}
605
717
  */
606
- employmentType?: 'full_time' | 'part_time' | 'contract' | 'internship' | 'temporary' | 'volunteer' | 'other';
718
+ employmentType?: "full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other";
607
719
  /**
608
720
  * @description Whether the role is on-site, hybrid, or fully remote.
609
721
  * @enum {string}
610
722
  */
611
- remoteOption?: 'on_site' | 'hybrid' | 'remote';
723
+ remoteOption?: "on_site" | "hybrid" | "remote";
612
724
  /** @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
725
  remotePermits?: {
614
726
  /** @enum {string} */
615
- type: 'worldwide' | 'world_region' | 'continent' | 'region' | 'subregion' | 'subdivision' | 'country' | 'custom';
727
+ type: "worldwide" | "world_region" | "continent" | "region" | "subregion" | "subdivision" | "country" | "custom";
616
728
  value: string;
617
729
  }[];
618
730
  /** @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
731
  remoteTimezones?: {
620
732
  /** @enum {string} */
621
- type: 'all' | 'world_region' | 'continent' | 'region' | 'subregion' | 'country' | 'timezone';
733
+ type: "all" | "world_region" | "continent" | "region" | "subregion" | "country" | "timezone";
622
734
  value: string;
623
735
  plusMinus?: number;
624
736
  }[];
@@ -626,12 +738,12 @@ interface components {
626
738
  * @description Whether the employer sponsors visas for remote candidates. One of `yes`, `no`, or `unknown`.
627
739
  * @enum {string}
628
740
  */
629
- remoteSponsorship?: 'yes' | 'no' | 'unknown';
741
+ remoteSponsorship?: "yes" | "no" | "unknown";
630
742
  /**
631
743
  * @description Seniority level of the role.
632
744
  * @enum {string}
633
745
  */
634
- seniority?: 'entry_level' | 'associate' | 'mid_level' | 'senior' | 'lead' | 'principal' | 'director' | 'executive';
746
+ seniority?: "entry_level" | "associate" | "mid_level" | "senior" | "lead" | "principal" | "director" | "executive";
635
747
  /** @description Where candidates apply. Accepts an HTTPS URL, a `mailto:` URI, or a bare email address (which is normalized to `mailto:` form). */
636
748
  applicationUrl: string;
637
749
  /** @description Minimum salary, in `salaryCurrency` units. */
@@ -644,7 +756,7 @@ interface components {
644
756
  * @description Period the `salaryMin` and `salaryMax` figures are quoted against.
645
757
  * @enum {string}
646
758
  */
647
- salaryTimeframe?: 'per_year' | 'per_month' | 'per_week' | 'per_day' | 'per_hour';
759
+ salaryTimeframe?: "per_year" | "per_month" | "per_week" | "per_day" | "per_hour";
648
760
  /** @description Whether the job appears in featured slots on the public board. */
649
761
  isFeatured?: boolean;
650
762
  /** @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 +764,7 @@ interface components {
652
764
  /** @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
765
  publishedAt?: number;
654
766
  /** @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')[];
767
+ educationRequirements?: ("high_school" | "associate_degree" | "bachelor_degree" | "professional_certificate" | "postgraduate_degree" | "no_requirements")[];
656
768
  /** @description Minimum required experience, expressed in months. */
657
769
  experienceMonths?: number;
658
770
  /** @description If `true`, equivalent experience may substitute for the listed education requirements. */
@@ -661,11 +773,11 @@ interface components {
661
773
  * @description Period denominator for `inOfficeFrequency`.
662
774
  * @enum {string}
663
775
  */
664
- inOfficePeriod?: 'per_week' | 'per_month' | 'per_year';
776
+ inOfficePeriod?: "per_week" | "per_month" | "per_year";
665
777
  /** @description How often the candidate must be in-office over `inOfficePeriod`. */
666
778
  inOfficeFrequency?: number;
667
779
  /** @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'][];
780
+ officeLocations?: components["schemas"]["JobOfficeLocationInput"][];
669
781
  /** @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
782
  externalId?: string;
671
783
  /** @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 +786,12 @@ interface components {
674
786
  };
675
787
  /** @description The job title. */
676
788
  title: string;
677
- company?: components['schemas']['InlineCompanyInput'];
789
+ company?: components["schemas"]["InlineCompanyInput"];
678
790
  /**
679
791
  * @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
792
  * @enum {string}
681
793
  */
682
- status?: 'draft' | 'published';
794
+ status?: "draft" | "published";
683
795
  };
684
796
  CreateJobPostingBody: {
685
797
  submission: {
@@ -693,7 +805,7 @@ interface components {
693
805
  remoteOption: string;
694
806
  officeLocations: {
695
807
  /** @enum {string} */
696
- provider?: 'mapbox';
808
+ provider?: "mapbox";
697
809
  providerPlaceId?: string;
698
810
  displayName: string;
699
811
  countryCode?: string;
@@ -736,7 +848,7 @@ interface components {
736
848
  offset?: number;
737
849
  }[];
738
850
  /** @enum {string} */
739
- remoteSponsorship?: 'yes' | 'no' | 'unknown';
851
+ remoteSponsorship?: "yes" | "no" | "unknown";
740
852
  customFieldValues?: {
741
853
  [key: string]: string | string[] | boolean | number;
742
854
  };
@@ -774,7 +886,7 @@ interface components {
774
886
  * @description Tag visibility. One of `public` or `internal`.
775
887
  * @enum {string}
776
888
  */
777
- visibility?: 'public' | 'internal';
889
+ visibility?: "public" | "internal";
778
890
  /** @description SEO meta title for the tag page. */
779
891
  metaTitle?: string;
780
892
  /** @description SEO meta description for the tag page. */
@@ -791,9 +903,9 @@ interface components {
791
903
  * @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
904
  * @enum {string}
793
905
  */
794
- type: 'short_text' | 'long_text' | 'single_select' | 'multi_select' | 'boolean' | 'number';
906
+ type: "short_text" | "long_text" | "single_select" | "multi_select" | "boolean" | "number";
795
907
  /** @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'][];
908
+ options?: components["schemas"]["CustomFieldOption"][];
797
909
  /** @description When true, the value cannot be cleared or left empty on a write (rejected with `custom_field_required`). */
798
910
  required: boolean;
799
911
  /** @description Inclusive minimum for `number` fields, when set. */
@@ -819,7 +931,7 @@ interface components {
819
931
  * @description OAuth token endpoint authentication method. Use `none` for public PKCE clients that cannot keep a client secret.
820
932
  * @enum {string}
821
933
  */
822
- token_endpoint_auth_method?: 'client_secret_basic' | 'none';
934
+ token_endpoint_auth_method?: "client_secret_basic" | "none";
823
935
  };
824
936
  DynamicClientRegistrationResponse: {
825
937
  /** @description Public OAuth client identifier. */
@@ -855,6 +967,12 @@ interface components {
855
967
  /** @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. */
856
968
  createIfMissing?: boolean;
857
969
  };
970
+ HandleAvailability: {
971
+ /** @enum {string} */
972
+ object: "handle_availability";
973
+ handle: string;
974
+ available: boolean;
975
+ };
858
976
  /** @description An inline company payload, resolved via `find-or-create` before the job is created. Provide either `company` or `companyId`, not both. */
859
977
  InlineCompanyInput: {
860
978
  /** @description The company's display name. */
@@ -868,9 +986,9 @@ interface components {
868
986
  /** @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
987
  createIfMissing?: boolean;
870
988
  };
871
- Job: components['schemas']['JobSummary'] & {
989
+ Job: components["schemas"]["JobSummary"] & {
872
990
  /** @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'] & {
991
+ links?: components["schemas"]["ResourceLinks"] & {
874
992
  /**
875
993
  * Format: uri
876
994
  * @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 +1022,9 @@ interface components {
904
1022
  * @description Whether the employer sponsors visas for remote candidates. One of `yes`, `no`, or `unknown`.
905
1023
  * @enum {string}
906
1024
  */
907
- remoteSponsorship: 'yes' | 'no' | 'unknown';
1025
+ remoteSponsorship: "yes" | "no" | "unknown";
908
1026
  /** @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')[];
1027
+ educationRequirements: ("high_school" | "associate_degree" | "bachelor_degree" | "professional_certificate" | "postgraduate_degree" | "no_requirements")[];
910
1028
  /** @description Minimum required experience in months, or `null` if not specified. */
911
1029
  experienceMonths: number | null;
912
1030
  /** @description If `true`, equivalent experience may substitute for the listed education requirements. `null` if not specified. */
@@ -915,12 +1033,12 @@ interface components {
915
1033
  * @description Period denominator for `inOfficeFrequency`, or `null` if not specified.
916
1034
  * @enum {string|null}
917
1035
  */
918
- inOfficePeriod: 'per_week' | 'per_month' | 'per_year' | null;
1036
+ inOfficePeriod: "per_week" | "per_month" | "per_year" | null;
919
1037
  /** @description How often the candidate must be in-office over `inOfficePeriod`, or `null` if not specified. */
920
1038
  inOfficeFrequency: number | null;
921
- company: components['schemas']['JobCompany'];
1039
+ company: components["schemas"]["JobCompany"];
922
1040
  /** @description Physical office locations associated with the job. */
923
- officeLocations: components['schemas']['JobOfficeLocation'][];
1041
+ officeLocations: components["schemas"]["JobOfficeLocation"][];
924
1042
  };
925
1043
  /** @description Embedded company resource for the job, or `null` if no company is attached. */
926
1044
  JobCompany: {
@@ -962,7 +1080,7 @@ interface components {
962
1080
  allowedCountries?: string[];
963
1081
  };
964
1082
  /** @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'][];
1083
+ customFields?: components["schemas"]["CustomFieldDefinition"][];
966
1084
  };
967
1085
  JobOfficeLocation: {
968
1086
  /** @description ISO 3166-1 alpha-2 country code, or `null` if the location was not resolved. */
@@ -997,12 +1115,12 @@ interface components {
997
1115
  };
998
1116
  JobPostingBillingCheck: {
999
1117
  /** @enum {string} */
1000
- object: 'job_posting_billing_check';
1118
+ object: "job_posting_billing_check";
1001
1119
  hasActiveBilling: boolean;
1002
1120
  };
1003
1121
  JobPostingBillingOptions: {
1004
1122
  /** @enum {string} */
1005
- object: 'job_posting_billing_options';
1123
+ object: "job_posting_billing_options";
1006
1124
  options: {
1007
1125
  id: string;
1008
1126
  type: string;
@@ -1027,7 +1145,7 @@ interface components {
1027
1145
  };
1028
1146
  JobPostingBillingVerification: {
1029
1147
  /** @enum {string} */
1030
- object: 'job_posting_billing_verification';
1148
+ object: "job_posting_billing_verification";
1031
1149
  success: boolean;
1032
1150
  };
1033
1151
  JobPostingCheckBillingBody: {
@@ -1036,25 +1154,25 @@ interface components {
1036
1154
  };
1037
1155
  JobPostingLogo: {
1038
1156
  /** @enum {string} */
1039
- object: 'job_posting_logo';
1157
+ object: "job_posting_logo";
1040
1158
  publicUrl: string;
1041
1159
  };
1042
1160
  JobPostingPlan: {
1043
1161
  /** @enum {string} */
1044
- object: 'job_posting_plan';
1162
+ object: "job_posting_plan";
1045
1163
  id: string;
1046
1164
  name: string;
1047
1165
  description: string | null;
1048
1166
  kind: string;
1049
1167
  /** @enum {string|null} */
1050
- billingInterval: 'month' | 'year' | null;
1168
+ billingInterval: "month" | "year" | null;
1051
1169
  /** @enum {string|null} */
1052
- purpose: 'job_posting' | 'talent_access' | null;
1170
+ purpose: "job_posting" | "talent_access" | null;
1053
1171
  isRecommended: boolean;
1054
1172
  displayOrder: number | null;
1055
1173
  invoiceOnly: boolean;
1056
1174
  /** @enum {string|null} */
1057
- publishTiming: 'on_issue' | 'on_payment' | null;
1175
+ publishTiming: "on_issue" | "on_payment" | null;
1058
1176
  netTermsDays: number | null;
1059
1177
  prices: {
1060
1178
  currency: string;
@@ -1068,29 +1186,29 @@ interface components {
1068
1186
  };
1069
1187
  JobPostingResult: {
1070
1188
  /** @enum {string} */
1071
- object: 'job_posting_result';
1189
+ object: "job_posting_result";
1072
1190
  /** @enum {string} */
1073
- status: 'checkout';
1191
+ status: "checkout";
1074
1192
  checkoutUrl: string;
1075
1193
  jobId: string;
1076
1194
  } | {
1077
1195
  /** @enum {string} */
1078
- object: 'job_posting_result';
1196
+ object: "job_posting_result";
1079
1197
  /** @enum {string} */
1080
- status: 'published';
1198
+ status: "published";
1081
1199
  jobId: string;
1082
1200
  jobSlug: string;
1083
1201
  } | {
1084
1202
  /** @enum {string} */
1085
- object: 'job_posting_result';
1203
+ object: "job_posting_result";
1086
1204
  /** @enum {string} */
1087
- status: 'pending_approval';
1205
+ status: "pending_approval";
1088
1206
  jobId: string;
1089
1207
  } | {
1090
1208
  /** @enum {string} */
1091
- object: 'job_posting_result';
1209
+ object: "job_posting_result";
1092
1210
  /** @enum {string} */
1093
- status: 'invoice_sent';
1211
+ status: "invoice_sent";
1094
1212
  jobId: string;
1095
1213
  };
1096
1214
  JobPostingSendVerificationBody: {
@@ -1099,7 +1217,7 @@ interface components {
1099
1217
  };
1100
1218
  JobPostingSubscriptionEntitlements: {
1101
1219
  /** @enum {string} */
1102
- object: 'job_posting_subscription_entitlements';
1220
+ object: "job_posting_subscription_entitlements";
1103
1221
  hasSubscription: boolean;
1104
1222
  subscriptionId: string | null;
1105
1223
  canFeature: boolean | null;
@@ -1121,7 +1239,7 @@ interface components {
1121
1239
  * @description String representing the object's type. Objects of the same type share the same value.
1122
1240
  * @enum {string}
1123
1241
  */
1124
- object: 'job';
1242
+ object: "job";
1125
1243
  /** @description The job title. */
1126
1244
  title: string;
1127
1245
  /** @description URL-friendly slug used in public board URLs, or `null` if no slug is set. */
@@ -1130,24 +1248,24 @@ interface components {
1130
1248
  * @description Current status of the job. One of `draft`, `published`, `expired`, or `archived`.
1131
1249
  * @enum {string}
1132
1250
  */
1133
- status: 'draft' | 'published' | 'expired' | 'archived';
1251
+ status: "draft" | "published" | "expired" | "archived";
1134
1252
  /** @description Identifier of the company the job belongs to, or `null` if no company is attached. */
1135
1253
  companyId: string | null;
1136
1254
  /**
1137
1255
  * @description Employment type of the role, or `null` if not specified.
1138
1256
  * @enum {string|null}
1139
1257
  */
1140
- employmentType: 'full_time' | 'part_time' | 'contract' | 'internship' | 'temporary' | 'volunteer' | 'other' | null;
1258
+ employmentType: "full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other" | null;
1141
1259
  /**
1142
1260
  * @description Whether the role is on-site, hybrid, or fully remote, or `null` if not specified.
1143
1261
  * @enum {string|null}
1144
1262
  */
1145
- remoteOption: 'on_site' | 'hybrid' | 'remote' | null;
1263
+ remoteOption: "on_site" | "hybrid" | "remote" | null;
1146
1264
  /**
1147
1265
  * @description Seniority level of the role, or `null` if not specified.
1148
1266
  * @enum {string|null}
1149
1267
  */
1150
- seniority: 'entry_level' | 'associate' | 'mid_level' | 'senior' | 'lead' | 'principal' | 'director' | 'executive' | null;
1268
+ seniority: "entry_level" | "associate" | "mid_level" | "senior" | "lead" | "principal" | "director" | "executive" | null;
1151
1269
  /** @description Minimum salary in `salaryCurrency` units, or `null` if not specified. */
1152
1270
  salaryMin: number | null;
1153
1271
  /** @description Maximum salary in `salaryCurrency` units, or `null` if not specified. */
@@ -1158,7 +1276,7 @@ interface components {
1158
1276
  * @description Period the salary range is quoted against, or `null` if no salary is specified.
1159
1277
  * @enum {string|null}
1160
1278
  */
1161
- salaryTimeframe: 'per_year' | 'per_month' | 'per_week' | 'per_day' | 'per_hour' | null;
1279
+ salaryTimeframe: "per_year" | "per_month" | "per_week" | "per_day" | "per_hour" | null;
1162
1280
  /** @description Whether the job appears in featured slots on the public board. */
1163
1281
  isFeatured: boolean;
1164
1282
  /** @description Time at which the job was first published, or `null` if not yet published. ISO 8601 datetime. */
@@ -1175,11 +1293,11 @@ interface components {
1175
1293
  customFieldValues: {
1176
1294
  [key: string]: string | string[] | boolean | number;
1177
1295
  };
1178
- links: components['schemas']['AdminOnlyResourceLinks'];
1296
+ links: components["schemas"]["AdminOnlyResourceLinks"];
1179
1297
  };
1180
1298
  LegalPage: {
1181
1299
  /** @enum {string} */
1182
- object: 'legal_page';
1300
+ object: "legal_page";
1183
1301
  /** @description The resolved legal page type. */
1184
1302
  type: string;
1185
1303
  /** @description Page heading (H1), with `{{board_name}}` resolved. */
@@ -1187,7 +1305,7 @@ interface components {
1187
1305
  /** @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
1306
  content: string;
1189
1307
  /** @enum {string} */
1190
- contentFormat: 'html';
1308
+ contentFormat: "html";
1191
1309
  /** @description Structured impressum legal-entity facts; `null` for non-impressum pages. */
1192
1310
  legalEntity: {
1193
1311
  legalName: string | null;
@@ -1196,7 +1314,7 @@ interface components {
1196
1314
  };
1197
1315
  LocationSalaryDetail: {
1198
1316
  /** @enum {string} */
1199
- object: 'location_salary_detail';
1317
+ object: "location_salary_detail";
1200
1318
  /** @description Immutable English source place slug — the salary-stats key. */
1201
1319
  sourceSlug: string;
1202
1320
  /** @description Board-language canonical URL slug — the starter 308 target. */
@@ -1277,7 +1395,7 @@ interface components {
1277
1395
  };
1278
1396
  LocationSkillsIndex: {
1279
1397
  /** @enum {string} */
1280
- object: 'location_skills_index';
1398
+ object: "location_skills_index";
1281
1399
  sourceSlug: string;
1282
1400
  canonicalSlug: string;
1283
1401
  placeName: string;
@@ -1291,7 +1409,7 @@ interface components {
1291
1409
  };
1292
1410
  LocationTitlesIndex: {
1293
1411
  /** @enum {string} */
1294
- object: 'location_titles_index';
1412
+ object: "location_titles_index";
1295
1413
  sourceSlug: string;
1296
1414
  canonicalSlug: string;
1297
1415
  placeName: string;
@@ -1303,7 +1421,7 @@ interface components {
1303
1421
  jobCount: number;
1304
1422
  }[];
1305
1423
  };
1306
- MediaGet: components['schemas']['MediaUpload'] & {
1424
+ MediaGet: components["schemas"]["MediaUpload"] & {
1307
1425
  /** @description Time at which the file was uploaded. ISO 8601 datetime. */
1308
1426
  uploadedAt: string;
1309
1427
  /** @description Resources currently referencing this file. Currently always `[]` — the resolver is not yet implemented. */
@@ -1321,7 +1439,7 @@ interface components {
1321
1439
  * @description String representing the object's type. Objects of the same type share the same value.
1322
1440
  * @enum {string}
1323
1441
  */
1324
- object: 'media_upload';
1442
+ object: "media_upload";
1325
1443
  /** @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
1444
  url: string | null;
1327
1445
  /** @description Time at which the signed `url` expires (ISO 8601 datetime), or `null` when the `url` is permanent and never expires. */
@@ -1334,7 +1452,15 @@ interface components {
1334
1452
  * @description Resource type the file was uploaded for.
1335
1453
  * @enum {string}
1336
1454
  */
1337
- purpose: 'board_logo' | 'board_hero' | 'account_avatar' | 'company_logo' | 'blog_image';
1455
+ purpose: "board_logo" | "board_hero" | "account_avatar" | "company_logo" | "blog_image";
1456
+ };
1457
+ NotificationPreference: {
1458
+ /** @enum {string} */
1459
+ object: "notification_preference";
1460
+ /** @enum {string} */
1461
+ channel: "messageEmails" | "applicationEmails";
1462
+ subscribed: boolean;
1463
+ updatedAt: number | null;
1338
1464
  };
1339
1465
  /** @description Error envelope, populated once the operation reaches `failed`. `null` otherwise. */
1340
1466
  OperationErrorEnvelope: {
@@ -1365,20 +1491,20 @@ interface components {
1365
1491
  * @description String representing the object's type. Objects of the same type share the same value.
1366
1492
  * @enum {string}
1367
1493
  */
1368
- object: 'operation';
1494
+ object: "operation";
1369
1495
  /** @description Operation kind, identifying which workflow the operation runs. */
1370
1496
  kind: string;
1371
1497
  /**
1372
1498
  * @description Current state of the operation.
1373
1499
  * @enum {string}
1374
1500
  */
1375
- state: 'pending' | 'running' | 'succeeded' | 'failed' | 'cancelled';
1501
+ state: "pending" | "running" | "succeeded" | "failed" | "cancelled";
1376
1502
  /** @description Identifier of the account the operation belongs to. */
1377
1503
  accountId: string;
1378
- progress: components['schemas']['OperationProgress'];
1504
+ progress: components["schemas"]["OperationProgress"];
1379
1505
  /** @description Operation result, populated once the operation reaches `succeeded`. Shape varies by `kind`. */
1380
1506
  result?: unknown;
1381
- error: components['schemas']['OperationErrorEnvelope'];
1507
+ error: components["schemas"]["OperationErrorEnvelope"];
1382
1508
  /** @description Time at which the operation was created. ISO 8601 datetime. */
1383
1509
  createdAt: string;
1384
1510
  /** @description Time at which the operation was last updated. ISO 8601 datetime. */
@@ -1430,23 +1556,23 @@ interface components {
1430
1556
  /** @description Default expiry, in days, applied to newly published jobs when no `expiresAt` is supplied. */
1431
1557
  defaultJobDurationDays?: number;
1432
1558
  /** @description Public contact email shown on the board. Pass `null` to clear. */
1433
- contactEmail?: string | '' | unknown | unknown;
1559
+ contactEmail?: string | "" | unknown | unknown;
1434
1560
  /** @description Legal name of the entity operating the board. Pass `null` to clear. */
1435
- companyLegalName?: string | '' | unknown | unknown;
1561
+ companyLegalName?: string | "" | unknown | unknown;
1436
1562
  /** @description Postal address of the entity operating the board. Pass `null` to clear. */
1437
- companyAddress?: string | '' | unknown | unknown;
1563
+ companyAddress?: string | "" | unknown | unknown;
1438
1564
  /** @description Public company website URL. Pass `null` to clear. */
1439
- companyWebsiteUrl?: string | '' | unknown | unknown;
1565
+ companyWebsiteUrl?: string | "" | unknown | unknown;
1440
1566
  /** @description Company X (Twitter) handle or profile URL. Pass `null` to clear. */
1441
- companyXHandle?: string | '' | unknown | unknown;
1567
+ companyXHandle?: string | "" | unknown | unknown;
1442
1568
  /** @description Company Facebook page URL. Pass `null` to clear. */
1443
- companyFacebookUrl?: string | '' | unknown | unknown;
1569
+ companyFacebookUrl?: string | "" | unknown | unknown;
1444
1570
  /** @description Company LinkedIn page URL. Pass `null` to clear. */
1445
- companyLinkedinUrl?: string | '' | unknown | unknown;
1571
+ companyLinkedinUrl?: string | "" | unknown | unknown;
1446
1572
  /** @description Label shown for the talent directory in the public navigation. 1–50 characters. */
1447
1573
  talentNavLabel?: string;
1448
1574
  /** @description Custom copy displayed on the password gate. Up to 500 characters. Pass `null` to clear. */
1449
- passwordProtectionMessage?: string | '' | unknown | unknown;
1575
+ passwordProtectionMessage?: string | "" | unknown | unknown;
1450
1576
  /** @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
1577
  config?: {
1452
1578
  [key: string]: unknown;
@@ -1454,21 +1580,21 @@ interface components {
1454
1580
  };
1455
1581
  Plan: {
1456
1582
  /** @enum {string} */
1457
- object: 'plan';
1583
+ object: "plan";
1458
1584
  id: string;
1459
1585
  name: string;
1460
1586
  description: string | null;
1461
1587
  /** @enum {string} */
1462
- purpose: 'job_posting' | 'talent_access';
1588
+ purpose: "job_posting" | "talent_access";
1463
1589
  /** @enum {string} */
1464
- kind: 'free' | 'subscription' | 'one_time' | 'bundle';
1590
+ kind: "free" | "subscription" | "one_time" | "bundle";
1465
1591
  /** @enum {string|null} */
1466
- billingInterval: 'month' | 'year' | null;
1592
+ billingInterval: "month" | "year" | null;
1467
1593
  isRecommended: boolean;
1468
1594
  displayOrder: number;
1469
1595
  invoiceOnly: boolean;
1470
1596
  /** @enum {string|null} */
1471
- publishTiming: 'on_issue' | 'on_payment' | null;
1597
+ publishTiming: "on_issue" | "on_payment" | null;
1472
1598
  netTermsDays: number | null;
1473
1599
  price: {
1474
1600
  currency: string;
@@ -1481,7 +1607,7 @@ interface components {
1481
1607
  maxActiveJobs: number;
1482
1608
  featuredSlots: number;
1483
1609
  /** @enum {string} */
1484
- featureSelectionMode: 'auto' | 'manual';
1610
+ featureSelectionMode: "auto" | "manual";
1485
1611
  };
1486
1612
  /** @description Talent-access allowances (per billing period). Present only when `purpose` is `talent_access`. `"unlimited"` is a sentinel value. */
1487
1613
  talent?: {
@@ -1491,13 +1617,13 @@ interface components {
1491
1617
  };
1492
1618
  PublicBlogAdjacentPosts: {
1493
1619
  /** @enum {string} */
1494
- object: 'blog_adjacent_posts';
1495
- previous: components['schemas']['PublicBlogPostSummary'] | null;
1496
- next: components['schemas']['PublicBlogPostSummary'] | null;
1620
+ object: "blog_adjacent_posts";
1621
+ previous: components["schemas"]["PublicBlogPostSummary"] | null;
1622
+ next: components["schemas"]["PublicBlogPostSummary"] | null;
1497
1623
  };
1498
- PublicBlogAuthor: components['schemas']['PublicBlogAuthorEmbed'] & {
1624
+ PublicBlogAuthor: components["schemas"]["PublicBlogAuthorEmbed"] & {
1499
1625
  /** @enum {string} */
1500
- object: 'public_blog_author';
1626
+ object: "public_blog_author";
1501
1627
  };
1502
1628
  PublicBlogAuthorEmbed: {
1503
1629
  id: string;
@@ -1510,7 +1636,7 @@ interface components {
1510
1636
  linkedinUrl: string | null;
1511
1637
  githubUrl: string | null;
1512
1638
  };
1513
- PublicBlogPost: components['schemas']['PublicBlogPostSummary'] & {
1639
+ PublicBlogPost: components["schemas"]["PublicBlogPostSummary"] & {
1514
1640
  html: string | null;
1515
1641
  ogImageUrl: string | null;
1516
1642
  featureImageCaption: string | null;
@@ -1522,7 +1648,7 @@ interface components {
1522
1648
  PublicBlogPostSummary: {
1523
1649
  id: string;
1524
1650
  /** @enum {string} */
1525
- object: 'public_blog_post';
1651
+ object: "public_blog_post";
1526
1652
  title: string;
1527
1653
  slug: string;
1528
1654
  featured: boolean;
@@ -1533,8 +1659,8 @@ interface components {
1533
1659
  publishedAt: string | null;
1534
1660
  canonicalUrl: string | null;
1535
1661
  createdAt: string;
1536
- authors: components['schemas']['PublicBlogAuthorEmbed'][];
1537
- tags: components['schemas']['PublicBlogTagEmbed'][];
1662
+ authors: components["schemas"]["PublicBlogAuthorEmbed"][];
1663
+ tags: components["schemas"]["PublicBlogTagEmbed"][];
1538
1664
  };
1539
1665
  PublicBlogSearchBody: {
1540
1666
  /** @description Free-text search query. Up to 200 characters. */
@@ -1544,9 +1670,9 @@ interface components {
1544
1670
  /** @description A limit on the number of objects to be returned. Limit can range between 1 and 50. */
1545
1671
  limit?: number;
1546
1672
  };
1547
- PublicBlogTag: components['schemas']['PublicBlogTagEmbed'] & {
1673
+ PublicBlogTag: components["schemas"]["PublicBlogTagEmbed"] & {
1548
1674
  /** @enum {string} */
1549
- object: 'public_blog_tag';
1675
+ object: "public_blog_tag";
1550
1676
  };
1551
1677
  PublicBlogTagEmbed: {
1552
1678
  id: string;
@@ -1556,7 +1682,7 @@ interface components {
1556
1682
  };
1557
1683
  PublicBoardContext: {
1558
1684
  /** @enum {string} */
1559
- object: 'public_board';
1685
+ object: "public_board";
1560
1686
  /** @description Immutable board identifier (`boards_…`). */
1561
1687
  id: string;
1562
1688
  /** @description Mutable canonical board slug. */
@@ -1630,7 +1756,7 @@ interface components {
1630
1756
  * @description String representing the object's type. Objects of the same type share the same value.
1631
1757
  * @enum {string}
1632
1758
  */
1633
- object: 'public_job';
1759
+ object: "public_job";
1634
1760
  /** @description The job title. */
1635
1761
  title: string;
1636
1762
  /** @description URL-friendly slug used in public board URLs, or `null` if no slug is set. */
@@ -1639,24 +1765,24 @@ interface components {
1639
1765
  * @description Current status of the job. One of `draft`, `published`, `expired`, or `archived`.
1640
1766
  * @enum {string}
1641
1767
  */
1642
- status: 'draft' | 'published' | 'expired' | 'archived';
1768
+ status: "draft" | "published" | "expired" | "archived";
1643
1769
  /** @description Identifier of the company the job belongs to, or `null` if no company is attached. */
1644
1770
  companyId: string | null;
1645
1771
  /**
1646
1772
  * @description Employment type of the role, or `null` if not specified.
1647
1773
  * @enum {string|null}
1648
1774
  */
1649
- employmentType: 'full_time' | 'part_time' | 'contract' | 'internship' | 'temporary' | 'volunteer' | 'other' | null;
1775
+ employmentType: "full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other" | null;
1650
1776
  /**
1651
1777
  * @description Whether the role is on-site, hybrid, or fully remote, or `null` if not specified.
1652
1778
  * @enum {string|null}
1653
1779
  */
1654
- remoteOption: 'on_site' | 'hybrid' | 'remote' | null;
1780
+ remoteOption: "on_site" | "hybrid" | "remote" | null;
1655
1781
  /**
1656
1782
  * @description Seniority level of the role, or `null` if not specified.
1657
1783
  * @enum {string|null}
1658
1784
  */
1659
- seniority: 'entry_level' | 'associate' | 'mid_level' | 'senior' | 'lead' | 'principal' | 'director' | 'executive' | null;
1785
+ seniority: "entry_level" | "associate" | "mid_level" | "senior" | "lead" | "principal" | "director" | "executive" | null;
1660
1786
  /** @description Minimum salary in `salaryCurrency` units, or `null` if not specified. */
1661
1787
  salaryMin: number | null;
1662
1788
  /** @description Maximum salary in `salaryCurrency` units, or `null` if not specified. */
@@ -1667,7 +1793,7 @@ interface components {
1667
1793
  * @description Period the salary range is quoted against, or `null` if no salary is specified.
1668
1794
  * @enum {string|null}
1669
1795
  */
1670
- salaryTimeframe: 'per_year' | 'per_month' | 'per_week' | 'per_day' | 'per_hour' | null;
1796
+ salaryTimeframe: "per_year" | "per_month" | "per_week" | "per_day" | "per_hour" | null;
1671
1797
  /** @description Whether the job appears in featured slots on the public board. */
1672
1798
  isFeatured: boolean;
1673
1799
  /** @description Time at which the job was first published, or `null` if not yet published. ISO 8601 datetime. */
@@ -1678,7 +1804,7 @@ interface components {
1678
1804
  createdAt: string;
1679
1805
  /** @description Time at which the job was last updated. ISO 8601 datetime. */
1680
1806
  updatedAt: string;
1681
- links: components['schemas']['PublicJobLinks'];
1807
+ links: components["schemas"]["PublicJobLinks"];
1682
1808
  /** @description Long-form description of the role, or `null` if not specified. */
1683
1809
  description: string | null;
1684
1810
  /** @description Where candidates apply, or `null` if not specified. An HTTPS URL or `mailto:` URI. */
@@ -1706,9 +1832,9 @@ interface components {
1706
1832
  * @description Whether the employer sponsors visas for remote candidates. One of `yes`, `no`, or `unknown`.
1707
1833
  * @enum {string}
1708
1834
  */
1709
- remoteSponsorship: 'yes' | 'no' | 'unknown';
1835
+ remoteSponsorship: "yes" | "no" | "unknown";
1710
1836
  /** @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')[];
1837
+ educationRequirements: ("high_school" | "associate_degree" | "bachelor_degree" | "professional_certificate" | "postgraduate_degree" | "no_requirements")[];
1712
1838
  /** @description Minimum required experience in months, or `null` if not specified. */
1713
1839
  experienceMonths: number | null;
1714
1840
  /** @description If `true`, equivalent experience may substitute for the listed education requirements. `null` if not specified. */
@@ -1717,12 +1843,12 @@ interface components {
1717
1843
  * @description Period denominator for `inOfficeFrequency`, or `null` if not specified.
1718
1844
  * @enum {string|null}
1719
1845
  */
1720
- inOfficePeriod: 'per_week' | 'per_month' | 'per_year' | null;
1846
+ inOfficePeriod: "per_week" | "per_month" | "per_year" | null;
1721
1847
  /** @description How often the candidate must be in-office over `inOfficePeriod`, or `null` if not specified. */
1722
1848
  inOfficeFrequency: number | null;
1723
- company: components['schemas']['JobCompany'];
1849
+ company: components["schemas"]["JobCompany"];
1724
1850
  /** @description Physical office locations associated with the job. */
1725
- officeLocations: components['schemas']['JobOfficeLocation'][];
1851
+ officeLocations: components["schemas"]["JobOfficeLocation"][];
1726
1852
  /** @description Resolved job categories (slug + board display name) — same shape as the card; names joined server-side. */
1727
1853
  categories: {
1728
1854
  slug: string;
@@ -1741,21 +1867,21 @@ interface components {
1741
1867
  };
1742
1868
  PublicJobAlertConfirmation: {
1743
1869
  /** @enum {string} */
1744
- object: 'job_alert_confirmation';
1870
+ object: "job_alert_confirmation";
1745
1871
  /**
1746
1872
  * @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
1873
  * @enum {string}
1748
1874
  */
1749
- status: 'confirmed' | 'already_confirmed' | 'expired' | 'not_found';
1875
+ status: "confirmed" | "already_confirmed" | "expired" | "not_found";
1750
1876
  };
1751
1877
  PublicJobAlertManageResult: {
1752
1878
  /** @enum {string} */
1753
- object: 'job_alert_manage_result';
1879
+ object: "job_alert_manage_result";
1754
1880
  success: boolean;
1755
1881
  };
1756
1882
  PublicJobAlertManageState: {
1757
1883
  /** @enum {string} */
1758
- object: 'job_alert_manage_state';
1884
+ object: "job_alert_manage_state";
1759
1885
  email: string;
1760
1886
  confirmed: boolean;
1761
1887
  unsubscribed: boolean;
@@ -1778,18 +1904,18 @@ interface components {
1778
1904
  };
1779
1905
  PublicJobAlertResend: {
1780
1906
  /** @enum {string} */
1781
- object: 'job_alert_confirmation_resend';
1907
+ object: "job_alert_confirmation_resend";
1782
1908
  /** @enum {string} */
1783
- status: 'sent' | 'not_found' | 'already_confirmed' | 'throttled' | 'send_failed';
1909
+ status: "sent" | "not_found" | "already_confirmed" | "throttled" | "send_failed";
1784
1910
  };
1785
1911
  PublicJobAlertSubscription: {
1786
1912
  /** @enum {string} */
1787
- object: 'job_alert_subscription';
1913
+ object: "job_alert_subscription";
1788
1914
  /**
1789
1915
  * @description `created` on a new subscription; `duplicate` if it existed.
1790
1916
  * @enum {string}
1791
1917
  */
1792
- status: 'created' | 'duplicate';
1918
+ status: "created" | "duplicate";
1793
1919
  /** @description True when a double-opt-in confirmation email was sent. */
1794
1920
  requiresConfirmation: boolean;
1795
1921
  /** @description True if the subscriber was already email-confirmed. */
@@ -1798,7 +1924,7 @@ interface components {
1798
1924
  PublicJobCard: {
1799
1925
  id: string;
1800
1926
  /** @enum {string} */
1801
- object: 'job_card';
1927
+ object: "job_card";
1802
1928
  slug: string;
1803
1929
  title: string;
1804
1930
  /**
@@ -1807,9 +1933,9 @@ interface components {
1807
1933
  */
1808
1934
  publishedAt: string | null;
1809
1935
  /** @enum {string|null} */
1810
- employmentType: 'full_time' | 'part_time' | 'contract' | 'internship' | 'temporary' | 'volunteer' | 'other' | null;
1936
+ employmentType: "full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other" | null;
1811
1937
  /** @enum {string|null} */
1812
- remoteOption: 'on_site' | 'hybrid' | 'remote' | null;
1938
+ remoteOption: "on_site" | "hybrid" | "remote" | null;
1813
1939
  /** @description Display region label for remote jobs (e.g. "United States", "Worldwide"); `null` for non-remote jobs. */
1814
1940
  remoteLocationLabel: string | null;
1815
1941
  salaryMin: number | null;
@@ -1852,7 +1978,7 @@ interface components {
1852
1978
  };
1853
1979
  PublicPlace: {
1854
1980
  /** @enum {string} */
1855
- object: 'place';
1981
+ object: "place";
1856
1982
  /** @description Stable place identity (locations-tree edge endpoint). */
1857
1983
  id: string;
1858
1984
  /** @description Parent place's `id`; `null` for a root place. */
@@ -1873,17 +1999,17 @@ interface components {
1873
1999
  * @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.
1874
2000
  * @enum {string}
1875
2001
  */
1876
- sort?: 'relevance' | 'newest' | 'salary_high';
2002
+ sort?: "relevance" | "newest" | "salary_high";
1877
2003
  /** @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. */
1878
2004
  filters?: {
1879
2005
  /** @description Only return jobs at any of the given company IDs. Up to 10 values. */
1880
2006
  companyId?: string[];
1881
2007
  /** @description Only return jobs with any of the given remote-work options. Up to 10 values. */
1882
- remoteOption?: ('on_site' | 'hybrid' | 'remote')[];
2008
+ remoteOption?: ("on_site" | "hybrid" | "remote")[];
1883
2009
  /** @description Only return jobs with any of the given employment types. Up to 10 values. */
1884
- employmentType?: ('full_time' | 'part_time' | 'contract' | 'internship' | 'temporary' | 'volunteer' | 'other')[];
2010
+ employmentType?: ("full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other")[];
1885
2011
  /** @description Only return jobs at any of the given seniority levels. Up to 10 values. */
1886
- seniority?: ('entry_level' | 'associate' | 'mid_level' | 'senior' | 'lead' | 'principal' | 'director' | 'executive')[];
2012
+ seniority?: ("entry_level" | "associate" | "mid_level" | "senior" | "lead" | "principal" | "director" | "executive")[];
1887
2013
  /** @description Range filter on the job's `publishedAt` timestamp. */
1888
2014
  publishedAt?: {
1889
2015
  /**
@@ -1917,9 +2043,9 @@ interface components {
1917
2043
  };
1918
2044
  PublicTaxonomyResolution: {
1919
2045
  /** @enum {string} */
1920
- object: 'taxonomy_resolution';
2046
+ object: "taxonomy_resolution";
1921
2047
  /** @enum {string} */
1922
- type: 'category' | 'skill' | 'place' | 'market';
2048
+ type: "category" | "skill" | "place" | "market";
1923
2049
  /** @description Immutable English source slug — the semantic-search key. */
1924
2050
  sourceSlug: string;
1925
2051
  /** @description Board-language URL slug (the `<link rel=canonical>` target). */
@@ -1928,7 +2054,7 @@ interface components {
1928
2054
  displayName: string;
1929
2055
  /** @description The canonical slug to emit a 308 redirect to when the inbound slug differs; `null` otherwise. */
1930
2056
  redirectTo: string | null;
1931
- geo: components['schemas']['TaxonomyGeo'];
2057
+ geo: components["schemas"]["TaxonomyGeo"];
1932
2058
  };
1933
2059
  PublicVerifyBoardPasswordBody: {
1934
2060
  /** @description The board password. */
@@ -1943,7 +2069,7 @@ interface components {
1943
2069
  };
1944
2070
  RedirectResolution: {
1945
2071
  /** @enum {string} */
1946
- object: 'redirect_resolution';
2072
+ object: "redirect_resolution";
1947
2073
  path: string;
1948
2074
  /** @description The redirect target (board-relative), or `null` when no redirect matches. The consumer 308s to `target`, or 404s when `null`. */
1949
2075
  target: string | null;
@@ -1983,7 +2109,7 @@ interface components {
1983
2109
  * @description Hint indicating whether `token` is an `access_token` or `refresh_token`. Optional.
1984
2110
  * @enum {string}
1985
2111
  */
1986
- token_type_hint?: 'access_token' | 'refresh_token';
2112
+ token_type_hint?: "access_token" | "refresh_token";
1987
2113
  /** @description OAuth client identifier. May be supplied here or via HTTP Basic authentication. */
1988
2114
  client_id?: string;
1989
2115
  /** @description OAuth client secret. May be supplied here or via HTTP Basic authentication. */
@@ -1991,7 +2117,7 @@ interface components {
1991
2117
  };
1992
2118
  SalaryCompanyIndexItem: {
1993
2119
  /** @enum {string} */
1994
- object: 'salary_company';
2120
+ object: "salary_company";
1995
2121
  companySlug: string;
1996
2122
  companyName: string;
1997
2123
  logoPath: string | null;
@@ -2002,7 +2128,7 @@ interface components {
2002
2128
  };
2003
2129
  SalaryLocationIndexItem: {
2004
2130
  /** @enum {string} */
2005
- object: 'salary_location';
2131
+ object: "salary_location";
2006
2132
  placeSlug: string;
2007
2133
  placeName: string;
2008
2134
  /** @description Slug of the parent place; `null` for a top-level node. */
@@ -2013,7 +2139,7 @@ interface components {
2013
2139
  };
2014
2140
  SalarySkillIndexItem: {
2015
2141
  /** @enum {string} */
2016
- object: 'salary_skill';
2142
+ object: "salary_skill";
2017
2143
  slug: string;
2018
2144
  name: string;
2019
2145
  avgSalaryMin: number;
@@ -2025,7 +2151,7 @@ interface components {
2025
2151
  };
2026
2152
  SalaryTitleIndexItem: {
2027
2153
  /** @enum {string} */
2028
- object: 'salary_title';
2154
+ object: "salary_title";
2029
2155
  slug: string;
2030
2156
  name: string;
2031
2157
  avgSalaryMin: number;
@@ -2037,7 +2163,7 @@ interface components {
2037
2163
  };
2038
2164
  SalesLedPlan: {
2039
2165
  /** @enum {string} */
2040
- object: 'sales_led_plan';
2166
+ object: "sales_led_plan";
2041
2167
  id: string;
2042
2168
  name: string;
2043
2169
  description: string;
@@ -2056,17 +2182,17 @@ interface components {
2056
2182
  /** @description Saved-job row ID. */
2057
2183
  id: string;
2058
2184
  /** @enum {string} */
2059
- object: 'saved_job';
2185
+ object: "saved_job";
2060
2186
  /** @description The saved job — also the DELETE path key. */
2061
2187
  jobId: string;
2062
2188
  /** Format: date-time */
2063
2189
  savedAt: string;
2064
- job: components['schemas']['PublicJob'];
2190
+ job: components["schemas"]["PublicJob"];
2065
2191
  };
2066
2192
  SearchBlogPostsBody: {
2067
2193
  query?: string;
2068
2194
  /** @enum {string} */
2069
- status?: 'draft' | 'scheduled' | 'published';
2195
+ status?: "draft" | "scheduled" | "published";
2070
2196
  cursor?: string | null;
2071
2197
  limit?: number;
2072
2198
  };
@@ -2087,15 +2213,15 @@ interface components {
2087
2213
  /** @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. */
2088
2214
  filters?: {
2089
2215
  /** @description Only return jobs in any of the given statuses. Up to 10 values. */
2090
- status?: ('draft' | 'published' | 'expired' | 'archived')[];
2216
+ status?: ("draft" | "published" | "expired" | "archived")[];
2091
2217
  /** @description Only return jobs at any of the given company IDs. Up to 10 values. */
2092
2218
  companyId?: string[];
2093
2219
  /** @description Only return jobs with any of the given remote-work options. Up to 10 values. */
2094
- remoteOption?: ('on_site' | 'hybrid' | 'remote')[];
2220
+ remoteOption?: ("on_site" | "hybrid" | "remote")[];
2095
2221
  /** @description Only return jobs with any of the given employment types. Up to 10 values. */
2096
- employmentType?: ('full_time' | 'part_time' | 'contract' | 'internship' | 'temporary' | 'volunteer' | 'other')[];
2222
+ employmentType?: ("full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other")[];
2097
2223
  /** @description Only return jobs at any of the given seniority levels. Up to 10 values. */
2098
- seniority?: ('entry_level' | 'associate' | 'mid_level' | 'senior' | 'lead' | 'principal' | 'director' | 'executive')[];
2224
+ seniority?: ("entry_level" | "associate" | "mid_level" | "senior" | "lead" | "principal" | "director" | "executive")[];
2099
2225
  /** @description Range filter on the job's `publishedAt` timestamp. */
2100
2226
  publishedAt?: {
2101
2227
  /**
@@ -2122,25 +2248,25 @@ interface components {
2122
2248
  /** @description Whether AdSense placements are rendered on the public board. */
2123
2249
  adsenseEnabled?: boolean;
2124
2250
  /** @description AdSense publisher ID in `ca-pub-XXXXXXXXXXXXXXXX` format. Pass an empty string or `null` to clear. */
2125
- adsenseClientId?: string | '' | unknown | unknown;
2251
+ adsenseClientId?: string | "" | unknown | unknown;
2126
2252
  /** @description Map of placement key to slot configuration. Placement keys are lowercase alphanumeric with `-`, `_`, `.`, or `:`. */
2127
2253
  adsenseSlots?: {
2128
- [key: string]: components['schemas']['SettingsAdsenseSlot'];
2254
+ [key: string]: components["schemas"]["SettingsAdsenseSlot"];
2129
2255
  };
2130
2256
  /** @description Contents to serve from `/ads.txt`. Up to 2,000 characters. Pass an empty string or `null` to clear. */
2131
- adsTxt?: string | '' | unknown | unknown;
2257
+ adsTxt?: string | "" | unknown | unknown;
2132
2258
  };
2133
2259
  SettingsAdsenseSlot: {
2134
2260
  /** @description Whether this placement is rendered. */
2135
2261
  enabled: boolean;
2136
2262
  /** @description Ten-digit AdSense slot ID. Pass an empty string or `null` to clear. */
2137
- slotId: string | '' | unknown | unknown;
2263
+ slotId: string | "" | unknown | unknown;
2138
2264
  /** @description AdSense layout type for the placement. */
2139
- layout?: ('auto' | 'in-article' | 'in-feed' | 'fluid') | '' | unknown | unknown;
2265
+ layout?: ("auto" | "in-article" | "in-feed" | "fluid") | "" | unknown | unknown;
2140
2266
  /** @description AdSense ad format. */
2141
- format?: ('auto' | 'horizontal' | 'vertical' | 'rectangle' | 'responsive') | '' | unknown | unknown;
2267
+ format?: ("auto" | "horizontal" | "vertical" | "rectangle" | "responsive") | "" | unknown | unknown;
2142
2268
  /** @description Visual style override for the placement. */
2143
- style?: ('default' | 'light' | 'dark' | 'contrast') | '' | unknown | unknown;
2269
+ style?: ("default" | "light" | "dark" | "contrast") | "" | unknown | unknown;
2144
2270
  /** @description How often the placement is shown (e.g. once every N items). */
2145
2271
  frequency?: number | unknown | unknown;
2146
2272
  };
@@ -2174,7 +2300,7 @@ interface components {
2174
2300
  };
2175
2301
  SkillLocationSalary: {
2176
2302
  /** @enum {string} */
2177
- object: 'skill_location_salary';
2303
+ object: "skill_location_salary";
2178
2304
  skillSourceSlug: string;
2179
2305
  skillCanonicalSlug: string;
2180
2306
  locationSourceSlug: string;
@@ -2241,16 +2367,16 @@ interface components {
2241
2367
  };
2242
2368
  SkillLocationsIndex: {
2243
2369
  /** @enum {string} */
2244
- object: 'skill_locations_index';
2370
+ object: "skill_locations_index";
2245
2371
  sourceSlug: string;
2246
2372
  canonicalSlug: string;
2247
2373
  skillName: string;
2248
2374
  currency: string;
2249
- locations: components['schemas']['SalaryLocationIndexItem'][];
2375
+ locations: components["schemas"]["SalaryLocationIndexItem"][];
2250
2376
  };
2251
2377
  SkillSalaryDetail: {
2252
2378
  /** @enum {string} */
2253
- object: 'skill_salary_detail';
2379
+ object: "skill_salary_detail";
2254
2380
  /** @description Immutable English source slug — the salary-stats key. */
2255
2381
  sourceSlug: string;
2256
2382
  /** @description Board-language canonical URL slug — the starter 308 target. */
@@ -2313,7 +2439,7 @@ interface components {
2313
2439
  };
2314
2440
  TalentDirectoryEntry: {
2315
2441
  /** @enum {string} */
2316
- object: 'talent_directory_entry';
2442
+ object: "talent_directory_entry";
2317
2443
  handle: string | null;
2318
2444
  displayName: string | null;
2319
2445
  headline: string | null;
@@ -2336,7 +2462,7 @@ interface components {
2336
2462
  };
2337
2463
  TalentProfile: {
2338
2464
  /** @enum {string} */
2339
- object: 'talent_profile';
2465
+ object: "talent_profile";
2340
2466
  handle: string | null;
2341
2467
  displayName: string | null;
2342
2468
  headline: string | null;
@@ -2395,7 +2521,7 @@ interface components {
2395
2521
  } | null;
2396
2522
  TitleLocationSalary: {
2397
2523
  /** @enum {string} */
2398
- object: 'title_location_salary';
2524
+ object: "title_location_salary";
2399
2525
  categorySourceSlug: string;
2400
2526
  categoryCanonicalSlug: string;
2401
2527
  locationSourceSlug: string;
@@ -2462,16 +2588,16 @@ interface components {
2462
2588
  };
2463
2589
  TitleLocationsIndex: {
2464
2590
  /** @enum {string} */
2465
- object: 'title_locations_index';
2591
+ object: "title_locations_index";
2466
2592
  sourceSlug: string;
2467
2593
  canonicalSlug: string;
2468
2594
  categoryName: string;
2469
2595
  currency: string;
2470
- locations: components['schemas']['SalaryLocationIndexItem'][];
2596
+ locations: components["schemas"]["SalaryLocationIndexItem"][];
2471
2597
  };
2472
2598
  TitleSalaryDetail: {
2473
2599
  /** @enum {string} */
2474
- object: 'title_salary_detail';
2600
+ object: "title_salary_detail";
2475
2601
  /** @description Immutable English source slug — the salary-stats key. */
2476
2602
  sourceSlug: string;
2477
2603
  /** @description Board-language canonical URL slug — the starter 308 target. */
@@ -2543,7 +2669,7 @@ interface components {
2543
2669
  * @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.
2544
2670
  * @enum {string}
2545
2671
  */
2546
- grant_type: 'authorization_code' | 'refresh_token';
2672
+ grant_type: "authorization_code" | "refresh_token";
2547
2673
  /** @description Authorization code returned from the authorization endpoint. Required when `grant_type` is `authorization_code`. */
2548
2674
  code?: string;
2549
2675
  /** @description Redirect URI used in the original authorization request. Must match exactly. Required when `grant_type` is `authorization_code`. */
@@ -2566,7 +2692,7 @@ interface components {
2566
2692
  * @description Always `Bearer`.
2567
2693
  * @enum {string}
2568
2694
  */
2569
- token_type: 'Bearer';
2695
+ token_type: "Bearer";
2570
2696
  /** @description Lifetime of the access token, in seconds. */
2571
2697
  expires_in: number;
2572
2698
  /** @description Newly issued refresh token. Single-use; reusing it revokes the entire token chain. */
@@ -2574,6 +2700,12 @@ interface components {
2574
2700
  /** @description Space-separated list of scopes granted on the issued token. */
2575
2701
  scope: string;
2576
2702
  };
2703
+ UnsubscribeBody: {
2704
+ boardUserId: string;
2705
+ /** @enum {string} */
2706
+ channel: "messageEmails" | "applicationEmails";
2707
+ token: string;
2708
+ };
2577
2709
  UpdateAuthorBody: {
2578
2710
  /** @description URL-friendly slug for the author. Auto-generated from `name` when omitted. */
2579
2711
  slug?: string;
@@ -2588,7 +2720,7 @@ interface components {
2588
2720
  * @description Author visibility status. One of `active` or `inactive`.
2589
2721
  * @enum {string}
2590
2722
  */
2591
- status?: 'active' | 'inactive';
2723
+ status?: "active" | "inactive";
2592
2724
  /** @description Storage ID of an uploaded avatar image (from `POST /v1/media/upload`). Pass `null` to clear an existing avatar. */
2593
2725
  avatarStorageId?: string | null;
2594
2726
  /** @description The author's personal website URL. Normalized to a canonical URL when stored. */
@@ -2626,7 +2758,21 @@ interface components {
2626
2758
  publishedAt?: string;
2627
2759
  title?: string;
2628
2760
  /** @enum {string} */
2629
- status?: 'draft' | 'scheduled' | 'published';
2761
+ status?: "draft" | "scheduled" | "published";
2762
+ };
2763
+ UpdateCandidateProfileBody: {
2764
+ displayName?: string;
2765
+ bio?: string;
2766
+ handle?: string;
2767
+ headline?: string;
2768
+ location?: string;
2769
+ /** @enum {string} */
2770
+ profileVisibility?: "hidden" | "logged_in_only" | "public";
2771
+ /** @enum {string} */
2772
+ jobSearchStatus?: "actively_looking" | "open_to_offers" | "not_looking";
2773
+ /** @enum {string} */
2774
+ jobSearchStatusVisibleTo?: "everyone" | "employers_only";
2775
+ openToRelocate?: boolean;
2630
2776
  };
2631
2777
  UpdateCompanyBody: {
2632
2778
  /** @description Public company website URL. Normalized to a canonical apex domain when stored. */
@@ -2646,6 +2792,31 @@ interface components {
2646
2792
  /** @description URL-friendly slug for the company. */
2647
2793
  slug?: string;
2648
2794
  };
2795
+ UpdateEducationBody: {
2796
+ institutionName?: string;
2797
+ institutionUrl?: string;
2798
+ degree?: string;
2799
+ fieldOfStudy?: string;
2800
+ grade?: string;
2801
+ activitiesAndSocieties?: string;
2802
+ startDate?: string;
2803
+ endDate?: string;
2804
+ description?: string;
2805
+ sortOrder?: number;
2806
+ };
2807
+ UpdateExperienceBody: {
2808
+ title?: string;
2809
+ companyName?: string;
2810
+ startDate?: string;
2811
+ companyUrl?: string;
2812
+ location?: string;
2813
+ employmentType?: string;
2814
+ locationType?: string;
2815
+ foundVia?: string;
2816
+ endDate?: string;
2817
+ description?: string;
2818
+ sortOrder?: number;
2819
+ };
2649
2820
  UpdateJobBody: {
2650
2821
  /** @description Identifier of the company the job belongs to. */
2651
2822
  companyId?: string;
@@ -2657,22 +2828,22 @@ interface components {
2657
2828
  * @description Employment type of the role.
2658
2829
  * @enum {string}
2659
2830
  */
2660
- employmentType?: 'full_time' | 'part_time' | 'contract' | 'internship' | 'temporary' | 'volunteer' | 'other';
2831
+ employmentType?: "full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other";
2661
2832
  /**
2662
2833
  * @description Whether the role is on-site, hybrid, or fully remote.
2663
2834
  * @enum {string}
2664
2835
  */
2665
- remoteOption?: 'on_site' | 'hybrid' | 'remote';
2836
+ remoteOption?: "on_site" | "hybrid" | "remote";
2666
2837
  /** @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. */
2667
2838
  remotePermits?: {
2668
2839
  /** @enum {string} */
2669
- type: 'worldwide' | 'world_region' | 'continent' | 'region' | 'subregion' | 'subdivision' | 'country' | 'custom';
2840
+ type: "worldwide" | "world_region" | "continent" | "region" | "subregion" | "subdivision" | "country" | "custom";
2670
2841
  value: string;
2671
2842
  }[];
2672
2843
  /** @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. */
2673
2844
  remoteTimezones?: {
2674
2845
  /** @enum {string} */
2675
- type: 'all' | 'world_region' | 'continent' | 'region' | 'subregion' | 'country' | 'timezone';
2846
+ type: "all" | "world_region" | "continent" | "region" | "subregion" | "country" | "timezone";
2676
2847
  value: string;
2677
2848
  plusMinus?: number;
2678
2849
  }[];
@@ -2680,12 +2851,12 @@ interface components {
2680
2851
  * @description Whether the employer sponsors visas for remote candidates. One of `yes`, `no`, or `unknown`.
2681
2852
  * @enum {string}
2682
2853
  */
2683
- remoteSponsorship?: 'yes' | 'no' | 'unknown';
2854
+ remoteSponsorship?: "yes" | "no" | "unknown";
2684
2855
  /**
2685
2856
  * @description Seniority level of the role.
2686
2857
  * @enum {string}
2687
2858
  */
2688
- seniority?: 'entry_level' | 'associate' | 'mid_level' | 'senior' | 'lead' | 'principal' | 'director' | 'executive';
2859
+ seniority?: "entry_level" | "associate" | "mid_level" | "senior" | "lead" | "principal" | "director" | "executive";
2689
2860
  /** @description Where candidates apply. Accepts an HTTPS URL, a `mailto:` URI, or a bare email address (which is normalized to `mailto:` form). */
2690
2861
  applicationUrl?: string;
2691
2862
  /** @description Minimum salary, in `salaryCurrency` units. */
@@ -2698,7 +2869,7 @@ interface components {
2698
2869
  * @description Period the `salaryMin` and `salaryMax` figures are quoted against.
2699
2870
  * @enum {string}
2700
2871
  */
2701
- salaryTimeframe?: 'per_year' | 'per_month' | 'per_week' | 'per_day' | 'per_hour';
2872
+ salaryTimeframe?: "per_year" | "per_month" | "per_week" | "per_day" | "per_hour";
2702
2873
  /** @description Whether the job appears in featured slots on the public board. */
2703
2874
  isFeatured?: boolean;
2704
2875
  /** @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. */
@@ -2706,7 +2877,7 @@ interface components {
2706
2877
  /** @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. */
2707
2878
  publishedAt?: number;
2708
2879
  /** @description Required education credentials. Each value is one of `high_school`, `associate_degree`, `bachelor_degree`, `professional_certificate`, `postgraduate_degree`, or `no_requirements`. */
2709
- educationRequirements?: ('high_school' | 'associate_degree' | 'bachelor_degree' | 'professional_certificate' | 'postgraduate_degree' | 'no_requirements')[];
2880
+ educationRequirements?: ("high_school" | "associate_degree" | "bachelor_degree" | "professional_certificate" | "postgraduate_degree" | "no_requirements")[];
2710
2881
  /** @description Minimum required experience, expressed in months. */
2711
2882
  experienceMonths?: number;
2712
2883
  /** @description If `true`, equivalent experience may substitute for the listed education requirements. */
@@ -2715,11 +2886,11 @@ interface components {
2715
2886
  * @description Period denominator for `inOfficeFrequency`.
2716
2887
  * @enum {string}
2717
2888
  */
2718
- inOfficePeriod?: 'per_week' | 'per_month' | 'per_year';
2889
+ inOfficePeriod?: "per_week" | "per_month" | "per_year";
2719
2890
  /** @description How often the candidate must be in-office over `inOfficePeriod`. */
2720
2891
  inOfficeFrequency?: number;
2721
2892
  /** @description Physical office locations associated with the job. Each entry is forward-geocoded server-side; a country mismatch returns `400 jobs_unresolvable_location`. */
2722
- officeLocations?: components['schemas']['JobOfficeLocationInput'][];
2893
+ officeLocations?: components["schemas"]["JobOfficeLocationInput"][];
2723
2894
  /** @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. */
2724
2895
  externalId?: string;
2725
2896
  /** @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. */
@@ -2729,6 +2900,20 @@ interface components {
2729
2900
  /** @description The job title. */
2730
2901
  title?: string;
2731
2902
  };
2903
+ UpdateLanguagesBody: {
2904
+ languages: {
2905
+ name: string;
2906
+ proficiency: string;
2907
+ }[];
2908
+ };
2909
+ UpdateNotificationPreferenceBody: {
2910
+ /** @enum {string} */
2911
+ channel: "messageEmails" | "applicationEmails";
2912
+ subscribed: boolean;
2913
+ };
2914
+ UpdateSkillsBody: {
2915
+ skills: string[];
2916
+ };
2732
2917
  UpdateTagBody: {
2733
2918
  /** @description URL-friendly slug for the tag. Auto-generated from `name` when omitted. */
2734
2919
  slug?: string;
@@ -2738,7 +2923,7 @@ interface components {
2738
2923
  * @description Tag visibility. One of `public` or `internal`.
2739
2924
  * @enum {string}
2740
2925
  */
2741
- visibility?: 'public' | 'internal';
2926
+ visibility?: "public" | "internal";
2742
2927
  /** @description SEO meta title for the tag page. */
2743
2928
  metaTitle?: string;
2744
2929
  /** @description SEO meta description for the tag page. */
@@ -2753,7 +2938,7 @@ interface components {
2753
2938
  * @description String representing the object's type. Objects of the same type share the same value.
2754
2939
  * @enum {string}
2755
2940
  */
2756
- object: 'usage';
2941
+ object: "usage";
2757
2942
  /** @description Number of jobs currently in `published` status. */
2758
2943
  activeJobs: number;
2759
2944
  /** @description Plan-enforced cap on the number of published jobs. */
@@ -2986,7 +3171,7 @@ declare function isConflict(e: unknown): e is BoardApiError;
2986
3171
  * constant because the package is platform-neutral and cannot read
2987
3172
  * package.json at runtime.
2988
3173
  */
2989
- declare const SDK_VERSION = "1.19.0";
3174
+ declare const SDK_VERSION = "1.20.0";
2990
3175
 
2991
3176
  type BoardUser = Schemas['BoardUser'];
2992
3177
  type BoardAuthSession = Schemas['BoardAuthSession'];
@@ -2997,6 +3182,14 @@ type LogoutBody = Schemas['BoardAuthLogoutBody'];
2997
3182
  type VerifyEmailBody = Schemas['BoardAuthVerifyEmailBody'];
2998
3183
  type ForgotPasswordBody = Schemas['BoardAuthForgotPasswordBody'];
2999
3184
  type ResetPasswordBody = Schemas['BoardAuthResetPasswordBody'];
3185
+ type RequestMagicLinkBody = Schemas['BoardAuthRequestMagicLinkBody'];
3186
+ type ConsumeMagicLinkBody = Schemas['BoardAuthConsumeMagicLinkBody'];
3187
+ type OAuthProvider = 'google' | 'linkedin';
3188
+ type OAuthAuthorizationQuery = {
3189
+ returnTo?: string;
3190
+ };
3191
+ type OAuthAuthorizationUrl = Schemas['BoardAuthOAuthAuthorizationUrl'];
3192
+ type OAuthExchangeBody = Schemas['BoardAuthOAuthExchangeBody'];
3000
3193
 
3001
3194
  type PublicBoard = Schemas['PublicBoardContext'];
3002
3195
  type PublicBoardFeatures = PublicBoard['features'];
@@ -3171,6 +3364,27 @@ type SavedJobsListQuery = {
3171
3364
  limit?: number;
3172
3365
  };
3173
3366
  type SaveJobBody = Schemas['SaveJobBody'];
3367
+ /** The authenticated user's lean candidate profile singleton. */
3368
+ type CandidateProfile = Schemas['CandidateProfile'];
3369
+ /** Optional-field merge-patch body for `board.me.profile.update`. */
3370
+ type UpdateCandidateProfileBody = Schemas['UpdateCandidateProfileBody'];
3371
+ /** The result of `board.me.profile.handleAvailable(handle)`. */
3372
+ type HandleAvailability = Schemas['HandleAvailability'];
3373
+ type CandidateExperience = Schemas['CandidateExperience'];
3374
+ type CreateExperienceBody = Schemas['CreateExperienceBody'];
3375
+ type UpdateExperienceBody = Schemas['UpdateExperienceBody'];
3376
+ type CandidateEducation = Schemas['CandidateEducation'];
3377
+ type CreateEducationBody = Schemas['CreateEducationBody'];
3378
+ type UpdateEducationBody = Schemas['UpdateEducationBody'];
3379
+ type CandidateSkill = Schemas['CandidateSkill'];
3380
+ type UpdateSkillsBody = Schemas['UpdateSkillsBody'];
3381
+ type CandidateLanguage = Schemas['CandidateLanguage'];
3382
+ type UpdateLanguagesBody = Schemas['UpdateLanguagesBody'];
3383
+ /** The result of `board.me.profile.uploadAvatar(file)`. */
3384
+ type CandidateAvatar = Schemas['CandidateAvatar'];
3385
+ type NotificationPreference = Schemas['NotificationPreference'];
3386
+ type UpdateNotificationPreferenceBody = Schemas['UpdateNotificationPreferenceBody'];
3387
+ type UnsubscribeBody = Schemas['UnsubscribeBody'];
3174
3388
 
3175
3389
  type JobAlertFrequency = 'daily' | 'weekly';
3176
3390
  type JobAlertRemoteOption = 'on_site' | 'hybrid' | 'remote';
@@ -3876,6 +4090,26 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
3876
4090
  verifyEmail(body: VerifyEmailBody, options?: FetchOptions): Promise<void>;
3877
4091
  forgotPassword(body: ForgotPasswordBody, options?: FetchOptions): Promise<void>;
3878
4092
  resetPassword(body: ResetPasswordBody, options?: FetchOptions): Promise<void>;
4093
+ requestMagicLink(body: RequestMagicLinkBody, options?: FetchOptions): Promise<void>;
4094
+ consumeMagicLink(body: ConsumeMagicLinkBody, options?: FetchOptions): Promise<{
4095
+ object: "board_auth_session";
4096
+ accessToken: string;
4097
+ refreshToken: string;
4098
+ expiresAt: number;
4099
+ boardUser: components["schemas"]["BoardUser"];
4100
+ }>;
4101
+ getOAuthAuthorizationUrl(provider: OAuthProvider, query?: OAuthAuthorizationQuery, options?: FetchOptions): Promise<{
4102
+ object: "oauth_authorization_url";
4103
+ provider: "google" | "linkedin";
4104
+ authorizeUrl: string;
4105
+ }>;
4106
+ exchangeOAuth(body: OAuthExchangeBody, options?: FetchOptions): Promise<{
4107
+ object: "board_auth_session";
4108
+ accessToken: string;
4109
+ refreshToken: string;
4110
+ expiresAt: number;
4111
+ boardUser: components["schemas"]["BoardUser"];
4112
+ }>;
3879
4113
  };
3880
4114
  me: {
3881
4115
  retrieve(query?: Record<string, never>, options?: FetchOptions): Promise<{
@@ -3886,6 +4120,173 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
3886
4120
  displayName: string | null;
3887
4121
  emailVerified: boolean;
3888
4122
  }>;
4123
+ delete(options?: FetchOptions): Promise<void>;
4124
+ profile: {
4125
+ retrieve(query?: Record<string, never>, options?: FetchOptions): Promise<{
4126
+ id: string;
4127
+ object: "candidate_profile";
4128
+ displayName: string | null;
4129
+ bio: string | null;
4130
+ avatarUrl: string | null;
4131
+ handle: string | null;
4132
+ headline: string | null;
4133
+ location: string | null;
4134
+ profileVisibility: "hidden" | "logged_in_only" | "public";
4135
+ jobSearchStatus: "actively_looking" | "open_to_offers" | "not_looking";
4136
+ jobSearchStatusVisibleTo: "everyone" | "employers_only";
4137
+ openToRelocate: boolean;
4138
+ }>;
4139
+ update(body: UpdateCandidateProfileBody, query?: Record<string, never>, options?: FetchOptions): Promise<{
4140
+ id: string;
4141
+ object: "candidate_profile";
4142
+ displayName: string | null;
4143
+ bio: string | null;
4144
+ avatarUrl: string | null;
4145
+ handle: string | null;
4146
+ headline: string | null;
4147
+ location: string | null;
4148
+ profileVisibility: "hidden" | "logged_in_only" | "public";
4149
+ jobSearchStatus: "actively_looking" | "open_to_offers" | "not_looking";
4150
+ jobSearchStatusVisibleTo: "everyone" | "employers_only";
4151
+ openToRelocate: boolean;
4152
+ }>;
4153
+ handleAvailable(handle: string, options?: FetchOptions): Promise<{
4154
+ object: "handle_availability";
4155
+ handle: string;
4156
+ available: boolean;
4157
+ }>;
4158
+ listExperience(options?: FetchOptions): Promise<ListEnvelope<{
4159
+ id: string;
4160
+ object: "candidate_experience";
4161
+ title: string;
4162
+ companyName: string;
4163
+ companyUrl: string | null;
4164
+ location: string | null;
4165
+ employmentType: string | null;
4166
+ locationType: string | null;
4167
+ foundVia: string | null;
4168
+ startDate: string;
4169
+ endDate: string | null;
4170
+ description: string | null;
4171
+ sortOrder: number;
4172
+ experienceSkills: string[];
4173
+ }>>;
4174
+ createExperience(body: CreateExperienceBody, options?: FetchOptions): Promise<{
4175
+ id: string;
4176
+ object: "candidate_experience";
4177
+ title: string;
4178
+ companyName: string;
4179
+ companyUrl: string | null;
4180
+ location: string | null;
4181
+ employmentType: string | null;
4182
+ locationType: string | null;
4183
+ foundVia: string | null;
4184
+ startDate: string;
4185
+ endDate: string | null;
4186
+ description: string | null;
4187
+ sortOrder: number;
4188
+ experienceSkills: string[];
4189
+ }>;
4190
+ updateExperience(id: string, body: UpdateExperienceBody, options?: FetchOptions): Promise<{
4191
+ id: string;
4192
+ object: "candidate_experience";
4193
+ title: string;
4194
+ companyName: string;
4195
+ companyUrl: string | null;
4196
+ location: string | null;
4197
+ employmentType: string | null;
4198
+ locationType: string | null;
4199
+ foundVia: string | null;
4200
+ startDate: string;
4201
+ endDate: string | null;
4202
+ description: string | null;
4203
+ sortOrder: number;
4204
+ experienceSkills: string[];
4205
+ }>;
4206
+ deleteExperience(id: string, options?: FetchOptions): Promise<void>;
4207
+ listEducation(options?: FetchOptions): Promise<ListEnvelope<{
4208
+ id: string;
4209
+ object: "candidate_education";
4210
+ institutionName: string;
4211
+ institutionUrl: string | null;
4212
+ degree: string | null;
4213
+ fieldOfStudy: string | null;
4214
+ grade: string | null;
4215
+ activitiesAndSocieties: string | null;
4216
+ startDate: string | null;
4217
+ endDate: string | null;
4218
+ description: string | null;
4219
+ sortOrder: number;
4220
+ }>>;
4221
+ createEducation(body: CreateEducationBody, options?: FetchOptions): Promise<{
4222
+ id: string;
4223
+ object: "candidate_education";
4224
+ institutionName: string;
4225
+ institutionUrl: string | null;
4226
+ degree: string | null;
4227
+ fieldOfStudy: string | null;
4228
+ grade: string | null;
4229
+ activitiesAndSocieties: string | null;
4230
+ startDate: string | null;
4231
+ endDate: string | null;
4232
+ description: string | null;
4233
+ sortOrder: number;
4234
+ }>;
4235
+ updateEducation(id: string, body: UpdateEducationBody, options?: FetchOptions): Promise<{
4236
+ id: string;
4237
+ object: "candidate_education";
4238
+ institutionName: string;
4239
+ institutionUrl: string | null;
4240
+ degree: string | null;
4241
+ fieldOfStudy: string | null;
4242
+ grade: string | null;
4243
+ activitiesAndSocieties: string | null;
4244
+ startDate: string | null;
4245
+ endDate: string | null;
4246
+ description: string | null;
4247
+ sortOrder: number;
4248
+ }>;
4249
+ deleteEducation(id: string, options?: FetchOptions): Promise<void>;
4250
+ listSkills(options?: FetchOptions): Promise<ListEnvelope<{
4251
+ object: "candidate_skill";
4252
+ name: string;
4253
+ jobSkillId: string | null;
4254
+ }>>;
4255
+ updateSkills(body: UpdateSkillsBody, options?: FetchOptions): Promise<ListEnvelope<{
4256
+ object: "candidate_skill";
4257
+ name: string;
4258
+ jobSkillId: string | null;
4259
+ }>>;
4260
+ listLanguages(options?: FetchOptions): Promise<ListEnvelope<{
4261
+ object: "candidate_language";
4262
+ name: string;
4263
+ proficiency: string;
4264
+ }>>;
4265
+ updateLanguages(body: UpdateLanguagesBody, options?: FetchOptions): Promise<ListEnvelope<{
4266
+ object: "candidate_language";
4267
+ name: string;
4268
+ proficiency: string;
4269
+ }>>;
4270
+ uploadAvatar(file: Blob, options?: FetchOptions): Promise<{
4271
+ object: "candidate_avatar";
4272
+ avatarUrl: string | null;
4273
+ }>;
4274
+ };
4275
+ notificationPreferences: {
4276
+ retrieve(options?: FetchOptions): Promise<ListEnvelope<{
4277
+ object: "notification_preference";
4278
+ channel: "messageEmails" | "applicationEmails";
4279
+ subscribed: boolean;
4280
+ updatedAt: number | null;
4281
+ }>>;
4282
+ update(body: UpdateNotificationPreferenceBody, options?: FetchOptions): Promise<ListEnvelope<{
4283
+ object: "notification_preference";
4284
+ channel: "messageEmails" | "applicationEmails";
4285
+ subscribed: boolean;
4286
+ updatedAt: number | null;
4287
+ }>>;
4288
+ unsubscribeWithToken(body: UnsubscribeBody, options?: FetchOptions): Promise<void>;
4289
+ };
3889
4290
  savedJobs: {
3890
4291
  list(query?: SavedJobsListQuery, options?: FetchOptions): Promise<ListEnvelope<{
3891
4292
  id: string;
@@ -4602,4 +5003,4 @@ declare function createBoardClient(options: CreateBoardClientOptions): {
4602
5003
  };
4603
5004
  type BoardSdk = ReturnType<typeof createBoardClient>;
4604
5005
 
4605
- 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 JobSort, 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 };
5006
+ 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 CandidateAvatar, type CandidateEducation, type CandidateExperience, type CandidateLanguage, type CandidateProfile, type CandidateSkill, 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 CreateEducationBody, type CreateExperienceBody, type CreateJobPostingInput, type CustomStorage, type EducationRequirement, type EmbedJobsQuery, type EmploymentType, type FetchOptions, type ForgotPasswordBody, type HandleAvailability, 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 NotificationPreference, 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 UnsubscribeBody, type UpdateCandidateProfileBody, type UpdateEducationBody, type UpdateExperienceBody, type UpdateLanguagesBody, type UpdateNotificationPreferenceBody, type UpdateSkillsBody, type VerifyEmailBody, createBoardClient, isBoardApiError, isBoardPasswordRequired, isConflict, isForbidden, isNotFound, isRateLimited, isUnauthorized, isValidationError };