@cavuno/board 1.34.0 → 1.35.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +7 -8
  2. package/dist/bin.mjs +25 -10
  3. package/dist/{board-Id19Yg8-.d.ts → board-Z7hjKDp8.d.ts} +1 -1
  4. package/dist/{board-DgDC0T4g.d.mts → board-t_WltBBa.d.mts} +1 -1
  5. package/dist/filters.d.mts +2 -2
  6. package/dist/filters.d.ts +2 -2
  7. package/dist/filters.js +3 -6
  8. package/dist/filters.mjs +3 -6
  9. package/dist/format.d.mts +4 -4
  10. package/dist/format.d.ts +4 -4
  11. package/dist/format.js +3 -6
  12. package/dist/format.mjs +3 -6
  13. package/dist/index.d.mts +52 -43
  14. package/dist/index.d.ts +52 -43
  15. package/dist/index.js +27 -19
  16. package/dist/index.mjs +27 -19
  17. package/dist/{jobs-IIJtDgzX.d.mts → jobs-Dq2a9oPj.d.mts} +742 -61
  18. package/dist/{jobs-IIJtDgzX.d.ts → jobs-Dq2a9oPj.d.ts} +742 -61
  19. package/dist/{salaries-CL_00fNX.d.ts → salaries-CTin-18R.d.ts} +4 -4
  20. package/dist/{salaries-BfEEEOHj.d.mts → salaries-CWg82dOz.d.mts} +4 -4
  21. package/dist/seo.d.mts +4 -4
  22. package/dist/seo.d.ts +4 -4
  23. package/dist/seo.js +3 -6
  24. package/dist/seo.mjs +3 -6
  25. package/dist/server.d.mts +3 -3
  26. package/dist/server.d.ts +3 -3
  27. package/dist/sitemap.d.mts +3 -3
  28. package/dist/sitemap.d.ts +3 -3
  29. package/dist/{ui-copy-rlfoH9P3.d.mts → ui-copy-CKfFTtLk.d.mts} +0 -1
  30. package/dist/{ui-copy-rlfoH9P3.d.ts → ui-copy-CKfFTtLk.d.ts} +0 -1
  31. package/package.json +1 -1
  32. package/skills/cavuno-board-auth/SKILL.md +0 -1
  33. package/skills/cavuno-board-client/SKILL.md +1 -4
  34. package/skills/cavuno-board-filters/SKILL.md +43 -3
  35. package/skills/cavuno-board-job-alerts/SKILL.md +7 -7
  36. package/skills/cavuno-board-job-posting/SKILL.md +8 -22
  37. package/skills/cavuno-board-jobs/SKILL.md +2 -2
  38. package/skills/cavuno-board-setup/SKILL.md +6 -8
  39. package/skills/cavuno-board-smoke-test/SKILL.md +8 -7
  40. package/skills/cavuno-board-theme/SKILL.md +33 -45
  41. package/skills/flavors/tanstack-start/SKILL.md +0 -1
  42. package/skills/manifest.json +5 -5
@@ -63,6 +63,10 @@ interface components {
63
63
  AddCategoryAliasesBody: {
64
64
  aliases: string[];
65
65
  };
66
+ AddForagerExclusionBody: {
67
+ pattern: string;
68
+ type: string;
69
+ };
66
70
  AddMarketAliasesBody: {
67
71
  aliases: string[];
68
72
  };
@@ -77,6 +81,22 @@ interface components {
77
81
  */
78
82
  admin: string;
79
83
  };
84
+ AiUsage: {
85
+ id: string;
86
+ /** @enum {string} */
87
+ object: "ai_usage";
88
+ /** @description The UTC day these counts are for (YYYY-MM-DD). */
89
+ date: string;
90
+ /** @description ISO timestamp of the next UTC-midnight counter reset. */
91
+ resetAt: string;
92
+ features: components["schemas"]["AiUsageFeature"][];
93
+ };
94
+ AiUsageFeature: {
95
+ feature: string;
96
+ used: number;
97
+ limit: number;
98
+ remaining: number;
99
+ };
80
100
  Alert: {
81
101
  /** @description Job-alert preference ID — also the path key. */
82
102
  id: string;
@@ -84,7 +104,7 @@ interface components {
84
104
  object: "alert";
85
105
  label: string | null;
86
106
  /** @enum {string} */
87
- frequency: "daily" | "weekly";
107
+ frequency: "weekly";
88
108
  isActive: boolean;
89
109
  filters: {
90
110
  jobFunctions: string[];
@@ -104,7 +124,7 @@ interface components {
104
124
  AlertBody: {
105
125
  label?: string;
106
126
  /** @enum {string} */
107
- frequency: "daily" | "weekly";
127
+ frequency: "weekly";
108
128
  jobFunctions?: string[];
109
129
  seniorityLevels?: string[];
110
130
  remoteOptions?: string[];
@@ -172,6 +192,10 @@ interface components {
172
192
  email?: string;
173
193
  coverNote?: string;
174
194
  };
195
+ ApproveClaimBody: {
196
+ /** @description Optional intended role for the approved employer, recorded in the audit log. Not yet persisted (companyMembers has no role field). */
197
+ role?: string;
198
+ };
175
199
  AuditLogEntry: {
176
200
  /** @description Unique identifier for the object. */
177
201
  id: string;
@@ -448,6 +472,18 @@ interface components {
448
472
  BoardAuthVerifyEmailBody: {
449
473
  token: string;
450
474
  };
475
+ BoardContentBody: {
476
+ /** @description The board name. */
477
+ boardName: string;
478
+ /** @description Optional board description to steer the copy. */
479
+ boardDescription?: string;
480
+ };
481
+ BoardRulesBody: {
482
+ /** @description The board name. */
483
+ boardName: string;
484
+ /** @description Optional board description to steer the scraping rules. */
485
+ boardDescription?: string;
486
+ };
451
487
  BoardSeo: {
452
488
  /** @enum {string} */
453
489
  object: "board_seo";
@@ -477,6 +513,16 @@ interface components {
477
513
  themeColor: string;
478
514
  };
479
515
  };
516
+ BoardThemeBody: {
517
+ /** @description The board name. */
518
+ boardName: string;
519
+ /** @description Optional board description to steer the palette + fonts. */
520
+ boardDescription?: string;
521
+ };
522
+ BoardToneBody: {
523
+ /** @description The board name the AI tone/voice profile is generated from. */
524
+ boardName: string;
525
+ };
480
526
  BoardUser: {
481
527
  /** @description Board user ID. */
482
528
  id: string;
@@ -496,11 +542,52 @@ interface components {
496
542
  BulkRejectApplicantsBody: {
497
543
  applicationIds: string[];
498
544
  };
545
+ Candidate: {
546
+ /** @description Unique identifier for the candidate. */
547
+ id: string;
548
+ /**
549
+ * @description String representing the object's type.
550
+ * @enum {string}
551
+ */
552
+ object: "candidate";
553
+ /** @description The candidate's email address. */
554
+ email: string;
555
+ /** @description The candidate's display name. */
556
+ displayName: string | null;
557
+ /** @description Public-profile handle, or `null`. */
558
+ handle: string | null;
559
+ /** @description Avatar URL, or `null`. */
560
+ avatarUrl: string | null;
561
+ /** @description Whether the candidate has uploaded a resume. */
562
+ hasResume: boolean;
563
+ /** @description ISO-8601 timestamp of when the candidate registered. */
564
+ createdAt: string;
565
+ /** @description ISO-8601 timestamp of the last sign-in, or `null`. */
566
+ lastActiveAt: string | null;
567
+ };
499
568
  CandidateAvatar: {
500
569
  /** @enum {string} */
501
570
  object: "candidate_avatar";
502
571
  avatarUrl: string | null;
503
572
  };
573
+ CandidateDetail: components["schemas"]["Candidate"] & {
574
+ profile: components["schemas"]["CandidateProfile"] & ({
575
+ headline: string | null;
576
+ location: string | null;
577
+ bio: string | null;
578
+ jobSearchStatus: string | null;
579
+ profileVisibility: string | null;
580
+ openToRelocate: boolean | null;
581
+ seniority: string[];
582
+ skills: string[];
583
+ workingPermits: string[];
584
+ interestedRoles: string[];
585
+ } | null);
586
+ /** @description Number of jobs the candidate has saved. */
587
+ savedJobCount: number;
588
+ /** @description Number of job alerts the candidate has. */
589
+ alertCount: number;
590
+ };
504
591
  CandidateEducation: {
505
592
  id: string;
506
593
  /** @enum {string} */
@@ -583,6 +670,15 @@ interface components {
583
670
  slug: string;
584
671
  website: string | null;
585
672
  };
673
+ CollectReportsBody: {
674
+ /** @description Restrict collection to these providers. Omit to collect every enabled provider. */
675
+ providers?: ("search_console" | "adsense" | "tinybird" | "stripe")[];
676
+ /**
677
+ * Format: date-time
678
+ * @description Collect up to this end date (ISO-8601). Defaults to the current day.
679
+ */
680
+ endDate?: string;
681
+ };
586
682
  CompaniesBatchRequest: {
587
683
  /** @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. */
588
684
  operations: ({
@@ -659,6 +755,20 @@ interface components {
659
755
  boardCategoryP75Max: number | null;
660
756
  currency: string;
661
757
  };
758
+ CompanyClaim: {
759
+ id: string;
760
+ /** @enum {string} */
761
+ object: "company_claim";
762
+ companyId: string;
763
+ companyName: string;
764
+ employerId: string;
765
+ employerEmail: string;
766
+ workEmail: string | null;
767
+ workEmailVerifiedAt: string | null;
768
+ status: string;
769
+ /** @description ISO-8601 timestamp the claim was created. */
770
+ requestedAt: string;
771
+ };
662
772
  CompanyMarket: {
663
773
  /** @enum {string} */
664
774
  object: "company_market";
@@ -797,6 +907,8 @@ interface components {
797
907
  logoUrl: string | null;
798
908
  /** @description One-line summary of the company, or `null` if not set. */
799
909
  summary: string | null;
910
+ /** @description Canonical market slugs assigned to the company. */
911
+ markets: string[];
800
912
  /** @description X (Twitter) profile URL, or `null` if not set. */
801
913
  xUrl: string | null;
802
914
  /** @description LinkedIn page URL, or `null` if not set. */
@@ -816,6 +928,36 @@ interface components {
816
928
  public?: string | null;
817
929
  };
818
930
  };
931
+ ConfirmImportBody: {
932
+ /** @description A first-time or revised mapping to persist. Omit to use the mapping already attached to the batch (fingerprint reuse). */
933
+ inlineMapping?: {
934
+ schemaFingerprint: string;
935
+ /** @enum {string} */
936
+ sourceFormat: "csv" | "xml";
937
+ fieldMappings: {
938
+ sourceColumn: string;
939
+ targetField: string;
940
+ confidence: number;
941
+ notes?: string;
942
+ }[];
943
+ /** @default {} */
944
+ defaults: {
945
+ employmentType?: string;
946
+ remoteOption?: string;
947
+ currency?: string;
948
+ descriptionFormat?: string;
949
+ };
950
+ /** @default [] */
951
+ valueTransforms: {
952
+ sourceColumn: string;
953
+ targetField: string;
954
+ map: {
955
+ [key: string]: string;
956
+ };
957
+ fallback?: string;
958
+ }[];
959
+ };
960
+ };
819
961
  ConfirmWorkEmailBody: {
820
962
  token: string;
821
963
  };
@@ -930,6 +1072,8 @@ interface components {
930
1072
  linkedinUrl?: string;
931
1073
  /** @description Facebook company page URL. */
932
1074
  facebookUrl?: string;
1075
+ /** @description Canonical market slugs assigned to the company. Pass an empty array to clear all markets. */
1076
+ markets?: string[];
933
1077
  /** @description The company's display name. */
934
1078
  name: string;
935
1079
  /** @description URL-friendly slug for the company. Auto-generated from `name` when omitted. */
@@ -966,6 +1110,18 @@ interface components {
966
1110
  description?: string;
967
1111
  sortOrder?: number;
968
1112
  };
1113
+ CreateInvitationBody: {
1114
+ /**
1115
+ * Format: email
1116
+ * @description The email address to invite.
1117
+ */
1118
+ email: string;
1119
+ /**
1120
+ * @description The role the invitee receives on accept.
1121
+ * @enum {string}
1122
+ */
1123
+ role: "admin" | "member";
1124
+ };
969
1125
  CreateJobBody: {
970
1126
  /** @description The ID of an existing company. Provide either `companyId` or `company`, not both. */
971
1127
  companyId?: string;
@@ -1019,6 +1175,10 @@ interface components {
1019
1175
  * @enum {string}
1020
1176
  */
1021
1177
  salaryTimeframe?: "per_year" | "per_month" | "per_week" | "per_day" | "per_hour";
1178
+ /** @description Up to 100 canonical skill slugs from `GET /v1/taxonomies/skills`. Every slug must exist in this account. */
1179
+ skills?: string[];
1180
+ /** @description Up to 100 canonical category slugs from `GET /v1/taxonomies/categories`. Every slug must exist in this account. */
1181
+ categories?: string[];
1022
1182
  /** @description Whether the job appears in featured slots on the public board. */
1023
1183
  isFeatured?: boolean;
1024
1184
  /** @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. */
@@ -1265,6 +1425,35 @@ interface components {
1265
1425
  EditMessageBody: {
1266
1426
  body: string;
1267
1427
  };
1428
+ Employer: {
1429
+ /** @description Unique identifier for the employer. */
1430
+ id: string;
1431
+ /**
1432
+ * @description String representing the object's type.
1433
+ * @enum {string}
1434
+ */
1435
+ object: "employer";
1436
+ /** @description The employer's email address. */
1437
+ email: string;
1438
+ displayName: string | null;
1439
+ avatarUrl: string | null;
1440
+ emailVerifiedAt: string | null;
1441
+ createdAt: string;
1442
+ lastActiveAt: string | null;
1443
+ /** @description Approved company memberships. */
1444
+ companies: (components["schemas"]["EmployerCompany"] & {
1445
+ companyId: string;
1446
+ companyName: string;
1447
+ /** @description Membership status (e.g. `approved`). */
1448
+ status: string;
1449
+ /** @description How the membership was approved (`domain_match` | `work_email_verification` | `admin` | `owner_creation`), or `null`. */
1450
+ approvalSource: string | null;
1451
+ /** @description ISO-8601 timestamp the membership was created. */
1452
+ joinedAt: string;
1453
+ })[];
1454
+ /** @description Pending company claims (memberships awaiting approval). */
1455
+ pendingClaims: components["schemas"]["EmployerPendingClaim"][];
1456
+ };
1268
1457
  EmployerApplicant: {
1269
1458
  id: string;
1270
1459
  /** @enum {string} */
@@ -1441,6 +1630,10 @@ interface components {
1441
1630
  * @enum {string}
1442
1631
  */
1443
1632
  salaryTimeframe?: "per_year" | "per_month" | "per_week" | "per_day" | "per_hour";
1633
+ /** @description Up to 100 canonical skill slugs from `GET /v1/taxonomies/skills`. Every slug must exist in this account. */
1634
+ skills?: string[];
1635
+ /** @description Up to 100 canonical category slugs from `GET /v1/taxonomies/categories`. Every slug must exist in this account. */
1636
+ categories?: string[];
1444
1637
  /** @description Required education credentials. Each value is one of `high_school`, `associate_degree`, `bachelor_degree`, `professional_certificate`, `postgraduate_degree`, or `no_requirements`. */
1445
1638
  educationRequirements?: ("high_school" | "associate_degree" | "bachelor_degree" | "professional_certificate" | "postgraduate_degree" | "no_requirements")[];
1446
1639
  /** @description Minimum required experience, expressed in months. */
@@ -1570,6 +1763,28 @@ interface components {
1570
1763
  updatedAt: string;
1571
1764
  links: components["schemas"]["EmployerJobLinks"];
1572
1765
  };
1766
+ EmployerMembership: {
1767
+ id: string;
1768
+ /** @enum {string} */
1769
+ object: "employer_membership";
1770
+ companyId: string;
1771
+ companyName: string;
1772
+ employerId: string;
1773
+ employerEmail: string;
1774
+ /** @description How the membership was approved (`domain_match` | `work_email_verification` | `admin` | `owner_creation`), or `null`. */
1775
+ approvalSource: string | null;
1776
+ status: string;
1777
+ /** @description ISO-8601 timestamp the membership was created. */
1778
+ joinedAt: string;
1779
+ };
1780
+ EmployerPendingClaim: {
1781
+ membershipId: string;
1782
+ companyId: string;
1783
+ companyName: string;
1784
+ companyWebsiteDomain: string | null;
1785
+ workEmail: string | null;
1786
+ workEmailVerifiedAt: string | null;
1787
+ };
1573
1788
  EmployerPipeline: {
1574
1789
  /** @enum {string} */
1575
1790
  object: "employer_pipeline";
@@ -1646,6 +1861,10 @@ interface components {
1646
1861
  * @enum {string}
1647
1862
  */
1648
1863
  salaryTimeframe?: "per_year" | "per_month" | "per_week" | "per_day" | "per_hour";
1864
+ /** @description Up to 100 canonical skill slugs from `GET /v1/taxonomies/skills`. Every slug must exist in this account. */
1865
+ skills?: string[];
1866
+ /** @description Up to 100 canonical category slugs from `GET /v1/taxonomies/categories`. Every slug must exist in this account. */
1867
+ categories?: string[];
1649
1868
  /** @description Required education credentials. Each value is one of `high_school`, `associate_degree`, `bachelor_degree`, `professional_certificate`, `postgraduate_degree`, or `no_requirements`. */
1650
1869
  educationRequirements?: ("high_school" | "associate_degree" | "bachelor_degree" | "professional_certificate" | "postgraduate_degree" | "no_requirements")[];
1651
1870
  /** @description Minimum required experience, expressed in months. */
@@ -1676,12 +1895,169 @@ interface components {
1676
1895
  /** @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. */
1677
1896
  createIfMissing?: boolean;
1678
1897
  };
1898
+ ForagerBackfillProgress: {
1899
+ id: string;
1900
+ /** @enum {string} */
1901
+ object: "forager_backfill_progress";
1902
+ backfillId: string;
1903
+ status: string;
1904
+ progress: {
1905
+ jobsMatched: number;
1906
+ jobsToEnhance: number;
1907
+ jobsEnhanced: number;
1908
+ jobsFailed: number;
1909
+ };
1910
+ errorMessage: string | null;
1911
+ createdAt: string;
1912
+ };
1913
+ ForagerConfig: {
1914
+ /** @enum {string} */
1915
+ object: "forager_config";
1916
+ configured: boolean;
1917
+ isActive?: boolean;
1918
+ foragerUserId?: string | null;
1919
+ privateVerticalId?: string | null;
1920
+ foragerPlan?: string | null;
1921
+ autoExpireJobs?: boolean;
1922
+ lastSyncedAt?: string | null;
1923
+ hasApiKey?: boolean;
1924
+ hasWebhookSecret?: boolean;
1925
+ };
1926
+ ForagerExclusion: {
1927
+ id: string;
1928
+ /** @enum {string} */
1929
+ object: "forager_exclusion";
1930
+ pattern: string;
1931
+ type: string;
1932
+ createdAt: string;
1933
+ };
1934
+ ForagerSyncRun: {
1935
+ id: string;
1936
+ /** @enum {string} */
1937
+ object: "forager_sync_run";
1938
+ startedAt: string | null;
1939
+ completedAt: string;
1940
+ /** @enum {string} */
1941
+ status: "completed";
1942
+ jobsCreated: number;
1943
+ jobsRepublished: number;
1944
+ companiesCreated: number;
1945
+ totalActive: number;
1946
+ };
1679
1947
  HandleAvailability: {
1680
1948
  /** @enum {string} */
1681
1949
  object: "handle_availability";
1682
1950
  handle: string;
1683
1951
  available: boolean;
1684
1952
  };
1953
+ Import: {
1954
+ id: string;
1955
+ /** @enum {string} */
1956
+ object: "import";
1957
+ filename: string;
1958
+ sourceFormat: string;
1959
+ status: string;
1960
+ discoveryStatus: string | null;
1961
+ totalRows: number;
1962
+ processedRows: number;
1963
+ createdCount: number;
1964
+ updatedCount: number;
1965
+ skippedCount: number;
1966
+ errorCount: number;
1967
+ mappingId: string | null;
1968
+ startedAt: string | null;
1969
+ completedAt: string | null;
1970
+ createdAt: string;
1971
+ };
1972
+ ImportBatchError: {
1973
+ rowIndex: number;
1974
+ code: string;
1975
+ message: string;
1976
+ };
1977
+ ImportDetail: {
1978
+ id: string;
1979
+ /** @enum {string} */
1980
+ object: "import";
1981
+ filename: string;
1982
+ sourceFormat: string;
1983
+ status: string;
1984
+ discoveryStatus: string | null;
1985
+ totalRows: number;
1986
+ processedRows: number;
1987
+ createdCount: number;
1988
+ updatedCount: number;
1989
+ skippedCount: number;
1990
+ errorCount: number;
1991
+ mappingId: string | null;
1992
+ startedAt: string | null;
1993
+ completedAt: string | null;
1994
+ createdAt: string;
1995
+ errors: components["schemas"]["ImportBatchError"][];
1996
+ proposedMapping?: unknown;
1997
+ };
1998
+ ImportFieldMapping: {
1999
+ sourceColumn: string;
2000
+ targetField: string;
2001
+ confidence: number;
2002
+ notes?: string;
2003
+ };
2004
+ ImportMapping: {
2005
+ id: string;
2006
+ /** @enum {string} */
2007
+ object: "import_mapping";
2008
+ schemaFingerprint: string;
2009
+ /** @enum {string} */
2010
+ sourceFormat: "csv" | "xml";
2011
+ fieldMappings: components["schemas"]["ImportFieldMapping"][];
2012
+ valueTransforms: components["schemas"]["ImportValueTransform"][];
2013
+ defaults: components["schemas"]["ImportMappingDefaults"];
2014
+ importCount: number;
2015
+ lastUsedAt: string;
2016
+ createdByUserId: string | null;
2017
+ createdAt: string;
2018
+ };
2019
+ ImportMappingDefaults: {
2020
+ employmentType?: string;
2021
+ remoteOption?: string;
2022
+ currency?: string;
2023
+ descriptionFormat?: string;
2024
+ };
2025
+ ImportQuota: {
2026
+ /** @enum {string} */
2027
+ object: "import_quota";
2028
+ used: number;
2029
+ remaining: number;
2030
+ limit: number;
2031
+ resetAt: string;
2032
+ };
2033
+ ImportValueTransform: {
2034
+ sourceColumn: string;
2035
+ targetField: string;
2036
+ map: {
2037
+ [key: string]: string;
2038
+ };
2039
+ fallback?: string;
2040
+ };
2041
+ IndexingConfig: {
2042
+ /** @enum {string} */
2043
+ id: "indexing_config";
2044
+ /** @enum {string} */
2045
+ object: "indexing_config";
2046
+ /** @description Whether Google Indexing submission is active. */
2047
+ enabled: boolean;
2048
+ /** @description Whether IndexNow (Bing/Yandex) instant indexing is enabled. */
2049
+ indexNowEnabled: boolean;
2050
+ /** @description GCP provisioning state (`pending` | `provisioning` | `ready` | `error`), or null. */
2051
+ provisioningStatus: string | null;
2052
+ /** @description ISO-8601 timestamp of the last submission, or null. */
2053
+ lastRunAt: string | null;
2054
+ /** @description The last recorded error message, or null. */
2055
+ lastError: string | null;
2056
+ };
2057
+ IndexingToggleBody: {
2058
+ /** @description Whether to enable the toggle. */
2059
+ enabled: boolean;
2060
+ };
1685
2061
  /** @description An inline company payload, resolved via `find-or-create` before the job is created. Provide either `company` or `companyId`, not both. */
1686
2062
  InlineCompanyInput: {
1687
2063
  /** @description The company's display name. */
@@ -1695,6 +2071,33 @@ interface components {
1695
2071
  /** @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. */
1696
2072
  createIfMissing?: boolean;
1697
2073
  };
2074
+ Invitation: {
2075
+ /** @description Unique identifier for the invitation. */
2076
+ id: string;
2077
+ /**
2078
+ * @description String representing the object's type.
2079
+ * @enum {string}
2080
+ */
2081
+ object: "invitation";
2082
+ /** @description The invited email address. */
2083
+ email: string;
2084
+ /** @description The role the invitee will receive on accept. */
2085
+ role: string;
2086
+ /** @description The invitation status: pending, expired, accepted, declined. */
2087
+ status: string;
2088
+ /** @description ISO-8601 timestamp of when the invitation expires. */
2089
+ expiresAt: string;
2090
+ /** @description Identifier of the user who created the invitation. */
2091
+ invitedByUserId: string | null;
2092
+ /** @description ISO-8601 timestamp of when the invitation was created. */
2093
+ createdAt: string;
2094
+ };
2095
+ InvitationWithToken: components["schemas"]["Invitation"] & {
2096
+ /** @description The opaque accept token. */
2097
+ token: string;
2098
+ /** @description The full URL a recipient uses to accept the invitation. */
2099
+ acceptUrl: string;
2100
+ };
1698
2101
  Job: components["schemas"]["JobSummary"] & {
1699
2102
  /** @description Public + admin URLs for this job. `public` may be `null` if the job lacks a slug or company-slug. */
1700
2103
  links?: components["schemas"]["ResourceLinks"] & {
@@ -1822,11 +2225,6 @@ interface components {
1822
2225
  /** @description Free-form location string (e.g. `"Berlin, Germany"`, `"Mountain View, California, USA"`). Mapbox parses + ranks candidates server-side; rejects on low confidence. */
1823
2226
  query: string;
1824
2227
  };
1825
- JobPostingBillingCheck: {
1826
- /** @enum {string} */
1827
- object: "job_posting_billing_check";
1828
- hasActiveBilling: boolean;
1829
- };
1830
2228
  JobPostingBillingOptions: {
1831
2229
  /** @enum {string} */
1832
2230
  object: "job_posting_billing_options";
@@ -1857,10 +2255,6 @@ interface components {
1857
2255
  object: "job_posting_billing_verification";
1858
2256
  success: boolean;
1859
2257
  };
1860
- JobPostingCheckBillingBody: {
1861
- /** Format: email */
1862
- email: string;
1863
- };
1864
2258
  JobPostingLogo: {
1865
2259
  /** @enum {string} */
1866
2260
  object: "job_posting_logo";
@@ -1924,23 +2318,6 @@ interface components {
1924
2318
  /** Format: email */
1925
2319
  email: string;
1926
2320
  };
1927
- JobPostingSubscriptionEntitlements: {
1928
- /** @enum {string} */
1929
- object: "job_posting_subscription_entitlements";
1930
- hasSubscription: boolean;
1931
- subscriptionId: string | null;
1932
- canFeature: boolean | null;
1933
- featuredSlotsRemaining: number | null;
1934
- featuredSlotsTotal: number | null;
1935
- maxActiveRemaining: number | null;
1936
- maxActiveTotal: number | null;
1937
- featureSelectionMode: string | null;
1938
- };
1939
- JobPostingSubscriptionEntitlementsBody: {
1940
- /** Format: email */
1941
- email: string;
1942
- planId: string;
1943
- };
1944
2321
  JobSummary: {
1945
2322
  /** @description Unique identifier for the object. Use this value as the `{id}` path parameter for the job endpoints (e.g. `GET /v1/jobs/{id}`). */
1946
2323
  id: string;
@@ -1996,6 +2373,10 @@ interface components {
1996
2373
  createdAt: string;
1997
2374
  /** @description Time at which the job was last updated. ISO 8601 datetime. */
1998
2375
  updatedAt: string;
2376
+ /** @description Canonical skill slugs assigned to the job. */
2377
+ skills: string[];
2378
+ /** @description Canonical category slugs assigned to the job. */
2379
+ categories: string[];
1999
2380
  /** @description External identifier supplied by the caller on create, used for deduplication via `GET /v1/jobs?externalId=...`. `null` when no external identifier was set. */
2000
2381
  externalId: string | null;
2001
2382
  /** @description Board-defined custom-field values for this job, keyed by the field `key` (the definitions are published at `GET /v1/settings/job-form`). Each value is returned as stored: a string (`short_text` / `long_text` / a `single_select` option key), a string array (`multi_select` option keys), a boolean, or a number. Always an object — `{}` when the job has no custom-field values, never `null` or a missing field. Only real values are stored, so this never contains `null` or empty values. */
@@ -2173,6 +2554,41 @@ interface components {
2173
2554
  */
2174
2555
  purpose: "board_logo" | "board_hero" | "account_avatar" | "company_logo" | "blog_image";
2175
2556
  };
2557
+ Member: {
2558
+ /** @description Unique identifier for the membership. */
2559
+ id: string;
2560
+ /**
2561
+ * @description String representing the object's type.
2562
+ * @enum {string}
2563
+ */
2564
+ object: "member";
2565
+ /** @description Identifier of the user behind the member. */
2566
+ userId: string;
2567
+ /** @description The member's email address. */
2568
+ email: string;
2569
+ /** @description The member's display name. */
2570
+ name: string;
2571
+ /** @description URL of the member's avatar, or `null` if none is set. */
2572
+ avatarUrl: string | null;
2573
+ /** @description The member's role in the account. */
2574
+ role: string;
2575
+ /** @description Whether the member is currently suspended. */
2576
+ suspended: boolean;
2577
+ /** @description ISO-8601 timestamp of when the member joined the account. */
2578
+ joinedAt: string;
2579
+ /** @description Whether the member is the account primary owner. */
2580
+ isPrimaryOwner: boolean;
2581
+ };
2582
+ MemberPermissions: {
2583
+ /** @enum {string} */
2584
+ id: "members_me";
2585
+ /** @enum {string} */
2586
+ object: "member_permissions";
2587
+ /** @description The acting member's role, or `null` if they are not a member. */
2588
+ role: string | null;
2589
+ /** @description The permission strings the acting member effectively holds. */
2590
+ permissions: string[];
2591
+ };
2176
2592
  Message: {
2177
2593
  id: string;
2178
2594
  /** @enum {string} */
@@ -2214,6 +2630,23 @@ interface components {
2214
2630
  subscribed: boolean;
2215
2631
  updatedAt: number | null;
2216
2632
  };
2633
+ NotificationPreferences: {
2634
+ /** @enum {string} */
2635
+ object: "notification_preferences";
2636
+ backfillDigest: boolean;
2637
+ companyAccessRequest: boolean;
2638
+ companyRegistered: boolean;
2639
+ };
2640
+ OffsetPagination: {
2641
+ /** @description Total number of results matching the query. */
2642
+ count?: number;
2643
+ /** @description The page size used for this response. */
2644
+ limit?: number;
2645
+ /** @description The number of results skipped before this page. */
2646
+ offset?: number;
2647
+ /** @description Jobs hidden behind the candidate paywall for the current viewer; absent or 0 for an entitled viewer. */
2648
+ gatedCount?: number;
2649
+ };
2217
2650
  /** @description Error envelope, populated once the operation reaches `failed`. `null` otherwise. */
2218
2651
  OperationErrorEnvelope: {
2219
2652
  /** @description Machine-readable error code. */
@@ -2272,6 +2705,19 @@ interface components {
2272
2705
  /** @description Identifier of the parent operation when this operation is a child of a fan-out, or `null` otherwise. */
2273
2706
  parentOperationId: string | null;
2274
2707
  };
2708
+ PatchForagerConfigBody: {
2709
+ isActive?: boolean;
2710
+ autoExpireJobs?: boolean;
2711
+ };
2712
+ PatchNotificationPreferencesBody: {
2713
+ backfillDigest?: boolean;
2714
+ companyAccessRequest?: boolean;
2715
+ companyRegistered?: boolean;
2716
+ };
2717
+ PatchReportingIntegrationBody: {
2718
+ /** @description Whether collection is enabled for this integration. */
2719
+ enabled: boolean;
2720
+ };
2275
2721
  PatchSettingsBody: {
2276
2722
  /** @description Display name of the board. */
2277
2723
  name?: string;
@@ -2348,6 +2794,17 @@ interface components {
2348
2794
  intervalCount: number | null;
2349
2795
  isDefault: boolean;
2350
2796
  };
2797
+ Permission: {
2798
+ /** @description Unique identifier for the permission. */
2799
+ id: string;
2800
+ /**
2801
+ * @description String representing the object's type.
2802
+ * @enum {string}
2803
+ */
2804
+ object: "permission";
2805
+ /** @description The permission string, e.g. `members.manage`. */
2806
+ permission: string;
2807
+ };
2351
2808
  Plan: {
2352
2809
  /** @enum {string} */
2353
2810
  object: "plan";
@@ -2556,6 +3013,22 @@ interface components {
2556
3013
  */
2557
3014
  public: string | null;
2558
3015
  };
3016
+ PublicInvitation: {
3017
+ /** @enum {string} */
3018
+ object: "invitation";
3019
+ /** @description The invited email address. */
3020
+ email: string;
3021
+ /** @description The role the invitee will receive on accept. */
3022
+ role: string;
3023
+ /** @description The invitation status. */
3024
+ status: string;
3025
+ /** @description ISO-8601 timestamp of when the invitation expires. */
3026
+ expiresAt: string;
3027
+ /** @description The inviting account (name only). */
3028
+ account: {
3029
+ name: string;
3030
+ } | null;
3031
+ };
2559
3032
  PublicJob: {
2560
3033
  /** @description Unique identifier for the object. Use this value as the `{id}` path parameter for the job endpoints (e.g. `GET /v1/jobs/{id}`). */
2561
3034
  id: string;
@@ -2699,7 +3172,8 @@ interface components {
2699
3172
  preferences: {
2700
3173
  id: string;
2701
3174
  label: string | null;
2702
- frequency: string;
3175
+ /** @enum {string} */
3176
+ frequency: "weekly";
2703
3177
  isActive: boolean;
2704
3178
  filters: {
2705
3179
  jobFunctions?: string[];
@@ -2716,21 +3190,20 @@ interface components {
2716
3190
  PublicJobAlertResend: {
2717
3191
  /** @enum {string} */
2718
3192
  object: "job_alert_confirmation_resend";
2719
- /** @enum {string} */
2720
- status: "sent" | "not_found" | "already_confirmed" | "throttled" | "send_failed";
3193
+ /**
3194
+ * @description Always `submitted`. The response is intentionally uniform to prevent email enumeration. If a pending confirmation exists for this email, a confirmation email has been sent (subject to server-side throttle).
3195
+ * @enum {string}
3196
+ */
3197
+ status: "submitted";
2721
3198
  };
2722
3199
  PublicJobAlertSubscription: {
2723
3200
  /** @enum {string} */
2724
3201
  object: "job_alert_subscription";
2725
3202
  /**
2726
- * @description `created` on a new subscription; `duplicate` if it existed.
3203
+ * @description Always `submitted`. The response is intentionally uniform to prevent email enumeration. If this email isn't already subscribed, a confirmation email has been sent.
2727
3204
  * @enum {string}
2728
3205
  */
2729
- status: "created" | "duplicate";
2730
- /** @description True when a double-opt-in confirmation email was sent. */
2731
- requiresConfirmation: boolean;
2732
- /** @description True if the subscriber was already email-confirmed. */
2733
- confirmed: boolean;
3206
+ status: "submitted";
2734
3207
  };
2735
3208
  PublicJobCard: {
2736
3209
  id: string;
@@ -2847,7 +3320,7 @@ interface components {
2847
3320
  */
2848
3321
  limit?: number;
2849
3322
  /**
2850
- * @description The number of jobs to skip — the storefront page offset. Takes precedence over `cursor`. `offset + limit` may not exceed 10,000.
3323
+ * @description The number of jobs to skip — the job catalog page offset. Takes precedence over `cursor`. `offset + limit` may not exceed 10,000.
2851
3324
  * @example 0
2852
3325
  */
2853
3326
  offset?: number;
@@ -2867,6 +3340,20 @@ interface components {
2867
3340
  redirectTo: string | null;
2868
3341
  geo: components["schemas"]["TaxonomyGeo"];
2869
3342
  };
3343
+ PublicTaxonomyTerm: {
3344
+ /** @enum {string} */
3345
+ object: "taxonomy_term";
3346
+ /** @description Stable taxonomy entity ID. */
3347
+ id: string;
3348
+ /** @enum {string} */
3349
+ type: "category" | "skill";
3350
+ /** @description Current source-locale slug used by job search; old slugs may remain aliases. */
3351
+ sourceSlug: string;
3352
+ /** @description Board-language canonical URL slug. */
3353
+ canonicalSlug: string;
3354
+ /** @description Board-language name with source-name fallback. */
3355
+ displayName: string;
3356
+ };
2870
3357
  PublicVerifyBoardPasswordBody: {
2871
3358
  /** @description The board password. */
2872
3359
  password: string;
@@ -2891,6 +3378,10 @@ interface components {
2891
3378
  /** @description The redirect target (board-relative), or `null` when no redirect matches. The consumer 308s to `target`, or 404s when `null`. */
2892
3379
  target: string | null;
2893
3380
  };
3381
+ RejectClaimBody: {
3382
+ /** @description Optional free-form reason recorded in the audit log. */
3383
+ reason?: string;
3384
+ };
2894
3385
  RemotePermitTaxonomyEntry: {
2895
3386
  /** @description Discriminator. One of: `worldwide`, `world_region`, `continent`, `region`, `subregion`, `custom`, `country`, `subdivision`. */
2896
3387
  type: string;
@@ -2921,6 +3412,94 @@ interface components {
2921
3412
  reason: "spam" | "harassment" | "misrepresentation" | "other";
2922
3413
  freeText?: string;
2923
3414
  };
3415
+ ReportSnapshot: {
3416
+ /** @description Unique identifier for the snapshot. */
3417
+ id: string;
3418
+ /**
3419
+ * @description String representing the object's type.
3420
+ * @enum {string}
3421
+ */
3422
+ object: "report_snapshot";
3423
+ /** @description The provider that produced the snapshot. */
3424
+ provider: string;
3425
+ /** @description The metric name. */
3426
+ metric: string;
3427
+ /** @description The segment (e.g. `global`, `country`). */
3428
+ segment: string;
3429
+ /** @description The aggregation interval (e.g. `1d`). */
3430
+ interval: string;
3431
+ /** @description ISO date string — inclusive start of the snapshot range. */
3432
+ rangeStart: string;
3433
+ /** @description ISO date string — inclusive end of the snapshot range. */
3434
+ rangeEnd: string;
3435
+ /** @description Provider-specific metric payload as collected. */
3436
+ payload?: unknown;
3437
+ };
3438
+ ReportingConnect: {
3439
+ /** @description Provider-synthetic identifier for the connect. */
3440
+ id: string;
3441
+ /**
3442
+ * @description String representing the object's type.
3443
+ * @enum {string}
3444
+ */
3445
+ object: "reporting_integration_connect";
3446
+ /** @description The reporting provider key. */
3447
+ provider: string;
3448
+ /** @description Whether the integration is already fully connected. */
3449
+ connected: boolean;
3450
+ /** @description OAuth providers only — the URL the user must visit to grant access. */
3451
+ authorizationUrl?: string;
3452
+ /** @description Search Console only — the site-verification DNS token. */
3453
+ verificationToken?: string;
3454
+ /** @description The board site URL the integration reports on. */
3455
+ siteUrl?: string;
3456
+ /** @description Stripe only — the Monetization settings deep link. */
3457
+ redirectUrl?: string;
3458
+ /** @description Stripe only — why no OAuth URL is returned. */
3459
+ reason?: string;
3460
+ };
3461
+ ReportingIntegration: {
3462
+ /** @description Unique identifier for the integration. */
3463
+ id: string;
3464
+ /**
3465
+ * @description String representing the object's type.
3466
+ * @enum {string}
3467
+ */
3468
+ object: "reporting_integration";
3469
+ /**
3470
+ * @description The reporting provider key.
3471
+ * @enum {string}
3472
+ */
3473
+ provider: "search_console" | "adsense" | "tinybird" | "stripe" | "google_analytics";
3474
+ /** @description Whether collection is enabled for this integration. */
3475
+ enabled: boolean;
3476
+ /** @description ISO-8601 timestamp of when the integration was connected. */
3477
+ connectedAt: string | null;
3478
+ /** @description Provider-side identifier (e.g. the verified site URL). */
3479
+ externalId: string | null;
3480
+ /** @description OAuth scopes granted to the integration. */
3481
+ scopes: string[];
3482
+ settings: components["schemas"]["ReportingIntegrationSettings"];
3483
+ /** @description ISO-8601 timestamp of the last successful collection. */
3484
+ lastCollectedAt: string | null;
3485
+ };
3486
+ /** @description Provider-specific settings. The OAuth `refreshToken` and `oauthState` are always redacted. */
3487
+ ReportingIntegrationSettings: {
3488
+ type?: string;
3489
+ siteUrl?: string;
3490
+ domain?: string | null;
3491
+ siteHostname?: string;
3492
+ verificationToken?: string;
3493
+ status?: string;
3494
+ slug?: string;
3495
+ inspectionUrl?: string;
3496
+ lastSyncedAt?: string;
3497
+ permissionLevel?: string;
3498
+ platformSiteUrl?: string;
3499
+ propertyUrl?: string;
3500
+ adsenseAccountId?: string;
3501
+ sitemapSubmitted?: boolean;
3502
+ } | null;
2924
3503
  ResourceLinks: {
2925
3504
  /**
2926
3505
  * Format: uri
@@ -2966,6 +3545,19 @@ interface components {
2966
3545
  /** @description OAuth client secret. May be supplied here or via HTTP Basic authentication. */
2967
3546
  client_secret?: string;
2968
3547
  };
3548
+ Role: {
3549
+ /** @description Unique identifier for the role. */
3550
+ id: string;
3551
+ /**
3552
+ * @description String representing the object's type.
3553
+ * @enum {string}
3554
+ */
3555
+ object: "role";
3556
+ /** @description The role name: owner, admin, or member. */
3557
+ role: string;
3558
+ /** @description The permission strings granted to the role by default. */
3559
+ permissions: string[];
3560
+ };
2969
3561
  SalaryCompanyIndexItem: {
2970
3562
  /** @enum {string} */
2971
3563
  object: "salary_company";
@@ -3026,6 +3618,14 @@ interface components {
3026
3618
  featuredBullets: string[];
3027
3619
  displayOrder: number;
3028
3620
  };
3621
+ SampleJobsBody: {
3622
+ /** @description The board name. */
3623
+ boardName: string;
3624
+ /** @description Optional board description to tailor the sample jobs. */
3625
+ boardDescription?: string;
3626
+ /** @description How many sample jobs to generate (default 10, max 25). */
3627
+ count?: number;
3628
+ };
3029
3629
  SaveJobBody: {
3030
3630
  jobId: string;
3031
3631
  };
@@ -3057,6 +3657,10 @@ interface components {
3057
3657
  * @example 20
3058
3658
  */
3059
3659
  limit?: number;
3660
+ filters?: {
3661
+ /** @description Return companies assigned to any of these canonical market slugs. Up to 10 values. */
3662
+ markets?: string[];
3663
+ };
3060
3664
  };
3061
3665
  SearchJobsBody: {
3062
3666
  /** @description Free-text search query matched against job title and description. Up to 200 characters. */
@@ -3073,6 +3677,10 @@ interface components {
3073
3677
  employmentType?: ("full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other")[];
3074
3678
  /** @description Only return jobs at any of the given seniority levels. Up to 10 values. */
3075
3679
  seniority?: ("entry_level" | "associate" | "mid_level" | "senior" | "lead" | "principal" | "director" | "executive")[];
3680
+ /** @description Only return jobs tagged with any of these canonical skill slugs. Up to 10 values. */
3681
+ skills?: string[];
3682
+ /** @description Only return jobs tagged with any of these canonical category slugs. Up to 10 values. */
3683
+ categories?: string[];
3076
3684
  /** @description Range filter on the job's `publishedAt` timestamp. */
3077
3685
  publishedAt?: {
3078
3686
  /**
@@ -3310,6 +3918,57 @@ interface components {
3310
3918
  candidateBoardUserId: string;
3311
3919
  body: string;
3312
3920
  };
3921
+ Subscriber: {
3922
+ /** @description Unique identifier for the subscriber. */
3923
+ id: string;
3924
+ /**
3925
+ * @description String representing the object's type.
3926
+ * @enum {string}
3927
+ */
3928
+ object: "subscriber";
3929
+ /** @description The subscriber's email address. */
3930
+ email: string;
3931
+ /** @description ISO-8601 timestamp of double-opt-in confirmation, or `null`. */
3932
+ confirmedAt: string | null;
3933
+ /** @description ISO-8601 timestamp of when the subscriber was waitlisted. */
3934
+ waitlistedAt: string | null;
3935
+ /** @description ISO-8601 timestamp of when the subscriber unsubscribed. */
3936
+ unsubscribedAt: string | null;
3937
+ /** @description ISO-8601 timestamp of when the subscriber was created. */
3938
+ createdAt: string;
3939
+ };
3940
+ SubscriberCount: {
3941
+ /** @enum {string} */
3942
+ object: "subscriber_count";
3943
+ /** @description The number of confirmed subscribers for the account. */
3944
+ confirmed: number;
3945
+ };
3946
+ SubscriberDetail: components["schemas"]["Subscriber"] & {
3947
+ /** @description ISO-8601 timestamp of the most recent alert dispatch, or `null`. */
3948
+ lastSentAt: string | null;
3949
+ /** @description The subscriber's alerts. */
3950
+ alerts: (components["schemas"]["Alert"] & {
3951
+ /** @description Unique identifier for the alert. */
3952
+ id: string;
3953
+ /**
3954
+ * @description String representing the object's type.
3955
+ * @enum {string}
3956
+ */
3957
+ object: "alert";
3958
+ /** @description Identifier of the subscriber that owns this alert. */
3959
+ subscriberId: string;
3960
+ /** @description The job-filter criteria the alert matches against. */
3961
+ filters?: unknown;
3962
+ /** @description Delivery cadence: `instant`, `daily`, or `weekly`. */
3963
+ frequency: string;
3964
+ /** @description Whether the alert is currently active. */
3965
+ isActive: boolean;
3966
+ /** @description ISO-8601 timestamp of the last dispatch, or `null`. */
3967
+ lastSentAt: string | null;
3968
+ /** @description ISO-8601 timestamp of when the alert was created. */
3969
+ createdAt: string;
3970
+ })[];
3971
+ };
3313
3972
  TalentDirectoryEntry: {
3314
3973
  /** @enum {string} */
3315
3974
  object: "talent_directory_entry";
@@ -3573,6 +4232,10 @@ interface components {
3573
4232
  /** @description Space-separated list of scopes granted on the issued token. */
3574
4233
  scope: string;
3575
4234
  };
4235
+ TransferOwnershipBody: {
4236
+ /** @description The user ID of the member who will become the primary owner. */
4237
+ newOwnerUserId: string;
4238
+ };
3576
4239
  UnreadCount: {
3577
4240
  /** @enum {string} */
3578
4241
  object: "unread_count";
@@ -3584,6 +4247,10 @@ interface components {
3584
4247
  channel: "messageEmails" | "applicationEmails";
3585
4248
  token: string;
3586
4249
  };
4250
+ UnsubscribeSubscriberBody: {
4251
+ /** @description Optional free-form reason recorded in the audit log. */
4252
+ reason?: string;
4253
+ };
3587
4254
  UpdateApplicationFactsBody: {
3588
4255
  candidateName?: string;
3589
4256
  /** Format: email */
@@ -3679,6 +4346,8 @@ interface components {
3679
4346
  linkedinUrl?: string;
3680
4347
  /** @description Facebook company page URL. */
3681
4348
  facebookUrl?: string;
4349
+ /** @description Canonical market slugs assigned to the company. Pass an empty array to clear all markets. */
4350
+ markets?: string[];
3682
4351
  /** @description The company's display name. */
3683
4352
  name?: string;
3684
4353
  /** @description URL-friendly slug for the company. */
@@ -3718,6 +4387,13 @@ interface components {
3718
4387
  description?: string;
3719
4388
  sortOrder?: number;
3720
4389
  };
4390
+ UpdateInvitationBody: {
4391
+ /**
4392
+ * @description The new role for the pending invitation.
4393
+ * @enum {string}
4394
+ */
4395
+ role: "admin" | "member";
4396
+ };
3721
4397
  UpdateJobBody: {
3722
4398
  /** @description Identifier of the company the job belongs to. */
3723
4399
  companyId?: string;
@@ -3771,6 +4447,10 @@ interface components {
3771
4447
  * @enum {string}
3772
4448
  */
3773
4449
  salaryTimeframe?: "per_year" | "per_month" | "per_week" | "per_day" | "per_hour";
4450
+ /** @description Up to 100 canonical skill slugs from `GET /v1/taxonomies/skills`. Every slug must exist in this account. */
4451
+ skills?: string[];
4452
+ /** @description Up to 100 canonical category slugs from `GET /v1/taxonomies/categories`. Every slug must exist in this account. */
4453
+ categories?: string[];
3774
4454
  /** @description Whether the job appears in featured slots on the public board. */
3775
4455
  isFeatured?: boolean;
3776
4456
  /** @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. */
@@ -3812,6 +4492,13 @@ interface components {
3812
4492
  slug?: string;
3813
4493
  sourceLocale?: string;
3814
4494
  };
4495
+ UpdateMemberBody: {
4496
+ /**
4497
+ * @description The new role. Only an owner may set `owner`; the primary owner’s role is immutable (use transfer-ownership).
4498
+ * @enum {string}
4499
+ */
4500
+ role: "owner" | "admin" | "member";
4501
+ };
3815
4502
  UpdateNotificationPreferenceBody: {
3816
4503
  /** @enum {string} */
3817
4504
  channel: "messageEmails" | "applicationEmails";
@@ -3882,35 +4569,29 @@ type Schemas = components['schemas'];
3882
4569
  * fields.
3883
4570
  */
3884
4571
  /**
3885
- * Medusa-style storefront pagination fields (ADR-0037 §7), populated only by
3886
- * the board jobs catalog reads (browse / search / company-jobs); absent on
3887
- * every other list/search. `nextCursor` is preserved alongside (offset-encoded).
4572
+ * Optional offset-pagination metadata generated from the Board API contract.
4573
+ * `nextCursor` is preserved alongside for forward cursor iteration.
3888
4574
  */
3889
- interface StorefrontPagination {
3890
- /** Total matching results ("X jobs"). */
3891
- count?: number;
3892
- /** The page size used for this response. */
3893
- limit?: number;
3894
- /** Number of items skipped before this page. */
3895
- offset?: number;
3896
- /** Items hidden behind the candidate paywall for the current viewer; absent/0 when entitled. */
3897
- gatedCount?: number;
3898
- }
3899
- interface ListEnvelope<T> extends StorefrontPagination {
4575
+ type OffsetPagination = Schemas['OffsetPagination'];
4576
+ /** @deprecated Use `OffsetPagination`. */
4577
+ type StorefrontPagination = OffsetPagination;
4578
+ /** @deprecated Use `OffsetPagination`. */
4579
+ type JobCatalogPagination = OffsetPagination;
4580
+ type ListEnvelope<T> = OffsetPagination & {
3900
4581
  object: 'list';
3901
4582
  url: string;
3902
4583
  hasMore: boolean;
3903
4584
  /** `null` when `hasMore` is false — always present, never undefined. */
3904
4585
  nextCursor: string | null;
3905
4586
  data: T[];
3906
- }
3907
- interface SearchEnvelope<T> extends StorefrontPagination {
4587
+ };
4588
+ type SearchEnvelope<T> = OffsetPagination & {
3908
4589
  object: 'search_result';
3909
4590
  url: string;
3910
4591
  hasMore: boolean;
3911
4592
  nextCursor: string | null;
3912
4593
  data: T[];
3913
- }
4594
+ };
3914
4595
 
3915
4596
  type PublicJob = Schemas['PublicJob'];
3916
4597
  type PublicJobCard = Schemas['PublicJobCard'];
@@ -3941,17 +4622,17 @@ interface RelatedSearch {
3941
4622
  term: string;
3942
4623
  count: number;
3943
4624
  }
3944
- /** The browse list envelope — `PublicJobCard`s + storefront fields + `relatedSearches`. */
3945
- interface JobCardListEnvelope extends ListEnvelope<PublicJobCard> {
4625
+ /** The browse list envelope — `PublicJobCard`s + job catalog pagination + `relatedSearches`. */
4626
+ type JobCardListEnvelope = ListEnvelope<PublicJobCard> & {
3946
4627
  relatedSearches?: RelatedSearch[];
3947
- }
3948
- /** The search envelope — `PublicJobCard`s + storefront fields. */
4628
+ };
4629
+ /** The search envelope — `PublicJobCard`s + job catalog pagination. */
3949
4630
  type JobCardSearchEnvelope = SearchEnvelope<PublicJobCard>;
3950
4631
  type JobsListQuery = {
3951
4632
  cursor?: string;
3952
4633
  /** 1–100. */
3953
4634
  limit?: number;
3954
- /** Storefront page offset; takes precedence over `cursor`. `offset + limit` ≤ 10,000. */
4635
+ /** Job catalog page offset; takes precedence over `cursor`. `offset + limit` ≤ 10,000. */
3955
4636
  offset?: number;
3956
4637
  /** Repeated param (up to 10) — OR-matched. Repeat `companyId` per value. */
3957
4638
  companyId?: string[];
@@ -3977,4 +4658,4 @@ type JobsSimilarQuery = {
3977
4658
  };
3978
4659
  type JobsSearchBody = Schemas['PublicSearchJobsBody'];
3979
4660
 
3980
- export type { CustomFieldValues as C, EmploymentType as E, JobSort as J, ListEnvelope as L, OfficeLocation as O, PublicJob as P, RemoteOption as R, Seniority as S, PublicJobCard as a, Schemas as b, components as c, JobsListQuery as d, JobCardListEnvelope as e, JobsSearchBody as f, JobCardSearchEnvelope as g, JobsSimilarQuery as h, SearchEnvelope as i, CustomFieldValue as j, EducationRequirement as k, JobCompany as l, RelatedSearch as m, RemotePermit as n, RemoteTimezone as o, StorefrontPagination as p };
4661
+ export type { CustomFieldValues as C, EmploymentType as E, JobSort as J, ListEnvelope as L, OfficeLocation as O, PublicJob as P, RemoteOption as R, Seniority as S, PublicJobCard as a, Schemas as b, components as c, JobsListQuery as d, JobCardListEnvelope as e, JobsSearchBody as f, JobCardSearchEnvelope as g, JobsSimilarQuery as h, SearchEnvelope as i, CustomFieldValue as j, EducationRequirement as k, JobCatalogPagination as l, JobCompany as m, OffsetPagination as n, RelatedSearch as o, RemotePermit as p, RemoteTimezone as q, StorefrontPagination as r };