@cavuno/board 1.44.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/CONTRIBUTING.md +25 -0
- package/LICENSE +21 -0
- package/README.md +12 -7
- package/SECURITY.md +28 -0
- package/TRADEMARKS.md +16 -0
- package/dist/_spec-sW85fuvT.d.mts +2731 -0
- package/dist/_spec-sW85fuvT.d.ts +2731 -0
- package/dist/bin.mjs +38 -349
- package/dist/{board-DZCw7A6P.d.ts → board-DKXyxwNN.d.ts} +2 -2
- package/dist/{board-BwFW1aU2.d.mts → board-QFeHT4UN.d.mts} +2 -2
- package/dist/doctor.d.mts +6 -19
- package/dist/doctor.d.ts +6 -19
- package/dist/doctor.js +38 -345
- package/dist/doctor.mjs +37 -344
- package/dist/filters.d.mts +5 -5
- package/dist/filters.d.ts +5 -5
- package/dist/format.d.mts +17 -19
- package/dist/format.d.ts +17 -19
- package/dist/go.d.mts +2 -2
- package/dist/go.d.ts +2 -2
- package/dist/go.js +1 -1
- package/dist/go.mjs +1 -1
- package/dist/index.d.mts +16 -18
- package/dist/index.d.ts +16 -18
- package/dist/index.js +39 -28
- package/dist/index.mjs +39 -28
- package/dist/{jobs-BVazo4mA.d.ts → jobs-CuRzTDb1.d.mts} +15 -13
- package/dist/{jobs-CSMshXGV.d.mts → jobs-DTnCZGtb.d.ts} +15 -13
- package/dist/paths.d.mts +6 -6
- package/dist/paths.d.ts +6 -6
- package/dist/paths.js +1 -1
- package/dist/paths.mjs +1 -1
- package/dist/roles-vY0AXhoc.d.mts +3 -3
- package/dist/roles-vY0AXhoc.d.ts +3 -3
- package/dist/route-contract.d.mts +16 -16
- package/dist/route-contract.d.ts +16 -16
- package/dist/route-contract.js +1 -1
- package/dist/route-contract.mjs +1 -1
- package/dist/{salaries-DMQsjLrV.d.ts → salaries-BOpR51Ny.d.mts} +3 -3
- package/dist/{salaries-IJlchnWk.d.mts → salaries-QoNpzRCT.d.ts} +3 -3
- package/dist/{search-B7gr_wOd.d.ts → search-B5ROY6PK.d.ts} +2 -2
- package/dist/{search-B6FJifRE.d.mts → search-f93nrSg3.d.mts} +2 -2
- package/dist/seo.d.mts +17 -18
- package/dist/seo.d.ts +17 -18
- package/dist/server.d.mts +14 -32
- package/dist/server.d.ts +14 -32
- package/dist/sitemap.d.mts +7 -7
- package/dist/sitemap.d.ts +7 -7
- package/dist/sitemap.js +4 -2
- package/dist/sitemap.mjs +4 -2
- package/dist/skills.d.mts +1 -1
- package/dist/skills.d.ts +1 -1
- package/dist/skills.js +1 -1
- package/dist/suggest.d.mts +2 -2
- package/dist/suggest.d.ts +2 -2
- package/dist/theme.d.mts +10 -13
- package/dist/theme.d.ts +10 -13
- package/dist/theme.js +1 -1
- package/dist/theme.mjs +1 -1
- package/dist/{ui-copy-CKfFTtLk.d.mts → ui-copy-CL-VN1xb.d.mts} +2 -3
- package/dist/{ui-copy-CKfFTtLk.d.ts → ui-copy-CL-VN1xb.d.ts} +2 -3
- package/dist/well-known.d.mts +3 -3
- package/dist/well-known.d.ts +3 -3
- package/dist/well-known.js +1 -1
- package/dist/well-known.mjs +1 -1
- package/package.json +46 -38
- package/skills/cavuno-board-client/SKILL.md +1 -2
- package/skills/cavuno-board-filters/SKILL.md +2 -2
- package/skills/cavuno-board-format/SKILL.md +1 -1
- package/skills/cavuno-board-i18n/SKILL.md +3 -3
- package/skills/cavuno-board-job-posting/SKILL.md +1 -1
- package/skills/cavuno-board-messaging/SKILL.md +2 -3
- package/skills/cavuno-board-paywall/SKILL.md +1 -1
- package/skills/cavuno-board-salaries/SKILL.md +1 -1
- package/skills/cavuno-board-seo/SKILL.md +4 -6
- package/skills/cavuno-board-server/SKILL.md +1 -1
- package/skills/cavuno-board-setup/SKILL.md +2 -1
- package/skills/cavuno-board-sitemap/SKILL.md +1 -1
- package/skills/cavuno-board-smoke-test/SKILL.md +4 -13
- package/skills/flavors/tanstack-start/SKILL.md +1 -2
- package/skills/manifest.json +1 -1
- package/dist/_spec-CoL3oYpG.d.mts +0 -5296
- package/dist/_spec-CoL3oYpG.d.ts +0 -5296
|
@@ -0,0 +1,2731 @@
|
|
|
1
|
+
interface components {
|
|
2
|
+
schemas: {
|
|
3
|
+
AccessCheckoutBody: {
|
|
4
|
+
/**
|
|
5
|
+
* @description The offer tier to purchase (from `GET /paywall/offers/enabled`).
|
|
6
|
+
* @enum {string}
|
|
7
|
+
*/
|
|
8
|
+
offerKey: "daily" | "weekly" | "monthly" | "quarterly" | "yearly" | "lifetime";
|
|
9
|
+
/** @description Relative path Stripe returns the buyer to on completion; `session_id` is appended. */
|
|
10
|
+
returnPath: string;
|
|
11
|
+
/** @enum {string} */
|
|
12
|
+
colorMode: "light" | "dark";
|
|
13
|
+
};
|
|
14
|
+
AccessCheckoutSession: {
|
|
15
|
+
/** @enum {string} */
|
|
16
|
+
object: "checkout_session";
|
|
17
|
+
sessionId: string;
|
|
18
|
+
/** @description The Checkout Session client secret to mount the embedded form. */
|
|
19
|
+
clientSecret: string;
|
|
20
|
+
/** @description The board’s connected Stripe account to initialise Stripe.js with. */
|
|
21
|
+
stripeAccountId: string;
|
|
22
|
+
/** @description The platform Stripe publishable key for `loadStripe`. */
|
|
23
|
+
publishableKey: string;
|
|
24
|
+
/**
|
|
25
|
+
* @description `recurring` grants get a manage-subscription portal; `lifetime` do not.
|
|
26
|
+
* @enum {string}
|
|
27
|
+
*/
|
|
28
|
+
offerType: "recurring" | "lifetime";
|
|
29
|
+
};
|
|
30
|
+
AccessCheckoutSessionState: {
|
|
31
|
+
/** @enum {string} */
|
|
32
|
+
object: "checkout_session_state";
|
|
33
|
+
/** @enum {string} */
|
|
34
|
+
status: "open" | "complete" | "expired";
|
|
35
|
+
clientSecret: string | null;
|
|
36
|
+
};
|
|
37
|
+
AccessGrant: {
|
|
38
|
+
/** @enum {string} */
|
|
39
|
+
object: "access_grant";
|
|
40
|
+
hasAccess: boolean;
|
|
41
|
+
/** @enum {string|null} */
|
|
42
|
+
status: "active" | "past_due" | "unpaid" | "incomplete" | "incomplete_expired" | "canceled" | "pending" | null;
|
|
43
|
+
/** @enum {string|null} */
|
|
44
|
+
offerType: "recurring" | "lifetime" | null;
|
|
45
|
+
offerKey: string | null;
|
|
46
|
+
currentPeriodEnd: string | null;
|
|
47
|
+
cancelAtPeriodEnd: boolean;
|
|
48
|
+
};
|
|
49
|
+
AccessPortalBody: {
|
|
50
|
+
/** @description Relative path Stripe returns the buyer to; defaults to the board root. */
|
|
51
|
+
returnPath?: string;
|
|
52
|
+
};
|
|
53
|
+
AccessPortalSession: {
|
|
54
|
+
/** @enum {string} */
|
|
55
|
+
object: "portal_session";
|
|
56
|
+
/** Format: uri */
|
|
57
|
+
url: string;
|
|
58
|
+
};
|
|
59
|
+
AddApplicantNoteBody: {
|
|
60
|
+
/** @description The note text. */
|
|
61
|
+
body: string;
|
|
62
|
+
};
|
|
63
|
+
Alert: {
|
|
64
|
+
/** @description Job-alert preference ID. Also the path key. */
|
|
65
|
+
id: string;
|
|
66
|
+
/** @enum {string} */
|
|
67
|
+
object: "alert";
|
|
68
|
+
label: string | null;
|
|
69
|
+
/** @enum {string} */
|
|
70
|
+
frequency: "weekly";
|
|
71
|
+
isActive: boolean;
|
|
72
|
+
filters: {
|
|
73
|
+
jobFunctions: string[];
|
|
74
|
+
seniorityLevels: string[];
|
|
75
|
+
remoteOptions: string[];
|
|
76
|
+
placeIds: string[];
|
|
77
|
+
salaryMin: number | null;
|
|
78
|
+
salaryMax: number | null;
|
|
79
|
+
salaryCurrency: string | null;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Format: date-time
|
|
83
|
+
* @description When this alert last dispatched a digest, or null.
|
|
84
|
+
*/
|
|
85
|
+
lastSentAt: string | null;
|
|
86
|
+
};
|
|
87
|
+
AlertBody: {
|
|
88
|
+
label?: string;
|
|
89
|
+
/** @enum {string} */
|
|
90
|
+
frequency: "weekly";
|
|
91
|
+
jobFunctions?: string[];
|
|
92
|
+
seniorityLevels?: string[];
|
|
93
|
+
remoteOptions?: string[];
|
|
94
|
+
placeIds?: string[];
|
|
95
|
+
salaryMin?: number | null;
|
|
96
|
+
salaryMax?: number | null;
|
|
97
|
+
salaryCurrency?: string | null;
|
|
98
|
+
};
|
|
99
|
+
Application: {
|
|
100
|
+
/** @description Application ID. Also the `:applicationId` path key. */
|
|
101
|
+
id: string;
|
|
102
|
+
/** @enum {string} */
|
|
103
|
+
object: "application";
|
|
104
|
+
/**
|
|
105
|
+
* @description Coarse candidate-facing status derived from the employer pipeline stage.
|
|
106
|
+
* @enum {string}
|
|
107
|
+
*/
|
|
108
|
+
status: "applied" | "interviewing" | "negotiation" | "hired" | "archived";
|
|
109
|
+
/** Format: date-time */
|
|
110
|
+
appliedAt: string;
|
|
111
|
+
/** Format: date-time */
|
|
112
|
+
updatedAt: string;
|
|
113
|
+
coverNote: string | null;
|
|
114
|
+
candidateName: string | null;
|
|
115
|
+
candidateEmail: string | null;
|
|
116
|
+
candidateLocation: string | null;
|
|
117
|
+
candidateHeadline: string | null;
|
|
118
|
+
resumeFilename: string | null;
|
|
119
|
+
job: {
|
|
120
|
+
id: string;
|
|
121
|
+
title: string;
|
|
122
|
+
slug: string | null;
|
|
123
|
+
companySlug: string | null;
|
|
124
|
+
companyName: string | null;
|
|
125
|
+
} | null;
|
|
126
|
+
};
|
|
127
|
+
ApplyBody: {
|
|
128
|
+
name?: string;
|
|
129
|
+
/** Format: email */
|
|
130
|
+
email?: string;
|
|
131
|
+
coverNote?: string;
|
|
132
|
+
};
|
|
133
|
+
Block: {
|
|
134
|
+
/** @enum {string} */
|
|
135
|
+
object: "block";
|
|
136
|
+
/** @enum {boolean} */
|
|
137
|
+
blocked: true;
|
|
138
|
+
};
|
|
139
|
+
BlockStatus: {
|
|
140
|
+
/** @enum {string} */
|
|
141
|
+
object: "block_status";
|
|
142
|
+
blocked: boolean;
|
|
143
|
+
};
|
|
144
|
+
BlockUserBody: {
|
|
145
|
+
boardUserId: string;
|
|
146
|
+
};
|
|
147
|
+
BlockedUser: {
|
|
148
|
+
id: string;
|
|
149
|
+
/** @enum {string} */
|
|
150
|
+
object: "blocked_user";
|
|
151
|
+
boardUserId: string;
|
|
152
|
+
displayName: string;
|
|
153
|
+
avatarUrl: string | null;
|
|
154
|
+
/** Format: date-time */
|
|
155
|
+
createdAt: string;
|
|
156
|
+
};
|
|
157
|
+
BoardAccessGrant: {
|
|
158
|
+
/** @enum {string} */
|
|
159
|
+
object: "board_access_grant";
|
|
160
|
+
/** @description The board-access grant. Send it as the `X-Board-Access` header on subsequent content reads to pass the password wall. */
|
|
161
|
+
token: string;
|
|
162
|
+
};
|
|
163
|
+
BoardAuthConsumeMagicLinkBody: {
|
|
164
|
+
token: string;
|
|
165
|
+
};
|
|
166
|
+
BoardAuthForgotPasswordBody: {
|
|
167
|
+
/** Format: email */
|
|
168
|
+
email: string;
|
|
169
|
+
};
|
|
170
|
+
BoardAuthLoginBody: {
|
|
171
|
+
/** Format: email */
|
|
172
|
+
email: string;
|
|
173
|
+
password: string;
|
|
174
|
+
};
|
|
175
|
+
BoardAuthLogoutBody: {
|
|
176
|
+
refreshToken: string;
|
|
177
|
+
};
|
|
178
|
+
BoardAuthOAuthAuthorizationUrl: {
|
|
179
|
+
/** @enum {string} */
|
|
180
|
+
object: "oauth_authorization_url";
|
|
181
|
+
/** @enum {string} */
|
|
182
|
+
provider: "google" | "linkedin";
|
|
183
|
+
/** Format: uri */
|
|
184
|
+
authorizeUrl: string;
|
|
185
|
+
};
|
|
186
|
+
BoardAuthOAuthExchangeBody: {
|
|
187
|
+
token: string;
|
|
188
|
+
};
|
|
189
|
+
BoardAuthRefreshBody: {
|
|
190
|
+
refreshToken: string;
|
|
191
|
+
};
|
|
192
|
+
BoardAuthRegisterBody: {
|
|
193
|
+
/**
|
|
194
|
+
* @description Which role profile to create on the board.
|
|
195
|
+
* @enum {string}
|
|
196
|
+
*/
|
|
197
|
+
role: "candidate" | "employer";
|
|
198
|
+
/**
|
|
199
|
+
* @description Registration method. Only `emailpass` is supported.
|
|
200
|
+
* @enum {string}
|
|
201
|
+
*/
|
|
202
|
+
method: "emailpass";
|
|
203
|
+
/** Format: email */
|
|
204
|
+
email: string;
|
|
205
|
+
/** @description Minimum 8 characters. */
|
|
206
|
+
password: string;
|
|
207
|
+
displayName: string;
|
|
208
|
+
};
|
|
209
|
+
BoardAuthRequestMagicLinkBody: {
|
|
210
|
+
/** Format: email */
|
|
211
|
+
email: string;
|
|
212
|
+
/** @description Optional same-origin path to carry through the email link. */
|
|
213
|
+
returnTo?: string;
|
|
214
|
+
};
|
|
215
|
+
BoardAuthResetPasswordBody: {
|
|
216
|
+
token: string;
|
|
217
|
+
/** @description Minimum 8 characters. */
|
|
218
|
+
password: string;
|
|
219
|
+
};
|
|
220
|
+
BoardAuthSession: {
|
|
221
|
+
/** @enum {string} */
|
|
222
|
+
object: "board_auth_session";
|
|
223
|
+
/** @description Short-lived JWT (1 hour). Send as `Authorization: Bearer`. */
|
|
224
|
+
accessToken: string;
|
|
225
|
+
/** @description Opaque single-use refresh token (30 days). Each refresh returns a replacement; a reused token is rejected. */
|
|
226
|
+
refreshToken: string;
|
|
227
|
+
/** @description Access-token expiry, epoch milliseconds. */
|
|
228
|
+
expiresAt: number;
|
|
229
|
+
boardUser: components["schemas"]["BoardUser"];
|
|
230
|
+
};
|
|
231
|
+
BoardAuthVerifyEmailBody: {
|
|
232
|
+
token: string;
|
|
233
|
+
};
|
|
234
|
+
BoardSeo: {
|
|
235
|
+
/** @enum {string} */
|
|
236
|
+
object: "board_seo";
|
|
237
|
+
/** @description Verbatim `ads.txt` content, or `null` when not configured. */
|
|
238
|
+
adsTxt: string | null;
|
|
239
|
+
/** @description IndexNow key-file content, or `null` when not configured. */
|
|
240
|
+
indexNowKey: string | null;
|
|
241
|
+
/** @description Google site-verification token for the `<meta>` tag, or `null`. */
|
|
242
|
+
googleSiteVerification: string | null;
|
|
243
|
+
/**
|
|
244
|
+
* Format: uri
|
|
245
|
+
* @description The board's canonical base URL (honours a configured custom domain). Build `robots.txt`'s `Sitemap:` line (`${canonicalBase}/sitemap.xml`) and canonical links from it.
|
|
246
|
+
*/
|
|
247
|
+
canonicalBase: string;
|
|
248
|
+
/** @description Absolute URLs for the board's configured favicons / app icons (null when unset). The variant key implies the role + size; build `<link rel="icon">` tags + the web-manifest icon list from these. */
|
|
249
|
+
icons: {
|
|
250
|
+
ico: string | null;
|
|
251
|
+
svg: string | null;
|
|
252
|
+
appleTouch: string | null;
|
|
253
|
+
icon192: string | null;
|
|
254
|
+
icon512: string | null;
|
|
255
|
+
iconMaskable512: string | null;
|
|
256
|
+
};
|
|
257
|
+
/** @description Web-manifest metadata; assemble `site.webmanifest` from this + `icons`. */
|
|
258
|
+
manifest: {
|
|
259
|
+
name: string;
|
|
260
|
+
themeColor: string;
|
|
261
|
+
};
|
|
262
|
+
};
|
|
263
|
+
BoardUser: {
|
|
264
|
+
/** @description Board user ID. */
|
|
265
|
+
id: string;
|
|
266
|
+
/** @enum {string} */
|
|
267
|
+
object: "board_user";
|
|
268
|
+
/** @enum {string} */
|
|
269
|
+
role: "candidate" | "employer";
|
|
270
|
+
email: string;
|
|
271
|
+
displayName: string | null;
|
|
272
|
+
emailVerified: boolean;
|
|
273
|
+
};
|
|
274
|
+
BulkMoveApplicantsBody: {
|
|
275
|
+
applicationIds: string[];
|
|
276
|
+
/** @description The target stage id. */
|
|
277
|
+
stageId: string;
|
|
278
|
+
};
|
|
279
|
+
BulkRejectApplicantsBody: {
|
|
280
|
+
applicationIds: string[];
|
|
281
|
+
};
|
|
282
|
+
CandidateAvatar: {
|
|
283
|
+
/** @enum {string} */
|
|
284
|
+
object: "candidate_avatar";
|
|
285
|
+
avatarUrl: string | null;
|
|
286
|
+
};
|
|
287
|
+
CandidateEducation: {
|
|
288
|
+
id: string;
|
|
289
|
+
/** @enum {string} */
|
|
290
|
+
object: "candidate_education";
|
|
291
|
+
institutionName: string;
|
|
292
|
+
institutionUrl: string | null;
|
|
293
|
+
degree: string | null;
|
|
294
|
+
fieldOfStudy: string | null;
|
|
295
|
+
grade: string | null;
|
|
296
|
+
activitiesAndSocieties: string | null;
|
|
297
|
+
startDate: string | null;
|
|
298
|
+
endDate: string | null;
|
|
299
|
+
description: string | null;
|
|
300
|
+
sortOrder: number;
|
|
301
|
+
};
|
|
302
|
+
CandidateExperience: {
|
|
303
|
+
id: string;
|
|
304
|
+
/** @enum {string} */
|
|
305
|
+
object: "candidate_experience";
|
|
306
|
+
title: string;
|
|
307
|
+
companyName: string;
|
|
308
|
+
companyUrl: string | null;
|
|
309
|
+
location: string | null;
|
|
310
|
+
employmentType: string | null;
|
|
311
|
+
locationType: string | null;
|
|
312
|
+
foundVia: string | null;
|
|
313
|
+
startDate: string;
|
|
314
|
+
endDate: string | null;
|
|
315
|
+
description: string | null;
|
|
316
|
+
sortOrder: number;
|
|
317
|
+
experienceSkills: string[];
|
|
318
|
+
};
|
|
319
|
+
CandidateLanguage: {
|
|
320
|
+
/** @enum {string} */
|
|
321
|
+
object: "candidate_language";
|
|
322
|
+
name: string;
|
|
323
|
+
proficiency: string;
|
|
324
|
+
};
|
|
325
|
+
CandidateProfile: {
|
|
326
|
+
id: string;
|
|
327
|
+
/** @enum {string} */
|
|
328
|
+
object: "candidate_profile";
|
|
329
|
+
displayName: string | null;
|
|
330
|
+
bio: string | null;
|
|
331
|
+
avatarUrl: string | null;
|
|
332
|
+
handle: string | null;
|
|
333
|
+
headline: string | null;
|
|
334
|
+
location: string | null;
|
|
335
|
+
/** @enum {string} */
|
|
336
|
+
profileVisibility: "hidden" | "logged_in_only" | "public";
|
|
337
|
+
/** @enum {string} */
|
|
338
|
+
jobSearchStatus: "actively_looking" | "open_to_offers" | "not_looking";
|
|
339
|
+
/** @enum {string} */
|
|
340
|
+
jobSearchStatusVisibleTo: "everyone" | "employers_only";
|
|
341
|
+
openToRelocate: boolean;
|
|
342
|
+
};
|
|
343
|
+
CandidateSkill: {
|
|
344
|
+
/** @enum {string} */
|
|
345
|
+
object: "candidate_skill";
|
|
346
|
+
name: string;
|
|
347
|
+
jobSkillId: string | null;
|
|
348
|
+
};
|
|
349
|
+
ClaimableCompany: {
|
|
350
|
+
id: string;
|
|
351
|
+
/** @enum {string} */
|
|
352
|
+
object: "claimable_company";
|
|
353
|
+
name: string;
|
|
354
|
+
slug: string;
|
|
355
|
+
website: string | null;
|
|
356
|
+
};
|
|
357
|
+
CompanyCategorySalary: {
|
|
358
|
+
/** @enum {string} */
|
|
359
|
+
object: "company_category_salary";
|
|
360
|
+
categorySourceSlug: string;
|
|
361
|
+
categoryCanonicalSlug: string;
|
|
362
|
+
companyName: string;
|
|
363
|
+
companySlug: string;
|
|
364
|
+
companyLogoPath: string | null;
|
|
365
|
+
companyWebsite: string | null;
|
|
366
|
+
categoryName: string;
|
|
367
|
+
overallSalary: {
|
|
368
|
+
avgMin: number;
|
|
369
|
+
avgMax: number;
|
|
370
|
+
jobCount: number;
|
|
371
|
+
} | null;
|
|
372
|
+
bySeniority: {
|
|
373
|
+
seniority: string;
|
|
374
|
+
avgSalaryMin: number;
|
|
375
|
+
avgSalaryMax: number;
|
|
376
|
+
jobCount: number;
|
|
377
|
+
boardAvgMin: number | null;
|
|
378
|
+
boardAvgMax: number | null;
|
|
379
|
+
boardMedianMin: number | null;
|
|
380
|
+
boardMedianMax: number | null;
|
|
381
|
+
boardP25Min: number | null;
|
|
382
|
+
boardP75Min: number | null;
|
|
383
|
+
boardP25Max: number | null;
|
|
384
|
+
boardP75Max: number | null;
|
|
385
|
+
diffPercent: number | null;
|
|
386
|
+
}[];
|
|
387
|
+
competitors: {
|
|
388
|
+
companySlug: string;
|
|
389
|
+
companyName: string;
|
|
390
|
+
logoPath: string | null;
|
|
391
|
+
avgSalaryMin: number;
|
|
392
|
+
avgSalaryMax: number;
|
|
393
|
+
jobCount: number;
|
|
394
|
+
}[];
|
|
395
|
+
boardCategoryAvgMin: number | null;
|
|
396
|
+
boardCategoryAvgMax: number | null;
|
|
397
|
+
boardCategoryP25Min: number | null;
|
|
398
|
+
boardCategoryP75Max: number | null;
|
|
399
|
+
currency: string;
|
|
400
|
+
};
|
|
401
|
+
CompanyMarket: {
|
|
402
|
+
/** @enum {string} */
|
|
403
|
+
object: "company_market";
|
|
404
|
+
slug: string;
|
|
405
|
+
name: string;
|
|
406
|
+
/** @description Number of companies on the board in this market. */
|
|
407
|
+
companyCount: number;
|
|
408
|
+
};
|
|
409
|
+
CompanyMarketRef: {
|
|
410
|
+
/** @description Display name of the market. */
|
|
411
|
+
name: string;
|
|
412
|
+
/** @description Source slug for the market. Use it as the `:market` segment of the market-scoped company browse. */
|
|
413
|
+
slug: string;
|
|
414
|
+
};
|
|
415
|
+
CompanyMembership: {
|
|
416
|
+
id: string;
|
|
417
|
+
/** @enum {string} */
|
|
418
|
+
object: "company_membership";
|
|
419
|
+
/** @enum {string} */
|
|
420
|
+
status: "approved" | "pending_work_email" | "awaiting_admin" | "rejected";
|
|
421
|
+
role: string;
|
|
422
|
+
workEmail: string | null;
|
|
423
|
+
/** Format: date-time */
|
|
424
|
+
workEmailVerifiedAt: string | null;
|
|
425
|
+
company: {
|
|
426
|
+
id: string;
|
|
427
|
+
name: string;
|
|
428
|
+
slug: string | null;
|
|
429
|
+
website: string | null;
|
|
430
|
+
logoUrl: string | null;
|
|
431
|
+
};
|
|
432
|
+
};
|
|
433
|
+
CompanyPublic: {
|
|
434
|
+
/** @description Unique identifier for the object. Use this value as the `{id}` path parameter for the company endpoints (e.g. `GET /v1/companies/{id}`). */
|
|
435
|
+
id: string;
|
|
436
|
+
/**
|
|
437
|
+
* @description String representing the object's type. Objects of the same type share the same value.
|
|
438
|
+
* @enum {string}
|
|
439
|
+
*/
|
|
440
|
+
object: "public_company";
|
|
441
|
+
/** @description Display name of the company. */
|
|
442
|
+
name: string;
|
|
443
|
+
/** @description URL-friendly slug for the company. */
|
|
444
|
+
slug: string;
|
|
445
|
+
/** @description Public company website URL, or `null` if not set. */
|
|
446
|
+
website: string | null;
|
|
447
|
+
/** @description URL of the company logo, or `null` if no logo is set. */
|
|
448
|
+
logoUrl: string | null;
|
|
449
|
+
/** @description Long-form description of the company, or `null` if not set. */
|
|
450
|
+
description: string | null;
|
|
451
|
+
/** @description Total number of public-facing jobs at this company. Currently mirrors `publishedJobCount`. */
|
|
452
|
+
jobCount: number;
|
|
453
|
+
/** @description Number of currently-published, non-expired jobs at this company. */
|
|
454
|
+
publishedJobCount: number;
|
|
455
|
+
links: components["schemas"]["PublicCompanyLinks"];
|
|
456
|
+
};
|
|
457
|
+
CompanyPublicDetail: components["schemas"]["CompanyPublic"] & {
|
|
458
|
+
/** @description Markets (sectors) this company operates in, each with its source slug. Empty when the company has no markets. */
|
|
459
|
+
markets: components["schemas"]["CompanyMarketRef"][];
|
|
460
|
+
};
|
|
461
|
+
CompanySalary: {
|
|
462
|
+
/** @enum {string} */
|
|
463
|
+
object: "company_salary";
|
|
464
|
+
companyName: string;
|
|
465
|
+
companySlug: string;
|
|
466
|
+
companyLogoPath: string | null;
|
|
467
|
+
companyWebsite: string | null;
|
|
468
|
+
overallSalary: {
|
|
469
|
+
avgMin: number;
|
|
470
|
+
avgMax: number;
|
|
471
|
+
jobCount: number;
|
|
472
|
+
} | null;
|
|
473
|
+
bySeniority: {
|
|
474
|
+
seniority: string;
|
|
475
|
+
avgSalaryMin: number;
|
|
476
|
+
avgSalaryMax: number;
|
|
477
|
+
jobCount: number;
|
|
478
|
+
boardAvgMin: number | null;
|
|
479
|
+
boardAvgMax: number | null;
|
|
480
|
+
boardMedianMin: number | null;
|
|
481
|
+
boardMedianMax: number | null;
|
|
482
|
+
boardP25Min: number | null;
|
|
483
|
+
boardP75Min: number | null;
|
|
484
|
+
boardP25Max: number | null;
|
|
485
|
+
boardP75Max: number | null;
|
|
486
|
+
diffPercent: number | null;
|
|
487
|
+
}[];
|
|
488
|
+
competitors: {
|
|
489
|
+
companySlug: string;
|
|
490
|
+
companyName: string;
|
|
491
|
+
logoPath: string | null;
|
|
492
|
+
avgSalaryMin: number;
|
|
493
|
+
avgSalaryMax: number;
|
|
494
|
+
jobCount: number;
|
|
495
|
+
}[];
|
|
496
|
+
topLocations: {
|
|
497
|
+
locationName: string;
|
|
498
|
+
countryCode: string;
|
|
499
|
+
placeSlug: string;
|
|
500
|
+
avgSalaryMin: number;
|
|
501
|
+
avgSalaryMax: number;
|
|
502
|
+
jobCount: number;
|
|
503
|
+
}[];
|
|
504
|
+
byCategory: {
|
|
505
|
+
categorySlug: string;
|
|
506
|
+
categoryName: string;
|
|
507
|
+
avgSalaryMin: number;
|
|
508
|
+
avgSalaryMax: number;
|
|
509
|
+
jobCount: number;
|
|
510
|
+
}[];
|
|
511
|
+
boardOverallAvgMin: number | null;
|
|
512
|
+
boardOverallAvgMax: number | null;
|
|
513
|
+
boardMedianMin: number | null;
|
|
514
|
+
boardMedianMax: number | null;
|
|
515
|
+
boardP25Min: number | null;
|
|
516
|
+
boardP75Min: number | null;
|
|
517
|
+
boardP25Max: number | null;
|
|
518
|
+
boardP75Max: number | null;
|
|
519
|
+
currency: string;
|
|
520
|
+
};
|
|
521
|
+
CompanySuggestion: {
|
|
522
|
+
/** @enum {string} */
|
|
523
|
+
object: "suggestion";
|
|
524
|
+
/**
|
|
525
|
+
* @description discriminator enum property added by openapi-typescript
|
|
526
|
+
* @enum {string}
|
|
527
|
+
*/
|
|
528
|
+
type: "company";
|
|
529
|
+
/** @description Stable company identity. */
|
|
530
|
+
id: string;
|
|
531
|
+
/** @description Public company URL slug. */
|
|
532
|
+
slug: string;
|
|
533
|
+
/** @description Company display name. */
|
|
534
|
+
name: string;
|
|
535
|
+
/** @description Company logo URL, or `null` when none is set. */
|
|
536
|
+
logoUrl: string | null;
|
|
537
|
+
/** @description Live published-job count for this company on the board. */
|
|
538
|
+
jobCount: number;
|
|
539
|
+
};
|
|
540
|
+
ConfirmWorkEmailBody: {
|
|
541
|
+
token: string;
|
|
542
|
+
};
|
|
543
|
+
Conversation: {
|
|
544
|
+
id: string;
|
|
545
|
+
/** @enum {string} */
|
|
546
|
+
object: "conversation";
|
|
547
|
+
/** Format: date-time */
|
|
548
|
+
lastMessageAt: string;
|
|
549
|
+
lastMessageSnippet: string;
|
|
550
|
+
lastMessageAuthorBoardUserId: string;
|
|
551
|
+
/** Format: date-time */
|
|
552
|
+
archivedAt: string | null;
|
|
553
|
+
hasUnread: boolean;
|
|
554
|
+
counterparty: components["schemas"]["ConversationCounterparty"];
|
|
555
|
+
};
|
|
556
|
+
ConversationArchive: {
|
|
557
|
+
/** @enum {string} */
|
|
558
|
+
object: "conversation_archive";
|
|
559
|
+
/** Format: date-time */
|
|
560
|
+
archivedAt: string | null;
|
|
561
|
+
};
|
|
562
|
+
ConversationCounterparty: {
|
|
563
|
+
boardUserId: string;
|
|
564
|
+
displayName: string;
|
|
565
|
+
avatarUrl: string | null;
|
|
566
|
+
companyName: string | null;
|
|
567
|
+
handle: string | null;
|
|
568
|
+
companySlug: string | null;
|
|
569
|
+
};
|
|
570
|
+
ConversationDetail: components["schemas"]["Conversation"] & {
|
|
571
|
+
/** @enum {string} */
|
|
572
|
+
viewerRole: "employer" | "candidate";
|
|
573
|
+
viewerLastReadMessageId: string | null;
|
|
574
|
+
};
|
|
575
|
+
ConversationRef: {
|
|
576
|
+
/** @enum {string} */
|
|
577
|
+
object: "conversation_ref";
|
|
578
|
+
conversationId: string | null;
|
|
579
|
+
};
|
|
580
|
+
CreateCompanyBody: {
|
|
581
|
+
/** @description Public company website URL. Normalized to a canonical apex domain when stored. */
|
|
582
|
+
website?: string;
|
|
583
|
+
/** @description One-line summary of the company. Up to 280 characters. */
|
|
584
|
+
summary?: string;
|
|
585
|
+
/** @description Long-form description of the company. Up to 25,000 characters. */
|
|
586
|
+
description?: string;
|
|
587
|
+
/** @description X (Twitter) profile URL or handle. Stored as the canonical handle. */
|
|
588
|
+
xUrl?: string;
|
|
589
|
+
/** @description LinkedIn company page URL. */
|
|
590
|
+
linkedinUrl?: string;
|
|
591
|
+
/** @description Facebook company page URL. */
|
|
592
|
+
facebookUrl?: string;
|
|
593
|
+
/** @description Canonical market slugs assigned to the company. Pass an empty array to clear all markets. */
|
|
594
|
+
markets?: string[];
|
|
595
|
+
/** @description The company's display name. */
|
|
596
|
+
name: string;
|
|
597
|
+
/** @description URL-friendly slug for the company. Auto-generated from `name` when omitted. */
|
|
598
|
+
slug?: string;
|
|
599
|
+
};
|
|
600
|
+
CreateEducationBody: {
|
|
601
|
+
institutionName: string;
|
|
602
|
+
institutionUrl?: string;
|
|
603
|
+
degree?: string;
|
|
604
|
+
fieldOfStudy?: string;
|
|
605
|
+
grade?: string;
|
|
606
|
+
activitiesAndSocieties?: string;
|
|
607
|
+
startDate?: string;
|
|
608
|
+
endDate?: string;
|
|
609
|
+
description?: string;
|
|
610
|
+
sortOrder?: number;
|
|
611
|
+
};
|
|
612
|
+
CreateExperienceBody: {
|
|
613
|
+
title: string;
|
|
614
|
+
companyName: string;
|
|
615
|
+
startDate: string;
|
|
616
|
+
companyUrl?: string;
|
|
617
|
+
location?: string;
|
|
618
|
+
employmentType?: string;
|
|
619
|
+
locationType?: string;
|
|
620
|
+
foundVia?: string;
|
|
621
|
+
endDate?: string;
|
|
622
|
+
description?: string;
|
|
623
|
+
sortOrder?: number;
|
|
624
|
+
};
|
|
625
|
+
CreateJobPostingBody: {
|
|
626
|
+
submission: {
|
|
627
|
+
companyName: string;
|
|
628
|
+
companyWebsite?: string;
|
|
629
|
+
contactName: string;
|
|
630
|
+
contactEmail: string;
|
|
631
|
+
title: string;
|
|
632
|
+
description: string;
|
|
633
|
+
employmentType: string;
|
|
634
|
+
remoteOption: string;
|
|
635
|
+
officeLocations: {
|
|
636
|
+
/** @enum {string} */
|
|
637
|
+
provider?: "mapbox";
|
|
638
|
+
providerPlaceId?: string;
|
|
639
|
+
displayName: string;
|
|
640
|
+
countryCode?: string;
|
|
641
|
+
region?: string;
|
|
642
|
+
locality?: string;
|
|
643
|
+
city?: string;
|
|
644
|
+
latitude?: number;
|
|
645
|
+
longitude?: number;
|
|
646
|
+
boundingBox?: number[];
|
|
647
|
+
raw?: {
|
|
648
|
+
suggestion?: {
|
|
649
|
+
[key: string]: unknown;
|
|
650
|
+
};
|
|
651
|
+
retrieve?: {
|
|
652
|
+
[key: string]: unknown;
|
|
653
|
+
};
|
|
654
|
+
};
|
|
655
|
+
}[];
|
|
656
|
+
inOfficePeriod?: string;
|
|
657
|
+
inOfficeFrequency?: number;
|
|
658
|
+
seniority?: string;
|
|
659
|
+
applicationUrl: string;
|
|
660
|
+
salaryRangeEnabled: boolean;
|
|
661
|
+
salaryMin?: number;
|
|
662
|
+
salaryMax?: number;
|
|
663
|
+
salaryTimeframe?: string;
|
|
664
|
+
salaryCurrency?: string;
|
|
665
|
+
selectedPlan?: string;
|
|
666
|
+
isFeatured?: boolean;
|
|
667
|
+
remoteWorkingPermits?: {
|
|
668
|
+
type: string;
|
|
669
|
+
value: string;
|
|
670
|
+
label: string;
|
|
671
|
+
}[];
|
|
672
|
+
remoteTimezones?: {
|
|
673
|
+
type: string;
|
|
674
|
+
value: string;
|
|
675
|
+
label: string;
|
|
676
|
+
plusMinus: number;
|
|
677
|
+
offset?: number;
|
|
678
|
+
}[];
|
|
679
|
+
/** @enum {string} */
|
|
680
|
+
remoteSponsorship?: "yes" | "no" | "unknown";
|
|
681
|
+
customFieldValues?: {
|
|
682
|
+
[key: string]: string | string[] | boolean | number;
|
|
683
|
+
};
|
|
684
|
+
};
|
|
685
|
+
remoteAllowedTzOffsets?: number[];
|
|
686
|
+
remoteWorkPermitCountryCodes?: string[];
|
|
687
|
+
logoUrl?: string;
|
|
688
|
+
selectedBilling?: {
|
|
689
|
+
type: string;
|
|
690
|
+
id?: string;
|
|
691
|
+
planId: string;
|
|
692
|
+
};
|
|
693
|
+
invoiceBilling?: {
|
|
694
|
+
billingName?: string;
|
|
695
|
+
address: {
|
|
696
|
+
line1?: string;
|
|
697
|
+
city?: string;
|
|
698
|
+
postalCode?: string;
|
|
699
|
+
country?: string;
|
|
700
|
+
};
|
|
701
|
+
taxId?: string;
|
|
702
|
+
detailFields?: {
|
|
703
|
+
name: string;
|
|
704
|
+
value: string;
|
|
705
|
+
}[];
|
|
706
|
+
};
|
|
707
|
+
colorMode?: string;
|
|
708
|
+
};
|
|
709
|
+
CreatePipelineStageBody: {
|
|
710
|
+
/** @description The job whose pipeline gains the stage. */
|
|
711
|
+
jobId: string;
|
|
712
|
+
/** @description The stage label. */
|
|
713
|
+
label: string;
|
|
714
|
+
};
|
|
715
|
+
CustomFieldDefinition: {
|
|
716
|
+
/** @description Immutable per-board slug used as the key in a job’s `customFieldValues`. */
|
|
717
|
+
key: string;
|
|
718
|
+
/** @description Authoring-default label; the localized public string lives in the board template. */
|
|
719
|
+
label: string;
|
|
720
|
+
/**
|
|
721
|
+
* @description Field type, which dictates the value: `short_text`/`long_text` → string; `single_select` → one option key; `multi_select` → array of option keys; `boolean` → boolean; `number` → number.
|
|
722
|
+
* @enum {string}
|
|
723
|
+
*/
|
|
724
|
+
type: "short_text" | "long_text" | "single_select" | "multi_select" | "boolean" | "number";
|
|
725
|
+
/** @description Present only for `single_select`/`multi_select`. A stored value is one (or, for multi, several) of these option `key`s — never a label. */
|
|
726
|
+
options?: components["schemas"]["CustomFieldOption"][];
|
|
727
|
+
/** @description When true, the value cannot be cleared or left empty on a write (rejected with `custom_field_required`). */
|
|
728
|
+
required: boolean;
|
|
729
|
+
/** @description Inclusive minimum for `number` fields, when set. */
|
|
730
|
+
min?: number;
|
|
731
|
+
/** @description Inclusive maximum for `number` fields, when set. */
|
|
732
|
+
max?: number;
|
|
733
|
+
};
|
|
734
|
+
CustomFieldOption: {
|
|
735
|
+
/** @description Stable option key — the value stored on a job, not the label. */
|
|
736
|
+
key: string;
|
|
737
|
+
/** @description Display label (authoring default; localized per board in the template). */
|
|
738
|
+
label: string;
|
|
739
|
+
};
|
|
740
|
+
EditMessageBody: {
|
|
741
|
+
body: string;
|
|
742
|
+
};
|
|
743
|
+
EmployerApplicant: {
|
|
744
|
+
id: string;
|
|
745
|
+
/** @enum {string} */
|
|
746
|
+
object: "employer_applicant";
|
|
747
|
+
jobId: string;
|
|
748
|
+
candidateBoardUserId: string | null;
|
|
749
|
+
candidateProfileId: string | null;
|
|
750
|
+
candidateProfileHandle: string | null;
|
|
751
|
+
candidateName: string | null;
|
|
752
|
+
candidateEmail: string | null;
|
|
753
|
+
candidateHeadline: string | null;
|
|
754
|
+
candidateLocation: string | null;
|
|
755
|
+
coverNote: string | null;
|
|
756
|
+
resumeFilename: string | null;
|
|
757
|
+
/** @description A short-lived signed URL to the uploaded resume, or `null`. */
|
|
758
|
+
resumeUrl: string | null;
|
|
759
|
+
stage: string;
|
|
760
|
+
/** @description How the application arrived (e.g. `native_apply`). */
|
|
761
|
+
source: string;
|
|
762
|
+
/** Format: date-time */
|
|
763
|
+
appliedAt: string;
|
|
764
|
+
timeline: components["schemas"]["EmployerApplicantTimelineEntry"][];
|
|
765
|
+
};
|
|
766
|
+
EmployerApplicantTimelineEntry: {
|
|
767
|
+
id: string;
|
|
768
|
+
/** @description The activity kind (e.g. `stage_changed`, `note_created`, `application_created`). */
|
|
769
|
+
type: string;
|
|
770
|
+
actorBoardUserId: string | null;
|
|
771
|
+
actorName: string | null;
|
|
772
|
+
noteId: string | null;
|
|
773
|
+
/** @description The note text for a `note_created` entry, else `null`. */
|
|
774
|
+
noteBody: string | null;
|
|
775
|
+
fromStage: string | null;
|
|
776
|
+
toStage: string | null;
|
|
777
|
+
/** Format: date-time */
|
|
778
|
+
createdAt: string;
|
|
779
|
+
};
|
|
780
|
+
EmployerBillingOption: {
|
|
781
|
+
id: string;
|
|
782
|
+
/** @enum {string} */
|
|
783
|
+
object: "employer_billing_option";
|
|
784
|
+
/** @enum {string} */
|
|
785
|
+
type: "subscription" | "order";
|
|
786
|
+
planId: string;
|
|
787
|
+
planName: string;
|
|
788
|
+
/** @enum {string} */
|
|
789
|
+
planKind: "subscription" | "one_time" | "bundle";
|
|
790
|
+
jobsRemaining: number;
|
|
791
|
+
jobsTotal: number;
|
|
792
|
+
featuredRemaining: number;
|
|
793
|
+
featuredTotal: number;
|
|
794
|
+
/**
|
|
795
|
+
* Format: date-time
|
|
796
|
+
* @description When a subscription renews, or `null` for one-time orders.
|
|
797
|
+
*/
|
|
798
|
+
renewsAt: string | null;
|
|
799
|
+
};
|
|
800
|
+
EmployerCheckout: {
|
|
801
|
+
/** @enum {string} */
|
|
802
|
+
object: "employer_checkout";
|
|
803
|
+
/** @enum {string} */
|
|
804
|
+
status: "checkout" | "published" | "invoice_sent";
|
|
805
|
+
/** @description The Stripe Checkout / hosted-invoice URL, or `null`. */
|
|
806
|
+
checkoutUrl: string | null;
|
|
807
|
+
jobId: string;
|
|
808
|
+
jobSlug: string | null;
|
|
809
|
+
};
|
|
810
|
+
EmployerCheckoutBody: {
|
|
811
|
+
billing: {
|
|
812
|
+
/** @enum {string} */
|
|
813
|
+
type: "new";
|
|
814
|
+
planId: string;
|
|
815
|
+
} | {
|
|
816
|
+
/** @enum {string} */
|
|
817
|
+
type: "order";
|
|
818
|
+
planId: string;
|
|
819
|
+
id: string;
|
|
820
|
+
} | {
|
|
821
|
+
/** @enum {string} */
|
|
822
|
+
type: "subscription";
|
|
823
|
+
planId: string;
|
|
824
|
+
id: string;
|
|
825
|
+
};
|
|
826
|
+
invoiceBilling?: {
|
|
827
|
+
billingName?: string;
|
|
828
|
+
/** Format: email */
|
|
829
|
+
email?: string;
|
|
830
|
+
address?: {
|
|
831
|
+
line1?: string;
|
|
832
|
+
city?: string;
|
|
833
|
+
postalCode?: string;
|
|
834
|
+
country?: string;
|
|
835
|
+
};
|
|
836
|
+
taxId?: string;
|
|
837
|
+
detailFields?: {
|
|
838
|
+
name: string;
|
|
839
|
+
value: string;
|
|
840
|
+
}[];
|
|
841
|
+
};
|
|
842
|
+
isFeatured?: boolean;
|
|
843
|
+
/**
|
|
844
|
+
* Format: uri
|
|
845
|
+
* @description Where Stripe returns the buyer on success. Defaults to the board's canonical employer pages.
|
|
846
|
+
*/
|
|
847
|
+
successUrl?: string;
|
|
848
|
+
/**
|
|
849
|
+
* Format: uri
|
|
850
|
+
* @description Where Stripe returns the buyer on cancel.
|
|
851
|
+
*/
|
|
852
|
+
cancelUrl?: string;
|
|
853
|
+
};
|
|
854
|
+
EmployerCompany: {
|
|
855
|
+
id: string;
|
|
856
|
+
/** @enum {string} */
|
|
857
|
+
object: "employer_company";
|
|
858
|
+
name: string;
|
|
859
|
+
slug: string;
|
|
860
|
+
website: string | null;
|
|
861
|
+
description: string | null;
|
|
862
|
+
summary: string | null;
|
|
863
|
+
xUrl: string | null;
|
|
864
|
+
linkedinUrl: string | null;
|
|
865
|
+
facebookUrl: string | null;
|
|
866
|
+
logoUrl: string | null;
|
|
867
|
+
};
|
|
868
|
+
EmployerCreateJobBody: {
|
|
869
|
+
/** @description Long-form description of the role. Up to 25,000 characters. */
|
|
870
|
+
description: string;
|
|
871
|
+
/** @description URL-friendly slug for the job. Auto-generated from `title` when omitted. */
|
|
872
|
+
slug?: string;
|
|
873
|
+
/**
|
|
874
|
+
* @description Employment type of the role.
|
|
875
|
+
* @enum {string}
|
|
876
|
+
*/
|
|
877
|
+
employmentType?: "full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other";
|
|
878
|
+
/**
|
|
879
|
+
* @description Whether the role is on-site, hybrid, or fully remote.
|
|
880
|
+
* @enum {string}
|
|
881
|
+
*/
|
|
882
|
+
remoteOption?: "on_site" | "hybrid" | "remote";
|
|
883
|
+
/** @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. */
|
|
884
|
+
remotePermits?: {
|
|
885
|
+
/** @enum {string} */
|
|
886
|
+
type: "worldwide" | "world_region" | "continent" | "region" | "subregion" | "subdivision" | "country" | "custom";
|
|
887
|
+
value: string;
|
|
888
|
+
}[];
|
|
889
|
+
/** @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. */
|
|
890
|
+
remoteTimezones?: {
|
|
891
|
+
/** @enum {string} */
|
|
892
|
+
type: "all" | "world_region" | "continent" | "region" | "subregion" | "country" | "timezone";
|
|
893
|
+
value: string;
|
|
894
|
+
plusMinus?: number;
|
|
895
|
+
}[];
|
|
896
|
+
/**
|
|
897
|
+
* @description Whether the employer sponsors visas for remote candidates. One of `yes`, `no`, or `unknown`.
|
|
898
|
+
* @enum {string}
|
|
899
|
+
*/
|
|
900
|
+
remoteSponsorship?: "yes" | "no" | "unknown";
|
|
901
|
+
/**
|
|
902
|
+
* @description Seniority level of the role.
|
|
903
|
+
* @enum {string}
|
|
904
|
+
*/
|
|
905
|
+
seniority?: "entry_level" | "associate" | "mid_level" | "senior" | "lead" | "principal" | "director" | "executive";
|
|
906
|
+
/** @description Where candidates apply. Accepts an HTTPS URL, a `mailto:` URI, or a bare email address (normalized to `mailto:` form). Omit to collect applications on the board (built-in applications). */
|
|
907
|
+
applicationUrl?: string;
|
|
908
|
+
/** @description Minimum salary, in `salaryCurrency` units. */
|
|
909
|
+
salaryMin?: number;
|
|
910
|
+
/** @description Maximum salary, in `salaryCurrency` units. */
|
|
911
|
+
salaryMax?: number;
|
|
912
|
+
/** @description Three-letter ISO 4217 currency code for `salaryMin` and `salaryMax`. */
|
|
913
|
+
salaryCurrency?: string;
|
|
914
|
+
/**
|
|
915
|
+
* @description Period the `salaryMin` and `salaryMax` figures are quoted against.
|
|
916
|
+
* @enum {string}
|
|
917
|
+
*/
|
|
918
|
+
salaryTimeframe?: "per_year" | "per_month" | "per_week" | "per_day" | "per_hour";
|
|
919
|
+
/** @description Up to 100 canonical skill slugs from `GET /v1/taxonomies/skills`. Every slug must exist in this account. */
|
|
920
|
+
skills?: string[];
|
|
921
|
+
/** @description Up to 100 canonical category slugs from `GET /v1/taxonomies/categories`. Every slug must exist in this account. */
|
|
922
|
+
categories?: string[];
|
|
923
|
+
/** @description Required education credentials. Each value is one of `high_school`, `associate_degree`, `bachelor_degree`, `professional_certificate`, `postgraduate_degree`, or `no_requirements`. */
|
|
924
|
+
educationRequirements?: ("high_school" | "associate_degree" | "bachelor_degree" | "professional_certificate" | "postgraduate_degree" | "no_requirements")[];
|
|
925
|
+
/** @description Minimum required experience, expressed in months. */
|
|
926
|
+
experienceMonths?: number;
|
|
927
|
+
/** @description If `true`, equivalent experience may substitute for the listed education requirements. */
|
|
928
|
+
experienceInPlaceOfEducation?: boolean;
|
|
929
|
+
/**
|
|
930
|
+
* @description Period denominator for `inOfficeFrequency`.
|
|
931
|
+
* @enum {string}
|
|
932
|
+
*/
|
|
933
|
+
inOfficePeriod?: "per_week" | "per_month" | "per_year";
|
|
934
|
+
/** @description How often the candidate must be in-office over `inOfficePeriod`. */
|
|
935
|
+
inOfficeFrequency?: number;
|
|
936
|
+
/** @description Physical office locations associated with the job. Each entry is forward-geocoded server-side; a country mismatch returns `400 jobs_unresolvable_location`. */
|
|
937
|
+
officeLocations?: components["schemas"]["JobOfficeLocationInput"][];
|
|
938
|
+
/** @description The job title. */
|
|
939
|
+
title: string;
|
|
940
|
+
};
|
|
941
|
+
EmployerJob: components["schemas"]["EmployerJobSummary"] & {
|
|
942
|
+
/** @description Long-form description of the role, or `null` if not specified. */
|
|
943
|
+
description: string | null;
|
|
944
|
+
/** @description Where candidates apply, or `null` if not specified. An HTTPS URL or `mailto:` URI. */
|
|
945
|
+
applicationUrl: string | null;
|
|
946
|
+
/** @description Hierarchical permit selection authored by the employer. The three `remoteWorkPermit*` and `remoteWorldwide` fields are read-only derived projections. */
|
|
947
|
+
remotePermits: {
|
|
948
|
+
type: string;
|
|
949
|
+
value: string;
|
|
950
|
+
}[];
|
|
951
|
+
/** @description Read-only: derived from `remotePermits`. */
|
|
952
|
+
remoteWorldwide: boolean | null;
|
|
953
|
+
/** @description Hierarchical timezone selection. The flat `remoteAllowedTzOffsets` below is the read-only derived projection. */
|
|
954
|
+
remoteTimezones: {
|
|
955
|
+
type: string;
|
|
956
|
+
value: string;
|
|
957
|
+
plusMinus?: number;
|
|
958
|
+
}[];
|
|
959
|
+
/** @description Read-only: derived from `remoteTimezones`. UTC hour offsets. */
|
|
960
|
+
remoteAllowedTzOffsets: number[];
|
|
961
|
+
/** @description Read-only: derived from `remotePermits`. ISO 3166-1 alpha-2. */
|
|
962
|
+
remoteWorkPermitCountryCodes: string[];
|
|
963
|
+
/** @description Read-only: derived from `remotePermits`. ISO 3166-2. */
|
|
964
|
+
remoteWorkPermitSubdivisionCodes: string[];
|
|
965
|
+
/**
|
|
966
|
+
* @description Whether the employer sponsors visas for remote candidates. One of `yes`, `no`, or `unknown`.
|
|
967
|
+
* @enum {string}
|
|
968
|
+
*/
|
|
969
|
+
remoteSponsorship: "yes" | "no" | "unknown";
|
|
970
|
+
/** @description Required education credentials. */
|
|
971
|
+
educationRequirements: ("high_school" | "associate_degree" | "bachelor_degree" | "professional_certificate" | "postgraduate_degree" | "no_requirements")[];
|
|
972
|
+
/** @description Minimum required experience in months, or `null`. */
|
|
973
|
+
experienceMonths: number | null;
|
|
974
|
+
/** @description If `true`, equivalent experience may substitute for education. `null` if not specified. */
|
|
975
|
+
experienceInPlaceOfEducation: boolean | null;
|
|
976
|
+
/**
|
|
977
|
+
* @description Period denominator for `inOfficeFrequency`, or `null`.
|
|
978
|
+
* @enum {string|null}
|
|
979
|
+
*/
|
|
980
|
+
inOfficePeriod: "per_week" | "per_month" | "per_year" | null;
|
|
981
|
+
/** @description How often the candidate must be in-office, or `null`. */
|
|
982
|
+
inOfficeFrequency: number | null;
|
|
983
|
+
company: components["schemas"]["JobCompany"];
|
|
984
|
+
/** @description Physical office locations associated with the job. */
|
|
985
|
+
officeLocations: components["schemas"]["JobOfficeLocation"][];
|
|
986
|
+
};
|
|
987
|
+
/** @description Public-only links. The operator dashboard URL is intentionally omitted on employer responses. */
|
|
988
|
+
EmployerJobLinks: {
|
|
989
|
+
/**
|
|
990
|
+
* Format: uri
|
|
991
|
+
* @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). A draft carries a URL but only resolves once published.
|
|
992
|
+
*/
|
|
993
|
+
public: string | null;
|
|
994
|
+
};
|
|
995
|
+
EmployerJobStat: {
|
|
996
|
+
/** @enum {string} */
|
|
997
|
+
object: "employer_job_stat";
|
|
998
|
+
/** @description The job ID these stats belong to. */
|
|
999
|
+
jobId: string;
|
|
1000
|
+
/** @description Job-detail page-views over the all-time window. */
|
|
1001
|
+
views: number;
|
|
1002
|
+
/** @description Apply-click events over the all-time window. */
|
|
1003
|
+
applyClicks: number;
|
|
1004
|
+
/** @description Native ATS application count, or `null` for an external-apply job (no native pipeline). */
|
|
1005
|
+
applications: number | null;
|
|
1006
|
+
};
|
|
1007
|
+
EmployerJobStatsPoint: {
|
|
1008
|
+
/** @enum {string} */
|
|
1009
|
+
object: "employer_job_stats_point";
|
|
1010
|
+
/** @description The UTC day this bucket covers (`YYYY-MM-DD`). */
|
|
1011
|
+
date: string;
|
|
1012
|
+
/** @description Job-detail page-views on this day. */
|
|
1013
|
+
views: number;
|
|
1014
|
+
/** @description Apply-click events on this day. */
|
|
1015
|
+
applyClicks: number;
|
|
1016
|
+
};
|
|
1017
|
+
EmployerJobSummary: {
|
|
1018
|
+
/** @description Unique identifier for the object. Use this value as the `{id}` path parameter for the job endpoints (e.g. `GET /v1/jobs/{id}`). */
|
|
1019
|
+
id: string;
|
|
1020
|
+
/**
|
|
1021
|
+
* @description String representing the object's type. Objects of the same type share the same value.
|
|
1022
|
+
* @enum {string}
|
|
1023
|
+
*/
|
|
1024
|
+
object: "employer_job";
|
|
1025
|
+
/** @description The job title. */
|
|
1026
|
+
title: string;
|
|
1027
|
+
/** @description URL-friendly slug used in public board URLs, or `null` if no slug is set. */
|
|
1028
|
+
slug: string | null;
|
|
1029
|
+
/**
|
|
1030
|
+
* @description Current status of the job. One of `draft`, `published`, `expired`, or `archived`.
|
|
1031
|
+
* @enum {string}
|
|
1032
|
+
*/
|
|
1033
|
+
status: "draft" | "published" | "expired" | "archived";
|
|
1034
|
+
/** @description Identifier of the company the job belongs to, or `null` if no company is attached. */
|
|
1035
|
+
companyId: string | null;
|
|
1036
|
+
/**
|
|
1037
|
+
* @description Employment type of the role, or `null` if not specified.
|
|
1038
|
+
* @enum {string|null}
|
|
1039
|
+
*/
|
|
1040
|
+
employmentType: "full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other" | null;
|
|
1041
|
+
/**
|
|
1042
|
+
* @description Whether the role is on-site, hybrid, or fully remote, or `null` if not specified.
|
|
1043
|
+
* @enum {string|null}
|
|
1044
|
+
*/
|
|
1045
|
+
remoteOption: "on_site" | "hybrid" | "remote" | null;
|
|
1046
|
+
/**
|
|
1047
|
+
* @description Seniority level of the role, or `null` if not specified.
|
|
1048
|
+
* @enum {string|null}
|
|
1049
|
+
*/
|
|
1050
|
+
seniority: "entry_level" | "associate" | "mid_level" | "senior" | "lead" | "principal" | "director" | "executive" | null;
|
|
1051
|
+
/** @description Minimum salary in `salaryCurrency` units, or `null` if not specified. */
|
|
1052
|
+
salaryMin: number | null;
|
|
1053
|
+
/** @description Maximum salary in `salaryCurrency` units, or `null` if not specified. */
|
|
1054
|
+
salaryMax: number | null;
|
|
1055
|
+
/** @description Three-letter ISO 4217 currency code for the salary range, or `null` if no salary is specified. */
|
|
1056
|
+
salaryCurrency: string | null;
|
|
1057
|
+
/**
|
|
1058
|
+
* @description Period the salary range is quoted against, or `null` if no salary is specified.
|
|
1059
|
+
* @enum {string|null}
|
|
1060
|
+
*/
|
|
1061
|
+
salaryTimeframe: "per_year" | "per_month" | "per_week" | "per_day" | "per_hour" | null;
|
|
1062
|
+
/** @description Whether the job appears in featured slots on the public board. */
|
|
1063
|
+
isFeatured: boolean;
|
|
1064
|
+
/** @description Time at which the job was first published, or `null` if not yet published. ISO 8601 datetime. */
|
|
1065
|
+
publishedAt: string | null;
|
|
1066
|
+
/** @description Time at which the job expires, or `null` if no expiry is set. ISO 8601 datetime. */
|
|
1067
|
+
expiresAt: string | null;
|
|
1068
|
+
/** @description Time at which the job was created. ISO 8601 datetime. */
|
|
1069
|
+
createdAt: string;
|
|
1070
|
+
/** @description Time at which the job was last updated. ISO 8601 datetime. */
|
|
1071
|
+
updatedAt: string;
|
|
1072
|
+
links: components["schemas"]["EmployerJobLinks"];
|
|
1073
|
+
};
|
|
1074
|
+
EmployerPipeline: {
|
|
1075
|
+
/** @enum {string} */
|
|
1076
|
+
object: "employer_pipeline";
|
|
1077
|
+
job: {
|
|
1078
|
+
id: string;
|
|
1079
|
+
title: string;
|
|
1080
|
+
status: string;
|
|
1081
|
+
/** Format: date-time */
|
|
1082
|
+
expiresAt: string | null;
|
|
1083
|
+
};
|
|
1084
|
+
stages: components["schemas"]["EmployerPipelineStage"][];
|
|
1085
|
+
applicants: components["schemas"]["EmployerApplicant"][];
|
|
1086
|
+
};
|
|
1087
|
+
EmployerPipelineStage: {
|
|
1088
|
+
id: string;
|
|
1089
|
+
/** @enum {string} */
|
|
1090
|
+
object: "employer_pipeline_stage";
|
|
1091
|
+
jobId: string;
|
|
1092
|
+
label: string;
|
|
1093
|
+
/** @description The stable system meaning (`review`/`offer`/`hired`/`rejected`), or `null` for a custom employer stage. */
|
|
1094
|
+
systemStage: string | null;
|
|
1095
|
+
isProtected: boolean;
|
|
1096
|
+
hidden: boolean;
|
|
1097
|
+
position: number;
|
|
1098
|
+
};
|
|
1099
|
+
EmployerProfileStats: {
|
|
1100
|
+
/** @enum {string} */
|
|
1101
|
+
object: "employer_profile_stats";
|
|
1102
|
+
/** @description Company profile-page views over the all-time window (tabs and bots excluded). */
|
|
1103
|
+
profileViews: number;
|
|
1104
|
+
};
|
|
1105
|
+
EmployerProfileViewsPoint: {
|
|
1106
|
+
/** @enum {string} */
|
|
1107
|
+
object: "employer_profile_views_point";
|
|
1108
|
+
/** @description The UTC day this bucket covers (`YYYY-MM-DD`). */
|
|
1109
|
+
date: string;
|
|
1110
|
+
/** @description Company profile-page views on this day. */
|
|
1111
|
+
views: number;
|
|
1112
|
+
};
|
|
1113
|
+
EmployerUpdateJobBody: {
|
|
1114
|
+
/** @description Long-form description of the role. Up to 25,000 characters. */
|
|
1115
|
+
description?: string;
|
|
1116
|
+
/** @description URL-friendly slug for the job. Auto-generated from `title` when omitted. */
|
|
1117
|
+
slug?: string;
|
|
1118
|
+
/**
|
|
1119
|
+
* @description Employment type of the role.
|
|
1120
|
+
* @enum {string}
|
|
1121
|
+
*/
|
|
1122
|
+
employmentType?: "full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other";
|
|
1123
|
+
/**
|
|
1124
|
+
* @description Whether the role is on-site, hybrid, or fully remote.
|
|
1125
|
+
* @enum {string}
|
|
1126
|
+
*/
|
|
1127
|
+
remoteOption?: "on_site" | "hybrid" | "remote";
|
|
1128
|
+
/** @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. */
|
|
1129
|
+
remotePermits?: {
|
|
1130
|
+
/** @enum {string} */
|
|
1131
|
+
type: "worldwide" | "world_region" | "continent" | "region" | "subregion" | "subdivision" | "country" | "custom";
|
|
1132
|
+
value: string;
|
|
1133
|
+
}[];
|
|
1134
|
+
/** @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. */
|
|
1135
|
+
remoteTimezones?: {
|
|
1136
|
+
/** @enum {string} */
|
|
1137
|
+
type: "all" | "world_region" | "continent" | "region" | "subregion" | "country" | "timezone";
|
|
1138
|
+
value: string;
|
|
1139
|
+
plusMinus?: number;
|
|
1140
|
+
}[];
|
|
1141
|
+
/**
|
|
1142
|
+
* @description Whether the employer sponsors visas for remote candidates. One of `yes`, `no`, or `unknown`.
|
|
1143
|
+
* @enum {string}
|
|
1144
|
+
*/
|
|
1145
|
+
remoteSponsorship?: "yes" | "no" | "unknown";
|
|
1146
|
+
/**
|
|
1147
|
+
* @description Seniority level of the role.
|
|
1148
|
+
* @enum {string}
|
|
1149
|
+
*/
|
|
1150
|
+
seniority?: "entry_level" | "associate" | "mid_level" | "senior" | "lead" | "principal" | "director" | "executive";
|
|
1151
|
+
/** @description Where candidates apply. Accepts an HTTPS URL, a `mailto:` URI, or a bare email address (normalized to `mailto:` form). Pass `null` to clear the stored value and switch the job to on-board (built-in) applications. Omitted means unchanged. */
|
|
1152
|
+
applicationUrl?: string | null;
|
|
1153
|
+
/** @description Minimum salary, in `salaryCurrency` units. */
|
|
1154
|
+
salaryMin?: number;
|
|
1155
|
+
/** @description Maximum salary, in `salaryCurrency` units. */
|
|
1156
|
+
salaryMax?: number;
|
|
1157
|
+
/** @description Three-letter ISO 4217 currency code for `salaryMin` and `salaryMax`. */
|
|
1158
|
+
salaryCurrency?: string;
|
|
1159
|
+
/**
|
|
1160
|
+
* @description Period the `salaryMin` and `salaryMax` figures are quoted against.
|
|
1161
|
+
* @enum {string}
|
|
1162
|
+
*/
|
|
1163
|
+
salaryTimeframe?: "per_year" | "per_month" | "per_week" | "per_day" | "per_hour";
|
|
1164
|
+
/** @description Up to 100 canonical skill slugs from `GET /v1/taxonomies/skills`. Every slug must exist in this account. */
|
|
1165
|
+
skills?: string[];
|
|
1166
|
+
/** @description Up to 100 canonical category slugs from `GET /v1/taxonomies/categories`. Every slug must exist in this account. */
|
|
1167
|
+
categories?: string[];
|
|
1168
|
+
/** @description Required education credentials. Each value is one of `high_school`, `associate_degree`, `bachelor_degree`, `professional_certificate`, `postgraduate_degree`, or `no_requirements`. */
|
|
1169
|
+
educationRequirements?: ("high_school" | "associate_degree" | "bachelor_degree" | "professional_certificate" | "postgraduate_degree" | "no_requirements")[];
|
|
1170
|
+
/** @description Minimum required experience, expressed in months. */
|
|
1171
|
+
experienceMonths?: number;
|
|
1172
|
+
/** @description If `true`, equivalent experience may substitute for the listed education requirements. */
|
|
1173
|
+
experienceInPlaceOfEducation?: boolean;
|
|
1174
|
+
/**
|
|
1175
|
+
* @description Period denominator for `inOfficeFrequency`.
|
|
1176
|
+
* @enum {string}
|
|
1177
|
+
*/
|
|
1178
|
+
inOfficePeriod?: "per_week" | "per_month" | "per_year";
|
|
1179
|
+
/** @description How often the candidate must be in-office over `inOfficePeriod`. */
|
|
1180
|
+
inOfficeFrequency?: number;
|
|
1181
|
+
/** @description Physical office locations associated with the job. Each entry is forward-geocoded server-side; a country mismatch returns `400 jobs_unresolvable_location`. */
|
|
1182
|
+
officeLocations?: components["schemas"]["JobOfficeLocationInput"][];
|
|
1183
|
+
/** @description The job title. */
|
|
1184
|
+
title?: string;
|
|
1185
|
+
};
|
|
1186
|
+
/** @description The error envelope returned by every non-2xx response. */
|
|
1187
|
+
Error: {
|
|
1188
|
+
error: {
|
|
1189
|
+
/** @description Machine-readable error code, such as `validation_bad_request` or `jobs_not_found`. */
|
|
1190
|
+
code: string;
|
|
1191
|
+
/** @description Human-readable explanation. */
|
|
1192
|
+
message: string;
|
|
1193
|
+
/** @description Unique id for this request. Include it when contacting support. */
|
|
1194
|
+
requestId: string;
|
|
1195
|
+
/** @description Structured context for some errors, such as per-field validation issues. */
|
|
1196
|
+
details?: unknown;
|
|
1197
|
+
};
|
|
1198
|
+
};
|
|
1199
|
+
HandleAvailability: {
|
|
1200
|
+
/** @enum {string} */
|
|
1201
|
+
object: "handle_availability";
|
|
1202
|
+
handle: string;
|
|
1203
|
+
available: boolean;
|
|
1204
|
+
};
|
|
1205
|
+
/** @description Embedded company resource for the job, or `null` if no company is attached. */
|
|
1206
|
+
JobCompany: {
|
|
1207
|
+
/** @description Unique identifier for the company. */
|
|
1208
|
+
id: string;
|
|
1209
|
+
/** @description Display name of the company, or `null` if not yet set. */
|
|
1210
|
+
name: string | null;
|
|
1211
|
+
/** @description URL slug of the company, or `null` if not yet set. */
|
|
1212
|
+
slug: string | null;
|
|
1213
|
+
/** @description URL of the company logo, or `null` if no logo is set. */
|
|
1214
|
+
logoUrl: string | null;
|
|
1215
|
+
/** @description Company website URL, or `null` if no website is set. */
|
|
1216
|
+
website: string | null;
|
|
1217
|
+
} | null;
|
|
1218
|
+
JobOfficeLocation: {
|
|
1219
|
+
/** @description ISO 3166-1 alpha-2 country code, or `null` if the location was not resolved. */
|
|
1220
|
+
countryCode: string | null;
|
|
1221
|
+
/** @description Full country name, or `null` if the location was not resolved. */
|
|
1222
|
+
country: string | null;
|
|
1223
|
+
/** @description Neighborhood or sub-locality, or `null` if not resolved. */
|
|
1224
|
+
locality: string | null;
|
|
1225
|
+
/** @description City, or `null` if not resolved. */
|
|
1226
|
+
city: string | null;
|
|
1227
|
+
/** @description Region, state, or province name, or `null` if not resolved. */
|
|
1228
|
+
region: string | null;
|
|
1229
|
+
/** @description Region or state code (e.g. `CA` for California), or `null` if not resolved. */
|
|
1230
|
+
regionCode: string | null;
|
|
1231
|
+
/** @description Postal or ZIP code, or `null` if not resolved. */
|
|
1232
|
+
postalCode: string | null;
|
|
1233
|
+
/** @description Pre-formatted display name for the location, or `null` if not resolved. */
|
|
1234
|
+
displayName: string | null;
|
|
1235
|
+
};
|
|
1236
|
+
JobOfficeLocationInput: {
|
|
1237
|
+
/** @description Neighborhood or sub-locality. */
|
|
1238
|
+
locality?: string;
|
|
1239
|
+
/** @description City. */
|
|
1240
|
+
city: string;
|
|
1241
|
+
/** @description Region, state, or province. */
|
|
1242
|
+
region?: string;
|
|
1243
|
+
/** @description ISO 3166-1 alpha-2 country code OR recognized country name/alias. Aliases are normalized to canonical alpha-2 server-side (e.g. `US`, `USA`, `United States` → `US`; `UK`, `GB`, `United Kingdom` → `GB`). */
|
|
1244
|
+
country: string;
|
|
1245
|
+
} | {
|
|
1246
|
+
/** @description Free-form location string (e.g. `"Berlin, Germany"`, `"Mountain View, California, USA"`). Mapbox parses + ranks candidates server-side; rejects on low confidence. */
|
|
1247
|
+
query: string;
|
|
1248
|
+
};
|
|
1249
|
+
JobPostingBillingOptions: {
|
|
1250
|
+
/** @enum {string} */
|
|
1251
|
+
object: "job_posting_billing_options";
|
|
1252
|
+
options: {
|
|
1253
|
+
id: string;
|
|
1254
|
+
type: string;
|
|
1255
|
+
planId: string;
|
|
1256
|
+
planName: string;
|
|
1257
|
+
planKind: string;
|
|
1258
|
+
capacities: {
|
|
1259
|
+
key: string;
|
|
1260
|
+
total: number;
|
|
1261
|
+
used: number;
|
|
1262
|
+
remaining: number;
|
|
1263
|
+
}[];
|
|
1264
|
+
jobsRemaining: number;
|
|
1265
|
+
jobsTotal: number;
|
|
1266
|
+
featuredRemaining: number;
|
|
1267
|
+
featuredTotal: number;
|
|
1268
|
+
renewsAt: string | null;
|
|
1269
|
+
}[];
|
|
1270
|
+
};
|
|
1271
|
+
JobPostingBillingOptionsBody: {
|
|
1272
|
+
verificationToken: string;
|
|
1273
|
+
};
|
|
1274
|
+
JobPostingBillingVerification: {
|
|
1275
|
+
/** @enum {string} */
|
|
1276
|
+
object: "job_posting_billing_verification";
|
|
1277
|
+
success: boolean;
|
|
1278
|
+
};
|
|
1279
|
+
JobPostingLogo: {
|
|
1280
|
+
/** @enum {string} */
|
|
1281
|
+
object: "job_posting_logo";
|
|
1282
|
+
publicUrl: string;
|
|
1283
|
+
};
|
|
1284
|
+
JobPostingPlan: {
|
|
1285
|
+
/** @enum {string} */
|
|
1286
|
+
object: "job_posting_plan";
|
|
1287
|
+
id: string;
|
|
1288
|
+
name: string;
|
|
1289
|
+
description: string | null;
|
|
1290
|
+
kind: string;
|
|
1291
|
+
/** @enum {string|null} */
|
|
1292
|
+
billingInterval: "month" | "year" | null;
|
|
1293
|
+
/** @enum {string|null} */
|
|
1294
|
+
purpose: "job_posting" | "talent_access" | null;
|
|
1295
|
+
isRecommended: boolean;
|
|
1296
|
+
displayOrder: number | null;
|
|
1297
|
+
invoiceOnly: boolean;
|
|
1298
|
+
/** @enum {string|null} */
|
|
1299
|
+
publishTiming: "on_issue" | "on_payment" | null;
|
|
1300
|
+
netTermsDays: number | null;
|
|
1301
|
+
prices: {
|
|
1302
|
+
currency: string;
|
|
1303
|
+
amountCents: number;
|
|
1304
|
+
isActive: boolean;
|
|
1305
|
+
}[];
|
|
1306
|
+
features: {
|
|
1307
|
+
key: string | null;
|
|
1308
|
+
value: string | null;
|
|
1309
|
+
}[];
|
|
1310
|
+
};
|
|
1311
|
+
JobPostingResult: {
|
|
1312
|
+
/** @enum {string} */
|
|
1313
|
+
object: "job_posting_result";
|
|
1314
|
+
/** @enum {string} */
|
|
1315
|
+
status: "checkout";
|
|
1316
|
+
checkoutUrl: string;
|
|
1317
|
+
jobId: string;
|
|
1318
|
+
} | {
|
|
1319
|
+
/** @enum {string} */
|
|
1320
|
+
object: "job_posting_result";
|
|
1321
|
+
/** @enum {string} */
|
|
1322
|
+
status: "published";
|
|
1323
|
+
jobId: string;
|
|
1324
|
+
jobSlug: string;
|
|
1325
|
+
} | {
|
|
1326
|
+
/** @enum {string} */
|
|
1327
|
+
object: "job_posting_result";
|
|
1328
|
+
/** @enum {string} */
|
|
1329
|
+
status: "pending_approval";
|
|
1330
|
+
jobId: string;
|
|
1331
|
+
} | {
|
|
1332
|
+
/** @enum {string} */
|
|
1333
|
+
object: "job_posting_result";
|
|
1334
|
+
/** @enum {string} */
|
|
1335
|
+
status: "invoice_sent";
|
|
1336
|
+
jobId: string;
|
|
1337
|
+
};
|
|
1338
|
+
JobPostingSendVerificationBody: {
|
|
1339
|
+
/** Format: email */
|
|
1340
|
+
email: string;
|
|
1341
|
+
};
|
|
1342
|
+
LegalPage: {
|
|
1343
|
+
/** @enum {string} */
|
|
1344
|
+
object: "legal_page";
|
|
1345
|
+
/** @description The resolved legal page type. */
|
|
1346
|
+
type: string;
|
|
1347
|
+
/** @description Page heading (H1), with `{{board_name}}` resolved. */
|
|
1348
|
+
title: string;
|
|
1349
|
+
/** @description Owner-authored prose as portable HTML. Empty string when the page has no text body. */
|
|
1350
|
+
content: string;
|
|
1351
|
+
/** @enum {string} */
|
|
1352
|
+
contentFormat: "html";
|
|
1353
|
+
/** @description Structured impressum legal-entity facts; `null` for non-impressum pages. */
|
|
1354
|
+
legalEntity: {
|
|
1355
|
+
legalName: string | null;
|
|
1356
|
+
address: string | null;
|
|
1357
|
+
} | null;
|
|
1358
|
+
};
|
|
1359
|
+
LocationSalaryDetail: {
|
|
1360
|
+
/** @enum {string} */
|
|
1361
|
+
object: "location_salary_detail";
|
|
1362
|
+
/** @description Immutable English source place slug: the salary-stats key. */
|
|
1363
|
+
sourceSlug: string;
|
|
1364
|
+
/** @description Board-language canonical URL slug: the starter 308 target. */
|
|
1365
|
+
canonicalSlug: string;
|
|
1366
|
+
placeName: string;
|
|
1367
|
+
placeId: string;
|
|
1368
|
+
adminLevel: string;
|
|
1369
|
+
countryCode: string;
|
|
1370
|
+
overallSalary: {
|
|
1371
|
+
avgMin: number;
|
|
1372
|
+
avgMax: number;
|
|
1373
|
+
medianMin: number;
|
|
1374
|
+
medianMax: number;
|
|
1375
|
+
p25Min: number;
|
|
1376
|
+
p75Max: number;
|
|
1377
|
+
jobCount: number;
|
|
1378
|
+
} | null;
|
|
1379
|
+
childLocations: {
|
|
1380
|
+
placeName: string;
|
|
1381
|
+
placeSlug: string;
|
|
1382
|
+
countryCode: string;
|
|
1383
|
+
avgSalaryMin: number;
|
|
1384
|
+
avgSalaryMax: number;
|
|
1385
|
+
medianSalaryMin: number;
|
|
1386
|
+
medianSalaryMax: number;
|
|
1387
|
+
p25SalaryMin: number;
|
|
1388
|
+
p75SalaryMax: number;
|
|
1389
|
+
jobCount: number;
|
|
1390
|
+
currency: string;
|
|
1391
|
+
}[];
|
|
1392
|
+
childLocationsByRegion: {
|
|
1393
|
+
regionName: string;
|
|
1394
|
+
regionSlug: string;
|
|
1395
|
+
cities: {
|
|
1396
|
+
placeName: string;
|
|
1397
|
+
placeSlug: string;
|
|
1398
|
+
countryCode: string;
|
|
1399
|
+
avgSalaryMin: number;
|
|
1400
|
+
avgSalaryMax: number;
|
|
1401
|
+
medianSalaryMin: number;
|
|
1402
|
+
medianSalaryMax: number;
|
|
1403
|
+
p25SalaryMin: number;
|
|
1404
|
+
p75SalaryMax: number;
|
|
1405
|
+
jobCount: number;
|
|
1406
|
+
currency: string;
|
|
1407
|
+
}[];
|
|
1408
|
+
}[];
|
|
1409
|
+
topCategories: {
|
|
1410
|
+
avgSalaryMin: number;
|
|
1411
|
+
avgSalaryMax: number;
|
|
1412
|
+
jobCount: number;
|
|
1413
|
+
categorySlug: string;
|
|
1414
|
+
categoryName: string;
|
|
1415
|
+
}[];
|
|
1416
|
+
topSkills: {
|
|
1417
|
+
avgSalaryMin: number;
|
|
1418
|
+
avgSalaryMax: number;
|
|
1419
|
+
jobCount: number;
|
|
1420
|
+
skillSlug: string;
|
|
1421
|
+
skillName: string;
|
|
1422
|
+
}[];
|
|
1423
|
+
siblingLocations: {
|
|
1424
|
+
placeName: string;
|
|
1425
|
+
placeSlug: string;
|
|
1426
|
+
countryCode: string;
|
|
1427
|
+
avgSalaryMin: number;
|
|
1428
|
+
avgSalaryMax: number;
|
|
1429
|
+
medianSalaryMin: number;
|
|
1430
|
+
medianSalaryMax: number;
|
|
1431
|
+
p25SalaryMin: number;
|
|
1432
|
+
p75SalaryMax: number;
|
|
1433
|
+
jobCount: number;
|
|
1434
|
+
currency: string;
|
|
1435
|
+
}[];
|
|
1436
|
+
boardOverallAvgMin: number | null;
|
|
1437
|
+
boardOverallAvgMax: number | null;
|
|
1438
|
+
currency: string;
|
|
1439
|
+
};
|
|
1440
|
+
LocationSkillsIndex: {
|
|
1441
|
+
/** @enum {string} */
|
|
1442
|
+
object: "location_skills_index";
|
|
1443
|
+
sourceSlug: string;
|
|
1444
|
+
canonicalSlug: string;
|
|
1445
|
+
placeName: string;
|
|
1446
|
+
skills: {
|
|
1447
|
+
slug: string;
|
|
1448
|
+
name: string;
|
|
1449
|
+
avgSalaryMin: number;
|
|
1450
|
+
avgSalaryMax: number;
|
|
1451
|
+
jobCount: number;
|
|
1452
|
+
}[];
|
|
1453
|
+
};
|
|
1454
|
+
LocationTitlesIndex: {
|
|
1455
|
+
/** @enum {string} */
|
|
1456
|
+
object: "location_titles_index";
|
|
1457
|
+
sourceSlug: string;
|
|
1458
|
+
canonicalSlug: string;
|
|
1459
|
+
placeName: string;
|
|
1460
|
+
titles: {
|
|
1461
|
+
slug: string;
|
|
1462
|
+
name: string;
|
|
1463
|
+
avgSalaryMin: number;
|
|
1464
|
+
avgSalaryMax: number;
|
|
1465
|
+
jobCount: number;
|
|
1466
|
+
}[];
|
|
1467
|
+
};
|
|
1468
|
+
Message: {
|
|
1469
|
+
id: string;
|
|
1470
|
+
/** @enum {string} */
|
|
1471
|
+
object: "message";
|
|
1472
|
+
conversationId: string;
|
|
1473
|
+
authorBoardUserId: string;
|
|
1474
|
+
recipientBoardUserId: string;
|
|
1475
|
+
body: string;
|
|
1476
|
+
author: components["schemas"]["MessageAuthor"];
|
|
1477
|
+
/** Format: date-time */
|
|
1478
|
+
sentAt: string;
|
|
1479
|
+
/** Format: date-time */
|
|
1480
|
+
editedAt: string | null;
|
|
1481
|
+
/** Format: date-time */
|
|
1482
|
+
deletedAt: string | null;
|
|
1483
|
+
/** Format: date-time */
|
|
1484
|
+
readAt: string | null;
|
|
1485
|
+
};
|
|
1486
|
+
MessageAuthor: {
|
|
1487
|
+
displayName: string;
|
|
1488
|
+
avatarUrl: string | null;
|
|
1489
|
+
companyName: string | null;
|
|
1490
|
+
};
|
|
1491
|
+
ModerationReport: {
|
|
1492
|
+
/** @enum {string} */
|
|
1493
|
+
object: "moderation_report";
|
|
1494
|
+
id: string;
|
|
1495
|
+
blocked: boolean;
|
|
1496
|
+
};
|
|
1497
|
+
MoveApplicantStageBody: {
|
|
1498
|
+
/** @description The target stage id. */
|
|
1499
|
+
stageId: string;
|
|
1500
|
+
};
|
|
1501
|
+
NotificationPreference: {
|
|
1502
|
+
/** @enum {string} */
|
|
1503
|
+
object: "notification_preference";
|
|
1504
|
+
/** @enum {string} */
|
|
1505
|
+
channel: "messageEmails" | "applicationEmails";
|
|
1506
|
+
subscribed: boolean;
|
|
1507
|
+
updatedAt: number | null;
|
|
1508
|
+
};
|
|
1509
|
+
PaywallOffer: {
|
|
1510
|
+
/** @enum {string} */
|
|
1511
|
+
object: "paywall_offer";
|
|
1512
|
+
/** @description The tier key posted to checkout (e.g. `monthly`, `lifetime`). */
|
|
1513
|
+
offerKey: string;
|
|
1514
|
+
label: string;
|
|
1515
|
+
billingLabel: string;
|
|
1516
|
+
amountCents: number;
|
|
1517
|
+
currency: string;
|
|
1518
|
+
/**
|
|
1519
|
+
* @description `recurring` tiers get a manage-subscription portal; `lifetime` do not.
|
|
1520
|
+
* @enum {string}
|
|
1521
|
+
*/
|
|
1522
|
+
offerType: "recurring" | "lifetime";
|
|
1523
|
+
intervalUnit: string | null;
|
|
1524
|
+
intervalCount: number | null;
|
|
1525
|
+
isDefault: boolean;
|
|
1526
|
+
};
|
|
1527
|
+
Plan: {
|
|
1528
|
+
/** @enum {string} */
|
|
1529
|
+
object: "plan";
|
|
1530
|
+
id: string;
|
|
1531
|
+
name: string;
|
|
1532
|
+
description: string | null;
|
|
1533
|
+
/** @enum {string} */
|
|
1534
|
+
purpose: "job_posting" | "talent_access";
|
|
1535
|
+
/** @enum {string} */
|
|
1536
|
+
kind: "free" | "subscription" | "one_time" | "bundle";
|
|
1537
|
+
/** @enum {string|null} */
|
|
1538
|
+
billingInterval: "month" | "year" | null;
|
|
1539
|
+
isRecommended: boolean;
|
|
1540
|
+
displayOrder: number;
|
|
1541
|
+
invoiceOnly: boolean;
|
|
1542
|
+
/** @enum {string|null} */
|
|
1543
|
+
publishTiming: "on_issue" | "on_payment" | null;
|
|
1544
|
+
netTermsDays: number | null;
|
|
1545
|
+
price: {
|
|
1546
|
+
currency: string;
|
|
1547
|
+
amountCents: number;
|
|
1548
|
+
/** @description The public Stripe Price id used to start checkout. */
|
|
1549
|
+
stripePriceId: string | null;
|
|
1550
|
+
} | null;
|
|
1551
|
+
featureSummary: {
|
|
1552
|
+
durationDays: number;
|
|
1553
|
+
maxActiveJobs: number;
|
|
1554
|
+
featuredSlots: number;
|
|
1555
|
+
/** @enum {string} */
|
|
1556
|
+
featureSelectionMode: "auto" | "manual";
|
|
1557
|
+
};
|
|
1558
|
+
/** @description Talent-access allowances (per billing period). Present only when `purpose` is `talent_access`. `"unlimited"` is a sentinel value. */
|
|
1559
|
+
talent?: {
|
|
1560
|
+
unlocksPerPeriod: string;
|
|
1561
|
+
messagesPerPeriod: string;
|
|
1562
|
+
};
|
|
1563
|
+
};
|
|
1564
|
+
PublicBlogAdjacentPosts: {
|
|
1565
|
+
/** @enum {string} */
|
|
1566
|
+
object: "blog_adjacent_posts";
|
|
1567
|
+
previous: components["schemas"]["PublicBlogPostSummary"] | null;
|
|
1568
|
+
next: components["schemas"]["PublicBlogPostSummary"] | null;
|
|
1569
|
+
};
|
|
1570
|
+
PublicBlogAuthor: components["schemas"]["PublicBlogAuthorEmbed"] & {
|
|
1571
|
+
/** @enum {string} */
|
|
1572
|
+
object: "public_blog_author";
|
|
1573
|
+
};
|
|
1574
|
+
PublicBlogAuthorEmbed: {
|
|
1575
|
+
id: string;
|
|
1576
|
+
name: string;
|
|
1577
|
+
slug: string;
|
|
1578
|
+
bio: string | null;
|
|
1579
|
+
avatarUrl: string | null;
|
|
1580
|
+
websiteUrl: string | null;
|
|
1581
|
+
twitterUrl: string | null;
|
|
1582
|
+
linkedinUrl: string | null;
|
|
1583
|
+
githubUrl: string | null;
|
|
1584
|
+
};
|
|
1585
|
+
PublicBlogPost: components["schemas"]["PublicBlogPostSummary"] & {
|
|
1586
|
+
html: string | null;
|
|
1587
|
+
ogImageUrl: string | null;
|
|
1588
|
+
featureImageCaption: string | null;
|
|
1589
|
+
seoTitle: string | null;
|
|
1590
|
+
seoDescription: string | null;
|
|
1591
|
+
redirected: boolean;
|
|
1592
|
+
newSlug: string | null;
|
|
1593
|
+
};
|
|
1594
|
+
PublicBlogPostSummary: {
|
|
1595
|
+
id: string;
|
|
1596
|
+
/** @enum {string} */
|
|
1597
|
+
object: "public_blog_post";
|
|
1598
|
+
title: string;
|
|
1599
|
+
slug: string;
|
|
1600
|
+
featured: boolean;
|
|
1601
|
+
coverUrl: string | null;
|
|
1602
|
+
featureImageAlt: string | null;
|
|
1603
|
+
customExcerpt: string | null;
|
|
1604
|
+
readingTimeMin: number | null;
|
|
1605
|
+
publishedAt: string | null;
|
|
1606
|
+
canonicalUrl: string | null;
|
|
1607
|
+
createdAt: string;
|
|
1608
|
+
authors: components["schemas"]["PublicBlogAuthorEmbed"][];
|
|
1609
|
+
tags: components["schemas"]["PublicBlogTagEmbed"][];
|
|
1610
|
+
};
|
|
1611
|
+
PublicBlogSearchBody: {
|
|
1612
|
+
/** @description Free-text search query. Up to 200 characters. */
|
|
1613
|
+
query: string;
|
|
1614
|
+
/** @description An opaque pagination cursor returned in the `nextCursor` field of a previous response. Pass it back to fetch the next page of results. */
|
|
1615
|
+
cursor?: string | null;
|
|
1616
|
+
/** @description A limit on the number of objects to be returned. Limit can range between 1 and 50. */
|
|
1617
|
+
limit?: number;
|
|
1618
|
+
/**
|
|
1619
|
+
* @description The number of posts to skip — the search page offset. Takes precedence over `cursor`; pair with the response `count` to page in parallel. `offset + limit` may not exceed 10,000.
|
|
1620
|
+
* @example 0
|
|
1621
|
+
*/
|
|
1622
|
+
offset?: number;
|
|
1623
|
+
};
|
|
1624
|
+
PublicBlogTag: components["schemas"]["PublicBlogTagEmbed"] & {
|
|
1625
|
+
/** @enum {string} */
|
|
1626
|
+
object: "public_blog_tag";
|
|
1627
|
+
};
|
|
1628
|
+
PublicBlogTagEmbed: {
|
|
1629
|
+
id: string;
|
|
1630
|
+
name: string;
|
|
1631
|
+
slug: string;
|
|
1632
|
+
description: string | null;
|
|
1633
|
+
};
|
|
1634
|
+
PublicBoardContext: {
|
|
1635
|
+
/** @enum {string} */
|
|
1636
|
+
object: "public_board";
|
|
1637
|
+
/** @description Immutable board identifier (`boards_…`). */
|
|
1638
|
+
id: string;
|
|
1639
|
+
/** @description Mutable canonical board slug. */
|
|
1640
|
+
slug: string;
|
|
1641
|
+
name: string;
|
|
1642
|
+
/** @description Board language (ISO code); defaults to "en". */
|
|
1643
|
+
language: string;
|
|
1644
|
+
logoUrl: string | null;
|
|
1645
|
+
/** @description Active custom-domain hostname, or null. */
|
|
1646
|
+
primaryDomain: string | null;
|
|
1647
|
+
/** @description Whitelabel toggle (default `true`). Render the "Powered by Cavuno" badge unless `false`. */
|
|
1648
|
+
showCavunoBranding: boolean;
|
|
1649
|
+
features: {
|
|
1650
|
+
jobAlerts: boolean;
|
|
1651
|
+
candidates: boolean;
|
|
1652
|
+
employers: boolean;
|
|
1653
|
+
blog: boolean;
|
|
1654
|
+
talentDirectory: boolean;
|
|
1655
|
+
registrationWall: boolean;
|
|
1656
|
+
passwordProtected: boolean;
|
|
1657
|
+
publicJobSubmission: boolean;
|
|
1658
|
+
candidatePaywall: boolean;
|
|
1659
|
+
impressum: boolean;
|
|
1660
|
+
/** @description Whether the board accepts native (on-board ATS) applications. `false` means external-applications-only: the server rejects native submissions to `POST /jobs/:jobSlug/apply` with `applications_native_disabled` (422). Clients should hide native apply UI and treat a job with no external `applicationUrl` as not-applyable. */
|
|
1661
|
+
nativeApplications: boolean;
|
|
1662
|
+
/** @description Whether applicant↔employer messaging is enabled on the board. `false` means the `me/conversations` route family rejects with `messaging_disabled` (403). Hide inbox/dock/Message CTAs. */
|
|
1663
|
+
messaging: boolean;
|
|
1664
|
+
};
|
|
1665
|
+
/**
|
|
1666
|
+
* @description The tri-state behind `features.talentDirectory` (which is `visibility === 'public'`). Link /talent whenever this is not `'off'`. An employers-only directory renders a sign-in upsell for anonymous visitors, matching the hosted chrome.
|
|
1667
|
+
* @enum {string}
|
|
1668
|
+
*/
|
|
1669
|
+
talentDirectoryVisibility: "off" | "public" | "employers_only";
|
|
1670
|
+
analytics: {
|
|
1671
|
+
ga4MeasurementId: string | null;
|
|
1672
|
+
gtmId: string | null;
|
|
1673
|
+
metaPixelId: string | null;
|
|
1674
|
+
linkedInPartnerId: string | null;
|
|
1675
|
+
cookieConsentRequired: boolean;
|
|
1676
|
+
};
|
|
1677
|
+
theme: {
|
|
1678
|
+
mode: string;
|
|
1679
|
+
schemeId: string;
|
|
1680
|
+
typography: {
|
|
1681
|
+
fontSans: string;
|
|
1682
|
+
fontHeading?: string | null;
|
|
1683
|
+
};
|
|
1684
|
+
colors: {
|
|
1685
|
+
light: {
|
|
1686
|
+
[key: string]: unknown;
|
|
1687
|
+
};
|
|
1688
|
+
dark: {
|
|
1689
|
+
[key: string]: unknown;
|
|
1690
|
+
};
|
|
1691
|
+
};
|
|
1692
|
+
} | null;
|
|
1693
|
+
/** @description Operator-defined custom job-field definitions, in display order. Board-wide; the frontend uses these to render and localize each job's opaque `customFieldValues`. Empty when the board defines none. Display-only: not filterable or searchable in v1. */
|
|
1694
|
+
customFields: components["schemas"]["CustomFieldDefinition"][];
|
|
1695
|
+
/** @description Stored operator label overrides by config group (`jobCardLabels`, `navLabels`, `breadcrumbsLabels`, …): plain-text chrome copy to merge over the `@cavuno/board` `uiCopy(language)` catalog via `uiCopy(language, labels)`. Empty object when the board stores none. */
|
|
1696
|
+
labels: {
|
|
1697
|
+
[key: string]: {
|
|
1698
|
+
[key: string]: string;
|
|
1699
|
+
};
|
|
1700
|
+
};
|
|
1701
|
+
/** @description Footer/brand data the hosted board footer renders (description, contact, website + social links, navigation order). The brand/social URLs (`websiteUrl`, `facebookUrl`, `linkedinUrl`, `xUrl`) are sanitized to absolute http(s); `customLinks[].url` is served verbatim (see its own note). */
|
|
1702
|
+
footer: {
|
|
1703
|
+
/** @description Operator-written footer brand description. May carry a `{{board_name}}` placeholder. Resolve it before rendering. When null, fall back to the label catalog's `footer.defaultDescription` template. */
|
|
1704
|
+
description: string | null;
|
|
1705
|
+
/** @description Public contact email for the footer About column (render as `mailto:`). */
|
|
1706
|
+
contactEmail: string | null;
|
|
1707
|
+
websiteUrl: string | null;
|
|
1708
|
+
/** @description X (Twitter) profile URL, normalized from the stored handle. */
|
|
1709
|
+
xUrl: string | null;
|
|
1710
|
+
facebookUrl: string | null;
|
|
1711
|
+
linkedinUrl: string | null;
|
|
1712
|
+
/** @description Operator-configured navigation order: system item ids (`home`, `companies`, `pricing`, `blog`) and `custom:<id>` refs into `customLinks`. Empty when the operator never reordered. Render the system defaults. System items still gate on their feature flags (e.g. `blog` only when `features.blog`). */
|
|
1713
|
+
navigationOrder: string[];
|
|
1714
|
+
/** @description Operator-defined navigation links referenced from `navigationOrder` as `custom:<id>`; links not referenced there append after the system items (hosted-footer behavior). Each `url` is served verbatim (trimmed only) and may be a relative path (e.g. `/hub`): unlike the brand/social URLs it is NOT run through http(s) sanitization (matching the hosted footer, which supports relative links), so a consumer MUST sanitize it before binding to an anchor href. */
|
|
1715
|
+
customLinks: {
|
|
1716
|
+
id: string;
|
|
1717
|
+
label: string;
|
|
1718
|
+
url: string;
|
|
1719
|
+
}[];
|
|
1720
|
+
};
|
|
1721
|
+
};
|
|
1722
|
+
PublicCompaniesSearchBody: {
|
|
1723
|
+
/** @description Free-text search query matched against company name. Up to 200 characters. */
|
|
1724
|
+
query?: string;
|
|
1725
|
+
/** @description Scope the results to companies in a single market (sector), by the market slug. Resolves a board-language or English slug; an unknown slug returns 404. Use `GET /boards/:identifier/companies/markets/:market` to resolve a slug to its canonical form first. */
|
|
1726
|
+
marketSlug?: string;
|
|
1727
|
+
/** @description An opaque pagination cursor returned in the `nextCursor` field of a previous response. Pass it back to fetch the next page of results. */
|
|
1728
|
+
cursor?: string | null;
|
|
1729
|
+
/** @description A limit on the number of objects to be returned. Limit can range between 1 and 100. */
|
|
1730
|
+
limit?: number;
|
|
1731
|
+
/**
|
|
1732
|
+
* @description The number of companies to skip — the company catalog page offset. Takes precedence over `cursor`; pair with the response `count` to page in parallel. `offset + limit` may not exceed 10,000.
|
|
1733
|
+
* @example 0
|
|
1734
|
+
*/
|
|
1735
|
+
offset?: number;
|
|
1736
|
+
};
|
|
1737
|
+
/** @description Public-only links. The admin URL is intentionally omitted on public-board responses. */
|
|
1738
|
+
PublicCompanyLinks: {
|
|
1739
|
+
/**
|
|
1740
|
+
* Format: uri
|
|
1741
|
+
* @description Canonical public URL for this company on the board, or `null` when no slug is set.
|
|
1742
|
+
*/
|
|
1743
|
+
public: string | null;
|
|
1744
|
+
};
|
|
1745
|
+
PublicJob: {
|
|
1746
|
+
/** @description Unique identifier for the object. Use this value as the `{id}` path parameter for the job endpoints (e.g. `GET /v1/jobs/{id}`). */
|
|
1747
|
+
id: string;
|
|
1748
|
+
/**
|
|
1749
|
+
* @description String representing the object's type. Objects of the same type share the same value.
|
|
1750
|
+
* @enum {string}
|
|
1751
|
+
*/
|
|
1752
|
+
object: "public_job";
|
|
1753
|
+
/** @description The job title. */
|
|
1754
|
+
title: string;
|
|
1755
|
+
/** @description URL-friendly slug used in public board URLs, or `null` if no slug is set. */
|
|
1756
|
+
slug: string | null;
|
|
1757
|
+
/**
|
|
1758
|
+
* @description Current status of the job. One of `draft`, `published`, `expired`, or `archived`.
|
|
1759
|
+
* @enum {string}
|
|
1760
|
+
*/
|
|
1761
|
+
status: "draft" | "published" | "expired" | "archived";
|
|
1762
|
+
/** @description Identifier of the company the job belongs to, or `null` if no company is attached. */
|
|
1763
|
+
companyId: string | null;
|
|
1764
|
+
/**
|
|
1765
|
+
* @description Employment type of the role, or `null` if not specified.
|
|
1766
|
+
* @enum {string|null}
|
|
1767
|
+
*/
|
|
1768
|
+
employmentType: "full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other" | null;
|
|
1769
|
+
/**
|
|
1770
|
+
* @description Whether the role is on-site, hybrid, or fully remote, or `null` if not specified.
|
|
1771
|
+
* @enum {string|null}
|
|
1772
|
+
*/
|
|
1773
|
+
remoteOption: "on_site" | "hybrid" | "remote" | null;
|
|
1774
|
+
/**
|
|
1775
|
+
* @description Seniority level of the role, or `null` if not specified.
|
|
1776
|
+
* @enum {string|null}
|
|
1777
|
+
*/
|
|
1778
|
+
seniority: "entry_level" | "associate" | "mid_level" | "senior" | "lead" | "principal" | "director" | "executive" | null;
|
|
1779
|
+
/** @description Minimum salary in `salaryCurrency` units, or `null` if not specified. */
|
|
1780
|
+
salaryMin: number | null;
|
|
1781
|
+
/** @description Maximum salary in `salaryCurrency` units, or `null` if not specified. */
|
|
1782
|
+
salaryMax: number | null;
|
|
1783
|
+
/** @description Three-letter ISO 4217 currency code for the salary range, or `null` if no salary is specified. */
|
|
1784
|
+
salaryCurrency: string | null;
|
|
1785
|
+
/**
|
|
1786
|
+
* @description Period the salary range is quoted against, or `null` if no salary is specified.
|
|
1787
|
+
* @enum {string|null}
|
|
1788
|
+
*/
|
|
1789
|
+
salaryTimeframe: "per_year" | "per_month" | "per_week" | "per_day" | "per_hour" | null;
|
|
1790
|
+
/** @description Whether the job appears in featured slots on the public board. */
|
|
1791
|
+
isFeatured: boolean;
|
|
1792
|
+
/** @description Time at which the job was first published, or `null` if not yet published. ISO 8601 datetime. */
|
|
1793
|
+
publishedAt: string | null;
|
|
1794
|
+
/** @description Time at which the job expires, or `null` if no expiry is set. ISO 8601 datetime. */
|
|
1795
|
+
expiresAt: string | null;
|
|
1796
|
+
/** @description Time at which the job was created. ISO 8601 datetime. */
|
|
1797
|
+
createdAt: string;
|
|
1798
|
+
/** @description Time at which the job was last updated. ISO 8601 datetime. */
|
|
1799
|
+
updatedAt: string;
|
|
1800
|
+
links: components["schemas"]["PublicJobLinks"];
|
|
1801
|
+
/** @description Long-form description of the role, or `null` if not specified. */
|
|
1802
|
+
description: string | null;
|
|
1803
|
+
/** @description Where candidates apply, or `null` if not specified. An HTTPS URL or `mailto:` URI. */
|
|
1804
|
+
applicationUrl: string | null;
|
|
1805
|
+
/** @description Hierarchical permit selection authored by the board owner. The three `remoteWorkPermit*` and `remoteWorldwide` fields are read-only derived projections. */
|
|
1806
|
+
remotePermits: {
|
|
1807
|
+
type: string;
|
|
1808
|
+
value: string;
|
|
1809
|
+
}[];
|
|
1810
|
+
/** @description Read-only: derived from `remotePermits`. `true` only when the authored selection is a single `{type:"worldwide"}` entry. */
|
|
1811
|
+
remoteWorldwide: boolean | null;
|
|
1812
|
+
/** @description Hierarchical timezone selection. The flat `remoteAllowedTzOffsets` field below is the read-only derived projection. */
|
|
1813
|
+
remoteTimezones: {
|
|
1814
|
+
type: string;
|
|
1815
|
+
value: string;
|
|
1816
|
+
plusMinus?: number;
|
|
1817
|
+
}[];
|
|
1818
|
+
/** @description Read-only: derived from `remoteTimezones`. UTC hour offsets used by the job-search index. */
|
|
1819
|
+
remoteAllowedTzOffsets: number[];
|
|
1820
|
+
/** @description Read-only: derived from `remotePermits` (hierarchical groups fan out to alpha2 sets; subdivisions auto-add the parent country). ISO 3166-1 alpha-2 codes. */
|
|
1821
|
+
remoteWorkPermitCountryCodes: string[];
|
|
1822
|
+
/** @description Read-only: derived from `remotePermits` (subdivision entries only). ISO 3166-2 codes. */
|
|
1823
|
+
remoteWorkPermitSubdivisionCodes: string[];
|
|
1824
|
+
/**
|
|
1825
|
+
* @description Whether the employer sponsors visas for remote candidates. One of `yes`, `no`, or `unknown`.
|
|
1826
|
+
* @enum {string}
|
|
1827
|
+
*/
|
|
1828
|
+
remoteSponsorship: "yes" | "no" | "unknown";
|
|
1829
|
+
/** @description Required education credentials. Each value is one of `high_school`, `associate_degree`, `bachelor_degree`, `professional_certificate`, `postgraduate_degree`, or `no_requirements`. */
|
|
1830
|
+
educationRequirements: ("high_school" | "associate_degree" | "bachelor_degree" | "professional_certificate" | "postgraduate_degree" | "no_requirements")[];
|
|
1831
|
+
/** @description Minimum required experience in months, or `null` if not specified. */
|
|
1832
|
+
experienceMonths: number | null;
|
|
1833
|
+
/** @description If `true`, equivalent experience may substitute for the listed education requirements. `null` if not specified. */
|
|
1834
|
+
experienceInPlaceOfEducation: boolean | null;
|
|
1835
|
+
/**
|
|
1836
|
+
* @description Period denominator for `inOfficeFrequency`, or `null` if not specified.
|
|
1837
|
+
* @enum {string|null}
|
|
1838
|
+
*/
|
|
1839
|
+
inOfficePeriod: "per_week" | "per_month" | "per_year" | null;
|
|
1840
|
+
/** @description How often the candidate must be in-office over `inOfficePeriod`, or `null` if not specified. */
|
|
1841
|
+
inOfficeFrequency: number | null;
|
|
1842
|
+
company: components["schemas"]["JobCompany"];
|
|
1843
|
+
/** @description Physical office locations associated with the job. */
|
|
1844
|
+
officeLocations: components["schemas"]["JobOfficeLocation"][];
|
|
1845
|
+
/** @description Resolved job categories (slug + board display name): same shape as the card; names joined server-side. */
|
|
1846
|
+
categories: {
|
|
1847
|
+
slug: string;
|
|
1848
|
+
name: string;
|
|
1849
|
+
}[];
|
|
1850
|
+
/** @description Resolved job skills (slug + board display name). */
|
|
1851
|
+
skills: {
|
|
1852
|
+
slug: string;
|
|
1853
|
+
name: string;
|
|
1854
|
+
}[];
|
|
1855
|
+
/** @description Place ancestor chain (country → region → city) for the breadcrumb; each `{slug,name}` links to `/jobs/locations/:slug`. Source-language. */
|
|
1856
|
+
placeHierarchy: {
|
|
1857
|
+
slug: string;
|
|
1858
|
+
name: string;
|
|
1859
|
+
}[];
|
|
1860
|
+
/** @description Opaque, display-only custom-field values, keyed by each field's `key`. Values are the option `key`(s) for select fields, or the raw boolean/number/text otherwise. Resolve labels via the board's `customFields` definitions (see `GET /v1/boards/:identifier`). `{}` when the board defines no custom fields. Not filterable or searchable in v1. */
|
|
1861
|
+
customFieldValues: {
|
|
1862
|
+
[key: string]: string | string[] | boolean | number;
|
|
1863
|
+
};
|
|
1864
|
+
};
|
|
1865
|
+
PublicJobAlertConfirmation: {
|
|
1866
|
+
/** @enum {string} */
|
|
1867
|
+
object: "job_alert_confirmation";
|
|
1868
|
+
/**
|
|
1869
|
+
* @description Outcome of the confirmation. Always returned with HTTP 200 so the consumer renders by status (the token may be valid, stale, or unknown).
|
|
1870
|
+
* @enum {string}
|
|
1871
|
+
*/
|
|
1872
|
+
status: "confirmed" | "already_confirmed" | "expired" | "not_found";
|
|
1873
|
+
};
|
|
1874
|
+
PublicJobAlertManageResult: {
|
|
1875
|
+
/** @enum {string} */
|
|
1876
|
+
object: "job_alert_manage_result";
|
|
1877
|
+
success: boolean;
|
|
1878
|
+
};
|
|
1879
|
+
PublicJobAlertManageState: {
|
|
1880
|
+
/** @enum {string} */
|
|
1881
|
+
object: "job_alert_manage_state";
|
|
1882
|
+
email: string;
|
|
1883
|
+
confirmed: boolean;
|
|
1884
|
+
unsubscribed: boolean;
|
|
1885
|
+
preferences: {
|
|
1886
|
+
id: string;
|
|
1887
|
+
label: string | null;
|
|
1888
|
+
/** @enum {string} */
|
|
1889
|
+
frequency: "weekly";
|
|
1890
|
+
isActive: boolean;
|
|
1891
|
+
filters: {
|
|
1892
|
+
jobFunctions?: string[];
|
|
1893
|
+
seniorityLevels?: string[];
|
|
1894
|
+
remoteOptions?: string[];
|
|
1895
|
+
placeIds?: string[];
|
|
1896
|
+
salaryMin?: number | null;
|
|
1897
|
+
salaryMax?: number | null;
|
|
1898
|
+
salaryCurrency?: string | null;
|
|
1899
|
+
};
|
|
1900
|
+
manageToken: string;
|
|
1901
|
+
}[];
|
|
1902
|
+
};
|
|
1903
|
+
PublicJobAlertResend: {
|
|
1904
|
+
/** @enum {string} */
|
|
1905
|
+
object: "job_alert_confirmation_resend";
|
|
1906
|
+
/**
|
|
1907
|
+
* @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).
|
|
1908
|
+
* @enum {string}
|
|
1909
|
+
*/
|
|
1910
|
+
status: "submitted";
|
|
1911
|
+
};
|
|
1912
|
+
PublicJobAlertSubscription: {
|
|
1913
|
+
/** @enum {string} */
|
|
1914
|
+
object: "job_alert_subscription";
|
|
1915
|
+
/**
|
|
1916
|
+
* @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.
|
|
1917
|
+
* @enum {string}
|
|
1918
|
+
*/
|
|
1919
|
+
status: "submitted";
|
|
1920
|
+
};
|
|
1921
|
+
PublicJobCard: {
|
|
1922
|
+
id: string;
|
|
1923
|
+
/** @enum {string} */
|
|
1924
|
+
object: "job_card";
|
|
1925
|
+
slug: string;
|
|
1926
|
+
title: string;
|
|
1927
|
+
/**
|
|
1928
|
+
* Format: date-time
|
|
1929
|
+
* @description ISO 8601 publish timestamp, or `null` if unpublished.
|
|
1930
|
+
*/
|
|
1931
|
+
publishedAt: string | null;
|
|
1932
|
+
/** @enum {string|null} */
|
|
1933
|
+
employmentType: "full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other" | null;
|
|
1934
|
+
/** @enum {string|null} */
|
|
1935
|
+
remoteOption: "on_site" | "hybrid" | "remote" | null;
|
|
1936
|
+
/** @description Display region label for remote jobs (e.g. "United States", "Worldwide"); `null` for non-remote jobs. */
|
|
1937
|
+
remoteLocationLabel: string | null;
|
|
1938
|
+
salaryMin: number | null;
|
|
1939
|
+
salaryMax: number | null;
|
|
1940
|
+
salaryCurrency: string | null;
|
|
1941
|
+
salaryTimeframe: string | null;
|
|
1942
|
+
isFeatured: boolean;
|
|
1943
|
+
locationLabel: string | null;
|
|
1944
|
+
/** @description Embedded company summary, or `null` if none is attached. */
|
|
1945
|
+
company: {
|
|
1946
|
+
slug: string;
|
|
1947
|
+
name: string;
|
|
1948
|
+
logoUrl: string | null;
|
|
1949
|
+
} | null;
|
|
1950
|
+
categories: {
|
|
1951
|
+
slug: string;
|
|
1952
|
+
name: string;
|
|
1953
|
+
}[];
|
|
1954
|
+
skills: {
|
|
1955
|
+
slug: string;
|
|
1956
|
+
name: string;
|
|
1957
|
+
}[];
|
|
1958
|
+
links: {
|
|
1959
|
+
/**
|
|
1960
|
+
* Format: uri
|
|
1961
|
+
* @description Canonical public URL for this job, or `null` when no stable URL can be assembled.
|
|
1962
|
+
*/
|
|
1963
|
+
public: string | null;
|
|
1964
|
+
};
|
|
1965
|
+
/** @description Long-form description (HTML), or `null`. Present ONLY when requested via `?fields=+description`; absent on the default slim card. */
|
|
1966
|
+
description?: string | null;
|
|
1967
|
+
};
|
|
1968
|
+
/** @description Public-only links. The admin URL is intentionally omitted on public-board responses. */
|
|
1969
|
+
PublicJobLinks: {
|
|
1970
|
+
/**
|
|
1971
|
+
* Format: uri
|
|
1972
|
+
* @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).
|
|
1973
|
+
*/
|
|
1974
|
+
public: string | null;
|
|
1975
|
+
};
|
|
1976
|
+
PublicPlace: {
|
|
1977
|
+
/** @enum {string} */
|
|
1978
|
+
object: "place";
|
|
1979
|
+
/** @description Stable place identity (locations-tree edge endpoint). */
|
|
1980
|
+
id: string;
|
|
1981
|
+
/** @description Parent place's `id`; `null` for a root place. */
|
|
1982
|
+
parentId: string | null;
|
|
1983
|
+
/** @description Public slug (links to `/jobs/locations/:slug`); `null` if unslugged. */
|
|
1984
|
+
slug: string | null;
|
|
1985
|
+
name: string;
|
|
1986
|
+
placeType: string;
|
|
1987
|
+
countryCode: string | null;
|
|
1988
|
+
regionCode: string | null;
|
|
1989
|
+
/** @description Live published-job count for this place. */
|
|
1990
|
+
jobCount: number;
|
|
1991
|
+
};
|
|
1992
|
+
PublicSearchJobsBody: {
|
|
1993
|
+
/** @description Free-text search query matched against job title and description. Up to 200 characters. */
|
|
1994
|
+
query?: string;
|
|
1995
|
+
/**
|
|
1996
|
+
* @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.
|
|
1997
|
+
* @enum {string}
|
|
1998
|
+
*/
|
|
1999
|
+
sort?: "relevance" | "newest" | "salary_high";
|
|
2000
|
+
/** @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. */
|
|
2001
|
+
filters?: {
|
|
2002
|
+
/** @description Only return jobs at any of the given company IDs. Up to 10 values. */
|
|
2003
|
+
companyId?: string[];
|
|
2004
|
+
/** @description Company slugs (the public URL identity). Up to 10. Resolved server-side; unknown slugs are dropped. Combined with `companyId` as a union. If the provided company filter resolves to no known companies, the result is empty. */
|
|
2005
|
+
companySlug?: string[];
|
|
2006
|
+
/** @description Only return jobs with any of the given remote-work options. Up to 10 values. */
|
|
2007
|
+
remoteOption?: ("on_site" | "hybrid" | "remote")[];
|
|
2008
|
+
/** @description Only return jobs with any of the given employment types. Up to 10 values. */
|
|
2009
|
+
employmentType?: ("full_time" | "part_time" | "contract" | "internship" | "temporary" | "volunteer" | "other")[];
|
|
2010
|
+
/** @description Only return jobs at any of the given seniority levels. Up to 10 values. */
|
|
2011
|
+
seniority?: ("entry_level" | "associate" | "mid_level" | "senior" | "lead" | "principal" | "director" | "executive")[];
|
|
2012
|
+
/** @description Range filter on the job's `publishedAt` timestamp. */
|
|
2013
|
+
publishedAt?: {
|
|
2014
|
+
/**
|
|
2015
|
+
* Format: date-time
|
|
2016
|
+
* @description Only return jobs published at or after this ISO 8601 datetime.
|
|
2017
|
+
*/
|
|
2018
|
+
gte?: string;
|
|
2019
|
+
/**
|
|
2020
|
+
* Format: date-time
|
|
2021
|
+
* @description Only return jobs published at or before this ISO 8601 datetime.
|
|
2022
|
+
*/
|
|
2023
|
+
lte?: string;
|
|
2024
|
+
};
|
|
2025
|
+
/** @description Only return jobs near the place with this slug (geo radius search). Unresolvable slugs are ignored. */
|
|
2026
|
+
location?: string;
|
|
2027
|
+
/** @description Search radius in kilometres around `location` (10–250; default 50). Ignored without `location`. */
|
|
2028
|
+
radius?: number;
|
|
2029
|
+
};
|
|
2030
|
+
/** @description An opaque pagination cursor returned in the `nextCursor` field of a previous response. Pass it back to fetch the next page of results. */
|
|
2031
|
+
cursor?: string;
|
|
2032
|
+
/**
|
|
2033
|
+
* @description A limit on the number of objects to be returned. Limit can range between 1 and 100.
|
|
2034
|
+
* @example 20
|
|
2035
|
+
*/
|
|
2036
|
+
limit?: number;
|
|
2037
|
+
/**
|
|
2038
|
+
* @description The number of jobs to skip: the job catalog page offset. Takes precedence over `cursor`. `offset + limit` may not exceed 10,000.
|
|
2039
|
+
* @example 0
|
|
2040
|
+
*/
|
|
2041
|
+
offset?: number;
|
|
2042
|
+
};
|
|
2043
|
+
PublicTaxonomyResolution: {
|
|
2044
|
+
/** @enum {string} */
|
|
2045
|
+
object: "taxonomy_resolution";
|
|
2046
|
+
/** @enum {string} */
|
|
2047
|
+
type: "category" | "skill" | "place" | "market";
|
|
2048
|
+
/** @description Immutable English source slug — the semantic-search key. */
|
|
2049
|
+
sourceSlug: string;
|
|
2050
|
+
/** @description Board-language URL slug (the `<link rel=canonical>` target). */
|
|
2051
|
+
canonicalSlug: string;
|
|
2052
|
+
/** @description Board-language display name. */
|
|
2053
|
+
displayName: string;
|
|
2054
|
+
/** @description The canonical slug to emit a 308 redirect to when the inbound slug differs; `null` otherwise. */
|
|
2055
|
+
redirectTo: string | null;
|
|
2056
|
+
geo: components["schemas"]["TaxonomyGeo"];
|
|
2057
|
+
};
|
|
2058
|
+
PublicTaxonomyTerm: {
|
|
2059
|
+
/** @enum {string} */
|
|
2060
|
+
object: "taxonomy_term";
|
|
2061
|
+
/** @description Stable taxonomy entity ID. */
|
|
2062
|
+
id: string;
|
|
2063
|
+
/** @enum {string} */
|
|
2064
|
+
type: "category" | "skill";
|
|
2065
|
+
/** @description Current source-locale slug used by job search; old slugs may remain aliases. */
|
|
2066
|
+
sourceSlug: string;
|
|
2067
|
+
/** @description Board-language canonical URL slug. */
|
|
2068
|
+
canonicalSlug: string;
|
|
2069
|
+
/** @description Board-language name with source-name fallback. */
|
|
2070
|
+
displayName: string;
|
|
2071
|
+
};
|
|
2072
|
+
PublicVerifyBoardPasswordBody: {
|
|
2073
|
+
/** @description The board password. */
|
|
2074
|
+
password: string;
|
|
2075
|
+
};
|
|
2076
|
+
ReadReceipt: {
|
|
2077
|
+
/** @enum {string} */
|
|
2078
|
+
object: "read_receipt";
|
|
2079
|
+
/** Format: date-time */
|
|
2080
|
+
markedAt: string;
|
|
2081
|
+
};
|
|
2082
|
+
RedirectResolution: {
|
|
2083
|
+
/** @enum {string} */
|
|
2084
|
+
object: "redirect_resolution";
|
|
2085
|
+
path: string;
|
|
2086
|
+
/** @description The redirect target (board-relative), or `null` when no redirect matches. The consumer 308s to `target`, or 404s when `null`. */
|
|
2087
|
+
target: string | null;
|
|
2088
|
+
};
|
|
2089
|
+
RemotePermitTaxonomyEntry: {
|
|
2090
|
+
/** @description Discriminator. One of: `worldwide`, `world_region`, `continent`, `region`, `subregion`, `custom`, `country`, `subdivision`. */
|
|
2091
|
+
type: string;
|
|
2092
|
+
/** @description Canonical value for the type. ISO 3166-1 alpha-2 for `country`, ISO 3166-2 for `subdivision`, etc. */
|
|
2093
|
+
value: string;
|
|
2094
|
+
/** @description Human-readable display label. */
|
|
2095
|
+
label: string;
|
|
2096
|
+
};
|
|
2097
|
+
ReorderPipelineStagesBody: {
|
|
2098
|
+
/** @description The job whose stages are reordered. */
|
|
2099
|
+
jobId: string;
|
|
2100
|
+
/** @description Every stage id of the job, in the new order. */
|
|
2101
|
+
orderedStageIds: string[];
|
|
2102
|
+
};
|
|
2103
|
+
ReplyBody: {
|
|
2104
|
+
body: string;
|
|
2105
|
+
};
|
|
2106
|
+
ReportBody: {
|
|
2107
|
+
/** @enum {string} */
|
|
2108
|
+
reason: "spam" | "harassment" | "misrepresentation" | "other";
|
|
2109
|
+
freeText?: string;
|
|
2110
|
+
};
|
|
2111
|
+
Resume: {
|
|
2112
|
+
/** @enum {string} */
|
|
2113
|
+
object: "resume";
|
|
2114
|
+
/**
|
|
2115
|
+
* @description Async parse state; poll GET /me/resume until parsed or failed.
|
|
2116
|
+
* @enum {string|null}
|
|
2117
|
+
*/
|
|
2118
|
+
parseStatus: "parsing" | "parsed" | "failed" | null;
|
|
2119
|
+
parseFailureReason: string | null;
|
|
2120
|
+
/** Format: date-time */
|
|
2121
|
+
parsedAt: string | null;
|
|
2122
|
+
keepResumeOnFile: boolean | null;
|
|
2123
|
+
hasResumeOnFile: boolean;
|
|
2124
|
+
file: {
|
|
2125
|
+
/** @description Short-lived signed download URL. */
|
|
2126
|
+
url: string;
|
|
2127
|
+
contentType: string;
|
|
2128
|
+
sizeBytes: number;
|
|
2129
|
+
} | null;
|
|
2130
|
+
};
|
|
2131
|
+
SalaryCompanyIndexItem: {
|
|
2132
|
+
/** @enum {string} */
|
|
2133
|
+
object: "salary_company";
|
|
2134
|
+
companySlug: string;
|
|
2135
|
+
companyName: string;
|
|
2136
|
+
logoPath: string | null;
|
|
2137
|
+
avgSalaryMin: number;
|
|
2138
|
+
avgSalaryMax: number;
|
|
2139
|
+
jobCount: number;
|
|
2140
|
+
currency: string;
|
|
2141
|
+
};
|
|
2142
|
+
SalaryLocationIndexItem: {
|
|
2143
|
+
/** @enum {string} */
|
|
2144
|
+
object: "salary_location";
|
|
2145
|
+
placeSlug: string;
|
|
2146
|
+
placeName: string;
|
|
2147
|
+
/** @description Slug of the parent place; `null` for a top-level node. */
|
|
2148
|
+
parentSlug: string | null;
|
|
2149
|
+
avgSalaryMin: number;
|
|
2150
|
+
avgSalaryMax: number;
|
|
2151
|
+
jobCount: number;
|
|
2152
|
+
};
|
|
2153
|
+
SalarySkillIndexItem: {
|
|
2154
|
+
/** @enum {string} */
|
|
2155
|
+
object: "salary_skill";
|
|
2156
|
+
slug: string;
|
|
2157
|
+
name: string;
|
|
2158
|
+
avgSalaryMin: number;
|
|
2159
|
+
avgSalaryMax: number;
|
|
2160
|
+
p25SalaryMin: number;
|
|
2161
|
+
p75SalaryMax: number;
|
|
2162
|
+
jobCount: number;
|
|
2163
|
+
currency: string;
|
|
2164
|
+
};
|
|
2165
|
+
SalaryTitleIndexItem: {
|
|
2166
|
+
/** @enum {string} */
|
|
2167
|
+
object: "salary_title";
|
|
2168
|
+
slug: string;
|
|
2169
|
+
name: string;
|
|
2170
|
+
avgSalaryMin: number;
|
|
2171
|
+
avgSalaryMax: number;
|
|
2172
|
+
p25SalaryMin: number;
|
|
2173
|
+
p75SalaryMax: number;
|
|
2174
|
+
jobCount: number;
|
|
2175
|
+
currency: string;
|
|
2176
|
+
};
|
|
2177
|
+
SalesLedPlan: {
|
|
2178
|
+
/** @enum {string} */
|
|
2179
|
+
object: "sales_led_plan";
|
|
2180
|
+
id: string;
|
|
2181
|
+
name: string;
|
|
2182
|
+
description: string;
|
|
2183
|
+
/** @description Display price text, e.g. "Contact us". */
|
|
2184
|
+
priceText: string;
|
|
2185
|
+
ctaText: string;
|
|
2186
|
+
/** @description The CTA target: a URL, mailto:, or tel: link. */
|
|
2187
|
+
ctaDestination: string;
|
|
2188
|
+
featuredBullets: string[];
|
|
2189
|
+
displayOrder: number;
|
|
2190
|
+
};
|
|
2191
|
+
SaveJobBody: {
|
|
2192
|
+
jobId: string;
|
|
2193
|
+
};
|
|
2194
|
+
SavedJob: {
|
|
2195
|
+
/** @description Saved-job row ID. */
|
|
2196
|
+
id: string;
|
|
2197
|
+
/** @enum {string} */
|
|
2198
|
+
object: "saved_job";
|
|
2199
|
+
/** @description The saved job id. Also the DELETE path key. */
|
|
2200
|
+
jobId: string;
|
|
2201
|
+
/** Format: date-time */
|
|
2202
|
+
savedAt: string;
|
|
2203
|
+
job: components["schemas"]["PublicJob"];
|
|
2204
|
+
};
|
|
2205
|
+
SendWorkEmailBody: {
|
|
2206
|
+
/** Format: email */
|
|
2207
|
+
workEmail: string;
|
|
2208
|
+
};
|
|
2209
|
+
SkillLocationSalary: {
|
|
2210
|
+
/** @enum {string} */
|
|
2211
|
+
object: "skill_location_salary";
|
|
2212
|
+
skillSourceSlug: string;
|
|
2213
|
+
skillCanonicalSlug: string;
|
|
2214
|
+
locationSourceSlug: string;
|
|
2215
|
+
locationCanonicalSlug: string;
|
|
2216
|
+
skillName: string;
|
|
2217
|
+
placeName: string;
|
|
2218
|
+
countryCode: string;
|
|
2219
|
+
adminLevel: string;
|
|
2220
|
+
overallSalary: {
|
|
2221
|
+
avgMin: number;
|
|
2222
|
+
avgMax: number;
|
|
2223
|
+
p25Min: number | null;
|
|
2224
|
+
p75Max: number | null;
|
|
2225
|
+
jobCount: number;
|
|
2226
|
+
} | null;
|
|
2227
|
+
bySeniority: {
|
|
2228
|
+
seniority: string;
|
|
2229
|
+
avgSalaryMin: number;
|
|
2230
|
+
avgSalaryMax: number;
|
|
2231
|
+
jobCount: number;
|
|
2232
|
+
}[];
|
|
2233
|
+
childLocations: {
|
|
2234
|
+
placeSlug: string;
|
|
2235
|
+
placeName: string;
|
|
2236
|
+
avgSalaryMin: number;
|
|
2237
|
+
avgSalaryMax: number;
|
|
2238
|
+
jobCount: number;
|
|
2239
|
+
}[];
|
|
2240
|
+
childLocationsByRegion: {
|
|
2241
|
+
regionName: string;
|
|
2242
|
+
regionSlug: string;
|
|
2243
|
+
cities: {
|
|
2244
|
+
placeSlug: string;
|
|
2245
|
+
placeName: string;
|
|
2246
|
+
avgSalaryMin: number;
|
|
2247
|
+
avgSalaryMax: number;
|
|
2248
|
+
jobCount: number;
|
|
2249
|
+
}[];
|
|
2250
|
+
}[];
|
|
2251
|
+
otherLocations: {
|
|
2252
|
+
placeSlug: string;
|
|
2253
|
+
placeName: string;
|
|
2254
|
+
avgSalaryMin: number;
|
|
2255
|
+
avgSalaryMax: number;
|
|
2256
|
+
jobCount: number;
|
|
2257
|
+
}[];
|
|
2258
|
+
topSkills: {
|
|
2259
|
+
avgSalaryMin: number;
|
|
2260
|
+
avgSalaryMax: number;
|
|
2261
|
+
jobCount: number;
|
|
2262
|
+
skillSlug: string;
|
|
2263
|
+
skillName: string;
|
|
2264
|
+
}[];
|
|
2265
|
+
topTitles: {
|
|
2266
|
+
avgSalaryMin: number;
|
|
2267
|
+
avgSalaryMax: number;
|
|
2268
|
+
jobCount: number;
|
|
2269
|
+
categorySlug: string;
|
|
2270
|
+
categoryName: string;
|
|
2271
|
+
}[];
|
|
2272
|
+
boardSkillAvgMin: number | null;
|
|
2273
|
+
boardSkillAvgMax: number | null;
|
|
2274
|
+
currency: string;
|
|
2275
|
+
};
|
|
2276
|
+
SkillLocationsIndex: {
|
|
2277
|
+
/** @enum {string} */
|
|
2278
|
+
object: "skill_locations_index";
|
|
2279
|
+
sourceSlug: string;
|
|
2280
|
+
canonicalSlug: string;
|
|
2281
|
+
skillName: string;
|
|
2282
|
+
currency: string;
|
|
2283
|
+
locations: components["schemas"]["SalaryLocationIndexItem"][];
|
|
2284
|
+
};
|
|
2285
|
+
SkillSalaryDetail: {
|
|
2286
|
+
/** @enum {string} */
|
|
2287
|
+
object: "skill_salary_detail";
|
|
2288
|
+
/** @description Immutable English source slug: the salary-stats key. */
|
|
2289
|
+
sourceSlug: string;
|
|
2290
|
+
/** @description Board-language canonical URL slug: the starter 308 target. */
|
|
2291
|
+
canonicalSlug: string;
|
|
2292
|
+
skillName: string;
|
|
2293
|
+
overallSalary: {
|
|
2294
|
+
avgMin: number;
|
|
2295
|
+
avgMax: number;
|
|
2296
|
+
medianMin: number;
|
|
2297
|
+
medianMax: number;
|
|
2298
|
+
p25Min: number;
|
|
2299
|
+
p75Max: number;
|
|
2300
|
+
jobCount: number;
|
|
2301
|
+
} | null;
|
|
2302
|
+
bySeniority: {
|
|
2303
|
+
seniority: string;
|
|
2304
|
+
avgSalaryMin: number;
|
|
2305
|
+
avgSalaryMax: number;
|
|
2306
|
+
jobCount: number;
|
|
2307
|
+
boardAvgMin: number | null;
|
|
2308
|
+
boardAvgMax: number | null;
|
|
2309
|
+
diffPercent: number | null;
|
|
2310
|
+
}[];
|
|
2311
|
+
topCompanies: {
|
|
2312
|
+
avgSalaryMin: number;
|
|
2313
|
+
avgSalaryMax: number;
|
|
2314
|
+
jobCount: number;
|
|
2315
|
+
companySlug: string;
|
|
2316
|
+
companyName: string;
|
|
2317
|
+
logoPath: string | null;
|
|
2318
|
+
}[];
|
|
2319
|
+
topLocations: {
|
|
2320
|
+
avgSalaryMin: number;
|
|
2321
|
+
avgSalaryMax: number;
|
|
2322
|
+
jobCount: number;
|
|
2323
|
+
placeName: string;
|
|
2324
|
+
placeSlug: string;
|
|
2325
|
+
countryCode: string;
|
|
2326
|
+
}[];
|
|
2327
|
+
topTitles: {
|
|
2328
|
+
avgSalaryMin: number;
|
|
2329
|
+
avgSalaryMax: number;
|
|
2330
|
+
jobCount: number;
|
|
2331
|
+
categorySlug: string;
|
|
2332
|
+
categoryName: string;
|
|
2333
|
+
}[];
|
|
2334
|
+
relatedSkills: {
|
|
2335
|
+
avgSalaryMin: number;
|
|
2336
|
+
avgSalaryMax: number;
|
|
2337
|
+
jobCount: number;
|
|
2338
|
+
skillSlug: string;
|
|
2339
|
+
skillName: string;
|
|
2340
|
+
}[];
|
|
2341
|
+
totalLocationCount: number;
|
|
2342
|
+
boardOverallAvgMin: number | null;
|
|
2343
|
+
boardOverallAvgMax: number | null;
|
|
2344
|
+
boardMedianMin: number | null;
|
|
2345
|
+
boardMedianMax: number | null;
|
|
2346
|
+
currency: string;
|
|
2347
|
+
};
|
|
2348
|
+
StartAboutApplicationBody: {
|
|
2349
|
+
applicationId: string;
|
|
2350
|
+
body: string;
|
|
2351
|
+
};
|
|
2352
|
+
StartConversationBody: {
|
|
2353
|
+
candidateBoardUserId: string;
|
|
2354
|
+
body: string;
|
|
2355
|
+
} | {
|
|
2356
|
+
candidateHandle: string;
|
|
2357
|
+
body: string;
|
|
2358
|
+
};
|
|
2359
|
+
SuggestResult: {
|
|
2360
|
+
/** @enum {string} */
|
|
2361
|
+
object: "suggest_result";
|
|
2362
|
+
/** @description The trimmed query string that produced these suggestions. */
|
|
2363
|
+
query: string;
|
|
2364
|
+
/** @description Interleaved company + taxonomy-term suggestions. Order is server-ranked; clients must not re-sort. */
|
|
2365
|
+
items: components["schemas"]["SuggestionItem"][];
|
|
2366
|
+
};
|
|
2367
|
+
SuggestionItem: components["schemas"]["CompanySuggestion"] | components["schemas"]["TermSuggestion"];
|
|
2368
|
+
TalentAccess: {
|
|
2369
|
+
/** @enum {string} */
|
|
2370
|
+
object: "talent_access";
|
|
2371
|
+
/** @description Whether the viewer has an approved company membership on this board. */
|
|
2372
|
+
isEmployer: boolean;
|
|
2373
|
+
/** @description Whether this board sells talent access (a public `talent_access` plan exists). When `false` the talent surfaces are not credit-gated for employers. */
|
|
2374
|
+
paywallActive: boolean;
|
|
2375
|
+
/** @description The CTA answer: the viewer is an approved employer AND either the board has no talent paywall or one of their companies holds an active talent_access subscription or a succeeded credit pack. Always `false` for candidates; anonymous viewers get 401. */
|
|
2376
|
+
hasTalentAccess: boolean;
|
|
2377
|
+
/** @description True when any active talent_access subscription carries the unlimited profile-unlock sentinel on its feature snapshot. */
|
|
2378
|
+
hasUnlimitedUnlocks: boolean;
|
|
2379
|
+
};
|
|
2380
|
+
TalentDirectoryEntry: {
|
|
2381
|
+
/** @enum {string} */
|
|
2382
|
+
object: "talent_directory_entry";
|
|
2383
|
+
handle: string | null;
|
|
2384
|
+
displayName: string | null;
|
|
2385
|
+
headline: string | null;
|
|
2386
|
+
location: string | null;
|
|
2387
|
+
avatarUrl: string | null;
|
|
2388
|
+
bio: string | null;
|
|
2389
|
+
jobSearchStatus: string | null;
|
|
2390
|
+
skills: string[];
|
|
2391
|
+
experiences: {
|
|
2392
|
+
title: string;
|
|
2393
|
+
companyName: string;
|
|
2394
|
+
startDate: string;
|
|
2395
|
+
endDate: string | null;
|
|
2396
|
+
}[];
|
|
2397
|
+
education: {
|
|
2398
|
+
institutionName: string;
|
|
2399
|
+
startDate: string | null;
|
|
2400
|
+
endDate: string | null;
|
|
2401
|
+
}[];
|
|
2402
|
+
};
|
|
2403
|
+
TalentProfile: {
|
|
2404
|
+
/** @enum {string} */
|
|
2405
|
+
object: "talent_profile";
|
|
2406
|
+
handle: string | null;
|
|
2407
|
+
displayName: string | null;
|
|
2408
|
+
headline: string | null;
|
|
2409
|
+
location: string | null;
|
|
2410
|
+
bio: string | null;
|
|
2411
|
+
avatarUrl: string | null;
|
|
2412
|
+
/** @description The candidate job-search status, or `null` when it is set to employers-only (an anonymous caller is not an employer). */
|
|
2413
|
+
jobSearchStatus: string | null;
|
|
2414
|
+
experiences: {
|
|
2415
|
+
title: string;
|
|
2416
|
+
companyName: string;
|
|
2417
|
+
companyUrl: string | null;
|
|
2418
|
+
/** @description Absolute logo URL for the company, resolved from `companyUrl` the same way the hosted profile renders it; `null` when the company has no usable website. Render a monogram/initials fallback when `null` (and on image error: the URL 404s when the brand has no icon). */
|
|
2419
|
+
companyLogoUrl: string | null;
|
|
2420
|
+
location: string | null;
|
|
2421
|
+
employmentType: string | null;
|
|
2422
|
+
locationType: string | null;
|
|
2423
|
+
foundVia: string | null;
|
|
2424
|
+
/** @description Start month, `YYYY-MM`. */
|
|
2425
|
+
startDate: string;
|
|
2426
|
+
/** @description End month `YYYY-MM`, or `null` for a current role. */
|
|
2427
|
+
endDate: string | null;
|
|
2428
|
+
description: string | null;
|
|
2429
|
+
/** @description Skills the candidate applied in this role. */
|
|
2430
|
+
experienceSkills: string[];
|
|
2431
|
+
}[];
|
|
2432
|
+
education: {
|
|
2433
|
+
institutionName: string;
|
|
2434
|
+
institutionUrl: string | null;
|
|
2435
|
+
/** @description Absolute logo URL for the institution, resolved from `institutionUrl` the same way the hosted profile renders it; `null` when the institution has no usable website. Render a monogram/initials fallback when `null` (and on image error). */
|
|
2436
|
+
institutionLogoUrl: string | null;
|
|
2437
|
+
degree: string | null;
|
|
2438
|
+
fieldOfStudy: string | null;
|
|
2439
|
+
grade: string | null;
|
|
2440
|
+
activitiesAndSocieties: string | null;
|
|
2441
|
+
startDate: string | null;
|
|
2442
|
+
endDate: string | null;
|
|
2443
|
+
description: string | null;
|
|
2444
|
+
}[];
|
|
2445
|
+
skills: {
|
|
2446
|
+
name: string;
|
|
2447
|
+
/** @description Reference to the canonical skill taxonomy, when matched. */
|
|
2448
|
+
jobSkillId: string | null;
|
|
2449
|
+
}[];
|
|
2450
|
+
languages: {
|
|
2451
|
+
name: string;
|
|
2452
|
+
proficiency: string;
|
|
2453
|
+
}[];
|
|
2454
|
+
};
|
|
2455
|
+
/** @description Geo for place resolutions; `null` for category/skill. */
|
|
2456
|
+
TaxonomyGeo: {
|
|
2457
|
+
lat: number | null;
|
|
2458
|
+
lng: number | null;
|
|
2459
|
+
countryCode: string | null;
|
|
2460
|
+
regionCode: string | null;
|
|
2461
|
+
region: string | null;
|
|
2462
|
+
city: string | null;
|
|
2463
|
+
locality: string | null;
|
|
2464
|
+
placeType: string | null;
|
|
2465
|
+
} | null;
|
|
2466
|
+
TermSuggestion: {
|
|
2467
|
+
/** @enum {string} */
|
|
2468
|
+
object: "suggestion";
|
|
2469
|
+
/**
|
|
2470
|
+
* @description discriminator enum property added by openapi-typescript
|
|
2471
|
+
* @enum {string}
|
|
2472
|
+
*/
|
|
2473
|
+
type: "term";
|
|
2474
|
+
/**
|
|
2475
|
+
* @description Whether this taxonomy term is a category or a skill.
|
|
2476
|
+
* @enum {string}
|
|
2477
|
+
*/
|
|
2478
|
+
termType: "category" | "skill";
|
|
2479
|
+
/** @description Stable taxonomy entity ID. */
|
|
2480
|
+
id: string;
|
|
2481
|
+
/** @description Current source-locale slug used by job search; old slugs may remain aliases. */
|
|
2482
|
+
sourceSlug: string;
|
|
2483
|
+
/** @description Board-language canonical URL slug. */
|
|
2484
|
+
canonicalSlug: string;
|
|
2485
|
+
/** @description Board-language name with source-name fallback. */
|
|
2486
|
+
displayName: string;
|
|
2487
|
+
};
|
|
2488
|
+
TitleLocationSalary: {
|
|
2489
|
+
/** @enum {string} */
|
|
2490
|
+
object: "title_location_salary";
|
|
2491
|
+
categorySourceSlug: string;
|
|
2492
|
+
categoryCanonicalSlug: string;
|
|
2493
|
+
locationSourceSlug: string;
|
|
2494
|
+
locationCanonicalSlug: string;
|
|
2495
|
+
categoryName: string;
|
|
2496
|
+
placeName: string;
|
|
2497
|
+
countryCode: string;
|
|
2498
|
+
adminLevel: string;
|
|
2499
|
+
overallSalary: {
|
|
2500
|
+
avgMin: number;
|
|
2501
|
+
avgMax: number;
|
|
2502
|
+
p25Min: number | null;
|
|
2503
|
+
p75Max: number | null;
|
|
2504
|
+
jobCount: number;
|
|
2505
|
+
} | null;
|
|
2506
|
+
bySeniority: {
|
|
2507
|
+
seniority: string;
|
|
2508
|
+
avgSalaryMin: number;
|
|
2509
|
+
avgSalaryMax: number;
|
|
2510
|
+
jobCount: number;
|
|
2511
|
+
}[];
|
|
2512
|
+
childLocations: {
|
|
2513
|
+
placeSlug: string;
|
|
2514
|
+
placeName: string;
|
|
2515
|
+
avgSalaryMin: number;
|
|
2516
|
+
avgSalaryMax: number;
|
|
2517
|
+
jobCount: number;
|
|
2518
|
+
}[];
|
|
2519
|
+
childLocationsByRegion: {
|
|
2520
|
+
regionName: string;
|
|
2521
|
+
regionSlug: string;
|
|
2522
|
+
cities: {
|
|
2523
|
+
placeSlug: string;
|
|
2524
|
+
placeName: string;
|
|
2525
|
+
avgSalaryMin: number;
|
|
2526
|
+
avgSalaryMax: number;
|
|
2527
|
+
jobCount: number;
|
|
2528
|
+
}[];
|
|
2529
|
+
}[];
|
|
2530
|
+
otherLocations: {
|
|
2531
|
+
placeSlug: string;
|
|
2532
|
+
placeName: string;
|
|
2533
|
+
avgSalaryMin: number;
|
|
2534
|
+
avgSalaryMax: number;
|
|
2535
|
+
jobCount: number;
|
|
2536
|
+
}[];
|
|
2537
|
+
topSkills: {
|
|
2538
|
+
avgSalaryMin: number;
|
|
2539
|
+
avgSalaryMax: number;
|
|
2540
|
+
jobCount: number;
|
|
2541
|
+
skillSlug: string;
|
|
2542
|
+
skillName: string;
|
|
2543
|
+
}[];
|
|
2544
|
+
topTitles: {
|
|
2545
|
+
avgSalaryMin: number;
|
|
2546
|
+
avgSalaryMax: number;
|
|
2547
|
+
jobCount: number;
|
|
2548
|
+
categorySlug: string;
|
|
2549
|
+
categoryName: string;
|
|
2550
|
+
}[];
|
|
2551
|
+
boardCategoryAvgMin: number | null;
|
|
2552
|
+
boardCategoryAvgMax: number | null;
|
|
2553
|
+
currency: string;
|
|
2554
|
+
};
|
|
2555
|
+
TitleLocationsIndex: {
|
|
2556
|
+
/** @enum {string} */
|
|
2557
|
+
object: "title_locations_index";
|
|
2558
|
+
sourceSlug: string;
|
|
2559
|
+
canonicalSlug: string;
|
|
2560
|
+
categoryName: string;
|
|
2561
|
+
currency: string;
|
|
2562
|
+
locations: components["schemas"]["SalaryLocationIndexItem"][];
|
|
2563
|
+
};
|
|
2564
|
+
TitleSalaryDetail: {
|
|
2565
|
+
/** @enum {string} */
|
|
2566
|
+
object: "title_salary_detail";
|
|
2567
|
+
/** @description Immutable English source slug: the salary-stats key. */
|
|
2568
|
+
sourceSlug: string;
|
|
2569
|
+
/** @description Board-language canonical URL slug: the starter 308 target. */
|
|
2570
|
+
canonicalSlug: string;
|
|
2571
|
+
categoryName: string;
|
|
2572
|
+
overallSalary: {
|
|
2573
|
+
avgMin: number;
|
|
2574
|
+
avgMax: number;
|
|
2575
|
+
p25Min: number;
|
|
2576
|
+
p75Max: number;
|
|
2577
|
+
jobCount: number;
|
|
2578
|
+
} | null;
|
|
2579
|
+
bySeniority: {
|
|
2580
|
+
seniority: string;
|
|
2581
|
+
avgSalaryMin: number;
|
|
2582
|
+
avgSalaryMax: number;
|
|
2583
|
+
jobCount: number;
|
|
2584
|
+
boardAvgMin: number | null;
|
|
2585
|
+
boardAvgMax: number | null;
|
|
2586
|
+
boardMedianMin: number | null;
|
|
2587
|
+
boardMedianMax: number | null;
|
|
2588
|
+
boardP25Min: number | null;
|
|
2589
|
+
boardP75Min: number | null;
|
|
2590
|
+
boardP25Max: number | null;
|
|
2591
|
+
boardP75Max: number | null;
|
|
2592
|
+
diffPercent: number | null;
|
|
2593
|
+
}[];
|
|
2594
|
+
topCompanies: {
|
|
2595
|
+
avgSalaryMin: number;
|
|
2596
|
+
avgSalaryMax: number;
|
|
2597
|
+
jobCount: number;
|
|
2598
|
+
companySlug: string;
|
|
2599
|
+
companyName: string;
|
|
2600
|
+
logoPath: string | null;
|
|
2601
|
+
}[];
|
|
2602
|
+
topLocations: {
|
|
2603
|
+
avgSalaryMin: number;
|
|
2604
|
+
avgSalaryMax: number;
|
|
2605
|
+
jobCount: number;
|
|
2606
|
+
placeName: string;
|
|
2607
|
+
placeSlug: string;
|
|
2608
|
+
countryCode: string;
|
|
2609
|
+
}[];
|
|
2610
|
+
topSkills: {
|
|
2611
|
+
avgSalaryMin: number;
|
|
2612
|
+
avgSalaryMax: number;
|
|
2613
|
+
jobCount: number;
|
|
2614
|
+
skillSlug: string;
|
|
2615
|
+
skillName: string;
|
|
2616
|
+
}[];
|
|
2617
|
+
relatedTitles: {
|
|
2618
|
+
avgSalaryMin: number;
|
|
2619
|
+
avgSalaryMax: number;
|
|
2620
|
+
jobCount: number;
|
|
2621
|
+
categorySlug: string;
|
|
2622
|
+
categoryName: string;
|
|
2623
|
+
}[];
|
|
2624
|
+
totalLocationCount: number;
|
|
2625
|
+
boardOverallAvgMin: number | null;
|
|
2626
|
+
boardOverallAvgMax: number | null;
|
|
2627
|
+
boardMedianMin: number | null;
|
|
2628
|
+
boardMedianMax: number | null;
|
|
2629
|
+
boardP25Min: number | null;
|
|
2630
|
+
boardP75Max: number | null;
|
|
2631
|
+
currency: string;
|
|
2632
|
+
};
|
|
2633
|
+
UnreadCount: {
|
|
2634
|
+
/** @enum {string} */
|
|
2635
|
+
object: "unread_count";
|
|
2636
|
+
count: number;
|
|
2637
|
+
};
|
|
2638
|
+
UnsubscribeBody: {
|
|
2639
|
+
boardUserId: string;
|
|
2640
|
+
/** @enum {string} */
|
|
2641
|
+
channel: "messageEmails" | "applicationEmails";
|
|
2642
|
+
token: string;
|
|
2643
|
+
};
|
|
2644
|
+
UpdateApplicationFactsBody: {
|
|
2645
|
+
candidateName?: string;
|
|
2646
|
+
/** Format: email */
|
|
2647
|
+
candidateEmail?: string;
|
|
2648
|
+
candidateHeadline?: string;
|
|
2649
|
+
candidateLocation?: string;
|
|
2650
|
+
coverNote?: string;
|
|
2651
|
+
};
|
|
2652
|
+
UpdateCandidateProfileBody: {
|
|
2653
|
+
displayName?: string;
|
|
2654
|
+
bio?: string;
|
|
2655
|
+
handle?: string;
|
|
2656
|
+
headline?: string;
|
|
2657
|
+
location?: string;
|
|
2658
|
+
/** @enum {string} */
|
|
2659
|
+
profileVisibility?: "hidden" | "logged_in_only" | "public";
|
|
2660
|
+
/** @enum {string} */
|
|
2661
|
+
jobSearchStatus?: "actively_looking" | "open_to_offers" | "not_looking";
|
|
2662
|
+
/** @enum {string} */
|
|
2663
|
+
jobSearchStatusVisibleTo?: "everyone" | "employers_only";
|
|
2664
|
+
openToRelocate?: boolean;
|
|
2665
|
+
};
|
|
2666
|
+
UpdateEducationBody: {
|
|
2667
|
+
institutionName?: string;
|
|
2668
|
+
institutionUrl?: string;
|
|
2669
|
+
degree?: string;
|
|
2670
|
+
fieldOfStudy?: string;
|
|
2671
|
+
grade?: string;
|
|
2672
|
+
activitiesAndSocieties?: string;
|
|
2673
|
+
startDate?: string;
|
|
2674
|
+
endDate?: string;
|
|
2675
|
+
description?: string;
|
|
2676
|
+
sortOrder?: number;
|
|
2677
|
+
};
|
|
2678
|
+
UpdateEmployerCompanyBody: {
|
|
2679
|
+
name?: string;
|
|
2680
|
+
description?: string;
|
|
2681
|
+
website?: string;
|
|
2682
|
+
summary?: string;
|
|
2683
|
+
xUrl?: string;
|
|
2684
|
+
linkedinUrl?: string;
|
|
2685
|
+
facebookUrl?: string;
|
|
2686
|
+
};
|
|
2687
|
+
UpdateExperienceBody: {
|
|
2688
|
+
title?: string;
|
|
2689
|
+
companyName?: string;
|
|
2690
|
+
startDate?: string;
|
|
2691
|
+
companyUrl?: string;
|
|
2692
|
+
location?: string;
|
|
2693
|
+
employmentType?: string;
|
|
2694
|
+
locationType?: string;
|
|
2695
|
+
foundVia?: string;
|
|
2696
|
+
endDate?: string;
|
|
2697
|
+
description?: string;
|
|
2698
|
+
sortOrder?: number;
|
|
2699
|
+
};
|
|
2700
|
+
UpdateLanguagesBody: {
|
|
2701
|
+
languages: {
|
|
2702
|
+
name: string;
|
|
2703
|
+
proficiency: string;
|
|
2704
|
+
}[];
|
|
2705
|
+
};
|
|
2706
|
+
UpdateNotificationPreferenceBody: {
|
|
2707
|
+
/** @enum {string} */
|
|
2708
|
+
channel: "messageEmails" | "applicationEmails";
|
|
2709
|
+
subscribed: boolean;
|
|
2710
|
+
};
|
|
2711
|
+
UpdatePipelineStageBody: {
|
|
2712
|
+
label?: string;
|
|
2713
|
+
hidden?: boolean;
|
|
2714
|
+
};
|
|
2715
|
+
UpdateSkillsBody: {
|
|
2716
|
+
skills: string[];
|
|
2717
|
+
};
|
|
2718
|
+
VerifyEmailOtpBody: {
|
|
2719
|
+
code: string;
|
|
2720
|
+
};
|
|
2721
|
+
};
|
|
2722
|
+
responses: never;
|
|
2723
|
+
parameters: never;
|
|
2724
|
+
requestBodies: never;
|
|
2725
|
+
headers: never;
|
|
2726
|
+
pathItems: never;
|
|
2727
|
+
}
|
|
2728
|
+
|
|
2729
|
+
type Schemas = components['schemas'];
|
|
2730
|
+
|
|
2731
|
+
export type { Schemas as S, components as c };
|