@snokam/mcp-api 0.24.3 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2484 @@
1
+ {
2
+ "openapi": "3.0.1",
3
+ "info": {
4
+ "title": "Recruitment API",
5
+ "description": "Recruitment management API",
6
+ "version": "v1.0.0"
7
+ },
8
+ "servers": [
9
+ {
10
+ "url": "https://recruitment.api.test.snokam.no"
11
+ }
12
+ ],
13
+ "paths": {
14
+ "/v1.0/GetHealth": {
15
+ "get": {
16
+ "tags": [
17
+ "Health"
18
+ ],
19
+ "summary": "Health check",
20
+ "description": "Returns a health check response.",
21
+ "operationId": "GetHealth",
22
+ "responses": {
23
+ "200": {
24
+ "description": "Service is healthy",
25
+ "content": {
26
+ "application/json": {
27
+ "schema": {
28
+ "type": "object"
29
+ }
30
+ }
31
+ },
32
+ "x-ms-summary": "Success"
33
+ }
34
+ }
35
+ }
36
+ },
37
+ "/v1.0/protected/candidates": {
38
+ "get": {
39
+ "tags": [
40
+ "Candidates"
41
+ ],
42
+ "summary": "List recruitment candidates",
43
+ "description": "Returns every candidate document in Sanity — pipeline, applications and archived.",
44
+ "operationId": "ListCandidates",
45
+ "responses": {
46
+ "200": {
47
+ "description": "All candidates",
48
+ "content": {
49
+ "application/json": {
50
+ "schema": {
51
+ "type": "array",
52
+ "items": {
53
+ "$ref": "#/components/schemas/sanityCandidate"
54
+ }
55
+ }
56
+ }
57
+ },
58
+ "x-ms-summary": "Success"
59
+ },
60
+ "401": {
61
+ "description": "No description",
62
+ "x-ms-summary": "Unauthorized"
63
+ }
64
+ },
65
+ "security": [
66
+ {
67
+ "Implicit": [
68
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
69
+ ]
70
+ }
71
+ ]
72
+ },
73
+ "post": {
74
+ "tags": [
75
+ "Candidates"
76
+ ],
77
+ "summary": "Create a fresh admin-initiated candidate",
78
+ "description": "Creates a candidate document directly (not via the public application flow). Caller supplies name + status + track.",
79
+ "operationId": "CreateCandidate",
80
+ "requestBody": {
81
+ "description": "Initial candidate fields",
82
+ "content": {
83
+ "application/json": {
84
+ "schema": {
85
+ "$ref": "#/components/schemas/createCandidateInput"
86
+ }
87
+ }
88
+ },
89
+ "required": true
90
+ },
91
+ "responses": {
92
+ "201": {
93
+ "description": "The created candidate",
94
+ "content": {
95
+ "application/json": {
96
+ "schema": {
97
+ "$ref": "#/components/schemas/sanityCandidate"
98
+ }
99
+ }
100
+ },
101
+ "x-ms-summary": "Created"
102
+ },
103
+ "400": {
104
+ "description": "Payload of Object",
105
+ "content": {
106
+ "application/json": {
107
+ "schema": {
108
+ "type": "object"
109
+ }
110
+ }
111
+ },
112
+ "x-ms-summary": "Bad Request"
113
+ },
114
+ "401": {
115
+ "description": "No description",
116
+ "x-ms-summary": "Unauthorized"
117
+ }
118
+ },
119
+ "security": [
120
+ {
121
+ "Implicit": [
122
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
123
+ ]
124
+ }
125
+ ]
126
+ }
127
+ },
128
+ "/v1.0/protected/candidates/{id}": {
129
+ "get": {
130
+ "tags": [
131
+ "Candidates"
132
+ ],
133
+ "summary": "Get a candidate by id",
134
+ "description": "Returns a fully-hydrated candidate including references, documents, systems and checklists.",
135
+ "operationId": "GetCandidate",
136
+ "parameters": [
137
+ {
138
+ "name": "id",
139
+ "in": "path",
140
+ "required": true,
141
+ "schema": {
142
+ "type": "string"
143
+ },
144
+ "x-ms-summary": "Candidate Sanity id"
145
+ }
146
+ ],
147
+ "responses": {
148
+ "200": {
149
+ "description": "Payload of SanityCandidate",
150
+ "content": {
151
+ "application/json": {
152
+ "schema": {
153
+ "$ref": "#/components/schemas/sanityCandidate"
154
+ }
155
+ }
156
+ },
157
+ "x-ms-summary": "Success"
158
+ },
159
+ "401": {
160
+ "description": "No description",
161
+ "x-ms-summary": "Unauthorized"
162
+ },
163
+ "404": {
164
+ "description": "No description",
165
+ "x-ms-summary": "Not Found"
166
+ }
167
+ },
168
+ "security": [
169
+ {
170
+ "Implicit": [
171
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
172
+ ]
173
+ }
174
+ ]
175
+ },
176
+ "patch": {
177
+ "tags": [
178
+ "Candidates"
179
+ ],
180
+ "summary": "Patch candidate fields",
181
+ "description": "Updates any subset of candidate fields — status, buddy, recruiter, systems, checklists, contact info.",
182
+ "operationId": "PatchCandidate",
183
+ "parameters": [
184
+ {
185
+ "name": "id",
186
+ "in": "path",
187
+ "required": true,
188
+ "schema": {
189
+ "type": "string"
190
+ },
191
+ "x-ms-summary": "Candidate Sanity id"
192
+ }
193
+ ],
194
+ "requestBody": {
195
+ "description": "Partial candidate fields to update",
196
+ "content": {
197
+ "application/json": {
198
+ "schema": {
199
+ "$ref": "#/components/schemas/sanityPatchCandidate"
200
+ }
201
+ }
202
+ },
203
+ "required": true
204
+ },
205
+ "responses": {
206
+ "200": {
207
+ "description": "The patched candidate",
208
+ "content": {
209
+ "application/json": {
210
+ "schema": {
211
+ "$ref": "#/components/schemas/sanityCandidate"
212
+ }
213
+ }
214
+ },
215
+ "x-ms-summary": "Success"
216
+ },
217
+ "400": {
218
+ "description": "Payload of Object",
219
+ "content": {
220
+ "application/json": {
221
+ "schema": {
222
+ "type": "object"
223
+ }
224
+ }
225
+ },
226
+ "x-ms-summary": "Bad Request"
227
+ },
228
+ "401": {
229
+ "description": "No description",
230
+ "x-ms-summary": "Unauthorized"
231
+ },
232
+ "404": {
233
+ "description": "No description",
234
+ "x-ms-summary": "Not Found"
235
+ }
236
+ },
237
+ "security": [
238
+ {
239
+ "Implicit": [
240
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
241
+ ]
242
+ }
243
+ ]
244
+ }
245
+ },
246
+ "/v1.0/protected/candidates/{id}/promote": {
247
+ "post": {
248
+ "tags": [
249
+ "Candidates"
250
+ ],
251
+ "summary": "Promote a public job application to the pipeline",
252
+ "description": "Flips fromApplication=false and bumps status to INTRODUCTION so the candidate appears in the admin pipeline.",
253
+ "operationId": "PromoteApplication",
254
+ "parameters": [
255
+ {
256
+ "name": "id",
257
+ "in": "path",
258
+ "required": true,
259
+ "schema": {
260
+ "type": "string"
261
+ },
262
+ "x-ms-summary": "Candidate Sanity id"
263
+ }
264
+ ],
265
+ "responses": {
266
+ "200": {
267
+ "description": "The promoted candidate",
268
+ "content": {
269
+ "application/json": {
270
+ "schema": {
271
+ "$ref": "#/components/schemas/sanityCandidate"
272
+ }
273
+ }
274
+ },
275
+ "x-ms-summary": "Success"
276
+ },
277
+ "400": {
278
+ "description": "Candidate is not a public job application",
279
+ "content": {
280
+ "application/json": {
281
+ "schema": {
282
+ "type": "object"
283
+ }
284
+ }
285
+ },
286
+ "x-ms-summary": "Bad Request"
287
+ },
288
+ "401": {
289
+ "description": "No description",
290
+ "x-ms-summary": "Unauthorized"
291
+ },
292
+ "404": {
293
+ "description": "No description",
294
+ "x-ms-summary": "Not Found"
295
+ }
296
+ },
297
+ "security": [
298
+ {
299
+ "Implicit": [
300
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
301
+ ]
302
+ }
303
+ ]
304
+ }
305
+ },
306
+ "/v1.0/protected/candidates/{id}/onboard/{system}": {
307
+ "post": {
308
+ "tags": [
309
+ "Candidates"
310
+ ],
311
+ "summary": "Trigger automated onboarding for a given system",
312
+ "description": "Dispatches to the right onboarding handler based on the system slug. Microsoft 365 is the primary target; other systems report 'not implemented' until their handler lands.",
313
+ "operationId": "OnboardCandidateSystem",
314
+ "parameters": [
315
+ {
316
+ "name": "id",
317
+ "in": "path",
318
+ "required": true,
319
+ "schema": {
320
+ "type": "string"
321
+ },
322
+ "x-ms-summary": "Candidate Sanity id"
323
+ },
324
+ {
325
+ "name": "system",
326
+ "in": "path",
327
+ "required": true,
328
+ "schema": {
329
+ "type": "string"
330
+ },
331
+ "x-ms-summary": "System slug (e.g. 'microsoft-365')"
332
+ }
333
+ ],
334
+ "responses": {
335
+ "200": {
336
+ "description": "Uniform onboarding result with status + message",
337
+ "content": {
338
+ "application/json": {
339
+ "schema": {
340
+ "$ref": "#/components/schemas/onboardingResult"
341
+ }
342
+ }
343
+ },
344
+ "x-ms-summary": "Success"
345
+ },
346
+ "400": {
347
+ "description": "Payload of Object",
348
+ "content": {
349
+ "application/json": {
350
+ "schema": {
351
+ "type": "object"
352
+ }
353
+ }
354
+ },
355
+ "x-ms-summary": "Bad Request"
356
+ },
357
+ "401": {
358
+ "description": "No description",
359
+ "x-ms-summary": "Unauthorized"
360
+ },
361
+ "404": {
362
+ "description": "No description",
363
+ "x-ms-summary": "Not Found"
364
+ }
365
+ },
366
+ "security": [
367
+ {
368
+ "Implicit": [
369
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
370
+ ]
371
+ }
372
+ ]
373
+ }
374
+ },
375
+ "/v1.0/protected/candidates/{id}/onboard-full/stream": {
376
+ "post": {
377
+ "tags": [
378
+ "Candidates"
379
+ ],
380
+ "summary": "Run the onboarding chain with a live SSE event feed",
381
+ "description": "Same chain as /onboard-full but streams Server-Sent Events (`event: step`) as each step starts (`status:running`) and finishes (`succeeded`/`failed`). Closes with `event: done`. Frontend uses fetch streaming so we can pass a Bearer token; EventSource doesn't support custom headers.",
382
+ "operationId": "OnboardCandidateFullStream",
383
+ "parameters": [
384
+ {
385
+ "name": "id",
386
+ "in": "path",
387
+ "required": true,
388
+ "schema": {
389
+ "type": "string"
390
+ }
391
+ }
392
+ ],
393
+ "responses": {
394
+ "200": {
395
+ "description": "No description",
396
+ "x-ms-summary": "SSE stream of OnboardingResult frames"
397
+ }
398
+ },
399
+ "security": [
400
+ {
401
+ "Implicit": [
402
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
403
+ ]
404
+ }
405
+ ]
406
+ }
407
+ },
408
+ "/v1.0/protected/candidates/{id}/onboard-full": {
409
+ "post": {
410
+ "tags": [
411
+ "Candidates"
412
+ ],
413
+ "summary": "Run the full automated onboarding chain",
414
+ "description": "Provisions the candidate's Microsoft 365 user, then triggers an Azure AD → Sanity sync to create the matching employee doc. Returns one OnboardingResult row per step so the admin UI can render a live timeline.",
415
+ "operationId": "OnboardCandidateFull",
416
+ "parameters": [
417
+ {
418
+ "name": "id",
419
+ "in": "path",
420
+ "required": true,
421
+ "schema": {
422
+ "type": "string"
423
+ },
424
+ "x-ms-summary": "Candidate Sanity id"
425
+ }
426
+ ],
427
+ "responses": {
428
+ "200": {
429
+ "description": "Per-step results",
430
+ "content": {
431
+ "application/json": {
432
+ "schema": {
433
+ "type": "array",
434
+ "items": {
435
+ "$ref": "#/components/schemas/onboardingResult"
436
+ }
437
+ }
438
+ }
439
+ },
440
+ "x-ms-summary": "Success"
441
+ },
442
+ "401": {
443
+ "description": "No description",
444
+ "x-ms-summary": "Unauthorized"
445
+ },
446
+ "404": {
447
+ "description": "No description",
448
+ "x-ms-summary": "Not Found"
449
+ }
450
+ },
451
+ "security": [
452
+ {
453
+ "Implicit": [
454
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
455
+ ]
456
+ }
457
+ ]
458
+ }
459
+ },
460
+ "/v1.0/protected/candidates/{id}/offboard-full": {
461
+ "post": {
462
+ "tags": [
463
+ "Candidates"
464
+ ],
465
+ "summary": "Run the full automated offboarding chain",
466
+ "description": "Disables the candidate's Microsoft 365 user and triggers an Azure AD → Sanity sync so the employee doc reflects the disabled state.",
467
+ "operationId": "OffboardCandidateFull",
468
+ "parameters": [
469
+ {
470
+ "name": "id",
471
+ "in": "path",
472
+ "required": true,
473
+ "schema": {
474
+ "type": "string"
475
+ }
476
+ }
477
+ ],
478
+ "responses": {
479
+ "200": {
480
+ "description": "Per-step results",
481
+ "content": {
482
+ "application/json": {
483
+ "schema": {
484
+ "type": "array",
485
+ "items": {
486
+ "$ref": "#/components/schemas/onboardingResult"
487
+ }
488
+ }
489
+ }
490
+ },
491
+ "x-ms-summary": "Success"
492
+ },
493
+ "401": {
494
+ "description": "No description",
495
+ "x-ms-summary": "Unauthorized"
496
+ },
497
+ "404": {
498
+ "description": "No description",
499
+ "x-ms-summary": "Not Found"
500
+ }
501
+ },
502
+ "security": [
503
+ {
504
+ "Implicit": [
505
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
506
+ ]
507
+ }
508
+ ]
509
+ }
510
+ },
511
+ "/v1.0/protected/candidates/{id}/offboard-full/stream": {
512
+ "post": {
513
+ "tags": [
514
+ "Candidates"
515
+ ],
516
+ "summary": "Offboarding chain with a live SSE event feed",
517
+ "description": "Streams the offboarding chain step-by-step as Server-Sent Events. Mirrors /onboard-full/stream.",
518
+ "operationId": "OffboardCandidateFullStream",
519
+ "parameters": [
520
+ {
521
+ "name": "id",
522
+ "in": "path",
523
+ "required": true,
524
+ "schema": {
525
+ "type": "string"
526
+ }
527
+ }
528
+ ],
529
+ "responses": {
530
+ "200": {
531
+ "description": "No description",
532
+ "x-ms-summary": "SSE stream of OnboardingResult frames"
533
+ }
534
+ },
535
+ "security": [
536
+ {
537
+ "Implicit": [
538
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
539
+ ]
540
+ }
541
+ ]
542
+ }
543
+ },
544
+ "/v1.0/protected/candidates/{id}/reject": {
545
+ "post": {
546
+ "tags": [
547
+ "Candidates"
548
+ ],
549
+ "summary": "Reject a candidate",
550
+ "description": "Sets status=REJECTED. Convenience wrapper over PatchCandidate so UIs have a single-action reject button.",
551
+ "operationId": "RejectCandidate",
552
+ "parameters": [
553
+ {
554
+ "name": "id",
555
+ "in": "path",
556
+ "required": true,
557
+ "schema": {
558
+ "type": "string"
559
+ },
560
+ "x-ms-summary": "Candidate Sanity id"
561
+ }
562
+ ],
563
+ "responses": {
564
+ "200": {
565
+ "description": "Payload of SanityCandidate",
566
+ "content": {
567
+ "application/json": {
568
+ "schema": {
569
+ "$ref": "#/components/schemas/sanityCandidate"
570
+ }
571
+ }
572
+ },
573
+ "x-ms-summary": "Success"
574
+ },
575
+ "401": {
576
+ "description": "No description",
577
+ "x-ms-summary": "Unauthorized"
578
+ },
579
+ "404": {
580
+ "description": "No description",
581
+ "x-ms-summary": "Not Found"
582
+ }
583
+ },
584
+ "security": [
585
+ {
586
+ "Implicit": [
587
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
588
+ ]
589
+ }
590
+ ]
591
+ }
592
+ },
593
+ "/v1.0/protected/job-positions": {
594
+ "get": {
595
+ "tags": [
596
+ "JobPositions"
597
+ ],
598
+ "summary": "List published job positions",
599
+ "description": "Returns every job position document. Used by the admin stillinger page.",
600
+ "operationId": "ListJobPositions",
601
+ "responses": {
602
+ "200": {
603
+ "description": "Payload of Array of SanityJobPosition",
604
+ "content": {
605
+ "application/json": {
606
+ "schema": {
607
+ "type": "array",
608
+ "items": {
609
+ "$ref": "#/components/schemas/sanityJobPosition"
610
+ }
611
+ }
612
+ }
613
+ },
614
+ "x-ms-summary": "Success"
615
+ },
616
+ "401": {
617
+ "description": "No description",
618
+ "x-ms-summary": "Unauthorized"
619
+ }
620
+ },
621
+ "security": [
622
+ {
623
+ "Implicit": [
624
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
625
+ ]
626
+ }
627
+ ]
628
+ }
629
+ },
630
+ "/v1.0/protected/systems": {
631
+ "get": {
632
+ "tags": [
633
+ "Systems"
634
+ ],
635
+ "summary": "List systems used for onboarding checklists",
636
+ "description": "Returns every system document. Used by the candidate detail and systems library pages.",
637
+ "operationId": "ListSystems",
638
+ "responses": {
639
+ "200": {
640
+ "description": "Payload of Array of SanitySystemsInner",
641
+ "content": {
642
+ "application/json": {
643
+ "schema": {
644
+ "type": "array",
645
+ "items": {
646
+ "$ref": "#/components/schemas/sanitySystemsInner"
647
+ }
648
+ }
649
+ }
650
+ },
651
+ "x-ms-summary": "Success"
652
+ },
653
+ "401": {
654
+ "description": "No description",
655
+ "x-ms-summary": "Unauthorized"
656
+ }
657
+ },
658
+ "security": [
659
+ {
660
+ "Implicit": [
661
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
662
+ ]
663
+ }
664
+ ]
665
+ },
666
+ "post": {
667
+ "tags": [
668
+ "Systems"
669
+ ],
670
+ "summary": "Create a system",
671
+ "description": "Adds a new system to the onboarding/offboarding system library.",
672
+ "operationId": "CreateSystem",
673
+ "requestBody": {
674
+ "content": {
675
+ "application/json": {
676
+ "schema": {
677
+ "$ref": "#/components/schemas/sanityCreateSystem"
678
+ }
679
+ }
680
+ },
681
+ "required": true
682
+ },
683
+ "responses": {
684
+ "200": {
685
+ "description": "Payload of SanitySystemsInner",
686
+ "content": {
687
+ "application/json": {
688
+ "schema": {
689
+ "$ref": "#/components/schemas/sanitySystemsInner"
690
+ }
691
+ }
692
+ },
693
+ "x-ms-summary": "Success"
694
+ },
695
+ "400": {
696
+ "description": "Payload of Object",
697
+ "content": {
698
+ "application/json": {
699
+ "schema": {
700
+ "type": "object"
701
+ }
702
+ }
703
+ },
704
+ "x-ms-summary": "Bad Request"
705
+ },
706
+ "401": {
707
+ "description": "No description",
708
+ "x-ms-summary": "Unauthorized"
709
+ }
710
+ },
711
+ "security": [
712
+ {
713
+ "Implicit": [
714
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
715
+ ]
716
+ }
717
+ ]
718
+ }
719
+ },
720
+ "/v1.0/protected/onboarding-chain/automated-system-titles": {
721
+ "get": {
722
+ "tags": [
723
+ "Systems"
724
+ ],
725
+ "summary": "List systems handled end-to-end by the onboarding chain",
726
+ "description": "Returns title + maturity status (stable / beta) so the admin UI can badge systems that need no per-row admin action and flag the experimental ones.",
727
+ "operationId": "GetChainAutomatedSystemTitles",
728
+ "responses": {
729
+ "200": {
730
+ "description": "Payload of Array of ChainAutomatedSystem",
731
+ "content": {
732
+ "application/json": {
733
+ "schema": {
734
+ "type": "array",
735
+ "items": {
736
+ "$ref": "#/components/schemas/chainAutomatedSystem"
737
+ }
738
+ }
739
+ }
740
+ },
741
+ "x-ms-summary": "Success"
742
+ },
743
+ "401": {
744
+ "description": "No description",
745
+ "x-ms-summary": "Unauthorized"
746
+ }
747
+ },
748
+ "security": [
749
+ {
750
+ "Implicit": [
751
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
752
+ ]
753
+ }
754
+ ]
755
+ }
756
+ },
757
+ "/v1.0/protected/onboarding-tasks": {
758
+ "get": {
759
+ "tags": [
760
+ "Tasks"
761
+ ],
762
+ "summary": "List every onboarding task",
763
+ "description": "Returns all onboarding tasks with their Portable Text description so the admin can render an editable checklist with contextual notes.",
764
+ "operationId": "ListOnboardingTasks",
765
+ "responses": {
766
+ "200": {
767
+ "description": "Payload of Array of SanityTask",
768
+ "content": {
769
+ "application/json": {
770
+ "schema": {
771
+ "type": "array",
772
+ "items": {
773
+ "$ref": "#/components/schemas/sanityTask"
774
+ }
775
+ }
776
+ }
777
+ },
778
+ "x-ms-summary": "Success"
779
+ },
780
+ "401": {
781
+ "description": "No description",
782
+ "x-ms-summary": "Unauthorized"
783
+ }
784
+ },
785
+ "security": [
786
+ {
787
+ "Implicit": [
788
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
789
+ ]
790
+ }
791
+ ]
792
+ }
793
+ },
794
+ "/v1.0/protected/offboarding-tasks": {
795
+ "get": {
796
+ "tags": [
797
+ "Tasks"
798
+ ],
799
+ "summary": "List every offboarding task",
800
+ "description": "Returns all offboarding tasks with their Portable Text description for the admin offboarding checklist.",
801
+ "operationId": "ListOffboardingTasks",
802
+ "responses": {
803
+ "200": {
804
+ "description": "Payload of Array of SanityTask",
805
+ "content": {
806
+ "application/json": {
807
+ "schema": {
808
+ "type": "array",
809
+ "items": {
810
+ "$ref": "#/components/schemas/sanityTask"
811
+ }
812
+ }
813
+ }
814
+ },
815
+ "x-ms-summary": "Success"
816
+ },
817
+ "401": {
818
+ "description": "No description",
819
+ "x-ms-summary": "Unauthorized"
820
+ }
821
+ },
822
+ "security": [
823
+ {
824
+ "Implicit": [
825
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
826
+ ]
827
+ }
828
+ ]
829
+ }
830
+ },
831
+ "/v1.0/protected/onboarding-tasks/with-reminder": {
832
+ "get": {
833
+ "tags": [
834
+ "Tasks"
835
+ ],
836
+ "summary": "List onboarding tasks with a Slack reminder",
837
+ "description": "Returns onboarding tasks that have reminderWeeksBefore + reminderSlackChannel set. Used by the admin oppgaver page.",
838
+ "operationId": "ListOnboardingTasksWithReminder",
839
+ "responses": {
840
+ "200": {
841
+ "description": "Payload of Array of SanityOnboardingTask",
842
+ "content": {
843
+ "application/json": {
844
+ "schema": {
845
+ "type": "array",
846
+ "items": {
847
+ "$ref": "#/components/schemas/sanityOnboardingTask"
848
+ }
849
+ }
850
+ }
851
+ },
852
+ "x-ms-summary": "Success"
853
+ },
854
+ "401": {
855
+ "description": "No description",
856
+ "x-ms-summary": "Unauthorized"
857
+ }
858
+ },
859
+ "security": [
860
+ {
861
+ "Implicit": [
862
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
863
+ ]
864
+ }
865
+ ]
866
+ }
867
+ },
868
+ "/v1.0/protected/tasks": {
869
+ "post": {
870
+ "tags": [
871
+ "Tasks"
872
+ ],
873
+ "summary": "Create an onboarding or offboarding task",
874
+ "description": "Adds a new task document to the library with optional Portable Text description and Slack reminder settings.",
875
+ "operationId": "CreateTask",
876
+ "requestBody": {
877
+ "content": {
878
+ "application/json": {
879
+ "schema": {
880
+ "$ref": "#/components/schemas/sanityCreateTask"
881
+ }
882
+ }
883
+ },
884
+ "required": true
885
+ },
886
+ "responses": {
887
+ "200": {
888
+ "description": "Payload of SanityTask",
889
+ "content": {
890
+ "application/json": {
891
+ "schema": {
892
+ "$ref": "#/components/schemas/sanityTask"
893
+ }
894
+ }
895
+ },
896
+ "x-ms-summary": "Success"
897
+ },
898
+ "400": {
899
+ "description": "Payload of Object",
900
+ "content": {
901
+ "application/json": {
902
+ "schema": {
903
+ "type": "object"
904
+ }
905
+ }
906
+ },
907
+ "x-ms-summary": "Bad Request"
908
+ },
909
+ "401": {
910
+ "description": "No description",
911
+ "x-ms-summary": "Unauthorized"
912
+ }
913
+ },
914
+ "security": [
915
+ {
916
+ "Implicit": [
917
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
918
+ ]
919
+ }
920
+ ]
921
+ }
922
+ },
923
+ "/v1.0/protected/tasks/{id}": {
924
+ "patch": {
925
+ "tags": [
926
+ "Tasks"
927
+ ],
928
+ "summary": "Update an onboarding or offboarding task",
929
+ "description": "Partially updates a task. Omitted fields are left unchanged; pass null to clear an optional field.",
930
+ "operationId": "PatchTask",
931
+ "parameters": [
932
+ {
933
+ "name": "id",
934
+ "in": "path",
935
+ "required": true,
936
+ "schema": {
937
+ "type": "string"
938
+ }
939
+ }
940
+ ],
941
+ "requestBody": {
942
+ "content": {
943
+ "application/json": {
944
+ "schema": {
945
+ "$ref": "#/components/schemas/sanityPatchTask"
946
+ }
947
+ }
948
+ },
949
+ "required": true
950
+ },
951
+ "responses": {
952
+ "200": {
953
+ "description": "Payload of SanityTask",
954
+ "content": {
955
+ "application/json": {
956
+ "schema": {
957
+ "$ref": "#/components/schemas/sanityTask"
958
+ }
959
+ }
960
+ },
961
+ "x-ms-summary": "Success"
962
+ },
963
+ "400": {
964
+ "description": "Payload of Object",
965
+ "content": {
966
+ "application/json": {
967
+ "schema": {
968
+ "type": "object"
969
+ }
970
+ }
971
+ },
972
+ "x-ms-summary": "Bad Request"
973
+ },
974
+ "401": {
975
+ "description": "No description",
976
+ "x-ms-summary": "Unauthorized"
977
+ },
978
+ "404": {
979
+ "description": "No description",
980
+ "x-ms-summary": "Not Found"
981
+ }
982
+ },
983
+ "security": [
984
+ {
985
+ "Implicit": [
986
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
987
+ ]
988
+ }
989
+ ]
990
+ },
991
+ "delete": {
992
+ "tags": [
993
+ "Tasks"
994
+ ],
995
+ "summary": "Delete a task",
996
+ "description": "Removes a task from the library. Does not touch candidate checklists that reference it.",
997
+ "operationId": "DeleteTask",
998
+ "parameters": [
999
+ {
1000
+ "name": "id",
1001
+ "in": "path",
1002
+ "required": true,
1003
+ "schema": {
1004
+ "type": "string"
1005
+ }
1006
+ }
1007
+ ],
1008
+ "responses": {
1009
+ "200": {
1010
+ "description": "Payload of SanityTask",
1011
+ "content": {
1012
+ "application/json": {
1013
+ "schema": {
1014
+ "$ref": "#/components/schemas/sanityTask"
1015
+ }
1016
+ }
1017
+ },
1018
+ "x-ms-summary": "Success"
1019
+ },
1020
+ "401": {
1021
+ "description": "No description",
1022
+ "x-ms-summary": "Unauthorized"
1023
+ },
1024
+ "404": {
1025
+ "description": "No description",
1026
+ "x-ms-summary": "Not Found"
1027
+ }
1028
+ },
1029
+ "security": [
1030
+ {
1031
+ "Implicit": [
1032
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
1033
+ ]
1034
+ }
1035
+ ]
1036
+ }
1037
+ },
1038
+ "/v1.0/protected/systems/{id}": {
1039
+ "patch": {
1040
+ "tags": [
1041
+ "Systems"
1042
+ ],
1043
+ "summary": "Update a system",
1044
+ "operationId": "PatchSystem",
1045
+ "parameters": [
1046
+ {
1047
+ "name": "id",
1048
+ "in": "path",
1049
+ "required": true,
1050
+ "schema": {
1051
+ "type": "string"
1052
+ }
1053
+ }
1054
+ ],
1055
+ "requestBody": {
1056
+ "content": {
1057
+ "application/json": {
1058
+ "schema": {
1059
+ "$ref": "#/components/schemas/sanityPatchSystem"
1060
+ }
1061
+ }
1062
+ },
1063
+ "required": true
1064
+ },
1065
+ "responses": {
1066
+ "200": {
1067
+ "description": "Payload of SanitySystemsInner",
1068
+ "content": {
1069
+ "application/json": {
1070
+ "schema": {
1071
+ "$ref": "#/components/schemas/sanitySystemsInner"
1072
+ }
1073
+ }
1074
+ },
1075
+ "x-ms-summary": "Success"
1076
+ },
1077
+ "400": {
1078
+ "description": "Payload of Object",
1079
+ "content": {
1080
+ "application/json": {
1081
+ "schema": {
1082
+ "type": "object"
1083
+ }
1084
+ }
1085
+ },
1086
+ "x-ms-summary": "Bad Request"
1087
+ },
1088
+ "401": {
1089
+ "description": "No description",
1090
+ "x-ms-summary": "Unauthorized"
1091
+ },
1092
+ "404": {
1093
+ "description": "No description",
1094
+ "x-ms-summary": "Not Found"
1095
+ }
1096
+ },
1097
+ "security": [
1098
+ {
1099
+ "Implicit": [
1100
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
1101
+ ]
1102
+ }
1103
+ ]
1104
+ },
1105
+ "delete": {
1106
+ "tags": [
1107
+ "Systems"
1108
+ ],
1109
+ "summary": "Delete a system",
1110
+ "operationId": "DeleteSystem",
1111
+ "parameters": [
1112
+ {
1113
+ "name": "id",
1114
+ "in": "path",
1115
+ "required": true,
1116
+ "schema": {
1117
+ "type": "string"
1118
+ }
1119
+ }
1120
+ ],
1121
+ "responses": {
1122
+ "200": {
1123
+ "description": "Payload of SanitySystemsInner",
1124
+ "content": {
1125
+ "application/json": {
1126
+ "schema": {
1127
+ "$ref": "#/components/schemas/sanitySystemsInner"
1128
+ }
1129
+ }
1130
+ },
1131
+ "x-ms-summary": "Success"
1132
+ },
1133
+ "401": {
1134
+ "description": "No description",
1135
+ "x-ms-summary": "Unauthorized"
1136
+ },
1137
+ "404": {
1138
+ "description": "No description",
1139
+ "x-ms-summary": "Not Found"
1140
+ }
1141
+ },
1142
+ "security": [
1143
+ {
1144
+ "Implicit": [
1145
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
1146
+ ]
1147
+ }
1148
+ ]
1149
+ }
1150
+ },
1151
+ "/v1.0/protected/employees": {
1152
+ "get": {
1153
+ "tags": [
1154
+ "Employees"
1155
+ ],
1156
+ "summary": "List employees for buddy/recruiter assignment",
1157
+ "description": "Lightweight employee list used by the candidate detail page's buddy and recruiter dropdowns.",
1158
+ "operationId": "ListRecruitmentEmployees",
1159
+ "responses": {
1160
+ "200": {
1161
+ "description": "Payload of Array of SanityBasicEmployee",
1162
+ "content": {
1163
+ "application/json": {
1164
+ "schema": {
1165
+ "type": "array",
1166
+ "items": {
1167
+ "$ref": "#/components/schemas/sanityBasicEmployee"
1168
+ }
1169
+ }
1170
+ }
1171
+ },
1172
+ "x-ms-summary": "Success"
1173
+ },
1174
+ "401": {
1175
+ "description": "No description",
1176
+ "x-ms-summary": "Unauthorized"
1177
+ }
1178
+ },
1179
+ "security": [
1180
+ {
1181
+ "Implicit": [
1182
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default"
1183
+ ]
1184
+ }
1185
+ ]
1186
+ }
1187
+ }
1188
+ },
1189
+ "components": {
1190
+ "schemas": {
1191
+ "chainAutomatedSystem": {
1192
+ "type": "object",
1193
+ "properties": {
1194
+ "title": {
1195
+ "type": "string"
1196
+ },
1197
+ "status": {
1198
+ "type": "string"
1199
+ }
1200
+ }
1201
+ },
1202
+ "componentBlocksInnerOneOfChildrenInner": {
1203
+ "type": "object",
1204
+ "properties": {
1205
+ "sanityType": {
1206
+ "enum": [
1207
+ "span"
1208
+ ],
1209
+ "type": "string",
1210
+ "default": "span"
1211
+ },
1212
+ "marks": {
1213
+ "type": "array",
1214
+ "items": {
1215
+ "type": "string"
1216
+ }
1217
+ },
1218
+ "sanityKey": {
1219
+ "type": "string"
1220
+ },
1221
+ "text": {
1222
+ "type": "string"
1223
+ }
1224
+ }
1225
+ },
1226
+ "componentBlocksInnerOneOfMarkDefsInner": {
1227
+ "type": "object",
1228
+ "properties": {
1229
+ "sanityType": {
1230
+ "enum": [
1231
+ "link"
1232
+ ],
1233
+ "type": "string",
1234
+ "default": "link"
1235
+ },
1236
+ "href": {
1237
+ "type": "string"
1238
+ },
1239
+ "sanityKey": {
1240
+ "type": "string"
1241
+ }
1242
+ }
1243
+ },
1244
+ "createCandidateInput": {
1245
+ "type": "object",
1246
+ "properties": {
1247
+ "status": {
1248
+ "enum": [
1249
+ "CREATED",
1250
+ "INTRODUCTION",
1251
+ "OFFER",
1252
+ "SIGNED",
1253
+ "ONBOARDING",
1254
+ "USER_CREATION_REVIEW",
1255
+ "OFFBOARDING",
1256
+ "REJECTED"
1257
+ ],
1258
+ "type": "string",
1259
+ "default": "CREATED"
1260
+ },
1261
+ "track": {
1262
+ "enum": [
1263
+ "developer",
1264
+ "data_engineer"
1265
+ ],
1266
+ "type": "string",
1267
+ "default": "developer"
1268
+ },
1269
+ "candidate": {
1270
+ "type": "string"
1271
+ },
1272
+ "additionalProperties": {
1273
+ "type": "object",
1274
+ "additionalProperties": {
1275
+ "type": "object"
1276
+ }
1277
+ }
1278
+ }
1279
+ },
1280
+ "employeeReference": {
1281
+ "type": "object",
1282
+ "properties": {
1283
+ "sanityType": {
1284
+ "enum": [
1285
+ "reference"
1286
+ ],
1287
+ "type": "string",
1288
+ "default": "reference"
1289
+ },
1290
+ "sanityRef": {
1291
+ "type": "string"
1292
+ },
1293
+ "sanityWeak": {
1294
+ "type": "boolean"
1295
+ }
1296
+ }
1297
+ },
1298
+ "onboardingResult": {
1299
+ "type": "object",
1300
+ "properties": {
1301
+ "step": {
1302
+ "type": "string"
1303
+ },
1304
+ "status": {
1305
+ "type": "string"
1306
+ },
1307
+ "message": {
1308
+ "type": "string"
1309
+ },
1310
+ "preferredEmail": {
1311
+ "type": "string"
1312
+ },
1313
+ "createdAccountId": {
1314
+ "type": "string"
1315
+ },
1316
+ "temporaryPassword": {
1317
+ "type": "string"
1318
+ }
1319
+ }
1320
+ },
1321
+ "sanityAssetSourceData": {
1322
+ "type": "object",
1323
+ "properties": {
1324
+ "sanityType": {
1325
+ "enum": [
1326
+ "sanity.assetSourceData"
1327
+ ],
1328
+ "type": "string",
1329
+ "default": "sanity.assetSourceData"
1330
+ },
1331
+ "id": {
1332
+ "type": "string"
1333
+ },
1334
+ "name": {
1335
+ "type": "string"
1336
+ },
1337
+ "url": {
1338
+ "type": "string"
1339
+ }
1340
+ }
1341
+ },
1342
+ "sanityBasicEmployee": {
1343
+ "type": "object",
1344
+ "properties": {
1345
+ "sanityType": {
1346
+ "enum": [
1347
+ "employee"
1348
+ ],
1349
+ "type": "string",
1350
+ "default": "employee"
1351
+ },
1352
+ "email": {
1353
+ "type": "string"
1354
+ },
1355
+ "image": {
1356
+ "$ref": "#/components/schemas/sanityTechnologyWithRelationsProjectsInnerTestimonialsInnerCustomerLogo"
1357
+ },
1358
+ "name": {
1359
+ "type": "string"
1360
+ },
1361
+ "sanityId": {
1362
+ "type": "string"
1363
+ },
1364
+ "slug": {
1365
+ "$ref": "#/components/schemas/slug"
1366
+ },
1367
+ "tags": {
1368
+ "type": "array",
1369
+ "items": {
1370
+ "$ref": "#/components/schemas/sanityTechnologyWithRelationsProjectsInnerTechnologiesInnerParent"
1371
+ }
1372
+ },
1373
+ "telephone": {
1374
+ "type": "string"
1375
+ }
1376
+ }
1377
+ },
1378
+ "sanityCandidate": {
1379
+ "type": "object",
1380
+ "properties": {
1381
+ "sanityType": {
1382
+ "enum": [
1383
+ "candidate"
1384
+ ],
1385
+ "type": "string",
1386
+ "default": "candidate"
1387
+ },
1388
+ "status": {
1389
+ "enum": [
1390
+ "CREATED",
1391
+ "INTRODUCTION",
1392
+ "OFFBOARDING",
1393
+ "OFFER",
1394
+ "ONBOARDING",
1395
+ "REJECTED",
1396
+ "SIGNED",
1397
+ "USER_CREATION_REVIEW"
1398
+ ],
1399
+ "type": "string",
1400
+ "default": "CREATED"
1401
+ },
1402
+ "track": {
1403
+ "enum": [
1404
+ "data_engineer",
1405
+ "developer"
1406
+ ],
1407
+ "type": "string",
1408
+ "default": "data_engineer"
1409
+ },
1410
+ "address": {
1411
+ "$ref": "#/components/schemas/sanityCandidateAddress"
1412
+ },
1413
+ "applicationLetter": {
1414
+ "$ref": "#/components/schemas/sanityCandidateGrades"
1415
+ },
1416
+ "applicationOther": {
1417
+ "type": "string"
1418
+ },
1419
+ "bankAccount": {
1420
+ "type": "string"
1421
+ },
1422
+ "buddy": {
1423
+ "$ref": "#/components/schemas/sanityEmployeeManager"
1424
+ },
1425
+ "candidate": {
1426
+ "type": "string"
1427
+ },
1428
+ "cv": {
1429
+ "$ref": "#/components/schemas/sanityCandidateGrades"
1430
+ },
1431
+ "email": {
1432
+ "type": "string"
1433
+ },
1434
+ "employee": {
1435
+ "$ref": "#/components/schemas/sanityEmployeeManager"
1436
+ },
1437
+ "fromApplication": {
1438
+ "type": "boolean"
1439
+ },
1440
+ "githubUsername": {
1441
+ "type": "string"
1442
+ },
1443
+ "grades": {
1444
+ "$ref": "#/components/schemas/sanityCandidateGrades"
1445
+ },
1446
+ "offboardingChecklist": {
1447
+ "type": "array",
1448
+ "items": {
1449
+ "$ref": "#/components/schemas/sanityCandidateOffboardingChecklistInner"
1450
+ }
1451
+ },
1452
+ "onboardingChecklist": {
1453
+ "type": "array",
1454
+ "items": {
1455
+ "$ref": "#/components/schemas/sanityCandidateOffboardingChecklistInner"
1456
+ }
1457
+ },
1458
+ "ownership": {
1459
+ "type": "number",
1460
+ "format": "double"
1461
+ },
1462
+ "preferredDisplayName": {
1463
+ "type": "string"
1464
+ },
1465
+ "preferredEmail": {
1466
+ "type": "string"
1467
+ },
1468
+ "profileImage": {
1469
+ "$ref": "#/components/schemas/sanityTvCategoryDashboardsInnerBackgroundImage"
1470
+ },
1471
+ "recruiter": {
1472
+ "$ref": "#/components/schemas/sanityEmployeeManager"
1473
+ },
1474
+ "references": {
1475
+ "type": "array",
1476
+ "items": {
1477
+ "$ref": "#/components/schemas/sanityCandidateReferencesInner"
1478
+ }
1479
+ },
1480
+ "sanityCreatedAt": {
1481
+ "type": "string"
1482
+ },
1483
+ "sanityId": {
1484
+ "type": "string"
1485
+ },
1486
+ "sanityRev": {
1487
+ "type": "string"
1488
+ },
1489
+ "sanityUpdatedAt": {
1490
+ "type": "string"
1491
+ },
1492
+ "shortUrl": {
1493
+ "type": "string"
1494
+ },
1495
+ "startDate": {
1496
+ "type": "string"
1497
+ },
1498
+ "systemsActive": {
1499
+ "type": "array",
1500
+ "items": {
1501
+ "$ref": "#/components/schemas/sanitySystemsInner"
1502
+ }
1503
+ },
1504
+ "telephone": {
1505
+ "type": "string"
1506
+ },
1507
+ "url": {
1508
+ "type": "string"
1509
+ }
1510
+ }
1511
+ },
1512
+ "sanityCandidateAddress": {
1513
+ "type": "object",
1514
+ "properties": {
1515
+ "city": {
1516
+ "type": "string"
1517
+ },
1518
+ "postalCode": {
1519
+ "type": "string"
1520
+ },
1521
+ "street": {
1522
+ "type": "string"
1523
+ }
1524
+ }
1525
+ },
1526
+ "sanityCandidateGrades": {
1527
+ "type": "object",
1528
+ "properties": {
1529
+ "sanityType": {
1530
+ "enum": [
1531
+ "file"
1532
+ ],
1533
+ "type": "string",
1534
+ "default": "file"
1535
+ },
1536
+ "asset": {
1537
+ "$ref": "#/components/schemas/sanityDocFileAsset"
1538
+ },
1539
+ "media": {
1540
+ "type": "object"
1541
+ }
1542
+ }
1543
+ },
1544
+ "sanityCandidateOffboardingChecklistInner": {
1545
+ "type": "object",
1546
+ "properties": {
1547
+ "sanityType": {
1548
+ "enum": [
1549
+ "reference"
1550
+ ],
1551
+ "type": "string",
1552
+ "default": "reference"
1553
+ },
1554
+ "sanityKey": {
1555
+ "type": "string"
1556
+ },
1557
+ "sanityRef": {
1558
+ "type": "string"
1559
+ },
1560
+ "sanityWeak": {
1561
+ "type": "boolean"
1562
+ }
1563
+ }
1564
+ },
1565
+ "sanityCandidateReferencesInner": {
1566
+ "type": "object",
1567
+ "properties": {
1568
+ "sanityType": {
1569
+ "enum": [
1570
+ "candidateReference"
1571
+ ],
1572
+ "type": "string",
1573
+ "default": "candidateReference"
1574
+ },
1575
+ "details": {
1576
+ "type": "string"
1577
+ },
1578
+ "email": {
1579
+ "type": "string"
1580
+ },
1581
+ "name": {
1582
+ "type": "string"
1583
+ },
1584
+ "phone": {
1585
+ "type": "string"
1586
+ },
1587
+ "sanityKey": {
1588
+ "type": "string"
1589
+ }
1590
+ }
1591
+ },
1592
+ "sanityCreateSystem": {
1593
+ "type": "object",
1594
+ "properties": {
1595
+ "description": {
1596
+ "type": "array",
1597
+ "items": {
1598
+ "type": "object"
1599
+ }
1600
+ },
1601
+ "links": {
1602
+ "type": "array",
1603
+ "items": {
1604
+ "type": "string"
1605
+ }
1606
+ },
1607
+ "title": {
1608
+ "type": "string"
1609
+ },
1610
+ "additionalProperties": {
1611
+ "type": "object",
1612
+ "additionalProperties": {
1613
+ "type": "object"
1614
+ }
1615
+ }
1616
+ }
1617
+ },
1618
+ "sanityCreateTask": {
1619
+ "type": "object",
1620
+ "properties": {
1621
+ "type": {
1622
+ "enum": [
1623
+ "onboarding",
1624
+ "offboarding"
1625
+ ],
1626
+ "type": "string",
1627
+ "default": "onboarding"
1628
+ },
1629
+ "description": {
1630
+ "type": "array",
1631
+ "items": {
1632
+ "type": "object"
1633
+ }
1634
+ },
1635
+ "reminderSlackChannel": {
1636
+ "type": "string"
1637
+ },
1638
+ "reminderWeeksBefore": {
1639
+ "type": "number",
1640
+ "format": "double",
1641
+ "nullable": true
1642
+ },
1643
+ "title": {
1644
+ "type": "string"
1645
+ },
1646
+ "additionalProperties": {
1647
+ "type": "object",
1648
+ "additionalProperties": {
1649
+ "type": "object"
1650
+ }
1651
+ }
1652
+ }
1653
+ },
1654
+ "sanityDocFileAsset": {
1655
+ "type": "object",
1656
+ "properties": {
1657
+ "sanityType": {
1658
+ "enum": [
1659
+ "sanity.fileAsset"
1660
+ ],
1661
+ "type": "string",
1662
+ "default": "sanity.fileAsset"
1663
+ },
1664
+ "altText": {
1665
+ "type": "string"
1666
+ },
1667
+ "assetId": {
1668
+ "type": "string"
1669
+ },
1670
+ "description": {
1671
+ "type": "string"
1672
+ },
1673
+ "extension": {
1674
+ "type": "string"
1675
+ },
1676
+ "label": {
1677
+ "type": "string"
1678
+ },
1679
+ "mimeType": {
1680
+ "type": "string"
1681
+ },
1682
+ "originalFilename": {
1683
+ "type": "string"
1684
+ },
1685
+ "path": {
1686
+ "type": "string"
1687
+ },
1688
+ "sanityCreatedAt": {
1689
+ "type": "string"
1690
+ },
1691
+ "sanityId": {
1692
+ "type": "string"
1693
+ },
1694
+ "sanityRev": {
1695
+ "type": "string"
1696
+ },
1697
+ "sanityUpdatedAt": {
1698
+ "type": "string"
1699
+ },
1700
+ "sha1hash": {
1701
+ "type": "string"
1702
+ },
1703
+ "size": {
1704
+ "type": "number",
1705
+ "format": "double"
1706
+ },
1707
+ "source": {
1708
+ "$ref": "#/components/schemas/sanityAssetSourceData"
1709
+ },
1710
+ "title": {
1711
+ "type": "string"
1712
+ },
1713
+ "uploadId": {
1714
+ "type": "string"
1715
+ },
1716
+ "url": {
1717
+ "type": "string"
1718
+ }
1719
+ }
1720
+ },
1721
+ "sanityEmployeeManager": {
1722
+ "type": "object",
1723
+ "properties": {
1724
+ "sanityType": {
1725
+ "enum": [
1726
+ "employee"
1727
+ ],
1728
+ "type": "string",
1729
+ "default": "employee"
1730
+ },
1731
+ "email": {
1732
+ "type": "string"
1733
+ },
1734
+ "image": {
1735
+ "$ref": "#/components/schemas/sanityTechnologyWithRelationsProjectsInnerTestimonialsInnerCustomerLogo"
1736
+ },
1737
+ "name": {
1738
+ "type": "string"
1739
+ },
1740
+ "sanityId": {
1741
+ "type": "string"
1742
+ },
1743
+ "slug": {
1744
+ "$ref": "#/components/schemas/slug"
1745
+ },
1746
+ "tags": {
1747
+ "type": "array",
1748
+ "items": {
1749
+ "$ref": "#/components/schemas/sanityTechnologyWithRelationsProjectsInnerTechnologiesInnerParent"
1750
+ }
1751
+ },
1752
+ "telephone": {
1753
+ "type": "string"
1754
+ }
1755
+ }
1756
+ },
1757
+ "sanityFileAssetReference": {
1758
+ "type": "object",
1759
+ "properties": {
1760
+ "sanityType": {
1761
+ "enum": [
1762
+ "reference"
1763
+ ],
1764
+ "type": "string",
1765
+ "default": "reference"
1766
+ },
1767
+ "sanityRef": {
1768
+ "type": "string"
1769
+ },
1770
+ "sanityWeak": {
1771
+ "type": "boolean"
1772
+ }
1773
+ }
1774
+ },
1775
+ "sanityImageAssetReference": {
1776
+ "type": "object",
1777
+ "properties": {
1778
+ "sanityType": {
1779
+ "enum": [
1780
+ "reference"
1781
+ ],
1782
+ "type": "string",
1783
+ "default": "reference"
1784
+ },
1785
+ "sanityRef": {
1786
+ "type": "string"
1787
+ },
1788
+ "sanityWeak": {
1789
+ "type": "boolean"
1790
+ }
1791
+ }
1792
+ },
1793
+ "sanityImageCrop": {
1794
+ "type": "object",
1795
+ "properties": {
1796
+ "sanityType": {
1797
+ "enum": [
1798
+ "sanity.imageCrop"
1799
+ ],
1800
+ "type": "string",
1801
+ "default": "sanity.imageCrop"
1802
+ },
1803
+ "bottom": {
1804
+ "type": "number",
1805
+ "format": "double"
1806
+ },
1807
+ "left": {
1808
+ "type": "number",
1809
+ "format": "double"
1810
+ },
1811
+ "right": {
1812
+ "type": "number",
1813
+ "format": "double"
1814
+ },
1815
+ "top": {
1816
+ "type": "number",
1817
+ "format": "double"
1818
+ }
1819
+ }
1820
+ },
1821
+ "sanityImageHotspot": {
1822
+ "type": "object",
1823
+ "properties": {
1824
+ "sanityType": {
1825
+ "enum": [
1826
+ "sanity.imageHotspot"
1827
+ ],
1828
+ "type": "string",
1829
+ "default": "sanity.imageHotspot"
1830
+ },
1831
+ "height": {
1832
+ "type": "number",
1833
+ "format": "double"
1834
+ },
1835
+ "width": {
1836
+ "type": "number",
1837
+ "format": "double"
1838
+ },
1839
+ "x": {
1840
+ "type": "number",
1841
+ "format": "double"
1842
+ },
1843
+ "y": {
1844
+ "type": "number",
1845
+ "format": "double"
1846
+ }
1847
+ }
1848
+ },
1849
+ "sanityJobPosition": {
1850
+ "type": "object",
1851
+ "properties": {
1852
+ "sanityType": {
1853
+ "enum": [
1854
+ "jobPosition"
1855
+ ],
1856
+ "type": "string",
1857
+ "default": "jobPosition"
1858
+ },
1859
+ "askForGrades": {
1860
+ "type": "boolean"
1861
+ },
1862
+ "deadline": {
1863
+ "type": "string"
1864
+ },
1865
+ "description": {
1866
+ "type": "array",
1867
+ "items": {
1868
+ "$ref": "#/components/schemas/sanitySystemsInnerDescriptionInner"
1869
+ }
1870
+ },
1871
+ "image": {
1872
+ "$ref": "#/components/schemas/sanityTvCategoryDashboardsInnerBackgroundImage"
1873
+ },
1874
+ "metaDescription": {
1875
+ "type": "string"
1876
+ },
1877
+ "sanityCreatedAt": {
1878
+ "type": "string"
1879
+ },
1880
+ "sanityId": {
1881
+ "type": "string"
1882
+ },
1883
+ "sanityRev": {
1884
+ "type": "string"
1885
+ },
1886
+ "sanityUpdatedAt": {
1887
+ "type": "string"
1888
+ },
1889
+ "slug": {
1890
+ "$ref": "#/components/schemas/slug"
1891
+ },
1892
+ "title": {
1893
+ "type": "string"
1894
+ }
1895
+ }
1896
+ },
1897
+ "sanityOnboardingTask": {
1898
+ "type": "object",
1899
+ "properties": {
1900
+ "type": {
1901
+ "enum": [
1902
+ "onboarding"
1903
+ ],
1904
+ "type": "string",
1905
+ "default": "onboarding"
1906
+ },
1907
+ "remindDaysBefore": {
1908
+ "type": "number",
1909
+ "format": "double"
1910
+ },
1911
+ "sanityCreatedAt": {
1912
+ "type": "string"
1913
+ },
1914
+ "sanityId": {
1915
+ "type": "string"
1916
+ },
1917
+ "sanityRev": {
1918
+ "type": "string"
1919
+ },
1920
+ "sanityType": {
1921
+ "type": "string"
1922
+ },
1923
+ "sanityUpdatedAt": {
1924
+ "type": "string"
1925
+ },
1926
+ "title": {
1927
+ "type": "string"
1928
+ },
1929
+ "additionalProperties": {
1930
+ "type": "object",
1931
+ "additionalProperties": {
1932
+ "type": "object"
1933
+ }
1934
+ }
1935
+ }
1936
+ },
1937
+ "sanityPatchCandidate": {
1938
+ "type": "object",
1939
+ "properties": {
1940
+ "sanityType": {
1941
+ "enum": [
1942
+ "candidate"
1943
+ ],
1944
+ "type": "string",
1945
+ "default": "candidate",
1946
+ "nullable": true
1947
+ },
1948
+ "status": {
1949
+ "enum": [
1950
+ "CREATED",
1951
+ "INTRODUCTION",
1952
+ "OFFER",
1953
+ "SIGNED",
1954
+ "ONBOARDING",
1955
+ "USER_CREATION_REVIEW",
1956
+ "OFFBOARDING",
1957
+ "REJECTED"
1958
+ ],
1959
+ "type": "string",
1960
+ "default": "CREATED",
1961
+ "nullable": true
1962
+ },
1963
+ "track": {
1964
+ "enum": [
1965
+ "developer",
1966
+ "data_engineer"
1967
+ ],
1968
+ "type": "string",
1969
+ "default": "developer",
1970
+ "nullable": true
1971
+ },
1972
+ "address": {
1973
+ "$ref": "#/components/schemas/sanityPatchCandidateAddress"
1974
+ },
1975
+ "applicationLetter": {
1976
+ "$ref": "#/components/schemas/sanityPatchCandidateApplicationLetter"
1977
+ },
1978
+ "applicationOther": {
1979
+ "type": "string"
1980
+ },
1981
+ "bankAccount": {
1982
+ "type": "string"
1983
+ },
1984
+ "buddy": {
1985
+ "$ref": "#/components/schemas/employeeReference"
1986
+ },
1987
+ "candidate": {
1988
+ "type": "string"
1989
+ },
1990
+ "cv": {
1991
+ "$ref": "#/components/schemas/sanityPatchCandidateApplicationLetter"
1992
+ },
1993
+ "email": {
1994
+ "type": "string"
1995
+ },
1996
+ "employee": {
1997
+ "$ref": "#/components/schemas/employeeReference"
1998
+ },
1999
+ "fromApplication": {
2000
+ "type": "boolean",
2001
+ "nullable": true
2002
+ },
2003
+ "githubUsername": {
2004
+ "type": "string"
2005
+ },
2006
+ "grades": {
2007
+ "$ref": "#/components/schemas/sanityPatchCandidateApplicationLetter"
2008
+ },
2009
+ "offboardingChecklist": {
2010
+ "type": "array",
2011
+ "items": {
2012
+ "$ref": "#/components/schemas/sanityCandidateOffboardingChecklistInner"
2013
+ }
2014
+ },
2015
+ "onboardingChecklist": {
2016
+ "type": "array",
2017
+ "items": {
2018
+ "$ref": "#/components/schemas/sanityCandidateOffboardingChecklistInner"
2019
+ }
2020
+ },
2021
+ "ownership": {
2022
+ "type": "number",
2023
+ "format": "double",
2024
+ "nullable": true
2025
+ },
2026
+ "preferredDisplayName": {
2027
+ "type": "string"
2028
+ },
2029
+ "preferredEmail": {
2030
+ "type": "string"
2031
+ },
2032
+ "profileImage": {
2033
+ "$ref": "#/components/schemas/sanityPatchPageMetaImage"
2034
+ },
2035
+ "recruiter": {
2036
+ "$ref": "#/components/schemas/employeeReference"
2037
+ },
2038
+ "references": {
2039
+ "type": "array",
2040
+ "items": {
2041
+ "$ref": "#/components/schemas/sanityCandidateReferencesInner"
2042
+ }
2043
+ },
2044
+ "shortUrl": {
2045
+ "type": "string"
2046
+ },
2047
+ "startDate": {
2048
+ "type": "string"
2049
+ },
2050
+ "systemsActive": {
2051
+ "type": "array",
2052
+ "items": {
2053
+ "$ref": "#/components/schemas/sanityPatchCandidateSystemsActiveInner"
2054
+ }
2055
+ },
2056
+ "telephone": {
2057
+ "type": "string"
2058
+ },
2059
+ "url": {
2060
+ "type": "string"
2061
+ },
2062
+ "additionalProperties": {
2063
+ "type": "object",
2064
+ "additionalProperties": {
2065
+ "type": "object"
2066
+ }
2067
+ }
2068
+ }
2069
+ },
2070
+ "sanityPatchCandidateAddress": {
2071
+ "type": "object",
2072
+ "properties": {
2073
+ "city": {
2074
+ "type": "string"
2075
+ },
2076
+ "postalCode": {
2077
+ "type": "string"
2078
+ },
2079
+ "street": {
2080
+ "type": "string"
2081
+ }
2082
+ }
2083
+ },
2084
+ "sanityPatchCandidateApplicationLetter": {
2085
+ "type": "object",
2086
+ "properties": {
2087
+ "sanityType": {
2088
+ "enum": [
2089
+ "file"
2090
+ ],
2091
+ "type": "string",
2092
+ "default": "file"
2093
+ },
2094
+ "asset": {
2095
+ "$ref": "#/components/schemas/sanityFileAssetReference"
2096
+ },
2097
+ "media": {
2098
+ "type": "object"
2099
+ }
2100
+ }
2101
+ },
2102
+ "sanityPatchCandidateSystemsActiveInner": {
2103
+ "type": "object",
2104
+ "properties": {
2105
+ "sanityType": {
2106
+ "enum": [
2107
+ "reference"
2108
+ ],
2109
+ "type": "string",
2110
+ "default": "reference"
2111
+ },
2112
+ "sanityKey": {
2113
+ "type": "string"
2114
+ },
2115
+ "sanityRef": {
2116
+ "type": "string"
2117
+ },
2118
+ "sanityWeak": {
2119
+ "type": "boolean"
2120
+ }
2121
+ }
2122
+ },
2123
+ "sanityPatchPageMetaImage": {
2124
+ "type": "object",
2125
+ "properties": {
2126
+ "sanityType": {
2127
+ "enum": [
2128
+ "image"
2129
+ ],
2130
+ "type": "string",
2131
+ "default": "image"
2132
+ },
2133
+ "asset": {
2134
+ "$ref": "#/components/schemas/sanityImageAssetReference"
2135
+ },
2136
+ "crop": {
2137
+ "$ref": "#/components/schemas/sanityImageCrop"
2138
+ },
2139
+ "hotspot": {
2140
+ "$ref": "#/components/schemas/sanityImageHotspot"
2141
+ },
2142
+ "media": {
2143
+ "type": "object"
2144
+ }
2145
+ }
2146
+ },
2147
+ "sanityPatchSystem": {
2148
+ "type": "object",
2149
+ "properties": {
2150
+ "description": {
2151
+ "type": "array",
2152
+ "items": {
2153
+ "type": "object"
2154
+ }
2155
+ },
2156
+ "links": {
2157
+ "type": "array",
2158
+ "items": {
2159
+ "type": "string"
2160
+ }
2161
+ },
2162
+ "title": {
2163
+ "type": "string"
2164
+ },
2165
+ "additionalProperties": {
2166
+ "type": "object",
2167
+ "additionalProperties": {
2168
+ "type": "object"
2169
+ }
2170
+ }
2171
+ }
2172
+ },
2173
+ "sanityPatchTask": {
2174
+ "type": "object",
2175
+ "properties": {
2176
+ "type": {
2177
+ "enum": [
2178
+ "onboarding",
2179
+ "offboarding"
2180
+ ],
2181
+ "type": "string",
2182
+ "default": "onboarding",
2183
+ "nullable": true
2184
+ },
2185
+ "description": {
2186
+ "type": "array",
2187
+ "items": {
2188
+ "type": "object"
2189
+ }
2190
+ },
2191
+ "reminderSlackChannel": {
2192
+ "type": "string"
2193
+ },
2194
+ "reminderWeeksBefore": {
2195
+ "type": "number",
2196
+ "format": "double",
2197
+ "nullable": true
2198
+ },
2199
+ "title": {
2200
+ "type": "string"
2201
+ },
2202
+ "additionalProperties": {
2203
+ "type": "object",
2204
+ "additionalProperties": {
2205
+ "type": "object"
2206
+ }
2207
+ }
2208
+ }
2209
+ },
2210
+ "sanitySystemsInner": {
2211
+ "type": "object",
2212
+ "properties": {
2213
+ "reminderSlackChannel": {
2214
+ "enum": [
2215
+ "#spor-økonomi",
2216
+ "#spor-rekruttering",
2217
+ "#spor-selskapsadmin",
2218
+ "#spor-sosialt",
2219
+ "#spor-utvikling"
2220
+ ],
2221
+ "type": "string",
2222
+ "default": "#spor-økonomi",
2223
+ "nullable": true
2224
+ },
2225
+ "sanityType": {
2226
+ "enum": [
2227
+ "system"
2228
+ ],
2229
+ "type": "string",
2230
+ "default": "system"
2231
+ },
2232
+ "description": {
2233
+ "type": "array",
2234
+ "items": {
2235
+ "$ref": "#/components/schemas/sanitySystemsInnerDescriptionInner"
2236
+ }
2237
+ },
2238
+ "image": {
2239
+ "$ref": "#/components/schemas/sanityTvCategoryDashboardsInnerBackgroundImage"
2240
+ },
2241
+ "links": {
2242
+ "type": "array",
2243
+ "items": {
2244
+ "type": "string"
2245
+ }
2246
+ },
2247
+ "remindDaysBefore": {
2248
+ "type": "number",
2249
+ "format": "double"
2250
+ },
2251
+ "sanityCreatedAt": {
2252
+ "type": "string"
2253
+ },
2254
+ "sanityId": {
2255
+ "type": "string"
2256
+ },
2257
+ "sanityRev": {
2258
+ "type": "string"
2259
+ },
2260
+ "sanityUpdatedAt": {
2261
+ "type": "string"
2262
+ },
2263
+ "title": {
2264
+ "type": "string"
2265
+ }
2266
+ }
2267
+ },
2268
+ "sanitySystemsInnerDescriptionInner": {
2269
+ "type": "object",
2270
+ "properties": {
2271
+ "listItem": {
2272
+ "enum": [
2273
+ "bullet",
2274
+ "number"
2275
+ ],
2276
+ "type": "string",
2277
+ "default": "bullet",
2278
+ "nullable": true
2279
+ },
2280
+ "sanityType": {
2281
+ "enum": [
2282
+ "block"
2283
+ ],
2284
+ "type": "string",
2285
+ "default": "block"
2286
+ },
2287
+ "style": {
2288
+ "enum": [
2289
+ "blockquote",
2290
+ "h1",
2291
+ "h2",
2292
+ "h3",
2293
+ "h4",
2294
+ "h5",
2295
+ "h6",
2296
+ "normal"
2297
+ ],
2298
+ "type": "string",
2299
+ "default": "blockquote",
2300
+ "nullable": true
2301
+ },
2302
+ "children": {
2303
+ "type": "array",
2304
+ "items": {
2305
+ "$ref": "#/components/schemas/componentBlocksInnerOneOfChildrenInner"
2306
+ }
2307
+ },
2308
+ "level": {
2309
+ "type": "number",
2310
+ "format": "double"
2311
+ },
2312
+ "markDefs": {
2313
+ "type": "array",
2314
+ "items": {
2315
+ "$ref": "#/components/schemas/componentBlocksInnerOneOfMarkDefsInner"
2316
+ }
2317
+ },
2318
+ "sanityKey": {
2319
+ "type": "string"
2320
+ }
2321
+ }
2322
+ },
2323
+ "sanityTask": {
2324
+ "type": "object",
2325
+ "properties": {
2326
+ "type": {
2327
+ "enum": [
2328
+ "onboarding",
2329
+ "offboarding"
2330
+ ],
2331
+ "type": "string",
2332
+ "default": "onboarding"
2333
+ },
2334
+ "description": {
2335
+ "type": "array",
2336
+ "items": {
2337
+ "type": "object"
2338
+ }
2339
+ },
2340
+ "reminderSlackChannel": {
2341
+ "type": "string"
2342
+ },
2343
+ "reminderWeeksBefore": {
2344
+ "type": "number",
2345
+ "format": "double",
2346
+ "nullable": true
2347
+ },
2348
+ "sanityCreatedAt": {
2349
+ "type": "string"
2350
+ },
2351
+ "sanityId": {
2352
+ "type": "string"
2353
+ },
2354
+ "sanityRev": {
2355
+ "type": "string"
2356
+ },
2357
+ "sanityType": {
2358
+ "type": "string"
2359
+ },
2360
+ "sanityUpdatedAt": {
2361
+ "type": "string"
2362
+ },
2363
+ "title": {
2364
+ "type": "string"
2365
+ },
2366
+ "additionalProperties": {
2367
+ "type": "object",
2368
+ "additionalProperties": {
2369
+ "type": "object"
2370
+ }
2371
+ }
2372
+ }
2373
+ },
2374
+ "sanityTechnologyWithRelationsProjectsInnerTechnologiesInnerParent": {
2375
+ "type": "object",
2376
+ "properties": {
2377
+ "sanityType": {
2378
+ "enum": [
2379
+ "tag"
2380
+ ],
2381
+ "type": "string",
2382
+ "default": "tag"
2383
+ },
2384
+ "name": {
2385
+ "type": "string"
2386
+ },
2387
+ "sanityId": {
2388
+ "type": "string"
2389
+ },
2390
+ "slug": {
2391
+ "$ref": "#/components/schemas/slug"
2392
+ }
2393
+ }
2394
+ },
2395
+ "sanityTechnologyWithRelationsProjectsInnerTestimonialsInnerCustomerLogo": {
2396
+ "type": "object",
2397
+ "properties": {
2398
+ "sanityType": {
2399
+ "enum": [
2400
+ "image"
2401
+ ],
2402
+ "type": "string",
2403
+ "default": "image"
2404
+ },
2405
+ "asset": {
2406
+ "$ref": "#/components/schemas/sanityTvCategoryDashboardsInnerBackgroundImageAsset"
2407
+ }
2408
+ }
2409
+ },
2410
+ "sanityTvCategoryDashboardsInnerBackgroundImage": {
2411
+ "type": "object",
2412
+ "properties": {
2413
+ "sanityType": {
2414
+ "enum": [
2415
+ "image"
2416
+ ],
2417
+ "type": "string",
2418
+ "default": "image"
2419
+ },
2420
+ "asset": {
2421
+ "$ref": "#/components/schemas/sanityTvCategoryDashboardsInnerBackgroundImageAsset"
2422
+ }
2423
+ }
2424
+ },
2425
+ "sanityTvCategoryDashboardsInnerBackgroundImageAsset": {
2426
+ "type": "object",
2427
+ "properties": {
2428
+ "sanityType": {
2429
+ "enum": [
2430
+ "sanity.imageAsset"
2431
+ ],
2432
+ "type": "string",
2433
+ "default": "sanity.imageAsset"
2434
+ },
2435
+ "mimeType": {
2436
+ "type": "string"
2437
+ },
2438
+ "originalFilename": {
2439
+ "type": "string"
2440
+ },
2441
+ "sanityId": {
2442
+ "type": "string"
2443
+ },
2444
+ "url": {
2445
+ "type": "string"
2446
+ }
2447
+ }
2448
+ },
2449
+ "slug": {
2450
+ "type": "object",
2451
+ "properties": {
2452
+ "sanityType": {
2453
+ "enum": [
2454
+ "slug"
2455
+ ],
2456
+ "type": "string",
2457
+ "default": "slug"
2458
+ },
2459
+ "current": {
2460
+ "type": "string"
2461
+ },
2462
+ "source": {
2463
+ "type": "string"
2464
+ }
2465
+ }
2466
+ }
2467
+ },
2468
+ "securitySchemes": {
2469
+ "Implicit": {
2470
+ "type": "oauth2",
2471
+ "flows": {
2472
+ "implicit": {
2473
+ "authorizationUrl": "https://login.microsoftonline.com/a8533784-aa3c-403b-a61a-1533ecc6e3ed/oauth2/v2.0/authorize",
2474
+ "tokenUrl": "https://login.microsoftonline.com/a8533784-aa3c-403b-a61a-1533ecc6e3ed/oauth2/v2.0/token",
2475
+ "refreshUrl": "https://login.microsoftonline.com/a8533784-aa3c-403b-a61a-1533ecc6e3ed/oauth2/v2.0/token",
2476
+ "scopes": {
2477
+ "api://050da74a-523f-48ba-a9de-e5c8d6805a93/.default": "Default function scope"
2478
+ }
2479
+ }
2480
+ }
2481
+ }
2482
+ }
2483
+ }
2484
+ }