@snokam/mcp-api 0.173.3 → 0.174.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.
@@ -0,0 +1,4999 @@
1
+ {
2
+ "openapi": "3.0.1",
3
+ "info": {
4
+ "title": "Sales API",
5
+ "description": "Sales management API",
6
+ "version": "v1.0.0"
7
+ },
8
+ "servers": [
9
+ {
10
+ "url": "https://sales.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/tenders/{id}/match-consultants": {
38
+ "post": {
39
+ "tags": [
40
+ "Tenders"
41
+ ],
42
+ "summary": "Start CV matching for a tender",
43
+ "operationId": "StartCvMatching",
44
+ "parameters": [
45
+ {
46
+ "name": "id",
47
+ "in": "path",
48
+ "required": true,
49
+ "schema": {
50
+ "type": "string"
51
+ }
52
+ }
53
+ ],
54
+ "responses": {
55
+ "202": {
56
+ "description": "Payload of Object",
57
+ "content": {
58
+ "application/json": {
59
+ "schema": {
60
+ "type": "object"
61
+ }
62
+ }
63
+ }
64
+ },
65
+ "404": {
66
+ "description": "No description"
67
+ }
68
+ },
69
+ "security": [
70
+ {
71
+ "Implicit": [
72
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
73
+ ]
74
+ },
75
+ {
76
+ "ApiKey": []
77
+ }
78
+ ]
79
+ }
80
+ },
81
+ "/v1.0/jobs/{jobId}": {
82
+ "get": {
83
+ "tags": [
84
+ "Admin"
85
+ ],
86
+ "summary": "Get agent job by ID",
87
+ "operationId": "GetAgentJob",
88
+ "parameters": [
89
+ {
90
+ "name": "jobId",
91
+ "in": "path",
92
+ "required": true,
93
+ "schema": {
94
+ "type": "string"
95
+ }
96
+ }
97
+ ],
98
+ "responses": {
99
+ "200": {
100
+ "description": "Payload of AgentJob",
101
+ "content": {
102
+ "application/json": {
103
+ "schema": {
104
+ "$ref": "#/components/schemas/agentJob"
105
+ }
106
+ }
107
+ }
108
+ },
109
+ "404": {
110
+ "description": "No description"
111
+ }
112
+ },
113
+ "security": [
114
+ {
115
+ "Implicit": [
116
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
117
+ ]
118
+ },
119
+ {
120
+ "ApiKey": []
121
+ }
122
+ ]
123
+ }
124
+ },
125
+ "/v1.0/admin/reprocess-ingestion": {
126
+ "post": {
127
+ "tags": [
128
+ "Admin"
129
+ ],
130
+ "summary": "Batch reprocess tender ingestion",
131
+ "operationId": "ReprocessIngestion",
132
+ "parameters": [
133
+ {
134
+ "name": "unmatchedOnly",
135
+ "in": "query",
136
+ "description": "If true, only reprocess tenders with no existing consultant matches",
137
+ "schema": {
138
+ "type": "boolean"
139
+ }
140
+ }
141
+ ],
142
+ "responses": {
143
+ "200": {
144
+ "description": "Payload of Object",
145
+ "content": {
146
+ "application/json": {
147
+ "schema": {
148
+ "type": "object"
149
+ }
150
+ }
151
+ }
152
+ }
153
+ },
154
+ "security": [
155
+ {
156
+ "Implicit": [
157
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
158
+ ]
159
+ },
160
+ {
161
+ "ApiKey": []
162
+ }
163
+ ]
164
+ }
165
+ },
166
+ "/v1.0/tenders/ingest": {
167
+ "post": {
168
+ "tags": [
169
+ "Tenders"
170
+ ],
171
+ "summary": "Start tender ingestion",
172
+ "operationId": "StartTenderIngestion",
173
+ "requestBody": {
174
+ "content": {
175
+ "application/json": {
176
+ "schema": {
177
+ "$ref": "#/components/schemas/ingestionRequest"
178
+ }
179
+ }
180
+ },
181
+ "required": true
182
+ },
183
+ "responses": {
184
+ "202": {
185
+ "description": "Payload of Object",
186
+ "content": {
187
+ "application/json": {
188
+ "schema": {
189
+ "type": "object"
190
+ }
191
+ }
192
+ }
193
+ }
194
+ },
195
+ "security": [
196
+ {
197
+ "Implicit": [
198
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
199
+ ]
200
+ },
201
+ {
202
+ "ApiKey": []
203
+ }
204
+ ]
205
+ }
206
+ },
207
+ "/v1.0/admin/reprocess-emails": {
208
+ "post": {
209
+ "tags": [
210
+ "Admin"
211
+ ],
212
+ "summary": "Re-fetch all emails since N days ago and re-ingest them so raw content is stored as source_email blobs",
213
+ "operationId": "ReprocessEmails",
214
+ "parameters": [
215
+ {
216
+ "name": "daysSince",
217
+ "in": "query",
218
+ "description": "Number of days back to fetch emails (default: 90)",
219
+ "schema": {
220
+ "type": "string"
221
+ }
222
+ }
223
+ ],
224
+ "responses": {
225
+ "200": {
226
+ "description": "Payload of Object",
227
+ "content": {
228
+ "application/json": {
229
+ "schema": {
230
+ "type": "object"
231
+ }
232
+ }
233
+ }
234
+ }
235
+ },
236
+ "security": [
237
+ {
238
+ "Implicit": []
239
+ },
240
+ {
241
+ "ApiKey": []
242
+ }
243
+ ]
244
+ }
245
+ },
246
+ "/v1.0/scan/doffin": {
247
+ "post": {
248
+ "tags": [
249
+ "Scan"
250
+ ],
251
+ "summary": "Trigger a Doffin scan immediately",
252
+ "operationId": "TriggerDoffinScan",
253
+ "responses": {
254
+ "200": {
255
+ "description": "Payload of Object",
256
+ "content": {
257
+ "application/json": {
258
+ "schema": {
259
+ "type": "object"
260
+ }
261
+ }
262
+ }
263
+ }
264
+ },
265
+ "security": [
266
+ {
267
+ "Implicit": [
268
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
269
+ ]
270
+ },
271
+ {
272
+ "ApiKey": []
273
+ }
274
+ ]
275
+ }
276
+ },
277
+ "/v1.0/scan/email": {
278
+ "post": {
279
+ "tags": [
280
+ "Scan"
281
+ ],
282
+ "summary": "Trigger an email scan immediately",
283
+ "operationId": "TriggerEmailScan",
284
+ "responses": {
285
+ "200": {
286
+ "description": "Payload of Object",
287
+ "content": {
288
+ "application/json": {
289
+ "schema": {
290
+ "type": "object"
291
+ }
292
+ }
293
+ }
294
+ }
295
+ },
296
+ "security": [
297
+ {
298
+ "Implicit": [
299
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
300
+ ]
301
+ },
302
+ {
303
+ "ApiKey": []
304
+ }
305
+ ]
306
+ }
307
+ },
308
+ "/v1.0/scan/sites": {
309
+ "post": {
310
+ "tags": [
311
+ "Scan"
312
+ ],
313
+ "summary": "Trigger an agentic site scan immediately over all configured sources",
314
+ "operationId": "TriggerSiteScan",
315
+ "responses": {
316
+ "200": {
317
+ "description": "Payload of Object",
318
+ "content": {
319
+ "application/json": {
320
+ "schema": {
321
+ "type": "object"
322
+ }
323
+ }
324
+ }
325
+ }
326
+ },
327
+ "security": [
328
+ {
329
+ "Implicit": [
330
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
331
+ ]
332
+ },
333
+ {
334
+ "ApiKey": []
335
+ }
336
+ ]
337
+ }
338
+ },
339
+ "/v1.0/crawl/jobs/reap-zombies": {
340
+ "post": {
341
+ "tags": [
342
+ "Crawl"
343
+ ],
344
+ "summary": "Manually fail pending/running jobs older than 15 min (same logic as the every-5-min timer)",
345
+ "operationId": "ReapZombieJobsManual",
346
+ "parameters": [
347
+ {
348
+ "name": "thresholdMinutes",
349
+ "in": "query",
350
+ "description": "Override the 15 min threshold (1-180)",
351
+ "schema": {
352
+ "type": "integer",
353
+ "format": "int32"
354
+ }
355
+ }
356
+ ],
357
+ "responses": {
358
+ "200": {
359
+ "description": "Payload of ZombieReapResult",
360
+ "content": {
361
+ "application/json": {
362
+ "schema": {
363
+ "$ref": "#/components/schemas/zombieReapResult"
364
+ }
365
+ }
366
+ }
367
+ }
368
+ },
369
+ "security": [
370
+ {
371
+ "Implicit": [
372
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
373
+ ]
374
+ },
375
+ {
376
+ "ApiKey": []
377
+ }
378
+ ]
379
+ }
380
+ },
381
+ "/v1.0/tenders/{tenderId}/audit": {
382
+ "get": {
383
+ "tags": [
384
+ "Audit"
385
+ ],
386
+ "summary": "Recent audit events for a single tender, newest first",
387
+ "operationId": "GetTenderAudit",
388
+ "parameters": [
389
+ {
390
+ "name": "tenderId",
391
+ "in": "path",
392
+ "required": true,
393
+ "schema": {
394
+ "type": "string"
395
+ }
396
+ },
397
+ {
398
+ "name": "limit",
399
+ "in": "query",
400
+ "description": "Max events to return (default 50, max 500)",
401
+ "schema": {
402
+ "type": "integer",
403
+ "format": "int32"
404
+ }
405
+ }
406
+ ],
407
+ "responses": {
408
+ "200": {
409
+ "description": "Payload of Array of AuditEvent",
410
+ "content": {
411
+ "application/json": {
412
+ "schema": {
413
+ "type": "array",
414
+ "items": {
415
+ "$ref": "#/components/schemas/auditEvent"
416
+ }
417
+ }
418
+ }
419
+ }
420
+ }
421
+ },
422
+ "security": [
423
+ {
424
+ "Implicit": [
425
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
426
+ ]
427
+ },
428
+ {
429
+ "ApiKey": []
430
+ }
431
+ ]
432
+ }
433
+ },
434
+ "/v1.0/audit/recent": {
435
+ "get": {
436
+ "tags": [
437
+ "Audit"
438
+ ],
439
+ "summary": "Recent audit events across all tenders, newest first",
440
+ "operationId": "GetRecentAudit",
441
+ "parameters": [
442
+ {
443
+ "name": "limit",
444
+ "in": "query",
445
+ "description": "Max events to return (default 100, max 1000)",
446
+ "schema": {
447
+ "type": "integer",
448
+ "format": "int32"
449
+ }
450
+ },
451
+ {
452
+ "name": "sinceHours",
453
+ "in": "query",
454
+ "description": "Only events from the last N hours (default 24)",
455
+ "schema": {
456
+ "type": "integer",
457
+ "format": "int32"
458
+ }
459
+ }
460
+ ],
461
+ "responses": {
462
+ "200": {
463
+ "description": "Payload of Array of AuditEvent",
464
+ "content": {
465
+ "application/json": {
466
+ "schema": {
467
+ "type": "array",
468
+ "items": {
469
+ "$ref": "#/components/schemas/auditEvent"
470
+ }
471
+ }
472
+ }
473
+ }
474
+ }
475
+ },
476
+ "security": [
477
+ {
478
+ "Implicit": [
479
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
480
+ ]
481
+ },
482
+ {
483
+ "ApiKey": []
484
+ }
485
+ ]
486
+ }
487
+ },
488
+ "/v1.0/tenders/funnel": {
489
+ "get": {
490
+ "tags": [
491
+ "Tenders"
492
+ ],
493
+ "summary": "Pipeline funnel analytics: stage counts, conversion rates, cycle times",
494
+ "operationId": "GetTenderFunnel",
495
+ "parameters": [
496
+ {
497
+ "name": "windowDays",
498
+ "in": "query",
499
+ "description": "Rolling window in days (default 30, max 365)",
500
+ "schema": {
501
+ "type": "integer",
502
+ "format": "int32"
503
+ }
504
+ }
505
+ ],
506
+ "responses": {
507
+ "200": {
508
+ "description": "Payload of FunnelResponse",
509
+ "content": {
510
+ "application/json": {
511
+ "schema": {
512
+ "$ref": "#/components/schemas/funnelResponse"
513
+ }
514
+ }
515
+ }
516
+ }
517
+ },
518
+ "security": [
519
+ {
520
+ "Implicit": [
521
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
522
+ ]
523
+ },
524
+ {
525
+ "ApiKey": []
526
+ }
527
+ ]
528
+ }
529
+ },
530
+ "/v1.0/tenders/stats": {
531
+ "get": {
532
+ "tags": [
533
+ "Tenders"
534
+ ],
535
+ "summary": "Aggregated tender KPIs for the admin dashboard (by status/stage/health + activity window)",
536
+ "operationId": "GetTenderStats",
537
+ "parameters": [
538
+ {
539
+ "name": "windowDays",
540
+ "in": "query",
541
+ "description": "Rolling window for activity-based metrics (defaults to 30, max 365)",
542
+ "schema": {
543
+ "type": "integer",
544
+ "format": "int32"
545
+ }
546
+ }
547
+ ],
548
+ "responses": {
549
+ "200": {
550
+ "description": "Payload of TenderStatsResponse",
551
+ "content": {
552
+ "application/json": {
553
+ "schema": {
554
+ "$ref": "#/components/schemas/tenderStatsResponse"
555
+ }
556
+ }
557
+ }
558
+ }
559
+ },
560
+ "security": [
561
+ {
562
+ "Implicit": [
563
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
564
+ ]
565
+ },
566
+ {
567
+ "ApiKey": []
568
+ }
569
+ ]
570
+ }
571
+ },
572
+ "/v1.0/consultants/stats": {
573
+ "get": {
574
+ "tags": [
575
+ "Consultants"
576
+ ],
577
+ "summary": "Aggregated consultant KPIs (total, availability split, avg fit score from latest matches)",
578
+ "operationId": "GetConsultantStats",
579
+ "responses": {
580
+ "200": {
581
+ "description": "Payload of ConsultantStatsResponse",
582
+ "content": {
583
+ "application/json": {
584
+ "schema": {
585
+ "$ref": "#/components/schemas/consultantStatsResponse"
586
+ }
587
+ }
588
+ }
589
+ }
590
+ },
591
+ "security": [
592
+ {
593
+ "Implicit": [
594
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
595
+ ]
596
+ },
597
+ {
598
+ "ApiKey": []
599
+ }
600
+ ]
601
+ }
602
+ },
603
+ "/v1.0/backups": {
604
+ "post": {
605
+ "tags": [
606
+ "Backups"
607
+ ],
608
+ "summary": "Snapshot all Cosmos containers + (optionally) tender documents to the shared backups storage account.",
609
+ "operationId": "CreateSalesBackup",
610
+ "requestBody": {
611
+ "content": {
612
+ "application/json": {
613
+ "schema": {
614
+ "$ref": "#/components/schemas/createBackupRequest"
615
+ }
616
+ }
617
+ }
618
+ },
619
+ "responses": {
620
+ "200": {
621
+ "description": "Payload of BackupSummary",
622
+ "content": {
623
+ "application/json": {
624
+ "schema": {
625
+ "$ref": "#/components/schemas/backupSummary"
626
+ }
627
+ }
628
+ }
629
+ }
630
+ },
631
+ "security": [
632
+ {
633
+ "Implicit": [
634
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
635
+ ]
636
+ },
637
+ {
638
+ "ApiKey": []
639
+ }
640
+ ]
641
+ }
642
+ },
643
+ "/v1.0/crawl/sources/{name}/failed-tenders": {
644
+ "delete": {
645
+ "tags": [
646
+ "Crawl"
647
+ ],
648
+ "summary": "Delete all tenders for this source whose ingestion failed (parse-failed / zero confidence)",
649
+ "operationId": "DeleteFailedTenders",
650
+ "parameters": [
651
+ {
652
+ "name": "name",
653
+ "in": "path",
654
+ "required": true,
655
+ "schema": {
656
+ "type": "string"
657
+ }
658
+ }
659
+ ],
660
+ "responses": {
661
+ "200": {
662
+ "description": "Payload of DeleteFailedTendersResponse",
663
+ "content": {
664
+ "application/json": {
665
+ "schema": {
666
+ "$ref": "#/components/schemas/deleteFailedTendersResponse"
667
+ }
668
+ }
669
+ }
670
+ }
671
+ },
672
+ "security": [
673
+ {
674
+ "Implicit": [
675
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
676
+ ]
677
+ },
678
+ {
679
+ "ApiKey": []
680
+ }
681
+ ]
682
+ }
683
+ },
684
+ "/v1.0/crawl/jobs/{jobId}/retry": {
685
+ "post": {
686
+ "tags": [
687
+ "Crawl"
688
+ ],
689
+ "summary": "Delete the tender (if any) and enqueue a fresh ingestion for the same URL/title/externalId",
690
+ "operationId": "RetryCrawlJob",
691
+ "parameters": [
692
+ {
693
+ "name": "jobId",
694
+ "in": "path",
695
+ "required": true,
696
+ "schema": {
697
+ "type": "string"
698
+ }
699
+ }
700
+ ],
701
+ "responses": {
702
+ "200": {
703
+ "description": "Payload of AgentJob",
704
+ "content": {
705
+ "application/json": {
706
+ "schema": {
707
+ "$ref": "#/components/schemas/agentJob"
708
+ }
709
+ }
710
+ }
711
+ },
712
+ "400": {
713
+ "description": "No description"
714
+ },
715
+ "404": {
716
+ "description": "No description"
717
+ }
718
+ },
719
+ "security": [
720
+ {
721
+ "Implicit": [
722
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
723
+ ]
724
+ },
725
+ {
726
+ "ApiKey": []
727
+ }
728
+ ]
729
+ }
730
+ },
731
+ "/v1.0/crawl/jobs/{jobId}/cancel": {
732
+ "post": {
733
+ "tags": [
734
+ "Crawl"
735
+ ],
736
+ "summary": "Terminate the running orchestration and mark the job as failed (\"Cancelled by operator\")",
737
+ "operationId": "CancelCrawlJob",
738
+ "parameters": [
739
+ {
740
+ "name": "jobId",
741
+ "in": "path",
742
+ "required": true,
743
+ "schema": {
744
+ "type": "string"
745
+ }
746
+ }
747
+ ],
748
+ "responses": {
749
+ "200": {
750
+ "description": "Payload of AgentJob",
751
+ "content": {
752
+ "application/json": {
753
+ "schema": {
754
+ "$ref": "#/components/schemas/agentJob"
755
+ }
756
+ }
757
+ }
758
+ },
759
+ "404": {
760
+ "description": "No description"
761
+ },
762
+ "409": {
763
+ "description": "No description"
764
+ }
765
+ },
766
+ "security": [
767
+ {
768
+ "Implicit": [
769
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
770
+ ]
771
+ },
772
+ {
773
+ "ApiKey": []
774
+ }
775
+ ]
776
+ }
777
+ },
778
+ "/v1.0/crawl/jobs/bulk-delete": {
779
+ "post": {
780
+ "tags": [
781
+ "Crawl"
782
+ ],
783
+ "summary": "Delete a batch of jobs and their backing tenders",
784
+ "operationId": "BulkDeleteCrawlJobs",
785
+ "requestBody": {
786
+ "content": {
787
+ "application/json": {
788
+ "schema": {
789
+ "$ref": "#/components/schemas/bulkDeleteJobsRequest"
790
+ }
791
+ }
792
+ }
793
+ },
794
+ "responses": {
795
+ "200": {
796
+ "description": "Payload of BulkDeleteJobsResponse",
797
+ "content": {
798
+ "application/json": {
799
+ "schema": {
800
+ "$ref": "#/components/schemas/bulkDeleteJobsResponse"
801
+ }
802
+ }
803
+ }
804
+ },
805
+ "400": {
806
+ "description": "No description"
807
+ }
808
+ },
809
+ "security": [
810
+ {
811
+ "Implicit": [
812
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
813
+ ]
814
+ },
815
+ {
816
+ "ApiKey": []
817
+ }
818
+ ]
819
+ }
820
+ },
821
+ "/v1.0/crawl/sources/{name}/jobs": {
822
+ "get": {
823
+ "tags": [
824
+ "Crawl"
825
+ ],
826
+ "summary": "Recent ingestion jobs for this source, newest first",
827
+ "operationId": "ListCrawlJobs",
828
+ "parameters": [
829
+ {
830
+ "name": "name",
831
+ "in": "path",
832
+ "required": true,
833
+ "schema": {
834
+ "type": "string"
835
+ }
836
+ },
837
+ {
838
+ "name": "limit",
839
+ "in": "query",
840
+ "description": "Max jobs to return (default 50)",
841
+ "schema": {
842
+ "type": "string"
843
+ }
844
+ }
845
+ ],
846
+ "responses": {
847
+ "200": {
848
+ "description": "Payload of Array of AgentJob",
849
+ "content": {
850
+ "application/json": {
851
+ "schema": {
852
+ "type": "array",
853
+ "items": {
854
+ "$ref": "#/components/schemas/agentJob"
855
+ }
856
+ }
857
+ }
858
+ }
859
+ }
860
+ },
861
+ "security": [
862
+ {
863
+ "Implicit": [
864
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
865
+ ]
866
+ },
867
+ {
868
+ "ApiKey": []
869
+ }
870
+ ]
871
+ }
872
+ },
873
+ "/v1.0/crawl/sources/{name}/scan": {
874
+ "post": {
875
+ "tags": [
876
+ "Crawl"
877
+ ],
878
+ "summary": "Scan one source now and enqueue ingestion jobs for newly discovered notices",
879
+ "operationId": "ScanCrawlSource",
880
+ "parameters": [
881
+ {
882
+ "name": "name",
883
+ "in": "path",
884
+ "required": true,
885
+ "schema": {
886
+ "type": "string"
887
+ }
888
+ }
889
+ ],
890
+ "responses": {
891
+ "200": {
892
+ "description": "Payload of CrawlScanResponse",
893
+ "content": {
894
+ "application/json": {
895
+ "schema": {
896
+ "$ref": "#/components/schemas/crawlScanResponse"
897
+ }
898
+ }
899
+ }
900
+ },
901
+ "404": {
902
+ "description": "No description"
903
+ }
904
+ },
905
+ "security": [
906
+ {
907
+ "Implicit": [
908
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
909
+ ]
910
+ },
911
+ {
912
+ "ApiKey": []
913
+ }
914
+ ]
915
+ }
916
+ },
917
+ "/v1.0/crawl/stats": {
918
+ "get": {
919
+ "tags": [
920
+ "Crawl"
921
+ ],
922
+ "summary": "High-level stats for the /admin ops dashboard",
923
+ "operationId": "GetCrawlStats",
924
+ "responses": {
925
+ "200": {
926
+ "description": "Payload of CrawlStatsResponse",
927
+ "content": {
928
+ "application/json": {
929
+ "schema": {
930
+ "$ref": "#/components/schemas/crawlStatsResponse"
931
+ }
932
+ }
933
+ }
934
+ }
935
+ },
936
+ "security": [
937
+ {
938
+ "Implicit": [
939
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
940
+ ]
941
+ },
942
+ {
943
+ "ApiKey": []
944
+ }
945
+ ]
946
+ }
947
+ },
948
+ "/v1.0/crawl/stream": {
949
+ "get": {
950
+ "tags": [
951
+ "Crawl"
952
+ ],
953
+ "summary": "Server-sent-events stream: pushes stats + activity every ~2s for the ops dashboard",
954
+ "operationId": "StreamCrawlEvents",
955
+ "responses": {},
956
+ "security": [
957
+ {
958
+ "Implicit": [
959
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
960
+ ]
961
+ },
962
+ {
963
+ "ApiKey": []
964
+ }
965
+ ]
966
+ }
967
+ },
968
+ "/v1.0/crawl/activity": {
969
+ "get": {
970
+ "tags": [
971
+ "Crawl"
972
+ ],
973
+ "summary": "Recent ingestion jobs across all sources, newest first. Supports source/status/date/search filters and paging.",
974
+ "operationId": "GetCrawlActivity",
975
+ "parameters": [
976
+ {
977
+ "name": "source",
978
+ "in": "query",
979
+ "description": "Filter by sourceName (exact match)",
980
+ "schema": {
981
+ "type": "string"
982
+ }
983
+ },
984
+ {
985
+ "name": "status",
986
+ "in": "query",
987
+ "description": "Comma-separated statuses (pending,running,completed,failed)",
988
+ "schema": {
989
+ "type": "string"
990
+ }
991
+ },
992
+ {
993
+ "name": "from",
994
+ "in": "query",
995
+ "description": "ISO-8601 lower bound on startedAt",
996
+ "schema": {
997
+ "type": "string"
998
+ }
999
+ },
1000
+ {
1001
+ "name": "to",
1002
+ "in": "query",
1003
+ "description": "ISO-8601 upper bound on startedAt",
1004
+ "schema": {
1005
+ "type": "string"
1006
+ }
1007
+ },
1008
+ {
1009
+ "name": "search",
1010
+ "in": "query",
1011
+ "description": "Substring match across inputTitle/inputUrl/externalId/id/error",
1012
+ "schema": {
1013
+ "type": "string"
1014
+ }
1015
+ },
1016
+ {
1017
+ "name": "skip",
1018
+ "in": "query",
1019
+ "description": "Offset for paging (default 0)",
1020
+ "schema": {
1021
+ "type": "string"
1022
+ }
1023
+ },
1024
+ {
1025
+ "name": "limit",
1026
+ "in": "query",
1027
+ "description": "Max jobs to return (default 50, max 500)",
1028
+ "schema": {
1029
+ "type": "string"
1030
+ }
1031
+ }
1032
+ ],
1033
+ "responses": {
1034
+ "200": {
1035
+ "description": "Payload of CrawlActivityResponse",
1036
+ "content": {
1037
+ "application/json": {
1038
+ "schema": {
1039
+ "$ref": "#/components/schemas/crawlActivityResponse"
1040
+ }
1041
+ }
1042
+ }
1043
+ }
1044
+ },
1045
+ "security": [
1046
+ {
1047
+ "Implicit": [
1048
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1049
+ ]
1050
+ },
1051
+ {
1052
+ "ApiKey": []
1053
+ }
1054
+ ]
1055
+ }
1056
+ },
1057
+ "/v1.0/crawl/sources": {
1058
+ "get": {
1059
+ "tags": [
1060
+ "Crawl"
1061
+ ],
1062
+ "summary": "List configured crawl sources together with their learned patterns and last-activity timestamp",
1063
+ "operationId": "ListCrawlSources",
1064
+ "responses": {
1065
+ "200": {
1066
+ "description": "Payload of Array of CrawlSourceWithPattern",
1067
+ "content": {
1068
+ "application/json": {
1069
+ "schema": {
1070
+ "type": "array",
1071
+ "items": {
1072
+ "$ref": "#/components/schemas/crawlSourceWithPattern"
1073
+ }
1074
+ }
1075
+ }
1076
+ }
1077
+ }
1078
+ },
1079
+ "security": [
1080
+ {
1081
+ "Implicit": [
1082
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1083
+ ]
1084
+ },
1085
+ {
1086
+ "ApiKey": []
1087
+ }
1088
+ ]
1089
+ }
1090
+ },
1091
+ "/v1.0/crawl/sources/{name}": {
1092
+ "put": {
1093
+ "tags": [
1094
+ "Crawl"
1095
+ ],
1096
+ "summary": "Create or update a crawl source",
1097
+ "operationId": "UpsertCrawlSource",
1098
+ "parameters": [
1099
+ {
1100
+ "name": "name",
1101
+ "in": "path",
1102
+ "required": true,
1103
+ "schema": {
1104
+ "type": "string"
1105
+ }
1106
+ }
1107
+ ],
1108
+ "requestBody": {
1109
+ "content": {
1110
+ "application/json": {
1111
+ "schema": {
1112
+ "$ref": "#/components/schemas/crawlSourceUpsertRequest"
1113
+ }
1114
+ }
1115
+ }
1116
+ },
1117
+ "responses": {
1118
+ "200": {
1119
+ "description": "Payload of CrawlSourceConfig",
1120
+ "content": {
1121
+ "application/json": {
1122
+ "schema": {
1123
+ "$ref": "#/components/schemas/crawlSourceConfig"
1124
+ }
1125
+ }
1126
+ }
1127
+ },
1128
+ "400": {
1129
+ "description": "No description"
1130
+ }
1131
+ },
1132
+ "security": [
1133
+ {
1134
+ "Implicit": [
1135
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1136
+ ]
1137
+ },
1138
+ {
1139
+ "ApiKey": []
1140
+ }
1141
+ ]
1142
+ },
1143
+ "delete": {
1144
+ "tags": [
1145
+ "Crawl"
1146
+ ],
1147
+ "summary": "Delete a crawl source and its cached pattern",
1148
+ "operationId": "DeleteCrawlSource",
1149
+ "parameters": [
1150
+ {
1151
+ "name": "name",
1152
+ "in": "path",
1153
+ "required": true,
1154
+ "schema": {
1155
+ "type": "string"
1156
+ }
1157
+ }
1158
+ ],
1159
+ "responses": {
1160
+ "204": {
1161
+ "description": "No description"
1162
+ }
1163
+ },
1164
+ "security": [
1165
+ {
1166
+ "Implicit": [
1167
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1168
+ ]
1169
+ },
1170
+ {
1171
+ "ApiKey": []
1172
+ }
1173
+ ]
1174
+ }
1175
+ },
1176
+ "/v1.0/crawl/sources/{name}/pattern": {
1177
+ "delete": {
1178
+ "tags": [
1179
+ "Crawl"
1180
+ ],
1181
+ "summary": "Drop the cached URL pattern for a source so the next scan re-bootstraps it",
1182
+ "operationId": "InvalidateCrawlPattern",
1183
+ "parameters": [
1184
+ {
1185
+ "name": "name",
1186
+ "in": "path",
1187
+ "required": true,
1188
+ "schema": {
1189
+ "type": "string"
1190
+ }
1191
+ }
1192
+ ],
1193
+ "responses": {
1194
+ "204": {
1195
+ "description": "No description"
1196
+ }
1197
+ },
1198
+ "security": [
1199
+ {
1200
+ "Implicit": [
1201
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1202
+ ]
1203
+ },
1204
+ {
1205
+ "ApiKey": []
1206
+ }
1207
+ ]
1208
+ }
1209
+ },
1210
+ "/v1.0/crawl/discover-listing": {
1211
+ "post": {
1212
+ "tags": [
1213
+ "Crawl"
1214
+ ],
1215
+ "summary": "Given a site homepage or bare domain, locate the tender/project listing page on it",
1216
+ "operationId": "DiscoverCrawlListing",
1217
+ "requestBody": {
1218
+ "content": {
1219
+ "application/json": {
1220
+ "schema": {
1221
+ "$ref": "#/components/schemas/discoverListingRequest"
1222
+ }
1223
+ }
1224
+ }
1225
+ },
1226
+ "responses": {
1227
+ "200": {
1228
+ "description": "Payload of DiscoverListingResponse",
1229
+ "content": {
1230
+ "application/json": {
1231
+ "schema": {
1232
+ "$ref": "#/components/schemas/discoverListingResponse"
1233
+ }
1234
+ }
1235
+ }
1236
+ }
1237
+ },
1238
+ "security": [
1239
+ {
1240
+ "Implicit": [
1241
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1242
+ ]
1243
+ }
1244
+ ]
1245
+ }
1246
+ },
1247
+ "/v1.0/crawl/sources/{name}/preview": {
1248
+ "post": {
1249
+ "tags": [
1250
+ "Crawl"
1251
+ ],
1252
+ "summary": "Run a one-off discovery crawl for a single source and return the notices it would enqueue (no ingestion)",
1253
+ "operationId": "PreviewCrawlSource",
1254
+ "parameters": [
1255
+ {
1256
+ "name": "name",
1257
+ "in": "path",
1258
+ "required": true,
1259
+ "schema": {
1260
+ "type": "string"
1261
+ }
1262
+ }
1263
+ ],
1264
+ "responses": {
1265
+ "200": {
1266
+ "description": "Payload of CrawlPreviewResponse",
1267
+ "content": {
1268
+ "application/json": {
1269
+ "schema": {
1270
+ "$ref": "#/components/schemas/crawlPreviewResponse"
1271
+ }
1272
+ }
1273
+ }
1274
+ },
1275
+ "404": {
1276
+ "description": "No description"
1277
+ }
1278
+ },
1279
+ "security": [
1280
+ {
1281
+ "Implicit": [
1282
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1283
+ ]
1284
+ },
1285
+ {
1286
+ "ApiKey": []
1287
+ }
1288
+ ]
1289
+ }
1290
+ },
1291
+ "/v1.0/salesforce/opportunities/{sfId}/import": {
1292
+ "post": {
1293
+ "tags": [
1294
+ "Salesforce"
1295
+ ],
1296
+ "summary": "Create a Snøkam tender stub from an existing Salesforce Opportunity.",
1297
+ "operationId": "ImportSalesforceOpportunity",
1298
+ "parameters": [
1299
+ {
1300
+ "name": "sfId",
1301
+ "in": "path",
1302
+ "required": true,
1303
+ "schema": {
1304
+ "type": "string"
1305
+ },
1306
+ "x-ms-summary": "Salesforce Opportunity Id."
1307
+ }
1308
+ ],
1309
+ "responses": {
1310
+ "200": {
1311
+ "description": "Payload of TenderView",
1312
+ "content": {
1313
+ "application/json": {
1314
+ "schema": {
1315
+ "$ref": "#/components/schemas/tenderView"
1316
+ }
1317
+ }
1318
+ }
1319
+ },
1320
+ "404": {
1321
+ "description": "No description"
1322
+ },
1323
+ "409": {
1324
+ "description": "A tender is already linked to this Opportunity."
1325
+ }
1326
+ },
1327
+ "security": [
1328
+ {
1329
+ "Implicit": [
1330
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1331
+ ]
1332
+ },
1333
+ {
1334
+ "ApiKey": []
1335
+ }
1336
+ ]
1337
+ }
1338
+ },
1339
+ "/v1.0/tenders/{id}/salesforce": {
1340
+ "post": {
1341
+ "tags": [
1342
+ "Salesforce"
1343
+ ],
1344
+ "summary": "Create a Salesforce Opportunity from a Snøkam tender and cache the link.",
1345
+ "operationId": "PromoteTenderToSalesforce",
1346
+ "parameters": [
1347
+ {
1348
+ "name": "id",
1349
+ "in": "path",
1350
+ "required": true,
1351
+ "schema": {
1352
+ "type": "string"
1353
+ }
1354
+ }
1355
+ ],
1356
+ "responses": {
1357
+ "200": {
1358
+ "description": "Payload of TenderView",
1359
+ "content": {
1360
+ "application/json": {
1361
+ "schema": {
1362
+ "$ref": "#/components/schemas/tenderView"
1363
+ }
1364
+ }
1365
+ }
1366
+ },
1367
+ "404": {
1368
+ "description": "No description"
1369
+ },
1370
+ "409": {
1371
+ "description": "Tender is already linked to a Salesforce Opportunity."
1372
+ }
1373
+ },
1374
+ "security": [
1375
+ {
1376
+ "Implicit": [
1377
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1378
+ ]
1379
+ },
1380
+ {
1381
+ "ApiKey": []
1382
+ }
1383
+ ]
1384
+ }
1385
+ },
1386
+ "/v1.0/tenders/{id}/salesforce/refresh": {
1387
+ "post": {
1388
+ "tags": [
1389
+ "Salesforce"
1390
+ ],
1391
+ "summary": "Re-sync cached Salesforce Opportunity state (stage / closed / won) onto the engagement.",
1392
+ "operationId": "RefreshTenderSalesforceLink",
1393
+ "parameters": [
1394
+ {
1395
+ "name": "id",
1396
+ "in": "path",
1397
+ "required": true,
1398
+ "schema": {
1399
+ "type": "string"
1400
+ }
1401
+ }
1402
+ ],
1403
+ "responses": {
1404
+ "200": {
1405
+ "description": "Payload of TenderView",
1406
+ "content": {
1407
+ "application/json": {
1408
+ "schema": {
1409
+ "$ref": "#/components/schemas/tenderView"
1410
+ }
1411
+ }
1412
+ }
1413
+ },
1414
+ "404": {
1415
+ "description": "No description"
1416
+ }
1417
+ },
1418
+ "security": [
1419
+ {
1420
+ "Implicit": [
1421
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1422
+ ]
1423
+ },
1424
+ {
1425
+ "ApiKey": []
1426
+ }
1427
+ ]
1428
+ }
1429
+ },
1430
+ "/v1.0/salesforce/opportunities": {
1431
+ "get": {
1432
+ "tags": [
1433
+ "Salesforce"
1434
+ ],
1435
+ "summary": "List Salesforce Opportunities (open by default).",
1436
+ "operationId": "ListSalesforceOpportunities",
1437
+ "parameters": [
1438
+ {
1439
+ "name": "includeClosed",
1440
+ "in": "query",
1441
+ "schema": {
1442
+ "type": "boolean"
1443
+ },
1444
+ "x-ms-summary": "Include closed opportunities (default false)."
1445
+ },
1446
+ {
1447
+ "name": "limit",
1448
+ "in": "query",
1449
+ "schema": {
1450
+ "type": "integer",
1451
+ "format": "int32"
1452
+ },
1453
+ "x-ms-summary": "Row cap, max 200 (default 100)."
1454
+ }
1455
+ ],
1456
+ "responses": {
1457
+ "200": {
1458
+ "description": "Payload of Array of CrmOpportunity",
1459
+ "content": {
1460
+ "application/json": {
1461
+ "schema": {
1462
+ "type": "array",
1463
+ "items": {
1464
+ "$ref": "#/components/schemas/crmOpportunity"
1465
+ }
1466
+ }
1467
+ }
1468
+ }
1469
+ }
1470
+ },
1471
+ "security": [
1472
+ {
1473
+ "Implicit": [
1474
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1475
+ ]
1476
+ },
1477
+ {
1478
+ "ApiKey": []
1479
+ }
1480
+ ]
1481
+ }
1482
+ },
1483
+ "/v1.0/salesforce/opportunity-stages": {
1484
+ "get": {
1485
+ "tags": [
1486
+ "Salesforce"
1487
+ ],
1488
+ "summary": "List the SF org's Opportunity pipeline stages in configured order.",
1489
+ "operationId": "ListSalesforceOpportunityStages",
1490
+ "responses": {
1491
+ "200": {
1492
+ "description": "Payload of Array of CrmStage",
1493
+ "content": {
1494
+ "application/json": {
1495
+ "schema": {
1496
+ "type": "array",
1497
+ "items": {
1498
+ "$ref": "#/components/schemas/crmStage"
1499
+ }
1500
+ }
1501
+ }
1502
+ }
1503
+ }
1504
+ },
1505
+ "security": [
1506
+ {
1507
+ "Implicit": [
1508
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1509
+ ]
1510
+ },
1511
+ {
1512
+ "ApiKey": []
1513
+ }
1514
+ ]
1515
+ }
1516
+ },
1517
+ "/v1.0/salesforce/refresh": {
1518
+ "post": {
1519
+ "tags": [
1520
+ "Salesforce"
1521
+ ],
1522
+ "summary": "Batch-refresh the cached Salesforce state on every linked engagement for the current business.",
1523
+ "operationId": "RefreshAllSalesforceLinks",
1524
+ "responses": {
1525
+ "200": {
1526
+ "description": "Payload of CrmRefreshResult",
1527
+ "content": {
1528
+ "application/json": {
1529
+ "schema": {
1530
+ "$ref": "#/components/schemas/crmRefreshResult"
1531
+ }
1532
+ }
1533
+ }
1534
+ }
1535
+ },
1536
+ "security": [
1537
+ {
1538
+ "Implicit": [
1539
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1540
+ ]
1541
+ },
1542
+ {
1543
+ "ApiKey": []
1544
+ }
1545
+ ]
1546
+ }
1547
+ },
1548
+ "/v1.0/tenders/{id}/salesforce/stage": {
1549
+ "post": {
1550
+ "tags": [
1551
+ "Salesforce"
1552
+ ],
1553
+ "summary": "Move the linked SF Opportunity to a new stage and refresh the cache.",
1554
+ "operationId": "UpdateTenderSalesforceStage",
1555
+ "parameters": [
1556
+ {
1557
+ "name": "id",
1558
+ "in": "path",
1559
+ "required": true,
1560
+ "schema": {
1561
+ "type": "string"
1562
+ }
1563
+ }
1564
+ ],
1565
+ "requestBody": {
1566
+ "description": "The SF stage masterLabel/apiName to switch to.",
1567
+ "content": {
1568
+ "application/json": {
1569
+ "schema": {
1570
+ "$ref": "#/components/schemas/updateSalesforceStageRequest"
1571
+ }
1572
+ }
1573
+ },
1574
+ "required": true
1575
+ },
1576
+ "responses": {
1577
+ "200": {
1578
+ "description": "Payload of TenderView",
1579
+ "content": {
1580
+ "application/json": {
1581
+ "schema": {
1582
+ "$ref": "#/components/schemas/tenderView"
1583
+ }
1584
+ }
1585
+ }
1586
+ },
1587
+ "400": {
1588
+ "description": "Tender has no Salesforce link, or stageName is missing."
1589
+ },
1590
+ "404": {
1591
+ "description": "No description"
1592
+ }
1593
+ },
1594
+ "security": [
1595
+ {
1596
+ "Implicit": [
1597
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1598
+ ]
1599
+ },
1600
+ {
1601
+ "ApiKey": []
1602
+ }
1603
+ ]
1604
+ }
1605
+ },
1606
+ "/v1.0/consultants": {
1607
+ "get": {
1608
+ "tags": [
1609
+ "Consultants"
1610
+ ],
1611
+ "summary": "List all known consultants (for manual selection)",
1612
+ "operationId": "ListConsultants",
1613
+ "parameters": [
1614
+ {
1615
+ "name": "query",
1616
+ "in": "query",
1617
+ "schema": {
1618
+ "type": "string"
1619
+ }
1620
+ }
1621
+ ],
1622
+ "responses": {
1623
+ "200": {
1624
+ "description": "Payload of Array of ConsultantSummary",
1625
+ "content": {
1626
+ "application/json": {
1627
+ "schema": {
1628
+ "type": "array",
1629
+ "items": {
1630
+ "$ref": "#/components/schemas/consultantSummary"
1631
+ }
1632
+ }
1633
+ }
1634
+ }
1635
+ }
1636
+ },
1637
+ "security": [
1638
+ {
1639
+ "Implicit": [
1640
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1641
+ ]
1642
+ },
1643
+ {
1644
+ "ApiKey": []
1645
+ }
1646
+ ]
1647
+ }
1648
+ },
1649
+ "/v1.0/tenders/{id}/documents": {
1650
+ "get": {
1651
+ "tags": [
1652
+ "Documents"
1653
+ ],
1654
+ "summary": "List documents for a tender",
1655
+ "operationId": "ListTenderDocuments",
1656
+ "parameters": [
1657
+ {
1658
+ "name": "id",
1659
+ "in": "path",
1660
+ "required": true,
1661
+ "schema": {
1662
+ "type": "string"
1663
+ }
1664
+ }
1665
+ ],
1666
+ "responses": {
1667
+ "200": {
1668
+ "description": "Payload of Array of TenderDocument",
1669
+ "content": {
1670
+ "application/json": {
1671
+ "schema": {
1672
+ "type": "array",
1673
+ "items": {
1674
+ "$ref": "#/components/schemas/tenderDocument"
1675
+ }
1676
+ }
1677
+ }
1678
+ }
1679
+ },
1680
+ "404": {
1681
+ "description": "No description"
1682
+ }
1683
+ },
1684
+ "security": [
1685
+ {
1686
+ "Implicit": [
1687
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1688
+ ]
1689
+ },
1690
+ {
1691
+ "ApiKey": []
1692
+ }
1693
+ ]
1694
+ },
1695
+ "post": {
1696
+ "tags": [
1697
+ "Documents"
1698
+ ],
1699
+ "summary": "Upload a new document to a tender",
1700
+ "operationId": "UploadTenderDocument",
1701
+ "parameters": [
1702
+ {
1703
+ "name": "id",
1704
+ "in": "path",
1705
+ "required": true,
1706
+ "schema": {
1707
+ "type": "string"
1708
+ }
1709
+ }
1710
+ ],
1711
+ "responses": {
1712
+ "200": {
1713
+ "description": "Payload of TenderDocument",
1714
+ "content": {
1715
+ "application/json": {
1716
+ "schema": {
1717
+ "$ref": "#/components/schemas/tenderDocument"
1718
+ }
1719
+ }
1720
+ }
1721
+ },
1722
+ "404": {
1723
+ "description": "No description"
1724
+ }
1725
+ },
1726
+ "security": [
1727
+ {
1728
+ "Implicit": [
1729
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1730
+ ]
1731
+ },
1732
+ {
1733
+ "ApiKey": []
1734
+ }
1735
+ ]
1736
+ }
1737
+ },
1738
+ "/v1.0/tenders/{id}/documents/{docId}/download-url": {
1739
+ "get": {
1740
+ "tags": [
1741
+ "Documents"
1742
+ ],
1743
+ "summary": "Get a short-lived download URL for a document",
1744
+ "operationId": "GetDocumentDownloadUrl",
1745
+ "parameters": [
1746
+ {
1747
+ "name": "id",
1748
+ "in": "path",
1749
+ "required": true,
1750
+ "schema": {
1751
+ "type": "string"
1752
+ }
1753
+ },
1754
+ {
1755
+ "name": "docId",
1756
+ "in": "path",
1757
+ "required": true,
1758
+ "schema": {
1759
+ "type": "string"
1760
+ }
1761
+ }
1762
+ ],
1763
+ "responses": {
1764
+ "200": {
1765
+ "description": "Payload of Object",
1766
+ "content": {
1767
+ "application/json": {
1768
+ "schema": {
1769
+ "type": "object"
1770
+ }
1771
+ }
1772
+ }
1773
+ },
1774
+ "404": {
1775
+ "description": "No description"
1776
+ }
1777
+ },
1778
+ "security": [
1779
+ {
1780
+ "Implicit": [
1781
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1782
+ ]
1783
+ },
1784
+ {
1785
+ "ApiKey": []
1786
+ }
1787
+ ]
1788
+ }
1789
+ },
1790
+ "/v1.0/tenders/{id}/documents/{docId}/download": {
1791
+ "get": {
1792
+ "tags": [
1793
+ "Documents"
1794
+ ],
1795
+ "summary": "Download a single document",
1796
+ "operationId": "DownloadDocument",
1797
+ "parameters": [
1798
+ {
1799
+ "name": "id",
1800
+ "in": "path",
1801
+ "required": true,
1802
+ "schema": {
1803
+ "type": "string"
1804
+ }
1805
+ },
1806
+ {
1807
+ "name": "docId",
1808
+ "in": "path",
1809
+ "required": true,
1810
+ "schema": {
1811
+ "type": "string"
1812
+ }
1813
+ }
1814
+ ],
1815
+ "responses": {
1816
+ "200": {
1817
+ "description": "Payload of Array of Byte",
1818
+ "content": {
1819
+ "application/octet-stream": {
1820
+ "schema": {
1821
+ "type": "string",
1822
+ "format": "binary"
1823
+ }
1824
+ }
1825
+ }
1826
+ },
1827
+ "404": {
1828
+ "description": "No description"
1829
+ }
1830
+ },
1831
+ "security": [
1832
+ {
1833
+ "Implicit": [
1834
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1835
+ ]
1836
+ },
1837
+ {
1838
+ "ApiKey": []
1839
+ }
1840
+ ]
1841
+ }
1842
+ },
1843
+ "/v1.0/tenders/{id}/documents/download-all": {
1844
+ "get": {
1845
+ "tags": [
1846
+ "Documents"
1847
+ ],
1848
+ "summary": "Download all tender documents as a ZIP archive",
1849
+ "operationId": "DownloadAllDocuments",
1850
+ "parameters": [
1851
+ {
1852
+ "name": "id",
1853
+ "in": "path",
1854
+ "required": true,
1855
+ "schema": {
1856
+ "type": "string"
1857
+ }
1858
+ }
1859
+ ],
1860
+ "responses": {
1861
+ "200": {
1862
+ "description": "Payload of Array of Byte",
1863
+ "content": {
1864
+ "application/zip": {
1865
+ "schema": {
1866
+ "type": "string",
1867
+ "format": "binary"
1868
+ }
1869
+ }
1870
+ }
1871
+ },
1872
+ "404": {
1873
+ "description": "No description"
1874
+ }
1875
+ },
1876
+ "security": [
1877
+ {
1878
+ "Implicit": [
1879
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1880
+ ]
1881
+ },
1882
+ {
1883
+ "ApiKey": []
1884
+ }
1885
+ ]
1886
+ }
1887
+ },
1888
+ "/v1.0/tenders/{id}/documents/{docId}/extract-questions": {
1889
+ "post": {
1890
+ "tags": [
1891
+ "Documents"
1892
+ ],
1893
+ "summary": "Start extraction of fillable questions from a document",
1894
+ "operationId": "StartQuestionExtraction",
1895
+ "parameters": [
1896
+ {
1897
+ "name": "id",
1898
+ "in": "path",
1899
+ "required": true,
1900
+ "schema": {
1901
+ "type": "string"
1902
+ }
1903
+ },
1904
+ {
1905
+ "name": "docId",
1906
+ "in": "path",
1907
+ "required": true,
1908
+ "schema": {
1909
+ "type": "string"
1910
+ }
1911
+ }
1912
+ ],
1913
+ "responses": {
1914
+ "202": {
1915
+ "description": "Payload of Object",
1916
+ "content": {
1917
+ "application/json": {
1918
+ "schema": {
1919
+ "type": "object"
1920
+ }
1921
+ }
1922
+ }
1923
+ },
1924
+ "404": {
1925
+ "description": "No description"
1926
+ }
1927
+ },
1928
+ "security": [
1929
+ {
1930
+ "Implicit": [
1931
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1932
+ ]
1933
+ },
1934
+ {
1935
+ "ApiKey": []
1936
+ }
1937
+ ]
1938
+ }
1939
+ },
1940
+ "/v1.0/tenders/{id}/documents/{docId}/fill-questions": {
1941
+ "post": {
1942
+ "tags": [
1943
+ "Documents"
1944
+ ],
1945
+ "summary": "Start filling tender question answers per consultant",
1946
+ "operationId": "StartQuestionFill",
1947
+ "parameters": [
1948
+ {
1949
+ "name": "id",
1950
+ "in": "path",
1951
+ "required": true,
1952
+ "schema": {
1953
+ "type": "string"
1954
+ }
1955
+ },
1956
+ {
1957
+ "name": "docId",
1958
+ "in": "path",
1959
+ "required": true,
1960
+ "schema": {
1961
+ "type": "string"
1962
+ }
1963
+ }
1964
+ ],
1965
+ "requestBody": {
1966
+ "content": {
1967
+ "application/json": {
1968
+ "schema": {
1969
+ "$ref": "#/components/schemas/questionFillRequest"
1970
+ }
1971
+ }
1972
+ },
1973
+ "required": true
1974
+ },
1975
+ "responses": {
1976
+ "202": {
1977
+ "description": "Payload of Object",
1978
+ "content": {
1979
+ "application/json": {
1980
+ "schema": {
1981
+ "type": "object"
1982
+ }
1983
+ }
1984
+ }
1985
+ },
1986
+ "404": {
1987
+ "description": "No description"
1988
+ }
1989
+ },
1990
+ "security": [
1991
+ {
1992
+ "Implicit": [
1993
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
1994
+ ]
1995
+ },
1996
+ {
1997
+ "ApiKey": []
1998
+ }
1999
+ ]
2000
+ }
2001
+ },
2002
+ "/v1.0/tenders/{id}/documents/{docId}": {
2003
+ "patch": {
2004
+ "tags": [
2005
+ "Documents"
2006
+ ],
2007
+ "summary": "Patch tender document flags (e.g. set as competence matrix source)",
2008
+ "operationId": "PatchTenderDocument",
2009
+ "parameters": [
2010
+ {
2011
+ "name": "id",
2012
+ "in": "path",
2013
+ "required": true,
2014
+ "schema": {
2015
+ "type": "string"
2016
+ }
2017
+ },
2018
+ {
2019
+ "name": "docId",
2020
+ "in": "path",
2021
+ "required": true,
2022
+ "schema": {
2023
+ "type": "string"
2024
+ }
2025
+ }
2026
+ ],
2027
+ "requestBody": {
2028
+ "content": {
2029
+ "application/json": {
2030
+ "schema": {
2031
+ "$ref": "#/components/schemas/patchDocumentRequest"
2032
+ }
2033
+ }
2034
+ },
2035
+ "required": true
2036
+ },
2037
+ "responses": {
2038
+ "200": {
2039
+ "description": "Payload of PatchDocumentResponse",
2040
+ "content": {
2041
+ "application/json": {
2042
+ "schema": {
2043
+ "$ref": "#/components/schemas/patchDocumentResponse"
2044
+ }
2045
+ }
2046
+ }
2047
+ },
2048
+ "404": {
2049
+ "description": "No description"
2050
+ }
2051
+ },
2052
+ "security": [
2053
+ {
2054
+ "Implicit": [
2055
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2056
+ ]
2057
+ },
2058
+ {
2059
+ "ApiKey": []
2060
+ }
2061
+ ]
2062
+ },
2063
+ "delete": {
2064
+ "tags": [
2065
+ "Documents"
2066
+ ],
2067
+ "summary": "Delete a tender document (and its blob + related answers)",
2068
+ "operationId": "DeleteTenderDocument",
2069
+ "parameters": [
2070
+ {
2071
+ "name": "id",
2072
+ "in": "path",
2073
+ "required": true,
2074
+ "schema": {
2075
+ "type": "string"
2076
+ }
2077
+ },
2078
+ {
2079
+ "name": "docId",
2080
+ "in": "path",
2081
+ "required": true,
2082
+ "schema": {
2083
+ "type": "string"
2084
+ }
2085
+ }
2086
+ ],
2087
+ "responses": {
2088
+ "204": {
2089
+ "description": "No description"
2090
+ },
2091
+ "404": {
2092
+ "description": "No description"
2093
+ }
2094
+ },
2095
+ "security": [
2096
+ {
2097
+ "Implicit": [
2098
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2099
+ ]
2100
+ },
2101
+ {
2102
+ "ApiKey": []
2103
+ }
2104
+ ]
2105
+ }
2106
+ },
2107
+ "/v1.0/protected/health/{provider}": {
2108
+ "get": {
2109
+ "tags": [
2110
+ "Health"
2111
+ ],
2112
+ "summary": "Checks an integration's connectivity",
2113
+ "operationId": "SalesIntegrationHealth",
2114
+ "parameters": [
2115
+ {
2116
+ "name": "provider",
2117
+ "in": "path",
2118
+ "required": true,
2119
+ "schema": {
2120
+ "type": "string"
2121
+ }
2122
+ }
2123
+ ],
2124
+ "responses": {
2125
+ "200": {
2126
+ "description": "Health result",
2127
+ "content": {
2128
+ "application/json": {
2129
+ "schema": {
2130
+ "$ref": "#/components/schemas/integrationHealthResult"
2131
+ }
2132
+ }
2133
+ }
2134
+ }
2135
+ },
2136
+ "security": [
2137
+ {
2138
+ "Implicit": [
2139
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2140
+ ]
2141
+ },
2142
+ {
2143
+ "ApiKey": []
2144
+ }
2145
+ ]
2146
+ }
2147
+ },
2148
+ "/v1.0/realtime/negotiate": {
2149
+ "post": {
2150
+ "tags": [
2151
+ "Realtime"
2152
+ ],
2153
+ "summary": "Issue a SignalR access token + URL for the sales-live hub",
2154
+ "operationId": "NegotiateSignalR",
2155
+ "requestBody": {
2156
+ "content": {
2157
+ "application/json": {
2158
+ "schema": {
2159
+ "$ref": "#/components/schemas/negotiateRequest"
2160
+ }
2161
+ }
2162
+ }
2163
+ },
2164
+ "responses": {
2165
+ "200": {
2166
+ "description": "Payload of NegotiateResponse",
2167
+ "content": {
2168
+ "application/json": {
2169
+ "schema": {
2170
+ "$ref": "#/components/schemas/negotiateResponse"
2171
+ }
2172
+ }
2173
+ }
2174
+ },
2175
+ "503": {
2176
+ "description": "SignalR is not configured on this instance; fall back to SSE"
2177
+ }
2178
+ },
2179
+ "security": [
2180
+ {
2181
+ "Implicit": [
2182
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2183
+ ]
2184
+ },
2185
+ {
2186
+ "ApiKey": []
2187
+ }
2188
+ ]
2189
+ }
2190
+ },
2191
+ "/v1.0/stream": {
2192
+ "get": {
2193
+ "tags": [
2194
+ "Realtime"
2195
+ ],
2196
+ "summary": "Unified SSE stream: tender/job/crawl/consultant/audit events on one connection",
2197
+ "operationId": "StreamAll",
2198
+ "parameters": [
2199
+ {
2200
+ "name": "channels",
2201
+ "in": "query",
2202
+ "description": "Comma-separated namespaces to include (tender,job,crawl,consultant,audit). Default: all.",
2203
+ "schema": {
2204
+ "type": "string"
2205
+ }
2206
+ }
2207
+ ],
2208
+ "responses": {},
2209
+ "security": [
2210
+ {
2211
+ "Implicit": [
2212
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2213
+ ]
2214
+ },
2215
+ {
2216
+ "ApiKey": []
2217
+ }
2218
+ ]
2219
+ }
2220
+ },
2221
+ "/v1.0/tenders/stream-redirect": {
2222
+ "get": {
2223
+ "tags": [
2224
+ "Realtime"
2225
+ ],
2226
+ "summary": "Deprecated: redirects to /v1.0/stream?channels=tender,job",
2227
+ "operationId": "DeprecatedTenderStream",
2228
+ "responses": {},
2229
+ "deprecated": true,
2230
+ "security": [
2231
+ {
2232
+ "Implicit": [
2233
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2234
+ ]
2235
+ },
2236
+ {
2237
+ "ApiKey": []
2238
+ }
2239
+ ]
2240
+ }
2241
+ },
2242
+ "/v1.0/crawl/stream-redirect": {
2243
+ "get": {
2244
+ "tags": [
2245
+ "Realtime"
2246
+ ],
2247
+ "summary": "Deprecated: redirects to /v1.0/stream?channels=crawl,job",
2248
+ "operationId": "DeprecatedCrawlStream",
2249
+ "responses": {},
2250
+ "deprecated": true,
2251
+ "security": [
2252
+ {
2253
+ "Implicit": [
2254
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2255
+ ]
2256
+ }
2257
+ ]
2258
+ }
2259
+ },
2260
+ "/v1.0/tenders/{id}/consultants": {
2261
+ "post": {
2262
+ "tags": [
2263
+ "Tenders"
2264
+ ],
2265
+ "summary": "Assign a consultant to a tender. Idempotent: assigning the same email twice refreshes Name/Note but does not create duplicates.",
2266
+ "operationId": "AssignConsultant",
2267
+ "parameters": [
2268
+ {
2269
+ "name": "id",
2270
+ "in": "path",
2271
+ "required": true,
2272
+ "schema": {
2273
+ "type": "string"
2274
+ }
2275
+ }
2276
+ ],
2277
+ "requestBody": {
2278
+ "content": {
2279
+ "application/json": {
2280
+ "schema": {
2281
+ "$ref": "#/components/schemas/assignedConsultant"
2282
+ }
2283
+ }
2284
+ },
2285
+ "required": true
2286
+ },
2287
+ "responses": {
2288
+ "200": {
2289
+ "description": "Payload of TenderView",
2290
+ "content": {
2291
+ "application/json": {
2292
+ "schema": {
2293
+ "$ref": "#/components/schemas/tenderView"
2294
+ }
2295
+ }
2296
+ }
2297
+ },
2298
+ "404": {
2299
+ "description": "No description"
2300
+ }
2301
+ },
2302
+ "security": [
2303
+ {
2304
+ "Implicit": [
2305
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2306
+ ]
2307
+ },
2308
+ {
2309
+ "ApiKey": []
2310
+ }
2311
+ ]
2312
+ }
2313
+ },
2314
+ "/v1.0/tenders/{id}/slack-messages": {
2315
+ "post": {
2316
+ "tags": [
2317
+ "Tenders"
2318
+ ],
2319
+ "summary": "Queue a Slack message for a tender (Service Bus → notifications-function).",
2320
+ "operationId": "SendTenderSlackMessage",
2321
+ "parameters": [
2322
+ {
2323
+ "name": "id",
2324
+ "in": "path",
2325
+ "required": true,
2326
+ "schema": {
2327
+ "type": "string"
2328
+ }
2329
+ }
2330
+ ],
2331
+ "requestBody": {
2332
+ "content": {
2333
+ "application/json": {
2334
+ "schema": {
2335
+ "$ref": "#/components/schemas/sendTenderSlackMessageRequest"
2336
+ }
2337
+ }
2338
+ },
2339
+ "required": true
2340
+ },
2341
+ "responses": {
2342
+ "204": {
2343
+ "description": "No description"
2344
+ },
2345
+ "400": {
2346
+ "description": "No description"
2347
+ },
2348
+ "404": {
2349
+ "description": "No description"
2350
+ }
2351
+ },
2352
+ "security": [
2353
+ {
2354
+ "Implicit": [
2355
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2356
+ ]
2357
+ },
2358
+ {
2359
+ "ApiKey": []
2360
+ }
2361
+ ]
2362
+ }
2363
+ },
2364
+ "/v1.0/tenders/{id}/consultants/{email}": {
2365
+ "delete": {
2366
+ "tags": [
2367
+ "Tenders"
2368
+ ],
2369
+ "summary": "Remove a consultant assignment from a tender. No-op if the email isn't assigned.",
2370
+ "operationId": "UnassignConsultant",
2371
+ "parameters": [
2372
+ {
2373
+ "name": "id",
2374
+ "in": "path",
2375
+ "required": true,
2376
+ "schema": {
2377
+ "type": "string"
2378
+ }
2379
+ },
2380
+ {
2381
+ "name": "email",
2382
+ "in": "path",
2383
+ "required": true,
2384
+ "schema": {
2385
+ "type": "string"
2386
+ }
2387
+ }
2388
+ ],
2389
+ "responses": {
2390
+ "200": {
2391
+ "description": "Payload of TenderView",
2392
+ "content": {
2393
+ "application/json": {
2394
+ "schema": {
2395
+ "$ref": "#/components/schemas/tenderView"
2396
+ }
2397
+ }
2398
+ }
2399
+ },
2400
+ "404": {
2401
+ "description": "No description"
2402
+ }
2403
+ },
2404
+ "security": [
2405
+ {
2406
+ "Implicit": [
2407
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2408
+ ]
2409
+ },
2410
+ {
2411
+ "ApiKey": []
2412
+ }
2413
+ ]
2414
+ }
2415
+ },
2416
+ "/v1.0/tenders": {
2417
+ "get": {
2418
+ "tags": [
2419
+ "Tenders"
2420
+ ],
2421
+ "summary": "List all tenders",
2422
+ "operationId": "ListTenders",
2423
+ "responses": {
2424
+ "200": {
2425
+ "description": "Payload of Array of TenderView",
2426
+ "content": {
2427
+ "application/json": {
2428
+ "schema": {
2429
+ "type": "array",
2430
+ "items": {
2431
+ "$ref": "#/components/schemas/tenderView"
2432
+ }
2433
+ }
2434
+ }
2435
+ }
2436
+ }
2437
+ },
2438
+ "security": [
2439
+ {
2440
+ "Implicit": [
2441
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2442
+ ]
2443
+ },
2444
+ {
2445
+ "ApiKey": []
2446
+ }
2447
+ ]
2448
+ },
2449
+ "post": {
2450
+ "tags": [
2451
+ "Tenders"
2452
+ ],
2453
+ "summary": "Create a new tender",
2454
+ "operationId": "CreateTender",
2455
+ "requestBody": {
2456
+ "content": {
2457
+ "application/json": {
2458
+ "schema": {
2459
+ "$ref": "#/components/schemas/tenderView"
2460
+ }
2461
+ }
2462
+ },
2463
+ "required": true
2464
+ },
2465
+ "responses": {
2466
+ "201": {
2467
+ "description": "Payload of TenderView",
2468
+ "content": {
2469
+ "application/json": {
2470
+ "schema": {
2471
+ "$ref": "#/components/schemas/tenderView"
2472
+ }
2473
+ }
2474
+ }
2475
+ }
2476
+ },
2477
+ "security": [
2478
+ {
2479
+ "Implicit": [
2480
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2481
+ ]
2482
+ },
2483
+ {
2484
+ "ApiKey": []
2485
+ }
2486
+ ]
2487
+ }
2488
+ },
2489
+ "/v1.0/tenders/{id}": {
2490
+ "get": {
2491
+ "tags": [
2492
+ "Tenders"
2493
+ ],
2494
+ "summary": "Get a tender by its URL slug (or internal id for admin use).",
2495
+ "operationId": "GetTender",
2496
+ "parameters": [
2497
+ {
2498
+ "name": "id",
2499
+ "in": "path",
2500
+ "description": "URL slug (canonical) or the internal guid id (admin/legacy).",
2501
+ "required": true,
2502
+ "schema": {
2503
+ "type": "string"
2504
+ }
2505
+ }
2506
+ ],
2507
+ "responses": {
2508
+ "200": {
2509
+ "description": "Payload of TenderView",
2510
+ "content": {
2511
+ "application/json": {
2512
+ "schema": {
2513
+ "$ref": "#/components/schemas/tenderView"
2514
+ }
2515
+ }
2516
+ }
2517
+ },
2518
+ "404": {
2519
+ "description": "No description"
2520
+ }
2521
+ },
2522
+ "security": [
2523
+ {
2524
+ "Implicit": [
2525
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2526
+ ]
2527
+ },
2528
+ {
2529
+ "ApiKey": []
2530
+ }
2531
+ ]
2532
+ },
2533
+ "put": {
2534
+ "tags": [
2535
+ "Tenders"
2536
+ ],
2537
+ "summary": "Update a tender",
2538
+ "operationId": "UpdateTender",
2539
+ "parameters": [
2540
+ {
2541
+ "name": "id",
2542
+ "in": "path",
2543
+ "required": true,
2544
+ "schema": {
2545
+ "type": "string"
2546
+ }
2547
+ }
2548
+ ],
2549
+ "requestBody": {
2550
+ "content": {
2551
+ "application/json": {
2552
+ "schema": {
2553
+ "$ref": "#/components/schemas/tenderView"
2554
+ }
2555
+ }
2556
+ },
2557
+ "required": true
2558
+ },
2559
+ "responses": {
2560
+ "200": {
2561
+ "description": "Payload of TenderView",
2562
+ "content": {
2563
+ "application/json": {
2564
+ "schema": {
2565
+ "$ref": "#/components/schemas/tenderView"
2566
+ }
2567
+ }
2568
+ }
2569
+ },
2570
+ "404": {
2571
+ "description": "No description"
2572
+ }
2573
+ },
2574
+ "security": [
2575
+ {
2576
+ "Implicit": [
2577
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2578
+ ]
2579
+ },
2580
+ {
2581
+ "ApiKey": []
2582
+ }
2583
+ ]
2584
+ },
2585
+ "delete": {
2586
+ "tags": [
2587
+ "Tenders"
2588
+ ],
2589
+ "summary": "Delete a tender",
2590
+ "operationId": "DeleteTender",
2591
+ "parameters": [
2592
+ {
2593
+ "name": "id",
2594
+ "in": "path",
2595
+ "required": true,
2596
+ "schema": {
2597
+ "type": "string"
2598
+ }
2599
+ }
2600
+ ],
2601
+ "responses": {
2602
+ "204": {
2603
+ "description": "No description"
2604
+ },
2605
+ "404": {
2606
+ "description": "No description"
2607
+ }
2608
+ },
2609
+ "security": [
2610
+ {
2611
+ "Implicit": [
2612
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2613
+ ]
2614
+ },
2615
+ {
2616
+ "ApiKey": []
2617
+ }
2618
+ ]
2619
+ }
2620
+ },
2621
+ "/v1.0/tenders/{id}/cv-proposal": {
2622
+ "put": {
2623
+ "tags": [
2624
+ "Tenders"
2625
+ ],
2626
+ "summary": "Set or replace the Flowcase proposal + tailored-CV mapping attached to a tender.",
2627
+ "operationId": "SetTenderCvProposal",
2628
+ "parameters": [
2629
+ {
2630
+ "name": "id",
2631
+ "in": "path",
2632
+ "required": true,
2633
+ "schema": {
2634
+ "type": "string"
2635
+ }
2636
+ }
2637
+ ],
2638
+ "requestBody": {
2639
+ "content": {
2640
+ "application/json": {
2641
+ "schema": {
2642
+ "$ref": "#/components/schemas/tenderCvProposal"
2643
+ }
2644
+ }
2645
+ },
2646
+ "required": true
2647
+ },
2648
+ "responses": {
2649
+ "200": {
2650
+ "description": "Payload of TenderView",
2651
+ "content": {
2652
+ "application/json": {
2653
+ "schema": {
2654
+ "$ref": "#/components/schemas/tenderView"
2655
+ }
2656
+ }
2657
+ }
2658
+ },
2659
+ "404": {
2660
+ "description": "No description"
2661
+ }
2662
+ },
2663
+ "security": [
2664
+ {
2665
+ "Implicit": [
2666
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2667
+ ]
2668
+ },
2669
+ {
2670
+ "ApiKey": []
2671
+ }
2672
+ ]
2673
+ }
2674
+ },
2675
+ "/v1.0/tenders/{id}/cv-proposal/variants": {
2676
+ "post": {
2677
+ "tags": [
2678
+ "Tenders"
2679
+ ],
2680
+ "summary": "Upsert a single tailored-CV variant on a tender's proposal (per consultant).",
2681
+ "operationId": "UpsertTenderCvVariant",
2682
+ "parameters": [
2683
+ {
2684
+ "name": "id",
2685
+ "in": "path",
2686
+ "required": true,
2687
+ "schema": {
2688
+ "type": "string"
2689
+ }
2690
+ }
2691
+ ],
2692
+ "requestBody": {
2693
+ "content": {
2694
+ "application/json": {
2695
+ "schema": {
2696
+ "$ref": "#/components/schemas/tenderCvVariant"
2697
+ }
2698
+ }
2699
+ },
2700
+ "required": true
2701
+ },
2702
+ "responses": {
2703
+ "200": {
2704
+ "description": "Payload of TenderView",
2705
+ "content": {
2706
+ "application/json": {
2707
+ "schema": {
2708
+ "$ref": "#/components/schemas/tenderView"
2709
+ }
2710
+ }
2711
+ }
2712
+ },
2713
+ "404": {
2714
+ "description": "No description"
2715
+ }
2716
+ },
2717
+ "security": [
2718
+ {
2719
+ "Implicit": [
2720
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2721
+ ]
2722
+ },
2723
+ {
2724
+ "ApiKey": []
2725
+ }
2726
+ ]
2727
+ }
2728
+ },
2729
+ "/v1.0/tenders/{id}/cv-proposal/variants/{email}": {
2730
+ "delete": {
2731
+ "tags": [
2732
+ "Tenders"
2733
+ ],
2734
+ "summary": "Remove a tailored-CV variant from a tender's proposal by consultant email.",
2735
+ "operationId": "RemoveTenderCvVariant",
2736
+ "parameters": [
2737
+ {
2738
+ "name": "id",
2739
+ "in": "path",
2740
+ "required": true,
2741
+ "schema": {
2742
+ "type": "string"
2743
+ }
2744
+ },
2745
+ {
2746
+ "name": "email",
2747
+ "in": "path",
2748
+ "required": true,
2749
+ "schema": {
2750
+ "type": "string"
2751
+ }
2752
+ }
2753
+ ],
2754
+ "responses": {
2755
+ "200": {
2756
+ "description": "Payload of TenderView",
2757
+ "content": {
2758
+ "application/json": {
2759
+ "schema": {
2760
+ "$ref": "#/components/schemas/tenderView"
2761
+ }
2762
+ }
2763
+ }
2764
+ },
2765
+ "404": {
2766
+ "description": "No description"
2767
+ }
2768
+ },
2769
+ "security": [
2770
+ {
2771
+ "Implicit": [
2772
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2773
+ ]
2774
+ },
2775
+ {
2776
+ "ApiKey": []
2777
+ }
2778
+ ]
2779
+ }
2780
+ },
2781
+ "/v1.0/tenders/backfill-slugs": {
2782
+ "post": {
2783
+ "tags": [
2784
+ "Tenders"
2785
+ ],
2786
+ "summary": "Assign a slug to every tender that doesn't have one yet. Idempotent — safe to re-run.",
2787
+ "operationId": "BackfillTenderSlugs",
2788
+ "responses": {
2789
+ "200": {
2790
+ "description": "Payload of BackfillSlugsResult",
2791
+ "content": {
2792
+ "application/json": {
2793
+ "schema": {
2794
+ "$ref": "#/components/schemas/backfillSlugsResult"
2795
+ }
2796
+ }
2797
+ }
2798
+ }
2799
+ },
2800
+ "security": [
2801
+ {
2802
+ "Implicit": [
2803
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2804
+ ]
2805
+ },
2806
+ {
2807
+ "ApiKey": []
2808
+ }
2809
+ ]
2810
+ }
2811
+ },
2812
+ "/v1.0/tenders/{id}/reingest": {
2813
+ "post": {
2814
+ "tags": [
2815
+ "Tenders"
2816
+ ],
2817
+ "summary": "Re-run the ingestion pipeline on an existing tender, re-parsing documents and refreshing AI match / summary / classification.",
2818
+ "operationId": "ReingestTender",
2819
+ "parameters": [
2820
+ {
2821
+ "name": "id",
2822
+ "in": "path",
2823
+ "required": true,
2824
+ "schema": {
2825
+ "type": "string"
2826
+ }
2827
+ }
2828
+ ],
2829
+ "responses": {
2830
+ "200": {
2831
+ "description": "Payload of AgentJob",
2832
+ "content": {
2833
+ "application/json": {
2834
+ "schema": {
2835
+ "$ref": "#/components/schemas/agentJob"
2836
+ }
2837
+ }
2838
+ }
2839
+ },
2840
+ "404": {
2841
+ "description": "No description"
2842
+ }
2843
+ },
2844
+ "security": [
2845
+ {
2846
+ "Implicit": [
2847
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2848
+ ]
2849
+ },
2850
+ {
2851
+ "ApiKey": []
2852
+ }
2853
+ ]
2854
+ }
2855
+ },
2856
+ "/v1.0/tenders/{id}/jobs/{jobId}/snapshot": {
2857
+ "get": {
2858
+ "tags": [
2859
+ "Tenders"
2860
+ ],
2861
+ "summary": "Return the tender as it looked right after a given agent job ran (time-travel view).",
2862
+ "operationId": "GetTenderJobSnapshot",
2863
+ "parameters": [
2864
+ {
2865
+ "name": "id",
2866
+ "in": "path",
2867
+ "required": true,
2868
+ "schema": {
2869
+ "type": "string"
2870
+ }
2871
+ },
2872
+ {
2873
+ "name": "jobId",
2874
+ "in": "path",
2875
+ "required": true,
2876
+ "schema": {
2877
+ "type": "string"
2878
+ }
2879
+ }
2880
+ ],
2881
+ "responses": {
2882
+ "200": {
2883
+ "description": "Payload of TenderView",
2884
+ "content": {
2885
+ "application/json": {
2886
+ "schema": {
2887
+ "$ref": "#/components/schemas/tenderView"
2888
+ }
2889
+ }
2890
+ }
2891
+ },
2892
+ "404": {
2893
+ "description": "No description"
2894
+ }
2895
+ },
2896
+ "security": [
2897
+ {
2898
+ "Implicit": [
2899
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2900
+ ]
2901
+ },
2902
+ {
2903
+ "ApiKey": []
2904
+ }
2905
+ ]
2906
+ }
2907
+ },
2908
+ "/v1.0/tenders/{id}/jobs": {
2909
+ "get": {
2910
+ "tags": [
2911
+ "Tenders"
2912
+ ],
2913
+ "summary": "Recent agent jobs (ingestion, CV matching, …) for a tender — newest first.",
2914
+ "operationId": "ListTenderJobs",
2915
+ "parameters": [
2916
+ {
2917
+ "name": "id",
2918
+ "in": "path",
2919
+ "required": true,
2920
+ "schema": {
2921
+ "type": "string"
2922
+ }
2923
+ },
2924
+ {
2925
+ "name": "limit",
2926
+ "in": "query",
2927
+ "schema": {
2928
+ "type": "integer",
2929
+ "format": "int32"
2930
+ },
2931
+ "x-ms-summary": "Max rows (default 10, capped at 100)."
2932
+ }
2933
+ ],
2934
+ "responses": {
2935
+ "200": {
2936
+ "description": "Payload of Array of AgentJob",
2937
+ "content": {
2938
+ "application/json": {
2939
+ "schema": {
2940
+ "type": "array",
2941
+ "items": {
2942
+ "$ref": "#/components/schemas/agentJob"
2943
+ }
2944
+ }
2945
+ }
2946
+ }
2947
+ }
2948
+ },
2949
+ "security": [
2950
+ {
2951
+ "Implicit": [
2952
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
2953
+ ]
2954
+ },
2955
+ {
2956
+ "ApiKey": []
2957
+ }
2958
+ ]
2959
+ }
2960
+ },
2961
+ "/v1.0/admin/tenders": {
2962
+ "delete": {
2963
+ "tags": [
2964
+ "Admin"
2965
+ ],
2966
+ "summary": "Delete all tenders",
2967
+ "operationId": "DeleteAllTenders",
2968
+ "responses": {
2969
+ "200": {
2970
+ "description": "Payload of Object",
2971
+ "content": {
2972
+ "application/json": {
2973
+ "schema": {
2974
+ "type": "object"
2975
+ }
2976
+ }
2977
+ }
2978
+ }
2979
+ },
2980
+ "security": [
2981
+ {
2982
+ "Implicit": []
2983
+ },
2984
+ {
2985
+ "ApiKey": []
2986
+ }
2987
+ ]
2988
+ }
2989
+ },
2990
+ "/v1.0/admin/reprocess-matches": {
2991
+ "post": {
2992
+ "tags": [
2993
+ "Admin"
2994
+ ],
2995
+ "summary": "Trigger CV matching on all tenders",
2996
+ "operationId": "ReprocessMatches",
2997
+ "parameters": [
2998
+ {
2999
+ "name": "unmatchedOnly",
3000
+ "in": "query",
3001
+ "description": "If true, only re-match tenders with no existing consultant matches",
3002
+ "schema": {
3003
+ "type": "boolean"
3004
+ }
3005
+ }
3006
+ ],
3007
+ "responses": {
3008
+ "200": {
3009
+ "description": "Payload of Object",
3010
+ "content": {
3011
+ "application/json": {
3012
+ "schema": {
3013
+ "type": "object"
3014
+ }
3015
+ }
3016
+ }
3017
+ }
3018
+ },
3019
+ "security": [
3020
+ {
3021
+ "Implicit": [
3022
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
3023
+ ]
3024
+ },
3025
+ {
3026
+ "ApiKey": []
3027
+ }
3028
+ ]
3029
+ }
3030
+ },
3031
+ "/v1.0/tenders/export.csv": {
3032
+ "get": {
3033
+ "tags": [
3034
+ "Tenders"
3035
+ ],
3036
+ "summary": "Export tenders matching the given filters as RFC 4180 CSV",
3037
+ "operationId": "ExportTendersCsv",
3038
+ "parameters": [
3039
+ {
3040
+ "name": "stage",
3041
+ "in": "query",
3042
+ "description": "Filter by status.stage (e.g. discovery, qualification)",
3043
+ "schema": {
3044
+ "type": "string"
3045
+ }
3046
+ },
3047
+ {
3048
+ "name": "state",
3049
+ "in": "query",
3050
+ "description": "Filter by status.state (e.g. active, irrelevant, ingestion_failed)",
3051
+ "schema": {
3052
+ "type": "string"
3053
+ }
3054
+ },
3055
+ {
3056
+ "name": "fromDate",
3057
+ "in": "query",
3058
+ "description": "Only include tenders with foundAt >= fromDate (ISO 8601)",
3059
+ "schema": {
3060
+ "type": "string",
3061
+ "format": "date-time"
3062
+ }
3063
+ },
3064
+ {
3065
+ "name": "toDate",
3066
+ "in": "query",
3067
+ "description": "Only include tenders with foundAt <= toDate (ISO 8601)",
3068
+ "schema": {
3069
+ "type": "string",
3070
+ "format": "date-time"
3071
+ }
3072
+ }
3073
+ ],
3074
+ "responses": {
3075
+ "200": {
3076
+ "description": "Payload of String",
3077
+ "content": {
3078
+ "text/csv": {
3079
+ "schema": {
3080
+ "type": "string"
3081
+ }
3082
+ }
3083
+ },
3084
+ "x-ms-summary": "CSV file with one tender per row"
3085
+ }
3086
+ },
3087
+ "security": [
3088
+ {
3089
+ "Implicit": [
3090
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
3091
+ ]
3092
+ },
3093
+ {
3094
+ "ApiKey": []
3095
+ }
3096
+ ]
3097
+ }
3098
+ },
3099
+ "/v1.0/tenders/stream": {
3100
+ "get": {
3101
+ "tags": [
3102
+ "Tenders"
3103
+ ],
3104
+ "summary": "Server-sent-events stream of tender.created / tender.updated / tender.deleted events",
3105
+ "operationId": "StreamTenderEvents",
3106
+ "responses": {},
3107
+ "security": [
3108
+ {
3109
+ "Implicit": [
3110
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default"
3111
+ ]
3112
+ },
3113
+ {
3114
+ "ApiKey": []
3115
+ }
3116
+ ]
3117
+ }
3118
+ }
3119
+ },
3120
+ "components": {
3121
+ "schemas": {
3122
+ "agentJob": {
3123
+ "type": "object",
3124
+ "properties": {
3125
+ "id": {
3126
+ "type": "string",
3127
+ "nullable": true
3128
+ },
3129
+ "type": {
3130
+ "type": "string",
3131
+ "nullable": true
3132
+ },
3133
+ "jobType": {
3134
+ "type": "string",
3135
+ "nullable": true
3136
+ },
3137
+ "tenderId": {
3138
+ "type": "string",
3139
+ "nullable": true
3140
+ },
3141
+ "status": {
3142
+ "type": "string",
3143
+ "nullable": true
3144
+ },
3145
+ "error": {
3146
+ "type": "string",
3147
+ "nullable": true
3148
+ },
3149
+ "result": {
3150
+ "type": "string",
3151
+ "nullable": true
3152
+ },
3153
+ "startedAt": {
3154
+ "type": "string",
3155
+ "format": "date-time",
3156
+ "nullable": true
3157
+ },
3158
+ "completedAt": {
3159
+ "type": "string",
3160
+ "format": "date-time",
3161
+ "nullable": true
3162
+ },
3163
+ "triggeredBy": {
3164
+ "type": "string",
3165
+ "nullable": true
3166
+ },
3167
+ "orchestrationId": {
3168
+ "type": "string",
3169
+ "nullable": true
3170
+ },
3171
+ "externalId": {
3172
+ "type": "string",
3173
+ "nullable": true
3174
+ },
3175
+ "sourceName": {
3176
+ "type": "string",
3177
+ "nullable": true
3178
+ },
3179
+ "inputUrl": {
3180
+ "type": "string",
3181
+ "nullable": true
3182
+ },
3183
+ "inputTitle": {
3184
+ "type": "string",
3185
+ "nullable": true
3186
+ },
3187
+ "logs": {
3188
+ "type": "array",
3189
+ "items": {
3190
+ "$ref": "#/components/schemas/agentJobLogEntry"
3191
+ },
3192
+ "nullable": true
3193
+ },
3194
+ "afterSnapshot": {
3195
+ "type": "string",
3196
+ "nullable": true
3197
+ }
3198
+ }
3199
+ },
3200
+ "agentJobLogEntry": {
3201
+ "type": "object",
3202
+ "properties": {
3203
+ "at": {
3204
+ "type": "string",
3205
+ "format": "date-time",
3206
+ "nullable": true
3207
+ },
3208
+ "level": {
3209
+ "type": "string",
3210
+ "nullable": true
3211
+ },
3212
+ "message": {
3213
+ "type": "string",
3214
+ "nullable": true
3215
+ },
3216
+ "data": {
3217
+ "type": "object",
3218
+ "additionalProperties": {
3219
+ "type": "object"
3220
+ },
3221
+ "nullable": true
3222
+ }
3223
+ }
3224
+ },
3225
+ "assignedConsultant": {
3226
+ "type": "object",
3227
+ "properties": {
3228
+ "email": {
3229
+ "type": "string",
3230
+ "nullable": true
3231
+ },
3232
+ "name": {
3233
+ "type": "string",
3234
+ "nullable": true
3235
+ },
3236
+ "assignedAt": {
3237
+ "type": "string",
3238
+ "format": "date-time",
3239
+ "nullable": true
3240
+ },
3241
+ "assignedBy": {
3242
+ "type": "string",
3243
+ "nullable": true
3244
+ },
3245
+ "note": {
3246
+ "type": "string",
3247
+ "nullable": true
3248
+ }
3249
+ }
3250
+ },
3251
+ "auditEvent": {
3252
+ "type": "object",
3253
+ "properties": {
3254
+ "id": {
3255
+ "type": "string",
3256
+ "nullable": true
3257
+ },
3258
+ "type": {
3259
+ "type": "string",
3260
+ "nullable": true
3261
+ },
3262
+ "tenderId": {
3263
+ "type": "string",
3264
+ "nullable": true
3265
+ },
3266
+ "actorEmail": {
3267
+ "type": "string",
3268
+ "nullable": true
3269
+ },
3270
+ "actorSource": {
3271
+ "type": "string",
3272
+ "nullable": true
3273
+ },
3274
+ "summary": {
3275
+ "type": "string",
3276
+ "nullable": true
3277
+ },
3278
+ "beforeSnapshot": {
3279
+ "$ref": "#/components/schemas/auditSnapshot"
3280
+ },
3281
+ "afterSnapshot": {
3282
+ "$ref": "#/components/schemas/auditSnapshot"
3283
+ },
3284
+ "timestamp": {
3285
+ "type": "string",
3286
+ "format": "date-time",
3287
+ "nullable": true
3288
+ }
3289
+ }
3290
+ },
3291
+ "auditSnapshot": {
3292
+ "type": "object",
3293
+ "properties": {
3294
+ "stage": {
3295
+ "type": "string",
3296
+ "nullable": true
3297
+ },
3298
+ "state": {
3299
+ "type": "string",
3300
+ "nullable": true
3301
+ },
3302
+ "consultantMatchCount": {
3303
+ "type": "integer",
3304
+ "format": "int32",
3305
+ "nullable": true
3306
+ },
3307
+ "selectedConsultantIds": {
3308
+ "type": "array",
3309
+ "items": {
3310
+ "type": "string"
3311
+ },
3312
+ "nullable": true
3313
+ }
3314
+ },
3315
+ "nullable": true
3316
+ },
3317
+ "backfillSlugsResult": {
3318
+ "type": "object",
3319
+ "properties": {
3320
+ "total": {
3321
+ "type": "integer",
3322
+ "format": "int32"
3323
+ },
3324
+ "alreadyHad": {
3325
+ "type": "integer",
3326
+ "format": "int32"
3327
+ },
3328
+ "updated": {
3329
+ "type": "integer",
3330
+ "format": "int32"
3331
+ }
3332
+ }
3333
+ },
3334
+ "backupSummary": {
3335
+ "type": "object",
3336
+ "properties": {
3337
+ "blobAccount": {
3338
+ "type": "string"
3339
+ },
3340
+ "container": {
3341
+ "type": "string"
3342
+ },
3343
+ "prefix": {
3344
+ "type": "string"
3345
+ },
3346
+ "containers": {
3347
+ "type": "array",
3348
+ "items": {
3349
+ "$ref": "#/components/schemas/containerBackup"
3350
+ }
3351
+ },
3352
+ "documentsCopied": {
3353
+ "type": "integer",
3354
+ "format": "int32"
3355
+ },
3356
+ "documentsBytes": {
3357
+ "type": "integer",
3358
+ "format": "int64"
3359
+ },
3360
+ "documentsFailures": {
3361
+ "type": "integer",
3362
+ "format": "int32"
3363
+ },
3364
+ "startedAt": {
3365
+ "type": "string",
3366
+ "format": "date-time"
3367
+ },
3368
+ "completedAt": {
3369
+ "type": "string",
3370
+ "format": "date-time"
3371
+ }
3372
+ }
3373
+ },
3374
+ "bulkDeleteJobError": {
3375
+ "type": "object",
3376
+ "properties": {
3377
+ "jobId": {
3378
+ "type": "string"
3379
+ },
3380
+ "message": {
3381
+ "type": "string"
3382
+ }
3383
+ }
3384
+ },
3385
+ "bulkDeleteJobsRequest": {
3386
+ "type": "object",
3387
+ "properties": {
3388
+ "jobIds": {
3389
+ "type": "array",
3390
+ "items": {
3391
+ "type": "string"
3392
+ }
3393
+ }
3394
+ }
3395
+ },
3396
+ "bulkDeleteJobsResponse": {
3397
+ "type": "object",
3398
+ "properties": {
3399
+ "deleted": {
3400
+ "type": "integer",
3401
+ "format": "int32"
3402
+ },
3403
+ "errors": {
3404
+ "type": "array",
3405
+ "items": {
3406
+ "$ref": "#/components/schemas/bulkDeleteJobError"
3407
+ }
3408
+ }
3409
+ }
3410
+ },
3411
+ "consultantAnswers": {
3412
+ "type": "object",
3413
+ "properties": {
3414
+ "consultantId": {
3415
+ "type": "string",
3416
+ "nullable": true
3417
+ },
3418
+ "email": {
3419
+ "type": "string",
3420
+ "nullable": true
3421
+ },
3422
+ "name": {
3423
+ "type": "string",
3424
+ "nullable": true
3425
+ },
3426
+ "generatedAt": {
3427
+ "type": "string",
3428
+ "format": "date-time",
3429
+ "nullable": true
3430
+ },
3431
+ "filledDocumentId": {
3432
+ "type": "string",
3433
+ "nullable": true
3434
+ }
3435
+ }
3436
+ },
3437
+ "consultantMatch": {
3438
+ "type": "object",
3439
+ "properties": {
3440
+ "consultantId": {
3441
+ "type": "string",
3442
+ "nullable": true
3443
+ },
3444
+ "businessId": {
3445
+ "type": "string",
3446
+ "nullable": true
3447
+ },
3448
+ "name": {
3449
+ "type": "string",
3450
+ "nullable": true
3451
+ },
3452
+ "fitScore": {
3453
+ "type": "number",
3454
+ "format": "double",
3455
+ "nullable": true
3456
+ },
3457
+ "availabilityStatus": {
3458
+ "type": "string",
3459
+ "nullable": true
3460
+ },
3461
+ "availableFrom": {
3462
+ "type": "string",
3463
+ "nullable": true
3464
+ },
3465
+ "matchedTechnologies": {
3466
+ "type": "array",
3467
+ "items": {
3468
+ "type": "string"
3469
+ },
3470
+ "nullable": true
3471
+ },
3472
+ "missingTechnologies": {
3473
+ "type": "array",
3474
+ "items": {
3475
+ "type": "string"
3476
+ },
3477
+ "nullable": true
3478
+ },
3479
+ "selected": {
3480
+ "type": "boolean",
3481
+ "nullable": true
3482
+ },
3483
+ "fitExplanation": {
3484
+ "type": "string",
3485
+ "nullable": true
3486
+ },
3487
+ "cvSummary": {
3488
+ "type": "string",
3489
+ "nullable": true
3490
+ },
3491
+ "seniority": {
3492
+ "type": "string",
3493
+ "nullable": true
3494
+ },
3495
+ "email": {
3496
+ "type": "string",
3497
+ "nullable": true
3498
+ },
3499
+ "notifiedAt": {
3500
+ "type": "string",
3501
+ "format": "date-time",
3502
+ "nullable": true
3503
+ },
3504
+ "consultantChannelNotifiedAt": {
3505
+ "type": "string",
3506
+ "format": "date-time",
3507
+ "nullable": true
3508
+ }
3509
+ }
3510
+ },
3511
+ "consultantStatsResponse": {
3512
+ "type": "object",
3513
+ "properties": {
3514
+ "total": {
3515
+ "type": "integer",
3516
+ "format": "int32"
3517
+ },
3518
+ "available": {
3519
+ "type": "integer",
3520
+ "format": "int32"
3521
+ },
3522
+ "onAssignment": {
3523
+ "type": "integer",
3524
+ "format": "int32"
3525
+ },
3526
+ "unknownAvailability": {
3527
+ "type": "integer",
3528
+ "format": "int32"
3529
+ },
3530
+ "avgFitScore": {
3531
+ "type": "number",
3532
+ "format": "double",
3533
+ "nullable": true
3534
+ }
3535
+ }
3536
+ },
3537
+ "consultantSummary": {
3538
+ "type": "object",
3539
+ "properties": {
3540
+ "userId": {
3541
+ "type": "string",
3542
+ "nullable": true
3543
+ },
3544
+ "email": {
3545
+ "type": "string",
3546
+ "nullable": true
3547
+ },
3548
+ "name": {
3549
+ "type": "string",
3550
+ "nullable": true
3551
+ },
3552
+ "technologies": {
3553
+ "type": "array",
3554
+ "items": {
3555
+ "type": "string"
3556
+ },
3557
+ "nullable": true
3558
+ },
3559
+ "roles": {
3560
+ "type": "array",
3561
+ "items": {
3562
+ "type": "string"
3563
+ },
3564
+ "nullable": true
3565
+ },
3566
+ "yearsExperience": {
3567
+ "type": "integer",
3568
+ "format": "int32",
3569
+ "nullable": true
3570
+ }
3571
+ }
3572
+ },
3573
+ "containerBackup": {
3574
+ "type": "object",
3575
+ "properties": {
3576
+ "name": {
3577
+ "type": "string"
3578
+ },
3579
+ "blobPath": {
3580
+ "type": "string"
3581
+ },
3582
+ "itemCount": {
3583
+ "type": "integer",
3584
+ "format": "int32"
3585
+ },
3586
+ "compressedBytes": {
3587
+ "type": "integer",
3588
+ "format": "int64"
3589
+ }
3590
+ }
3591
+ },
3592
+ "crawlActivityResponse": {
3593
+ "type": "object",
3594
+ "properties": {
3595
+ "items": {
3596
+ "type": "array",
3597
+ "items": {
3598
+ "$ref": "#/components/schemas/agentJob"
3599
+ }
3600
+ },
3601
+ "total": {
3602
+ "type": "integer",
3603
+ "format": "int32"
3604
+ }
3605
+ }
3606
+ },
3607
+ "crawledNotice": {
3608
+ "type": "object",
3609
+ "properties": {
3610
+ "sourceName": {
3611
+ "type": "string"
3612
+ },
3613
+ "id": {
3614
+ "type": "string"
3615
+ },
3616
+ "title": {
3617
+ "type": "string"
3618
+ },
3619
+ "url": {
3620
+ "type": "string"
3621
+ }
3622
+ }
3623
+ },
3624
+ "crawlPattern": {
3625
+ "type": "object",
3626
+ "properties": {
3627
+ "sourceName": {
3628
+ "type": "string"
3629
+ },
3630
+ "detailUrlRegex": {
3631
+ "type": "string"
3632
+ },
3633
+ "paginationUrlRegex": {
3634
+ "type": "string"
3635
+ },
3636
+ "sampleCount": {
3637
+ "type": "integer",
3638
+ "format": "int32"
3639
+ },
3640
+ "bootstrappedAt": {
3641
+ "type": "string",
3642
+ "format": "date-time"
3643
+ }
3644
+ }
3645
+ },
3646
+ "crawlPreviewResponse": {
3647
+ "type": "object",
3648
+ "properties": {
3649
+ "sourceName": {
3650
+ "type": "string"
3651
+ },
3652
+ "notices": {
3653
+ "type": "array",
3654
+ "items": {
3655
+ "$ref": "#/components/schemas/crawledNotice"
3656
+ }
3657
+ },
3658
+ "pattern": {
3659
+ "$ref": "#/components/schemas/crawlPattern"
3660
+ },
3661
+ "startedAt": {
3662
+ "type": "string",
3663
+ "format": "date-time"
3664
+ },
3665
+ "finishedAt": {
3666
+ "type": "string",
3667
+ "format": "date-time"
3668
+ },
3669
+ "warnings": {
3670
+ "type": "array",
3671
+ "items": {
3672
+ "type": "string"
3673
+ }
3674
+ }
3675
+ }
3676
+ },
3677
+ "crawlScanResponse": {
3678
+ "type": "object",
3679
+ "properties": {
3680
+ "sourceName": {
3681
+ "type": "string"
3682
+ },
3683
+ "discovered": {
3684
+ "type": "integer",
3685
+ "format": "int32"
3686
+ },
3687
+ "queued": {
3688
+ "type": "integer",
3689
+ "format": "int32"
3690
+ },
3691
+ "merged": {
3692
+ "type": "integer",
3693
+ "format": "int32"
3694
+ }
3695
+ }
3696
+ },
3697
+ "crawlSourceConfig": {
3698
+ "type": "object",
3699
+ "properties": {
3700
+ "name": {
3701
+ "type": "string"
3702
+ },
3703
+ "seedUrl": {
3704
+ "type": "string"
3705
+ },
3706
+ "maxPages": {
3707
+ "type": "integer",
3708
+ "format": "int32"
3709
+ },
3710
+ "enabled": {
3711
+ "type": "boolean"
3712
+ },
3713
+ "createdAt": {
3714
+ "type": "string",
3715
+ "format": "date-time"
3716
+ },
3717
+ "updatedAt": {
3718
+ "type": "string",
3719
+ "format": "date-time"
3720
+ }
3721
+ }
3722
+ },
3723
+ "crawlSourceUpsertRequest": {
3724
+ "type": "object",
3725
+ "properties": {
3726
+ "seedUrl": {
3727
+ "type": "string"
3728
+ },
3729
+ "maxPages": {
3730
+ "type": "integer",
3731
+ "format": "int32",
3732
+ "nullable": true
3733
+ },
3734
+ "enabled": {
3735
+ "type": "boolean",
3736
+ "nullable": true
3737
+ }
3738
+ }
3739
+ },
3740
+ "crawlSourceWithPattern": {
3741
+ "type": "object",
3742
+ "properties": {
3743
+ "source": {
3744
+ "$ref": "#/components/schemas/crawlSourceConfig"
3745
+ },
3746
+ "pattern": {
3747
+ "$ref": "#/components/schemas/crawlPattern"
3748
+ },
3749
+ "lastActivityAt": {
3750
+ "type": "string",
3751
+ "format": "date-time",
3752
+ "nullable": true
3753
+ }
3754
+ }
3755
+ },
3756
+ "crawlStatsResponse": {
3757
+ "type": "object",
3758
+ "properties": {
3759
+ "sourceCount": {
3760
+ "type": "integer",
3761
+ "format": "int32"
3762
+ },
3763
+ "enabledSourceCount": {
3764
+ "type": "integer",
3765
+ "format": "int32"
3766
+ },
3767
+ "tendersActive": {
3768
+ "type": "integer",
3769
+ "format": "int32"
3770
+ },
3771
+ "tendersIrrelevant": {
3772
+ "type": "integer",
3773
+ "format": "int32"
3774
+ },
3775
+ "tendersIngestionFailed": {
3776
+ "type": "integer",
3777
+ "format": "int32"
3778
+ },
3779
+ "jobsPending": {
3780
+ "type": "integer",
3781
+ "format": "int32"
3782
+ },
3783
+ "jobsRunning": {
3784
+ "type": "integer",
3785
+ "format": "int32"
3786
+ },
3787
+ "jobsCompleted": {
3788
+ "type": "integer",
3789
+ "format": "int32"
3790
+ },
3791
+ "jobsFailed": {
3792
+ "type": "integer",
3793
+ "format": "int32"
3794
+ },
3795
+ "sources": {
3796
+ "type": "array",
3797
+ "items": {
3798
+ "$ref": "#/components/schemas/sourceSummary"
3799
+ }
3800
+ }
3801
+ }
3802
+ },
3803
+ "createBackupRequest": {
3804
+ "type": "object",
3805
+ "properties": {
3806
+ "includeDocuments": {
3807
+ "type": "boolean"
3808
+ }
3809
+ }
3810
+ },
3811
+ "crmOpportunity": {
3812
+ "type": "object",
3813
+ "properties": {
3814
+ "id": {
3815
+ "type": "string"
3816
+ },
3817
+ "name": {
3818
+ "type": "string"
3819
+ },
3820
+ "stage": {
3821
+ "type": "string"
3822
+ },
3823
+ "closeDate": {
3824
+ "type": "string",
3825
+ "format": "date-time",
3826
+ "nullable": true
3827
+ },
3828
+ "isClosed": {
3829
+ "type": "boolean"
3830
+ },
3831
+ "isWon": {
3832
+ "type": "boolean"
3833
+ },
3834
+ "amount": {
3835
+ "type": "number",
3836
+ "format": "double",
3837
+ "nullable": true
3838
+ },
3839
+ "account": {
3840
+ "$ref": "#/components/schemas/crmParty"
3841
+ },
3842
+ "owner": {
3843
+ "$ref": "#/components/schemas/crmParty"
3844
+ },
3845
+ "tenderId": {
3846
+ "type": "string"
3847
+ },
3848
+ "locator": {
3849
+ "$ref": "#/components/schemas/crmRecordLocator"
3850
+ }
3851
+ }
3852
+ },
3853
+ "crmParty": {
3854
+ "type": "object",
3855
+ "properties": {
3856
+ "id": {
3857
+ "type": "string"
3858
+ },
3859
+ "name": {
3860
+ "type": "string"
3861
+ },
3862
+ "email": {
3863
+ "type": "string"
3864
+ }
3865
+ }
3866
+ },
3867
+ "crmRecordLocator": {
3868
+ "type": "object",
3869
+ "properties": {
3870
+ "type": {
3871
+ "type": "string"
3872
+ },
3873
+ "url": {
3874
+ "type": "string"
3875
+ }
3876
+ }
3877
+ },
3878
+ "crmRefreshResult": {
3879
+ "type": "object",
3880
+ "properties": {
3881
+ "checked": {
3882
+ "type": "integer",
3883
+ "format": "int32"
3884
+ },
3885
+ "updated": {
3886
+ "type": "integer",
3887
+ "format": "int32"
3888
+ }
3889
+ }
3890
+ },
3891
+ "crmStage": {
3892
+ "type": "object",
3893
+ "properties": {
3894
+ "label": {
3895
+ "type": "string"
3896
+ },
3897
+ "apiName": {
3898
+ "type": "string"
3899
+ },
3900
+ "isActive": {
3901
+ "type": "boolean"
3902
+ },
3903
+ "isClosed": {
3904
+ "type": "boolean"
3905
+ },
3906
+ "isWon": {
3907
+ "type": "boolean"
3908
+ },
3909
+ "sortOrder": {
3910
+ "type": "integer",
3911
+ "format": "int32",
3912
+ "nullable": true
3913
+ }
3914
+ }
3915
+ },
3916
+ "deleteFailedTendersResponse": {
3917
+ "type": "object",
3918
+ "properties": {
3919
+ "sourceName": {
3920
+ "type": "string"
3921
+ },
3922
+ "matched": {
3923
+ "type": "integer",
3924
+ "format": "int32"
3925
+ },
3926
+ "deleted": {
3927
+ "type": "integer",
3928
+ "format": "int32"
3929
+ }
3930
+ }
3931
+ },
3932
+ "discoverListingRequest": {
3933
+ "type": "object",
3934
+ "properties": {
3935
+ "homeUrl": {
3936
+ "type": "string"
3937
+ }
3938
+ }
3939
+ },
3940
+ "discoverListingResponse": {
3941
+ "type": "object",
3942
+ "properties": {
3943
+ "candidates": {
3944
+ "type": "array",
3945
+ "items": {
3946
+ "$ref": "#/components/schemas/listingCandidate"
3947
+ }
3948
+ }
3949
+ }
3950
+ },
3951
+ "externalSourceRef": {
3952
+ "type": "object",
3953
+ "properties": {
3954
+ "system": {
3955
+ "type": "string",
3956
+ "nullable": true
3957
+ },
3958
+ "externalId": {
3959
+ "type": "string",
3960
+ "nullable": true
3961
+ },
3962
+ "url": {
3963
+ "type": "string",
3964
+ "nullable": true
3965
+ },
3966
+ "discoveredAt": {
3967
+ "type": "string",
3968
+ "format": "date-time",
3969
+ "nullable": true
3970
+ }
3971
+ }
3972
+ },
3973
+ "extractedQuestion": {
3974
+ "type": "object",
3975
+ "properties": {
3976
+ "id": {
3977
+ "type": "string",
3978
+ "nullable": true
3979
+ },
3980
+ "text": {
3981
+ "type": "string",
3982
+ "nullable": true
3983
+ },
3984
+ "kind": {
3985
+ "type": "string",
3986
+ "nullable": true
3987
+ },
3988
+ "expectedAnswerShape": {
3989
+ "type": "string",
3990
+ "nullable": true
3991
+ },
3992
+ "section": {
3993
+ "type": "string",
3994
+ "nullable": true
3995
+ },
3996
+ "sourceExcerpt": {
3997
+ "type": "string",
3998
+ "nullable": true
3999
+ },
4000
+ "placeholder": {
4001
+ "type": "string",
4002
+ "nullable": true
4003
+ },
4004
+ "currentValue": {
4005
+ "type": "string",
4006
+ "nullable": true
4007
+ },
4008
+ "sourceStrategy": {
4009
+ "type": "string",
4010
+ "nullable": true
4011
+ },
4012
+ "suggestedDataSource": {
4013
+ "type": "string",
4014
+ "nullable": true
4015
+ },
4016
+ "location": {
4017
+ "$ref": "#/components/schemas/questionLocation"
4018
+ }
4019
+ }
4020
+ },
4021
+ "extractedQuestionSet": {
4022
+ "type": "object",
4023
+ "properties": {
4024
+ "isFillable": {
4025
+ "type": "boolean",
4026
+ "nullable": true
4027
+ },
4028
+ "questions": {
4029
+ "type": "array",
4030
+ "items": {
4031
+ "$ref": "#/components/schemas/extractedQuestion"
4032
+ },
4033
+ "nullable": true
4034
+ },
4035
+ "extractedAt": {
4036
+ "type": "string",
4037
+ "format": "date-time",
4038
+ "nullable": true
4039
+ }
4040
+ },
4041
+ "nullable": true
4042
+ },
4043
+ "funnelResponse": {
4044
+ "type": "object",
4045
+ "properties": {
4046
+ "windowDays": {
4047
+ "type": "integer",
4048
+ "format": "int32"
4049
+ },
4050
+ "countByStage": {
4051
+ "type": "object",
4052
+ "additionalProperties": {
4053
+ "type": "integer",
4054
+ "format": "int32"
4055
+ }
4056
+ },
4057
+ "conversionRates": {
4058
+ "type": "object",
4059
+ "additionalProperties": {
4060
+ "type": "number",
4061
+ "format": "double"
4062
+ }
4063
+ },
4064
+ "avgCycleDays": {
4065
+ "type": "object",
4066
+ "additionalProperties": {
4067
+ "type": "number",
4068
+ "format": "double"
4069
+ }
4070
+ },
4071
+ "wonCount": {
4072
+ "type": "integer",
4073
+ "format": "int32"
4074
+ },
4075
+ "lostCount": {
4076
+ "type": "integer",
4077
+ "format": "int32"
4078
+ },
4079
+ "winRatePct": {
4080
+ "type": "number",
4081
+ "format": "double",
4082
+ "nullable": true
4083
+ },
4084
+ "stageTransitionsInWindow": {
4085
+ "type": "object",
4086
+ "additionalProperties": {
4087
+ "type": "integer",
4088
+ "format": "int32"
4089
+ }
4090
+ }
4091
+ }
4092
+ },
4093
+ "ingestionAttachment": {
4094
+ "type": "object",
4095
+ "properties": {
4096
+ "name": {
4097
+ "type": "string",
4098
+ "nullable": true
4099
+ },
4100
+ "contentType": {
4101
+ "type": "string",
4102
+ "nullable": true
4103
+ },
4104
+ "blobPath": {
4105
+ "type": "string",
4106
+ "nullable": true
4107
+ },
4108
+ "sizeBytes": {
4109
+ "type": "integer",
4110
+ "format": "int64",
4111
+ "nullable": true
4112
+ }
4113
+ }
4114
+ },
4115
+ "ingestionRequest": {
4116
+ "type": "object",
4117
+ "properties": {
4118
+ "sourceType": {
4119
+ "type": "string",
4120
+ "nullable": true
4121
+ },
4122
+ "content": {
4123
+ "type": "string",
4124
+ "nullable": true
4125
+ },
4126
+ "title": {
4127
+ "type": "string",
4128
+ "nullable": true
4129
+ },
4130
+ "existingTenderId": {
4131
+ "type": "string",
4132
+ "nullable": true
4133
+ },
4134
+ "externalId": {
4135
+ "type": "string",
4136
+ "nullable": true
4137
+ },
4138
+ "attachments": {
4139
+ "type": "array",
4140
+ "items": {
4141
+ "$ref": "#/components/schemas/ingestionAttachment"
4142
+ },
4143
+ "nullable": true
4144
+ }
4145
+ }
4146
+ },
4147
+ "integrationHealthResult": {
4148
+ "type": "object",
4149
+ "properties": {
4150
+ "key": {
4151
+ "type": "string"
4152
+ },
4153
+ "status": {
4154
+ "type": "string"
4155
+ },
4156
+ "message": {
4157
+ "type": "string"
4158
+ }
4159
+ }
4160
+ },
4161
+ "listingCandidate": {
4162
+ "type": "object",
4163
+ "properties": {
4164
+ "url": {
4165
+ "type": "string"
4166
+ },
4167
+ "label": {
4168
+ "type": "string"
4169
+ },
4170
+ "confidence": {
4171
+ "type": "number",
4172
+ "format": "double"
4173
+ }
4174
+ }
4175
+ },
4176
+ "negotiateRequest": {
4177
+ "type": "object",
4178
+ "properties": {
4179
+ "groups": {
4180
+ "type": "array",
4181
+ "items": {
4182
+ "type": "string"
4183
+ }
4184
+ }
4185
+ }
4186
+ },
4187
+ "negotiateResponse": {
4188
+ "type": "object",
4189
+ "properties": {
4190
+ "url": {
4191
+ "type": "string"
4192
+ },
4193
+ "accessToken": {
4194
+ "type": "string"
4195
+ },
4196
+ "hubName": {
4197
+ "type": "string"
4198
+ },
4199
+ "groups": {
4200
+ "type": "array",
4201
+ "items": {
4202
+ "type": "string"
4203
+ }
4204
+ }
4205
+ }
4206
+ },
4207
+ "patchDocumentRequest": {
4208
+ "type": "object",
4209
+ "properties": {
4210
+ "isCompetenceMatrixSource": {
4211
+ "type": "boolean",
4212
+ "nullable": true
4213
+ }
4214
+ }
4215
+ },
4216
+ "patchDocumentResponse": {
4217
+ "type": "object",
4218
+ "properties": {
4219
+ "document": {
4220
+ "$ref": "#/components/schemas/tenderDocument"
4221
+ },
4222
+ "extractionJob": {
4223
+ "$ref": "#/components/schemas/agentJob"
4224
+ }
4225
+ }
4226
+ },
4227
+ "questionFillRequest": {
4228
+ "type": "object",
4229
+ "properties": {
4230
+ "consultantEmails": {
4231
+ "type": "array",
4232
+ "items": {
4233
+ "type": "string"
4234
+ },
4235
+ "nullable": true
4236
+ }
4237
+ }
4238
+ },
4239
+ "questionLocation": {
4240
+ "type": "object",
4241
+ "properties": {
4242
+ "xmlPart": {
4243
+ "type": "string",
4244
+ "nullable": true
4245
+ },
4246
+ "bodyIndex": {
4247
+ "type": "integer",
4248
+ "format": "int32",
4249
+ "nullable": true
4250
+ },
4251
+ "tableIndex": {
4252
+ "type": "integer",
4253
+ "format": "int32",
4254
+ "nullable": true
4255
+ },
4256
+ "rowIndex": {
4257
+ "type": "integer",
4258
+ "format": "int32",
4259
+ "nullable": true
4260
+ },
4261
+ "colIndex": {
4262
+ "type": "integer",
4263
+ "format": "int32",
4264
+ "nullable": true
4265
+ },
4266
+ "sdtId": {
4267
+ "type": "string",
4268
+ "nullable": true
4269
+ },
4270
+ "sheetName": {
4271
+ "type": "string",
4272
+ "nullable": true
4273
+ },
4274
+ "cellReference": {
4275
+ "type": "string",
4276
+ "nullable": true
4277
+ }
4278
+ },
4279
+ "nullable": true
4280
+ },
4281
+ "sendTenderSlackMessageRequest": {
4282
+ "type": "object",
4283
+ "properties": {
4284
+ "employeeName": {
4285
+ "type": "string",
4286
+ "nullable": true
4287
+ },
4288
+ "message": {
4289
+ "type": "string",
4290
+ "nullable": true
4291
+ }
4292
+ }
4293
+ },
4294
+ "sourceFile": {
4295
+ "type": "object",
4296
+ "properties": {
4297
+ "name": {
4298
+ "type": "string",
4299
+ "nullable": true
4300
+ },
4301
+ "url": {
4302
+ "type": "string",
4303
+ "nullable": true
4304
+ }
4305
+ }
4306
+ },
4307
+ "sourceSummary": {
4308
+ "type": "object",
4309
+ "properties": {
4310
+ "name": {
4311
+ "type": "string"
4312
+ },
4313
+ "seedUrl": {
4314
+ "type": "string"
4315
+ },
4316
+ "enabled": {
4317
+ "type": "boolean"
4318
+ },
4319
+ "hasPattern": {
4320
+ "type": "boolean"
4321
+ },
4322
+ "patternSampleCount": {
4323
+ "type": "integer",
4324
+ "format": "int32"
4325
+ },
4326
+ "patternBootstrappedAt": {
4327
+ "type": "string",
4328
+ "format": "date-time",
4329
+ "nullable": true
4330
+ }
4331
+ }
4332
+ },
4333
+ "tenderAudit": {
4334
+ "type": "object",
4335
+ "properties": {
4336
+ "createdAt": {
4337
+ "type": "string",
4338
+ "format": "date-time",
4339
+ "nullable": true
4340
+ },
4341
+ "updatedAt": {
4342
+ "type": "string",
4343
+ "format": "date-time",
4344
+ "nullable": true
4345
+ },
4346
+ "updatedBy": {
4347
+ "type": "string",
4348
+ "nullable": true
4349
+ }
4350
+ },
4351
+ "nullable": true
4352
+ },
4353
+ "tenderClassification": {
4354
+ "type": "object",
4355
+ "properties": {
4356
+ "technologies": {
4357
+ "type": "array",
4358
+ "items": {
4359
+ "type": "string"
4360
+ },
4361
+ "nullable": true
4362
+ },
4363
+ "competenceAreas": {
4364
+ "type": "array",
4365
+ "items": {
4366
+ "type": "string"
4367
+ },
4368
+ "nullable": true
4369
+ },
4370
+ "domains": {
4371
+ "type": "array",
4372
+ "items": {
4373
+ "type": "string"
4374
+ },
4375
+ "nullable": true
4376
+ },
4377
+ "languageRequirements": {
4378
+ "type": "array",
4379
+ "items": {
4380
+ "type": "string"
4381
+ },
4382
+ "nullable": true
4383
+ },
4384
+ "seniorityRequirements": {
4385
+ "type": "array",
4386
+ "items": {
4387
+ "type": "string"
4388
+ },
4389
+ "nullable": true
4390
+ },
4391
+ "securityRequirements": {
4392
+ "type": "array",
4393
+ "items": {
4394
+ "type": "string"
4395
+ },
4396
+ "nullable": true
4397
+ }
4398
+ },
4399
+ "nullable": true
4400
+ },
4401
+ "tenderCvProposal": {
4402
+ "type": "object",
4403
+ "properties": {
4404
+ "proposalId": {
4405
+ "type": "string",
4406
+ "nullable": true
4407
+ },
4408
+ "createdAt": {
4409
+ "type": "string",
4410
+ "format": "date-time",
4411
+ "nullable": true
4412
+ },
4413
+ "createdBy": {
4414
+ "type": "string",
4415
+ "nullable": true
4416
+ },
4417
+ "variants": {
4418
+ "type": "array",
4419
+ "items": {
4420
+ "$ref": "#/components/schemas/tenderCvVariant"
4421
+ },
4422
+ "nullable": true
4423
+ }
4424
+ }
4425
+ },
4426
+ "tenderCvVariant": {
4427
+ "type": "object",
4428
+ "properties": {
4429
+ "consultantEmail": {
4430
+ "type": "string",
4431
+ "nullable": true
4432
+ },
4433
+ "consultantName": {
4434
+ "type": "string",
4435
+ "nullable": true
4436
+ },
4437
+ "userId": {
4438
+ "type": "string",
4439
+ "nullable": true
4440
+ },
4441
+ "tailoredCvId": {
4442
+ "type": "string",
4443
+ "nullable": true
4444
+ },
4445
+ "attachmentId": {
4446
+ "type": "string",
4447
+ "nullable": true
4448
+ },
4449
+ "createdAt": {
4450
+ "type": "string",
4451
+ "format": "date-time",
4452
+ "nullable": true
4453
+ }
4454
+ }
4455
+ },
4456
+ "tenderDates": {
4457
+ "type": "object",
4458
+ "properties": {
4459
+ "foundAt": {
4460
+ "type": "string",
4461
+ "format": "date-time",
4462
+ "nullable": true
4463
+ },
4464
+ "publishedAt": {
4465
+ "type": "string",
4466
+ "format": "date-time",
4467
+ "nullable": true
4468
+ },
4469
+ "deadlineAt": {
4470
+ "type": "string",
4471
+ "format": "date-time",
4472
+ "nullable": true
4473
+ },
4474
+ "lastUpdatedAt": {
4475
+ "type": "string",
4476
+ "format": "date-time",
4477
+ "nullable": true
4478
+ }
4479
+ },
4480
+ "nullable": true
4481
+ },
4482
+ "tenderDocument": {
4483
+ "type": "object",
4484
+ "properties": {
4485
+ "id": {
4486
+ "type": "string",
4487
+ "nullable": true
4488
+ },
4489
+ "type": {
4490
+ "type": "string",
4491
+ "nullable": true
4492
+ },
4493
+ "title": {
4494
+ "type": "string",
4495
+ "nullable": true
4496
+ },
4497
+ "consultantId": {
4498
+ "type": "string",
4499
+ "nullable": true
4500
+ },
4501
+ "status": {
4502
+ "type": "string",
4503
+ "nullable": true
4504
+ },
4505
+ "reviewStatus": {
4506
+ "type": "string",
4507
+ "nullable": true
4508
+ },
4509
+ "sharepointUrl": {
4510
+ "type": "string",
4511
+ "nullable": true
4512
+ },
4513
+ "generatedAt": {
4514
+ "type": "string",
4515
+ "format": "date-time",
4516
+ "nullable": true
4517
+ },
4518
+ "lastReviewedAt": {
4519
+ "type": "string",
4520
+ "format": "date-time",
4521
+ "nullable": true
4522
+ },
4523
+ "blobPath": {
4524
+ "type": "string",
4525
+ "nullable": true
4526
+ },
4527
+ "blobUrl": {
4528
+ "type": "string",
4529
+ "nullable": true
4530
+ },
4531
+ "sourceUrl": {
4532
+ "type": "string",
4533
+ "nullable": true
4534
+ },
4535
+ "mimeType": {
4536
+ "type": "string",
4537
+ "nullable": true
4538
+ },
4539
+ "sizeBytes": {
4540
+ "type": "integer",
4541
+ "format": "int64",
4542
+ "nullable": true
4543
+ },
4544
+ "downloadedAt": {
4545
+ "type": "string",
4546
+ "format": "date-time",
4547
+ "nullable": true
4548
+ },
4549
+ "textContent": {
4550
+ "type": "string",
4551
+ "nullable": true
4552
+ },
4553
+ "isCompetenceMatrixSource": {
4554
+ "type": "boolean",
4555
+ "nullable": true
4556
+ },
4557
+ "classificationReasoning": {
4558
+ "type": "string",
4559
+ "nullable": true
4560
+ },
4561
+ "extractedQuestions": {
4562
+ "$ref": "#/components/schemas/extractedQuestionSet"
4563
+ },
4564
+ "questionAnswers": {
4565
+ "type": "array",
4566
+ "items": {
4567
+ "$ref": "#/components/schemas/consultantAnswers"
4568
+ },
4569
+ "nullable": true
4570
+ },
4571
+ "extractionStatus": {
4572
+ "type": "string",
4573
+ "nullable": true
4574
+ },
4575
+ "extractionError": {
4576
+ "type": "string",
4577
+ "nullable": true
4578
+ },
4579
+ "extractionStartedAt": {
4580
+ "type": "string",
4581
+ "format": "date-time",
4582
+ "nullable": true
4583
+ }
4584
+ }
4585
+ },
4586
+ "tenderInfo": {
4587
+ "type": "object",
4588
+ "properties": {
4589
+ "title": {
4590
+ "type": "string",
4591
+ "nullable": true
4592
+ },
4593
+ "customer": {
4594
+ "type": "string",
4595
+ "nullable": true
4596
+ },
4597
+ "country": {
4598
+ "type": "string",
4599
+ "nullable": true
4600
+ },
4601
+ "location": {
4602
+ "type": "string",
4603
+ "nullable": true
4604
+ },
4605
+ "workMode": {
4606
+ "type": "string",
4607
+ "nullable": true
4608
+ }
4609
+ },
4610
+ "nullable": true
4611
+ },
4612
+ "tenderParser": {
4613
+ "type": "object",
4614
+ "properties": {
4615
+ "lastRunAt": {
4616
+ "type": "string",
4617
+ "format": "date-time",
4618
+ "nullable": true
4619
+ },
4620
+ "status": {
4621
+ "type": "string",
4622
+ "nullable": true
4623
+ },
4624
+ "version": {
4625
+ "type": "string",
4626
+ "nullable": true
4627
+ },
4628
+ "confidence": {
4629
+ "type": "number",
4630
+ "format": "double",
4631
+ "nullable": true
4632
+ },
4633
+ "warnings": {
4634
+ "type": "array",
4635
+ "items": {
4636
+ "type": "string"
4637
+ },
4638
+ "nullable": true
4639
+ }
4640
+ },
4641
+ "nullable": true
4642
+ },
4643
+ "tenderSalesforce": {
4644
+ "type": "object",
4645
+ "properties": {
4646
+ "opportunityId": {
4647
+ "type": "string",
4648
+ "nullable": true
4649
+ },
4650
+ "stageName": {
4651
+ "type": "string",
4652
+ "nullable": true
4653
+ },
4654
+ "isClosed": {
4655
+ "type": "boolean",
4656
+ "nullable": true
4657
+ },
4658
+ "isWon": {
4659
+ "type": "boolean",
4660
+ "nullable": true
4661
+ },
4662
+ "url": {
4663
+ "type": "string",
4664
+ "nullable": true
4665
+ },
4666
+ "lastSyncedAt": {
4667
+ "type": "string",
4668
+ "format": "date-time",
4669
+ "nullable": true
4670
+ }
4671
+ },
4672
+ "nullable": true
4673
+ },
4674
+ "tenderSource": {
4675
+ "type": "object",
4676
+ "properties": {
4677
+ "externalTenderId": {
4678
+ "type": "string",
4679
+ "nullable": true
4680
+ },
4681
+ "sourceSystem": {
4682
+ "type": "string",
4683
+ "nullable": true
4684
+ },
4685
+ "sourceUrl": {
4686
+ "type": "string",
4687
+ "nullable": true
4688
+ },
4689
+ "sourceFiles": {
4690
+ "type": "array",
4691
+ "items": {
4692
+ "$ref": "#/components/schemas/sourceFile"
4693
+ },
4694
+ "nullable": true
4695
+ },
4696
+ "additionalSources": {
4697
+ "type": "array",
4698
+ "items": {
4699
+ "$ref": "#/components/schemas/externalSourceRef"
4700
+ },
4701
+ "nullable": true
4702
+ }
4703
+ },
4704
+ "nullable": true
4705
+ },
4706
+ "tenderStatsResponse": {
4707
+ "type": "object",
4708
+ "properties": {
4709
+ "byStatus": {
4710
+ "type": "object",
4711
+ "additionalProperties": {
4712
+ "type": "integer",
4713
+ "format": "int32"
4714
+ }
4715
+ },
4716
+ "byStage": {
4717
+ "type": "object",
4718
+ "additionalProperties": {
4719
+ "type": "integer",
4720
+ "format": "int32"
4721
+ }
4722
+ },
4723
+ "byHealth": {
4724
+ "type": "object",
4725
+ "additionalProperties": {
4726
+ "type": "integer",
4727
+ "format": "int32"
4728
+ }
4729
+ },
4730
+ "total": {
4731
+ "type": "integer",
4732
+ "format": "int32"
4733
+ },
4734
+ "windowDays": {
4735
+ "type": "integer",
4736
+ "format": "int32"
4737
+ },
4738
+ "tendersInWindow": {
4739
+ "type": "integer",
4740
+ "format": "int32"
4741
+ },
4742
+ "consultantsMatched": {
4743
+ "type": "integer",
4744
+ "format": "int32"
4745
+ },
4746
+ "avgTimeToMatchHours": {
4747
+ "type": "number",
4748
+ "format": "double",
4749
+ "nullable": true
4750
+ }
4751
+ }
4752
+ },
4753
+ "tenderStatus": {
4754
+ "type": "object",
4755
+ "properties": {
4756
+ "stage": {
4757
+ "type": "string",
4758
+ "nullable": true
4759
+ },
4760
+ "state": {
4761
+ "type": "string",
4762
+ "nullable": true
4763
+ },
4764
+ "health": {
4765
+ "type": "string",
4766
+ "nullable": true
4767
+ }
4768
+ },
4769
+ "nullable": true
4770
+ },
4771
+ "tenderTodo": {
4772
+ "type": "object",
4773
+ "properties": {
4774
+ "id": {
4775
+ "type": "string",
4776
+ "nullable": true
4777
+ },
4778
+ "title": {
4779
+ "type": "string",
4780
+ "nullable": true
4781
+ },
4782
+ "description": {
4783
+ "type": "string",
4784
+ "nullable": true
4785
+ },
4786
+ "source": {
4787
+ "type": "string",
4788
+ "nullable": true
4789
+ },
4790
+ "category": {
4791
+ "type": "string",
4792
+ "nullable": true
4793
+ },
4794
+ "priority": {
4795
+ "type": "string",
4796
+ "nullable": true
4797
+ },
4798
+ "status": {
4799
+ "type": "string",
4800
+ "nullable": true
4801
+ },
4802
+ "assignedTo": {
4803
+ "type": "string",
4804
+ "nullable": true
4805
+ },
4806
+ "dueAt": {
4807
+ "type": "string",
4808
+ "format": "date-time",
4809
+ "nullable": true
4810
+ },
4811
+ "completedAt": {
4812
+ "type": "string",
4813
+ "format": "date-time",
4814
+ "nullable": true
4815
+ }
4816
+ }
4817
+ },
4818
+ "tenderView": {
4819
+ "type": "object",
4820
+ "properties": {
4821
+ "id": {
4822
+ "type": "string",
4823
+ "nullable": true
4824
+ },
4825
+ "type": {
4826
+ "type": "string",
4827
+ "nullable": true
4828
+ },
4829
+ "slug": {
4830
+ "type": "string",
4831
+ "nullable": true
4832
+ },
4833
+ "source": {
4834
+ "$ref": "#/components/schemas/tenderSource"
4835
+ },
4836
+ "info": {
4837
+ "$ref": "#/components/schemas/tenderInfo"
4838
+ },
4839
+ "dates": {
4840
+ "$ref": "#/components/schemas/tenderDates"
4841
+ },
4842
+ "status": {
4843
+ "$ref": "#/components/schemas/tenderStatus"
4844
+ },
4845
+ "classification": {
4846
+ "$ref": "#/components/schemas/tenderClassification"
4847
+ },
4848
+ "parser": {
4849
+ "$ref": "#/components/schemas/tenderParser"
4850
+ },
4851
+ "todos": {
4852
+ "type": "array",
4853
+ "items": {
4854
+ "$ref": "#/components/schemas/tenderTodo"
4855
+ },
4856
+ "nullable": true
4857
+ },
4858
+ "documents": {
4859
+ "type": "array",
4860
+ "items": {
4861
+ "$ref": "#/components/schemas/tenderDocument"
4862
+ },
4863
+ "nullable": true
4864
+ },
4865
+ "businessIds": {
4866
+ "type": "array",
4867
+ "items": {
4868
+ "type": "string"
4869
+ },
4870
+ "nullable": true
4871
+ },
4872
+ "consultantMatches": {
4873
+ "type": "array",
4874
+ "items": {
4875
+ "$ref": "#/components/schemas/consultantMatch"
4876
+ },
4877
+ "nullable": true
4878
+ },
4879
+ "assignedConsultants": {
4880
+ "type": "array",
4881
+ "items": {
4882
+ "$ref": "#/components/schemas/assignedConsultant"
4883
+ },
4884
+ "nullable": true
4885
+ },
4886
+ "cvProposal": {
4887
+ "$ref": "#/components/schemas/tenderCvProposal"
4888
+ },
4889
+ "audit": {
4890
+ "$ref": "#/components/schemas/tenderAudit"
4891
+ },
4892
+ "description": {
4893
+ "type": "string",
4894
+ "nullable": true
4895
+ },
4896
+ "summary": {
4897
+ "type": "string",
4898
+ "nullable": true
4899
+ },
4900
+ "timeline": {
4901
+ "type": "array",
4902
+ "items": {
4903
+ "$ref": "#/components/schemas/timelineEvent"
4904
+ },
4905
+ "nullable": true
4906
+ },
4907
+ "blobContainer": {
4908
+ "type": "string",
4909
+ "nullable": true
4910
+ },
4911
+ "salesforce": {
4912
+ "$ref": "#/components/schemas/tenderSalesforce"
4913
+ }
4914
+ }
4915
+ },
4916
+ "timelineEvent": {
4917
+ "type": "object",
4918
+ "properties": {
4919
+ "id": {
4920
+ "type": "string",
4921
+ "nullable": true
4922
+ },
4923
+ "title": {
4924
+ "type": "string",
4925
+ "nullable": true
4926
+ },
4927
+ "description": {
4928
+ "type": "string",
4929
+ "nullable": true
4930
+ },
4931
+ "dueAt": {
4932
+ "type": "string",
4933
+ "format": "date-time",
4934
+ "nullable": true
4935
+ },
4936
+ "category": {
4937
+ "type": "string",
4938
+ "nullable": true
4939
+ },
4940
+ "mandatory": {
4941
+ "type": "boolean",
4942
+ "nullable": true
4943
+ },
4944
+ "status": {
4945
+ "type": "string",
4946
+ "nullable": true
4947
+ }
4948
+ }
4949
+ },
4950
+ "updateSalesforceStageRequest": {
4951
+ "type": "object",
4952
+ "properties": {
4953
+ "stageName": {
4954
+ "type": "string"
4955
+ }
4956
+ }
4957
+ },
4958
+ "zombieReapResult": {
4959
+ "type": "object",
4960
+ "properties": {
4961
+ "scanned": {
4962
+ "type": "integer",
4963
+ "format": "int32"
4964
+ },
4965
+ "reaped": {
4966
+ "type": "integer",
4967
+ "format": "int32"
4968
+ },
4969
+ "reapedJobIds": {
4970
+ "type": "array",
4971
+ "items": {
4972
+ "type": "string"
4973
+ }
4974
+ }
4975
+ }
4976
+ }
4977
+ },
4978
+ "securitySchemes": {
4979
+ "Implicit": {
4980
+ "type": "oauth2",
4981
+ "flows": {
4982
+ "implicit": {
4983
+ "authorizationUrl": "https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize",
4984
+ "tokenUrl": "https://login.microsoftonline.com/organizations/oauth2/v2.0/token",
4985
+ "refreshUrl": "https://login.microsoftonline.com/organizations/oauth2/v2.0/token",
4986
+ "scopes": {
4987
+ "api://b2c47b20-df4a-49b5-a7ee-87f3647ab227/.default": "Default function scope"
4988
+ }
4989
+ }
4990
+ }
4991
+ },
4992
+ "ApiKey": {
4993
+ "type": "http",
4994
+ "scheme": "bearer",
4995
+ "bearerFormat": "JWT"
4996
+ }
4997
+ }
4998
+ }
4999
+ }